1This is gcc.info, produced by makeinfo version 6.5 from gcc.texi.
2
3Copyright (C) 1988-2019 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.
29END-INFO-DIR-ENTRY
30
31 This file documents the use of the GNU compilers.
32
33 Copyright (C) 1988-2019 Free Software Foundation, Inc.
34
35 Permission is granted to copy, distribute and/or modify this document
36under the terms of the GNU Free Documentation License, Version 1.3 or
37any later version published by the Free Software Foundation; with the
38Invariant Sections being "Funding Free Software", the Front-Cover Texts
39being (a) (see below), and with the Back-Cover Texts being (b) (see
40below).  A copy of the license is included in the section entitled "GNU
41Free Documentation License".
42
43 (a) The FSF's Front-Cover Text is:
44
45 A GNU Manual
46
47 (b) The FSF's Back-Cover Text is:
48
49 You have freedom to copy and modify this GNU Manual, like GNU software.
50Copies published by the Free Software Foundation raise funds for GNU
51development.
52
53
54File: gcc.info,  Node: Top,  Next: G++ and GCC
55
56Introduction
57************
58
59This manual documents how to use the GNU compilers, as well as their
60features and incompatibilities, and how to report bugs.  It corresponds
61to the compilers (GCC) version 9.4.0.  The internals of the GNU
62compilers, including how to port them to new targets and some
63information about how to write front ends for new languages, are
64documented in a separate manual.  *Note Introduction: (gccint)Top.
65
66* Menu:
67
68* G++ and GCC::     You can compile C or C++ programs.
69* Standards::       Language standards supported by GCC.
70* Invoking GCC::    Command options supported by 'gcc'.
71* C Implementation:: How GCC implements the ISO C specification.
72* C++ Implementation:: How GCC implements the ISO C++ specification.
73* C Extensions::    GNU extensions to the C language family.
74* C++ Extensions::  GNU extensions to the C++ language.
75* Objective-C::     GNU Objective-C runtime features.
76* Compatibility::   Binary Compatibility
77* Gcov::            'gcov'--a test coverage program.
78* Gcov-tool::       'gcov-tool'--an offline gcda profile processing program.
79* Gcov-dump::       'gcov-dump'--an offline gcda and gcno profile dump tool.
80* Trouble::         If you have trouble using GCC.
81* Bugs::            How, why and where to report bugs.
82* Service::         How To Get Help with GCC
83* Contributing::    How to contribute to testing and developing GCC.
84
85* Funding::         How to help assure funding for free software.
86* GNU Project::     The GNU Project and GNU/Linux.
87
88* Copying::         GNU General Public License says
89                    how you can copy and share GCC.
90* GNU Free Documentation License:: How you can copy and share this manual.
91* Contributors::    People who have contributed to GCC.
92
93* Option Index::    Index to command line options.
94* Keyword Index::   Index of concepts and symbol names.
95
96
97File: gcc.info,  Node: G++ and GCC,  Next: Standards,  Up: Top
98
991 Programming Languages Supported by GCC
100****************************************
101
102GCC stands for "GNU Compiler Collection".  GCC is an integrated
103distribution of compilers for several major programming languages.
104These languages currently include C, C++, Objective-C, Objective-C++,
105Fortran, Ada, D, Go, and BRIG (HSAIL).
106
107 The abbreviation "GCC" has multiple meanings in common use.  The
108current official meaning is "GNU Compiler Collection", which refers
109generically to the complete suite of tools.  The name historically stood
110for "GNU C Compiler", and this usage is still common when the emphasis
111is on compiling C programs.  Finally, the name is also used when
112speaking of the "language-independent" component of GCC: code shared
113among the compilers for all supported languages.
114
115 The language-independent component of GCC includes the majority of the
116optimizers, as well as the "back ends" that generate machine code for
117various processors.
118
119 The part of a compiler that is specific to a particular language is
120called the "front end".  In addition to the front ends that are
121integrated components of GCC, there are several other front ends that
122are maintained separately.  These support languages such as Mercury, and
123COBOL.  To use these, they must be built together with GCC proper.
124
125 Most of the compilers for languages other than C have their own names.
126The C++ compiler is G++, the Ada compiler is GNAT, and so on.  When we
127talk about compiling one of those languages, we might refer to that
128compiler by its own name, or as GCC.  Either is correct.
129
130 Historically, compilers for many languages, including C++ and Fortran,
131have been implemented as "preprocessors" which emit another high level
132language such as C.  None of the compilers included in GCC are
133implemented this way; they all generate machine code directly.  This
134sort of preprocessor should not be confused with the "C preprocessor",
135which is an integral feature of the C, C++, Objective-C and
136Objective-C++ languages.
137
138
139File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top
140
1412 Language Standards Supported by GCC
142*************************************
143
144For each language compiled by GCC for which there is a standard, GCC
145attempts to follow one or more versions of that standard, possibly with
146some exceptions, and possibly with some extensions.
147
1482.1 C Language
149==============
150
151The original ANSI C standard (X3.159-1989) was ratified in 1989 and
152published in 1990.  This standard was ratified as an ISO standard
153(ISO/IEC 9899:1990) later in 1990.  There were no technical differences
154between these publications, although the sections of the ANSI standard
155were renumbered and became clauses in the ISO standard.  The ANSI
156standard, but not the ISO standard, also came with a Rationale document.
157This standard, in both its forms, is commonly known as "C89", or
158occasionally as "C90", from the dates of ratification.  To select this
159standard in GCC, use one of the options '-ansi', '-std=c90' or
160'-std=iso9899:1990'; to obtain all the diagnostics required by the
161standard, you should also specify '-pedantic' (or '-pedantic-errors' if
162you want them to be errors rather than warnings).  *Note Options
163Controlling C Dialect: C Dialect Options.
164
165 Errors in the 1990 ISO C standard were corrected in two Technical
166Corrigenda published in 1994 and 1996.  GCC does not support the
167uncorrected version.
168
169 An amendment to the 1990 standard was published in 1995.  This
170amendment added digraphs and '__STDC_VERSION__' to the language, but
171otherwise concerned the library.  This amendment is commonly known as
172"AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
173select this standard in GCC, use the option '-std=iso9899:199409' (with,
174as for other standard versions, '-pedantic' to receive all required
175diagnostics).
176
177 A new edition of the ISO C standard was published in 1999 as ISO/IEC
1789899:1999, and is commonly known as "C99".  (While in development,
179drafts of this standard version were referred to as "C9X".) GCC has
180substantially complete support for this standard version; see
181<http://gcc.gnu.org/c99status.html> for details.  To select this
182standard, use '-std=c99' or '-std=iso9899:1999'.
183
184 Errors in the 1999 ISO C standard were corrected in three Technical
185Corrigenda published in 2001, 2004 and 2007.  GCC does not support the
186uncorrected version.
187
188 A fourth version of the C standard, known as "C11", was published in
1892011 as ISO/IEC 9899:2011.  (While in development, drafts of this
190standard version were referred to as "C1X".) GCC has substantially
191complete support for this standard, enabled with '-std=c11' or
192'-std=iso9899:2011'.  A version with corrections integrated was prepared
193in 2017 and published in 2018 as ISO/IEC 9899:2018; it is known as "C17"
194and is supported with '-std=c17' or '-std=iso9899:2017'; the corrections
195are also applied with '-std=c11', and the only difference between the
196options is the value of '__STDC_VERSION__'.
197
198 A further version of the C standard, known as "C2X", is under
199development; experimental and incomplete support for this is enabled
200with '-std=c2x'.
201
202 By default, GCC provides some extensions to the C language that, on
203rare occasions conflict with the C standard.  *Note Extensions to the C
204Language Family: C Extensions.  Some features that are part of the C99
205standard are accepted as extensions in C90 mode, and some features that
206are part of the C11 standard are accepted as extensions in C90 and C99
207modes.  Use of the '-std' options listed above disables these extensions
208where they conflict with the C standard version selected.  You may also
209select an extended version of the C language explicitly with
210'-std=gnu90' (for C90 with GNU extensions), '-std=gnu99' (for C99 with
211GNU extensions) or '-std=gnu11' (for C11 with GNU extensions).
212
213 The default, if no C language dialect options are given, is
214'-std=gnu11'.
215
216 The ISO C standard defines (in clause 4) two classes of conforming
217implementation.  A "conforming hosted implementation" supports the whole
218standard including all the library facilities; a "conforming
219freestanding implementation" is only required to provide certain library
220facilities: those in '<float.h>', '<limits.h>', '<stdarg.h>', and
221'<stddef.h>'; since AMD1, also those in '<iso646.h>'; since C99, also
222those in '<stdbool.h>' and '<stdint.h>'; and since C11, also those in
223'<stdalign.h>' and '<stdnoreturn.h>'.  In addition, complex types, added
224in C99, are not required for freestanding implementations.
225
226 The standard also defines two environments for programs, a
227"freestanding environment", required of all implementations and which
228may not have library facilities beyond those required of freestanding
229implementations, where the handling of program startup and termination
230are implementation-defined; and a "hosted environment", which is not
231required, in which all the library facilities are provided and startup
232is through a function 'int main (void)' or 'int main (int, char *[])'.
233An OS kernel is an example of a program running in a freestanding
234environment; a program using the facilities of an operating system is an
235example of a program running in a hosted environment.
236
237 GCC aims towards being usable as a conforming freestanding
238implementation, or as the compiler for a conforming hosted
239implementation.  By default, it acts as the compiler for a hosted
240implementation, defining '__STDC_HOSTED__' as '1' and presuming that
241when the names of ISO C functions are used, they have the semantics
242defined in the standard.  To make it act as a conforming freestanding
243implementation for a freestanding environment, use the option
244'-ffreestanding'; it then defines '__STDC_HOSTED__' to '0' and does not
245make assumptions about the meanings of function names from the standard
246library, with exceptions noted below.  To build an OS kernel, you may
247well still need to make your own arrangements for linking and startup.
248*Note Options Controlling C Dialect: C Dialect Options.
249
250 GCC does not provide the library facilities required only of hosted
251implementations, nor yet all the facilities required by C99 of
252freestanding implementations on all platforms.  To use the facilities of
253a hosted environment, you need to find them elsewhere (for example, in
254the GNU C library).  *Note Standard Libraries: Standard Libraries.
255
256 Most of the compiler support routines used by GCC are present in
257'libgcc', but there are a few exceptions.  GCC requires the freestanding
258environment provide 'memcpy', 'memmove', 'memset' and 'memcmp'.
259Finally, if '__builtin_trap' is used, and the target does not implement
260the 'trap' pattern, then GCC emits a call to 'abort'.
261
262 For references to Technical Corrigenda, Rationale documents and
263information concerning the history of C that is available online, see
264<http://gcc.gnu.org/readings.html>
265
2662.2 C++ Language
267================
268
269GCC supports the original ISO C++ standard published in 1998, and the
2702011 and 2014 revisions.
271
272 The original ISO C++ standard was published as the ISO standard
273(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
2742003 (ISO/IEC 14882:2003).  These standards are referred to as C++98 and
275C++03, respectively.  GCC implements the majority of C++98 ('export' is
276a notable exception) and most of the changes in C++03.  To select this
277standard in GCC, use one of the options '-ansi', '-std=c++98', or
278'-std=c++03'; to obtain all the diagnostics required by the standard,
279you should also specify '-pedantic' (or '-pedantic-errors' if you want
280them to be errors rather than warnings).
281
282 A revised ISO C++ standard was published in 2011 as ISO/IEC 14882:2011,
283and is referred to as C++11; before its publication it was commonly
284referred to as C++0x.  C++11 contains several changes to the C++
285language, all of which have been implemented in GCC.  For details see
286<https://gcc.gnu.org/projects/cxx-status.html#cxx11>.  To select this
287standard in GCC, use the option '-std=c++11'.
288
289 Another revised ISO C++ standard was published in 2014 as ISO/IEC
29014882:2014, and is referred to as C++14; before its publication it was
291sometimes referred to as C++1y.  C++14 contains several further changes
292to the C++ language, all of which have been implemented in GCC.  For
293details see <https://gcc.gnu.org/projects/cxx-status.html#cxx14>.  To
294select this standard in GCC, use the option '-std=c++14'.
295
296 The C++ language was further revised in 2017 and ISO/IEC 14882:2017 was
297published.  This is referred to as C++17, and before publication was
298often referred to as C++1z.  GCC supports all the changes in the new
299specification.  For further details see
300<https://gcc.gnu.org/projects/cxx-status.html#cxx1z>.  Use the option
301'-std=c++17' to select this variant of C++.
302
303 More information about the C++ standards is available on the ISO C++
304committee's web site at <http://www.open-std.org/jtc1/sc22/wg21/>.
305
306 To obtain all the diagnostics required by any of the standard versions
307described above you should specify '-pedantic' or '-pedantic-errors',
308otherwise GCC will allow some non-ISO C++ features as extensions.  *Note
309Warning Options::.
310
311 By default, GCC also provides some additional extensions to the C++
312language that on rare occasions conflict with the C++ standard.  *Note
313Options Controlling C++ Dialect: C++ Dialect Options.  Use of the '-std'
314options listed above disables these extensions where they they conflict
315with the C++ standard version selected.  You may also select an extended
316version of the C++ language explicitly with '-std=gnu++98' (for C++98
317with GNU extensions), or '-std=gnu++11' (for C++11 with GNU extensions),
318or '-std=gnu++14' (for C++14 with GNU extensions), or '-std=gnu++17'
319(for C++17 with GNU extensions).
320
321 The default, if no C++ language dialect options are given, is
322'-std=gnu++14'.
323
3242.3 Objective-C and Objective-C++ Languages
325===========================================
326
327GCC supports "traditional" Objective-C (also known as "Objective-C 1.0")
328and contains support for the Objective-C exception and synchronization
329syntax.  It has also support for a number of "Objective-C 2.0" language
330extensions, including properties, fast enumeration (only for
331Objective-C), method attributes and the @optional and @required keywords
332in protocols.  GCC supports Objective-C++ and features available in
333Objective-C are also available in Objective-C++.
334
335 GCC by default uses the GNU Objective-C runtime library, which is part
336of GCC and is not the same as the Apple/NeXT Objective-C runtime library
337used on Apple systems.  There are a number of differences documented in
338this manual.  The options '-fgnu-runtime' and '-fnext-runtime' allow you
339to switch between producing output that works with the GNU Objective-C
340runtime library and output that works with the Apple/NeXT Objective-C
341runtime library.
342
343 There is no formal written standard for Objective-C or Objective-C++.
344The authoritative manual on traditional Objective-C (1.0) is
345"Object-Oriented Programming and the Objective-C Language":
346<http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf> is
347the original NeXTstep document.
348
349 The Objective-C exception and synchronization syntax (that is, the
350keywords '@try', '@throw', '@catch', '@finally' and '@synchronized') is
351supported by GCC and is enabled with the option '-fobjc-exceptions'.
352The syntax is briefly documented in this manual and in the Objective-C
3532.0 manuals from Apple.
354
355 The Objective-C 2.0 language extensions and features are automatically
356enabled; they include properties (via the '@property', '@synthesize' and
357'@dynamic keywords'), fast enumeration (not available in Objective-C++),
358attributes for methods (such as 'deprecated', 'noreturn', 'sentinel',
359'format'), the 'unused' attribute for method arguments, the '@package'
360keyword for instance variables and the '@optional' and '@required'
361keywords in protocols.  You can disable all these Objective-C 2.0
362language extensions with the option '-fobjc-std=objc1', which causes the
363compiler to recognize the same Objective-C language syntax recognized by
364GCC 4.0, and to produce an error if one of the new features is used.
365
366 GCC has currently no support for non-fragile instance variables.
367
368 The authoritative manual on Objective-C 2.0 is available from Apple:
369   *
370     <https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html>
371
372 For more information concerning the history of Objective-C that is
373available online, see <http://gcc.gnu.org/readings.html>
374
3752.4 Go Language
376===============
377
378As of the GCC 4.7.1 release, GCC supports the Go 1 language standard,
379described at <https://golang.org/doc/go1>.
380
3812.5 HSA Intermediate Language (HSAIL)
382=====================================
383
384GCC can compile the binary representation (BRIG) of the HSAIL text
385format as described in HSA Programmer's Reference Manual version 1.0.1.
386This capability is typically utilized to implement the HSA runtime API's
387HSAIL finalization extension for a gcc supported processor.  HSA
388standards are freely available at
389<http://www.hsafoundation.com/standards/>.
390
3912.6 D language
392==============
393
394GCC supports the D 2.0 programming language.  The D language itself is
395currently defined by its reference implementation and supporting
396language specification, described at <https://dlang.org/spec/spec.html>.
397
3982.7 References for Other Languages
399==================================
400
401*Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
402conformance and compatibility of the Ada compiler.
403
404 *Note Standards: (gfortran)Standards, for details of standards
405supported by GNU Fortran.
406
407
408File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
409
4103 GCC Command Options
411*********************
412
413When you invoke GCC, it normally does preprocessing, compilation,
414assembly and linking.  The "overall options" allow you to stop this
415process at an intermediate stage.  For example, the '-c' option says not
416to run the linker.  Then the output consists of object files output by
417the assembler.  *Note Options Controlling the Kind of Output: Overall
418Options.
419
420 Other options are passed on to one or more stages of processing.  Some
421options control the preprocessor and others the compiler itself.  Yet
422other options control the assembler and linker; most of these are not
423documented here, since you rarely need to use any of them.
424
425 Most of the command-line options that you can use with GCC are useful
426for C programs; when an option is only useful with another language
427(usually C++), the explanation says so explicitly.  If the description
428for a particular option does not mention a source language, you can use
429that option with all supported languages.
430
431 The usual way to run GCC is to run the executable called 'gcc', or
432'MACHINE-gcc' when cross-compiling, or 'MACHINE-gcc-VERSION' to run a
433specific version of GCC. When you compile C++ programs, you should
434invoke GCC as 'g++' instead.  *Note Compiling C++ Programs: Invoking
435G++, for information about the differences in behavior between 'gcc' and
436'g++' when compiling C++ programs.
437
438 The 'gcc' program accepts options and file names as operands.  Many
439options have multi-letter names; therefore multiple single-letter
440options may _not_ be grouped: '-dv' is very different from '-d -v'.
441
442 You can mix options and other arguments.  For the most part, the order
443you use doesn't matter.  Order does matter when you use several options
444of the same kind; for example, if you specify '-L' more than once, the
445directories are searched in the order specified.  Also, the placement of
446the '-l' option is significant.
447
448 Many options have long names starting with '-f' or with '-W'--for
449example, '-fmove-loop-invariants', '-Wformat' and so on.  Most of these
450have both positive and negative forms; the negative form of '-ffoo' is
451'-fno-foo'.  This manual documents only one of these two forms,
452whichever one is not the default.
453
454 Some options take one or more arguments typically separated either by a
455space or by the equals sign ('=') from the option name.  Unless
456documented otherwise, an argument can be either numeric or a string.
457Numeric arguments must typically be small unsigned decimal or
458hexadecimal integers.  Hexadecimal arguments must begin with the '0x'
459prefix.  Arguments to options that specify a size threshold of some sort
460may be arbitrarily large decimal or hexadecimal integers followed by a
461byte size suffix designating a multiple of bytes such as 'kB' and 'KiB'
462for kilobyte and kibibyte, respectively, 'MB' and 'MiB' for megabyte and
463mebibyte, 'GB' and 'GiB' for gigabyte and gigibyte, and so on.  Such
464arguments are designated by BYTE-SIZE in the following text.  Refer to
465the NIST, IEC, and other relevant national and international standards
466for the full listing and explanation of the binary and decimal byte size
467prefixes.
468
469 *Note Option Index::, for an index to GCC's options.
470
471* Menu:
472
473* Option Summary::      Brief list of all options, without explanations.
474* Overall Options::     Controlling the kind of output:
475                        an executable, object files, assembler files,
476                        or preprocessed source.
477* Invoking G++::        Compiling C++ programs.
478* C Dialect Options::   Controlling the variant of C language compiled.
479* C++ Dialect Options:: Variations on C++.
480* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
481                        and Objective-C++.
482* Diagnostic Message Formatting Options:: Controlling how diagnostics should
483                        be formatted.
484* Warning Options::     How picky should the compiler be?
485* Debugging Options::   Producing debuggable code.
486* Optimize Options::    How much optimization?
487* Instrumentation Options:: Enabling profiling and extra run-time error checking.
488* Preprocessor Options:: Controlling header files and macro definitions.
489                         Also, getting dependency information for Make.
490* Assembler Options::   Passing options to the assembler.
491* Link Options::        Specifying libraries and so on.
492* Directory Options::   Where to find header files and libraries.
493                        Where to find the compiler executable files.
494* Code Gen Options::    Specifying conventions for function calls, data layout
495                        and register usage.
496* Developer Options::   Printing GCC configuration info, statistics, and
497                        debugging dumps.
498* Submodel Options::    Target-specific options, such as compiling for a
499                        specific processor variant.
500* Spec Files::          How to pass switches to sub-processes.
501* Environment Variables:: Env vars that affect GCC.
502* Precompiled Headers:: Compiling a header once, and using it many times.
503
504
505File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
506
5073.1 Option Summary
508==================
509
510Here is a summary of all the options, grouped by type.  Explanations are
511in the following sections.
512
513_Overall Options_
514     *Note Options Controlling the Kind of Output: Overall Options.
515          -c  -S  -E  -o FILE  -x LANGUAGE
516          -v  -###  --help[=CLASS[,...]]  --target-help  --version
517          -pass-exit-codes  -pipe  -specs=FILE  -wrapper
518          @FILE  -ffile-prefix-map=OLD=NEW
519          -fplugin=FILE  -fplugin-arg-NAME=ARG
520          -fdump-ada-spec[-slim]  -fada-spec-parent=UNIT  -fdump-go-spec=FILE
521
522_C Language Options_
523     *Note Options Controlling C Dialect: C Dialect Options.
524          -ansi  -std=STANDARD  -fgnu89-inline
525          -fpermitted-flt-eval-methods=STANDARD
526          -aux-info FILENAME  -fallow-parameterless-variadic-functions
527          -fno-asm  -fno-builtin  -fno-builtin-FUNCTION  -fgimple
528          -fhosted  -ffreestanding
529          -fopenacc  -fopenacc-dim=GEOM
530          -fopenmp  -fopenmp-simd
531          -fms-extensions  -fplan9-extensions  -fsso-struct=ENDIANNESS
532          -fallow-single-precision  -fcond-mismatch  -flax-vector-conversions
533          -fsigned-bitfields  -fsigned-char
534          -funsigned-bitfields  -funsigned-char
535
536_C++ Language Options_
537     *Note Options Controlling C++ Dialect: C++ Dialect Options.
538          -fabi-version=N  -fno-access-control
539          -faligned-new=N  -fargs-in-order=N  -fchar8_t  -fcheck-new
540          -fconstexpr-depth=N  -fconstexpr-loop-limit=N
541          -fconstexpr-ops-limit=N -fno-elide-constructors
542          -fno-enforce-eh-specs
543          -fno-gnu-keywords
544          -fno-implicit-templates
545          -fno-implicit-inline-templates
546          -fno-implement-inlines  -fms-extensions
547          -fnew-inheriting-ctors
548          -fnew-ttp-matching
549          -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names
550          -fno-optional-diags  -fpermissive
551          -fno-pretty-templates
552          -frepo  -fno-rtti  -fsized-deallocation
553          -ftemplate-backtrace-limit=N
554          -ftemplate-depth=N
555          -fno-threadsafe-statics  -fuse-cxa-atexit
556          -fno-weak  -nostdinc++
557          -fvisibility-inlines-hidden
558          -fvisibility-ms-compat
559          -fext-numeric-literals
560          -Wabi=N  -Wabi-tag  -Wconversion-null  -Wctor-dtor-privacy
561          -Wdelete-non-virtual-dtor  -Wdeprecated-copy  -Wdeprecated-copy-dtor
562          -Wliteral-suffix
563          -Wmultiple-inheritance  -Wno-init-list-lifetime
564          -Wnamespaces  -Wnarrowing
565          -Wpessimizing-move  -Wredundant-move
566          -Wnoexcept  -Wnoexcept-type  -Wclass-memaccess
567          -Wnon-virtual-dtor  -Wreorder  -Wregister
568          -Weffc++  -Wstrict-null-sentinel  -Wtemplates
569          -Wno-non-template-friend  -Wold-style-cast
570          -Woverloaded-virtual  -Wno-pmf-conversions
571          -Wno-class-conversion  -Wno-terminate
572          -Wsign-promo  -Wvirtual-inheritance
573
574_Objective-C and Objective-C++ Language Options_
575     *Note Options Controlling Objective-C and Objective-C++ Dialects:
576     Objective-C and Objective-C++ Dialect Options.
577          -fconstant-string-class=CLASS-NAME
578          -fgnu-runtime  -fnext-runtime
579          -fno-nil-receivers
580          -fobjc-abi-version=N
581          -fobjc-call-cxx-cdtors
582          -fobjc-direct-dispatch
583          -fobjc-exceptions
584          -fobjc-gc
585          -fobjc-nilcheck
586          -fobjc-std=objc1
587          -fno-local-ivars
588          -fivar-visibility=[public|protected|private|package]
589          -freplace-objc-classes
590          -fzero-link
591          -gen-decls
592          -Wassign-intercept
593          -Wno-protocol  -Wselector
594          -Wstrict-selector-match
595          -Wundeclared-selector
596
597_Diagnostic Message Formatting Options_
598     *Note Options to Control Diagnostic Messages Formatting: Diagnostic
599     Message Formatting Options.
600          -fmessage-length=N
601          -fdiagnostics-show-location=[once|every-line]
602          -fdiagnostics-color=[auto|never|always]
603          -fdiagnostics-format=[text|json]
604          -fno-diagnostics-show-option  -fno-diagnostics-show-caret
605          -fno-diagnostics-show-labels  -fno-diagnostics-show-line-numbers
606          -fdiagnostics-minimum-margin-width=WIDTH
607          -fdiagnostics-parseable-fixits  -fdiagnostics-generate-patch
608          -fdiagnostics-show-template-tree  -fno-elide-type
609          -fno-show-column
610
611_Warning Options_
612     *Note Options to Request or Suppress Warnings: Warning Options.
613          -fsyntax-only  -fmax-errors=N  -Wpedantic
614          -pedantic-errors
615          -w  -Wextra  -Wall  -Waddress  -Waddress-of-packed-member
616          -Waggregate-return  -Waligned-new
617          -Walloc-zero  -Walloc-size-larger-than=BYTE-SIZE
618          -Walloca  -Walloca-larger-than=BYTE-SIZE
619          -Wno-aggressive-loop-optimizations  -Warray-bounds  -Warray-bounds=N
620          -Wno-attributes  -Wattribute-alias=N
621          -Wbool-compare  -Wbool-operation
622          -Wno-builtin-declaration-mismatch
623          -Wno-builtin-macro-redefined  -Wc90-c99-compat  -Wc99-c11-compat
624          -Wc11-c2x-compat
625          -Wc++-compat  -Wc++11-compat  -Wc++14-compat  -Wc++17-compat
626          -Wcast-align  -Wcast-align=strict  -Wcast-function-type  -Wcast-qual
627          -Wchar-subscripts  -Wcatch-value  -Wcatch-value=N
628          -Wclobbered  -Wcomment  -Wconditionally-supported
629          -Wconversion  -Wcoverage-mismatch  -Wno-cpp  -Wdangling-else  -Wdate-time
630          -Wdelete-incomplete
631          -Wno-attribute-warning
632          -Wno-deprecated  -Wno-deprecated-declarations  -Wno-designated-init
633          -Wdisabled-optimization
634          -Wno-discarded-qualifiers  -Wno-discarded-array-qualifiers
635          -Wno-div-by-zero  -Wdouble-promotion
636          -Wduplicated-branches  -Wduplicated-cond
637          -Wempty-body  -Wenum-compare  -Wno-endif-labels  -Wexpansion-to-defined
638          -Werror  -Werror=*  -Wextra-semi  -Wfatal-errors
639          -Wfloat-equal  -Wformat  -Wformat=2
640          -Wno-format-contains-nul  -Wno-format-extra-args
641          -Wformat-nonliteral  -Wformat-overflow=N
642          -Wformat-security  -Wformat-signedness  -Wformat-truncation=N
643          -Wformat-y2k  -Wframe-address
644          -Wframe-larger-than=BYTE-SIZE  -Wno-free-nonheap-object
645          -Wjump-misses-init
646          -Whsa  -Wif-not-aligned
647          -Wignored-qualifiers  -Wignored-attributes  -Wincompatible-pointer-types
648          -Wimplicit  -Wimplicit-fallthrough  -Wimplicit-fallthrough=N
649          -Wimplicit-function-declaration  -Wimplicit-int
650          -Winit-self  -Winline  -Wno-int-conversion  -Wint-in-bool-context
651          -Wno-int-to-pointer-cast  -Winvalid-memory-model  -Wno-invalid-offsetof
652          -Winvalid-pch  -Wlarger-than=BYTE-SIZE
653          -Wlogical-op  -Wlogical-not-parentheses  -Wlong-long
654          -Wmain  -Wmaybe-uninitialized  -Wmemset-elt-size  -Wmemset-transposed-args
655          -Wmisleading-indentation  -Wmissing-attributes  -Wmissing-braces
656          -Wmissing-field-initializers  -Wmissing-format-attribute
657          -Wmissing-include-dirs  -Wmissing-noreturn  -Wmissing-profile
658          -Wno-multichar  -Wmultistatement-macros  -Wnonnull  -Wnonnull-compare
659          -Wnormalized=[none|id|nfc|nfkc]
660          -Wnull-dereference  -Wodr  -Wno-overflow  -Wopenmp-simd
661          -Woverride-init-side-effects  -Woverlength-strings
662          -Wpacked  -Wpacked-bitfield-compat -Wpacked-not-aligned  -Wpadded
663          -Wparentheses  -Wno-pedantic-ms-format
664          -Wplacement-new  -Wplacement-new=N
665          -Wpointer-arith  -Wpointer-compare  -Wno-pointer-to-int-cast
666          -Wno-pragmas  -Wno-prio-ctor-dtor  -Wredundant-decls
667          -Wrestrict  -Wno-return-local-addr
668          -Wreturn-type  -Wsequence-point  -Wshadow  -Wno-shadow-ivar
669          -Wshadow=global,  -Wshadow=local,  -Wshadow=compatible-local
670          -Wshift-overflow  -Wshift-overflow=N
671          -Wshift-count-negative  -Wshift-count-overflow  -Wshift-negative-value
672          -Wsign-compare  -Wsign-conversion  -Wfloat-conversion
673          -Wno-scalar-storage-order  -Wsizeof-pointer-div
674          -Wsizeof-pointer-memaccess  -Wsizeof-array-argument
675          -Wstack-protector  -Wstack-usage=BYTE-SIZE  -Wstrict-aliasing
676          -Wstrict-aliasing=n  -Wstrict-overflow  -Wstrict-overflow=N
677          -Wstringop-overflow=N  -Wstringop-truncation  -Wsubobject-linkage
678          -Wsuggest-attribute=[pure|const|noreturn|format|malloc]
679          -Wsuggest-final-types   -Wsuggest-final-methods  -Wsuggest-override
680          -Wswitch  -Wswitch-bool  -Wswitch-default  -Wswitch-enum
681          -Wswitch-unreachable  -Wsync-nand
682          -Wsystem-headers  -Wtautological-compare  -Wtrampolines  -Wtrigraphs
683          -Wtype-limits  -Wundef
684          -Wuninitialized  -Wunknown-pragmas
685          -Wunsuffixed-float-constants  -Wunused  -Wunused-function
686          -Wunused-label  -Wunused-local-typedefs  -Wunused-macros
687          -Wunused-parameter  -Wno-unused-result
688          -Wunused-value  -Wunused-variable
689          -Wunused-const-variable  -Wunused-const-variable=N
690          -Wunused-but-set-parameter  -Wunused-but-set-variable
691          -Wuseless-cast  -Wvariadic-macros  -Wvector-operation-performance
692          -Wvla  -Wvla-larger-than=BYTE-SIZE  -Wvolatile-register-var
693          -Wwrite-strings
694          -Wzero-as-null-pointer-constant
695
696_C and Objective-C-only Warning Options_
697          -Wbad-function-cast  -Wmissing-declarations
698          -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
699          -Wold-style-declaration  -Wold-style-definition
700          -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
701          -Wdeclaration-after-statement  -Wpointer-sign
702
703_Debugging Options_
704     *Note Options for Debugging Your Program: Debugging Options.
705          -g  -gLEVEL  -gdwarf  -gdwarf-VERSION
706          -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches
707          -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf
708          -gas-loc-support  -gno-as-loc-support
709          -gas-locview-support  -gno-as-locview-support
710          -gcolumn-info  -gno-column-info
711          -gstatement-frontiers  -gno-statement-frontiers
712          -gvariable-location-views  -gno-variable-location-views
713          -ginternal-reset-location-views  -gno-internal-reset-location-views
714          -ginline-points  -gno-inline-points
715          -gvms  -gxcoff  -gxcoff+  -gz[=TYPE]
716          -gsplit-dwarf  -gdescribe-dies  -gno-describe-dies
717          -fdebug-prefix-map=OLD=NEW  -fdebug-types-section
718          -fno-eliminate-unused-debug-types
719          -femit-struct-debug-baseonly  -femit-struct-debug-reduced
720          -femit-struct-debug-detailed[=SPEC-LIST]
721          -feliminate-unused-debug-symbols  -femit-class-debug-always
722          -fno-merge-debug-strings  -fno-dwarf2-cfi-asm
723          -fvar-tracking  -fvar-tracking-assignments
724
725_Optimization Options_
726     *Note Options that Control Optimization: Optimize Options.
727          -faggressive-loop-optimizations
728          -falign-functions[=N[:M:[N2[:M2]]]]
729          -falign-jumps[=N[:M:[N2[:M2]]]]
730          -falign-labels[=N[:M:[N2[:M2]]]]
731          -falign-loops[=N[:M:[N2[:M2]]]]
732          -fassociative-math  -fauto-profile  -fauto-profile[=PATH]
733          -fauto-inc-dec  -fbranch-probabilities
734          -fbranch-target-load-optimize  -fbranch-target-load-optimize2
735          -fbtr-bb-exclusive  -fcaller-saves
736          -fcombine-stack-adjustments  -fconserve-stack
737          -fcompare-elim  -fcprop-registers  -fcrossjumping
738          -fcse-follow-jumps  -fcse-skip-blocks  -fcx-fortran-rules
739          -fcx-limited-range
740          -fdata-sections  -fdce  -fdelayed-branch
741          -fdelete-null-pointer-checks  -fdevirtualize  -fdevirtualize-speculatively
742          -fdevirtualize-at-ltrans  -fdse
743          -fearly-inlining  -fipa-sra  -fexpensive-optimizations  -ffat-lto-objects
744          -ffast-math  -ffinite-math-only  -ffloat-store  -fexcess-precision=STYLE
745          -fforward-propagate  -ffp-contract=STYLE  -ffunction-sections
746          -fgcse  -fgcse-after-reload  -fgcse-las  -fgcse-lm  -fgraphite-identity
747          -fgcse-sm  -fhoist-adjacent-loads  -fif-conversion
748          -fif-conversion2  -findirect-inlining
749          -finline-functions  -finline-functions-called-once  -finline-limit=N
750          -finline-small-functions  -fipa-cp  -fipa-cp-clone
751          -fipa-bit-cp  -fipa-vrp  -fipa-pta  -fipa-profile  -fipa-pure-const
752          -fipa-reference  -fipa-reference-addressable
753          -fipa-stack-alignment  -fipa-icf  -fira-algorithm=ALGORITHM
754          -flive-patching=LEVEL
755          -fira-region=REGION  -fira-hoist-pressure
756          -fira-loop-pressure  -fno-ira-share-save-slots
757          -fno-ira-share-spill-slots
758          -fisolate-erroneous-paths-dereference  -fisolate-erroneous-paths-attribute
759          -fivopts  -fkeep-inline-functions  -fkeep-static-functions
760          -fkeep-static-consts  -flimit-function-alignment  -flive-range-shrinkage
761          -floop-block  -floop-interchange  -floop-strip-mine
762          -floop-unroll-and-jam  -floop-nest-optimize
763          -floop-parallelize-all  -flra-remat  -flto  -flto-compression-level
764          -flto-partition=ALG  -fmerge-all-constants
765          -fmerge-constants  -fmodulo-sched  -fmodulo-sched-allow-regmoves
766          -fmove-loop-invariants  -fno-branch-count-reg
767          -fno-defer-pop  -fno-fp-int-builtin-inexact  -fno-function-cse
768          -fno-guess-branch-probability  -fno-inline  -fno-math-errno  -fno-peephole
769          -fno-peephole2  -fno-printf-return-value  -fno-sched-interblock
770          -fno-sched-spec  -fno-signed-zeros
771          -fno-toplevel-reorder  -fno-trapping-math  -fno-zero-initialized-in-bss
772          -fomit-frame-pointer  -foptimize-sibling-calls
773          -fpartial-inlining  -fpeel-loops  -fpredictive-commoning
774          -fprefetch-loop-arrays
775          -fprofile-correction
776          -fprofile-use  -fprofile-use=PATH  -fprofile-values
777          -fprofile-reorder-functions
778          -freciprocal-math  -free  -frename-registers  -freorder-blocks
779          -freorder-blocks-algorithm=ALGORITHM
780          -freorder-blocks-and-partition  -freorder-functions
781          -frerun-cse-after-loop  -freschedule-modulo-scheduled-loops
782          -frounding-math  -fsave-optimization-record
783          -fsched2-use-superblocks  -fsched-pressure
784          -fsched-spec-load  -fsched-spec-load-dangerous
785          -fsched-stalled-insns-dep[=N]  -fsched-stalled-insns[=N]
786          -fsched-group-heuristic  -fsched-critical-path-heuristic
787          -fsched-spec-insn-heuristic  -fsched-rank-heuristic
788          -fsched-last-insn-heuristic  -fsched-dep-count-heuristic
789          -fschedule-fusion
790          -fschedule-insns  -fschedule-insns2  -fsection-anchors
791          -fselective-scheduling  -fselective-scheduling2
792          -fsel-sched-pipelining  -fsel-sched-pipelining-outer-loops
793          -fsemantic-interposition  -fshrink-wrap  -fshrink-wrap-separate
794          -fsignaling-nans
795          -fsingle-precision-constant  -fsplit-ivs-in-unroller  -fsplit-loops
796          -fsplit-paths
797          -fsplit-wide-types  -fssa-backprop  -fssa-phiopt
798          -fstdarg-opt  -fstore-merging  -fstrict-aliasing
799          -fthread-jumps  -ftracer  -ftree-bit-ccp
800          -ftree-builtin-call-dce  -ftree-ccp  -ftree-ch
801          -ftree-coalesce-vars  -ftree-copy-prop  -ftree-dce  -ftree-dominator-opts
802          -ftree-dse  -ftree-forwprop  -ftree-fre  -fcode-hoisting
803          -ftree-loop-if-convert  -ftree-loop-im
804          -ftree-phiprop  -ftree-loop-distribution  -ftree-loop-distribute-patterns
805          -ftree-loop-ivcanon  -ftree-loop-linear  -ftree-loop-optimize
806          -ftree-loop-vectorize
807          -ftree-parallelize-loops=N  -ftree-pre  -ftree-partial-pre  -ftree-pta
808          -ftree-reassoc  -ftree-scev-cprop  -ftree-sink  -ftree-slsr  -ftree-sra
809          -ftree-switch-conversion  -ftree-tail-merge
810          -ftree-ter  -ftree-vectorize  -ftree-vrp  -funconstrained-commons
811          -funit-at-a-time  -funroll-all-loops  -funroll-loops
812          -funsafe-math-optimizations  -funswitch-loops
813          -fipa-ra  -fvariable-expansion-in-unroller  -fvect-cost-model  -fvpt
814          -fweb  -fwhole-program  -fwpa  -fuse-linker-plugin
815          --param NAME=VALUE
816          -O  -O0  -O1  -O2  -O3  -Os  -Ofast  -Og
817
818_Program Instrumentation Options_
819     *Note Program Instrumentation Options: Instrumentation Options.
820          -p  -pg  -fprofile-arcs  --coverage  -ftest-coverage
821          -fprofile-abs-path
822          -fprofile-dir=PATH  -fprofile-generate  -fprofile-generate=PATH
823          -fprofile-update=METHOD  -fprofile-filter-files=REGEX
824          -fprofile-exclude-files=REGEX
825          -fsanitize=STYLE  -fsanitize-recover  -fsanitize-recover=STYLE
826          -fasan-shadow-offset=NUMBER  -fsanitize-sections=S1,S2,...
827          -fsanitize-undefined-trap-on-error  -fbounds-check
828          -fcf-protection=[full|branch|return|none]
829          -fstack-protector  -fstack-protector-all  -fstack-protector-strong
830          -fstack-protector-explicit  -fstack-check
831          -fstack-limit-register=REG  -fstack-limit-symbol=SYM
832          -fno-stack-limit  -fsplit-stack
833          -fvtable-verify=[std|preinit|none]
834          -fvtv-counts  -fvtv-debug
835          -finstrument-functions
836          -finstrument-functions-exclude-function-list=SYM,SYM,...
837          -finstrument-functions-exclude-file-list=FILE,FILE,...
838
839_Preprocessor Options_
840     *Note Options Controlling the Preprocessor: Preprocessor Options.
841          -AQUESTION=ANSWER
842          -A-QUESTION[=ANSWER]
843          -C  -CC  -DMACRO[=DEFN]
844          -dD  -dI  -dM  -dN  -dU
845          -fdebug-cpp  -fdirectives-only  -fdollars-in-identifiers
846          -fexec-charset=CHARSET  -fextended-identifiers
847          -finput-charset=CHARSET  -fmacro-prefix-map=OLD=NEW
848          -fno-canonical-system-headers  -fpch-deps  -fpch-preprocess
849          -fpreprocessed  -ftabstop=WIDTH  -ftrack-macro-expansion
850          -fwide-exec-charset=CHARSET  -fworking-directory
851          -H  -imacros FILE  -include FILE
852          -M  -MD  -MF  -MG  -MM  -MMD  -MP  -MQ  -MT
853          -no-integrated-cpp  -P  -pthread  -remap
854          -traditional  -traditional-cpp  -trigraphs
855          -UMACRO  -undef
856          -Wp,OPTION  -Xpreprocessor OPTION
857
858_Assembler Options_
859     *Note Passing Options to the Assembler: Assembler Options.
860          -Wa,OPTION  -Xassembler OPTION
861
862_Linker Options_
863     *Note Options for Linking: Link Options.
864          OBJECT-FILE-NAME  -fuse-ld=LINKER  -lLIBRARY
865          -nostartfiles  -nodefaultlibs  -nolibc  -nostdlib
866          -e ENTRY  --entry=ENTRY
867          -pie  -pthread  -r  -rdynamic
868          -s  -static  -static-pie  -static-libgcc  -static-libstdc++
869          -static-libasan  -static-libtsan  -static-liblsan  -static-libubsan
870          -shared  -shared-libgcc  -symbolic
871          -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
872          -u SYMBOL  -z KEYWORD
873
874_Directory Options_
875     *Note Options for Directory Search: Directory Options.
876          -BPREFIX  -IDIR  -I-
877          -idirafter DIR
878          -imacros FILE  -imultilib DIR
879          -iplugindir=DIR  -iprefix FILE
880          -iquote DIR  -isysroot DIR  -isystem DIR
881          -iwithprefix DIR  -iwithprefixbefore DIR
882          -LDIR  -no-canonical-prefixes  --no-sysroot-suffix
883          -nostdinc  -nostdinc++  --sysroot=DIR
884
885_Code Generation Options_
886     *Note Options for Code Generation Conventions: Code Gen Options.
887          -fcall-saved-REG  -fcall-used-REG
888          -ffixed-REG  -fexceptions
889          -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables
890          -fasynchronous-unwind-tables
891          -fno-gnu-unique
892          -finhibit-size-directive  -fno-common  -fno-ident
893          -fpcc-struct-return  -fpic  -fPIC  -fpie  -fPIE  -fno-plt
894          -fno-jump-tables
895          -frecord-gcc-switches
896          -freg-struct-return  -fshort-enums  -fshort-wchar
897          -fverbose-asm  -fpack-struct[=N]
898          -fleading-underscore  -ftls-model=MODEL
899          -fstack-reuse=REUSE_LEVEL
900          -ftrampolines  -ftrapv  -fwrapv
901          -fvisibility=[default|internal|hidden|protected]
902          -fstrict-volatile-bitfields  -fsync-libcalls
903
904_Developer Options_
905     *Note GCC Developer Options: Developer Options.
906          -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
907          -dumpfullversion  -fchecking  -fchecking=N  -fdbg-cnt-list
908          -fdbg-cnt=COUNTER-VALUE-LIST
909          -fdisable-ipa-PASS_NAME
910          -fdisable-rtl-PASS_NAME
911          -fdisable-rtl-PASS-NAME=RANGE-LIST
912          -fdisable-tree-PASS_NAME
913          -fdisable-tree-PASS-NAME=RANGE-LIST
914          -fdump-debug  -fdump-earlydebug
915          -fdump-noaddr  -fdump-unnumbered  -fdump-unnumbered-links
916          -fdump-final-insns[=FILE]
917          -fdump-ipa-all  -fdump-ipa-cgraph  -fdump-ipa-inline
918          -fdump-lang-all
919          -fdump-lang-SWITCH
920          -fdump-lang-SWITCH-OPTIONS
921          -fdump-lang-SWITCH-OPTIONS=FILENAME
922          -fdump-passes
923          -fdump-rtl-PASS  -fdump-rtl-PASS=FILENAME
924          -fdump-statistics
925          -fdump-tree-all
926          -fdump-tree-SWITCH
927          -fdump-tree-SWITCH-OPTIONS
928          -fdump-tree-SWITCH-OPTIONS=FILENAME
929          -fcompare-debug[=OPTS]  -fcompare-debug-second
930          -fenable-KIND-PASS
931          -fenable-KIND-PASS=RANGE-LIST
932          -fira-verbose=N
933          -flto-report  -flto-report-wpa  -fmem-report-wpa
934          -fmem-report  -fpre-ipa-mem-report  -fpost-ipa-mem-report
935          -fopt-info  -fopt-info-OPTIONS[=FILE]
936          -fprofile-report
937          -frandom-seed=STRING  -fsched-verbose=N
938          -fsel-sched-verbose  -fsel-sched-dump-cfg  -fsel-sched-pipelining-verbose
939          -fstats  -fstack-usage  -ftime-report  -ftime-report-details
940          -fvar-tracking-assignments-toggle  -gtoggle
941          -print-file-name=LIBRARY  -print-libgcc-file-name
942          -print-multi-directory  -print-multi-lib  -print-multi-os-directory
943          -print-prog-name=PROGRAM  -print-search-dirs  -Q
944          -print-sysroot  -print-sysroot-headers-suffix
945          -save-temps  -save-temps=cwd  -save-temps=obj  -time[=FILE]
946
947_Machine-Dependent Options_
948     *Note Machine-Dependent Options: Submodel Options.
949
950     _AArch64 Options_
951          -mabi=NAME  -mbig-endian  -mlittle-endian
952          -mgeneral-regs-only
953          -mcmodel=tiny  -mcmodel=small  -mcmodel=large
954          -mstrict-align  -mno-strict-align
955          -momit-leaf-frame-pointer
956          -mtls-dialect=desc  -mtls-dialect=traditional
957          -mtls-size=SIZE
958          -mfix-cortex-a53-835769  -mfix-cortex-a53-843419
959          -mlow-precision-recip-sqrt  -mlow-precision-sqrt  -mlow-precision-div
960          -mpc-relative-literal-loads
961          -msign-return-address=SCOPE
962          -mbranch-protection=NONE|STANDARD|PAC-RET[+LEAF]|BTI
963          -mharden-sls=OPTS
964          -march=NAME  -mcpu=NAME  -mtune=NAME
965          -moverride=STRING  -mverbose-cost-dump
966          -mstack-protector-guard=GUARD -mstack-protector-guard-reg=SYSREG
967          -mstack-protector-guard-offset=OFFSET -mtrack-speculation
968          -moutline-atomics
969
970     _Adapteva Epiphany Options_
971          -mhalf-reg-file  -mprefer-short-insn-regs
972          -mbranch-cost=NUM  -mcmove  -mnops=NUM  -msoft-cmpsf
973          -msplit-lohi  -mpost-inc  -mpost-modify  -mstack-offset=NUM
974          -mround-nearest  -mlong-calls  -mshort-calls  -msmall16
975          -mfp-mode=MODE  -mvect-double  -max-vect-align=NUM
976          -msplit-vecmove-early  -m1reg-REG
977
978     _AMD GCN Options_
979          -march=GPU -mtune=GPU -mstack-size=BYTES
980
981     _ARC Options_
982          -mbarrel-shifter  -mjli-always
983          -mcpu=CPU  -mA6  -mARC600  -mA7  -mARC700
984          -mdpfp  -mdpfp-compact  -mdpfp-fast  -mno-dpfp-lrsr
985          -mea  -mno-mpy  -mmul32x16  -mmul64  -matomic
986          -mnorm  -mspfp  -mspfp-compact  -mspfp-fast  -msimd  -msoft-float  -mswap
987          -mcrc  -mdsp-packa  -mdvbf  -mlock  -mmac-d16  -mmac-24  -mrtsc  -mswape
988          -mtelephony  -mxy  -misize  -mannotate-align  -marclinux  -marclinux_prof
989          -mlong-calls  -mmedium-calls  -msdata  -mirq-ctrl-saved
990          -mrgf-banked-regs  -mlpc-width=WIDTH  -G NUM
991          -mvolatile-cache  -mtp-regno=REGNO
992          -malign-call  -mauto-modify-reg  -mbbit-peephole  -mno-brcc
993          -mcase-vector-pcrel  -mcompact-casesi  -mno-cond-exec  -mearly-cbranchsi
994          -mexpand-adddi  -mindexed-loads  -mlra  -mlra-priority-none
995          -mlra-priority-compact mlra-priority-noncompact  -mmillicode
996          -mmixed-code  -mq-class  -mRcq  -mRcw  -msize-level=LEVEL
997          -mtune=CPU  -mmultcost=NUM  -mcode-density-frame
998          -munalign-prob-threshold=PROBABILITY  -mmpy-option=MULTO
999          -mdiv-rem  -mcode-density  -mll64  -mfpu=FPU  -mrf16  -mbranch-index
1000
1001     _ARM Options_
1002          -mapcs-frame  -mno-apcs-frame
1003          -mabi=NAME
1004          -mapcs-stack-check  -mno-apcs-stack-check
1005          -mapcs-reentrant  -mno-apcs-reentrant
1006          -mgeneral-regs-only
1007          -msched-prolog  -mno-sched-prolog
1008          -mlittle-endian  -mbig-endian
1009          -mbe8  -mbe32
1010          -mfloat-abi=NAME
1011          -mfp16-format=NAME
1012          -mthumb-interwork  -mno-thumb-interwork
1013          -mcpu=NAME  -march=NAME  -mfpu=NAME
1014          -mtune=NAME  -mprint-tune-info
1015          -mstructure-size-boundary=N
1016          -mabort-on-noreturn
1017          -mlong-calls  -mno-long-calls
1018          -msingle-pic-base  -mno-single-pic-base
1019          -mpic-register=REG
1020          -mnop-fun-dllimport
1021          -mpoke-function-name
1022          -mthumb  -marm  -mflip-thumb
1023          -mtpcs-frame  -mtpcs-leaf-frame
1024          -mcaller-super-interworking  -mcallee-super-interworking
1025          -mtp=NAME  -mtls-dialect=DIALECT
1026          -mword-relocations
1027          -mfix-cortex-m3-ldrd
1028          -munaligned-access
1029          -mneon-for-64bits
1030          -mslow-flash-data
1031          -masm-syntax-unified
1032          -mrestrict-it
1033          -mverbose-cost-dump
1034          -mpure-code
1035          -mcmse
1036
1037     _AVR Options_
1038          -mmcu=MCU  -mabsdata  -maccumulate-args
1039          -mbranch-cost=COST
1040          -mcall-prologues  -mgas-isr-prologues  -mint8
1041          -mn_flash=SIZE  -mno-interrupts
1042          -mmain-is-OS_task  -mrelax  -mrmw  -mstrict-X  -mtiny-stack
1043          -mfract-convert-truncate
1044          -mshort-calls -nodevicelib  -nodevicespecs
1045          -Waddr-space-convert  -Wmisspelled-isr
1046
1047     _Blackfin Options_
1048          -mcpu=CPU[-SIREVISION]
1049          -msim  -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
1050          -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
1051          -mlow-64k  -mno-low64k  -mstack-check-l1  -mid-shared-library
1052          -mno-id-shared-library  -mshared-library-id=N
1053          -mleaf-id-shared-library  -mno-leaf-id-shared-library
1054          -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
1055          -mfast-fp  -minline-plt  -mmulticore  -mcorea  -mcoreb  -msdram
1056          -micplb
1057
1058     _C6X Options_
1059          -mbig-endian  -mlittle-endian  -march=CPU
1060          -msim  -msdata=SDATA-TYPE
1061
1062     _CRIS Options_
1063          -mcpu=CPU  -march=CPU  -mtune=CPU
1064          -mmax-stack-frame=N  -melinux-stacksize=N
1065          -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
1066          -mstack-align  -mdata-align  -mconst-align
1067          -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
1068          -melf  -maout  -melinux  -mlinux  -sim  -sim2
1069          -mmul-bug-workaround  -mno-mul-bug-workaround
1070
1071     _CR16 Options_
1072          -mmac
1073          -mcr16cplus  -mcr16c
1074          -msim  -mint32  -mbit-ops
1075          -mdata-model=MODEL
1076
1077     _C-SKY Options_
1078          -march=ARCH  -mcpu=CPU
1079          -mbig-endian  -EB  -mlittle-endian  -EL
1080          -mhard-float  -msoft-float  -mfpu=FPU  -mdouble-float  -mfdivdu
1081          -melrw  -mistack  -mmp  -mcp  -mcache  -msecurity  -mtrust
1082          -mdsp  -medsp  -mvdsp
1083          -mdiv  -msmart  -mhigh-registers  -manchor
1084          -mpushpop  -mmultiple-stld  -mconstpool  -mstack-size  -mccrt
1085          -mbranch-cost=N  -mcse-cc  -msched-prolog
1086
1087     _Darwin Options_
1088          -all_load  -allowable_client  -arch  -arch_errors_fatal
1089          -arch_only  -bind_at_load  -bundle  -bundle_loader
1090          -client_name  -compatibility_version  -current_version
1091          -dead_strip
1092          -dependency-file  -dylib_file  -dylinker_install_name
1093          -dynamic  -dynamiclib  -exported_symbols_list
1094          -filelist  -flat_namespace  -force_cpusubtype_ALL
1095          -force_flat_namespace  -headerpad_max_install_names
1096          -iframework
1097          -image_base  -init  -install_name  -keep_private_externs
1098          -multi_module  -multiply_defined  -multiply_defined_unused
1099          -noall_load   -no_dead_strip_inits_and_terms
1100          -nofixprebinding  -nomultidefs  -noprebind  -noseglinkedit
1101          -pagezero_size  -prebind  -prebind_all_twolevel_modules
1102          -private_bundle  -read_only_relocs  -sectalign
1103          -sectobjectsymbols  -whyload  -seg1addr
1104          -sectcreate  -sectobjectsymbols  -sectorder
1105          -segaddr  -segs_read_only_addr  -segs_read_write_addr
1106          -seg_addr_table  -seg_addr_table_filename  -seglinkedit
1107          -segprot  -segs_read_only_addr  -segs_read_write_addr
1108          -single_module  -static  -sub_library  -sub_umbrella
1109          -twolevel_namespace  -umbrella  -undefined
1110          -unexported_symbols_list  -weak_reference_mismatches
1111          -whatsloaded  -F  -gused  -gfull  -mmacosx-version-min=VERSION
1112          -mkernel  -mone-byte-bool
1113
1114     _DEC Alpha Options_
1115          -mno-fp-regs  -msoft-float
1116          -mieee  -mieee-with-inexact  -mieee-conformant
1117          -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
1118          -mtrap-precision=MODE  -mbuild-constants
1119          -mcpu=CPU-TYPE  -mtune=CPU-TYPE
1120          -mbwx  -mmax  -mfix  -mcix
1121          -mfloat-vax  -mfloat-ieee
1122          -mexplicit-relocs  -msmall-data  -mlarge-data
1123          -msmall-text  -mlarge-text
1124          -mmemory-latency=TIME
1125
1126     _FR30 Options_
1127          -msmall-model  -mno-lsim
1128
1129     _FT32 Options_
1130          -msim  -mlra  -mnodiv  -mft32b  -mcompress  -mnopm
1131
1132     _FRV Options_
1133          -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
1134          -mhard-float  -msoft-float
1135          -malloc-cc  -mfixed-cc  -mdword  -mno-dword
1136          -mdouble  -mno-double
1137          -mmedia  -mno-media  -mmuladd  -mno-muladd
1138          -mfdpic  -minline-plt  -mgprel-ro  -multilib-library-pic
1139          -mlinked-fp  -mlong-calls  -malign-labels
1140          -mlibrary-pic  -macc-4  -macc-8
1141          -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
1142          -moptimize-membar  -mno-optimize-membar
1143          -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
1144          -mvliw-branch  -mno-vliw-branch
1145          -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
1146          -mno-nested-cond-exec  -mtomcat-stats
1147          -mTLS  -mtls
1148          -mcpu=CPU
1149
1150     _GNU/Linux Options_
1151          -mglibc  -muclibc  -mmusl  -mbionic  -mandroid
1152          -tno-android-cc  -tno-android-ld
1153
1154     _H8/300 Options_
1155          -mrelax  -mh  -ms  -mn  -mexr  -mno-exr  -mint32  -malign-300
1156
1157     _HPPA Options_
1158          -march=ARCHITECTURE-TYPE
1159          -mcaller-copies  -mdisable-fpregs  -mdisable-indexing
1160          -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
1161          -mfixed-range=REGISTER-RANGE
1162          -mjump-in-delay  -mlinker-opt  -mlong-calls
1163          -mlong-load-store  -mno-disable-fpregs
1164          -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
1165          -mno-jump-in-delay  -mno-long-load-store
1166          -mno-portable-runtime  -mno-soft-float
1167          -mno-space-regs  -msoft-float  -mpa-risc-1-0
1168          -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
1169          -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
1170          -munix=UNIX-STD  -nolibdld  -static  -threads
1171
1172     _IA-64 Options_
1173          -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
1174          -mvolatile-asm-stop  -mregister-names  -msdata  -mno-sdata
1175          -mconstant-gp  -mauto-pic  -mfused-madd
1176          -minline-float-divide-min-latency
1177          -minline-float-divide-max-throughput
1178          -mno-inline-float-divide
1179          -minline-int-divide-min-latency
1180          -minline-int-divide-max-throughput
1181          -mno-inline-int-divide
1182          -minline-sqrt-min-latency  -minline-sqrt-max-throughput
1183          -mno-inline-sqrt
1184          -mdwarf2-asm  -mearly-stop-bits
1185          -mfixed-range=REGISTER-RANGE  -mtls-size=TLS-SIZE
1186          -mtune=CPU-TYPE  -milp32  -mlp64
1187          -msched-br-data-spec  -msched-ar-data-spec  -msched-control-spec
1188          -msched-br-in-data-spec  -msched-ar-in-data-spec  -msched-in-control-spec
1189          -msched-spec-ldc  -msched-spec-control-ldc
1190          -msched-prefer-non-data-spec-insns  -msched-prefer-non-control-spec-insns
1191          -msched-stop-bits-after-every-cycle  -msched-count-spec-in-critical-path
1192          -msel-sched-dont-check-control-spec  -msched-fp-mem-deps-zero-cost
1193          -msched-max-memory-insns-hard-limit  -msched-max-memory-insns=MAX-INSNS
1194
1195     _LM32 Options_
1196          -mbarrel-shift-enabled  -mdivide-enabled  -mmultiply-enabled
1197          -msign-extend-enabled  -muser-enabled
1198
1199     _M32R/D Options_
1200          -m32r2  -m32rx  -m32r
1201          -mdebug
1202          -malign-loops  -mno-align-loops
1203          -missue-rate=NUMBER
1204          -mbranch-cost=NUMBER
1205          -mmodel=CODE-SIZE-MODEL-TYPE
1206          -msdata=SDATA-TYPE
1207          -mno-flush-func  -mflush-func=NAME
1208          -mno-flush-trap  -mflush-trap=NUMBER
1209          -G NUM
1210
1211     _M32C Options_
1212          -mcpu=CPU  -msim  -memregs=NUMBER
1213
1214     _M680x0 Options_
1215          -march=ARCH  -mcpu=CPU  -mtune=TUNE
1216          -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
1217          -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
1218          -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
1219          -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
1220          -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
1221          -malign-int  -mstrict-align  -msep-data  -mno-sep-data
1222          -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
1223          -mxgot  -mno-xgot  -mlong-jump-table-offsets
1224
1225     _MCore Options_
1226          -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
1227          -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
1228          -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
1229          -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
1230          -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
1231
1232     _MeP Options_
1233          -mabsdiff  -mall-opts  -maverage  -mbased=N  -mbitops
1234          -mc=N  -mclip  -mconfig=NAME  -mcop  -mcop32  -mcop64  -mivc2
1235          -mdc  -mdiv  -meb  -mel  -mio-volatile  -ml  -mleadz  -mm  -mminmax
1236          -mmult  -mno-opts  -mrepeat  -ms  -msatur  -msdram  -msim  -msimnovec  -mtf
1237          -mtiny=N
1238
1239     _MicroBlaze Options_
1240          -msoft-float  -mhard-float  -msmall-divides  -mcpu=CPU
1241          -mmemcpy  -mxl-soft-mul  -mxl-soft-div  -mxl-barrel-shift
1242          -mxl-pattern-compare  -mxl-stack-check  -mxl-gp-opt  -mno-clearbss
1243          -mxl-multiply-high  -mxl-float-convert  -mxl-float-sqrt
1244          -mbig-endian  -mlittle-endian  -mxl-reorder  -mxl-mode-APP-MODEL
1245          -mpic-data-is-text-relative
1246
1247     _MIPS Options_
1248          -EL  -EB  -march=ARCH  -mtune=ARCH
1249          -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5
1250          -mips32r6  -mips64  -mips64r2  -mips64r3  -mips64r5  -mips64r6
1251          -mips16  -mno-mips16  -mflip-mips16
1252          -minterlink-compressed  -mno-interlink-compressed
1253          -minterlink-mips16  -mno-interlink-mips16
1254          -mabi=ABI  -mabicalls  -mno-abicalls
1255          -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
1256          -mgp32  -mgp64  -mfp32  -mfpxx  -mfp64  -mhard-float  -msoft-float
1257          -mno-float  -msingle-float  -mdouble-float
1258          -modd-spreg  -mno-odd-spreg
1259          -mabs=MODE  -mnan=ENCODING
1260          -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
1261          -mmcu  -mmno-mcu
1262          -meva  -mno-eva
1263          -mvirt  -mno-virt
1264          -mxpa  -mno-xpa
1265          -mcrc  -mno-crc
1266          -mginv  -mno-ginv
1267          -mmicromips  -mno-micromips
1268          -mmsa  -mno-msa
1269          -mloongson-mmi  -mno-loongson-mmi
1270          -mloongson-ext  -mno-loongson-ext
1271          -mloongson-ext2  -mno-loongson-ext2
1272          -mfpu=FPU-TYPE
1273          -msmartmips  -mno-smartmips
1274          -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
1275          -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
1276          -mlong64  -mlong32  -msym32  -mno-sym32
1277          -GNUM  -mlocal-sdata  -mno-local-sdata
1278          -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
1279          -membedded-data  -mno-embedded-data
1280          -muninit-const-in-rodata  -mno-uninit-const-in-rodata
1281          -mcode-readable=SETTING
1282          -msplit-addresses  -mno-split-addresses
1283          -mexplicit-relocs  -mno-explicit-relocs
1284          -mcheck-zero-division  -mno-check-zero-division
1285          -mdivide-traps  -mdivide-breaks
1286          -mload-store-pairs  -mno-load-store-pairs
1287          -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
1288          -mmad  -mno-mad  -mimadd  -mno-imadd  -mfused-madd  -mno-fused-madd  -nocpp
1289          -mfix-24k  -mno-fix-24k
1290          -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
1291          -mfix-r5900  -mno-fix-r5900
1292          -mfix-r10000  -mno-fix-r10000  -mfix-rm7000  -mno-fix-rm7000
1293          -mfix-vr4120  -mno-fix-vr4120
1294          -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
1295          -mflush-func=FUNC  -mno-flush-func
1296          -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
1297          -mcompact-branches=POLICY
1298          -mfp-exceptions  -mno-fp-exceptions
1299          -mvr4130-align  -mno-vr4130-align  -msynci  -mno-synci
1300          -mlxc1-sxc1  -mno-lxc1-sxc1  -mmadd4  -mno-madd4
1301          -mrelax-pic-calls  -mno-relax-pic-calls  -mmcount-ra-address
1302          -mframe-header-opt  -mno-frame-header-opt
1303
1304     _MMIX Options_
1305          -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
1306          -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
1307          -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
1308          -mno-base-addresses  -msingle-exit  -mno-single-exit
1309
1310     _MN10300 Options_
1311          -mmult-bug  -mno-mult-bug
1312          -mno-am33  -mam33  -mam33-2  -mam34
1313          -mtune=CPU-TYPE
1314          -mreturn-pointer-on-d0
1315          -mno-crt0  -mrelax  -mliw  -msetlb
1316
1317     _Moxie Options_
1318          -meb  -mel  -mmul.x  -mno-crt0
1319
1320     _MSP430 Options_
1321          -msim  -masm-hex  -mmcu=  -mcpu=  -mlarge  -msmall  -mrelax
1322          -mwarn-mcu
1323          -mcode-region=  -mdata-region=
1324          -msilicon-errata=  -msilicon-errata-warn=
1325          -mhwmult=  -minrt
1326
1327     _NDS32 Options_
1328          -mbig-endian  -mlittle-endian
1329          -mreduced-regs  -mfull-regs
1330          -mcmov  -mno-cmov
1331          -mext-perf  -mno-ext-perf
1332          -mext-perf2  -mno-ext-perf2
1333          -mext-string  -mno-ext-string
1334          -mv3push  -mno-v3push
1335          -m16bit  -mno-16bit
1336          -misr-vector-size=NUM
1337          -mcache-block-size=NUM
1338          -march=ARCH
1339          -mcmodel=CODE-MODEL
1340          -mctor-dtor  -mrelax
1341
1342     _Nios II Options_
1343          -G NUM  -mgpopt=OPTION  -mgpopt  -mno-gpopt
1344          -mgprel-sec=REGEXP  -mr0rel-sec=REGEXP
1345          -mel  -meb
1346          -mno-bypass-cache  -mbypass-cache
1347          -mno-cache-volatile  -mcache-volatile
1348          -mno-fast-sw-div  -mfast-sw-div
1349          -mhw-mul  -mno-hw-mul  -mhw-mulx  -mno-hw-mulx  -mno-hw-div  -mhw-div
1350          -mcustom-INSN=N  -mno-custom-INSN
1351          -mcustom-fpu-cfg=NAME
1352          -mhal  -msmallc  -msys-crt0=NAME  -msys-lib=NAME
1353          -march=ARCH  -mbmx  -mno-bmx  -mcdx  -mno-cdx
1354
1355     _Nvidia PTX Options_
1356          -m32  -m64  -mmainkernel  -moptimize
1357
1358     _OpenRISC Options_
1359          -mboard=NAME  -mnewlib  -mhard-mul  -mhard-div
1360          -msoft-mul  -msoft-div
1361          -mcmov  -mror  -msext  -msfimm  -mshftimm
1362
1363     _PDP-11 Options_
1364          -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
1365          -mint32  -mno-int16  -mint16  -mno-int32
1366          -msplit  -munix-asm  -mdec-asm  -mgnu-asm  -mlra
1367
1368     _picoChip Options_
1369          -mae=AE_TYPE  -mvliw-lookahead=N
1370          -msymbol-as-address  -mno-inefficient-warnings
1371
1372     _PowerPC Options_ See RS/6000 and PowerPC Options.
1373
1374     _RISC-V Options_
1375          -mbranch-cost=N-INSTRUCTION
1376          -mplt  -mno-plt
1377          -mabi=ABI-STRING
1378          -mfdiv  -mno-fdiv
1379          -mdiv  -mno-div
1380          -march=ISA-STRING
1381          -mtune=PROCESSOR-STRING
1382          -mpreferred-stack-boundary=NUM
1383          -msmall-data-limit=N-BYTES
1384          -msave-restore  -mno-save-restore
1385          -mstrict-align  -mno-strict-align
1386          -mcmodel=medlow  -mcmodel=medany
1387          -mexplicit-relocs  -mno-explicit-relocs
1388          -mrelax  -mno-relax
1389          -mriscv-attribute  -mmo-riscv-attribute
1390
1391     _RL78 Options_
1392          -msim  -mmul=none  -mmul=g13  -mmul=g14  -mallregs
1393          -mcpu=g10  -mcpu=g13  -mcpu=g14  -mg10  -mg13  -mg14
1394          -m64bit-doubles  -m32bit-doubles  -msave-mduc-in-interrupts
1395
1396     _RS/6000 and PowerPC Options_
1397          -mcpu=CPU-TYPE
1398          -mtune=CPU-TYPE
1399          -mcmodel=CODE-MODEL
1400          -mpowerpc64
1401          -maltivec  -mno-altivec
1402          -mpowerpc-gpopt  -mno-powerpc-gpopt
1403          -mpowerpc-gfxopt  -mno-powerpc-gfxopt
1404          -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb  -mpopcntd  -mno-popcntd
1405          -mfprnd  -mno-fprnd
1406          -mcmpb  -mno-cmpb  -mmfpgpr  -mno-mfpgpr  -mhard-dfp  -mno-hard-dfp
1407          -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
1408          -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
1409          -malign-power  -malign-natural
1410          -msoft-float  -mhard-float  -mmultiple  -mno-multiple
1411          -mupdate  -mno-update
1412          -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
1413          -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
1414          -mstrict-align  -mno-strict-align  -mrelocatable
1415          -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
1416          -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
1417          -mdynamic-no-pic  -mswdiv  -msingle-pic-base
1418          -mprioritize-restricted-insns=PRIORITY
1419          -msched-costly-dep=DEPENDENCE_TYPE
1420          -minsert-sched-nops=SCHEME
1421          -mcall-aixdesc  -mcall-eabi  -mcall-freebsd
1422          -mcall-linux  -mcall-netbsd  -mcall-openbsd
1423          -mcall-sysv  -mcall-sysv-eabi  -mcall-sysv-noeabi
1424          -mtraceback=TRACEBACK_TYPE
1425          -maix-struct-return  -msvr4-struct-return
1426          -mabi=ABI-TYPE  -msecure-plt  -mbss-plt
1427          -mlongcall  -mno-longcall  -mpltseq  -mno-pltseq
1428          -mblock-move-inline-limit=NUM
1429          -mblock-compare-inline-limit=NUM
1430          -mblock-compare-inline-loop-limit=NUM
1431          -mstring-compare-inline-limit=NUM
1432          -misel  -mno-isel
1433          -mvrsave  -mno-vrsave
1434          -mmulhw  -mno-mulhw
1435          -mdlmzb  -mno-dlmzb
1436          -mprototype  -mno-prototype
1437          -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
1438          -msdata=OPT  -mreadonly-in-sdata  -mvxworks  -G NUM
1439          -mrecip  -mrecip=OPT  -mno-recip  -mrecip-precision
1440          -mno-recip-precision
1441          -mveclibabi=TYPE  -mfriz  -mno-friz
1442          -mpointers-to-nested-functions  -mno-pointers-to-nested-functions
1443          -msave-toc-indirect  -mno-save-toc-indirect
1444          -mpower8-fusion  -mno-mpower8-fusion  -mpower8-vector  -mno-power8-vector
1445          -mcrypto  -mno-crypto  -mhtm  -mno-htm
1446          -mquad-memory  -mno-quad-memory
1447          -mquad-memory-atomic  -mno-quad-memory-atomic
1448          -mcompat-align-parm  -mno-compat-align-parm
1449          -mfloat128  -mno-float128  -mfloat128-hardware  -mno-float128-hardware
1450          -mgnu-attribute  -mno-gnu-attribute
1451          -mstack-protector-guard=GUARD -mstack-protector-guard-reg=REG
1452          -mstack-protector-guard-offset=OFFSET
1453
1454     _RX Options_
1455          -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu
1456          -mcpu=
1457          -mbig-endian-data  -mlittle-endian-data
1458          -msmall-data
1459          -msim  -mno-sim
1460          -mas100-syntax  -mno-as100-syntax
1461          -mrelax
1462          -mmax-constant-size=
1463          -mint-register=
1464          -mpid
1465          -mallow-string-insns  -mno-allow-string-insns
1466          -mjsr
1467          -mno-warn-multiple-fast-interrupts
1468          -msave-acc-in-interrupts
1469
1470     _S/390 and zSeries Options_
1471          -mtune=CPU-TYPE  -march=CPU-TYPE
1472          -mhard-float  -msoft-float  -mhard-dfp  -mno-hard-dfp
1473          -mlong-double-64  -mlong-double-128
1474          -mbackchain  -mno-backchain  -mpacked-stack  -mno-packed-stack
1475          -msmall-exec  -mno-small-exec  -mmvcle  -mno-mvcle
1476          -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
1477          -mhtm  -mvx  -mzvector
1478          -mtpf-trace  -mno-tpf-trace  -mfused-madd  -mno-fused-madd
1479          -mwarn-framesize  -mwarn-dynamicstack  -mstack-size  -mstack-guard
1480          -mhotpatch=HALFWORDS,HALFWORDS
1481
1482     _Score Options_
1483          -meb  -mel
1484          -mnhwloop
1485          -muls
1486          -mmac
1487          -mscore5  -mscore5u  -mscore7  -mscore7d
1488
1489     _SH Options_
1490          -m1  -m2  -m2e
1491          -m2a-nofpu  -m2a-single-only  -m2a-single  -m2a
1492          -m3  -m3e
1493          -m4-nofpu  -m4-single-only  -m4-single  -m4
1494          -m4a-nofpu  -m4a-single-only  -m4a-single  -m4a  -m4al
1495          -mb  -ml  -mdalign  -mrelax
1496          -mbigtable  -mfmovd  -mrenesas  -mno-renesas  -mnomacsave
1497          -mieee  -mno-ieee  -mbitops  -misize  -minline-ic_invalidate  -mpadstruct
1498          -mprefergot  -musermode  -multcost=NUMBER  -mdiv=STRATEGY
1499          -mdivsi3_libfunc=NAME  -mfixed-range=REGISTER-RANGE
1500          -maccumulate-outgoing-args
1501          -matomic-model=ATOMIC-MODEL
1502          -mbranch-cost=NUM  -mzdcbranch  -mno-zdcbranch
1503          -mcbranch-force-delay-slot
1504          -mfused-madd  -mno-fused-madd  -mfsca  -mno-fsca  -mfsrra  -mno-fsrra
1505          -mpretend-cmove  -mtas
1506
1507     _Solaris 2 Options_
1508          -mclear-hwcap  -mno-clear-hwcap  -mimpure-text  -mno-impure-text
1509          -pthreads
1510
1511     _SPARC Options_
1512          -mcpu=CPU-TYPE
1513          -mtune=CPU-TYPE
1514          -mcmodel=CODE-MODEL
1515          -mmemory-model=MEM-MODEL
1516          -m32  -m64  -mapp-regs  -mno-app-regs
1517          -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat
1518          -mfpu  -mno-fpu  -mhard-float  -msoft-float
1519          -mhard-quad-float  -msoft-quad-float
1520          -mstack-bias  -mno-stack-bias
1521          -mstd-struct-return  -mno-std-struct-return
1522          -munaligned-doubles  -mno-unaligned-doubles
1523          -muser-mode  -mno-user-mode
1524          -mv8plus  -mno-v8plus  -mvis  -mno-vis
1525          -mvis2  -mno-vis2  -mvis3  -mno-vis3
1526          -mvis4  -mno-vis4  -mvis4b  -mno-vis4b
1527          -mcbcond  -mno-cbcond  -mfmaf  -mno-fmaf  -mfsmuld  -mno-fsmuld
1528          -mpopc  -mno-popc  -msubxc  -mno-subxc
1529          -mfix-at697f  -mfix-ut699  -mfix-ut700  -mfix-gr712rc
1530          -mlra  -mno-lra
1531
1532     _SPU Options_
1533          -mwarn-reloc  -merror-reloc
1534          -msafe-dma  -munsafe-dma
1535          -mbranch-hints
1536          -msmall-mem  -mlarge-mem  -mstdmain
1537          -mfixed-range=REGISTER-RANGE
1538          -mea32  -mea64
1539          -maddress-space-conversion  -mno-address-space-conversion
1540          -mcache-size=CACHE-SIZE
1541          -matomic-updates  -mno-atomic-updates
1542
1543     _System V Options_
1544          -Qy  -Qn  -YP,PATHS  -Ym,DIR
1545
1546     _TILE-Gx Options_
1547          -mcpu=CPU  -m32  -m64  -mbig-endian  -mlittle-endian
1548          -mcmodel=CODE-MODEL
1549
1550     _TILEPro Options_
1551          -mcpu=CPU  -m32
1552
1553     _V850 Options_
1554          -mlong-calls  -mno-long-calls  -mep  -mno-ep
1555          -mprolog-function  -mno-prolog-function  -mspace
1556          -mtda=N  -msda=N  -mzda=N
1557          -mapp-regs  -mno-app-regs
1558          -mdisable-callt  -mno-disable-callt
1559          -mv850e2v3  -mv850e2  -mv850e1  -mv850es
1560          -mv850e  -mv850  -mv850e3v5
1561          -mloop
1562          -mrelax
1563          -mlong-jumps
1564          -msoft-float
1565          -mhard-float
1566          -mgcc-abi
1567          -mrh850-abi
1568          -mbig-switch
1569
1570     _VAX Options_
1571          -mg  -mgnu  -munix
1572
1573     _Visium Options_
1574          -mdebug  -msim  -mfpu  -mno-fpu  -mhard-float  -msoft-float
1575          -mcpu=CPU-TYPE  -mtune=CPU-TYPE  -msv-mode  -muser-mode
1576
1577     _VMS Options_
1578          -mvms-return-codes  -mdebug-main=PREFIX  -mmalloc64
1579          -mpointer-size=SIZE
1580
1581     _VxWorks Options_
1582          -mrtp  -non-static  -Bstatic  -Bdynamic
1583          -Xbind-lazy  -Xbind-now
1584
1585     _x86 Options_
1586          -mtune=CPU-TYPE  -march=CPU-TYPE
1587          -mtune-ctrl=FEATURE-LIST  -mdump-tune-features  -mno-default
1588          -mfpmath=UNIT
1589          -masm=DIALECT  -mno-fancy-math-387
1590          -mno-fp-ret-in-387  -m80387  -mhard-float  -msoft-float
1591          -mno-wide-multiply  -mrtd  -malign-double
1592          -mpreferred-stack-boundary=NUM
1593          -mincoming-stack-boundary=NUM
1594          -mcld  -mcx16  -msahf  -mmovbe  -mcrc32
1595          -mrecip  -mrecip=OPT
1596          -mvzeroupper  -mprefer-avx128  -mprefer-vector-width=OPT
1597          -mmmx  -msse  -msse2  -msse3  -mssse3  -msse4.1  -msse4.2  -msse4  -mavx
1598          -mavx2  -mavx512f  -mavx512pf  -mavx512er  -mavx512cd  -mavx512vl
1599          -mavx512bw  -mavx512dq  -mavx512ifma  -mavx512vbmi  -msha  -maes
1600          -mpclmul  -mfsgsbase  -mrdrnd  -mf16c  -mfma  -mpconfig  -mwbnoinvd
1601          -mptwrite  -mprefetchwt1  -mclflushopt  -mclwb  -mxsavec  -mxsaves
1602          -msse4a  -m3dnow  -m3dnowa  -mpopcnt  -mabm  -mbmi  -mtbm  -mfma4  -mxop
1603          -madx  -mlzcnt  -mbmi2  -mfxsr  -mxsave  -mxsaveopt  -mrtm  -mhle  -mlwp
1604          -mmwaitx  -mclzero  -mpku  -mthreads  -mgfni  -mvaes  -mwaitpkg
1605          -mshstk -mmanual-endbr -mforce-indirect-call  -mavx512vbmi2
1606          -mvpclmulqdq  -mavx512bitalg  -mmovdiri  -mmovdir64b  -mavx512vpopcntdq
1607          -mavx5124fmaps  -mavx512vnni  -mavx5124vnniw  -mprfchw  -mrdpid
1608          -mrdseed  -msgx
1609          -mcldemote  -mms-bitfields  -mno-align-stringops  -minline-all-stringops
1610          -minline-stringops-dynamically  -mstringop-strategy=ALG
1611          -mmemcpy-strategy=STRATEGY  -mmemset-strategy=STRATEGY
1612          -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
1613          -m96bit-long-double  -mlong-double-64  -mlong-double-80  -mlong-double-128
1614          -mregparm=NUM  -msseregparm
1615          -mveclibabi=TYPE  -mvect8-ret-in-mem
1616          -mpc32  -mpc64  -mpc80  -mstackrealign
1617          -momit-leaf-frame-pointer  -mno-red-zone  -mno-tls-direct-seg-refs
1618          -mcmodel=CODE-MODEL  -mabi=NAME  -maddress-mode=MODE
1619          -m32  -m64  -mx32  -m16  -miamcu  -mlarge-data-threshold=NUM
1620          -msse2avx  -mfentry  -mrecord-mcount  -mnop-mcount  -m8bit-idiv
1621          -minstrument-return=TYPE -mfentry-name=NAME -mfentry-section=NAME
1622          -mavx256-split-unaligned-load  -mavx256-split-unaligned-store
1623          -malign-data=TYPE  -mstack-protector-guard=GUARD
1624          -mstack-protector-guard-reg=REG
1625          -mstack-protector-guard-offset=OFFSET
1626          -mstack-protector-guard-symbol=SYMBOL
1627          -mgeneral-regs-only  -mcall-ms2sysv-xlogues
1628          -mindirect-branch=CHOICE  -mfunction-return=CHOICE
1629          -mindirect-branch-register
1630
1631     _x86 Windows Options_
1632          -mconsole  -mcygwin  -mno-cygwin  -mdll
1633          -mnop-fun-dllimport  -mthread
1634          -municode  -mwin32  -mwindows  -fno-set-stack-executable
1635
1636     _Xstormy16 Options_
1637          -msim
1638
1639     _Xtensa Options_
1640          -mconst16  -mno-const16
1641          -mfused-madd  -mno-fused-madd
1642          -mforce-no-pic
1643          -mserialize-volatile  -mno-serialize-volatile
1644          -mtext-section-literals  -mno-text-section-literals
1645          -mauto-litpools  -mno-auto-litpools
1646          -mtarget-align  -mno-target-align
1647          -mlongcalls  -mno-longcalls
1648
1649     _zSeries Options_ See S/390 and zSeries Options.
1650
1651
1652File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
1653
16543.2 Options Controlling the Kind of Output
1655==========================================
1656
1657Compilation can involve up to four stages: preprocessing, compilation
1658proper, assembly and linking, always in that order.  GCC is capable of
1659preprocessing and compiling several files either into several assembler
1660input files, or into one assembler input file; then each assembler input
1661file produces an object file, and linking combines all the object files
1662(those newly compiled, and those specified as input) into an executable
1663file.
1664
1665 For any given input file, the file name suffix determines what kind of
1666compilation is done:
1667
1668'FILE.c'
1669     C source code that must be preprocessed.
1670
1671'FILE.i'
1672     C source code that should not be preprocessed.
1673
1674'FILE.ii'
1675     C++ source code that should not be preprocessed.
1676
1677'FILE.m'
1678     Objective-C source code.  Note that you must link with the
1679     'libobjc' library to make an Objective-C program work.
1680
1681'FILE.mi'
1682     Objective-C source code that should not be preprocessed.
1683
1684'FILE.mm'
1685'FILE.M'
1686     Objective-C++ source code.  Note that you must link with the
1687     'libobjc' library to make an Objective-C++ program work.  Note that
1688     '.M' refers to a literal capital M.
1689
1690'FILE.mii'
1691     Objective-C++ source code that should not be preprocessed.
1692
1693'FILE.h'
1694     C, C++, Objective-C or Objective-C++ header file to be turned into
1695     a precompiled header (default), or C, C++ header file to be turned
1696     into an Ada spec (via the '-fdump-ada-spec' switch).
1697
1698'FILE.cc'
1699'FILE.cp'
1700'FILE.cxx'
1701'FILE.cpp'
1702'FILE.CPP'
1703'FILE.c++'
1704'FILE.C'
1705     C++ source code that must be preprocessed.  Note that in '.cxx',
1706     the last two letters must both be literally 'x'.  Likewise, '.C'
1707     refers to a literal capital C.
1708
1709'FILE.mm'
1710'FILE.M'
1711     Objective-C++ source code that must be preprocessed.
1712
1713'FILE.mii'
1714     Objective-C++ source code that should not be preprocessed.
1715
1716'FILE.hh'
1717'FILE.H'
1718'FILE.hp'
1719'FILE.hxx'
1720'FILE.hpp'
1721'FILE.HPP'
1722'FILE.h++'
1723'FILE.tcc'
1724     C++ header file to be turned into a precompiled header or Ada spec.
1725
1726'FILE.f'
1727'FILE.for'
1728'FILE.ftn'
1729     Fixed form Fortran source code that should not be preprocessed.
1730
1731'FILE.F'
1732'FILE.FOR'
1733'FILE.fpp'
1734'FILE.FPP'
1735'FILE.FTN'
1736     Fixed form Fortran source code that must be preprocessed (with the
1737     traditional preprocessor).
1738
1739'FILE.f90'
1740'FILE.f95'
1741'FILE.f03'
1742'FILE.f08'
1743     Free form Fortran source code that should not be preprocessed.
1744
1745'FILE.F90'
1746'FILE.F95'
1747'FILE.F03'
1748'FILE.F08'
1749     Free form Fortran source code that must be preprocessed (with the
1750     traditional preprocessor).
1751
1752'FILE.go'
1753     Go source code.
1754
1755'FILE.brig'
1756     BRIG files (binary representation of HSAIL).
1757
1758'FILE.d'
1759     D source code.
1760
1761'FILE.di'
1762     D interface file.
1763
1764'FILE.dd'
1765     D documentation code (Ddoc).
1766
1767'FILE.ads'
1768     Ada source code file that contains a library unit declaration (a
1769     declaration of a package, subprogram, or generic, or a generic
1770     instantiation), or a library unit renaming declaration (a package,
1771     generic, or subprogram renaming declaration).  Such files are also
1772     called "specs".
1773
1774'FILE.adb'
1775     Ada source code file containing a library unit body (a subprogram
1776     or package body).  Such files are also called "bodies".
1777
1778'FILE.s'
1779     Assembler code.
1780
1781'FILE.S'
1782'FILE.sx'
1783     Assembler code that must be preprocessed.
1784
1785'OTHER'
1786     An object file to be fed straight into linking.  Any file name with
1787     no recognized suffix is treated this way.
1788
1789 You can specify the input language explicitly with the '-x' option:
1790
1791'-x LANGUAGE'
1792     Specify explicitly the LANGUAGE for the following input files
1793     (rather than letting the compiler choose a default based on the
1794     file name suffix).  This option applies to all following input
1795     files until the next '-x' option.  Possible values for LANGUAGE
1796     are:
1797          c  c-header  cpp-output
1798          c++  c++-header  c++-cpp-output
1799          objective-c  objective-c-header  objective-c-cpp-output
1800          objective-c++ objective-c++-header objective-c++-cpp-output
1801          assembler  assembler-with-cpp
1802          ada
1803          d
1804          f77  f77-cpp-input f95  f95-cpp-input
1805          go
1806          brig
1807
1808'-x none'
1809     Turn off any specification of a language, so that subsequent files
1810     are handled according to their file name suffixes (as they are if
1811     '-x' has not been used at all).
1812
1813 If you only want some of the stages of compilation, you can use '-x'
1814(or filename suffixes) to tell 'gcc' where to start, and one of the
1815options '-c', '-S', or '-E' to say where 'gcc' is to stop.  Note that
1816some combinations (for example, '-x cpp-output -E') instruct 'gcc' to do
1817nothing at all.
1818
1819'-c'
1820     Compile or assemble the source files, but do not link.  The linking
1821     stage simply is not done.  The ultimate output is in the form of an
1822     object file for each source file.
1823
1824     By default, the object file name for a source file is made by
1825     replacing the suffix '.c', '.i', '.s', etc., with '.o'.
1826
1827     Unrecognized input files, not requiring compilation or assembly,
1828     are ignored.
1829
1830'-S'
1831     Stop after the stage of compilation proper; do not assemble.  The
1832     output is in the form of an assembler code file for each
1833     non-assembler input file specified.
1834
1835     By default, the assembler file name for a source file is made by
1836     replacing the suffix '.c', '.i', etc., with '.s'.
1837
1838     Input files that don't require compilation are ignored.
1839
1840'-E'
1841     Stop after the preprocessing stage; do not run the compiler proper.
1842     The output is in the form of preprocessed source code, which is
1843     sent to the standard output.
1844
1845     Input files that don't require preprocessing are ignored.
1846
1847'-o FILE'
1848     Place output in file FILE.  This applies to whatever sort of output
1849     is being produced, whether it be an executable file, an object
1850     file, an assembler file or preprocessed C code.
1851
1852     If '-o' is not specified, the default is to put an executable file
1853     in 'a.out', the object file for 'SOURCE.SUFFIX' in 'SOURCE.o', its
1854     assembler file in 'SOURCE.s', a precompiled header file in
1855     'SOURCE.SUFFIX.gch', and all preprocessed C source on standard
1856     output.
1857
1858'-v'
1859     Print (on standard error output) the commands executed to run the
1860     stages of compilation.  Also print the version number of the
1861     compiler driver program and of the preprocessor and the compiler
1862     proper.
1863
1864'-###'
1865     Like '-v' except the commands are not executed and arguments are
1866     quoted unless they contain only alphanumeric characters or './-_'.
1867     This is useful for shell scripts to capture the driver-generated
1868     command lines.
1869
1870'--help'
1871     Print (on the standard output) a description of the command-line
1872     options understood by 'gcc'.  If the '-v' option is also specified
1873     then '--help' is also passed on to the various processes invoked by
1874     'gcc', so that they can display the command-line options they
1875     accept.  If the '-Wextra' option has also been specified (prior to
1876     the '--help' option), then command-line options that have no
1877     documentation associated with them are also displayed.
1878
1879'--target-help'
1880     Print (on the standard output) a description of target-specific
1881     command-line options for each tool.  For some targets extra
1882     target-specific information may also be printed.
1883
1884'--help={CLASS|[^]QUALIFIER}[,...]'
1885     Print (on the standard output) a description of the command-line
1886     options understood by the compiler that fit into all specified
1887     classes and qualifiers.  These are the supported classes:
1888
1889     'optimizers'
1890          Display all of the optimization options supported by the
1891          compiler.
1892
1893     'warnings'
1894          Display all of the options controlling warning messages
1895          produced by the compiler.
1896
1897     'target'
1898          Display target-specific options.  Unlike the '--target-help'
1899          option however, target-specific options of the linker and
1900          assembler are not displayed.  This is because those tools do
1901          not currently support the extended '--help=' syntax.
1902
1903     'params'
1904          Display the values recognized by the '--param' option.
1905
1906     LANGUAGE
1907          Display the options supported for LANGUAGE, where LANGUAGE is
1908          the name of one of the languages supported in this version of
1909          GCC.
1910
1911     'common'
1912          Display the options that are common to all languages.
1913
1914     These are the supported qualifiers:
1915
1916     'undocumented'
1917          Display only those options that are undocumented.
1918
1919     'joined'
1920          Display options taking an argument that appears after an equal
1921          sign in the same continuous piece of text, such as:
1922          '--help=target'.
1923
1924     'separate'
1925          Display options taking an argument that appears as a separate
1926          word following the original option, such as: '-o output-file'.
1927
1928     Thus for example to display all the undocumented target-specific
1929     switches supported by the compiler, use:
1930
1931          --help=target,undocumented
1932
1933     The sense of a qualifier can be inverted by prefixing it with the
1934     '^' character, so for example to display all binary warning options
1935     (i.e., ones that are either on or off and that do not take an
1936     argument) that have a description, use:
1937
1938          --help=warnings,^joined,^undocumented
1939
1940     The argument to '--help=' should not consist solely of inverted
1941     qualifiers.
1942
1943     Combining several classes is possible, although this usually
1944     restricts the output so much that there is nothing to display.  One
1945     case where it does work, however, is when one of the classes is
1946     TARGET.  For example, to display all the target-specific
1947     optimization options, use:
1948
1949          --help=target,optimizers
1950
1951     The '--help=' option can be repeated on the command line.  Each
1952     successive use displays its requested class of options, skipping
1953     those that have already been displayed.  If '--help' is also
1954     specified anywhere on the command line then this takes precedence
1955     over any '--help=' option.
1956
1957     If the '-Q' option appears on the command line before the '--help='
1958     option, then the descriptive text displayed by '--help=' is
1959     changed.  Instead of describing the displayed options, an
1960     indication is given as to whether the option is enabled, disabled
1961     or set to a specific value (assuming that the compiler knows this
1962     at the point where the '--help=' option is used).
1963
1964     Here is a truncated example from the ARM port of 'gcc':
1965
1966            % gcc -Q -mabi=2 --help=target -c
1967            The following options are target specific:
1968            -mabi=                                2
1969            -mabort-on-noreturn                   [disabled]
1970            -mapcs                                [disabled]
1971
1972     The output is sensitive to the effects of previous command-line
1973     options, so for example it is possible to find out which
1974     optimizations are enabled at '-O2' by using:
1975
1976          -Q -O2 --help=optimizers
1977
1978     Alternatively you can discover which binary optimizations are
1979     enabled by '-O3' by using:
1980
1981          gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1982          gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1983          diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1984
1985'--version'
1986     Display the version number and copyrights of the invoked GCC.
1987
1988'-pass-exit-codes'
1989     Normally the 'gcc' program exits with the code of 1 if any phase of
1990     the compiler returns a non-success return code.  If you specify
1991     '-pass-exit-codes', the 'gcc' program instead returns with the
1992     numerically highest error produced by any phase returning an error
1993     indication.  The C, C++, and Fortran front ends return 4 if an
1994     internal compiler error is encountered.
1995
1996'-pipe'
1997     Use pipes rather than temporary files for communication between the
1998     various stages of compilation.  This fails to work on some systems
1999     where the assembler is unable to read from a pipe; but the GNU
2000     assembler has no trouble.
2001
2002'-specs=FILE'
2003     Process FILE after the compiler reads in the standard 'specs' file,
2004     in order to override the defaults which the 'gcc' driver program
2005     uses when determining what switches to pass to 'cc1', 'cc1plus',
2006     'as', 'ld', etc.  More than one '-specs=FILE' can be specified on
2007     the command line, and they are processed in order, from left to
2008     right.  *Note Spec Files::, for information about the format of the
2009     FILE.
2010
2011'-wrapper'
2012     Invoke all subcommands under a wrapper program.  The name of the
2013     wrapper program and its parameters are passed as a comma separated
2014     list.
2015
2016          gcc -c t.c -wrapper gdb,--args
2017
2018     This invokes all subprograms of 'gcc' under 'gdb --args', thus the
2019     invocation of 'cc1' is 'gdb --args cc1 ...'.
2020
2021'-ffile-prefix-map=OLD=NEW'
2022     When compiling files residing in directory 'OLD', record any
2023     references to them in the result of the compilation as if the files
2024     resided in directory 'NEW' instead.  Specifying this option is
2025     equivalent to specifying all the individual '-f*-prefix-map'
2026     options.  This can be used to make reproducible builds that are
2027     location independent.  See also '-fmacro-prefix-map' and
2028     '-fdebug-prefix-map'.
2029
2030'-fplugin=NAME.so'
2031     Load the plugin code in file NAME.so, assumed to be a shared object
2032     to be dlopen'd by the compiler.  The base name of the shared object
2033     file is used to identify the plugin for the purposes of argument
2034     parsing (See '-fplugin-arg-NAME-KEY=VALUE' below).  Each plugin
2035     should define the callback functions specified in the Plugins API.
2036
2037'-fplugin-arg-NAME-KEY=VALUE'
2038     Define an argument called KEY with a value of VALUE for the plugin
2039     called NAME.
2040
2041'-fdump-ada-spec[-slim]'
2042     For C and C++ source and include files, generate corresponding Ada
2043     specs.  *Note (gnat_ugn)Generating Ada Bindings for C and C++
2044     headers::, which provides detailed documentation on this feature.
2045
2046'-fada-spec-parent=UNIT'
2047     In conjunction with '-fdump-ada-spec[-slim]' above, generate Ada
2048     specs as child units of parent UNIT.
2049
2050'-fdump-go-spec=FILE'
2051     For input files in any language, generate corresponding Go
2052     declarations in FILE.  This generates Go 'const', 'type', 'var',
2053     and 'func' declarations which may be a useful way to start writing
2054     a Go interface to code written in some other language.
2055
2056'@FILE'
2057     Read command-line options from FILE.  The options read are inserted
2058     in place of the original @FILE option.  If FILE does not exist, or
2059     cannot be read, then the option will be treated literally, and not
2060     removed.
2061
2062     Options in FILE are separated by whitespace.  A whitespace
2063     character may be included in an option by surrounding the entire
2064     option in either single or double quotes.  Any character (including
2065     a backslash) may be included by prefixing the character to be
2066     included with a backslash.  The FILE may itself contain additional
2067     @FILE options; any such options will be processed recursively.
2068
2069
2070File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
2071
20723.3 Compiling C++ Programs
2073==========================
2074
2075C++ source files conventionally use one of the suffixes '.C', '.cc',
2076'.cpp', '.CPP', '.c++', '.cp', or '.cxx'; C++ header files often use
2077'.hh', '.hpp', '.H', or (for shared template code) '.tcc'; and
2078preprocessed C++ files use the suffix '.ii'.  GCC recognizes files with
2079these names and compiles them as C++ programs even if you call the
2080compiler the same way as for compiling C programs (usually with the name
2081'gcc').
2082
2083 However, the use of 'gcc' does not add the C++ library.  'g++' is a
2084program that calls GCC and automatically specifies linking against the
2085C++ library.  It treats '.c', '.h' and '.i' files as C++ source files
2086instead of C source files unless '-x' is used.  This program is also
2087useful when precompiling a C header file with a '.h' extension for use
2088in C++ compilations.  On many systems, 'g++' is also installed with the
2089name 'c++'.
2090
2091 When you compile C++ programs, you may specify many of the same
2092command-line options that you use for compiling programs in any
2093language; or command-line options meaningful for C and related
2094languages; or options that are meaningful only for C++ programs.  *Note
2095Options Controlling C Dialect: C Dialect Options, for explanations of
2096options for languages related to C.  *Note Options Controlling C++
2097Dialect: C++ Dialect Options, for explanations of options that are
2098meaningful only for C++ programs.
2099
2100
2101File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
2102
21033.4 Options Controlling C Dialect
2104=================================
2105
2106The following options control the dialect of C (or languages derived
2107from C, such as C++, Objective-C and Objective-C++) that the compiler
2108accepts:
2109
2110'-ansi'
2111     In C mode, this is equivalent to '-std=c90'.  In C++ mode, it is
2112     equivalent to '-std=c++98'.
2113
2114     This turns off certain features of GCC that are incompatible with
2115     ISO C90 (when compiling C code), or of standard C++ (when compiling
2116     C++ code), such as the 'asm' and 'typeof' keywords, and predefined
2117     macros such as 'unix' and 'vax' that identify the type of system
2118     you are using.  It also enables the undesirable and rarely used ISO
2119     trigraph feature.  For the C compiler, it disables recognition of
2120     C++ style '//' comments as well as the 'inline' keyword.
2121
2122     The alternate keywords '__asm__', '__extension__', '__inline__' and
2123     '__typeof__' continue to work despite '-ansi'.  You would not want
2124     to use them in an ISO C program, of course, but it is useful to put
2125     them in header files that might be included in compilations done
2126     with '-ansi'.  Alternate predefined macros such as '__unix__' and
2127     '__vax__' are also available, with or without '-ansi'.
2128
2129     The '-ansi' option does not cause non-ISO programs to be rejected
2130     gratuitously.  For that, '-Wpedantic' is required in addition to
2131     '-ansi'.  *Note Warning Options::.
2132
2133     The macro '__STRICT_ANSI__' is predefined when the '-ansi' option
2134     is used.  Some header files may notice this macro and refrain from
2135     declaring certain functions or defining certain macros that the ISO
2136     standard doesn't call for; this is to avoid interfering with any
2137     programs that might use these names for other things.
2138
2139     Functions that are normally built in but do not have semantics
2140     defined by ISO C (such as 'alloca' and 'ffs') are not built-in
2141     functions when '-ansi' is used.  *Note Other built-in functions
2142     provided by GCC: Other Builtins, for details of the functions
2143     affected.
2144
2145'-std='
2146     Determine the language standard.  *Note Language Standards
2147     Supported by GCC: Standards, for details of these standard
2148     versions.  This option is currently only supported when compiling C
2149     or C++.
2150
2151     The compiler can accept several base standards, such as 'c90' or
2152     'c++98', and GNU dialects of those standards, such as 'gnu90' or
2153     'gnu++98'.  When a base standard is specified, the compiler accepts
2154     all programs following that standard plus those using GNU
2155     extensions that do not contradict it.  For example, '-std=c90'
2156     turns off certain features of GCC that are incompatible with ISO
2157     C90, such as the 'asm' and 'typeof' keywords, but not other GNU
2158     extensions that do not have a meaning in ISO C90, such as omitting
2159     the middle term of a '?:' expression.  On the other hand, when a
2160     GNU dialect of a standard is specified, all features supported by
2161     the compiler are enabled, even when those features change the
2162     meaning of the base standard.  As a result, some strict-conforming
2163     programs may be rejected.  The particular standard is used by
2164     '-Wpedantic' to identify which features are GNU extensions given
2165     that version of the standard.  For example '-std=gnu90 -Wpedantic'
2166     warns about C++ style '//' comments, while '-std=gnu99 -Wpedantic'
2167     does not.
2168
2169     A value for this option must be provided; possible values are
2170
2171     'c90'
2172     'c89'
2173     'iso9899:1990'
2174          Support all ISO C90 programs (certain GNU extensions that
2175          conflict with ISO C90 are disabled).  Same as '-ansi' for C
2176          code.
2177
2178     'iso9899:199409'
2179          ISO C90 as modified in amendment 1.
2180
2181     'c99'
2182     'c9x'
2183     'iso9899:1999'
2184     'iso9899:199x'
2185          ISO C99.  This standard is substantially completely supported,
2186          modulo bugs and floating-point issues (mainly but not entirely
2187          relating to optional C99 features from Annexes F and G). See
2188          <http://gcc.gnu.org/c99status.html> for more information.  The
2189          names 'c9x' and 'iso9899:199x' are deprecated.
2190
2191     'c11'
2192     'c1x'
2193     'iso9899:2011'
2194          ISO C11, the 2011 revision of the ISO C standard.  This
2195          standard is substantially completely supported, modulo bugs,
2196          floating-point issues (mainly but not entirely relating to
2197          optional C11 features from Annexes F and G) and the optional
2198          Annexes K (Bounds-checking interfaces) and L (Analyzability).
2199          The name 'c1x' is deprecated.
2200
2201     'c17'
2202     'c18'
2203     'iso9899:2017'
2204     'iso9899:2018'
2205          ISO C17, the 2017 revision of the ISO C standard (published in
2206          2018).  This standard is same as C11 except for corrections of
2207          defects (all of which are also applied with '-std=c11') and a
2208          new value of '__STDC_VERSION__', and so is supported to the
2209          same extent as C11.
2210
2211     'c2x'
2212          The next version of the ISO C standard, still under
2213          development.  The support for this version is experimental and
2214          incomplete.
2215
2216     'gnu90'
2217     'gnu89'
2218          GNU dialect of ISO C90 (including some C99 features).
2219
2220     'gnu99'
2221     'gnu9x'
2222          GNU dialect of ISO C99.  The name 'gnu9x' is deprecated.
2223
2224     'gnu11'
2225     'gnu1x'
2226          GNU dialect of ISO C11.  The name 'gnu1x' is deprecated.
2227
2228     'gnu17'
2229     'gnu18'
2230          GNU dialect of ISO C17.  This is the default for C code.
2231
2232     'gnu2x'
2233          The next version of the ISO C standard, still under
2234          development, plus GNU extensions.  The support for this
2235          version is experimental and incomplete.
2236
2237     'c++98'
2238     'c++03'
2239          The 1998 ISO C++ standard plus the 2003 technical corrigendum
2240          and some additional defect reports.  Same as '-ansi' for C++
2241          code.
2242
2243     'gnu++98'
2244     'gnu++03'
2245          GNU dialect of '-std=c++98'.
2246
2247     'c++11'
2248     'c++0x'
2249          The 2011 ISO C++ standard plus amendments.  The name 'c++0x'
2250          is deprecated.
2251
2252     'gnu++11'
2253     'gnu++0x'
2254          GNU dialect of '-std=c++11'.  The name 'gnu++0x' is
2255          deprecated.
2256
2257     'c++14'
2258     'c++1y'
2259          The 2014 ISO C++ standard plus amendments.  The name 'c++1y'
2260          is deprecated.
2261
2262     'gnu++14'
2263     'gnu++1y'
2264          GNU dialect of '-std=c++14'.  This is the default for C++
2265          code.  The name 'gnu++1y' is deprecated.
2266
2267     'c++17'
2268     'c++1z'
2269          The 2017 ISO C++ standard plus amendments.  The name 'c++1z'
2270          is deprecated.
2271
2272     'gnu++17'
2273     'gnu++1z'
2274          GNU dialect of '-std=c++17'.  The name 'gnu++1z' is
2275          deprecated.
2276
2277     'c++2a'
2278          The next revision of the ISO C++ standard, tentatively planned
2279          for 2020.  Support is highly experimental, and will almost
2280          certainly change in incompatible ways in future releases.
2281
2282     'gnu++2a'
2283          GNU dialect of '-std=c++2a'.  Support is highly experimental,
2284          and will almost certainly change in incompatible ways in
2285          future releases.
2286
2287'-fgnu89-inline'
2288     The option '-fgnu89-inline' tells GCC to use the traditional GNU
2289     semantics for 'inline' functions when in C99 mode.  *Note An Inline
2290     Function is As Fast As a Macro: Inline.  Using this option is
2291     roughly equivalent to adding the 'gnu_inline' function attribute to
2292     all inline functions (*note Function Attributes::).
2293
2294     The option '-fno-gnu89-inline' explicitly tells GCC to use the C99
2295     semantics for 'inline' when in C99 or gnu99 mode (i.e., it
2296     specifies the default behavior).  This option is not supported in
2297     '-std=c90' or '-std=gnu90' mode.
2298
2299     The preprocessor macros '__GNUC_GNU_INLINE__' and
2300     '__GNUC_STDC_INLINE__' may be used to check which semantics are in
2301     effect for 'inline' functions.  *Note (cpp)Common Predefined
2302     Macros::.
2303
2304'-fpermitted-flt-eval-methods=STYLE'
2305     ISO/IEC TS 18661-3 defines new permissible values for
2306     'FLT_EVAL_METHOD' that indicate that operations and constants with
2307     a semantic type that is an interchange or extended format should be
2308     evaluated to the precision and range of that type.  These new
2309     values are a superset of those permitted under C99/C11, which does
2310     not specify the meaning of other positive values of
2311     'FLT_EVAL_METHOD'.  As such, code conforming to C11 may not have
2312     been written expecting the possibility of the new values.
2313
2314     '-fpermitted-flt-eval-methods' specifies whether the compiler
2315     should allow only the values of 'FLT_EVAL_METHOD' specified in
2316     C99/C11, or the extended set of values specified in ISO/IEC TS
2317     18661-3.
2318
2319     STYLE is either 'c11' or 'ts-18661-3' as appropriate.
2320
2321     The default when in a standards compliant mode ('-std=c11' or
2322     similar) is '-fpermitted-flt-eval-methods=c11'.  The default when
2323     in a GNU dialect ('-std=gnu11' or similar) is
2324     '-fpermitted-flt-eval-methods=ts-18661-3'.
2325
2326'-aux-info FILENAME'
2327     Output to the given filename prototyped declarations for all
2328     functions declared and/or defined in a translation unit, including
2329     those in header files.  This option is silently ignored in any
2330     language other than C.
2331
2332     Besides declarations, the file indicates, in comments, the origin
2333     of each declaration (source file and line), whether the declaration
2334     was implicit, prototyped or unprototyped ('I', 'N' for new or 'O'
2335     for old, respectively, in the first character after the line number
2336     and the colon), and whether it came from a declaration or a
2337     definition ('C' or 'F', respectively, in the following character).
2338     In the case of function definitions, a K&R-style list of arguments
2339     followed by their declarations is also provided, inside comments,
2340     after the declaration.
2341
2342'-fallow-parameterless-variadic-functions'
2343     Accept variadic functions without named parameters.
2344
2345     Although it is possible to define such a function, this is not very
2346     useful as it is not possible to read the arguments.  This is only
2347     supported for C as this construct is allowed by C++.
2348
2349'-fno-asm'
2350     Do not recognize 'asm', 'inline' or 'typeof' as a keyword, so that
2351     code can use these words as identifiers.  You can use the keywords
2352     '__asm__', '__inline__' and '__typeof__' instead.  '-ansi' implies
2353     '-fno-asm'.
2354
2355     In C++, this switch only affects the 'typeof' keyword, since 'asm'
2356     and 'inline' are standard keywords.  You may want to use the
2357     '-fno-gnu-keywords' flag instead, which has the same effect.  In
2358     C99 mode ('-std=c99' or '-std=gnu99'), this switch only affects the
2359     'asm' and 'typeof' keywords, since 'inline' is a standard keyword
2360     in ISO C99.
2361
2362'-fno-builtin'
2363'-fno-builtin-FUNCTION'
2364     Don't recognize built-in functions that do not begin with
2365     '__builtin_' as prefix.  *Note Other built-in functions provided by
2366     GCC: Other Builtins, for details of the functions affected,
2367     including those which are not built-in functions when '-ansi' or
2368     '-std' options for strict ISO C conformance are used because they
2369     do not have an ISO standard meaning.
2370
2371     GCC normally generates special code to handle certain built-in
2372     functions more efficiently; for instance, calls to 'alloca' may
2373     become single instructions which adjust the stack directly, and
2374     calls to 'memcpy' may become inline copy loops.  The resulting code
2375     is often both smaller and faster, but since the function calls no
2376     longer appear as such, you cannot set a breakpoint on those calls,
2377     nor can you change the behavior of the functions by linking with a
2378     different library.  In addition, when a function is recognized as a
2379     built-in function, GCC may use information about that function to
2380     warn about problems with calls to that function, or to generate
2381     more efficient code, even if the resulting code still contains
2382     calls to that function.  For example, warnings are given with
2383     '-Wformat' for bad calls to 'printf' when 'printf' is built in and
2384     'strlen' is known not to modify global memory.
2385
2386     With the '-fno-builtin-FUNCTION' option only the built-in function
2387     FUNCTION is disabled.  FUNCTION must not begin with '__builtin_'.
2388     If a function is named that is not built-in in this version of GCC,
2389     this option is ignored.  There is no corresponding
2390     '-fbuiltin-FUNCTION' option; if you wish to enable built-in
2391     functions selectively when using '-fno-builtin' or
2392     '-ffreestanding', you may define macros such as:
2393
2394          #define abs(n)          __builtin_abs ((n))
2395          #define strcpy(d, s)    __builtin_strcpy ((d), (s))
2396
2397'-fgimple'
2398
2399     Enable parsing of function definitions marked with '__GIMPLE'.
2400     This is an experimental feature that allows unit testing of GIMPLE
2401     passes.
2402
2403'-fhosted'
2404
2405     Assert that compilation targets a hosted environment.  This implies
2406     '-fbuiltin'.  A hosted environment is one in which the entire
2407     standard library is available, and in which 'main' has a return
2408     type of 'int'.  Examples are nearly everything except a kernel.
2409     This is equivalent to '-fno-freestanding'.
2410
2411'-ffreestanding'
2412
2413     Assert that compilation targets a freestanding environment.  This
2414     implies '-fno-builtin'.  A freestanding environment is one in which
2415     the standard library may not exist, and program startup may not
2416     necessarily be at 'main'.  The most obvious example is an OS
2417     kernel.  This is equivalent to '-fno-hosted'.
2418
2419     *Note Language Standards Supported by GCC: Standards, for details
2420     of freestanding and hosted environments.
2421
2422'-fopenacc'
2423     Enable handling of OpenACC directives '#pragma acc' in C/C++ and
2424     '!$acc' in Fortran.  When '-fopenacc' is specified, the compiler
2425     generates accelerated code according to the OpenACC Application
2426     Programming Interface v2.0 <https://www.openacc.org>.  This option
2427     implies '-pthread', and thus is only supported on targets that have
2428     support for '-pthread'.
2429
2430'-fopenacc-dim=GEOM'
2431     Specify default compute dimensions for parallel offload regions
2432     that do not explicitly specify.  The GEOM value is a triple of
2433     ':'-separated sizes, in order 'gang', 'worker' and, 'vector'.  A
2434     size can be omitted, to use a target-specific default value.
2435
2436'-fopenmp'
2437     Enable handling of OpenMP directives '#pragma omp' in C/C++ and
2438     '!$omp' in Fortran.  When '-fopenmp' is specified, the compiler
2439     generates parallel code according to the OpenMP Application Program
2440     Interface v4.5 <https://www.openmp.org>.  This option implies
2441     '-pthread', and thus is only supported on targets that have support
2442     for '-pthread'.  '-fopenmp' implies '-fopenmp-simd'.
2443
2444'-fopenmp-simd'
2445     Enable handling of OpenMP's SIMD directives with '#pragma omp' in
2446     C/C++ and '!$omp' in Fortran.  Other OpenMP directives are ignored.
2447
2448'-fgnu-tm'
2449     When the option '-fgnu-tm' is specified, the compiler generates
2450     code for the Linux variant of Intel's current Transactional Memory
2451     ABI specification document (Revision 1.1, May 6 2009).  This is an
2452     experimental feature whose interface may change in future versions
2453     of GCC, as the official specification changes.  Please note that
2454     not all architectures are supported for this feature.
2455
2456     For more information on GCC's support for transactional memory,
2457     *Note The GNU Transactional Memory Library: (libitm)Enabling
2458     libitm.
2459
2460     Note that the transactional memory feature is not supported with
2461     non-call exceptions ('-fnon-call-exceptions').
2462
2463'-fms-extensions'
2464     Accept some non-standard constructs used in Microsoft header files.
2465
2466     In C++ code, this allows member names in structures to be similar
2467     to previous types declarations.
2468
2469          typedef int UOW;
2470          struct ABC {
2471            UOW UOW;
2472          };
2473
2474     Some cases of unnamed fields in structures and unions are only
2475     accepted with this option.  *Note Unnamed struct/union fields
2476     within structs/unions: Unnamed Fields, for details.
2477
2478     Note that this option is off for all targets but x86 targets using
2479     ms-abi.
2480
2481'-fplan9-extensions'
2482     Accept some non-standard constructs used in Plan 9 code.
2483
2484     This enables '-fms-extensions', permits passing pointers to
2485     structures with anonymous fields to functions that expect pointers
2486     to elements of the type of the field, and permits referring to
2487     anonymous fields declared using a typedef.  *Note Unnamed
2488     struct/union fields within structs/unions: Unnamed Fields, for
2489     details.  This is only supported for C, not C++.
2490
2491'-fcond-mismatch'
2492     Allow conditional expressions with mismatched types in the second
2493     and third arguments.  The value of such an expression is void.
2494     This option is not supported for C++.
2495
2496'-flax-vector-conversions'
2497     Allow implicit conversions between vectors with differing numbers
2498     of elements and/or incompatible element types.  This option should
2499     not be used for new code.
2500
2501'-funsigned-char'
2502     Let the type 'char' be unsigned, like 'unsigned char'.
2503
2504     Each kind of machine has a default for what 'char' should be.  It
2505     is either like 'unsigned char' by default or like 'signed char' by
2506     default.
2507
2508     Ideally, a portable program should always use 'signed char' or
2509     'unsigned char' when it depends on the signedness of an object.
2510     But many programs have been written to use plain 'char' and expect
2511     it to be signed, or expect it to be unsigned, depending on the
2512     machines they were written for.  This option, and its inverse, let
2513     you make such a program work with the opposite default.
2514
2515     The type 'char' is always a distinct type from each of 'signed
2516     char' or 'unsigned char', even though its behavior is always just
2517     like one of those two.
2518
2519'-fsigned-char'
2520     Let the type 'char' be signed, like 'signed char'.
2521
2522     Note that this is equivalent to '-fno-unsigned-char', which is the
2523     negative form of '-funsigned-char'.  Likewise, the option
2524     '-fno-signed-char' is equivalent to '-funsigned-char'.
2525
2526'-fsigned-bitfields'
2527'-funsigned-bitfields'
2528'-fno-signed-bitfields'
2529'-fno-unsigned-bitfields'
2530     These options control whether a bit-field is signed or unsigned,
2531     when the declaration does not use either 'signed' or 'unsigned'.
2532     By default, such a bit-field is signed, because this is consistent:
2533     the basic integer types such as 'int' are signed types.
2534
2535'-fsso-struct=ENDIANNESS'
2536     Set the default scalar storage order of structures and unions to
2537     the specified endianness.  The accepted values are 'big-endian',
2538     'little-endian' and 'native' for the native endianness of the
2539     target (the default).  This option is not supported for C++.
2540
2541     *Warning:* the '-fsso-struct' switch causes GCC to generate code
2542     that is not binary compatible with code generated without it if the
2543     specified endianness is not the native endianness of the target.
2544
2545
2546File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
2547
25483.5 Options Controlling C++ Dialect
2549===================================
2550
2551This section describes the command-line options that are only meaningful
2552for C++ programs.  You can also use most of the GNU compiler options
2553regardless of what language your program is in.  For example, you might
2554compile a file 'firstClass.C' like this:
2555
2556     g++ -g -fstrict-enums -O -c firstClass.C
2557
2558In this example, only '-fstrict-enums' is an option meant only for C++
2559programs; you can use the other options with any language supported by
2560GCC.
2561
2562 Some options for compiling C programs, such as '-std', are also
2563relevant for C++ programs.  *Note Options Controlling C Dialect: C
2564Dialect Options.
2565
2566 Here is a list of options that are _only_ for compiling C++ programs:
2567
2568'-fabi-version=N'
2569     Use version N of the C++ ABI.  The default is version 0.
2570
2571     Version 0 refers to the version conforming most closely to the C++
2572     ABI specification.  Therefore, the ABI obtained using version 0
2573     will change in different versions of G++ as ABI bugs are fixed.
2574
2575     Version 1 is the version of the C++ ABI that first appeared in G++
2576     3.2.
2577
2578     Version 2 is the version of the C++ ABI that first appeared in G++
2579     3.4, and was the default through G++ 4.9.
2580
2581     Version 3 corrects an error in mangling a constant address as a
2582     template argument.
2583
2584     Version 4, which first appeared in G++ 4.5, implements a standard
2585     mangling for vector types.
2586
2587     Version 5, which first appeared in G++ 4.6, corrects the mangling
2588     of attribute const/volatile on function pointer types, decltype of
2589     a plain decl, and use of a function parameter in the declaration of
2590     another parameter.
2591
2592     Version 6, which first appeared in G++ 4.7, corrects the promotion
2593     behavior of C++11 scoped enums and the mangling of template
2594     argument packs, const/static_cast, prefix ++ and -, and a class
2595     scope function used as a template argument.
2596
2597     Version 7, which first appeared in G++ 4.8, that treats nullptr_t
2598     as a builtin type and corrects the mangling of lambdas in default
2599     argument scope.
2600
2601     Version 8, which first appeared in G++ 4.9, corrects the
2602     substitution behavior of function types with
2603     function-cv-qualifiers.
2604
2605     Version 9, which first appeared in G++ 5.2, corrects the alignment
2606     of 'nullptr_t'.
2607
2608     Version 10, which first appeared in G++ 6.1, adds mangling of
2609     attributes that affect type identity, such as ia32 calling
2610     convention attributes (e.g. 'stdcall').
2611
2612     Version 11, which first appeared in G++ 7, corrects the mangling of
2613     sizeof...  expressions and operator names.  For multiple entities
2614     with the same name within a function, that are declared in
2615     different scopes, the mangling now changes starting with the
2616     twelfth occurrence.  It also implies '-fnew-inheriting-ctors'.
2617
2618     Version 12, which first appeared in G++ 8, corrects the calling
2619     conventions for empty classes on the x86_64 target and for classes
2620     with only deleted copy/move constructors.  It accidentally changes
2621     the calling convention for classes with a deleted copy constructor
2622     and a trivial move constructor.
2623
2624     Version 13, which first appeared in G++ 8.2, fixes the accidental
2625     change in version 12.
2626
2627     See also '-Wabi'.
2628
2629'-fabi-compat-version=N'
2630     On targets that support strong aliases, G++ works around mangling
2631     changes by creating an alias with the correct mangled name when
2632     defining a symbol with an incorrect mangled name.  This switch
2633     specifies which ABI version to use for the alias.
2634
2635     With '-fabi-version=0' (the default), this defaults to 11 (GCC 7
2636     compatibility).  If another ABI version is explicitly selected,
2637     this defaults to 0.  For compatibility with GCC versions 3.2
2638     through 4.9, use '-fabi-compat-version=2'.
2639
2640     If this option is not provided but '-Wabi=N' is, that version is
2641     used for compatibility aliases.  If this option is provided along
2642     with '-Wabi' (without the version), the version from this option is
2643     used for the warning.
2644
2645'-fno-access-control'
2646     Turn off all access checking.  This switch is mainly useful for
2647     working around bugs in the access control code.
2648
2649'-faligned-new'
2650     Enable support for C++17 'new' of types that require more alignment
2651     than 'void* ::operator new(std::size_t)' provides.  A numeric
2652     argument such as '-faligned-new=32' can be used to specify how much
2653     alignment (in bytes) is provided by that function, but few users
2654     will need to override the default of 'alignof(std::max_align_t)'.
2655
2656     This flag is enabled by default for '-std=c++17'.
2657
2658'-fchar8_t'
2659'-fno-char8_t'
2660     Enable support for 'char8_t' as adopted for C++2a.  This includes
2661     the addition of a new 'char8_t' fundamental type, changes to the
2662     types of UTF-8 string and character literals, new signatures for
2663     user-defined literals, associated standard library updates, and new
2664     '__cpp_char8_t' and '__cpp_lib_char8_t' feature test macros.
2665
2666     This option enables functions to be overloaded for ordinary and
2667     UTF-8 strings:
2668
2669          int f(const char *);    // #1
2670          int f(const char8_t *); // #2
2671          int v1 = f("text");     // Calls #1
2672          int v2 = f(u8"text");   // Calls #2
2673
2674     and introduces new signatures for user-defined literals:
2675
2676          int operator""_udl1(char8_t);
2677          int v3 = u8'x'_udl1;
2678          int operator""_udl2(const char8_t*, std::size_t);
2679          int v4 = u8"text"_udl2;
2680          template<typename T, T...> int operator""_udl3();
2681          int v5 = u8"text"_udl3;
2682
2683     The change to the types of UTF-8 string and character literals
2684     introduces incompatibilities with ISO C++11 and later standards.
2685     For example, the following code is well-formed under ISO C++11, but
2686     is ill-formed when '-fchar8_t' is specified.
2687
2688          char ca[] = u8"xx";     // error: char-array initialized from wide
2689                                  //        string
2690          const char *cp = u8"xx";// error: invalid conversion from
2691                                  //        `const char8_t*' to `const char*'
2692          int f(const char*);
2693          auto v = f(u8"xx");     // error: invalid conversion from
2694                                  //        `const char8_t*' to `const char*'
2695          std::string s{u8"xx"};  // error: no matching function for call to
2696                                  //        `std::basic_string<char>::basic_string()'
2697          using namespace std::literals;
2698          s = u8"xx"s;            // error: conversion from
2699                                  //        `basic_string<char8_t>' to non-scalar
2700                                  //        type `basic_string<char>' requested
2701
2702'-fcheck-new'
2703     Check that the pointer returned by 'operator new' is non-null
2704     before attempting to modify the storage allocated.  This check is
2705     normally unnecessary because the C++ standard specifies that
2706     'operator new' only returns '0' if it is declared 'throw()', in
2707     which case the compiler always checks the return value even without
2708     this option.  In all other cases, when 'operator new' has a
2709     non-empty exception specification, memory exhaustion is signalled
2710     by throwing 'std::bad_alloc'.  See also 'new (nothrow)'.
2711
2712'-fconcepts'
2713     Enable support for the C++ Extensions for Concepts Technical
2714     Specification, ISO 19217 (2015), which allows code like
2715
2716          template <class T> concept bool Addable = requires (T t) { t + t; };
2717          template <Addable T> T add (T a, T b) { return a + b; }
2718
2719'-fconstexpr-depth=N'
2720     Set the maximum nested evaluation depth for C++11 constexpr
2721     functions to N.  A limit is needed to detect endless recursion
2722     during constant expression evaluation.  The minimum specified by
2723     the standard is 512.
2724
2725'-fconstexpr-loop-limit=N'
2726     Set the maximum number of iterations for a loop in C++14 constexpr
2727     functions to N.  A limit is needed to detect infinite loops during
2728     constant expression evaluation.  The default is 262144 (1<<18).
2729
2730'-fconstexpr-ops-limit=N'
2731     Set the maximum number of operations during a single constexpr
2732     evaluation.  Even when number of iterations of a single loop is
2733     limited with the above limit, if there are several nested loops and
2734     each of them has many iterations but still smaller than the above
2735     limit, or if in a body of some loop or even outside of a loop too
2736     many expressions need to be evaluated, the resulting constexpr
2737     evaluation might take too long.  The default is 33554432 (1<<25).
2738
2739'-fdeduce-init-list'
2740     Enable deduction of a template type parameter as
2741     'std::initializer_list' from a brace-enclosed initializer list,
2742     i.e.
2743
2744          template <class T> auto forward(T t) -> decltype (realfn (t))
2745          {
2746            return realfn (t);
2747          }
2748
2749          void f()
2750          {
2751            forward({1,2}); // call forward<std::initializer_list<int>>
2752          }
2753
2754     This deduction was implemented as a possible extension to the
2755     originally proposed semantics for the C++11 standard, but was not
2756     part of the final standard, so it is disabled by default.  This
2757     option is deprecated, and may be removed in a future version of
2758     G++.
2759
2760'-fno-elide-constructors'
2761     The C++ standard allows an implementation to omit creating a
2762     temporary that is only used to initialize another object of the
2763     same type.  Specifying this option disables that optimization, and
2764     forces G++ to call the copy constructor in all cases.  This option
2765     also causes G++ to call trivial member functions which otherwise
2766     would be expanded inline.
2767
2768     In C++17, the compiler is required to omit these temporaries, but
2769     this option still affects trivial member functions.
2770
2771'-fno-enforce-eh-specs'
2772     Don't generate code to check for violation of exception
2773     specifications at run time.  This option violates the C++ standard,
2774     but may be useful for reducing code size in production builds, much
2775     like defining 'NDEBUG'.  This does not give user code permission to
2776     throw exceptions in violation of the exception specifications; the
2777     compiler still optimizes based on the specifications, so throwing
2778     an unexpected exception results in undefined behavior at run time.
2779
2780'-fextern-tls-init'
2781'-fno-extern-tls-init'
2782     The C++11 and OpenMP standards allow 'thread_local' and
2783     'threadprivate' variables to have dynamic (runtime) initialization.
2784     To support this, any use of such a variable goes through a wrapper
2785     function that performs any necessary initialization.  When the use
2786     and definition of the variable are in the same translation unit,
2787     this overhead can be optimized away, but when the use is in a
2788     different translation unit there is significant overhead even if
2789     the variable doesn't actually need dynamic initialization.  If the
2790     programmer can be sure that no use of the variable in a
2791     non-defining TU needs to trigger dynamic initialization (either
2792     because the variable is statically initialized, or a use of the
2793     variable in the defining TU will be executed before any uses in
2794     another TU), they can avoid this overhead with the
2795     '-fno-extern-tls-init' option.
2796
2797     On targets that support symbol aliases, the default is
2798     '-fextern-tls-init'.  On targets that do not support symbol
2799     aliases, the default is '-fno-extern-tls-init'.
2800
2801'-fno-gnu-keywords'
2802     Do not recognize 'typeof' as a keyword, so that code can use this
2803     word as an identifier.  You can use the keyword '__typeof__'
2804     instead.  This option is implied by the strict ISO C++ dialects:
2805     '-ansi', '-std=c++98', '-std=c++11', etc.
2806
2807'-fno-implicit-templates'
2808     Never emit code for non-inline templates that are instantiated
2809     implicitly (i.e. by use); only emit code for explicit
2810     instantiations.  If you use this option, you must take care to
2811     structure your code to include all the necessary explicit
2812     instantiations to avoid getting undefined symbols at link time.
2813     *Note Template Instantiation::, for more information.
2814
2815'-fno-implicit-inline-templates'
2816     Don't emit code for implicit instantiations of inline templates,
2817     either.  The default is to handle inlines differently so that
2818     compiles with and without optimization need the same set of
2819     explicit instantiations.
2820
2821'-fno-implement-inlines'
2822     To save space, do not emit out-of-line copies of inline functions
2823     controlled by '#pragma implementation'.  This causes linker errors
2824     if these functions are not inlined everywhere they are called.
2825
2826'-fms-extensions'
2827     Disable Wpedantic warnings about constructs used in MFC, such as
2828     implicit int and getting a pointer to member function via
2829     non-standard syntax.
2830
2831'-fnew-inheriting-ctors'
2832     Enable the P0136 adjustment to the semantics of C++11 constructor
2833     inheritance.  This is part of C++17 but also considered to be a
2834     Defect Report against C++11 and C++14.  This flag is enabled by
2835     default unless '-fabi-version=10' or lower is specified.
2836
2837'-fnew-ttp-matching'
2838     Enable the P0522 resolution to Core issue 150, template template
2839     parameters and default arguments: this allows a template with
2840     default template arguments as an argument for a template template
2841     parameter with fewer template parameters.  This flag is enabled by
2842     default for '-std=c++17'.
2843
2844'-fno-nonansi-builtins'
2845     Disable built-in declarations of functions that are not mandated by
2846     ANSI/ISO C.  These include 'ffs', 'alloca', '_exit', 'index',
2847     'bzero', 'conjf', and other related functions.
2848
2849'-fnothrow-opt'
2850     Treat a 'throw()' exception specification as if it were a
2851     'noexcept' specification to reduce or eliminate the text size
2852     overhead relative to a function with no exception specification.
2853     If the function has local variables of types with non-trivial
2854     destructors, the exception specification actually makes the
2855     function smaller because the EH cleanups for those variables can be
2856     optimized away.  The semantic effect is that an exception thrown
2857     out of a function with such an exception specification results in a
2858     call to 'terminate' rather than 'unexpected'.
2859
2860'-fno-operator-names'
2861     Do not treat the operator name keywords 'and', 'bitand', 'bitor',
2862     'compl', 'not', 'or' and 'xor' as synonyms as keywords.
2863
2864'-fno-optional-diags'
2865     Disable diagnostics that the standard says a compiler does not need
2866     to issue.  Currently, the only such diagnostic issued by G++ is the
2867     one for a name having multiple meanings within a class.
2868
2869'-fpermissive'
2870     Downgrade some diagnostics about nonconformant code from errors to
2871     warnings.  Thus, using '-fpermissive' allows some nonconforming
2872     code to compile.
2873
2874'-fno-pretty-templates'
2875     When an error message refers to a specialization of a function
2876     template, the compiler normally prints the signature of the
2877     template followed by the template arguments and any typedefs or
2878     typenames in the signature (e.g. 'void f(T) [with T = int]' rather
2879     than 'void f(int)') so that it's clear which template is involved.
2880     When an error message refers to a specialization of a class
2881     template, the compiler omits any template arguments that match the
2882     default template arguments for that template.  If either of these
2883     behaviors make it harder to understand the error message rather
2884     than easier, you can use '-fno-pretty-templates' to disable them.
2885
2886'-frepo'
2887     Enable automatic template instantiation at link time.  This option
2888     also implies '-fno-implicit-templates'.  *Note Template
2889     Instantiation::, for more information.
2890
2891'-fno-rtti'
2892     Disable generation of information about every class with virtual
2893     functions for use by the C++ run-time type identification features
2894     ('dynamic_cast' and 'typeid').  If you don't use those parts of the
2895     language, you can save some space by using this flag.  Note that
2896     exception handling uses the same information, but G++ generates it
2897     as needed.  The 'dynamic_cast' operator can still be used for casts
2898     that do not require run-time type information, i.e. casts to 'void
2899     *' or to unambiguous base classes.
2900
2901     Mixing code compiled with '-frtti' with that compiled with
2902     '-fno-rtti' may not work.  For example, programs may fail to link
2903     if a class compiled with '-fno-rtti' is used as a base for a class
2904     compiled with '-frtti'.
2905
2906'-fsized-deallocation'
2907     Enable the built-in global declarations
2908          void operator delete (void *, std::size_t) noexcept;
2909          void operator delete[] (void *, std::size_t) noexcept;
2910     as introduced in C++14.  This is useful for user-defined
2911     replacement deallocation functions that, for example, use the size
2912     of the object to make deallocation faster.  Enabled by default
2913     under '-std=c++14' and above.  The flag '-Wsized-deallocation'
2914     warns about places that might want to add a definition.
2915
2916'-fstrict-enums'
2917     Allow the compiler to optimize using the assumption that a value of
2918     enumerated type can only be one of the values of the enumeration
2919     (as defined in the C++ standard; basically, a value that can be
2920     represented in the minimum number of bits needed to represent all
2921     the enumerators).  This assumption may not be valid if the program
2922     uses a cast to convert an arbitrary integer value to the enumerated
2923     type.
2924
2925'-fstrong-eval-order'
2926     Evaluate member access, array subscripting, and shift expressions
2927     in left-to-right order, and evaluate assignment in right-to-left
2928     order, as adopted for C++17.  Enabled by default with '-std=c++17'.
2929     '-fstrong-eval-order=some' enables just the ordering of member
2930     access and shift expressions, and is the default without
2931     '-std=c++17'.
2932
2933'-ftemplate-backtrace-limit=N'
2934     Set the maximum number of template instantiation notes for a single
2935     warning or error to N.  The default value is 10.
2936
2937'-ftemplate-depth=N'
2938     Set the maximum instantiation depth for template classes to N.  A
2939     limit on the template instantiation depth is needed to detect
2940     endless recursions during template class instantiation.  ANSI/ISO
2941     C++ conforming programs must not rely on a maximum depth greater
2942     than 17 (changed to 1024 in C++11).  The default value is 900, as
2943     the compiler can run out of stack space before hitting 1024 in some
2944     situations.
2945
2946'-fno-threadsafe-statics'
2947     Do not emit the extra code to use the routines specified in the C++
2948     ABI for thread-safe initialization of local statics.  You can use
2949     this option to reduce code size slightly in code that doesn't need
2950     to be thread-safe.
2951
2952'-fuse-cxa-atexit'
2953     Register destructors for objects with static storage duration with
2954     the '__cxa_atexit' function rather than the 'atexit' function.
2955     This option is required for fully standards-compliant handling of
2956     static destructors, but only works if your C library supports
2957     '__cxa_atexit'.
2958
2959'-fno-use-cxa-get-exception-ptr'
2960     Don't use the '__cxa_get_exception_ptr' runtime routine.  This
2961     causes 'std::uncaught_exception' to be incorrect, but is necessary
2962     if the runtime routine is not available.
2963
2964'-fvisibility-inlines-hidden'
2965     This switch declares that the user does not attempt to compare
2966     pointers to inline functions or methods where the addresses of the
2967     two functions are taken in different shared objects.
2968
2969     The effect of this is that GCC may, effectively, mark inline
2970     methods with '__attribute__ ((visibility ("hidden")))' so that they
2971     do not appear in the export table of a DSO and do not require a PLT
2972     indirection when used within the DSO.  Enabling this option can
2973     have a dramatic effect on load and link times of a DSO as it
2974     massively reduces the size of the dynamic export table when the
2975     library makes heavy use of templates.
2976
2977     The behavior of this switch is not quite the same as marking the
2978     methods as hidden directly, because it does not affect static
2979     variables local to the function or cause the compiler to deduce
2980     that the function is defined in only one shared object.
2981
2982     You may mark a method as having a visibility explicitly to negate
2983     the effect of the switch for that method.  For example, if you do
2984     want to compare pointers to a particular inline method, you might
2985     mark it as having default visibility.  Marking the enclosing class
2986     with explicit visibility has no effect.
2987
2988     Explicitly instantiated inline methods are unaffected by this
2989     option as their linkage might otherwise cross a shared library
2990     boundary.  *Note Template Instantiation::.
2991
2992'-fvisibility-ms-compat'
2993     This flag attempts to use visibility settings to make GCC's C++
2994     linkage model compatible with that of Microsoft Visual Studio.
2995
2996     The flag makes these changes to GCC's linkage model:
2997
2998       1. It sets the default visibility to 'hidden', like
2999          '-fvisibility=hidden'.
3000
3001       2. Types, but not their members, are not hidden by default.
3002
3003       3. The One Definition Rule is relaxed for types without explicit
3004          visibility specifications that are defined in more than one
3005          shared object: those declarations are permitted if they are
3006          permitted when this option is not used.
3007
3008     In new code it is better to use '-fvisibility=hidden' and export
3009     those classes that are intended to be externally visible.
3010     Unfortunately it is possible for code to rely, perhaps
3011     accidentally, on the Visual Studio behavior.
3012
3013     Among the consequences of these changes are that static data
3014     members of the same type with the same name but defined in
3015     different shared objects are different, so changing one does not
3016     change the other; and that pointers to function members defined in
3017     different shared objects may not compare equal.  When this flag is
3018     given, it is a violation of the ODR to define types with the same
3019     name differently.
3020
3021'-fno-weak'
3022     Do not use weak symbol support, even if it is provided by the
3023     linker.  By default, G++ uses weak symbols if they are available.
3024     This option exists only for testing, and should not be used by
3025     end-users; it results in inferior code and has no benefits.  This
3026     option may be removed in a future release of G++.
3027
3028'-nostdinc++'
3029     Do not search for header files in the standard directories specific
3030     to C++, but do still search the other standard directories.  (This
3031     option is used when building the C++ library.)
3032
3033 In addition, these optimization, warning, and code generation options
3034have meanings only for C++ programs:
3035
3036'-Wabi (C, Objective-C, C++ and Objective-C++ only)'
3037     Warn when G++ it generates code that is probably not compatible
3038     with the vendor-neutral C++ ABI.  Since G++ now defaults to
3039     updating the ABI with each major release, normally '-Wabi' will
3040     warn only if there is a check added later in a release series for
3041     an ABI issue discovered since the initial release.  '-Wabi' will
3042     warn about more things if an older ABI version is selected (with
3043     '-fabi-version=N').
3044
3045     '-Wabi' can also be used with an explicit version number to warn
3046     about compatibility with a particular '-fabi-version' level, e.g.
3047     '-Wabi=2' to warn about changes relative to '-fabi-version=2'.
3048
3049     If an explicit version number is provided and
3050     '-fabi-compat-version' is not specified, the version number from
3051     this option is used for compatibility aliases.  If no explicit
3052     version number is provided with this option, but
3053     '-fabi-compat-version' is specified, that version number is used
3054     for ABI warnings.
3055
3056     Although an effort has been made to warn about all such cases,
3057     there are probably some cases that are not warned about, even
3058     though G++ is generating incompatible code.  There may also be
3059     cases where warnings are emitted even though the code that is
3060     generated is compatible.
3061
3062     You should rewrite your code to avoid these warnings if you are
3063     concerned about the fact that code generated by G++ may not be
3064     binary compatible with code generated by other compilers.
3065
3066     Known incompatibilities in '-fabi-version=2' (which was the default
3067     from GCC 3.4 to 4.9) include:
3068
3069        * A template with a non-type template parameter of reference
3070          type was mangled incorrectly:
3071               extern int N;
3072               template <int &> struct S {};
3073               void n (S<N>) {2}
3074
3075          This was fixed in '-fabi-version=3'.
3076
3077        * SIMD vector types declared using '__attribute ((vector_size))'
3078          were mangled in a non-standard way that does not allow for
3079          overloading of functions taking vectors of different sizes.
3080
3081          The mangling was changed in '-fabi-version=4'.
3082
3083        * '__attribute ((const))' and 'noreturn' were mangled as type
3084          qualifiers, and 'decltype' of a plain declaration was folded
3085          away.
3086
3087          These mangling issues were fixed in '-fabi-version=5'.
3088
3089        * Scoped enumerators passed as arguments to a variadic function
3090          are promoted like unscoped enumerators, causing 'va_arg' to
3091          complain.  On most targets this does not actually affect the
3092          parameter passing ABI, as there is no way to pass an argument
3093          smaller than 'int'.
3094
3095          Also, the ABI changed the mangling of template argument packs,
3096          'const_cast', 'static_cast', prefix increment/decrement, and a
3097          class scope function used as a template argument.
3098
3099          These issues were corrected in '-fabi-version=6'.
3100
3101        * Lambdas in default argument scope were mangled incorrectly,
3102          and the ABI changed the mangling of 'nullptr_t'.
3103
3104          These issues were corrected in '-fabi-version=7'.
3105
3106        * When mangling a function type with function-cv-qualifiers, the
3107          un-qualified function type was incorrectly treated as a
3108          substitution candidate.
3109
3110          This was fixed in '-fabi-version=8', the default for GCC 5.1.
3111
3112        * 'decltype(nullptr)' incorrectly had an alignment of 1, leading
3113          to unaligned accesses.  Note that this did not affect the ABI
3114          of a function with a 'nullptr_t' parameter, as parameters have
3115          a minimum alignment.
3116
3117          This was fixed in '-fabi-version=9', the default for GCC 5.2.
3118
3119        * Target-specific attributes that affect the identity of a type,
3120          such as ia32 calling conventions on a function type (stdcall,
3121          regparm, etc.), did not affect the mangled name, leading to
3122          name collisions when function pointers were used as template
3123          arguments.
3124
3125          This was fixed in '-fabi-version=10', the default for GCC 6.1.
3126
3127     It also warns about psABI-related changes.  The known psABI changes
3128     at this point include:
3129
3130        * For SysV/x86-64, unions with 'long double' members are passed
3131          in memory as specified in psABI. For example:
3132
3133               union U {
3134                 long double ld;
3135                 int i;
3136               };
3137
3138          'union U' is always passed in memory.
3139
3140'-Wabi-tag (C++ and Objective-C++ only)'
3141     Warn when a type with an ABI tag is used in a context that does not
3142     have that ABI tag.  See *note C++ Attributes:: for more information
3143     about ABI tags.
3144
3145'-Wctor-dtor-privacy (C++ and Objective-C++ only)'
3146     Warn when a class seems unusable because all the constructors or
3147     destructors in that class are private, and it has neither friends
3148     nor public static member functions.  Also warn if there are no
3149     non-private methods, and there's at least one private member
3150     function that isn't a constructor or destructor.
3151
3152'-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)'
3153     Warn when 'delete' is used to destroy an instance of a class that
3154     has virtual functions and non-virtual destructor.  It is unsafe to
3155     delete an instance of a derived class through a pointer to a base
3156     class if the base class does not have a virtual destructor.  This
3157     warning is enabled by '-Wall'.
3158
3159'-Wdeprecated-copy (C++ and Objective-C++ only)'
3160     Warn that the implicit declaration of a copy constructor or copy
3161     assignment operator is deprecated if the class has a user-provided
3162     copy constructor or copy assignment operator, in C++11 and up.
3163     This warning is enabled by '-Wextra'.  With
3164     '-Wdeprecated-copy-dtor', also deprecate if the class has a
3165     user-provided destructor.
3166
3167'-Wno-init-list-lifetime (C++ and Objective-C++ only)'
3168     Do not warn about uses of 'std::initializer_list' that are likely
3169     to result in dangling pointers.  Since the underlying array for an
3170     'initializer_list' is handled like a normal C++ temporary object,
3171     it is easy to inadvertently keep a pointer to the array past the
3172     end of the array's lifetime.  For example:
3173
3174        * If a function returns a temporary 'initializer_list', or a
3175          local 'initializer_list' variable, the array's lifetime ends
3176          at the end of the return statement, so the value returned has
3177          a dangling pointer.
3178
3179        * If a new-expression creates an 'initializer_list', the array
3180          only lives until the end of the enclosing full-expression, so
3181          the 'initializer_list' in the heap has a dangling pointer.
3182
3183        * When an 'initializer_list' variable is assigned from a
3184          brace-enclosed initializer list, the temporary array created
3185          for the right side of the assignment only lives until the end
3186          of the full-expression, so at the next statement the
3187          'initializer_list' variable has a dangling pointer.
3188
3189               // li's initial underlying array lives as long as li
3190               std::initializer_list<int> li = { 1,2,3 };
3191               // assignment changes li to point to a temporary array
3192               li = { 4, 5 };
3193               // now the temporary is gone and li has a dangling pointer
3194               int i = li.begin()[0] // undefined behavior
3195
3196        * When a list constructor stores the 'begin' pointer from the
3197          'initializer_list' argument, this doesn't extend the lifetime
3198          of the array, so if a class variable is constructed from a
3199          temporary 'initializer_list', the pointer is left dangling by
3200          the end of the variable declaration statement.
3201
3202'-Wliteral-suffix (C++ and Objective-C++ only)'
3203     Warn when a string or character literal is followed by a ud-suffix
3204     which does not begin with an underscore.  As a conforming
3205     extension, GCC treats such suffixes as separate preprocessing
3206     tokens in order to maintain backwards compatibility with code that
3207     uses formatting macros from '<inttypes.h>'.  For example:
3208
3209          #define __STDC_FORMAT_MACROS
3210          #include <inttypes.h>
3211          #include <stdio.h>
3212
3213          int main() {
3214            int64_t i64 = 123;
3215            printf("My int64: %" PRId64"\n", i64);
3216          }
3217
3218     In this case, 'PRId64' is treated as a separate preprocessing
3219     token.
3220
3221     Additionally, warn when a user-defined literal operator is declared
3222     with a literal suffix identifier that doesn't begin with an
3223     underscore.  Literal suffix identifiers that don't begin with an
3224     underscore are reserved for future standardization.
3225
3226     This warning is enabled by default.
3227
3228'-Wlto-type-mismatch'
3229
3230     During the link-time optimization warn about type mismatches in
3231     global declarations from different compilation units.  Requires
3232     '-flto' to be enabled.  Enabled by default.
3233
3234'-Wno-narrowing (C++ and Objective-C++ only)'
3235     For C++11 and later standards, narrowing conversions are diagnosed
3236     by default, as required by the standard.  A narrowing conversion
3237     from a constant produces an error, and a narrowing conversion from
3238     a non-constant produces a warning, but '-Wno-narrowing' suppresses
3239     the diagnostic.  Note that this does not affect the meaning of
3240     well-formed code; narrowing conversions are still considered
3241     ill-formed in SFINAE contexts.
3242
3243     With '-Wnarrowing' in C++98, warn when a narrowing conversion
3244     prohibited by C++11 occurs within '{ }', e.g.
3245
3246          int i = { 2.2 }; // error: narrowing from double to int
3247
3248     This flag is included in '-Wall' and '-Wc++11-compat'.
3249
3250'-Wnoexcept (C++ and Objective-C++ only)'
3251     Warn when a noexcept-expression evaluates to false because of a
3252     call to a function that does not have a non-throwing exception
3253     specification (i.e.  'throw()' or 'noexcept') but is known by the
3254     compiler to never throw an exception.
3255
3256'-Wnoexcept-type (C++ and Objective-C++ only)'
3257     Warn if the C++17 feature making 'noexcept' part of a function type
3258     changes the mangled name of a symbol relative to C++14.  Enabled by
3259     '-Wabi' and '-Wc++17-compat'.
3260
3261     As an example:
3262
3263          template <class T> void f(T t) { t(); };
3264          void g() noexcept;
3265          void h() { f(g); }
3266
3267     In C++14, 'f' calls 'f<void(*)()>', but in C++17 it calls
3268     'f<void(*)()noexcept>'.
3269
3270'-Wclass-memaccess (C++ and Objective-C++ only)'
3271     Warn when the destination of a call to a raw memory function such
3272     as 'memset' or 'memcpy' is an object of class type, and when
3273     writing into such an object might bypass the class non-trivial or
3274     deleted constructor or copy assignment, violate const-correctness
3275     or encapsulation, or corrupt virtual table pointers.  Modifying the
3276     representation of such objects may violate invariants maintained by
3277     member functions of the class.  For example, the call to 'memset'
3278     below is undefined because it modifies a non-trivial class object
3279     and is, therefore, diagnosed.  The safe way to either initialize or
3280     clear the storage of objects of such types is by using the
3281     appropriate constructor or assignment operator, if one is
3282     available.
3283          std::string str = "abc";
3284          memset (&str, 0, sizeof str);
3285     The '-Wclass-memaccess' option is enabled by '-Wall'.  Explicitly
3286     casting the pointer to the class object to 'void *' or to a type
3287     that can be safely accessed by the raw memory function suppresses
3288     the warning.
3289
3290'-Wnon-virtual-dtor (C++ and Objective-C++ only)'
3291     Warn when a class has virtual functions and an accessible
3292     non-virtual destructor itself or in an accessible polymorphic base
3293     class, in which case it is possible but unsafe to delete an
3294     instance of a derived class through a pointer to the class itself
3295     or base class.  This warning is automatically enabled if '-Weffc++'
3296     is specified.
3297
3298'-Wregister (C++ and Objective-C++ only)'
3299     Warn on uses of the 'register' storage class specifier, except when
3300     it is part of the GNU *note Explicit Register Variables::
3301     extension.  The use of the 'register' keyword as storage class
3302     specifier has been deprecated in C++11 and removed in C++17.
3303     Enabled by default with '-std=c++17'.
3304
3305'-Wreorder (C++ and Objective-C++ only)'
3306     Warn when the order of member initializers given in the code does
3307     not match the order in which they must be executed.  For instance:
3308
3309          struct A {
3310            int i;
3311            int j;
3312            A(): j (0), i (1) { }
3313          };
3314
3315     The compiler rearranges the member initializers for 'i' and 'j' to
3316     match the declaration order of the members, emitting a warning to
3317     that effect.  This warning is enabled by '-Wall'.
3318
3319'-Wno-pessimizing-move (C++ and Objective-C++ only)'
3320     This warning warns when a call to 'std::move' prevents copy
3321     elision.  A typical scenario when copy elision can occur is when
3322     returning in a function with a class return type, when the
3323     expression being returned is the name of a non-volatile automatic
3324     object, and is not a function parameter, and has the same type as
3325     the function return type.
3326
3327          struct T {
3328          ...
3329          };
3330          T fn()
3331          {
3332            T t;
3333            ...
3334            return std::move (t);
3335          }
3336
3337     But in this example, the 'std::move' call prevents copy elision.
3338
3339     This warning is enabled by '-Wall'.
3340
3341'-Wno-redundant-move (C++ and Objective-C++ only)'
3342     This warning warns about redundant calls to 'std::move'; that is,
3343     when a move operation would have been performed even without the
3344     'std::move' call.  This happens because the compiler is forced to
3345     treat the object as if it were an rvalue in certain situations such
3346     as returning a local variable, where copy elision isn't applicable.
3347     Consider:
3348
3349          struct T {
3350          ...
3351          };
3352          T fn(T t)
3353          {
3354            ...
3355            return std::move (t);
3356          }
3357
3358     Here, the 'std::move' call is redundant.  Because G++ implements
3359     Core Issue 1579, another example is:
3360
3361          struct T { // convertible to U
3362          ...
3363          };
3364          struct U {
3365          ...
3366          };
3367          U fn()
3368          {
3369            T t;
3370            ...
3371            return std::move (t);
3372          }
3373     In this example, copy elision isn't applicable because the type of
3374     the expression being returned and the function return type differ,
3375     yet G++ treats the return value as if it were designated by an
3376     rvalue.
3377
3378     This warning is enabled by '-Wextra'.
3379
3380'-fext-numeric-literals (C++ and Objective-C++ only)'
3381     Accept imaginary, fixed-point, or machine-defined literal number
3382     suffixes as GNU extensions.  When this option is turned off these
3383     suffixes are treated as C++11 user-defined literal numeric
3384     suffixes.  This is on by default for all pre-C++11 dialects and all
3385     GNU dialects: '-std=c++98', '-std=gnu++98', '-std=gnu++11',
3386     '-std=gnu++14'.  This option is off by default for ISO C++11
3387     onwards ('-std=c++11', ...).
3388
3389 The following '-W...' options are not affected by '-Wall'.
3390
3391'-Weffc++ (C++ and Objective-C++ only)'
3392     Warn about violations of the following style guidelines from Scott
3393     Meyers' 'Effective C++' series of books:
3394
3395        * Define a copy constructor and an assignment operator for
3396          classes with dynamically-allocated memory.
3397
3398        * Prefer initialization to assignment in constructors.
3399
3400        * Have 'operator=' return a reference to '*this'.
3401
3402        * Don't try to return a reference when you must return an
3403          object.
3404
3405        * Distinguish between prefix and postfix forms of increment and
3406          decrement operators.
3407
3408        * Never overload '&&', '||', or ','.
3409
3410     This option also enables '-Wnon-virtual-dtor', which is also one of
3411     the effective C++ recommendations.  However, the check is extended
3412     to warn about the lack of virtual destructor in accessible
3413     non-polymorphic bases classes too.
3414
3415     When selecting this option, be aware that the standard library
3416     headers do not obey all of these guidelines; use 'grep -v' to
3417     filter out those warnings.
3418
3419'-Wstrict-null-sentinel (C++ and Objective-C++ only)'
3420     Warn about the use of an uncasted 'NULL' as sentinel.  When
3421     compiling only with GCC this is a valid sentinel, as 'NULL' is
3422     defined to '__null'.  Although it is a null pointer constant rather
3423     than a null pointer, it is guaranteed to be of the same size as a
3424     pointer.  But this use is not portable across different compilers.
3425
3426'-Wno-non-template-friend (C++ and Objective-C++ only)'
3427     Disable warnings when non-template friend functions are declared
3428     within a template.  In very old versions of GCC that predate
3429     implementation of the ISO standard, declarations such as 'friend
3430     int foo(int)', where the name of the friend is an unqualified-id,
3431     could be interpreted as a particular specialization of a template
3432     function; the warning exists to diagnose compatibility problems,
3433     and is enabled by default.
3434
3435'-Wold-style-cast (C++ and Objective-C++ only)'
3436     Warn if an old-style (C-style) cast to a non-void type is used
3437     within a C++ program.  The new-style casts ('dynamic_cast',
3438     'static_cast', 'reinterpret_cast', and 'const_cast') are less
3439     vulnerable to unintended effects and much easier to search for.
3440
3441'-Woverloaded-virtual (C++ and Objective-C++ only)'
3442     Warn when a function declaration hides virtual functions from a
3443     base class.  For example, in:
3444
3445          struct A {
3446            virtual void f();
3447          };
3448
3449          struct B: public A {
3450            void f(int);
3451          };
3452
3453     the 'A' class version of 'f' is hidden in 'B', and code like:
3454
3455          B* b;
3456          b->f();
3457
3458     fails to compile.
3459
3460'-Wno-pmf-conversions (C++ and Objective-C++ only)'
3461     Disable the diagnostic for converting a bound pointer to member
3462     function to a plain pointer.
3463
3464'-Wsign-promo (C++ and Objective-C++ only)'
3465     Warn when overload resolution chooses a promotion from unsigned or
3466     enumerated type to a signed type, over a conversion to an unsigned
3467     type of the same size.  Previous versions of G++ tried to preserve
3468     unsignedness, but the standard mandates the current behavior.
3469
3470'-Wtemplates (C++ and Objective-C++ only)'
3471     Warn when a primary template declaration is encountered.  Some
3472     coding rules disallow templates, and this may be used to enforce
3473     that rule.  The warning is inactive inside a system header file,
3474     such as the STL, so one can still use the STL. One may also
3475     instantiate or specialize templates.
3476
3477'-Wmultiple-inheritance (C++ and Objective-C++ only)'
3478     Warn when a class is defined with multiple direct base classes.
3479     Some coding rules disallow multiple inheritance, and this may be
3480     used to enforce that rule.  The warning is inactive inside a system
3481     header file, such as the STL, so one can still use the STL. One may
3482     also define classes that indirectly use multiple inheritance.
3483
3484'-Wvirtual-inheritance'
3485     Warn when a class is defined with a virtual direct base class.
3486     Some coding rules disallow multiple inheritance, and this may be
3487     used to enforce that rule.  The warning is inactive inside a system
3488     header file, such as the STL, so one can still use the STL. One may
3489     also define classes that indirectly use virtual inheritance.
3490
3491'-Wnamespaces'
3492     Warn when a namespace definition is opened.  Some coding rules
3493     disallow namespaces, and this may be used to enforce that rule.
3494     The warning is inactive inside a system header file, such as the
3495     STL, so one can still use the STL. One may also use using
3496     directives and qualified names.
3497
3498'-Wno-terminate (C++ and Objective-C++ only)'
3499     Disable the warning about a throw-expression that will immediately
3500     result in a call to 'terminate'.
3501
3502'-Wno-class-conversion (C++ and Objective-C++ only)'
3503     Disable the warning about the case when a conversion function
3504     converts an object to the same type, to a base class of that type,
3505     or to void; such a conversion function will never be called.
3506
3507
3508File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Diagnostic Message Formatting Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
3509
35103.6 Options Controlling Objective-C and Objective-C++ Dialects
3511==============================================================
3512
3513(NOTE: This manual does not describe the Objective-C and Objective-C++
3514languages themselves.  *Note Language Standards Supported by GCC:
3515Standards, for references.)
3516
3517 This section describes the command-line options that are only
3518meaningful for Objective-C and Objective-C++ programs.  You can also use
3519most of the language-independent GNU compiler options.  For example, you
3520might compile a file 'some_class.m' like this:
3521
3522     gcc -g -fgnu-runtime -O -c some_class.m
3523
3524In this example, '-fgnu-runtime' is an option meant only for Objective-C
3525and Objective-C++ programs; you can use the other options with any
3526language supported by GCC.
3527
3528 Note that since Objective-C is an extension of the C language,
3529Objective-C compilations may also use options specific to the C
3530front-end (e.g., '-Wtraditional').  Similarly, Objective-C++
3531compilations may use C++-specific options (e.g., '-Wabi').
3532
3533 Here is a list of options that are _only_ for compiling Objective-C and
3534Objective-C++ programs:
3535
3536'-fconstant-string-class=CLASS-NAME'
3537     Use CLASS-NAME as the name of the class to instantiate for each
3538     literal string specified with the syntax '@"..."'.  The default
3539     class name is 'NXConstantString' if the GNU runtime is being used,
3540     and 'NSConstantString' if the NeXT runtime is being used (see
3541     below).  The '-fconstant-cfstrings' option, if also present,
3542     overrides the '-fconstant-string-class' setting and cause '@"..."'
3543     literals to be laid out as constant CoreFoundation strings.
3544
3545'-fgnu-runtime'
3546     Generate object code compatible with the standard GNU Objective-C
3547     runtime.  This is the default for most types of systems.
3548
3549'-fnext-runtime'
3550     Generate output compatible with the NeXT runtime.  This is the
3551     default for NeXT-based systems, including Darwin and Mac OS X.  The
3552     macro '__NEXT_RUNTIME__' is predefined if (and only if) this option
3553     is used.
3554
3555'-fno-nil-receivers'
3556     Assume that all Objective-C message dispatches ('[receiver
3557     message:arg]') in this translation unit ensure that the receiver is
3558     not 'nil'.  This allows for more efficient entry points in the
3559     runtime to be used.  This option is only available in conjunction
3560     with the NeXT runtime and ABI version 0 or 1.
3561
3562'-fobjc-abi-version=N'
3563     Use version N of the Objective-C ABI for the selected runtime.
3564     This option is currently supported only for the NeXT runtime.  In
3565     that case, Version 0 is the traditional (32-bit) ABI without
3566     support for properties and other Objective-C 2.0 additions.
3567     Version 1 is the traditional (32-bit) ABI with support for
3568     properties and other Objective-C 2.0 additions.  Version 2 is the
3569     modern (64-bit) ABI. If nothing is specified, the default is
3570     Version 0 on 32-bit target machines, and Version 2 on 64-bit target
3571     machines.
3572
3573'-fobjc-call-cxx-cdtors'
3574     For each Objective-C class, check if any of its instance variables
3575     is a C++ object with a non-trivial default constructor.  If so,
3576     synthesize a special '- (id) .cxx_construct' instance method which
3577     runs non-trivial default constructors on any such instance
3578     variables, in order, and then return 'self'.  Similarly, check if
3579     any instance variable is a C++ object with a non-trivial
3580     destructor, and if so, synthesize a special '- (void)
3581     .cxx_destruct' method which runs all such default destructors, in
3582     reverse order.
3583
3584     The '- (id) .cxx_construct' and '- (void) .cxx_destruct' methods
3585     thusly generated only operate on instance variables declared in the
3586     current Objective-C class, and not those inherited from
3587     superclasses.  It is the responsibility of the Objective-C runtime
3588     to invoke all such methods in an object's inheritance hierarchy.
3589     The '- (id) .cxx_construct' methods are invoked by the runtime
3590     immediately after a new object instance is allocated; the '- (void)
3591     .cxx_destruct' methods are invoked immediately before the runtime
3592     deallocates an object instance.
3593
3594     As of this writing, only the NeXT runtime on Mac OS X 10.4 and
3595     later has support for invoking the '- (id) .cxx_construct' and '-
3596     (void) .cxx_destruct' methods.
3597
3598'-fobjc-direct-dispatch'
3599     Allow fast jumps to the message dispatcher.  On Darwin this is
3600     accomplished via the comm page.
3601
3602'-fobjc-exceptions'
3603     Enable syntactic support for structured exception handling in
3604     Objective-C, similar to what is offered by C++.  This option is
3605     required to use the Objective-C keywords '@try', '@throw',
3606     '@catch', '@finally' and '@synchronized'.  This option is available
3607     with both the GNU runtime and the NeXT runtime (but not available
3608     in conjunction with the NeXT runtime on Mac OS X 10.2 and earlier).
3609
3610'-fobjc-gc'
3611     Enable garbage collection (GC) in Objective-C and Objective-C++
3612     programs.  This option is only available with the NeXT runtime; the
3613     GNU runtime has a different garbage collection implementation that
3614     does not require special compiler flags.
3615
3616'-fobjc-nilcheck'
3617     For the NeXT runtime with version 2 of the ABI, check for a nil
3618     receiver in method invocations before doing the actual method call.
3619     This is the default and can be disabled using '-fno-objc-nilcheck'.
3620     Class methods and super calls are never checked for nil in this way
3621     no matter what this flag is set to.  Currently this flag does
3622     nothing when the GNU runtime, or an older version of the NeXT
3623     runtime ABI, is used.
3624
3625'-fobjc-std=objc1'
3626     Conform to the language syntax of Objective-C 1.0, the language
3627     recognized by GCC 4.0.  This only affects the Objective-C additions
3628     to the C/C++ language; it does not affect conformance to C/C++
3629     standards, which is controlled by the separate C/C++ dialect option
3630     flags.  When this option is used with the Objective-C or
3631     Objective-C++ compiler, any Objective-C syntax that is not
3632     recognized by GCC 4.0 is rejected.  This is useful if you need to
3633     make sure that your Objective-C code can be compiled with older
3634     versions of GCC.
3635
3636'-freplace-objc-classes'
3637     Emit a special marker instructing 'ld(1)' not to statically link in
3638     the resulting object file, and allow 'dyld(1)' to load it in at run
3639     time instead.  This is used in conjunction with the
3640     Fix-and-Continue debugging mode, where the object file in question
3641     may be recompiled and dynamically reloaded in the course of program
3642     execution, without the need to restart the program itself.
3643     Currently, Fix-and-Continue functionality is only available in
3644     conjunction with the NeXT runtime on Mac OS X 10.3 and later.
3645
3646'-fzero-link'
3647     When compiling for the NeXT runtime, the compiler ordinarily
3648     replaces calls to 'objc_getClass("...")' (when the name of the
3649     class is known at compile time) with static class references that
3650     get initialized at load time, which improves run-time performance.
3651     Specifying the '-fzero-link' flag suppresses this behavior and
3652     causes calls to 'objc_getClass("...")' to be retained.  This is
3653     useful in Zero-Link debugging mode, since it allows for individual
3654     class implementations to be modified during program execution.  The
3655     GNU runtime currently always retains calls to
3656     'objc_get_class("...")' regardless of command-line options.
3657
3658'-fno-local-ivars'
3659     By default instance variables in Objective-C can be accessed as if
3660     they were local variables from within the methods of the class
3661     they're declared in.  This can lead to shadowing between instance
3662     variables and other variables declared either locally inside a
3663     class method or globally with the same name.  Specifying the
3664     '-fno-local-ivars' flag disables this behavior thus avoiding
3665     variable shadowing issues.
3666
3667'-fivar-visibility=[public|protected|private|package]'
3668     Set the default instance variable visibility to the specified
3669     option so that instance variables declared outside the scope of any
3670     access modifier directives default to the specified visibility.
3671
3672'-gen-decls'
3673     Dump interface declarations for all classes seen in the source file
3674     to a file named 'SOURCENAME.decl'.
3675
3676'-Wassign-intercept (Objective-C and Objective-C++ only)'
3677     Warn whenever an Objective-C assignment is being intercepted by the
3678     garbage collector.
3679
3680'-Wno-protocol (Objective-C and Objective-C++ only)'
3681     If a class is declared to implement a protocol, a warning is issued
3682     for every method in the protocol that is not implemented by the
3683     class.  The default behavior is to issue a warning for every method
3684     not explicitly implemented in the class, even if a method
3685     implementation is inherited from the superclass.  If you use the
3686     '-Wno-protocol' option, then methods inherited from the superclass
3687     are considered to be implemented, and no warning is issued for
3688     them.
3689
3690'-Wselector (Objective-C and Objective-C++ only)'
3691     Warn if multiple methods of different types for the same selector
3692     are found during compilation.  The check is performed on the list
3693     of methods in the final stage of compilation.  Additionally, a
3694     check is performed for each selector appearing in a
3695     '@selector(...)' expression, and a corresponding method for that
3696     selector has been found during compilation.  Because these checks
3697     scan the method table only at the end of compilation, these
3698     warnings are not produced if the final stage of compilation is not
3699     reached, for example because an error is found during compilation,
3700     or because the '-fsyntax-only' option is being used.
3701
3702'-Wstrict-selector-match (Objective-C and Objective-C++ only)'
3703     Warn if multiple methods with differing argument and/or return
3704     types are found for a given selector when attempting to send a
3705     message using this selector to a receiver of type 'id' or 'Class'.
3706     When this flag is off (which is the default behavior), the compiler
3707     omits such warnings if any differences found are confined to types
3708     that share the same size and alignment.
3709
3710'-Wundeclared-selector (Objective-C and Objective-C++ only)'
3711     Warn if a '@selector(...)' expression referring to an undeclared
3712     selector is found.  A selector is considered undeclared if no
3713     method with that name has been declared before the '@selector(...)'
3714     expression, either explicitly in an '@interface' or '@protocol'
3715     declaration, or implicitly in an '@implementation' section.  This
3716     option always performs its checks as soon as a '@selector(...)'
3717     expression is found, while '-Wselector' only performs its checks in
3718     the final stage of compilation.  This also enforces the coding
3719     style convention that methods and selectors must be declared before
3720     being used.
3721
3722'-print-objc-runtime-info'
3723     Generate C header describing the largest structure that is passed
3724     by value, if any.
3725
3726
3727File: gcc.info,  Node: Diagnostic Message Formatting Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
3728
37293.7 Options to Control Diagnostic Messages Formatting
3730=====================================================
3731
3732Traditionally, diagnostic messages have been formatted irrespective of
3733the output device's aspect (e.g. its width, ...).  You can use the
3734options described below to control the formatting algorithm for
3735diagnostic messages, e.g. how many characters per line, how often source
3736location information should be reported.  Note that some language front
3737ends may not honor these options.
3738
3739'-fmessage-length=N'
3740     Try to format error messages so that they fit on lines of about N
3741     characters.  If N is zero, then no line-wrapping is done; each
3742     error message appears on a single line.  This is the default for
3743     all front ends.
3744
3745     Note - this option also affects the display of the '#error' and
3746     '#warning' pre-processor directives, and the 'deprecated'
3747     function/type/variable attribute.  It does not however affect the
3748     'pragma GCC warning' and 'pragma GCC error' pragmas.
3749
3750'-fdiagnostics-show-location=once'
3751     Only meaningful in line-wrapping mode.  Instructs the diagnostic
3752     messages reporter to emit source location information _once_; that
3753     is, in case the message is too long to fit on a single physical
3754     line and has to be wrapped, the source location won't be emitted
3755     (as prefix) again, over and over, in subsequent continuation lines.
3756     This is the default behavior.
3757
3758'-fdiagnostics-show-location=every-line'
3759     Only meaningful in line-wrapping mode.  Instructs the diagnostic
3760     messages reporter to emit the same source location information (as
3761     prefix) for physical lines that result from the process of breaking
3762     a message which is too long to fit on a single line.
3763
3764'-fdiagnostics-color[=WHEN]'
3765'-fno-diagnostics-color'
3766     Use color in diagnostics.  WHEN is 'never', 'always', or 'auto'.
3767     The default depends on how the compiler has been configured, it can
3768     be any of the above WHEN options or also 'never' if 'GCC_COLORS'
3769     environment variable isn't present in the environment, and 'auto'
3770     otherwise.  'auto' means to use color only when the standard error
3771     is a terminal.  The forms '-fdiagnostics-color' and
3772     '-fno-diagnostics-color' are aliases for
3773     '-fdiagnostics-color=always' and '-fdiagnostics-color=never',
3774     respectively.
3775
3776     The colors are defined by the environment variable 'GCC_COLORS'.
3777     Its value is a colon-separated list of capabilities and Select
3778     Graphic Rendition (SGR) substrings.  SGR commands are interpreted
3779     by the terminal or terminal emulator.  (See the section in the
3780     documentation of your text terminal for permitted values and their
3781     meanings as character attributes.)  These substring values are
3782     integers in decimal representation and can be concatenated with
3783     semicolons.  Common values to concatenate include '1' for bold, '4'
3784     for underline, '5' for blink, '7' for inverse, '39' for default
3785     foreground color, '30' to '37' for foreground colors, '90' to '97'
3786     for 16-color mode foreground colors, '38;5;0' to '38;5;255' for
3787     88-color and 256-color modes foreground colors, '49' for default
3788     background color, '40' to '47' for background colors, '100' to
3789     '107' for 16-color mode background colors, and '48;5;0' to
3790     '48;5;255' for 88-color and 256-color modes background colors.
3791
3792     The default 'GCC_COLORS' is
3793          error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\
3794          quote=01:fixit-insert=32:fixit-delete=31:\
3795          diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\
3796          type-diff=01;32
3797     where '01;31' is bold red, '01;35' is bold magenta, '01;36' is bold
3798     cyan, '32' is green, '34' is blue, '01' is bold, and '31' is red.
3799     Setting 'GCC_COLORS' to the empty string disables colors.
3800     Supported capabilities are as follows.
3801
3802     'error='
3803          SGR substring for error: markers.
3804
3805     'warning='
3806          SGR substring for warning: markers.
3807
3808     'note='
3809          SGR substring for note: markers.
3810
3811     'range1='
3812          SGR substring for first additional range.
3813
3814     'range2='
3815          SGR substring for second additional range.
3816
3817     'locus='
3818          SGR substring for location information, 'file:line' or
3819          'file:line:column' etc.
3820
3821     'quote='
3822          SGR substring for information printed within quotes.
3823
3824     'fixit-insert='
3825          SGR substring for fix-it hints suggesting text to be inserted
3826          or replaced.
3827
3828     'fixit-delete='
3829          SGR substring for fix-it hints suggesting text to be deleted.
3830
3831     'diff-filename='
3832          SGR substring for filename headers within generated patches.
3833
3834     'diff-hunk='
3835          SGR substring for the starts of hunks within generated
3836          patches.
3837
3838     'diff-delete='
3839          SGR substring for deleted lines within generated patches.
3840
3841     'diff-insert='
3842          SGR substring for inserted lines within generated patches.
3843
3844     'type-diff='
3845          SGR substring for highlighting mismatching types within
3846          template arguments in the C++ frontend.
3847
3848'-fno-diagnostics-show-option'
3849     By default, each diagnostic emitted includes text indicating the
3850     command-line option that directly controls the diagnostic (if such
3851     an option is known to the diagnostic machinery).  Specifying the
3852     '-fno-diagnostics-show-option' flag suppresses that behavior.
3853
3854'-fno-diagnostics-show-caret'
3855     By default, each diagnostic emitted includes the original source
3856     line and a caret '^' indicating the column.  This option suppresses
3857     this information.  The source line is truncated to N characters, if
3858     the '-fmessage-length=n' option is given.  When the output is done
3859     to the terminal, the width is limited to the width given by the
3860     'COLUMNS' environment variable or, if not set, to the terminal
3861     width.
3862
3863'-fno-diagnostics-show-labels'
3864     By default, when printing source code (via
3865     '-fdiagnostics-show-caret'), diagnostics can label ranges of source
3866     code with pertinent information, such as the types of expressions:
3867
3868              printf ("foo %s bar", long_i + long_j);
3869                           ~^       ~~~~~~~~~~~~~~~
3870                            |              |
3871                            char *         long int
3872
3873     This option suppresses the printing of these labels (in the example
3874     above, the vertical bars and the "char *" and "long int" text).
3875
3876'-fno-diagnostics-show-line-numbers'
3877     By default, when printing source code (via
3878     '-fdiagnostics-show-caret'), a left margin is printed, showing line
3879     numbers.  This option suppresses this left margin.
3880
3881'-fdiagnostics-minimum-margin-width=WIDTH'
3882     This option controls the minimum width of the left margin printed
3883     by '-fdiagnostics-show-line-numbers'.  It defaults to 6.
3884
3885'-fdiagnostics-parseable-fixits'
3886     Emit fix-it hints in a machine-parseable format, suitable for
3887     consumption by IDEs.  For each fix-it, a line will be printed after
3888     the relevant diagnostic, starting with the string "fix-it:".  For
3889     example:
3890
3891          fix-it:"test.c":{45:3-45:21}:"gtk_widget_show_all"
3892
3893     The location is expressed as a half-open range, expressed as a
3894     count of bytes, starting at byte 1 for the initial column.  In the
3895     above example, bytes 3 through 20 of line 45 of "test.c" are to be
3896     replaced with the given string:
3897
3898          00000000011111111112222222222
3899          12345678901234567890123456789
3900            gtk_widget_showall (dlg);
3901            ^^^^^^^^^^^^^^^^^^
3902            gtk_widget_show_all
3903
3904     The filename and replacement string escape backslash as "\\", tab
3905     as "\t", newline as "\n", double quotes as "\"", non-printable
3906     characters as octal (e.g.  vertical tab as "\013").
3907
3908     An empty replacement string indicates that the given range is to be
3909     removed.  An empty range (e.g.  "45:3-45:3") indicates that the
3910     string is to be inserted at the given position.
3911
3912'-fdiagnostics-generate-patch'
3913     Print fix-it hints to stderr in unified diff format, after any
3914     diagnostics are printed.  For example:
3915
3916          --- test.c
3917          +++ test.c
3918          @ -42,5 +42,5 @
3919
3920           void show_cb(GtkDialog *dlg)
3921           {
3922          -  gtk_widget_showall(dlg);
3923          +  gtk_widget_show_all(dlg);
3924           }
3925
3926
3927     The diff may or may not be colorized, following the same rules as
3928     for diagnostics (see '-fdiagnostics-color').
3929
3930'-fdiagnostics-show-template-tree'
3931
3932     In the C++ frontend, when printing diagnostics showing mismatching
3933     template types, such as:
3934
3935            could not convert 'std::map<int, std::vector<double> >()'
3936              from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
3937
3938     the '-fdiagnostics-show-template-tree' flag enables printing a
3939     tree-like structure showing the common and differing parts of the
3940     types, such as:
3941
3942            map<
3943              [...],
3944              vector<
3945                [double != float]>>
3946
3947     The parts that differ are highlighted with color ("double" and
3948     "float" in this case).
3949
3950'-fno-elide-type'
3951     By default when the C++ frontend prints diagnostics showing
3952     mismatching template types, common parts of the types are printed
3953     as "[...]"  to simplify the error message.  For example:
3954
3955            could not convert 'std::map<int, std::vector<double> >()'
3956              from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
3957
3958     Specifying the '-fno-elide-type' flag suppresses that behavior.
3959     This flag also affects the output of the
3960     '-fdiagnostics-show-template-tree' flag.
3961
3962'-fno-show-column'
3963     Do not print column numbers in diagnostics.  This may be necessary
3964     if diagnostics are being scanned by a program that does not
3965     understand the column numbers, such as 'dejagnu'.
3966
3967'-fdiagnostics-format=FORMAT'
3968     Select a different format for printing diagnostics.  FORMAT is
3969     'text' or 'json'.  The default is 'text'.
3970
3971     The 'json' format consists of a top-level JSON array containing
3972     JSON objects representing the diagnostics.
3973
3974     The JSON is emitted as one line, without formatting; the examples
3975     below have been formatted for clarity.
3976
3977     Diagnostics can have child diagnostics.  For example, this error
3978     and note:
3979
3980          misleading-indentation.c:15:3: warning: this 'if' clause does not
3981            guard... [-Wmisleading-indentation]
3982             15 |   if (flag)
3983                |   ^~
3984          misleading-indentation.c:17:5: note: ...this statement, but the latter
3985            is misleadingly indented as if it were guarded by the 'if'
3986             17 |     y = 2;
3987                |     ^
3988
3989     might be printed in JSON form (after formatting) like this:
3990
3991          [
3992              {
3993                  "kind": "warning",
3994                  "locations": [
3995                      {
3996                          "caret": {
3997                              "column": 3,
3998                              "file": "misleading-indentation.c",
3999                              "line": 15
4000                          },
4001                          "finish": {
4002                              "column": 4,
4003                              "file": "misleading-indentation.c",
4004                              "line": 15
4005                          }
4006                      }
4007                  ],
4008                  "message": "this \u2018if\u2019 clause does not guard...",
4009                  "option": "-Wmisleading-indentation",
4010                  "children": [
4011                      {
4012                          "kind": "note",
4013                          "locations": [
4014                              {
4015                                  "caret": {
4016                                      "column": 5,
4017                                      "file": "misleading-indentation.c",
4018                                      "line": 17
4019                                  }
4020                              }
4021                          ],
4022                          "message": "...this statement, but the latter is ..."
4023                      }
4024                  ]
4025              },
4026              ...
4027          ]
4028
4029     where the 'note' is a child of the 'warning'.
4030
4031     A diagnostic has a 'kind'.  If this is 'warning', then there is an
4032     'option' key describing the command-line option controlling the
4033     warning.
4034
4035     A diagnostic can contain zero or more locations.  Each location has
4036     up to three positions within it: a 'caret' position and optional
4037     'start' and 'finish' positions.  A location can also have an
4038     optional 'label' string.  For example, this error:
4039
4040          bad-binary-ops.c:64:23: error: invalid operands to binary + (have 'S' {aka
4041             'struct s'} and 'T' {aka 'struct t'})
4042             64 |   return callee_4a () + callee_4b ();
4043                |          ~~~~~~~~~~~~ ^ ~~~~~~~~~~~~
4044                |          |              |
4045                |          |              T {aka struct t}
4046                |          S {aka struct s}
4047
4048     has three locations.  Its primary location is at the "+" token at
4049     column 23.  It has two secondary locations, describing the left and
4050     right-hand sides of the expression, which have labels.  It might be
4051     printed in JSON form as:
4052
4053              {
4054                  "children": [],
4055                  "kind": "error",
4056                  "locations": [
4057                      {
4058                          "caret": {
4059                              "column": 23, "file": "bad-binary-ops.c", "line": 64
4060                          }
4061                      },
4062                      {
4063                          "caret": {
4064                              "column": 10, "file": "bad-binary-ops.c", "line": 64
4065                          },
4066                          "finish": {
4067                              "column": 21, "file": "bad-binary-ops.c", "line": 64
4068                          },
4069                          "label": "S {aka struct s}"
4070                      },
4071                      {
4072                          "caret": {
4073                              "column": 25, "file": "bad-binary-ops.c", "line": 64
4074                          },
4075                          "finish": {
4076                              "column": 36, "file": "bad-binary-ops.c", "line": 64
4077                          },
4078                          "label": "T {aka struct t}"
4079                      }
4080                  ],
4081                  "message": "invalid operands to binary + ..."
4082              }
4083
4084     If a diagnostic contains fix-it hints, it has a 'fixits' array,
4085     consisting of half-open intervals, similar to the output of
4086     '-fdiagnostics-parseable-fixits'.  For example, this diagnostic
4087     with a replacement fix-it hint:
4088
4089          demo.c:8:15: error: 'struct s' has no member named 'colour'; did you
4090            mean 'color'?
4091              8 |   return ptr->colour;
4092                |               ^~~~~~
4093                |               color
4094
4095     might be printed in JSON form as:
4096
4097              {
4098                  "children": [],
4099                  "fixits": [
4100                      {
4101                          "next": {
4102                              "column": 21,
4103                              "file": "demo.c",
4104                              "line": 8
4105                          },
4106                          "start": {
4107                              "column": 15,
4108                              "file": "demo.c",
4109                              "line": 8
4110                          },
4111                          "string": "color"
4112                      }
4113                  ],
4114                  "kind": "error",
4115                  "locations": [
4116                      {
4117                          "caret": {
4118                              "column": 15,
4119                              "file": "demo.c",
4120                              "line": 8
4121                          },
4122                          "finish": {
4123                              "column": 20,
4124                              "file": "demo.c",
4125                              "line": 8
4126                          }
4127                      }
4128                  ],
4129                  "message": "\u2018struct s\u2019 has no member named ..."
4130              }
4131
4132     where the fix-it hint suggests replacing the text from 'start' up
4133     to but not including 'next' with 'string''s value.  Deletions are
4134     expressed via an empty value for 'string', insertions by having
4135     'start' equal 'next'.
4136
4137
4138File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Diagnostic Message Formatting Options,  Up: Invoking GCC
4139
41403.8 Options to Request or Suppress Warnings
4141===========================================
4142
4143Warnings are diagnostic messages that report constructions that are not
4144inherently erroneous but that are risky or suggest there may have been
4145an error.
4146
4147 The following language-independent options do not enable specific
4148warnings but control the kinds of diagnostics produced by GCC.
4149
4150'-fsyntax-only'
4151     Check the code for syntax errors, but don't do anything beyond
4152     that.
4153
4154'-fmax-errors=N'
4155     Limits the maximum number of error messages to N, at which point
4156     GCC bails out rather than attempting to continue processing the
4157     source code.  If N is 0 (the default), there is no limit on the
4158     number of error messages produced.  If '-Wfatal-errors' is also
4159     specified, then '-Wfatal-errors' takes precedence over this option.
4160
4161'-w'
4162     Inhibit all warning messages.
4163
4164'-Werror'
4165     Make all warnings into errors.
4166
4167'-Werror='
4168     Make the specified warning into an error.  The specifier for a
4169     warning is appended; for example '-Werror=switch' turns the
4170     warnings controlled by '-Wswitch' into errors.  This switch takes a
4171     negative form, to be used to negate '-Werror' for specific
4172     warnings; for example '-Wno-error=switch' makes '-Wswitch' warnings
4173     not be errors, even when '-Werror' is in effect.
4174
4175     The warning message for each controllable warning includes the
4176     option that controls the warning.  That option can then be used
4177     with '-Werror=' and '-Wno-error=' as described above.  (Printing of
4178     the option in the warning message can be disabled using the
4179     '-fno-diagnostics-show-option' flag.)
4180
4181     Note that specifying '-Werror='FOO automatically implies '-W'FOO.
4182     However, '-Wno-error='FOO does not imply anything.
4183
4184'-Wfatal-errors'
4185     This option causes the compiler to abort compilation on the first
4186     error occurred rather than trying to keep going and printing
4187     further error messages.
4188
4189 You can request many specific warnings with options beginning with
4190'-W', for example '-Wimplicit' to request warnings on implicit
4191declarations.  Each of these specific warning options also has a
4192negative form beginning '-Wno-' to turn off warnings; for example,
4193'-Wno-implicit'.  This manual lists only one of the two forms, whichever
4194is not the default.  For further language-specific options also refer to
4195*note C++ Dialect Options:: and *note Objective-C and Objective-C++
4196Dialect Options::.
4197
4198 Some options, such as '-Wall' and '-Wextra', turn on other options,
4199such as '-Wunused', which may turn on further options, such as
4200'-Wunused-value'.  The combined effect of positive and negative forms is
4201that more specific options have priority over less specific ones,
4202independently of their position in the command-line.  For options of the
4203same specificity, the last one takes effect.  Options enabled or
4204disabled via pragmas (*note Diagnostic Pragmas::) take effect as if they
4205appeared at the end of the command-line.
4206
4207 When an unrecognized warning option is requested (e.g.,
4208'-Wunknown-warning'), GCC emits a diagnostic stating that the option is
4209not recognized.  However, if the '-Wno-' form is used, the behavior is
4210slightly different: no diagnostic is produced for '-Wno-unknown-warning'
4211unless other diagnostics are being produced.  This allows the use of new
4212'-Wno-' options with old compilers, but if something goes wrong, the
4213compiler warns that an unrecognized option is present.
4214
4215 The effectiveness of some warnings depends on optimizations also being
4216enabled.  For example '-Wsuggest-final-types' is more effective with
4217link-time optimization and '-Wmaybe-uninitialized' will not warn at all
4218unless optimization is enabled.
4219
4220'-Wpedantic'
4221'-pedantic'
4222     Issue all the warnings demanded by strict ISO C and ISO C++; reject
4223     all programs that use forbidden extensions, and some other programs
4224     that do not follow ISO C and ISO C++.  For ISO C, follows the
4225     version of the ISO C standard specified by any '-std' option used.
4226
4227     Valid ISO C and ISO C++ programs should compile properly with or
4228     without this option (though a rare few require '-ansi' or a '-std'
4229     option specifying the required version of ISO C).  However, without
4230     this option, certain GNU extensions and traditional C and C++
4231     features are supported as well.  With this option, they are
4232     rejected.
4233
4234     '-Wpedantic' does not cause warning messages for use of the
4235     alternate keywords whose names begin and end with '__'.  Pedantic
4236     warnings are also disabled in the expression that follows
4237     '__extension__'.  However, only system header files should use
4238     these escape routes; application programs should avoid them.  *Note
4239     Alternate Keywords::.
4240
4241     Some users try to use '-Wpedantic' to check programs for strict ISO
4242     C conformance.  They soon find that it does not do quite what they
4243     want: it finds some non-ISO practices, but not all--only those for
4244     which ISO C _requires_ a diagnostic, and some others for which
4245     diagnostics have been added.
4246
4247     A feature to report any failure to conform to ISO C might be useful
4248     in some instances, but would require considerable additional work
4249     and would be quite different from '-Wpedantic'.  We don't have
4250     plans to support such a feature in the near future.
4251
4252     Where the standard specified with '-std' represents a GNU extended
4253     dialect of C, such as 'gnu90' or 'gnu99', there is a corresponding
4254     "base standard", the version of ISO C on which the GNU extended
4255     dialect is based.  Warnings from '-Wpedantic' are given where they
4256     are required by the base standard.  (It does not make sense for
4257     such warnings to be given only for features not in the specified
4258     GNU C dialect, since by definition the GNU dialects of C include
4259     all features the compiler supports with the given option, and there
4260     would be nothing to warn about.)
4261
4262'-pedantic-errors'
4263     Give an error whenever the "base standard" (see '-Wpedantic')
4264     requires a diagnostic, in some cases where there is undefined
4265     behavior at compile-time and in some other cases that do not
4266     prevent compilation of programs that are valid according to the
4267     standard.  This is not equivalent to '-Werror=pedantic', since
4268     there are errors enabled by this option and not enabled by the
4269     latter and vice versa.
4270
4271'-Wall'
4272     This enables all the warnings about constructions that some users
4273     consider questionable, and that are easy to avoid (or modify to
4274     prevent the warning), even in conjunction with macros.  This also
4275     enables some language-specific warnings described in *note C++
4276     Dialect Options:: and *note Objective-C and Objective-C++ Dialect
4277     Options::.
4278
4279     '-Wall' turns on the following warning flags:
4280
4281          -Waddress
4282          -Warray-bounds=1 (only with -O2)
4283          -Wbool-compare
4284          -Wbool-operation
4285          -Wc++11-compat  -Wc++14-compat
4286          -Wcatch-value (C++ and Objective-C++ only)
4287          -Wchar-subscripts
4288          -Wcomment
4289          -Wduplicate-decl-specifier (C and Objective-C only)
4290          -Wenum-compare (in C/ObjC; this is on by default in C++)
4291          -Wformat
4292          -Wint-in-bool-context
4293          -Wimplicit (C and Objective-C only)
4294          -Wimplicit-int (C and Objective-C only)
4295          -Wimplicit-function-declaration (C and Objective-C only)
4296          -Winit-self (only for C++)
4297          -Wlogical-not-parentheses
4298          -Wmain (only for C/ObjC and unless -ffreestanding)
4299          -Wmaybe-uninitialized
4300          -Wmemset-elt-size
4301          -Wmemset-transposed-args
4302          -Wmisleading-indentation (only for C/C++)
4303          -Wmissing-attributes
4304          -Wmissing-braces (only for C/ObjC)
4305          -Wmultistatement-macros
4306          -Wnarrowing (only for C++)
4307          -Wnonnull
4308          -Wnonnull-compare
4309          -Wopenmp-simd
4310          -Wparentheses
4311          -Wpessimizing-move (only for C++)
4312          -Wpointer-sign
4313          -Wreorder
4314          -Wrestrict
4315          -Wreturn-type
4316          -Wsequence-point
4317          -Wsign-compare (only in C++)
4318          -Wsizeof-pointer-div
4319          -Wsizeof-pointer-memaccess
4320          -Wstrict-aliasing
4321          -Wstrict-overflow=1
4322          -Wswitch
4323          -Wtautological-compare
4324          -Wtrigraphs
4325          -Wuninitialized
4326          -Wunknown-pragmas
4327          -Wunused-function
4328          -Wunused-label
4329          -Wunused-value
4330          -Wunused-variable
4331          -Wvolatile-register-var
4332
4333     Note that some warning flags are not implied by '-Wall'.  Some of
4334     them warn about constructions that users generally do not consider
4335     questionable, but which occasionally you might wish to check for;
4336     others warn about constructions that are necessary or hard to avoid
4337     in some cases, and there is no simple way to modify the code to
4338     suppress the warning.  Some of them are enabled by '-Wextra' but
4339     many of them must be enabled individually.
4340
4341'-Wextra'
4342     This enables some extra warning flags that are not enabled by
4343     '-Wall'.  (This option used to be called '-W'.  The older name is
4344     still supported, but the newer name is more descriptive.)
4345
4346          -Wclobbered
4347          -Wcast-function-type
4348          -Wdeprecated-copy (C++ only)
4349          -Wempty-body
4350          -Wignored-qualifiers
4351          -Wimplicit-fallthrough=3
4352          -Wmissing-field-initializers
4353          -Wmissing-parameter-type (C only)
4354          -Wold-style-declaration (C only)
4355          -Woverride-init
4356          -Wsign-compare (C only)
4357          -Wredundant-move (only for C++)
4358          -Wtype-limits
4359          -Wuninitialized
4360          -Wshift-negative-value (in C++03 and in C99 and newer)
4361          -Wunused-parameter (only with -Wunused or -Wall)
4362          -Wunused-but-set-parameter (only with -Wunused or -Wall)
4363
4364     The option '-Wextra' also prints warning messages for the following
4365     cases:
4366
4367        * A pointer is compared against integer zero with '<', '<=',
4368          '>', or '>='.
4369
4370        * (C++ only) An enumerator and a non-enumerator both appear in a
4371          conditional expression.
4372
4373        * (C++ only) Ambiguous virtual bases.
4374
4375        * (C++ only) Subscripting an array that has been declared
4376          'register'.
4377
4378        * (C++ only) Taking the address of a variable that has been
4379          declared 'register'.
4380
4381        * (C++ only) A base class is not initialized in the copy
4382          constructor of a derived class.
4383
4384'-Wchar-subscripts'
4385     Warn if an array subscript has type 'char'.  This is a common cause
4386     of error, as programmers often forget that this type is signed on
4387     some machines.  This warning is enabled by '-Wall'.
4388
4389'-Wno-coverage-mismatch'
4390     Warn if feedback profiles do not match when using the
4391     '-fprofile-use' option.  If a source file is changed between
4392     compiling with '-fprofile-generate' and with '-fprofile-use', the
4393     files with the profile feedback can fail to match the source file
4394     and GCC cannot use the profile feedback information.  By default,
4395     this warning is enabled and is treated as an error.
4396     '-Wno-coverage-mismatch' can be used to disable the warning or
4397     '-Wno-error=coverage-mismatch' can be used to disable the error.
4398     Disabling the error for this warning can result in poorly optimized
4399     code and is useful only in the case of very minor changes such as
4400     bug fixes to an existing code-base.  Completely disabling the
4401     warning is not recommended.
4402
4403'-Wno-cpp'
4404     (C, Objective-C, C++, Objective-C++ and Fortran only)
4405
4406     Suppress warning messages emitted by '#warning' directives.
4407
4408'-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)'
4409     Give a warning when a value of type 'float' is implicitly promoted
4410     to 'double'.  CPUs with a 32-bit "single-precision" floating-point
4411     unit implement 'float' in hardware, but emulate 'double' in
4412     software.  On such a machine, doing computations using 'double'
4413     values is much more expensive because of the overhead required for
4414     software emulation.
4415
4416     It is easy to accidentally do computations with 'double' because
4417     floating-point literals are implicitly of type 'double'.  For
4418     example, in:
4419          float area(float radius)
4420          {
4421             return 3.14159 * radius * radius;
4422          }
4423     the compiler performs the entire computation with 'double' because
4424     the floating-point literal is a 'double'.
4425
4426'-Wduplicate-decl-specifier (C and Objective-C only)'
4427     Warn if a declaration has duplicate 'const', 'volatile', 'restrict'
4428     or '_Atomic' specifier.  This warning is enabled by '-Wall'.
4429
4430'-Wformat'
4431'-Wformat=N'
4432     Check calls to 'printf' and 'scanf', etc., to make sure that the
4433     arguments supplied have types appropriate to the format string
4434     specified, and that the conversions specified in the format string
4435     make sense.  This includes standard functions, and others specified
4436     by format attributes (*note Function Attributes::), in the
4437     'printf', 'scanf', 'strftime' and 'strfmon' (an X/Open extension,
4438     not in the C standard) families (or other target-specific
4439     families).  Which functions are checked without format attributes
4440     having been specified depends on the standard version selected, and
4441     such checks of functions without the attribute specified are
4442     disabled by '-ffreestanding' or '-fno-builtin'.
4443
4444     The formats are checked against the format features supported by
4445     GNU libc version 2.2.  These include all ISO C90 and C99 features,
4446     as well as features from the Single Unix Specification and some BSD
4447     and GNU extensions.  Other library implementations may not support
4448     all these features; GCC does not support warning about features
4449     that go beyond a particular library's limitations.  However, if
4450     '-Wpedantic' is used with '-Wformat', warnings are given about
4451     format features not in the selected standard version (but not for
4452     'strfmon' formats, since those are not in any version of the C
4453     standard).  *Note Options Controlling C Dialect: C Dialect Options.
4454
4455     '-Wformat=1'
4456     '-Wformat'
4457          Option '-Wformat' is equivalent to '-Wformat=1', and
4458          '-Wno-format' is equivalent to '-Wformat=0'.  Since '-Wformat'
4459          also checks for null format arguments for several functions,
4460          '-Wformat' also implies '-Wnonnull'.  Some aspects of this
4461          level of format checking can be disabled by the options:
4462          '-Wno-format-contains-nul', '-Wno-format-extra-args', and
4463          '-Wno-format-zero-length'.  '-Wformat' is enabled by '-Wall'.
4464
4465     '-Wno-format-contains-nul'
4466          If '-Wformat' is specified, do not warn about format strings
4467          that contain NUL bytes.
4468
4469     '-Wno-format-extra-args'
4470          If '-Wformat' is specified, do not warn about excess arguments
4471          to a 'printf' or 'scanf' format function.  The C standard
4472          specifies that such arguments are ignored.
4473
4474          Where the unused arguments lie between used arguments that are
4475          specified with '$' operand number specifications, normally
4476          warnings are still given, since the implementation could not
4477          know what type to pass to 'va_arg' to skip the unused
4478          arguments.  However, in the case of 'scanf' formats, this
4479          option suppresses the warning if the unused arguments are all
4480          pointers, since the Single Unix Specification says that such
4481          unused arguments are allowed.
4482
4483     '-Wformat-overflow'
4484     '-Wformat-overflow=LEVEL'
4485          Warn about calls to formatted input/output functions such as
4486          'sprintf' and 'vsprintf' that might overflow the destination
4487          buffer.  When the exact number of bytes written by a format
4488          directive cannot be determined at compile-time it is estimated
4489          based on heuristics that depend on the LEVEL argument and on
4490          optimization.  While enabling optimization will in most cases
4491          improve the accuracy of the warning, it may also result in
4492          false positives.
4493
4494          '-Wformat-overflow'
4495          '-Wformat-overflow=1'
4496               Level 1 of '-Wformat-overflow' enabled by '-Wformat'
4497               employs a conservative approach that warns only about
4498               calls that most likely overflow the buffer.  At this
4499               level, numeric arguments to format directives with
4500               unknown values are assumed to have the value of one, and
4501               strings of unknown length to be empty.  Numeric arguments
4502               that are known to be bounded to a subrange of their type,
4503               or string arguments whose output is bounded either by
4504               their directive's precision or by a finite set of string
4505               literals, are assumed to take on the value within the
4506               range that results in the most bytes on output.  For
4507               example, the call to 'sprintf' below is diagnosed because
4508               even with both A and B equal to zero, the terminating NUL
4509               character (''\0'') appended by the function to the
4510               destination buffer will be written past its end.
4511               Increasing the size of the buffer by a single byte is
4512               sufficient to avoid the warning, though it may not be
4513               sufficient to avoid the overflow.
4514
4515                    void f (int a, int b)
4516                    {
4517                      char buf [13];
4518                      sprintf (buf, "a = %i, b = %i\n", a, b);
4519                    }
4520
4521          '-Wformat-overflow=2'
4522               Level 2 warns also about calls that might overflow the
4523               destination buffer given an argument of sufficient length
4524               or magnitude.  At level 2, unknown numeric arguments are
4525               assumed to have the minimum representable value for
4526               signed types with a precision greater than 1, and the
4527               maximum representable value otherwise.  Unknown string
4528               arguments whose length cannot be assumed to be bounded
4529               either by the directive's precision, or by a finite set
4530               of string literals they may evaluate to, or the character
4531               array they may point to, are assumed to be 1 character
4532               long.
4533
4534               At level 2, the call in the example above is again
4535               diagnosed, but this time because with A equal to a 32-bit
4536               'INT_MIN' the first '%i' directive will write some of its
4537               digits beyond the end of the destination buffer.  To make
4538               the call safe regardless of the values of the two
4539               variables, the size of the destination buffer must be
4540               increased to at least 34 bytes.  GCC includes the minimum
4541               size of the buffer in an informational note following the
4542               warning.
4543
4544               An alternative to increasing the size of the destination
4545               buffer is to constrain the range of formatted values.
4546               The maximum length of string arguments can be bounded by
4547               specifying the precision in the format directive.  When
4548               numeric arguments of format directives can be assumed to
4549               be bounded by less than the precision of their type,
4550               choosing an appropriate length modifier to the format
4551               specifier will reduce the required buffer size.  For
4552               example, if A and B in the example above can be assumed
4553               to be within the precision of the 'short int' type then
4554               using either the '%hi' format directive or casting the
4555               argument to 'short' reduces the maximum required size of
4556               the buffer to 24 bytes.
4557
4558                    void f (int a, int b)
4559                    {
4560                      char buf [23];
4561                      sprintf (buf, "a = %hi, b = %i\n", a, (short)b);
4562                    }
4563
4564     '-Wno-format-zero-length'
4565          If '-Wformat' is specified, do not warn about zero-length
4566          formats.  The C standard specifies that zero-length formats
4567          are allowed.
4568
4569     '-Wformat=2'
4570          Enable '-Wformat' plus additional format checks.  Currently
4571          equivalent to '-Wformat -Wformat-nonliteral -Wformat-security
4572          -Wformat-y2k'.
4573
4574     '-Wformat-nonliteral'
4575          If '-Wformat' is specified, also warn if the format string is
4576          not a string literal and so cannot be checked, unless the
4577          format function takes its format arguments as a 'va_list'.
4578
4579     '-Wformat-security'
4580          If '-Wformat' is specified, also warn about uses of format
4581          functions that represent possible security problems.  At
4582          present, this warns about calls to 'printf' and 'scanf'
4583          functions where the format string is not a string literal and
4584          there are no format arguments, as in 'printf (foo);'.  This
4585          may be a security hole if the format string came from
4586          untrusted input and contains '%n'.  (This is currently a
4587          subset of what '-Wformat-nonliteral' warns about, but in
4588          future warnings may be added to '-Wformat-security' that are
4589          not included in '-Wformat-nonliteral'.)
4590
4591     '-Wformat-signedness'
4592          If '-Wformat' is specified, also warn if the format string
4593          requires an unsigned argument and the argument is signed and
4594          vice versa.
4595
4596     '-Wformat-truncation'
4597     '-Wformat-truncation=LEVEL'
4598          Warn about calls to formatted input/output functions such as
4599          'snprintf' and 'vsnprintf' that might result in output
4600          truncation.  When the exact number of bytes written by a
4601          format directive cannot be determined at compile-time it is
4602          estimated based on heuristics that depend on the LEVEL
4603          argument and on optimization.  While enabling optimization
4604          will in most cases improve the accuracy of the warning, it may
4605          also result in false positives.  Except as noted otherwise,
4606          the option uses the same logic '-Wformat-overflow'.
4607
4608          '-Wformat-truncation'
4609          '-Wformat-truncation=1'
4610               Level 1 of '-Wformat-truncation' enabled by '-Wformat'
4611               employs a conservative approach that warns only about
4612               calls to bounded functions whose return value is unused
4613               and that will most likely result in output truncation.
4614
4615          '-Wformat-truncation=2'
4616               Level 2 warns also about calls to bounded functions whose
4617               return value is used and that might result in truncation
4618               given an argument of sufficient length or magnitude.
4619
4620     '-Wformat-y2k'
4621          If '-Wformat' is specified, also warn about 'strftime' formats
4622          that may yield only a two-digit year.
4623
4624'-Wnonnull'
4625     Warn about passing a null pointer for arguments marked as requiring
4626     a non-null value by the 'nonnull' function attribute.
4627
4628     '-Wnonnull' is included in '-Wall' and '-Wformat'.  It can be
4629     disabled with the '-Wno-nonnull' option.
4630
4631'-Wnonnull-compare'
4632     Warn when comparing an argument marked with the 'nonnull' function
4633     attribute against null inside the function.
4634
4635     '-Wnonnull-compare' is included in '-Wall'.  It can be disabled
4636     with the '-Wno-nonnull-compare' option.
4637
4638'-Wnull-dereference'
4639     Warn if the compiler detects paths that trigger erroneous or
4640     undefined behavior due to dereferencing a null pointer.  This
4641     option is only active when '-fdelete-null-pointer-checks' is
4642     active, which is enabled by optimizations in most targets.  The
4643     precision of the warnings depends on the optimization options used.
4644
4645'-Winit-self (C, C++, Objective-C and Objective-C++ only)'
4646     Warn about uninitialized variables that are initialized with
4647     themselves.  Note this option can only be used with the
4648     '-Wuninitialized' option.
4649
4650     For example, GCC warns about 'i' being uninitialized in the
4651     following snippet only when '-Winit-self' has been specified:
4652          int f()
4653          {
4654            int i = i;
4655            return i;
4656          }
4657
4658     This warning is enabled by '-Wall' in C++.
4659
4660'-Wimplicit-int (C and Objective-C only)'
4661     Warn when a declaration does not specify a type.  This warning is
4662     enabled by '-Wall'.
4663
4664'-Wimplicit-function-declaration (C and Objective-C only)'
4665     Give a warning whenever a function is used before being declared.
4666     In C99 mode ('-std=c99' or '-std=gnu99'), this warning is enabled
4667     by default and it is made into an error by '-pedantic-errors'.
4668     This warning is also enabled by '-Wall'.
4669
4670'-Wimplicit (C and Objective-C only)'
4671     Same as '-Wimplicit-int' and '-Wimplicit-function-declaration'.
4672     This warning is enabled by '-Wall'.
4673
4674'-Wimplicit-fallthrough'
4675     '-Wimplicit-fallthrough' is the same as '-Wimplicit-fallthrough=3'
4676     and '-Wno-implicit-fallthrough' is the same as
4677     '-Wimplicit-fallthrough=0'.
4678
4679'-Wimplicit-fallthrough=N'
4680     Warn when a switch case falls through.  For example:
4681
4682          switch (cond)
4683            {
4684            case 1:
4685              a = 1;
4686              break;
4687            case 2:
4688              a = 2;
4689            case 3:
4690              a = 3;
4691              break;
4692            }
4693
4694     This warning does not warn when the last statement of a case cannot
4695     fall through, e.g.  when there is a return statement or a call to
4696     function declared with the noreturn attribute.
4697     '-Wimplicit-fallthrough=' also takes into account control flow
4698     statements, such as ifs, and only warns when appropriate.  E.g.
4699
4700          switch (cond)
4701            {
4702            case 1:
4703              if (i > 3) {
4704                bar (5);
4705                break;
4706              } else if (i < 1) {
4707                bar (0);
4708              } else
4709                return;
4710            default:
4711              ...
4712            }
4713
4714     Since there are occasions where a switch case fall through is
4715     desirable, GCC provides an attribute, '__attribute__
4716     ((fallthrough))', that is to be used along with a null statement to
4717     suppress this warning that would normally occur:
4718
4719          switch (cond)
4720            {
4721            case 1:
4722              bar (0);
4723              __attribute__ ((fallthrough));
4724            default:
4725              ...
4726            }
4727
4728     C++17 provides a standard way to suppress the
4729     '-Wimplicit-fallthrough' warning using '[[fallthrough]];' instead
4730     of the GNU attribute.  In C++11 or C++14 users can use
4731     '[[gnu::fallthrough]];', which is a GNU extension.  Instead of
4732     these attributes, it is also possible to add a fallthrough comment
4733     to silence the warning.  The whole body of the C or C++ style
4734     comment should match the given regular expressions listed below.
4735     The option argument N specifies what kind of comments are accepted:
4736
4737        * '-Wimplicit-fallthrough=0' disables the warning altogether.
4738
4739        * '-Wimplicit-fallthrough=1' matches '.*' regular expression,
4740          any comment is used as fallthrough comment.
4741
4742        * '-Wimplicit-fallthrough=2' case insensitively matches
4743          '.*falls?[ \t-]*thr(ough|u).*' regular expression.
4744
4745        * '-Wimplicit-fallthrough=3' case sensitively matches one of the
4746          following regular expressions:
4747
4748             * '-fallthrough'
4749
4750             * '@fallthrough@'
4751
4752             * 'lint -fallthrough[ \t]*'
4753
4754             * '[ \t.!]*(ELSE,? |INTENTIONAL(LY)? )?
4755               FALL(S | |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?'
4756
4757             * '[ \t.!]*(Else,? |Intentional(ly)? )?
4758               Fall((s | |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?'
4759
4760             * '[ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?
4761               fall(s | |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?'
4762
4763        * '-Wimplicit-fallthrough=4' case sensitively matches one of the
4764          following regular expressions:
4765
4766             * '-fallthrough'
4767
4768             * '@fallthrough@'
4769
4770             * 'lint -fallthrough[ \t]*'
4771
4772             * '[ \t]*FALLTHR(OUGH|U)[ \t]*'
4773
4774        * '-Wimplicit-fallthrough=5' doesn't recognize any comments as
4775          fallthrough comments, only attributes disable the warning.
4776
4777     The comment needs to be followed after optional whitespace and
4778     other comments by 'case' or 'default' keywords or by a user label
4779     that precedes some 'case' or 'default' label.
4780
4781          switch (cond)
4782            {
4783            case 1:
4784              bar (0);
4785              /* FALLTHRU */
4786            default:
4787              ...
4788            }
4789
4790     The '-Wimplicit-fallthrough=3' warning is enabled by '-Wextra'.
4791
4792'-Wif-not-aligned (C, C++, Objective-C and Objective-C++ only)'
4793     Control if warning triggered by the 'warn_if_not_aligned' attribute
4794     should be issued.  This is enabled by default.  Use
4795     '-Wno-if-not-aligned' to disable it.
4796
4797'-Wignored-qualifiers (C and C++ only)'
4798     Warn if the return type of a function has a type qualifier such as
4799     'const'.  For ISO C such a type qualifier has no effect, since the
4800     value returned by a function is not an lvalue.  For C++, the
4801     warning is only emitted for scalar types or 'void'.  ISO C
4802     prohibits qualified 'void' return types on function definitions, so
4803     such return types always receive a warning even without this
4804     option.
4805
4806     This warning is also enabled by '-Wextra'.
4807
4808'-Wignored-attributes (C and C++ only)'
4809     Warn when an attribute is ignored.  This is different from the
4810     '-Wattributes' option in that it warns whenever the compiler
4811     decides to drop an attribute, not that the attribute is either
4812     unknown, used in a wrong place, etc.  This warning is enabled by
4813     default.
4814
4815'-Wmain'
4816     Warn if the type of 'main' is suspicious.  'main' should be a
4817     function with external linkage, returning int, taking either zero
4818     arguments, two, or three arguments of appropriate types.  This
4819     warning is enabled by default in C++ and is enabled by either
4820     '-Wall' or '-Wpedantic'.
4821
4822'-Wmisleading-indentation (C and C++ only)'
4823     Warn when the indentation of the code does not reflect the block
4824     structure.  Specifically, a warning is issued for 'if', 'else',
4825     'while', and 'for' clauses with a guarded statement that does not
4826     use braces, followed by an unguarded statement with the same
4827     indentation.
4828
4829     In the following example, the call to "bar" is misleadingly
4830     indented as if it were guarded by the "if" conditional.
4831
4832            if (some_condition ())
4833              foo ();
4834              bar ();  /* Gotcha: this is not guarded by the "if".  */
4835
4836     In the case of mixed tabs and spaces, the warning uses the
4837     '-ftabstop=' option to determine if the statements line up
4838     (defaulting to 8).
4839
4840     The warning is not issued for code involving multiline preprocessor
4841     logic such as the following example.
4842
4843            if (flagA)
4844              foo (0);
4845          #if SOME_CONDITION_THAT_DOES_NOT_HOLD
4846            if (flagB)
4847          #endif
4848              foo (1);
4849
4850     The warning is not issued after a '#line' directive, since this
4851     typically indicates autogenerated code, and no assumptions can be
4852     made about the layout of the file that the directive references.
4853
4854     This warning is enabled by '-Wall' in C and C++.
4855
4856'-Wmissing-attributes'
4857     Warn when a declaration of a function is missing one or more
4858     attributes that a related function is declared with and whose
4859     absence may adversely affect the correctness or efficiency of
4860     generated code.  For example, the warning is issued for
4861     declarations of aliases that use attributes to specify less
4862     restrictive requirements than those of their targets.  This
4863     typically represents a potential optimization opportunity.  By
4864     contrast, the '-Wattribute-alias=2' option controls warnings issued
4865     when the alias is more restrictive than the target, which could
4866     lead to incorrect code generation.  Attributes considered include
4867     'alloc_align', 'alloc_size', 'cold', 'const', 'hot', 'leaf',
4868     'malloc', 'nonnull', 'noreturn', 'nothrow', 'pure',
4869     'returns_nonnull', and 'returns_twice'.
4870
4871     In C++, the warning is issued when an explicit specialization of a
4872     primary template declared with attribute 'alloc_align',
4873     'alloc_size', 'assume_aligned', 'format', 'format_arg', 'malloc',
4874     or 'nonnull' is declared without it.  Attributes 'deprecated',
4875     'error', and 'warning' suppress the warning.  (*note Function
4876     Attributes::).
4877
4878     You can use the 'copy' attribute to apply the same set of
4879     attributes to a declaration as that on another declaration without
4880     explicitly enumerating the attributes.  This attribute can be
4881     applied to declarations of functions (*note Common Function
4882     Attributes::), variables (*note Common Variable Attributes::), or
4883     types (*note Common Type Attributes::).
4884
4885     '-Wmissing-attributes' is enabled by '-Wall'.
4886
4887     For example, since the declaration of the primary function template
4888     below makes use of both attribute 'malloc' and 'alloc_size' the
4889     declaration of the explicit specialization of the template is
4890     diagnosed because it is missing one of the attributes.
4891
4892          template <class T>
4893          T* __attribute__ ((malloc, alloc_size (1)))
4894          allocate (size_t);
4895
4896          template <>
4897          void* __attribute__ ((malloc))   // missing alloc_size
4898          allocate<void> (size_t);
4899
4900'-Wmissing-braces'
4901     Warn if an aggregate or union initializer is not fully bracketed.
4902     In the following example, the initializer for 'a' is not fully
4903     bracketed, but that for 'b' is fully bracketed.  This warning is
4904     enabled by '-Wall' in C.
4905
4906          int a[2][2] = { 0, 1, 2, 3 };
4907          int b[2][2] = { { 0, 1 }, { 2, 3 } };
4908
4909     This warning is enabled by '-Wall'.
4910
4911'-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
4912     Warn if a user-supplied include directory does not exist.
4913
4914'-Wmissing-profile'
4915     Warn if feedback profiles are missing when using the
4916     '-fprofile-use' option.  This option diagnoses those cases where a
4917     new function or a new file is added to the user code between
4918     compiling with '-fprofile-generate' and with '-fprofile-use',
4919     without regenerating the profiles.  In these cases, the profile
4920     feedback data files do not contain any profile feedback information
4921     for the newly added function or file respectively.  Also, in the
4922     case when profile count data (.gcda) files are removed, GCC cannot
4923     use any profile feedback information.  In all these cases, warnings
4924     are issued to inform the user that a profile generation step is
4925     due.  '-Wno-missing-profile' can be used to disable the warning.
4926     Ignoring the warning can result in poorly optimized code.
4927     Completely disabling the warning is not recommended and should be
4928     done only when non-existent profile data is justified.
4929
4930'-Wmultistatement-macros'
4931     Warn about unsafe multiple statement macros that appear to be
4932     guarded by a clause such as 'if', 'else', 'for', 'switch', or
4933     'while', in which only the first statement is actually guarded
4934     after the macro is expanded.
4935
4936     For example:
4937
4938          #define DOIT x++; y++
4939          if (c)
4940            DOIT;
4941
4942     will increment 'y' unconditionally, not just when 'c' holds.  The
4943     can usually be fixed by wrapping the macro in a do-while loop:
4944          #define DOIT do { x++; y++; } while (0)
4945          if (c)
4946            DOIT;
4947
4948     This warning is enabled by '-Wall' in C and C++.
4949
4950'-Wparentheses'
4951     Warn if parentheses are omitted in certain contexts, such as when
4952     there is an assignment in a context where a truth value is
4953     expected, or when operators are nested whose precedence people
4954     often get confused about.
4955
4956     Also warn if a comparison like 'x<=y<=z' appears; this is
4957     equivalent to '(x<=y ? 1 : 0) <= z', which is a different
4958     interpretation from that of ordinary mathematical notation.
4959
4960     Also warn for dangerous uses of the GNU extension to '?:' with
4961     omitted middle operand.  When the condition in the '?': operator is
4962     a boolean expression, the omitted value is always 1.  Often
4963     programmers expect it to be a value computed inside the conditional
4964     expression instead.
4965
4966     For C++ this also warns for some cases of unnecessary parentheses
4967     in declarations, which can indicate an attempt at a function call
4968     instead of a declaration:
4969          {
4970            // Declares a local variable called mymutex.
4971            std::unique_lock<std::mutex> (mymutex);
4972            // User meant std::unique_lock<std::mutex> lock (mymutex);
4973          }
4974
4975     This warning is enabled by '-Wall'.
4976
4977'-Wsequence-point'
4978     Warn about code that may have undefined semantics because of
4979     violations of sequence point rules in the C and C++ standards.
4980
4981     The C and C++ standards define the order in which expressions in a
4982     C/C++ program are evaluated in terms of "sequence points", which
4983     represent a partial ordering between the execution of parts of the
4984     program: those executed before the sequence point, and those
4985     executed after it.  These occur after the evaluation of a full
4986     expression (one which is not part of a larger expression), after
4987     the evaluation of the first operand of a '&&', '||', '? :' or ','
4988     (comma) operator, before a function is called (but after the
4989     evaluation of its arguments and the expression denoting the called
4990     function), and in certain other places.  Other than as expressed by
4991     the sequence point rules, the order of evaluation of subexpressions
4992     of an expression is not specified.  All these rules describe only a
4993     partial order rather than a total order, since, for example, if two
4994     functions are called within one expression with no sequence point
4995     between them, the order in which the functions are called is not
4996     specified.  However, the standards committee have ruled that
4997     function calls do not overlap.
4998
4999     It is not specified when between sequence points modifications to
5000     the values of objects take effect.  Programs whose behavior depends
5001     on this have undefined behavior; the C and C++ standards specify
5002     that "Between the previous and next sequence point an object shall
5003     have its stored value modified at most once by the evaluation of an
5004     expression.  Furthermore, the prior value shall be read only to
5005     determine the value to be stored.".  If a program breaks these
5006     rules, the results on any particular implementation are entirely
5007     unpredictable.
5008
5009     Examples of code with undefined behavior are 'a = a++;', 'a[n] =
5010     b[n++]' and 'a[i++] = i;'.  Some more complicated cases are not
5011     diagnosed by this option, and it may give an occasional false
5012     positive result, but in general it has been found fairly effective
5013     at detecting this sort of problem in programs.
5014
5015     The C++17 standard will define the order of evaluation of operands
5016     in more cases: in particular it requires that the right-hand side
5017     of an assignment be evaluated before the left-hand side, so the
5018     above examples are no longer undefined.  But this warning will
5019     still warn about them, to help people avoid writing code that is
5020     undefined in C and earlier revisions of C++.
5021
5022     The standard is worded confusingly, therefore there is some debate
5023     over the precise meaning of the sequence point rules in subtle
5024     cases.  Links to discussions of the problem, including proposed
5025     formal definitions, may be found on the GCC readings page, at
5026     <http://gcc.gnu.org/readings.html>.
5027
5028     This warning is enabled by '-Wall' for C and C++.
5029
5030'-Wno-return-local-addr'
5031     Do not warn about returning a pointer (or in C++, a reference) to a
5032     variable that goes out of scope after the function returns.
5033
5034'-Wreturn-type'
5035     Warn whenever a function is defined with a return type that
5036     defaults to 'int'.  Also warn about any 'return' statement with no
5037     return value in a function whose return type is not 'void' (falling
5038     off the end of the function body is considered returning without a
5039     value).
5040
5041     For C only, warn about a 'return' statement with an expression in a
5042     function whose return type is 'void', unless the expression type is
5043     also 'void'.  As a GNU extension, the latter case is accepted
5044     without a warning unless '-Wpedantic' is used.  Attempting to use
5045     the return value of a non-'void' function other than 'main' that
5046     flows off the end by reaching the closing curly brace that
5047     terminates the function is undefined.
5048
5049     Unlike in C, in C++, flowing off the end of a non-'void' function
5050     other than 'main' results in undefined behavior even when the value
5051     of the function is not used.
5052
5053     This warning is enabled by default in C++ and by '-Wall' otherwise.
5054
5055'-Wshift-count-negative'
5056     Warn if shift count is negative.  This warning is enabled by
5057     default.
5058
5059'-Wshift-count-overflow'
5060     Warn if shift count >= width of type.  This warning is enabled by
5061     default.
5062
5063'-Wshift-negative-value'
5064     Warn if left shifting a negative value.  This warning is enabled by
5065     '-Wextra' in C99 and C++11 modes (and newer).
5066
5067'-Wshift-overflow'
5068'-Wshift-overflow=N'
5069     Warn about left shift overflows.  This warning is enabled by
5070     default in C99 and C++11 modes (and newer).
5071
5072     '-Wshift-overflow=1'
5073          This is the warning level of '-Wshift-overflow' and is enabled
5074          by default in C99 and C++11 modes (and newer).  This warning
5075          level does not warn about left-shifting 1 into the sign bit.
5076          (However, in C, such an overflow is still rejected in contexts
5077          where an integer constant expression is required.)  No warning
5078          is emitted in C++2A mode (and newer), as signed left shifts
5079          always wrap.
5080
5081     '-Wshift-overflow=2'
5082          This warning level also warns about left-shifting 1 into the
5083          sign bit, unless C++14 mode (or newer) is active.
5084
5085'-Wswitch'
5086     Warn whenever a 'switch' statement has an index of enumerated type
5087     and lacks a 'case' for one or more of the named codes of that
5088     enumeration.  (The presence of a 'default' label prevents this
5089     warning.)  'case' labels outside the enumeration range also provoke
5090     warnings when this option is used (even if there is a 'default'
5091     label).  This warning is enabled by '-Wall'.
5092
5093'-Wswitch-default'
5094     Warn whenever a 'switch' statement does not have a 'default' case.
5095
5096'-Wswitch-enum'
5097     Warn whenever a 'switch' statement has an index of enumerated type
5098     and lacks a 'case' for one or more of the named codes of that
5099     enumeration.  'case' labels outside the enumeration range also
5100     provoke warnings when this option is used.  The only difference
5101     between '-Wswitch' and this option is that this option gives a
5102     warning about an omitted enumeration code even if there is a
5103     'default' label.
5104
5105'-Wswitch-bool'
5106     Warn whenever a 'switch' statement has an index of boolean type and
5107     the case values are outside the range of a boolean type.  It is
5108     possible to suppress this warning by casting the controlling
5109     expression to a type other than 'bool'.  For example:
5110          switch ((int) (a == 4))
5111            {
5112            ...
5113            }
5114     This warning is enabled by default for C and C++ programs.
5115
5116'-Wswitch-unreachable'
5117     Warn whenever a 'switch' statement contains statements between the
5118     controlling expression and the first case label, which will never
5119     be executed.  For example:
5120          switch (cond)
5121            {
5122             i = 15;
5123            ...
5124             case 5:
5125            ...
5126            }
5127     '-Wswitch-unreachable' does not warn if the statement between the
5128     controlling expression and the first case label is just a
5129     declaration:
5130          switch (cond)
5131            {
5132             int i;
5133            ...
5134             case 5:
5135             i = 5;
5136            ...
5137            }
5138     This warning is enabled by default for C and C++ programs.
5139
5140'-Wsync-nand (C and C++ only)'
5141     Warn when '__sync_fetch_and_nand' and '__sync_nand_and_fetch'
5142     built-in functions are used.  These functions changed semantics in
5143     GCC 4.4.
5144
5145'-Wunused-but-set-parameter'
5146     Warn whenever a function parameter is assigned to, but otherwise
5147     unused (aside from its declaration).
5148
5149     To suppress this warning use the 'unused' attribute (*note Variable
5150     Attributes::).
5151
5152     This warning is also enabled by '-Wunused' together with '-Wextra'.
5153
5154'-Wunused-but-set-variable'
5155     Warn whenever a local variable is assigned to, but otherwise unused
5156     (aside from its declaration).  This warning is enabled by '-Wall'.
5157
5158     To suppress this warning use the 'unused' attribute (*note Variable
5159     Attributes::).
5160
5161     This warning is also enabled by '-Wunused', which is enabled by
5162     '-Wall'.
5163
5164'-Wunused-function'
5165     Warn whenever a static function is declared but not defined or a
5166     non-inline static function is unused.  This warning is enabled by
5167     '-Wall'.
5168
5169'-Wunused-label'
5170     Warn whenever a label is declared but not used.  This warning is
5171     enabled by '-Wall'.
5172
5173     To suppress this warning use the 'unused' attribute (*note Variable
5174     Attributes::).
5175
5176'-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)'
5177     Warn when a typedef locally defined in a function is not used.
5178     This warning is enabled by '-Wall'.
5179
5180'-Wunused-parameter'
5181     Warn whenever a function parameter is unused aside from its
5182     declaration.
5183
5184     To suppress this warning use the 'unused' attribute (*note Variable
5185     Attributes::).
5186
5187'-Wno-unused-result'
5188     Do not warn if a caller of a function marked with attribute
5189     'warn_unused_result' (*note Function Attributes::) does not use its
5190     return value.  The default is '-Wunused-result'.
5191
5192'-Wunused-variable'
5193     Warn whenever a local or static variable is unused aside from its
5194     declaration.  This option implies '-Wunused-const-variable=1' for
5195     C, but not for C++.  This warning is enabled by '-Wall'.
5196
5197     To suppress this warning use the 'unused' attribute (*note Variable
5198     Attributes::).
5199
5200'-Wunused-const-variable'
5201'-Wunused-const-variable=N'
5202     Warn whenever a constant static variable is unused aside from its
5203     declaration.  '-Wunused-const-variable=1' is enabled by
5204     '-Wunused-variable' for C, but not for C++.  In C this declares
5205     variable storage, but in C++ this is not an error since const
5206     variables take the place of '#define's.
5207
5208     To suppress this warning use the 'unused' attribute (*note Variable
5209     Attributes::).
5210
5211     '-Wunused-const-variable=1'
5212          This is the warning level that is enabled by
5213          '-Wunused-variable' for C. It warns only about unused static
5214          const variables defined in the main compilation unit, but not
5215          about static const variables declared in any header included.
5216
5217     '-Wunused-const-variable=2'
5218          This warning level also warns for unused constant static
5219          variables in headers (excluding system headers).  This is the
5220          warning level of '-Wunused-const-variable' and must be
5221          explicitly requested since in C++ this isn't an error and in C
5222          it might be harder to clean up all headers included.
5223
5224'-Wunused-value'
5225     Warn whenever a statement computes a result that is explicitly not
5226     used.  To suppress this warning cast the unused expression to
5227     'void'.  This includes an expression-statement or the left-hand
5228     side of a comma expression that contains no side effects.  For
5229     example, an expression such as 'x[i,j]' causes a warning, while
5230     'x[(void)i,j]' does not.
5231
5232     This warning is enabled by '-Wall'.
5233
5234'-Wunused'
5235     All the above '-Wunused' options combined.
5236
5237     In order to get a warning about an unused function parameter, you
5238     must either specify '-Wextra -Wunused' (note that '-Wall' implies
5239     '-Wunused'), or separately specify '-Wunused-parameter'.
5240
5241'-Wuninitialized'
5242     Warn if an automatic variable is used without first being
5243     initialized or if a variable may be clobbered by a 'setjmp' call.
5244     In C++, warn if a non-static reference or non-static 'const' member
5245     appears in a class without constructors.
5246
5247     If you want to warn about code that uses the uninitialized value of
5248     the variable in its own initializer, use the '-Winit-self' option.
5249
5250     These warnings occur for individual uninitialized or clobbered
5251     elements of structure, union or array variables as well as for
5252     variables that are uninitialized or clobbered as a whole.  They do
5253     not occur for variables or elements declared 'volatile'.  Because
5254     these warnings depend on optimization, the exact variables or
5255     elements for which there are warnings depends on the precise
5256     optimization options and version of GCC used.
5257
5258     Note that there may be no warning about a variable that is used
5259     only to compute a value that itself is never used, because such
5260     computations may be deleted by data flow analysis before the
5261     warnings are printed.
5262
5263'-Winvalid-memory-model'
5264     Warn for invocations of *note __atomic Builtins::, *note __sync
5265     Builtins::, and the C11 atomic generic functions with a memory
5266     consistency argument that is either invalid for the operation or
5267     outside the range of values of the 'memory_order' enumeration.  For
5268     example, since the '__atomic_store' and '__atomic_store_n'
5269     built-ins are only defined for the relaxed, release, and
5270     sequentially consistent memory orders the following code is
5271     diagnosed:
5272
5273          void store (int *i)
5274          {
5275            __atomic_store_n (i, 0, memory_order_consume);
5276          }
5277
5278     '-Winvalid-memory-model' is enabled by default.
5279
5280'-Wmaybe-uninitialized'
5281     For an automatic (i.e. local) variable, if there exists a path from
5282     the function entry to a use of the variable that is initialized,
5283     but there exist some other paths for which the variable is not
5284     initialized, the compiler emits a warning if it cannot prove the
5285     uninitialized paths are not executed at run time.
5286
5287     These warnings are only possible in optimizing compilation, because
5288     otherwise GCC does not keep track of the state of variables.
5289
5290     These warnings are made optional because GCC may not be able to
5291     determine when the code is correct in spite of appearing to have an
5292     error.  Here is one example of how this can happen:
5293
5294          {
5295            int x;
5296            switch (y)
5297              {
5298              case 1: x = 1;
5299                break;
5300              case 2: x = 4;
5301                break;
5302              case 3: x = 5;
5303              }
5304            foo (x);
5305          }
5306
5307     If the value of 'y' is always 1, 2 or 3, then 'x' is always
5308     initialized, but GCC doesn't know this.  To suppress the warning,
5309     you need to provide a default case with assert(0) or similar code.
5310
5311     This option also warns when a non-volatile automatic variable might
5312     be changed by a call to 'longjmp'.  The compiler sees only the
5313     calls to 'setjmp'.  It cannot know where 'longjmp' will be called;
5314     in fact, a signal handler could call it at any point in the code.
5315     As a result, you may get a warning even when there is in fact no
5316     problem because 'longjmp' cannot in fact be called at the place
5317     that would cause a problem.
5318
5319     Some spurious warnings can be avoided if you declare all the
5320     functions you use that never return as 'noreturn'.  *Note Function
5321     Attributes::.
5322
5323     This warning is enabled by '-Wall' or '-Wextra'.
5324
5325'-Wunknown-pragmas'
5326     Warn when a '#pragma' directive is encountered that is not
5327     understood by GCC.  If this command-line option is used, warnings
5328     are even issued for unknown pragmas in system header files.  This
5329     is not the case if the warnings are only enabled by the '-Wall'
5330     command-line option.
5331
5332'-Wno-pragmas'
5333     Do not warn about misuses of pragmas, such as incorrect parameters,
5334     invalid syntax, or conflicts between pragmas.  See also
5335     '-Wunknown-pragmas'.
5336
5337'-Wno-prio-ctor-dtor'
5338     Do not warn if a priority from 0 to 100 is used for constructor or
5339     destructor.  The use of constructor and destructor attributes allow
5340     you to assign a priority to the constructor/destructor to control
5341     its order of execution before 'main' is called or after it returns.
5342     The priority values must be greater than 100 as the compiler
5343     reserves priority values between 0-100 for the implementation.
5344
5345'-Wstrict-aliasing'
5346     This option is only active when '-fstrict-aliasing' is active.  It
5347     warns about code that might break the strict aliasing rules that
5348     the compiler is using for optimization.  The warning does not catch
5349     all cases, but does attempt to catch the more common pitfalls.  It
5350     is included in '-Wall'.  It is equivalent to '-Wstrict-aliasing=3'
5351
5352'-Wstrict-aliasing=n'
5353     This option is only active when '-fstrict-aliasing' is active.  It
5354     warns about code that might break the strict aliasing rules that
5355     the compiler is using for optimization.  Higher levels correspond
5356     to higher accuracy (fewer false positives).  Higher levels also
5357     correspond to more effort, similar to the way '-O' works.
5358     '-Wstrict-aliasing' is equivalent to '-Wstrict-aliasing=3'.
5359
5360     Level 1: Most aggressive, quick, least accurate.  Possibly useful
5361     when higher levels do not warn but '-fstrict-aliasing' still breaks
5362     the code, as it has very few false negatives.  However, it has many
5363     false positives.  Warns for all pointer conversions between
5364     possibly incompatible types, even if never dereferenced.  Runs in
5365     the front end only.
5366
5367     Level 2: Aggressive, quick, not too precise.  May still have many
5368     false positives (not as many as level 1 though), and few false
5369     negatives (but possibly more than level 1).  Unlike level 1, it
5370     only warns when an address is taken.  Warns about incomplete types.
5371     Runs in the front end only.
5372
5373     Level 3 (default for '-Wstrict-aliasing'): Should have very few
5374     false positives and few false negatives.  Slightly slower than
5375     levels 1 or 2 when optimization is enabled.  Takes care of the
5376     common pun+dereference pattern in the front end:
5377     '*(int*)&some_float'.  If optimization is enabled, it also runs in
5378     the back end, where it deals with multiple statement cases using
5379     flow-sensitive points-to information.  Only warns when the
5380     converted pointer is dereferenced.  Does not warn about incomplete
5381     types.
5382
5383'-Wstrict-overflow'
5384'-Wstrict-overflow=N'
5385     This option is only active when signed overflow is undefined.  It
5386     warns about cases where the compiler optimizes based on the
5387     assumption that signed overflow does not occur.  Note that it does
5388     not warn about all cases where the code might overflow: it only
5389     warns about cases where the compiler implements some optimization.
5390     Thus this warning depends on the optimization level.
5391
5392     An optimization that assumes that signed overflow does not occur is
5393     perfectly safe if the values of the variables involved are such
5394     that overflow never does, in fact, occur.  Therefore this warning
5395     can easily give a false positive: a warning about code that is not
5396     actually a problem.  To help focus on important issues, several
5397     warning levels are defined.  No warnings are issued for the use of
5398     undefined signed overflow when estimating how many iterations a
5399     loop requires, in particular when determining whether a loop will
5400     be executed at all.
5401
5402     '-Wstrict-overflow=1'
5403          Warn about cases that are both questionable and easy to avoid.
5404          For example the compiler simplifies 'x + 1 > x' to '1'.  This
5405          level of '-Wstrict-overflow' is enabled by '-Wall'; higher
5406          levels are not, and must be explicitly requested.
5407
5408     '-Wstrict-overflow=2'
5409          Also warn about other cases where a comparison is simplified
5410          to a constant.  For example: 'abs (x) >= 0'.  This can only be
5411          simplified when signed integer overflow is undefined, because
5412          'abs (INT_MIN)' overflows to 'INT_MIN', which is less than
5413          zero.  '-Wstrict-overflow' (with no level) is the same as
5414          '-Wstrict-overflow=2'.
5415
5416     '-Wstrict-overflow=3'
5417          Also warn about other cases where a comparison is simplified.
5418          For example: 'x + 1 > 1' is simplified to 'x > 0'.
5419
5420     '-Wstrict-overflow=4'
5421          Also warn about other simplifications not covered by the above
5422          cases.  For example: '(x * 10) / 5' is simplified to 'x * 2'.
5423
5424     '-Wstrict-overflow=5'
5425          Also warn about cases where the compiler reduces the magnitude
5426          of a constant involved in a comparison.  For example: 'x + 2 >
5427          y' is simplified to 'x + 1 >= y'.  This is reported only at
5428          the highest warning level because this simplification applies
5429          to many comparisons, so this warning level gives a very large
5430          number of false positives.
5431
5432'-Wstringop-overflow'
5433'-Wstringop-overflow=TYPE'
5434     Warn for calls to string manipulation functions such as 'memcpy'
5435     and 'strcpy' that are determined to overflow the destination
5436     buffer.  The optional argument is one greater than the type of
5437     Object Size Checking to perform to determine the size of the
5438     destination.  *Note Object Size Checking::.  The argument is
5439     meaningful only for functions that operate on character arrays but
5440     not for raw memory functions like 'memcpy' which always make use of
5441     Object Size type-0.  The option also warns for calls that specify a
5442     size in excess of the largest possible object or at most 'SIZE_MAX
5443     / 2' bytes.  The option produces the best results with optimization
5444     enabled but can detect a small subset of simple buffer overflows
5445     even without optimization in calls to the GCC built-in functions
5446     like '__builtin_memcpy' that correspond to the standard functions.
5447     In any case, the option warns about just a subset of buffer
5448     overflows detected by the corresponding overflow checking
5449     built-ins.  For example, the option will issue a warning for the
5450     'strcpy' call below because it copies at least 5 characters (the
5451     string '"blue"' including the terminating NUL) into the buffer of
5452     size 4.
5453
5454          enum Color { blue, purple, yellow };
5455          const char* f (enum Color clr)
5456          {
5457            static char buf [4];
5458            const char *str;
5459            switch (clr)
5460              {
5461                case blue: str = "blue"; break;
5462                case purple: str = "purple"; break;
5463                case yellow: str = "yellow"; break;
5464              }
5465
5466            return strcpy (buf, str);   // warning here
5467          }
5468
5469     Option '-Wstringop-overflow=2' is enabled by default.
5470
5471     '-Wstringop-overflow'
5472     '-Wstringop-overflow=1'
5473          The '-Wstringop-overflow=1' option uses type-zero Object Size
5474          Checking to determine the sizes of destination objects.  This
5475          is the default setting of the option.  At this setting the
5476          option will not warn for writes past the end of subobjects of
5477          larger objects accessed by pointers unless the size of the
5478          largest surrounding object is known.  When the destination may
5479          be one of several objects it is assumed to be the largest one
5480          of them.  On Linux systems, when optimization is enabled at
5481          this setting the option warns for the same code as when the
5482          '_FORTIFY_SOURCE' macro is defined to a non-zero value.
5483
5484     '-Wstringop-overflow=2'
5485          The '-Wstringop-overflow=2' option uses type-one Object Size
5486          Checking to determine the sizes of destination objects.  At
5487          this setting the option will warn about overflows when writing
5488          to members of the largest complete objects whose exact size is
5489          known.  It will, however, not warn for excessive writes to the
5490          same members of unknown objects referenced by pointers since
5491          they may point to arrays containing unknown numbers of
5492          elements.
5493
5494     '-Wstringop-overflow=3'
5495          The '-Wstringop-overflow=3' option uses type-two Object Size
5496          Checking to determine the sizes of destination objects.  At
5497          this setting the option warns about overflowing the smallest
5498          object or data member.  This is the most restrictive setting
5499          of the option that may result in warnings for safe code.
5500
5501     '-Wstringop-overflow=4'
5502          The '-Wstringop-overflow=4' option uses type-three Object Size
5503          Checking to determine the sizes of destination objects.  At
5504          this setting the option will warn about overflowing any data
5505          members, and when the destination is one of several objects it
5506          uses the size of the largest of them to decide whether to
5507          issue a warning.  Similarly to '-Wstringop-overflow=3' this
5508          setting of the option may result in warnings for benign code.
5509
5510'-Wstringop-truncation'
5511     Warn for calls to bounded string manipulation functions such as
5512     'strncat', 'strncpy', and 'stpncpy' that may either truncate the
5513     copied string or leave the destination unchanged.
5514
5515     In the following example, the call to 'strncat' specifies a bound
5516     that is less than the length of the source string.  As a result,
5517     the copy of the source will be truncated and so the call is
5518     diagnosed.  To avoid the warning use 'bufsize - strlen (buf) - 1)'
5519     as the bound.
5520
5521          void append (char *buf, size_t bufsize)
5522          {
5523            strncat (buf, ".txt", 3);
5524          }
5525
5526     As another example, the following call to 'strncpy' results in
5527     copying to 'd' just the characters preceding the terminating NUL,
5528     without appending the NUL to the end.  Assuming the result of
5529     'strncpy' is necessarily a NUL-terminated string is a common
5530     mistake, and so the call is diagnosed.  To avoid the warning when
5531     the result is not expected to be NUL-terminated, call 'memcpy'
5532     instead.
5533
5534          void copy (char *d, const char *s)
5535          {
5536            strncpy (d, s, strlen (s));
5537          }
5538
5539     In the following example, the call to 'strncpy' specifies the size
5540     of the destination buffer as the bound.  If the length of the
5541     source string is equal to or greater than this size the result of
5542     the copy will not be NUL-terminated.  Therefore, the call is also
5543     diagnosed.  To avoid the warning, specify 'sizeof buf - 1' as the
5544     bound and set the last element of the buffer to 'NUL'.
5545
5546          void copy (const char *s)
5547          {
5548            char buf[80];
5549            strncpy (buf, s, sizeof buf);
5550            ...
5551          }
5552
5553     In situations where a character array is intended to store a
5554     sequence of bytes with no terminating 'NUL' such an array may be
5555     annotated with attribute 'nonstring' to avoid this warning.  Such
5556     arrays, however, are not suitable arguments to functions that
5557     expect 'NUL'-terminated strings.  To help detect accidental misuses
5558     of such arrays GCC issues warnings unless it can prove that the use
5559     is safe.  *Note Common Variable Attributes::.
5560
5561'-Wsuggest-attribute=[pure|const|noreturn|format|cold|malloc]'
5562     Warn for cases where adding an attribute may be beneficial.  The
5563     attributes currently supported are listed below.
5564
5565     '-Wsuggest-attribute=pure'
5566     '-Wsuggest-attribute=const'
5567     '-Wsuggest-attribute=noreturn'
5568     '-Wmissing-noreturn'
5569     '-Wsuggest-attribute=malloc'
5570
5571          Warn about functions that might be candidates for attributes
5572          'pure', 'const' or 'noreturn' or 'malloc'.  The compiler only
5573          warns for functions visible in other compilation units or (in
5574          the case of 'pure' and 'const') if it cannot prove that the
5575          function returns normally.  A function returns normally if it
5576          doesn't contain an infinite loop or return abnormally by
5577          throwing, calling 'abort' or trapping.  This analysis requires
5578          option '-fipa-pure-const', which is enabled by default at '-O'
5579          and higher.  Higher optimization levels improve the accuracy
5580          of the analysis.
5581
5582     '-Wsuggest-attribute=format'
5583     '-Wmissing-format-attribute'
5584
5585          Warn about function pointers that might be candidates for
5586          'format' attributes.  Note these are only possible candidates,
5587          not absolute ones.  GCC guesses that function pointers with
5588          'format' attributes that are used in assignment,
5589          initialization, parameter passing or return statements should
5590          have a corresponding 'format' attribute in the resulting type.
5591          I.e. the left-hand side of the assignment or initialization,
5592          the type of the parameter variable, or the return type of the
5593          containing function respectively should also have a 'format'
5594          attribute to avoid the warning.
5595
5596          GCC also warns about function definitions that might be
5597          candidates for 'format' attributes.  Again, these are only
5598          possible candidates.  GCC guesses that 'format' attributes
5599          might be appropriate for any function that calls a function
5600          like 'vprintf' or 'vscanf', but this might not always be the
5601          case, and some functions for which 'format' attributes are
5602          appropriate may not be detected.
5603
5604     '-Wsuggest-attribute=cold'
5605
5606          Warn about functions that might be candidates for 'cold'
5607          attribute.  This is based on static detection and generally
5608          will only warn about functions which always leads to a call to
5609          another 'cold' function such as wrappers of C++ 'throw' or
5610          fatal error reporting functions leading to 'abort'.
5611
5612'-Wsuggest-final-types'
5613     Warn about types with virtual methods where code quality would be
5614     improved if the type were declared with the C++11 'final'
5615     specifier, or, if possible, declared in an anonymous namespace.
5616     This allows GCC to more aggressively devirtualize the polymorphic
5617     calls.  This warning is more effective with link time optimization,
5618     where the information about the class hierarchy graph is more
5619     complete.
5620
5621'-Wsuggest-final-methods'
5622     Warn about virtual methods where code quality would be improved if
5623     the method were declared with the C++11 'final' specifier, or, if
5624     possible, its type were declared in an anonymous namespace or with
5625     the 'final' specifier.  This warning is more effective with
5626     link-time optimization, where the information about the class
5627     hierarchy graph is more complete.  It is recommended to first
5628     consider suggestions of '-Wsuggest-final-types' and then rebuild
5629     with new annotations.
5630
5631'-Wsuggest-override'
5632     Warn about overriding virtual functions that are not marked with
5633     the override keyword.
5634
5635'-Walloc-zero'
5636     Warn about calls to allocation functions decorated with attribute
5637     'alloc_size' that specify zero bytes, including those to the
5638     built-in forms of the functions 'aligned_alloc', 'alloca',
5639     'calloc', 'malloc', and 'realloc'.  Because the behavior of these
5640     functions when called with a zero size differs among
5641     implementations (and in the case of 'realloc' has been deprecated)
5642     relying on it may result in subtle portability bugs and should be
5643     avoided.
5644
5645'-Walloc-size-larger-than=BYTE-SIZE'
5646     Warn about calls to functions decorated with attribute 'alloc_size'
5647     that attempt to allocate objects larger than the specified number
5648     of bytes, or where the result of the size computation in an integer
5649     type with infinite precision would exceed the value of
5650     'PTRDIFF_MAX' on the target.
5651     '-Walloc-size-larger-than=''PTRDIFF_MAX' is enabled by default.
5652     Warnings controlled by the option can be disabled either by
5653     specifying BYTE-SIZE of 'SIZE_MAX' or more or by
5654     '-Wno-alloc-size-larger-than'.  *Note Function Attributes::.
5655
5656'-Wno-alloc-size-larger-than'
5657     Disable '-Walloc-size-larger-than=' warnings.  The option is
5658     equivalent to '-Walloc-size-larger-than=''SIZE_MAX' or larger.
5659
5660'-Walloca'
5661     This option warns on all uses of 'alloca' in the source.
5662
5663'-Walloca-larger-than=BYTE-SIZE'
5664     This option warns on calls to 'alloca' with an integer argument
5665     whose value is either zero, or that is not bounded by a controlling
5666     predicate that limits its value to at most BYTE-SIZE.  It also
5667     warns for calls to 'alloca' where the bound value is unknown.
5668     Arguments of non-integer types are considered unbounded even if
5669     they appear to be constrained to the expected range.
5670
5671     For example, a bounded case of 'alloca' could be:
5672
5673          void func (size_t n)
5674          {
5675            void *p;
5676            if (n <= 1000)
5677              p = alloca (n);
5678            else
5679              p = malloc (n);
5680            f (p);
5681          }
5682
5683     In the above example, passing '-Walloca-larger-than=1000' would not
5684     issue a warning because the call to 'alloca' is known to be at most
5685     1000 bytes.  However, if '-Walloca-larger-than=500' were passed,
5686     the compiler would emit a warning.
5687
5688     Unbounded uses, on the other hand, are uses of 'alloca' with no
5689     controlling predicate constraining its integer argument.  For
5690     example:
5691
5692          void func ()
5693          {
5694            void *p = alloca (n);
5695            f (p);
5696          }
5697
5698     If '-Walloca-larger-than=500' were passed, the above would trigger
5699     a warning, but this time because of the lack of bounds checking.
5700
5701     Note, that even seemingly correct code involving signed integers
5702     could cause a warning:
5703
5704          void func (signed int n)
5705          {
5706            if (n < 500)
5707              {
5708                p = alloca (n);
5709                f (p);
5710              }
5711          }
5712
5713     In the above example, N could be negative, causing a larger than
5714     expected argument to be implicitly cast into the 'alloca' call.
5715
5716     This option also warns when 'alloca' is used in a loop.
5717
5718     '-Walloca-larger-than=''PTRDIFF_MAX' is enabled by default but is
5719     usually only effective when '-ftree-vrp' is active (default for
5720     '-O2' and above).
5721
5722     See also '-Wvla-larger-than=''byte-size'.
5723
5724'-Wno-alloca-larger-than'
5725     Disable '-Walloca-larger-than=' warnings.  The option is equivalent
5726     to '-Walloca-larger-than=''SIZE_MAX' or larger.
5727
5728'-Warray-bounds'
5729'-Warray-bounds=N'
5730     This option is only active when '-ftree-vrp' is active (default for
5731     '-O2' and above).  It warns about subscripts to arrays that are
5732     always out of bounds.  This warning is enabled by '-Wall'.
5733
5734     '-Warray-bounds=1'
5735          This is the warning level of '-Warray-bounds' and is enabled
5736          by '-Wall'; higher levels are not, and must be explicitly
5737          requested.
5738
5739     '-Warray-bounds=2'
5740          This warning level also warns about out of bounds access for
5741          arrays at the end of a struct and for arrays accessed through
5742          pointers.  This warning level may give a larger number of
5743          false positives and is deactivated by default.
5744
5745'-Wattribute-alias=N'
5746'-Wno-attribute-alias'
5747     Warn about declarations using the 'alias' and similar attributes
5748     whose target is incompatible with the type of the alias.  *Note
5749     Declaring Attributes of Functions: Function Attributes.
5750
5751     '-Wattribute-alias=1'
5752          The default warning level of the '-Wattribute-alias' option
5753          diagnoses incompatibilities between the type of the alias
5754          declaration and that of its target.  Such incompatibilities
5755          are typically indicative of bugs.
5756
5757     '-Wattribute-alias=2'
5758
5759          At this level '-Wattribute-alias' also diagnoses cases where
5760          the attributes of the alias declaration are more restrictive
5761          than the attributes applied to its target.  These mismatches
5762          can potentially result in incorrect code generation.  In other
5763          cases they may be benign and could be resolved simply by
5764          adding the missing attribute to the target.  For comparison,
5765          see the '-Wmissing-attributes' option, which controls
5766          diagnostics when the alias declaration is less restrictive
5767          than the target, rather than more restrictive.
5768
5769          Attributes considered include 'alloc_align', 'alloc_size',
5770          'cold', 'const', 'hot', 'leaf', 'malloc', 'nonnull',
5771          'noreturn', 'nothrow', 'pure', 'returns_nonnull', and
5772          'returns_twice'.
5773
5774     '-Wattribute-alias' is equivalent to '-Wattribute-alias=1'.  This
5775     is the default.  You can disable these warnings with either
5776     '-Wno-attribute-alias' or '-Wattribute-alias=0'.
5777
5778'-Wbool-compare'
5779     Warn about boolean expression compared with an integer value
5780     different from 'true'/'false'.  For instance, the following
5781     comparison is always false:
5782          int n = 5;
5783          ...
5784          if ((n > 1) == 2) { ... }
5785     This warning is enabled by '-Wall'.
5786
5787'-Wbool-operation'
5788     Warn about suspicious operations on expressions of a boolean type.
5789     For instance, bitwise negation of a boolean is very likely a bug in
5790     the program.  For C, this warning also warns about incrementing or
5791     decrementing a boolean, which rarely makes sense.  (In C++,
5792     decrementing a boolean is always invalid.  Incrementing a boolean
5793     is invalid in C++17, and deprecated otherwise.)
5794
5795     This warning is enabled by '-Wall'.
5796
5797'-Wduplicated-branches'
5798     Warn when an if-else has identical branches.  This warning detects
5799     cases like
5800          if (p != NULL)
5801            return 0;
5802          else
5803            return 0;
5804     It doesn't warn when both branches contain just a null statement.
5805     This warning also warn for conditional operators:
5806            int i = x ? *p : *p;
5807
5808'-Wduplicated-cond'
5809     Warn about duplicated conditions in an if-else-if chain.  For
5810     instance, warn for the following code:
5811          if (p->q != NULL) { ... }
5812          else if (p->q != NULL) { ... }
5813
5814'-Wframe-address'
5815     Warn when the '__builtin_frame_address' or
5816     '__builtin_return_address' is called with an argument greater than
5817     0.  Such calls may return indeterminate values or crash the
5818     program.  The warning is included in '-Wall'.
5819
5820'-Wno-discarded-qualifiers (C and Objective-C only)'
5821     Do not warn if type qualifiers on pointers are being discarded.
5822     Typically, the compiler warns if a 'const char *' variable is
5823     passed to a function that takes a 'char *' parameter.  This option
5824     can be used to suppress such a warning.
5825
5826'-Wno-discarded-array-qualifiers (C and Objective-C only)'
5827     Do not warn if type qualifiers on arrays which are pointer targets
5828     are being discarded.  Typically, the compiler warns if a 'const int
5829     (*)[]' variable is passed to a function that takes a 'int (*)[]'
5830     parameter.  This option can be used to suppress such a warning.
5831
5832'-Wno-incompatible-pointer-types (C and Objective-C only)'
5833     Do not warn when there is a conversion between pointers that have
5834     incompatible types.  This warning is for cases not covered by
5835     '-Wno-pointer-sign', which warns for pointer argument passing or
5836     assignment with different signedness.
5837
5838'-Wno-int-conversion (C and Objective-C only)'
5839     Do not warn about incompatible integer to pointer and pointer to
5840     integer conversions.  This warning is about implicit conversions;
5841     for explicit conversions the warnings '-Wno-int-to-pointer-cast'
5842     and '-Wno-pointer-to-int-cast' may be used.
5843
5844'-Wno-div-by-zero'
5845     Do not warn about compile-time integer division by zero.
5846     Floating-point division by zero is not warned about, as it can be a
5847     legitimate way of obtaining infinities and NaNs.
5848
5849'-Wsystem-headers'
5850     Print warning messages for constructs found in system header files.
5851     Warnings from system headers are normally suppressed, on the
5852     assumption that they usually do not indicate real problems and
5853     would only make the compiler output harder to read.  Using this
5854     command-line option tells GCC to emit warnings from system headers
5855     as if they occurred in user code.  However, note that using '-Wall'
5856     in conjunction with this option does _not_ warn about unknown
5857     pragmas in system headers--for that, '-Wunknown-pragmas' must also
5858     be used.
5859
5860'-Wtautological-compare'
5861     Warn if a self-comparison always evaluates to true or false.  This
5862     warning detects various mistakes such as:
5863          int i = 1;
5864          ...
5865          if (i > i) { ... }
5866
5867     This warning also warns about bitwise comparisons that always
5868     evaluate to true or false, for instance:
5869          if ((a & 16) == 10) { ... }
5870     will always be false.
5871
5872     This warning is enabled by '-Wall'.
5873
5874'-Wtrampolines'
5875     Warn about trampolines generated for pointers to nested functions.
5876     A trampoline is a small piece of data or code that is created at
5877     run time on the stack when the address of a nested function is
5878     taken, and is used to call the nested function indirectly.  For
5879     some targets, it is made up of data only and thus requires no
5880     special treatment.  But, for most targets, it is made up of code
5881     and thus requires the stack to be made executable in order for the
5882     program to work properly.
5883
5884'-Wfloat-equal'
5885     Warn if floating-point values are used in equality comparisons.
5886
5887     The idea behind this is that sometimes it is convenient (for the
5888     programmer) to consider floating-point values as approximations to
5889     infinitely precise real numbers.  If you are doing this, then you
5890     need to compute (by analyzing the code, or in some other way) the
5891     maximum or likely maximum error that the computation introduces,
5892     and allow for it when performing comparisons (and when producing
5893     output, but that's a different problem).  In particular, instead of
5894     testing for equality, you should check to see whether the two
5895     values have ranges that overlap; and this is done with the
5896     relational operators, so equality comparisons are probably
5897     mistaken.
5898
5899'-Wtraditional (C and Objective-C only)'
5900     Warn about certain constructs that behave differently in
5901     traditional and ISO C.  Also warn about ISO C constructs that have
5902     no traditional C equivalent, and/or problematic constructs that
5903     should be avoided.
5904
5905        * Macro parameters that appear within string literals in the
5906          macro body.  In traditional C macro replacement takes place
5907          within string literals, but in ISO C it does not.
5908
5909        * In traditional C, some preprocessor directives did not exist.
5910          Traditional preprocessors only considered a line to be a
5911          directive if the '#' appeared in column 1 on the line.
5912          Therefore '-Wtraditional' warns about directives that
5913          traditional C understands but ignores because the '#' does not
5914          appear as the first character on the line.  It also suggests
5915          you hide directives like '#pragma' not understood by
5916          traditional C by indenting them.  Some traditional
5917          implementations do not recognize '#elif', so this option
5918          suggests avoiding it altogether.
5919
5920        * A function-like macro that appears without arguments.
5921
5922        * The unary plus operator.
5923
5924        * The 'U' integer constant suffix, or the 'F' or 'L'
5925          floating-point constant suffixes.  (Traditional C does support
5926          the 'L' suffix on integer constants.)  Note, these suffixes
5927          appear in macros defined in the system headers of most modern
5928          systems, e.g. the '_MIN'/'_MAX' macros in '<limits.h>'.  Use
5929          of these macros in user code might normally lead to spurious
5930          warnings, however GCC's integrated preprocessor has enough
5931          context to avoid warning in these cases.
5932
5933        * A function declared external in one block and then used after
5934          the end of the block.
5935
5936        * A 'switch' statement has an operand of type 'long'.
5937
5938        * A non-'static' function declaration follows a 'static' one.
5939          This construct is not accepted by some traditional C
5940          compilers.
5941
5942        * The ISO type of an integer constant has a different width or
5943          signedness from its traditional type.  This warning is only
5944          issued if the base of the constant is ten.  I.e. hexadecimal
5945          or octal values, which typically represent bit patterns, are
5946          not warned about.
5947
5948        * Usage of ISO string concatenation is detected.
5949
5950        * Initialization of automatic aggregates.
5951
5952        * Identifier conflicts with labels.  Traditional C lacks a
5953          separate namespace for labels.
5954
5955        * Initialization of unions.  If the initializer is zero, the
5956          warning is omitted.  This is done under the assumption that
5957          the zero initializer in user code appears conditioned on e.g.
5958          '__STDC__' to avoid missing initializer warnings and relies on
5959          default initialization to zero in the traditional C case.
5960
5961        * Conversions by prototypes between fixed/floating-point values
5962          and vice versa.  The absence of these prototypes when
5963          compiling with traditional C causes serious problems.  This is
5964          a subset of the possible conversion warnings; for the full set
5965          use '-Wtraditional-conversion'.
5966
5967        * Use of ISO C style function definitions.  This warning
5968          intentionally is _not_ issued for prototype declarations or
5969          variadic functions because these ISO C features appear in your
5970          code when using libiberty's traditional C compatibility
5971          macros, 'PARAMS' and 'VPARAMS'.  This warning is also bypassed
5972          for nested functions because that feature is already a GCC
5973          extension and thus not relevant to traditional C
5974          compatibility.
5975
5976'-Wtraditional-conversion (C and Objective-C only)'
5977     Warn if a prototype causes a type conversion that is different from
5978     what would happen to the same argument in the absence of a
5979     prototype.  This includes conversions of fixed point to floating
5980     and vice versa, and conversions changing the width or signedness of
5981     a fixed-point argument except when the same as the default
5982     promotion.
5983
5984'-Wdeclaration-after-statement (C and Objective-C only)'
5985     Warn when a declaration is found after a statement in a block.
5986     This construct, known from C++, was introduced with ISO C99 and is
5987     by default allowed in GCC.  It is not supported by ISO C90.  *Note
5988     Mixed Declarations::.
5989
5990'-Wshadow'
5991     Warn whenever a local variable or type declaration shadows another
5992     variable, parameter, type, class member (in C++), or instance
5993     variable (in Objective-C) or whenever a built-in function is
5994     shadowed.  Note that in C++, the compiler warns if a local variable
5995     shadows an explicit typedef, but not if it shadows a
5996     struct/class/enum.  Same as '-Wshadow=global'.
5997
5998'-Wno-shadow-ivar (Objective-C only)'
5999     Do not warn whenever a local variable shadows an instance variable
6000     in an Objective-C method.
6001
6002'-Wshadow=global'
6003     The default for '-Wshadow'.  Warns for any (global) shadowing.
6004
6005'-Wshadow=local'
6006     Warn when a local variable shadows another local variable or
6007     parameter.  This warning is enabled by '-Wshadow=global'.
6008
6009'-Wshadow=compatible-local'
6010     Warn when a local variable shadows another local variable or
6011     parameter whose type is compatible with that of the shadowing
6012     variable.  In C++, type compatibility here means the type of the
6013     shadowing variable can be converted to that of the shadowed
6014     variable.  The creation of this flag (in addition to
6015     '-Wshadow=local') is based on the idea that when a local variable
6016     shadows another one of incompatible type, it is most likely
6017     intentional, not a bug or typo, as shown in the following example:
6018
6019          for (SomeIterator i = SomeObj.begin(); i != SomeObj.end(); ++i)
6020          {
6021            for (int i = 0; i < N; ++i)
6022            {
6023              ...
6024            }
6025            ...
6026          }
6027
6028     Since the two variable 'i' in the example above have incompatible
6029     types, enabling only '-Wshadow=compatible-local' will not emit a
6030     warning.  Because their types are incompatible, if a programmer
6031     accidentally uses one in place of the other, type checking will
6032     catch that and emit an error or warning.  So not warning (about
6033     shadowing) in this case will not lead to undetected bugs.  Use of
6034     this flag instead of '-Wshadow=local' can possibly reduce the
6035     number of warnings triggered by intentional shadowing.
6036
6037     This warning is enabled by '-Wshadow=local'.
6038
6039'-Wlarger-than=BYTE-SIZE'
6040     Warn whenever an object is defined whose size exceeds BYTE-SIZE.
6041     '-Wlarger-than=''PTRDIFF_MAX' is enabled by default.  Warnings
6042     controlled by the option can be disabled either by specifying
6043     BYTE-SIZE of 'SIZE_MAX' or more or by '-Wno-larger-than'.
6044
6045'-Wno-larger-than'
6046     Disable '-Wlarger-than=' warnings.  The option is equivalent to
6047     '-Wlarger-than=''SIZE_MAX' or larger.
6048
6049'-Wframe-larger-than=BYTE-SIZE'
6050     Warn if the size of a function frame exceeds BYTE-SIZE.  The
6051     computation done to determine the stack frame size is approximate
6052     and not conservative.  The actual requirements may be somewhat
6053     greater than BYTE-SIZE even if you do not get a warning.  In
6054     addition, any space allocated via 'alloca', variable-length arrays,
6055     or related constructs is not included by the compiler when
6056     determining whether or not to issue a warning.
6057     '-Wframe-larger-than=''PTRDIFF_MAX' is enabled by default.
6058     Warnings controlled by the option can be disabled either by
6059     specifying BYTE-SIZE of 'SIZE_MAX' or more or by
6060     '-Wno-frame-larger-than'.
6061
6062'-Wno-frame-larger-than'
6063     Disable '-Wframe-larger-than=' warnings.  The option is equivalent
6064     to '-Wframe-larger-than=''SIZE_MAX' or larger.
6065
6066'-Wno-free-nonheap-object'
6067     Do not warn when attempting to free an object that was not
6068     allocated on the heap.
6069
6070'-Wstack-usage=BYTE-SIZE'
6071     Warn if the stack usage of a function might exceed BYTE-SIZE.  The
6072     computation done to determine the stack usage is conservative.  Any
6073     space allocated via 'alloca', variable-length arrays, or related
6074     constructs is included by the compiler when determining whether or
6075     not to issue a warning.
6076
6077     The message is in keeping with the output of '-fstack-usage'.
6078
6079        * If the stack usage is fully static but exceeds the specified
6080          amount, it's:
6081
6082                 warning: stack usage is 1120 bytes
6083        * If the stack usage is (partly) dynamic but bounded, it's:
6084
6085                 warning: stack usage might be 1648 bytes
6086        * If the stack usage is (partly) dynamic and not bounded, it's:
6087
6088                 warning: stack usage might be unbounded
6089
6090     '-Wstack-usage=''PTRDIFF_MAX' is enabled by default.  Warnings
6091     controlled by the option can be disabled either by specifying
6092     BYTE-SIZE of 'SIZE_MAX' or more or by '-Wno-stack-usage'.
6093
6094'-Wno-stack-usage'
6095     Disable '-Wstack-usage=' warnings.  The option is equivalent to
6096     '-Wstack-usage=''SIZE_MAX' or larger.
6097
6098'-Wunsafe-loop-optimizations'
6099     Warn if the loop cannot be optimized because the compiler cannot
6100     assume anything on the bounds of the loop indices.  With
6101     '-funsafe-loop-optimizations' warn if the compiler makes such
6102     assumptions.
6103
6104'-Wno-pedantic-ms-format (MinGW targets only)'
6105     When used in combination with '-Wformat' and '-pedantic' without
6106     GNU extensions, this option disables the warnings about non-ISO
6107     'printf' / 'scanf' format width specifiers 'I32', 'I64', and 'I'
6108     used on Windows targets, which depend on the MS runtime.
6109
6110'-Waligned-new'
6111     Warn about a new-expression of a type that requires greater
6112     alignment than the 'alignof(std::max_align_t)' but uses an
6113     allocation function without an explicit alignment parameter.  This
6114     option is enabled by '-Wall'.
6115
6116     Normally this only warns about global allocation functions, but
6117     '-Waligned-new=all' also warns about class member allocation
6118     functions.
6119
6120'-Wplacement-new'
6121'-Wplacement-new=N'
6122     Warn about placement new expressions with undefined behavior, such
6123     as constructing an object in a buffer that is smaller than the type
6124     of the object.  For example, the placement new expression below is
6125     diagnosed because it attempts to construct an array of 64 integers
6126     in a buffer only 64 bytes large.
6127          char buf [64];
6128          new (buf) int[64];
6129     This warning is enabled by default.
6130
6131     '-Wplacement-new=1'
6132          This is the default warning level of '-Wplacement-new'.  At
6133          this level the warning is not issued for some strictly
6134          undefined constructs that GCC allows as extensions for
6135          compatibility with legacy code.  For example, the following
6136          'new' expression is not diagnosed at this level even though it
6137          has undefined behavior according to the C++ standard because
6138          it writes past the end of the one-element array.
6139               struct S { int n, a[1]; };
6140               S *s = (S *)malloc (sizeof *s + 31 * sizeof s->a[0]);
6141               new (s->a)int [32]();
6142
6143     '-Wplacement-new=2'
6144          At this level, in addition to diagnosing all the same
6145          constructs as at level 1, a diagnostic is also issued for
6146          placement new expressions that construct an object in the last
6147          member of structure whose type is an array of a single element
6148          and whose size is less than the size of the object being
6149          constructed.  While the previous example would be diagnosed,
6150          the following construct makes use of the flexible member array
6151          extension to avoid the warning at level 2.
6152               struct S { int n, a[]; };
6153               S *s = (S *)malloc (sizeof *s + 32 * sizeof s->a[0]);
6154               new (s->a)int [32]();
6155
6156'-Wpointer-arith'
6157     Warn about anything that depends on the "size of" a function type
6158     or of 'void'.  GNU C assigns these types a size of 1, for
6159     convenience in calculations with 'void *' pointers and pointers to
6160     functions.  In C++, warn also when an arithmetic operation involves
6161     'NULL'.  This warning is also enabled by '-Wpedantic'.
6162
6163'-Wpointer-compare'
6164     Warn if a pointer is compared with a zero character constant.  This
6165     usually means that the pointer was meant to be dereferenced.  For
6166     example:
6167
6168          const char *p = foo ();
6169          if (p == '\0')
6170            return 42;
6171
6172     Note that the code above is invalid in C++11.
6173
6174     This warning is enabled by default.
6175
6176'-Wtype-limits'
6177     Warn if a comparison is always true or always false due to the
6178     limited range of the data type, but do not warn for constant
6179     expressions.  For example, warn if an unsigned variable is compared
6180     against zero with '<' or '>='.  This warning is also enabled by
6181     '-Wextra'.
6182
6183'-Wabsolute-value (C and Objective-C only)'
6184     Warn for calls to standard functions that compute the absolute
6185     value of an argument when a more appropriate standard function is
6186     available.  For example, calling 'abs(3.14)' triggers the warning
6187     because the appropriate function to call to compute the absolute
6188     value of a double argument is 'fabs'.  The option also triggers
6189     warnings when the argument in a call to such a function has an
6190     unsigned type.  This warning can be suppressed with an explicit
6191     type cast and it is also enabled by '-Wextra'.
6192
6193'-Wcomment'
6194'-Wcomments'
6195     Warn whenever a comment-start sequence '/*' appears in a '/*'
6196     comment, or whenever a backslash-newline appears in a '//' comment.
6197     This warning is enabled by '-Wall'.
6198
6199'-Wtrigraphs'
6200     Warn if any trigraphs are encountered that might change the meaning
6201     of the program.  Trigraphs within comments are not warned about,
6202     except those that would form escaped newlines.
6203
6204     This option is implied by '-Wall'.  If '-Wall' is not given, this
6205     option is still enabled unless trigraphs are enabled.  To get
6206     trigraph conversion without warnings, but get the other '-Wall'
6207     warnings, use '-trigraphs -Wall -Wno-trigraphs'.
6208
6209'-Wundef'
6210     Warn if an undefined identifier is evaluated in an '#if' directive.
6211     Such identifiers are replaced with zero.
6212
6213'-Wexpansion-to-defined'
6214     Warn whenever 'defined' is encountered in the expansion of a macro
6215     (including the case where the macro is expanded by an '#if'
6216     directive).  Such usage is not portable.  This warning is also
6217     enabled by '-Wpedantic' and '-Wextra'.
6218
6219'-Wunused-macros'
6220     Warn about macros defined in the main file that are unused.  A
6221     macro is "used" if it is expanded or tested for existence at least
6222     once.  The preprocessor also warns if the macro has not been used
6223     at the time it is redefined or undefined.
6224
6225     Built-in macros, macros defined on the command line, and macros
6226     defined in include files are not warned about.
6227
6228     _Note:_ If a macro is actually used, but only used in skipped
6229     conditional blocks, then the preprocessor reports it as unused.  To
6230     avoid the warning in such a case, you might improve the scope of
6231     the macro's definition by, for example, moving it into the first
6232     skipped block.  Alternatively, you could provide a dummy use with
6233     something like:
6234
6235          #if defined the_macro_causing_the_warning
6236          #endif
6237
6238'-Wno-endif-labels'
6239     Do not warn whenever an '#else' or an '#endif' are followed by
6240     text.  This sometimes happens in older programs with code of the
6241     form
6242
6243          #if FOO
6244          ...
6245          #else FOO
6246          ...
6247          #endif FOO
6248
6249     The second and third 'FOO' should be in comments.  This warning is
6250     on by default.
6251
6252'-Wbad-function-cast (C and Objective-C only)'
6253     Warn when a function call is cast to a non-matching type.  For
6254     example, warn if a call to a function returning an integer type is
6255     cast to a pointer type.
6256
6257'-Wc90-c99-compat (C and Objective-C only)'
6258     Warn about features not present in ISO C90, but present in ISO C99.
6259     For instance, warn about use of variable length arrays, 'long long'
6260     type, 'bool' type, compound literals, designated initializers, and
6261     so on.  This option is independent of the standards mode.  Warnings
6262     are disabled in the expression that follows '__extension__'.
6263
6264'-Wc99-c11-compat (C and Objective-C only)'
6265     Warn about features not present in ISO C99, but present in ISO C11.
6266     For instance, warn about use of anonymous structures and unions,
6267     '_Atomic' type qualifier, '_Thread_local' storage-class specifier,
6268     '_Alignas' specifier, 'Alignof' operator, '_Generic' keyword, and
6269     so on.  This option is independent of the standards mode.  Warnings
6270     are disabled in the expression that follows '__extension__'.
6271
6272'-Wc11-c2x-compat (C and Objective-C only)'
6273     Warn about features not present in ISO C11, but present in ISO C2X.
6274     For instance, warn about omitting the string in '_Static_assert'.
6275     This option is independent of the standards mode.  Warnings are
6276     disabled in the expression that follows '__extension__'.
6277
6278'-Wc++-compat (C and Objective-C only)'
6279     Warn about ISO C constructs that are outside of the common subset
6280     of ISO C and ISO C++, e.g. request for implicit conversion from
6281     'void *' to a pointer to non-'void' type.
6282
6283'-Wc++11-compat (C++ and Objective-C++ only)'
6284     Warn about C++ constructs whose meaning differs between ISO C++
6285     1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
6286     keywords in ISO C++ 2011.  This warning turns on '-Wnarrowing' and
6287     is enabled by '-Wall'.
6288
6289'-Wc++14-compat (C++ and Objective-C++ only)'
6290     Warn about C++ constructs whose meaning differs between ISO C++
6291     2011 and ISO C++ 2014.  This warning is enabled by '-Wall'.
6292
6293'-Wc++17-compat (C++ and Objective-C++ only)'
6294     Warn about C++ constructs whose meaning differs between ISO C++
6295     2014 and ISO C++ 2017.  This warning is enabled by '-Wall'.
6296
6297'-Wcast-qual'
6298     Warn whenever a pointer is cast so as to remove a type qualifier
6299     from the target type.  For example, warn if a 'const char *' is
6300     cast to an ordinary 'char *'.
6301
6302     Also warn when making a cast that introduces a type qualifier in an
6303     unsafe way.  For example, casting 'char **' to 'const char **' is
6304     unsafe, as in this example:
6305
6306            /* p is char ** value.  */
6307            const char **q = (const char **) p;
6308            /* Assignment of readonly string to const char * is OK.  */
6309            *q = "string";
6310            /* Now char** pointer points to read-only memory.  */
6311            **p = 'b';
6312
6313'-Wcast-align'
6314     Warn whenever a pointer is cast such that the required alignment of
6315     the target is increased.  For example, warn if a 'char *' is cast
6316     to an 'int *' on machines where integers can only be accessed at
6317     two- or four-byte boundaries.
6318
6319'-Wcast-align=strict'
6320     Warn whenever a pointer is cast such that the required alignment of
6321     the target is increased.  For example, warn if a 'char *' is cast
6322     to an 'int *' regardless of the target machine.
6323
6324'-Wcast-function-type'
6325     Warn when a function pointer is cast to an incompatible function
6326     pointer.  In a cast involving function types with a variable
6327     argument list only the types of initial arguments that are provided
6328     are considered.  Any parameter of pointer-type matches any other
6329     pointer-type.  Any benign differences in integral types are
6330     ignored, like 'int' vs. 'long' on ILP32 targets.  Likewise type
6331     qualifiers are ignored.  The function type 'void (*) (void)' is
6332     special and matches everything, which can be used to suppress this
6333     warning.  In a cast involving pointer to member types this warning
6334     warns whenever the type cast is changing the pointer to member
6335     type.  This warning is enabled by '-Wextra'.
6336
6337'-Wwrite-strings'
6338     When compiling C, give string constants the type 'const
6339     char[LENGTH]' so that copying the address of one into a non-'const'
6340     'char *' pointer produces a warning.  These warnings help you find
6341     at compile time code that can try to write into a string constant,
6342     but only if you have been very careful about using 'const' in
6343     declarations and prototypes.  Otherwise, it is just a nuisance.
6344     This is why we did not make '-Wall' request these warnings.
6345
6346     When compiling C++, warn about the deprecated conversion from
6347     string literals to 'char *'.  This warning is enabled by default
6348     for C++ programs.
6349
6350'-Wcatch-value'
6351'-Wcatch-value=N (C++ and Objective-C++ only)'
6352     Warn about catch handlers that do not catch via reference.  With
6353     '-Wcatch-value=1' (or '-Wcatch-value' for short) warn about
6354     polymorphic class types that are caught by value.  With
6355     '-Wcatch-value=2' warn about all class types that are caught by
6356     value.  With '-Wcatch-value=3' warn about all types that are not
6357     caught by reference.  '-Wcatch-value' is enabled by '-Wall'.
6358
6359'-Wclobbered'
6360     Warn for variables that might be changed by 'longjmp' or 'vfork'.
6361     This warning is also enabled by '-Wextra'.
6362
6363'-Wconditionally-supported (C++ and Objective-C++ only)'
6364     Warn for conditionally-supported (C++11 [intro.defs]) constructs.
6365
6366'-Wconversion'
6367     Warn for implicit conversions that may alter a value.  This
6368     includes conversions between real and integer, like 'abs (x)' when
6369     'x' is 'double'; conversions between signed and unsigned, like
6370     'unsigned ui = -1'; and conversions to smaller types, like 'sqrtf
6371     (M_PI)'.  Do not warn for explicit casts like 'abs ((int) x)' and
6372     'ui = (unsigned) -1', or if the value is not changed by the
6373     conversion like in 'abs (2.0)'.  Warnings about conversions between
6374     signed and unsigned integers can be disabled by using
6375     '-Wno-sign-conversion'.
6376
6377     For C++, also warn for confusing overload resolution for
6378     user-defined conversions; and conversions that never use a type
6379     conversion operator: conversions to 'void', the same type, a base
6380     class or a reference to them.  Warnings about conversions between
6381     signed and unsigned integers are disabled by default in C++ unless
6382     '-Wsign-conversion' is explicitly enabled.
6383
6384'-Wno-conversion-null (C++ and Objective-C++ only)'
6385     Do not warn for conversions between 'NULL' and non-pointer types.
6386     '-Wconversion-null' is enabled by default.
6387
6388'-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)'
6389     Warn when a literal '0' is used as null pointer constant.  This can
6390     be useful to facilitate the conversion to 'nullptr' in C++11.
6391
6392'-Wsubobject-linkage (C++ and Objective-C++ only)'
6393     Warn if a class type has a base or a field whose type uses the
6394     anonymous namespace or depends on a type with no linkage.  If a
6395     type A depends on a type B with no or internal linkage, defining it
6396     in multiple translation units would be an ODR violation because the
6397     meaning of B is different in each translation unit.  If A only
6398     appears in a single translation unit, the best way to silence the
6399     warning is to give it internal linkage by putting it in an
6400     anonymous namespace as well.  The compiler doesn't give this
6401     warning for types defined in the main .C file, as those are
6402     unlikely to have multiple definitions.  '-Wsubobject-linkage' is
6403     enabled by default.
6404
6405'-Wdangling-else'
6406     Warn about constructions where there may be confusion to which 'if'
6407     statement an 'else' branch belongs.  Here is an example of such a
6408     case:
6409
6410          {
6411            if (a)
6412              if (b)
6413                foo ();
6414            else
6415              bar ();
6416          }
6417
6418     In C/C++, every 'else' branch belongs to the innermost possible
6419     'if' statement, which in this example is 'if (b)'.  This is often
6420     not what the programmer expected, as illustrated in the above
6421     example by indentation the programmer chose.  When there is the
6422     potential for this confusion, GCC issues a warning when this flag
6423     is specified.  To eliminate the warning, add explicit braces around
6424     the innermost 'if' statement so there is no way the 'else' can
6425     belong to the enclosing 'if'.  The resulting code looks like this:
6426
6427          {
6428            if (a)
6429              {
6430                if (b)
6431                  foo ();
6432                else
6433                  bar ();
6434              }
6435          }
6436
6437     This warning is enabled by '-Wparentheses'.
6438
6439'-Wdate-time'
6440     Warn when macros '__TIME__', '__DATE__' or '__TIMESTAMP__' are
6441     encountered as they might prevent bit-wise-identical reproducible
6442     compilations.
6443
6444'-Wdelete-incomplete (C++ and Objective-C++ only)'
6445     Warn when deleting a pointer to incomplete type, which may cause
6446     undefined behavior at runtime.  This warning is enabled by default.
6447
6448'-Wuseless-cast (C++ and Objective-C++ only)'
6449     Warn when an expression is casted to its own type.
6450
6451'-Wempty-body'
6452     Warn if an empty body occurs in an 'if', 'else' or 'do while'
6453     statement.  This warning is also enabled by '-Wextra'.
6454
6455'-Wenum-compare'
6456     Warn about a comparison between values of different enumerated
6457     types.  In C++ enumerated type mismatches in conditional
6458     expressions are also diagnosed and the warning is enabled by
6459     default.  In C this warning is enabled by '-Wall'.
6460
6461'-Wextra-semi (C++, Objective-C++ only)'
6462     Warn about redundant semicolon after in-class function definition.
6463
6464'-Wjump-misses-init (C, Objective-C only)'
6465     Warn if a 'goto' statement or a 'switch' statement jumps forward
6466     across the initialization of a variable, or jumps backward to a
6467     label after the variable has been initialized.  This only warns
6468     about variables that are initialized when they are declared.  This
6469     warning is only supported for C and Objective-C; in C++ this sort
6470     of branch is an error in any case.
6471
6472     '-Wjump-misses-init' is included in '-Wc++-compat'.  It can be
6473     disabled with the '-Wno-jump-misses-init' option.
6474
6475'-Wsign-compare'
6476     Warn when a comparison between signed and unsigned values could
6477     produce an incorrect result when the signed value is converted to
6478     unsigned.  In C++, this warning is also enabled by '-Wall'.  In C,
6479     it is also enabled by '-Wextra'.
6480
6481'-Wsign-conversion'
6482     Warn for implicit conversions that may change the sign of an
6483     integer value, like assigning a signed integer expression to an
6484     unsigned integer variable.  An explicit cast silences the warning.
6485     In C, this option is enabled also by '-Wconversion'.
6486
6487'-Wfloat-conversion'
6488     Warn for implicit conversions that reduce the precision of a real
6489     value.  This includes conversions from real to integer, and from
6490     higher precision real to lower precision real values.  This option
6491     is also enabled by '-Wconversion'.
6492
6493'-Wno-scalar-storage-order'
6494     Do not warn on suspicious constructs involving reverse scalar
6495     storage order.
6496
6497'-Wsized-deallocation (C++ and Objective-C++ only)'
6498     Warn about a definition of an unsized deallocation function
6499          void operator delete (void *) noexcept;
6500          void operator delete[] (void *) noexcept;
6501     without a definition of the corresponding sized deallocation
6502     function
6503          void operator delete (void *, std::size_t) noexcept;
6504          void operator delete[] (void *, std::size_t) noexcept;
6505     or vice versa.  Enabled by '-Wextra' along with
6506     '-fsized-deallocation'.
6507
6508'-Wsizeof-pointer-div'
6509     Warn for suspicious divisions of two sizeof expressions that divide
6510     the pointer size by the element size, which is the usual way to
6511     compute the array size but won't work out correctly with pointers.
6512     This warning warns e.g. about 'sizeof (ptr) / sizeof (ptr[0])' if
6513     'ptr' is not an array, but a pointer.  This warning is enabled by
6514     '-Wall'.
6515
6516'-Wsizeof-pointer-memaccess'
6517     Warn for suspicious length parameters to certain string and memory
6518     built-in functions if the argument uses 'sizeof'.  This warning
6519     triggers for example for 'memset (ptr, 0, sizeof (ptr));' if 'ptr'
6520     is not an array, but a pointer, and suggests a possible fix, or
6521     about 'memcpy (&foo, ptr, sizeof (&foo));'.
6522     '-Wsizeof-pointer-memaccess' also warns about calls to bounded
6523     string copy functions like 'strncat' or 'strncpy' that specify as
6524     the bound a 'sizeof' expression of the source array.  For example,
6525     in the following function the call to 'strncat' specifies the size
6526     of the source string as the bound.  That is almost certainly a
6527     mistake and so the call is diagnosed.
6528          void make_file (const char *name)
6529          {
6530            char path[PATH_MAX];
6531            strncpy (path, name, sizeof path - 1);
6532            strncat (path, ".text", sizeof ".text");
6533            ...
6534          }
6535
6536     The '-Wsizeof-pointer-memaccess' option is enabled by '-Wall'.
6537
6538'-Wsizeof-array-argument'
6539     Warn when the 'sizeof' operator is applied to a parameter that is
6540     declared as an array in a function definition.  This warning is
6541     enabled by default for C and C++ programs.
6542
6543'-Wmemset-elt-size'
6544     Warn for suspicious calls to the 'memset' built-in function, if the
6545     first argument references an array, and the third argument is a
6546     number equal to the number of elements, but not equal to the size
6547     of the array in memory.  This indicates that the user has omitted a
6548     multiplication by the element size.  This warning is enabled by
6549     '-Wall'.
6550
6551'-Wmemset-transposed-args'
6552     Warn for suspicious calls to the 'memset' built-in function where
6553     the second argument is not zero and the third argument is zero.
6554     For example, the call 'memset (buf, sizeof buf, 0)' is diagnosed
6555     because 'memset (buf, 0, sizeof buf)' was meant instead.  The
6556     diagnostic is only emitted if the third argument is a literal zero.
6557     Otherwise, if it is an expression that is folded to zero, or a cast
6558     of zero to some type, it is far less likely that the arguments have
6559     been mistakenly transposed and no warning is emitted.  This warning
6560     is enabled by '-Wall'.
6561
6562'-Waddress'
6563     Warn about suspicious uses of memory addresses.  These include
6564     using the address of a function in a conditional expression, such
6565     as 'void func(void); if (func)', and comparisons against the memory
6566     address of a string literal, such as 'if (x == "abc")'.  Such uses
6567     typically indicate a programmer error: the address of a function
6568     always evaluates to true, so their use in a conditional usually
6569     indicate that the programmer forgot the parentheses in a function
6570     call; and comparisons against string literals result in unspecified
6571     behavior and are not portable in C, so they usually indicate that
6572     the programmer intended to use 'strcmp'.  This warning is enabled
6573     by '-Wall'.
6574
6575'-Waddress-of-packed-member'
6576     Warn when the address of packed member of struct or union is taken,
6577     which usually results in an unaligned pointer value.  This is
6578     enabled by default.
6579
6580'-Wlogical-op'
6581     Warn about suspicious uses of logical operators in expressions.
6582     This includes using logical operators in contexts where a bit-wise
6583     operator is likely to be expected.  Also warns when the operands of
6584     a logical operator are the same:
6585          extern int a;
6586          if (a < 0 && a < 0) { ... }
6587
6588'-Wlogical-not-parentheses'
6589     Warn about logical not used on the left hand side operand of a
6590     comparison.  This option does not warn if the right operand is
6591     considered to be a boolean expression.  Its purpose is to detect
6592     suspicious code like the following:
6593          int a;
6594          ...
6595          if (!a > 1) { ... }
6596
6597     It is possible to suppress the warning by wrapping the LHS into
6598     parentheses:
6599          if ((!a) > 1) { ... }
6600
6601     This warning is enabled by '-Wall'.
6602
6603'-Waggregate-return'
6604     Warn if any functions that return structures or unions are defined
6605     or called.  (In languages where you can return an array, this also
6606     elicits a warning.)
6607
6608'-Wno-aggressive-loop-optimizations'
6609     Warn if in a loop with constant number of iterations the compiler
6610     detects undefined behavior in some statement during one or more of
6611     the iterations.
6612
6613'-Wno-attributes'
6614     Do not warn if an unexpected '__attribute__' is used, such as
6615     unrecognized attributes, function attributes applied to variables,
6616     etc.  This does not stop errors for incorrect use of supported
6617     attributes.
6618
6619'-Wno-builtin-declaration-mismatch'
6620     Warn if a built-in function is declared with an incompatible
6621     signature or as a non-function, or when a built-in function
6622     declared with a type that does not include a prototype is called
6623     with arguments whose promoted types do not match those expected by
6624     the function.  When '-Wextra' is specified, also warn when a
6625     built-in function that takes arguments is declared without a
6626     prototype.  The '-Wno-builtin-declaration-mismatch' warning is
6627     enabled by default.  To avoid the warning include the appropriate
6628     header to bring the prototypes of built-in functions into scope.
6629
6630     For example, the call to 'memset' below is diagnosed by the warning
6631     because the function expects a value of type 'size_t' as its
6632     argument but the type of '32' is 'int'.  With '-Wextra', the
6633     declaration of the function is diagnosed as well.
6634          extern void* memset ();
6635          void f (void *d)
6636          {
6637            memset (d, '\0', 32);
6638          }
6639
6640'-Wno-builtin-macro-redefined'
6641     Do not warn if certain built-in macros are redefined.  This
6642     suppresses warnings for redefinition of '__TIMESTAMP__',
6643     '__TIME__', '__DATE__', '__FILE__', and '__BASE_FILE__'.
6644
6645'-Wstrict-prototypes (C and Objective-C only)'
6646     Warn if a function is declared or defined without specifying the
6647     argument types.  (An old-style function definition is permitted
6648     without a warning if preceded by a declaration that specifies the
6649     argument types.)
6650
6651'-Wold-style-declaration (C and Objective-C only)'
6652     Warn for obsolescent usages, according to the C Standard, in a
6653     declaration.  For example, warn if storage-class specifiers like
6654     'static' are not the first things in a declaration.  This warning
6655     is also enabled by '-Wextra'.
6656
6657'-Wold-style-definition (C and Objective-C only)'
6658     Warn if an old-style function definition is used.  A warning is
6659     given even if there is a previous prototype.
6660
6661'-Wmissing-parameter-type (C and Objective-C only)'
6662     A function parameter is declared without a type specifier in
6663     K&R-style functions:
6664
6665          void foo(bar) { }
6666
6667     This warning is also enabled by '-Wextra'.
6668
6669'-Wmissing-prototypes (C and Objective-C only)'
6670     Warn if a global function is defined without a previous prototype
6671     declaration.  This warning is issued even if the definition itself
6672     provides a prototype.  Use this option to detect global functions
6673     that do not have a matching prototype declaration in a header file.
6674     This option is not valid for C++ because all function declarations
6675     provide prototypes and a non-matching declaration declares an
6676     overload rather than conflict with an earlier declaration.  Use
6677     '-Wmissing-declarations' to detect missing declarations in C++.
6678
6679'-Wmissing-declarations'
6680     Warn if a global function is defined without a previous
6681     declaration.  Do so even if the definition itself provides a
6682     prototype.  Use this option to detect global functions that are not
6683     declared in header files.  In C, no warnings are issued for
6684     functions with previous non-prototype declarations; use
6685     '-Wmissing-prototypes' to detect missing prototypes.  In C++, no
6686     warnings are issued for function templates, or for inline
6687     functions, or for functions in anonymous namespaces.
6688
6689'-Wmissing-field-initializers'
6690     Warn if a structure's initializer has some fields missing.  For
6691     example, the following code causes such a warning, because 'x.h' is
6692     implicitly zero:
6693
6694          struct s { int f, g, h; };
6695          struct s x = { 3, 4 };
6696
6697     This option does not warn about designated initializers, so the
6698     following modification does not trigger a warning:
6699
6700          struct s { int f, g, h; };
6701          struct s x = { .f = 3, .g = 4 };
6702
6703     In C this option does not warn about the universal zero initializer
6704     '{ 0 }':
6705
6706          struct s { int f, g, h; };
6707          struct s x = { 0 };
6708
6709     Likewise, in C++ this option does not warn about the empty { }
6710     initializer, for example:
6711
6712          struct s { int f, g, h; };
6713          s x = { };
6714
6715     This warning is included in '-Wextra'.  To get other '-Wextra'
6716     warnings without this one, use '-Wextra
6717     -Wno-missing-field-initializers'.
6718
6719'-Wno-multichar'
6720     Do not warn if a multicharacter constant (''FOOF'') is used.
6721     Usually they indicate a typo in the user's code, as they have
6722     implementation-defined values, and should not be used in portable
6723     code.
6724
6725'-Wnormalized=[none|id|nfc|nfkc]'
6726     In ISO C and ISO C++, two identifiers are different if they are
6727     different sequences of characters.  However, sometimes when
6728     characters outside the basic ASCII character set are used, you can
6729     have two different character sequences that look the same.  To
6730     avoid confusion, the ISO 10646 standard sets out some
6731     "normalization rules" which when applied ensure that two sequences
6732     that look the same are turned into the same sequence.  GCC can warn
6733     you if you are using identifiers that have not been normalized;
6734     this option controls that warning.
6735
6736     There are four levels of warning supported by GCC.  The default is
6737     '-Wnormalized=nfc', which warns about any identifier that is not in
6738     the ISO 10646 "C" normalized form, "NFC". NFC is the recommended
6739     form for most uses.  It is equivalent to '-Wnormalized'.
6740
6741     Unfortunately, there are some characters allowed in identifiers by
6742     ISO C and ISO C++ that, when turned into NFC, are not allowed in
6743     identifiers.  That is, there's no way to use these symbols in
6744     portable ISO C or C++ and have all your identifiers in NFC.
6745     '-Wnormalized=id' suppresses the warning for these characters.  It
6746     is hoped that future versions of the standards involved will
6747     correct this, which is why this option is not the default.
6748
6749     You can switch the warning off for all characters by writing
6750     '-Wnormalized=none' or '-Wno-normalized'.  You should only do this
6751     if you are using some other normalization scheme (like "D"),
6752     because otherwise you can easily create bugs that are literally
6753     impossible to see.
6754
6755     Some characters in ISO 10646 have distinct meanings but look
6756     identical in some fonts or display methodologies, especially once
6757     formatting has been applied.  For instance '\u207F', "SUPERSCRIPT
6758     LATIN SMALL LETTER N", displays just like a regular 'n' that has
6759     been placed in a superscript.  ISO 10646 defines the "NFKC"
6760     normalization scheme to convert all these into a standard form as
6761     well, and GCC warns if your code is not in NFKC if you use
6762     '-Wnormalized=nfkc'.  This warning is comparable to warning about
6763     every identifier that contains the letter O because it might be
6764     confused with the digit 0, and so is not the default, but may be
6765     useful as a local coding convention if the programming environment
6766     cannot be fixed to display these characters distinctly.
6767
6768'-Wno-attribute-warning'
6769     Do not warn about usage of functions (*note Function Attributes::)
6770     declared with 'warning' attribute.  By default, this warning is
6771     enabled.  '-Wno-attribute-warning' can be used to disable the
6772     warning or '-Wno-error=attribute-warning' can be used to disable
6773     the error when compiled with '-Werror' flag.
6774
6775'-Wno-deprecated'
6776     Do not warn about usage of deprecated features.  *Note Deprecated
6777     Features::.
6778
6779'-Wno-deprecated-declarations'
6780     Do not warn about uses of functions (*note Function Attributes::),
6781     variables (*note Variable Attributes::), and types (*note Type
6782     Attributes::) marked as deprecated by using the 'deprecated'
6783     attribute.
6784
6785'-Wno-overflow'
6786     Do not warn about compile-time overflow in constant expressions.
6787
6788'-Wno-odr'
6789     Warn about One Definition Rule violations during link-time
6790     optimization.  Requires '-flto-odr-type-merging' to be enabled.
6791     Enabled by default.
6792
6793'-Wopenmp-simd'
6794     Warn if the vectorizer cost model overrides the OpenMP simd
6795     directive set by user.  The '-fsimd-cost-model=unlimited' option
6796     can be used to relax the cost model.
6797
6798'-Woverride-init (C and Objective-C only)'
6799     Warn if an initialized field without side effects is overridden
6800     when using designated initializers (*note Designated Initializers:
6801     Designated Inits.).
6802
6803     This warning is included in '-Wextra'.  To get other '-Wextra'
6804     warnings without this one, use '-Wextra -Wno-override-init'.
6805
6806'-Woverride-init-side-effects (C and Objective-C only)'
6807     Warn if an initialized field with side effects is overridden when
6808     using designated initializers (*note Designated Initializers:
6809     Designated Inits.).  This warning is enabled by default.
6810
6811'-Wpacked'
6812     Warn if a structure is given the packed attribute, but the packed
6813     attribute has no effect on the layout or size of the structure.
6814     Such structures may be mis-aligned for little benefit.  For
6815     instance, in this code, the variable 'f.x' in 'struct bar' is
6816     misaligned even though 'struct bar' does not itself have the packed
6817     attribute:
6818
6819          struct foo {
6820            int x;
6821            char a, b, c, d;
6822          } __attribute__((packed));
6823          struct bar {
6824            char z;
6825            struct foo f;
6826          };
6827
6828'-Wpacked-bitfield-compat'
6829     The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed' attribute on
6830     bit-fields of type 'char'.  This has been fixed in GCC 4.4 but the
6831     change can lead to differences in the structure layout.  GCC
6832     informs you when the offset of such a field has changed in GCC 4.4.
6833     For example there is no longer a 4-bit padding between field 'a'
6834     and 'b' in this structure:
6835
6836          struct foo
6837          {
6838            char a:4;
6839            char b:8;
6840          } __attribute__ ((packed));
6841
6842     This warning is enabled by default.  Use
6843     '-Wno-packed-bitfield-compat' to disable this warning.
6844
6845'-Wpacked-not-aligned (C, C++, Objective-C and Objective-C++ only)'
6846     Warn if a structure field with explicitly specified alignment in a
6847     packed struct or union is misaligned.  For example, a warning will
6848     be issued on 'struct S', like, 'warning: alignment 1 of 'struct S'
6849     is less than 8', in this code:
6850
6851          struct __attribute__ ((aligned (8))) S8 { char a[8]; };
6852          struct __attribute__ ((packed)) S {
6853            struct S8 s8;
6854          };
6855
6856     This warning is enabled by '-Wall'.
6857
6858'-Wpadded'
6859     Warn if padding is included in a structure, either to align an
6860     element of the structure or to align the whole structure.
6861     Sometimes when this happens it is possible to rearrange the fields
6862     of the structure to reduce the padding and so make the structure
6863     smaller.
6864
6865'-Wredundant-decls'
6866     Warn if anything is declared more than once in the same scope, even
6867     in cases where multiple declaration is valid and changes nothing.
6868
6869'-Wno-restrict'
6870     Warn when an object referenced by a 'restrict'-qualified parameter
6871     (or, in C++, a '__restrict'-qualified parameter) is aliased by
6872     another argument, or when copies between such objects overlap.  For
6873     example, the call to the 'strcpy' function below attempts to
6874     truncate the string by replacing its initial characters with the
6875     last four.  However, because the call writes the terminating NUL
6876     into 'a[4]', the copies overlap and the call is diagnosed.
6877
6878          void foo (void)
6879          {
6880            char a[] = "abcd1234";
6881            strcpy (a, a + 4);
6882            ...
6883          }
6884     The '-Wrestrict' option detects some instances of simple overlap
6885     even without optimization but works best at '-O2' and above.  It is
6886     included in '-Wall'.
6887
6888'-Wnested-externs (C and Objective-C only)'
6889     Warn if an 'extern' declaration is encountered within a function.
6890
6891'-Wno-inherited-variadic-ctor'
6892     Suppress warnings about use of C++11 inheriting constructors when
6893     the base class inherited from has a C variadic constructor; the
6894     warning is on by default because the ellipsis is not inherited.
6895
6896'-Winline'
6897     Warn if a function that is declared as inline cannot be inlined.
6898     Even with this option, the compiler does not warn about failures to
6899     inline functions declared in system headers.
6900
6901     The compiler uses a variety of heuristics to determine whether or
6902     not to inline a function.  For example, the compiler takes into
6903     account the size of the function being inlined and the amount of
6904     inlining that has already been done in the current function.
6905     Therefore, seemingly insignificant changes in the source program
6906     can cause the warnings produced by '-Winline' to appear or
6907     disappear.
6908
6909'-Wno-invalid-offsetof (C++ and Objective-C++ only)'
6910     Suppress warnings from applying the 'offsetof' macro to a non-POD
6911     type.  According to the 2014 ISO C++ standard, applying 'offsetof'
6912     to a non-standard-layout type is undefined.  In existing C++
6913     implementations, however, 'offsetof' typically gives meaningful
6914     results.  This flag is for users who are aware that they are
6915     writing nonportable code and who have deliberately chosen to ignore
6916     the warning about it.
6917
6918     The restrictions on 'offsetof' may be relaxed in a future version
6919     of the C++ standard.
6920
6921'-Wint-in-bool-context'
6922     Warn for suspicious use of integer values where boolean values are
6923     expected, such as conditional expressions (?:) using non-boolean
6924     integer constants in boolean context, like 'if (a <= b ? 2 : 3)'.
6925     Or left shifting of signed integers in boolean context, like 'for
6926     (a = 0; 1 << a; a++);'.  Likewise for all kinds of multiplications
6927     regardless of the data type.  This warning is enabled by '-Wall'.
6928
6929'-Wno-int-to-pointer-cast'
6930     Suppress warnings from casts to pointer type of an integer of a
6931     different size.  In C++, casting to a pointer type of smaller size
6932     is an error.  'Wint-to-pointer-cast' is enabled by default.
6933
6934'-Wno-pointer-to-int-cast (C and Objective-C only)'
6935     Suppress warnings from casts from a pointer to an integer type of a
6936     different size.
6937
6938'-Winvalid-pch'
6939     Warn if a precompiled header (*note Precompiled Headers::) is found
6940     in the search path but cannot be used.
6941
6942'-Wlong-long'
6943     Warn if 'long long' type is used.  This is enabled by either
6944     '-Wpedantic' or '-Wtraditional' in ISO C90 and C++98 modes.  To
6945     inhibit the warning messages, use '-Wno-long-long'.
6946
6947'-Wvariadic-macros'
6948     Warn if variadic macros are used in ISO C90 mode, or if the GNU
6949     alternate syntax is used in ISO C99 mode.  This is enabled by
6950     either '-Wpedantic' or '-Wtraditional'.  To inhibit the warning
6951     messages, use '-Wno-variadic-macros'.
6952
6953'-Wvarargs'
6954     Warn upon questionable usage of the macros used to handle variable
6955     arguments like 'va_start'.  This is default.  To inhibit the
6956     warning messages, use '-Wno-varargs'.
6957
6958'-Wvector-operation-performance'
6959     Warn if vector operation is not implemented via SIMD capabilities
6960     of the architecture.  Mainly useful for the performance tuning.
6961     Vector operation can be implemented 'piecewise', which means that
6962     the scalar operation is performed on every vector element; 'in
6963     parallel', which means that the vector operation is implemented
6964     using scalars of wider type, which normally is more performance
6965     efficient; and 'as a single scalar', which means that vector fits
6966     into a scalar type.
6967
6968'-Wno-virtual-move-assign'
6969     Suppress warnings about inheriting from a virtual base with a
6970     non-trivial C++11 move assignment operator.  This is dangerous
6971     because if the virtual base is reachable along more than one path,
6972     it is moved multiple times, which can mean both objects end up in
6973     the moved-from state.  If the move assignment operator is written
6974     to avoid moving from a moved-from object, this warning can be
6975     disabled.
6976
6977'-Wvla'
6978     Warn if a variable-length array is used in the code.  '-Wno-vla'
6979     prevents the '-Wpedantic' warning of the variable-length array.
6980
6981'-Wvla-larger-than=BYTE-SIZE'
6982     If this option is used, the compiler will warn for declarations of
6983     variable-length arrays whose size is either unbounded, or bounded
6984     by an argument that allows the array size to exceed BYTE-SIZE
6985     bytes.  This is similar to how '-Walloca-larger-than='BYTE-SIZE
6986     works, but with variable-length arrays.
6987
6988     Note that GCC may optimize small variable-length arrays of a known
6989     value into plain arrays, so this warning may not get triggered for
6990     such arrays.
6991
6992     '-Wvla-larger-than=''PTRDIFF_MAX' is enabled by default but is
6993     typically only effective when '-ftree-vrp' is active (default for
6994     '-O2' and above).
6995
6996     See also '-Walloca-larger-than=BYTE-SIZE'.
6997
6998'-Wno-vla-larger-than'
6999     Disable '-Wvla-larger-than=' warnings.  The option is equivalent to
7000     '-Wvla-larger-than=''SIZE_MAX' or larger.
7001
7002'-Wvolatile-register-var'
7003     Warn if a register variable is declared volatile.  The volatile
7004     modifier does not inhibit all optimizations that may eliminate
7005     reads and/or writes to register variables.  This warning is enabled
7006     by '-Wall'.
7007
7008'-Wdisabled-optimization'
7009     Warn if a requested optimization pass is disabled.  This warning
7010     does not generally indicate that there is anything wrong with your
7011     code; it merely indicates that GCC's optimizers are unable to
7012     handle the code effectively.  Often, the problem is that your code
7013     is too big or too complex; GCC refuses to optimize programs when
7014     the optimization itself is likely to take inordinate amounts of
7015     time.
7016
7017'-Wpointer-sign (C and Objective-C only)'
7018     Warn for pointer argument passing or assignment with different
7019     signedness.  This option is only supported for C and Objective-C.
7020     It is implied by '-Wall' and by '-Wpedantic', which can be disabled
7021     with '-Wno-pointer-sign'.
7022
7023'-Wstack-protector'
7024     This option is only active when '-fstack-protector' is active.  It
7025     warns about functions that are not protected against stack
7026     smashing.
7027
7028'-Woverlength-strings'
7029     Warn about string constants that are longer than the "minimum
7030     maximum" length specified in the C standard.  Modern compilers
7031     generally allow string constants that are much longer than the
7032     standard's minimum limit, but very portable programs should avoid
7033     using longer strings.
7034
7035     The limit applies _after_ string constant concatenation, and does
7036     not count the trailing NUL.  In C90, the limit was 509 characters;
7037     in C99, it was raised to 4095.  C++98 does not specify a normative
7038     minimum maximum, so we do not diagnose overlength strings in C++.
7039
7040     This option is implied by '-Wpedantic', and can be disabled with
7041     '-Wno-overlength-strings'.
7042
7043'-Wunsuffixed-float-constants (C and Objective-C only)'
7044
7045     Issue a warning for any floating constant that does not have a
7046     suffix.  When used together with '-Wsystem-headers' it warns about
7047     such constants in system header files.  This can be useful when
7048     preparing code to use with the 'FLOAT_CONST_DECIMAL64' pragma from
7049     the decimal floating-point extension to C99.
7050
7051'-Wno-designated-init (C and Objective-C only)'
7052     Suppress warnings when a positional initializer is used to
7053     initialize a structure that has been marked with the
7054     'designated_init' attribute.
7055
7056'-Whsa'
7057     Issue a warning when HSAIL cannot be emitted for the compiled
7058     function or OpenMP construct.
7059
7060
7061File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
7062
70633.9 Options for Debugging Your Program
7064======================================
7065
7066To tell GCC to emit extra information for use by a debugger, in almost
7067all cases you need only to add '-g' to your other options.
7068
7069 GCC allows you to use '-g' with '-O'.  The shortcuts taken by optimized
7070code may occasionally be surprising: some variables you declared may not
7071exist at all; flow of control may briefly move where you did not expect
7072it; some statements may not be executed because they compute constant
7073results or their values are already at hand; some statements may execute
7074in different places because they have been moved out of loops.
7075Nevertheless it is possible to debug optimized output.  This makes it
7076reasonable to use the optimizer for programs that might have bugs.
7077
7078 If you are not using some other optimization option, consider using
7079'-Og' (*note Optimize Options::) with '-g'.  With no '-O' option at all,
7080some compiler passes that collect information useful for debugging do
7081not run at all, so that '-Og' may result in a better debugging
7082experience.
7083
7084'-g'
7085     Produce debugging information in the operating system's native
7086     format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this
7087     debugging information.
7088
7089     On most systems that use stabs format, '-g' enables use of extra
7090     debugging information that only GDB can use; this extra information
7091     makes debugging work better in GDB but probably makes other
7092     debuggers crash or refuse to read the program.  If you want to
7093     control for certain whether to generate the extra information, use
7094     '-gstabs+', '-gstabs', '-gxcoff+', '-gxcoff', or '-gvms' (see
7095     below).
7096
7097'-ggdb'
7098     Produce debugging information for use by GDB.  This means to use
7099     the most expressive format available (DWARF, stabs, or the native
7100     format if neither of those are supported), including GDB extensions
7101     if at all possible.
7102
7103'-gdwarf'
7104'-gdwarf-VERSION'
7105     Produce debugging information in DWARF format (if that is
7106     supported).  The value of VERSION may be either 2, 3, 4 or 5; the
7107     default version for most targets is 4.  DWARF Version 5 is only
7108     experimental.
7109
7110     Note that with DWARF Version 2, some ports require and always use
7111     some non-conflicting DWARF 3 extensions in the unwind tables.
7112
7113     Version 4 may require GDB 7.0 and '-fvar-tracking-assignments' for
7114     maximum benefit.
7115
7116     GCC no longer supports DWARF Version 1, which is substantially
7117     different than Version 2 and later.  For historical reasons, some
7118     other DWARF-related options such as '-fno-dwarf2-cfi-asm') retain a
7119     reference to DWARF Version 2 in their names, but apply to all
7120     currently-supported versions of DWARF.
7121
7122'-gstabs'
7123     Produce debugging information in stabs format (if that is
7124     supported), without GDB extensions.  This is the format used by DBX
7125     on most BSD systems.  On MIPS, Alpha and System V Release 4 systems
7126     this option produces stabs debugging output that is not understood
7127     by DBX.  On System V Release 4 systems this option requires the GNU
7128     assembler.
7129
7130'-gstabs+'
7131     Produce debugging information in stabs format (if that is
7132     supported), using GNU extensions understood only by the GNU
7133     debugger (GDB).  The use of these extensions is likely to make
7134     other debuggers crash or refuse to read the program.
7135
7136'-gxcoff'
7137     Produce debugging information in XCOFF format (if that is
7138     supported).  This is the format used by the DBX debugger on IBM
7139     RS/6000 systems.
7140
7141'-gxcoff+'
7142     Produce debugging information in XCOFF format (if that is
7143     supported), using GNU extensions understood only by the GNU
7144     debugger (GDB).  The use of these extensions is likely to make
7145     other debuggers crash or refuse to read the program, and may cause
7146     assemblers other than the GNU assembler (GAS) to fail with an
7147     error.
7148
7149'-gvms'
7150     Produce debugging information in Alpha/VMS debug format (if that is
7151     supported).  This is the format used by DEBUG on Alpha/VMS systems.
7152
7153'-gLEVEL'
7154'-ggdbLEVEL'
7155'-gstabsLEVEL'
7156'-gxcoffLEVEL'
7157'-gvmsLEVEL'
7158     Request debugging information and also use LEVEL to specify how
7159     much information.  The default level is 2.
7160
7161     Level 0 produces no debug information at all.  Thus, '-g0' negates
7162     '-g'.
7163
7164     Level 1 produces minimal information, enough for making backtraces
7165     in parts of the program that you don't plan to debug.  This
7166     includes descriptions of functions and external variables, and line
7167     number tables, but no information about local variables.
7168
7169     Level 3 includes extra information, such as all the macro
7170     definitions present in the program.  Some debuggers support macro
7171     expansion when you use '-g3'.
7172
7173     If you use multiple '-g' options, with or without level numbers,
7174     the last such option is the one that is effective.
7175
7176     '-gdwarf' does not accept a concatenated debug level, to avoid
7177     confusion with '-gdwarf-LEVEL'.  Instead use an additional
7178     '-gLEVEL' option to change the debug level for DWARF.
7179
7180'-feliminate-unused-debug-symbols'
7181     Produce debugging information in stabs format (if that is
7182     supported), for only symbols that are actually used.
7183
7184'-femit-class-debug-always'
7185     Instead of emitting debugging information for a C++ class in only
7186     one object file, emit it in all object files using the class.  This
7187     option should be used only with debuggers that are unable to handle
7188     the way GCC normally emits debugging information for classes
7189     because using this option increases the size of debugging
7190     information by as much as a factor of two.
7191
7192'-fno-merge-debug-strings'
7193     Direct the linker to not merge together strings in the debugging
7194     information that are identical in different object files.  Merging
7195     is not supported by all assemblers or linkers.  Merging decreases
7196     the size of the debug information in the output file at the cost of
7197     increasing link processing time.  Merging is enabled by default.
7198
7199'-fdebug-prefix-map=OLD=NEW'
7200     When compiling files residing in directory 'OLD', record debugging
7201     information describing them as if the files resided in directory
7202     'NEW' instead.  This can be used to replace a build-time path with
7203     an install-time path in the debug info.  It can also be used to
7204     change an absolute path to a relative path by using '.' for NEW.
7205     This can give more reproducible builds, which are location
7206     independent, but may require an extra command to tell GDB where to
7207     find the source files.  See also '-ffile-prefix-map'.
7208
7209'-fvar-tracking'
7210     Run variable tracking pass.  It computes where variables are stored
7211     at each position in code.  Better debugging information is then
7212     generated (if the debugging information format supports this
7213     information).
7214
7215     It is enabled by default when compiling with optimization ('-Os',
7216     '-O', '-O2', ...), debugging information ('-g') and the debug info
7217     format supports it.
7218
7219'-fvar-tracking-assignments'
7220     Annotate assignments to user variables early in the compilation and
7221     attempt to carry the annotations over throughout the compilation
7222     all the way to the end, in an attempt to improve debug information
7223     while optimizing.  Use of '-gdwarf-4' is recommended along with it.
7224
7225     It can be enabled even if var-tracking is disabled, in which case
7226     annotations are created and maintained, but discarded at the end.
7227     By default, this flag is enabled together with '-fvar-tracking',
7228     except when selective scheduling is enabled.
7229
7230'-gsplit-dwarf'
7231     Separate as much DWARF debugging information as possible into a
7232     separate output file with the extension '.dwo'.  This option allows
7233     the build system to avoid linking files with debug information.  To
7234     be useful, this option requires a debugger capable of reading
7235     '.dwo' files.
7236
7237'-gdescribe-dies'
7238     Add description attributes to some DWARF DIEs that have no name
7239     attribute, such as artificial variables, external references and
7240     call site parameter DIEs.
7241
7242'-gpubnames'
7243     Generate DWARF '.debug_pubnames' and '.debug_pubtypes' sections.
7244
7245'-ggnu-pubnames'
7246     Generate '.debug_pubnames' and '.debug_pubtypes' sections in a
7247     format suitable for conversion into a GDB index.  This option is
7248     only useful with a linker that can produce GDB index version 7.
7249
7250'-fdebug-types-section'
7251     When using DWARF Version 4 or higher, type DIEs can be put into
7252     their own '.debug_types' section instead of making them part of the
7253     '.debug_info' section.  It is more efficient to put them in a
7254     separate comdat section since the linker can then remove
7255     duplicates.  But not all DWARF consumers support '.debug_types'
7256     sections yet and on some objects '.debug_types' produces larger
7257     instead of smaller debugging information.
7258
7259'-grecord-gcc-switches'
7260'-gno-record-gcc-switches'
7261     This switch causes the command-line options used to invoke the
7262     compiler that may affect code generation to be appended to the
7263     DW_AT_producer attribute in DWARF debugging information.  The
7264     options are concatenated with spaces separating them from each
7265     other and from the compiler version.  It is enabled by default.
7266     See also '-frecord-gcc-switches' for another way of storing
7267     compiler options into the object file.
7268
7269'-gstrict-dwarf'
7270     Disallow using extensions of later DWARF standard version than
7271     selected with '-gdwarf-VERSION'.  On most targets using
7272     non-conflicting DWARF extensions from later standard versions is
7273     allowed.
7274
7275'-gno-strict-dwarf'
7276     Allow using extensions of later DWARF standard version than
7277     selected with '-gdwarf-VERSION'.
7278
7279'-gas-loc-support'
7280     Inform the compiler that the assembler supports '.loc' directives.
7281     It may then use them for the assembler to generate DWARF2+ line
7282     number tables.
7283
7284     This is generally desirable, because assembler-generated
7285     line-number tables are a lot more compact than those the compiler
7286     can generate itself.
7287
7288     This option will be enabled by default if, at GCC configure time,
7289     the assembler was found to support such directives.
7290
7291'-gno-as-loc-support'
7292     Force GCC to generate DWARF2+ line number tables internally, if
7293     DWARF2+ line number tables are to be generated.
7294
7295'gas-locview-support'
7296     Inform the compiler that the assembler supports 'view' assignment
7297     and reset assertion checking in '.loc' directives.
7298
7299     This option will be enabled by default if, at GCC configure time,
7300     the assembler was found to support them.
7301
7302'gno-as-locview-support'
7303     Force GCC to assign view numbers internally, if
7304     '-gvariable-location-views' are explicitly requested.
7305
7306'-gcolumn-info'
7307'-gno-column-info'
7308     Emit location column information into DWARF debugging information,
7309     rather than just file and line.  This option is enabled by default.
7310
7311'-gstatement-frontiers'
7312'-gno-statement-frontiers'
7313     This option causes GCC to create markers in the internal
7314     representation at the beginning of statements, and to keep them
7315     roughly in place throughout compilation, using them to guide the
7316     output of 'is_stmt' markers in the line number table.  This is
7317     enabled by default when compiling with optimization ('-Os', '-O',
7318     '-O2', ...), and outputting DWARF 2 debug information at the normal
7319     level.
7320
7321'-gvariable-location-views'
7322'-gvariable-location-views=incompat5'
7323'-gno-variable-location-views'
7324     Augment variable location lists with progressive view numbers
7325     implied from the line number table.  This enables debug information
7326     consumers to inspect state at certain points of the program, even
7327     if no instructions associated with the corresponding source
7328     locations are present at that point.  If the assembler lacks
7329     support for view numbers in line number tables, this will cause the
7330     compiler to emit the line number table, which generally makes them
7331     somewhat less compact.  The augmented line number tables and
7332     location lists are fully backward-compatible, so they can be
7333     consumed by debug information consumers that are not aware of these
7334     augmentations, but they won't derive any benefit from them either.
7335
7336     This is enabled by default when outputting DWARF 2 debug
7337     information at the normal level, as long as there is assembler
7338     support, '-fvar-tracking-assignments' is enabled and
7339     '-gstrict-dwarf' is not.  When assembler support is not available,
7340     this may still be enabled, but it will force GCC to output internal
7341     line number tables, and if '-ginternal-reset-location-views' is not
7342     enabled, that will most certainly lead to silently mismatching
7343     location views.
7344
7345     There is a proposed representation for view numbers that is not
7346     backward compatible with the location list format introduced in
7347     DWARF 5, that can be enabled with
7348     '-gvariable-location-views=incompat5'.  This option may be removed
7349     in the future, is only provided as a reference implementation of
7350     the proposed representation.  Debug information consumers are not
7351     expected to support this extended format, and they would be
7352     rendered unable to decode location lists using it.
7353
7354'-ginternal-reset-location-views'
7355'-gno-internal-reset-location-views'
7356     Attempt to determine location views that can be omitted from
7357     location view lists.  This requires the compiler to have very
7358     accurate insn length estimates, which isn't always the case, and it
7359     may cause incorrect view lists to be generated silently when using
7360     an assembler that does not support location view lists.  The GNU
7361     assembler will flag any such error as a 'view number mismatch'.
7362     This is only enabled on ports that define a reliable estimation
7363     function.
7364
7365'-ginline-points'
7366'-gno-inline-points'
7367     Generate extended debug information for inlined functions.
7368     Location view tracking markers are inserted at inlined entry
7369     points, so that address and view numbers can be computed and output
7370     in debug information.  This can be enabled independently of
7371     location views, in which case the view numbers won't be output, but
7372     it can only be enabled along with statement frontiers, and it is
7373     only enabled by default if location views are enabled.
7374
7375'-gz[=TYPE]'
7376     Produce compressed debug sections in DWARF format, if that is
7377     supported.  If TYPE is not given, the default type depends on the
7378     capabilities of the assembler and linker used.  TYPE may be one of
7379     'none' (don't compress debug sections), 'zlib' (use zlib
7380     compression in ELF gABI format), or 'zlib-gnu' (use zlib
7381     compression in traditional GNU format).  If the linker doesn't
7382     support writing compressed debug sections, the option is rejected.
7383     Otherwise, if the assembler does not support them, '-gz' is
7384     silently ignored when producing object files.
7385
7386'-femit-struct-debug-baseonly'
7387     Emit debug information for struct-like types only when the base
7388     name of the compilation source file matches the base name of file
7389     in which the struct is defined.
7390
7391     This option substantially reduces the size of debugging
7392     information, but at significant potential loss in type information
7393     to the debugger.  See '-femit-struct-debug-reduced' for a less
7394     aggressive option.  See '-femit-struct-debug-detailed' for more
7395     detailed control.
7396
7397     This option works only with DWARF debug output.
7398
7399'-femit-struct-debug-reduced'
7400     Emit debug information for struct-like types only when the base
7401     name of the compilation source file matches the base name of file
7402     in which the type is defined, unless the struct is a template or
7403     defined in a system header.
7404
7405     This option significantly reduces the size of debugging
7406     information, with some potential loss in type information to the
7407     debugger.  See '-femit-struct-debug-baseonly' for a more aggressive
7408     option.  See '-femit-struct-debug-detailed' for more detailed
7409     control.
7410
7411     This option works only with DWARF debug output.
7412
7413'-femit-struct-debug-detailed[=SPEC-LIST]'
7414     Specify the struct-like types for which the compiler generates
7415     debug information.  The intent is to reduce duplicate struct debug
7416     information between different object files within the same program.
7417
7418     This option is a detailed version of '-femit-struct-debug-reduced'
7419     and '-femit-struct-debug-baseonly', which serves for most needs.
7420
7421     A specification has the syntax
7422     ['dir:'|'ind:']['ord:'|'gen:']('any'|'sys'|'base'|'none')
7423
7424     The optional first word limits the specification to structs that
7425     are used directly ('dir:') or used indirectly ('ind:').  A struct
7426     type is used directly when it is the type of a variable, member.
7427     Indirect uses arise through pointers to structs.  That is, when use
7428     of an incomplete struct is valid, the use is indirect.  An example
7429     is 'struct one direct; struct two * indirect;'.
7430
7431     The optional second word limits the specification to ordinary
7432     structs ('ord:') or generic structs ('gen:').  Generic structs are
7433     a bit complicated to explain.  For C++, these are non-explicit
7434     specializations of template classes, or non-template classes within
7435     the above.  Other programming languages have generics, but
7436     '-femit-struct-debug-detailed' does not yet implement them.
7437
7438     The third word specifies the source files for those structs for
7439     which the compiler should emit debug information.  The values
7440     'none' and 'any' have the normal meaning.  The value 'base' means
7441     that the base of name of the file in which the type declaration
7442     appears must match the base of the name of the main compilation
7443     file.  In practice, this means that when compiling 'foo.c', debug
7444     information is generated for types declared in that file and
7445     'foo.h', but not other header files.  The value 'sys' means those
7446     types satisfying 'base' or declared in system or compiler headers.
7447
7448     You may need to experiment to determine the best settings for your
7449     application.
7450
7451     The default is '-femit-struct-debug-detailed=all'.
7452
7453     This option works only with DWARF debug output.
7454
7455'-fno-dwarf2-cfi-asm'
7456     Emit DWARF unwind info as compiler generated '.eh_frame' section
7457     instead of using GAS '.cfi_*' directives.
7458
7459'-fno-eliminate-unused-debug-types'
7460     Normally, when producing DWARF output, GCC avoids producing debug
7461     symbol output for types that are nowhere used in the source file
7462     being compiled.  Sometimes it is useful to have GCC emit debugging
7463     information for all types declared in a compilation unit,
7464     regardless of whether or not they are actually used in that
7465     compilation unit, for example if, in the debugger, you want to cast
7466     a value to a type that is not actually used in your program (but is
7467     declared).  More often, however, this results in a significant
7468     amount of wasted space.
7469
7470
7471File: gcc.info,  Node: Optimize Options,  Next: Instrumentation Options,  Prev: Debugging Options,  Up: Invoking GCC
7472
74733.10 Options That Control Optimization
7474======================================
7475
7476These options control various sorts of optimizations.
7477
7478 Without any optimization option, the compiler's goal is to reduce the
7479cost of compilation and to make debugging produce the expected results.
7480Statements are independent: if you stop the program with a breakpoint
7481between statements, you can then assign a new value to any variable or
7482change the program counter to any other statement in the function and
7483get exactly the results you expect from the source code.
7484
7485 Turning on optimization flags makes the compiler attempt to improve the
7486performance and/or code size at the expense of compilation time and
7487possibly the ability to debug the program.
7488
7489 The compiler performs optimization based on the knowledge it has of the
7490program.  Compiling multiple files at once to a single output file mode
7491allows the compiler to use information gained from all of the files when
7492compiling each of them.
7493
7494 Not all optimizations are controlled directly by a flag.  Only
7495optimizations that have a flag are listed in this section.
7496
7497 Most optimizations are completely disabled at '-O0' or if an '-O' level
7498is not set on the command line, even if individual optimization flags
7499are specified.  Similarly, '-Og' suppresses many optimization passes.
7500
7501 Depending on the target and how GCC was configured, a slightly
7502different set of optimizations may be enabled at each '-O' level than
7503those listed here.  You can invoke GCC with '-Q --help=optimizers' to
7504find out the exact set of optimizations that are enabled at each level.
7505*Note Overall Options::, for examples.
7506
7507'-O'
7508'-O1'
7509     Optimize.  Optimizing compilation takes somewhat more time, and a
7510     lot more memory for a large function.
7511
7512     With '-O', the compiler tries to reduce code size and execution
7513     time, without performing any optimizations that take a great deal
7514     of compilation time.
7515
7516     '-O' turns on the following optimization flags:
7517
7518          -fauto-inc-dec
7519          -fbranch-count-reg
7520          -fcombine-stack-adjustments
7521          -fcompare-elim
7522          -fcprop-registers
7523          -fdce
7524          -fdefer-pop
7525          -fdelayed-branch
7526          -fdse
7527          -fforward-propagate
7528          -fguess-branch-probability
7529          -fif-conversion
7530          -fif-conversion2
7531          -finline-functions-called-once
7532          -fipa-profile
7533          -fipa-pure-const
7534          -fipa-reference
7535          -fipa-reference-addressable
7536          -fmerge-constants
7537          -fmove-loop-invariants
7538          -fomit-frame-pointer
7539          -freorder-blocks
7540          -fshrink-wrap
7541          -fshrink-wrap-separate
7542          -fsplit-wide-types
7543          -fssa-backprop
7544          -fssa-phiopt
7545          -ftree-bit-ccp
7546          -ftree-ccp
7547          -ftree-ch
7548          -ftree-coalesce-vars
7549          -ftree-copy-prop
7550          -ftree-dce
7551          -ftree-dominator-opts
7552          -ftree-dse
7553          -ftree-forwprop
7554          -ftree-fre
7555          -ftree-phiprop
7556          -ftree-pta
7557          -ftree-scev-cprop
7558          -ftree-sink
7559          -ftree-slsr
7560          -ftree-sra
7561          -ftree-ter
7562          -funit-at-a-time
7563
7564'-O2'
7565     Optimize even more.  GCC performs nearly all supported
7566     optimizations that do not involve a space-speed tradeoff.  As
7567     compared to '-O', this option increases both compilation time and
7568     the performance of the generated code.
7569
7570     '-O2' turns on all optimization flags specified by '-O'.  It also
7571     turns on the following optimization flags:
7572
7573          -falign-functions  -falign-jumps
7574          -falign-labels  -falign-loops
7575          -fcaller-saves
7576          -fcode-hoisting
7577          -fcrossjumping
7578          -fcse-follow-jumps  -fcse-skip-blocks
7579          -fdelete-null-pointer-checks
7580          -fdevirtualize  -fdevirtualize-speculatively
7581          -fexpensive-optimizations
7582          -fgcse  -fgcse-lm
7583          -fhoist-adjacent-loads
7584          -finline-small-functions
7585          -findirect-inlining
7586          -fipa-bit-cp  -fipa-cp  -fipa-icf
7587          -fipa-ra  -fipa-sra  -fipa-vrp
7588          -fisolate-erroneous-paths-dereference
7589          -flra-remat
7590          -foptimize-sibling-calls
7591          -foptimize-strlen
7592          -fpartial-inlining
7593          -fpeephole2
7594          -freorder-blocks-algorithm=stc
7595          -freorder-blocks-and-partition  -freorder-functions
7596          -frerun-cse-after-loop
7597          -fschedule-insns  -fschedule-insns2
7598          -fsched-interblock  -fsched-spec
7599          -fstore-merging
7600          -fstrict-aliasing
7601          -fthread-jumps
7602          -ftree-builtin-call-dce
7603          -ftree-pre
7604          -ftree-switch-conversion  -ftree-tail-merge
7605          -ftree-vrp
7606
7607     Please note the warning under '-fgcse' about invoking '-O2' on
7608     programs that use computed gotos.
7609
7610'-O3'
7611     Optimize yet more.  '-O3' turns on all optimizations specified by
7612     '-O2' and also turns on the following optimization flags:
7613
7614          -fgcse-after-reload
7615          -finline-functions
7616          -fipa-cp-clone
7617          -floop-interchange
7618          -floop-unroll-and-jam
7619          -fpeel-loops
7620          -fpredictive-commoning
7621          -fsplit-paths
7622          -ftree-loop-distribute-patterns
7623          -ftree-loop-distribution
7624          -ftree-loop-vectorize
7625          -ftree-partial-pre
7626          -ftree-slp-vectorize
7627          -funswitch-loops
7628          -fvect-cost-model
7629          -fversion-loops-for-strides
7630
7631'-O0'
7632     Reduce compilation time and make debugging produce the expected
7633     results.  This is the default.
7634
7635'-Os'
7636     Optimize for size.  '-Os' enables all '-O2' optimizations except
7637     those that often increase code size:
7638
7639          -falign-functions  -falign-jumps
7640          -falign-labels  -falign-loops
7641          -fprefetch-loop-arrays  -freorder-blocks-algorithm=stc
7642
7643     It also enables '-finline-functions', causes the compiler to tune
7644     for code size rather than execution speed, and performs further
7645     optimizations designed to reduce code size.
7646
7647'-Ofast'
7648     Disregard strict standards compliance.  '-Ofast' enables all '-O3'
7649     optimizations.  It also enables optimizations that are not valid
7650     for all standard-compliant programs.  It turns on '-ffast-math' and
7651     the Fortran-specific '-fstack-arrays', unless
7652     '-fmax-stack-var-size' is specified, and '-fno-protect-parens'.
7653
7654'-Og'
7655     Optimize debugging experience.  '-Og' should be the optimization
7656     level of choice for the standard edit-compile-debug cycle, offering
7657     a reasonable level of optimization while maintaining fast
7658     compilation and a good debugging experience.  It is a better choice
7659     than '-O0' for producing debuggable code because some compiler
7660     passes that collect debug information are disabled at '-O0'.
7661
7662     Like '-O0', '-Og' completely disables a number of optimization
7663     passes so that individual options controlling them have no effect.
7664     Otherwise '-Og' enables all '-O1' optimization flags except for
7665     those that may interfere with debugging:
7666
7667          -fbranch-count-reg  -fdelayed-branch
7668          -fif-conversion  -fif-conversion2
7669          -finline-functions-called-once
7670          -fmove-loop-invariants  -fssa-phiopt
7671          -ftree-bit-ccp  -ftree-pta  -ftree-sra
7672
7673 If you use multiple '-O' options, with or without level numbers, the
7674last such option is the one that is effective.
7675
7676 Options of the form '-fFLAG' specify machine-independent flags.  Most
7677flags have both positive and negative forms; the negative form of
7678'-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
7679listed--the one you typically use.  You can figure out the other form by
7680either removing 'no-' or adding it.
7681
7682 The following options control specific optimizations.  They are either
7683activated by '-O' options or are related to ones that are.  You can use
7684the following flags in the rare cases when "fine-tuning" of
7685optimizations to be performed is desired.
7686
7687'-fno-defer-pop'
7688     For machines that must pop arguments after a function call, always
7689     pop the arguments as soon as each function returns.  At levels
7690     '-O1' and higher, '-fdefer-pop' is the default; this allows the
7691     compiler to let arguments accumulate on the stack for several
7692     function calls and pop them all at once.
7693
7694'-fforward-propagate'
7695     Perform a forward propagation pass on RTL.  The pass tries to
7696     combine two instructions and checks if the result can be
7697     simplified.  If loop unrolling is active, two passes are performed
7698     and the second is scheduled after loop unrolling.
7699
7700     This option is enabled by default at optimization levels '-O',
7701     '-O2', '-O3', '-Os'.
7702
7703'-ffp-contract=STYLE'
7704     '-ffp-contract=off' disables floating-point expression contraction.
7705     '-ffp-contract=fast' enables floating-point expression contraction
7706     such as forming of fused multiply-add operations if the target has
7707     native support for them.  '-ffp-contract=on' enables floating-point
7708     expression contraction if allowed by the language standard.  This
7709     is currently not implemented and treated equal to
7710     '-ffp-contract=off'.
7711
7712     The default is '-ffp-contract=fast'.
7713
7714'-fomit-frame-pointer'
7715     Omit the frame pointer in functions that don't need one.  This
7716     avoids the instructions to save, set up and restore the frame
7717     pointer; on many targets it also makes an extra register available.
7718
7719     On some targets this flag has no effect because the standard
7720     calling sequence always uses a frame pointer, so it cannot be
7721     omitted.
7722
7723     Note that '-fno-omit-frame-pointer' doesn't guarantee the frame
7724     pointer is used in all functions.  Several targets always omit the
7725     frame pointer in leaf functions.
7726
7727     Enabled by default at '-O' and higher.
7728
7729'-foptimize-sibling-calls'
7730     Optimize sibling and tail recursive calls.
7731
7732     Enabled at levels '-O2', '-O3', '-Os'.
7733
7734'-foptimize-strlen'
7735     Optimize various standard C string functions (e.g. 'strlen',
7736     'strchr' or 'strcpy') and their '_FORTIFY_SOURCE' counterparts into
7737     faster alternatives.
7738
7739     Enabled at levels '-O2', '-O3'.
7740
7741'-fno-inline'
7742     Do not expand any functions inline apart from those marked with the
7743     'always_inline' attribute.  This is the default when not
7744     optimizing.
7745
7746     Single functions can be exempted from inlining by marking them with
7747     the 'noinline' attribute.
7748
7749'-finline-small-functions'
7750     Integrate functions into their callers when their body is smaller
7751     than expected function call code (so overall size of program gets
7752     smaller).  The compiler heuristically decides which functions are
7753     simple enough to be worth integrating in this way.  This inlining
7754     applies to all functions, even those not declared inline.
7755
7756     Enabled at levels '-O2', '-O3', '-Os'.
7757
7758'-findirect-inlining'
7759     Inline also indirect calls that are discovered to be known at
7760     compile time thanks to previous inlining.  This option has any
7761     effect only when inlining itself is turned on by the
7762     '-finline-functions' or '-finline-small-functions' options.
7763
7764     Enabled at levels '-O2', '-O3', '-Os'.
7765
7766'-finline-functions'
7767     Consider all functions for inlining, even if they are not declared
7768     inline.  The compiler heuristically decides which functions are
7769     worth integrating in this way.
7770
7771     If all calls to a given function are integrated, and the function
7772     is declared 'static', then the function is normally not output as
7773     assembler code in its own right.
7774
7775     Enabled at levels '-O3', '-Os'.  Also enabled by '-fprofile-use'
7776     and '-fauto-profile'.
7777
7778'-finline-functions-called-once'
7779     Consider all 'static' functions called once for inlining into their
7780     caller even if they are not marked 'inline'.  If a call to a given
7781     function is integrated, then the function is not output as
7782     assembler code in its own right.
7783
7784     Enabled at levels '-O1', '-O2', '-O3' and '-Os', but not '-Og'.
7785
7786'-fearly-inlining'
7787     Inline functions marked by 'always_inline' and functions whose body
7788     seems smaller than the function call overhead early before doing
7789     '-fprofile-generate' instrumentation and real inlining pass.  Doing
7790     so makes profiling significantly cheaper and usually inlining
7791     faster on programs having large chains of nested wrapper functions.
7792
7793     Enabled by default.
7794
7795'-fipa-sra'
7796     Perform interprocedural scalar replacement of aggregates, removal
7797     of unused parameters and replacement of parameters passed by
7798     reference by parameters passed by value.
7799
7800     Enabled at levels '-O2', '-O3' and '-Os'.
7801
7802'-finline-limit=N'
7803     By default, GCC limits the size of functions that can be inlined.
7804     This flag allows coarse control of this limit.  N is the size of
7805     functions that can be inlined in number of pseudo instructions.
7806
7807     Inlining is actually controlled by a number of parameters, which
7808     may be specified individually by using '--param NAME=VALUE'.  The
7809     '-finline-limit=N' option sets some of these parameters as follows:
7810
7811     'max-inline-insns-single'
7812          is set to N/2.
7813     'max-inline-insns-auto'
7814          is set to N/2.
7815
7816     See below for a documentation of the individual parameters
7817     controlling inlining and for the defaults of these parameters.
7818
7819     _Note:_ there may be no value to '-finline-limit' that results in
7820     default behavior.
7821
7822     _Note:_ pseudo instruction represents, in this particular context,
7823     an abstract measurement of function's size.  In no way does it
7824     represent a count of assembly instructions and as such its exact
7825     meaning might change from one release to an another.
7826
7827'-fno-keep-inline-dllexport'
7828     This is a more fine-grained version of '-fkeep-inline-functions',
7829     which applies only to functions that are declared using the
7830     'dllexport' attribute or declspec.  *Note Declaring Attributes of
7831     Functions: Function Attributes.
7832
7833'-fkeep-inline-functions'
7834     In C, emit 'static' functions that are declared 'inline' into the
7835     object file, even if the function has been inlined into all of its
7836     callers.  This switch does not affect functions using the 'extern
7837     inline' extension in GNU C90.  In C++, emit any and all inline
7838     functions into the object file.
7839
7840'-fkeep-static-functions'
7841     Emit 'static' functions into the object file, even if the function
7842     is never used.
7843
7844'-fkeep-static-consts'
7845     Emit variables declared 'static const' when optimization isn't
7846     turned on, even if the variables aren't referenced.
7847
7848     GCC enables this option by default.  If you want to force the
7849     compiler to check if a variable is referenced, regardless of
7850     whether or not optimization is turned on, use the
7851     '-fno-keep-static-consts' option.
7852
7853'-fmerge-constants'
7854     Attempt to merge identical constants (string constants and
7855     floating-point constants) across compilation units.
7856
7857     This option is the default for optimized compilation if the
7858     assembler and linker support it.  Use '-fno-merge-constants' to
7859     inhibit this behavior.
7860
7861     Enabled at levels '-O', '-O2', '-O3', '-Os'.
7862
7863'-fmerge-all-constants'
7864     Attempt to merge identical constants and identical variables.
7865
7866     This option implies '-fmerge-constants'.  In addition to
7867     '-fmerge-constants' this considers e.g. even constant initialized
7868     arrays or initialized constant variables with integral or
7869     floating-point types.  Languages like C or C++ require each
7870     variable, including multiple instances of the same variable in
7871     recursive calls, to have distinct locations, so using this option
7872     results in non-conforming behavior.
7873
7874'-fmodulo-sched'
7875     Perform swing modulo scheduling immediately before the first
7876     scheduling pass.  This pass looks at innermost loops and reorders
7877     their instructions by overlapping different iterations.
7878
7879'-fmodulo-sched-allow-regmoves'
7880     Perform more aggressive SMS-based modulo scheduling with register
7881     moves allowed.  By setting this flag certain anti-dependences edges
7882     are deleted, which triggers the generation of reg-moves based on
7883     the life-range analysis.  This option is effective only with
7884     '-fmodulo-sched' enabled.
7885
7886'-fno-branch-count-reg'
7887     Disable the optimization pass that scans for opportunities to use
7888     "decrement and branch" instructions on a count register instead of
7889     instruction sequences that decrement a register, compare it against
7890     zero, and then branch based upon the result.  This option is only
7891     meaningful on architectures that support such instructions, which
7892     include x86, PowerPC, IA-64 and S/390.  Note that the
7893     '-fno-branch-count-reg' option doesn't remove the decrement and
7894     branch instructions from the generated instruction stream
7895     introduced by other optimization passes.
7896
7897     The default is '-fbranch-count-reg' at '-O1' and higher, except for
7898     '-Og'.
7899
7900'-fno-function-cse'
7901     Do not put function addresses in registers; make each instruction
7902     that calls a constant function contain the function's address
7903     explicitly.
7904
7905     This option results in less efficient code, but some strange hacks
7906     that alter the assembler output may be confused by the
7907     optimizations performed when this option is not used.
7908
7909     The default is '-ffunction-cse'
7910
7911'-fno-zero-initialized-in-bss'
7912     If the target supports a BSS section, GCC by default puts variables
7913     that are initialized to zero into BSS.  This can save space in the
7914     resulting code.
7915
7916     This option turns off this behavior because some programs
7917     explicitly rely on variables going to the data section--e.g., so
7918     that the resulting executable can find the beginning of that
7919     section and/or make assumptions based on that.
7920
7921     The default is '-fzero-initialized-in-bss'.
7922
7923'-fthread-jumps'
7924     Perform optimizations that check to see if a jump branches to a
7925     location where another comparison subsumed by the first is found.
7926     If so, the first branch is redirected to either the destination of
7927     the second branch or a point immediately following it, depending on
7928     whether the condition is known to be true or false.
7929
7930     Enabled at levels '-O2', '-O3', '-Os'.
7931
7932'-fsplit-wide-types'
7933     When using a type that occupies multiple registers, such as 'long
7934     long' on a 32-bit system, split the registers apart and allocate
7935     them independently.  This normally generates better code for those
7936     types, but may make debugging more difficult.
7937
7938     Enabled at levels '-O', '-O2', '-O3', '-Os'.
7939
7940'-fcse-follow-jumps'
7941     In common subexpression elimination (CSE), scan through jump
7942     instructions when the target of the jump is not reached by any
7943     other path.  For example, when CSE encounters an 'if' statement
7944     with an 'else' clause, CSE follows the jump when the condition
7945     tested is false.
7946
7947     Enabled at levels '-O2', '-O3', '-Os'.
7948
7949'-fcse-skip-blocks'
7950     This is similar to '-fcse-follow-jumps', but causes CSE to follow
7951     jumps that conditionally skip over blocks.  When CSE encounters a
7952     simple 'if' statement with no else clause, '-fcse-skip-blocks'
7953     causes CSE to follow the jump around the body of the 'if'.
7954
7955     Enabled at levels '-O2', '-O3', '-Os'.
7956
7957'-frerun-cse-after-loop'
7958     Re-run common subexpression elimination after loop optimizations
7959     are performed.
7960
7961     Enabled at levels '-O2', '-O3', '-Os'.
7962
7963'-fgcse'
7964     Perform a global common subexpression elimination pass.  This pass
7965     also performs global constant and copy propagation.
7966
7967     _Note:_ When compiling a program using computed gotos, a GCC
7968     extension, you may get better run-time performance if you disable
7969     the global common subexpression elimination pass by adding
7970     '-fno-gcse' to the command line.
7971
7972     Enabled at levels '-O2', '-O3', '-Os'.
7973
7974'-fgcse-lm'
7975     When '-fgcse-lm' is enabled, global common subexpression
7976     elimination attempts to move loads that are only killed by stores
7977     into themselves.  This allows a loop containing a load/store
7978     sequence to be changed to a load outside the loop, and a copy/store
7979     within the loop.
7980
7981     Enabled by default when '-fgcse' is enabled.
7982
7983'-fgcse-sm'
7984     When '-fgcse-sm' is enabled, a store motion pass is run after
7985     global common subexpression elimination.  This pass attempts to
7986     move stores out of loops.  When used in conjunction with
7987     '-fgcse-lm', loops containing a load/store sequence can be changed
7988     to a load before the loop and a store after the loop.
7989
7990     Not enabled at any optimization level.
7991
7992'-fgcse-las'
7993     When '-fgcse-las' is enabled, the global common subexpression
7994     elimination pass eliminates redundant loads that come after stores
7995     to the same memory location (both partial and full redundancies).
7996
7997     Not enabled at any optimization level.
7998
7999'-fgcse-after-reload'
8000     When '-fgcse-after-reload' is enabled, a redundant load elimination
8001     pass is performed after reload.  The purpose of this pass is to
8002     clean up redundant spilling.
8003
8004     Enabled by '-fprofile-use' and '-fauto-profile'.
8005
8006'-faggressive-loop-optimizations'
8007     This option tells the loop optimizer to use language constraints to
8008     derive bounds for the number of iterations of a loop.  This assumes
8009     that loop code does not invoke undefined behavior by for example
8010     causing signed integer overflows or out-of-bound array accesses.
8011     The bounds for the number of iterations of a loop are used to guide
8012     loop unrolling and peeling and loop exit test optimizations.  This
8013     option is enabled by default.
8014
8015'-funconstrained-commons'
8016     This option tells the compiler that variables declared in common
8017     blocks (e.g. Fortran) may later be overridden with longer trailing
8018     arrays.  This prevents certain optimizations that depend on knowing
8019     the array bounds.
8020
8021'-fcrossjumping'
8022     Perform cross-jumping transformation.  This transformation unifies
8023     equivalent code and saves code size.  The resulting code may or may
8024     not perform better than without cross-jumping.
8025
8026     Enabled at levels '-O2', '-O3', '-Os'.
8027
8028'-fauto-inc-dec'
8029     Combine increments or decrements of addresses with memory accesses.
8030     This pass is always skipped on architectures that do not have
8031     instructions to support this.  Enabled by default at '-O' and
8032     higher on architectures that support this.
8033
8034'-fdce'
8035     Perform dead code elimination (DCE) on RTL.  Enabled by default at
8036     '-O' and higher.
8037
8038'-fdse'
8039     Perform dead store elimination (DSE) on RTL.  Enabled by default at
8040     '-O' and higher.
8041
8042'-fif-conversion'
8043     Attempt to transform conditional jumps into branch-less
8044     equivalents.  This includes use of conditional moves, min, max, set
8045     flags and abs instructions, and some tricks doable by standard
8046     arithmetics.  The use of conditional execution on chips where it is
8047     available is controlled by '-fif-conversion2'.
8048
8049     Enabled at levels '-O', '-O2', '-O3', '-Os', but not with '-Og'.
8050
8051'-fif-conversion2'
8052     Use conditional execution (where available) to transform
8053     conditional jumps into branch-less equivalents.
8054
8055     Enabled at levels '-O', '-O2', '-O3', '-Os', but not with '-Og'.
8056
8057'-fdeclone-ctor-dtor'
8058     The C++ ABI requires multiple entry points for constructors and
8059     destructors: one for a base subobject, one for a complete object,
8060     and one for a virtual destructor that calls operator delete
8061     afterwards.  For a hierarchy with virtual bases, the base and
8062     complete variants are clones, which means two copies of the
8063     function.  With this option, the base and complete variants are
8064     changed to be thunks that call a common implementation.
8065
8066     Enabled by '-Os'.
8067
8068'-fdelete-null-pointer-checks'
8069     Assume that programs cannot safely dereference null pointers, and
8070     that no code or data element resides at address zero.  This option
8071     enables simple constant folding optimizations at all optimization
8072     levels.  In addition, other optimization passes in GCC use this
8073     flag to control global dataflow analyses that eliminate useless
8074     checks for null pointers; these assume that a memory access to
8075     address zero always results in a trap, so that if a pointer is
8076     checked after it has already been dereferenced, it cannot be null.
8077
8078     Note however that in some environments this assumption is not true.
8079     Use '-fno-delete-null-pointer-checks' to disable this optimization
8080     for programs that depend on that behavior.
8081
8082     This option is enabled by default on most targets.  On Nios II ELF,
8083     it defaults to off.  On AVR, CR16, and MSP430, this option is
8084     completely disabled.
8085
8086     Passes that use the dataflow information are enabled independently
8087     at different optimization levels.
8088
8089'-fdevirtualize'
8090     Attempt to convert calls to virtual functions to direct calls.
8091     This is done both within a procedure and interprocedurally as part
8092     of indirect inlining ('-findirect-inlining') and interprocedural
8093     constant propagation ('-fipa-cp').  Enabled at levels '-O2', '-O3',
8094     '-Os'.
8095
8096'-fdevirtualize-speculatively'
8097     Attempt to convert calls to virtual functions to speculative direct
8098     calls.  Based on the analysis of the type inheritance graph,
8099     determine for a given call the set of likely targets.  If the set
8100     is small, preferably of size 1, change the call into a conditional
8101     deciding between direct and indirect calls.  The speculative calls
8102     enable more optimizations, such as inlining.  When they seem
8103     useless after further optimization, they are converted back into
8104     original form.
8105
8106'-fdevirtualize-at-ltrans'
8107     Stream extra information needed for aggressive devirtualization
8108     when running the link-time optimizer in local transformation mode.
8109     This option enables more devirtualization but significantly
8110     increases the size of streamed data.  For this reason it is
8111     disabled by default.
8112
8113'-fexpensive-optimizations'
8114     Perform a number of minor optimizations that are relatively
8115     expensive.
8116
8117     Enabled at levels '-O2', '-O3', '-Os'.
8118
8119'-free'
8120     Attempt to remove redundant extension instructions.  This is
8121     especially helpful for the x86-64 architecture, which implicitly
8122     zero-extends in 64-bit registers after writing to their lower
8123     32-bit half.
8124
8125     Enabled for Alpha, AArch64 and x86 at levels '-O2', '-O3', '-Os'.
8126
8127'-fno-lifetime-dse'
8128     In C++ the value of an object is only affected by changes within
8129     its lifetime: when the constructor begins, the object has an
8130     indeterminate value, and any changes during the lifetime of the
8131     object are dead when the object is destroyed.  Normally dead store
8132     elimination will take advantage of this; if your code relies on the
8133     value of the object storage persisting beyond the lifetime of the
8134     object, you can use this flag to disable this optimization.  To
8135     preserve stores before the constructor starts (e.g. because your
8136     operator new clears the object storage) but still treat the object
8137     as dead after the destructor you, can use '-flifetime-dse=1'.  The
8138     default behavior can be explicitly selected with
8139     '-flifetime-dse=2'.  '-flifetime-dse=0' is equivalent to
8140     '-fno-lifetime-dse'.
8141
8142'-flive-range-shrinkage'
8143     Attempt to decrease register pressure through register live range
8144     shrinkage.  This is helpful for fast processors with small or
8145     moderate size register sets.
8146
8147'-fira-algorithm=ALGORITHM'
8148     Use the specified coloring algorithm for the integrated register
8149     allocator.  The ALGORITHM argument can be 'priority', which
8150     specifies Chow's priority coloring, or 'CB', which specifies
8151     Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not
8152     implemented for all architectures, but for those targets that do
8153     support it, it is the default because it generates better code.
8154
8155'-fira-region=REGION'
8156     Use specified regions for the integrated register allocator.  The
8157     REGION argument should be one of the following:
8158
8159     'all'
8160          Use all loops as register allocation regions.  This can give
8161          the best results for machines with a small and/or irregular
8162          register set.
8163
8164     'mixed'
8165          Use all loops except for loops with small register pressure as
8166          the regions.  This value usually gives the best results in
8167          most cases and for most architectures, and is enabled by
8168          default when compiling with optimization for speed ('-O',
8169          '-O2', ...).
8170
8171     'one'
8172          Use all functions as a single region.  This typically results
8173          in the smallest code size, and is enabled by default for '-Os'
8174          or '-O0'.
8175
8176'-fira-hoist-pressure'
8177     Use IRA to evaluate register pressure in the code hoisting pass for
8178     decisions to hoist expressions.  This option usually results in
8179     smaller code, but it can slow the compiler down.
8180
8181     This option is enabled at level '-Os' for all targets.
8182
8183'-fira-loop-pressure'
8184     Use IRA to evaluate register pressure in loops for decisions to
8185     move loop invariants.  This option usually results in generation of
8186     faster and smaller code on machines with large register files (>=
8187     32 registers), but it can slow the compiler down.
8188
8189     This option is enabled at level '-O3' for some targets.
8190
8191'-fno-ira-share-save-slots'
8192     Disable sharing of stack slots used for saving call-used hard
8193     registers living through a call.  Each hard register gets a
8194     separate stack slot, and as a result function stack frames are
8195     larger.
8196
8197'-fno-ira-share-spill-slots'
8198     Disable sharing of stack slots allocated for pseudo-registers.
8199     Each pseudo-register that does not get a hard register gets a
8200     separate stack slot, and as a result function stack frames are
8201     larger.
8202
8203'-flra-remat'
8204     Enable CFG-sensitive rematerialization in LRA. Instead of loading
8205     values of spilled pseudos, LRA tries to rematerialize (recalculate)
8206     values if it is profitable.
8207
8208     Enabled at levels '-O2', '-O3', '-Os'.
8209
8210'-fdelayed-branch'
8211     If supported for the target machine, attempt to reorder
8212     instructions to exploit instruction slots available after delayed
8213     branch instructions.
8214
8215     Enabled at levels '-O', '-O2', '-O3', '-Os', but not at '-Og'.
8216
8217'-fschedule-insns'
8218     If supported for the target machine, attempt to reorder
8219     instructions to eliminate execution stalls due to required data
8220     being unavailable.  This helps machines that have slow floating
8221     point or memory load instructions by allowing other instructions to
8222     be issued until the result of the load or floating-point
8223     instruction is required.
8224
8225     Enabled at levels '-O2', '-O3'.
8226
8227'-fschedule-insns2'
8228     Similar to '-fschedule-insns', but requests an additional pass of
8229     instruction scheduling after register allocation has been done.
8230     This is especially useful on machines with a relatively small
8231     number of registers and where memory load instructions take more
8232     than one cycle.
8233
8234     Enabled at levels '-O2', '-O3', '-Os'.
8235
8236'-fno-sched-interblock'
8237     Disable instruction scheduling across basic blocks, which is
8238     normally enabled when scheduling before register allocation, i.e.
8239     with '-fschedule-insns' or at '-O2' or higher.
8240
8241'-fno-sched-spec'
8242     Disable speculative motion of non-load instructions, which is
8243     normally enabled when scheduling before register allocation, i.e.
8244     with '-fschedule-insns' or at '-O2' or higher.
8245
8246'-fsched-pressure'
8247     Enable register pressure sensitive insn scheduling before register
8248     allocation.  This only makes sense when scheduling before register
8249     allocation is enabled, i.e. with '-fschedule-insns' or at '-O2' or
8250     higher.  Usage of this option can improve the generated code and
8251     decrease its size by preventing register pressure increase above
8252     the number of available hard registers and subsequent spills in
8253     register allocation.
8254
8255'-fsched-spec-load'
8256     Allow speculative motion of some load instructions.  This only
8257     makes sense when scheduling before register allocation, i.e. with
8258     '-fschedule-insns' or at '-O2' or higher.
8259
8260'-fsched-spec-load-dangerous'
8261     Allow speculative motion of more load instructions.  This only
8262     makes sense when scheduling before register allocation, i.e. with
8263     '-fschedule-insns' or at '-O2' or higher.
8264
8265'-fsched-stalled-insns'
8266'-fsched-stalled-insns=N'
8267     Define how many insns (if any) can be moved prematurely from the
8268     queue of stalled insns into the ready list during the second
8269     scheduling pass.  '-fno-sched-stalled-insns' means that no insns
8270     are moved prematurely, '-fsched-stalled-insns=0' means there is no
8271     limit on how many queued insns can be moved prematurely.
8272     '-fsched-stalled-insns' without a value is equivalent to
8273     '-fsched-stalled-insns=1'.
8274
8275'-fsched-stalled-insns-dep'
8276'-fsched-stalled-insns-dep=N'
8277     Define how many insn groups (cycles) are examined for a dependency
8278     on a stalled insn that is a candidate for premature removal from
8279     the queue of stalled insns.  This has an effect only during the
8280     second scheduling pass, and only if '-fsched-stalled-insns' is
8281     used.  '-fno-sched-stalled-insns-dep' is equivalent to
8282     '-fsched-stalled-insns-dep=0'.  '-fsched-stalled-insns-dep' without
8283     a value is equivalent to '-fsched-stalled-insns-dep=1'.
8284
8285'-fsched2-use-superblocks'
8286     When scheduling after register allocation, use superblock
8287     scheduling.  This allows motion across basic block boundaries,
8288     resulting in faster schedules.  This option is experimental, as not
8289     all machine descriptions used by GCC model the CPU closely enough
8290     to avoid unreliable results from the algorithm.
8291
8292     This only makes sense when scheduling after register allocation,
8293     i.e. with '-fschedule-insns2' or at '-O2' or higher.
8294
8295'-fsched-group-heuristic'
8296     Enable the group heuristic in the scheduler.  This heuristic favors
8297     the instruction that belongs to a schedule group.  This is enabled
8298     by default when scheduling is enabled, i.e. with '-fschedule-insns'
8299     or '-fschedule-insns2' or at '-O2' or higher.
8300
8301'-fsched-critical-path-heuristic'
8302     Enable the critical-path heuristic in the scheduler.  This
8303     heuristic favors instructions on the critical path.  This is
8304     enabled by default when scheduling is enabled, i.e. with
8305     '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or higher.
8306
8307'-fsched-spec-insn-heuristic'
8308     Enable the speculative instruction heuristic in the scheduler.
8309     This heuristic favors speculative instructions with greater
8310     dependency weakness.  This is enabled by default when scheduling is
8311     enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
8312     '-O2' or higher.
8313
8314'-fsched-rank-heuristic'
8315     Enable the rank heuristic in the scheduler.  This heuristic favors
8316     the instruction belonging to a basic block with greater size or
8317     frequency.  This is enabled by default when scheduling is enabled,
8318     i.e. with '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or
8319     higher.
8320
8321'-fsched-last-insn-heuristic'
8322     Enable the last-instruction heuristic in the scheduler.  This
8323     heuristic favors the instruction that is less dependent on the last
8324     instruction scheduled.  This is enabled by default when scheduling
8325     is enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or
8326     at '-O2' or higher.
8327
8328'-fsched-dep-count-heuristic'
8329     Enable the dependent-count heuristic in the scheduler.  This
8330     heuristic favors the instruction that has more instructions
8331     depending on it.  This is enabled by default when scheduling is
8332     enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
8333     '-O2' or higher.
8334
8335'-freschedule-modulo-scheduled-loops'
8336     Modulo scheduling is performed before traditional scheduling.  If a
8337     loop is modulo scheduled, later scheduling passes may change its
8338     schedule.  Use this option to control that behavior.
8339
8340'-fselective-scheduling'
8341     Schedule instructions using selective scheduling algorithm.
8342     Selective scheduling runs instead of the first scheduler pass.
8343
8344'-fselective-scheduling2'
8345     Schedule instructions using selective scheduling algorithm.
8346     Selective scheduling runs instead of the second scheduler pass.
8347
8348'-fsel-sched-pipelining'
8349     Enable software pipelining of innermost loops during selective
8350     scheduling.  This option has no effect unless one of
8351     '-fselective-scheduling' or '-fselective-scheduling2' is turned on.
8352
8353'-fsel-sched-pipelining-outer-loops'
8354     When pipelining loops during selective scheduling, also pipeline
8355     outer loops.  This option has no effect unless
8356     '-fsel-sched-pipelining' is turned on.
8357
8358'-fsemantic-interposition'
8359     Some object formats, like ELF, allow interposing of symbols by the
8360     dynamic linker.  This means that for symbols exported from the DSO,
8361     the compiler cannot perform interprocedural propagation, inlining
8362     and other optimizations in anticipation that the function or
8363     variable in question may change.  While this feature is useful, for
8364     example, to rewrite memory allocation functions by a debugging
8365     implementation, it is expensive in the terms of code quality.  With
8366     '-fno-semantic-interposition' the compiler assumes that if
8367     interposition happens for functions the overwriting function will
8368     have precisely the same semantics (and side effects).  Similarly if
8369     interposition happens for variables, the constructor of the
8370     variable will be the same.  The flag has no effect for functions
8371     explicitly declared inline (where it is never allowed for
8372     interposition to change semantics) and for symbols explicitly
8373     declared weak.
8374
8375'-fshrink-wrap'
8376     Emit function prologues only before parts of the function that need
8377     it, rather than at the top of the function.  This flag is enabled
8378     by default at '-O' and higher.
8379
8380'-fshrink-wrap-separate'
8381     Shrink-wrap separate parts of the prologue and epilogue separately,
8382     so that those parts are only executed when needed.  This option is
8383     on by default, but has no effect unless '-fshrink-wrap' is also
8384     turned on and the target supports this.
8385
8386'-fcaller-saves'
8387     Enable allocation of values to registers that are clobbered by
8388     function calls, by emitting extra instructions to save and restore
8389     the registers around such calls.  Such allocation is done only when
8390     it seems to result in better code.
8391
8392     This option is always enabled by default on certain machines,
8393     usually those which have no call-preserved registers to use
8394     instead.
8395
8396     Enabled at levels '-O2', '-O3', '-Os'.
8397
8398'-fcombine-stack-adjustments'
8399     Tracks stack adjustments (pushes and pops) and stack memory
8400     references and then tries to find ways to combine them.
8401
8402     Enabled by default at '-O1' and higher.
8403
8404'-fipa-ra'
8405     Use caller save registers for allocation if those registers are not
8406     used by any called function.  In that case it is not necessary to
8407     save and restore them around calls.  This is only possible if
8408     called functions are part of same compilation unit as current
8409     function and they are compiled before it.
8410
8411     Enabled at levels '-O2', '-O3', '-Os', however the option is
8412     disabled if generated code will be instrumented for profiling
8413     ('-p', or '-pg') or if callee's register usage cannot be known
8414     exactly (this happens on targets that do not expose prologues and
8415     epilogues in RTL).
8416
8417'-fconserve-stack'
8418     Attempt to minimize stack usage.  The compiler attempts to use less
8419     stack space, even if that makes the program slower.  This option
8420     implies setting the 'large-stack-frame' parameter to 100 and the
8421     'large-stack-frame-growth' parameter to 400.
8422
8423'-ftree-reassoc'
8424     Perform reassociation on trees.  This flag is enabled by default at
8425     '-O' and higher.
8426
8427'-fcode-hoisting'
8428     Perform code hoisting.  Code hoisting tries to move the evaluation
8429     of expressions executed on all paths to the function exit as early
8430     as possible.  This is especially useful as a code size
8431     optimization, but it often helps for code speed as well.  This flag
8432     is enabled by default at '-O2' and higher.
8433
8434'-ftree-pre'
8435     Perform partial redundancy elimination (PRE) on trees.  This flag
8436     is enabled by default at '-O2' and '-O3'.
8437
8438'-ftree-partial-pre'
8439     Make partial redundancy elimination (PRE) more aggressive.  This
8440     flag is enabled by default at '-O3'.
8441
8442'-ftree-forwprop'
8443     Perform forward propagation on trees.  This flag is enabled by
8444     default at '-O' and higher.
8445
8446'-ftree-fre'
8447     Perform full redundancy elimination (FRE) on trees.  The difference
8448     between FRE and PRE is that FRE only considers expressions that are
8449     computed on all paths leading to the redundant computation.  This
8450     analysis is faster than PRE, though it exposes fewer redundancies.
8451     This flag is enabled by default at '-O' and higher.
8452
8453'-ftree-phiprop'
8454     Perform hoisting of loads from conditional pointers on trees.  This
8455     pass is enabled by default at '-O' and higher.
8456
8457'-fhoist-adjacent-loads'
8458     Speculatively hoist loads from both branches of an if-then-else if
8459     the loads are from adjacent locations in the same structure and the
8460     target architecture has a conditional move instruction.  This flag
8461     is enabled by default at '-O2' and higher.
8462
8463'-ftree-copy-prop'
8464     Perform copy propagation on trees.  This pass eliminates
8465     unnecessary copy operations.  This flag is enabled by default at
8466     '-O' and higher.
8467
8468'-fipa-pure-const'
8469     Discover which functions are pure or constant.  Enabled by default
8470     at '-O' and higher.
8471
8472'-fipa-reference'
8473     Discover which static variables do not escape the compilation unit.
8474     Enabled by default at '-O' and higher.
8475
8476'-fipa-reference-addressable'
8477     Discover read-only, write-only and non-addressable static
8478     variables.  Enabled by default at '-O' and higher.
8479
8480'-fipa-stack-alignment'
8481     Reduce stack alignment on call sites if possible.  Enabled by
8482     default.
8483
8484'-fipa-pta'
8485     Perform interprocedural pointer analysis and interprocedural
8486     modification and reference analysis.  This option can cause
8487     excessive memory and compile-time usage on large compilation units.
8488     It is not enabled by default at any optimization level.
8489
8490'-fipa-profile'
8491     Perform interprocedural profile propagation.  The functions called
8492     only from cold functions are marked as cold.  Also functions
8493     executed once (such as 'cold', 'noreturn', static constructors or
8494     destructors) are identified.  Cold functions and loop less parts of
8495     functions executed once are then optimized for size.  Enabled by
8496     default at '-O' and higher.
8497
8498'-fipa-cp'
8499     Perform interprocedural constant propagation.  This optimization
8500     analyzes the program to determine when values passed to functions
8501     are constants and then optimizes accordingly.  This optimization
8502     can substantially increase performance if the application has
8503     constants passed to functions.  This flag is enabled by default at
8504     '-O2', '-Os' and '-O3'.  It is also enabled by '-fprofile-use' and
8505     '-fauto-profile'.
8506
8507'-fipa-cp-clone'
8508     Perform function cloning to make interprocedural constant
8509     propagation stronger.  When enabled, interprocedural constant
8510     propagation performs function cloning when externally visible
8511     function can be called with constant arguments.  Because this
8512     optimization can create multiple copies of functions, it may
8513     significantly increase code size (see '--param
8514     ipcp-unit-growth=VALUE').  This flag is enabled by default at
8515     '-O3'.  It is also enabled by '-fprofile-use' and '-fauto-profile'.
8516
8517'-fipa-bit-cp'
8518     When enabled, perform interprocedural bitwise constant propagation.
8519     This flag is enabled by default at '-O2' and by '-fprofile-use' and
8520     '-fauto-profile'.  It requires that '-fipa-cp' is enabled.
8521
8522'-fipa-vrp'
8523     When enabled, perform interprocedural propagation of value ranges.
8524     This flag is enabled by default at '-O2'.  It requires that
8525     '-fipa-cp' is enabled.
8526
8527'-fipa-icf'
8528     Perform Identical Code Folding for functions and read-only
8529     variables.  The optimization reduces code size and may disturb
8530     unwind stacks by replacing a function by equivalent one with a
8531     different name.  The optimization works more effectively with
8532     link-time optimization enabled.
8533
8534     Although the behavior is similar to the Gold Linker's ICF
8535     optimization, GCC ICF works on different levels and thus the
8536     optimizations are not same - there are equivalences that are found
8537     only by GCC and equivalences found only by Gold.
8538
8539     This flag is enabled by default at '-O2' and '-Os'.
8540
8541'-flive-patching=LEVEL'
8542     Control GCC's optimizations to produce output suitable for
8543     live-patching.
8544
8545     If the compiler's optimization uses a function's body or
8546     information extracted from its body to optimize/change another
8547     function, the latter is called an impacted function of the former.
8548     If a function is patched, its impacted functions should be patched
8549     too.
8550
8551     The impacted functions are determined by the compiler's
8552     interprocedural optimizations.  For example, a caller is impacted
8553     when inlining a function into its caller, cloning a function and
8554     changing its caller to call this new clone, or extracting a
8555     function's pureness/constness information to optimize its direct or
8556     indirect callers, etc.
8557
8558     Usually, the more IPA optimizations enabled, the larger the number
8559     of impacted functions for each function.  In order to control the
8560     number of impacted functions and more easily compute the list of
8561     impacted function, IPA optimizations can be partially enabled at
8562     two different levels.
8563
8564     The LEVEL argument should be one of the following:
8565
8566     'inline-clone'
8567
8568          Only enable inlining and cloning optimizations, which includes
8569          inlining, cloning, interprocedural scalar replacement of
8570          aggregates and partial inlining.  As a result, when patching a
8571          function, all its callers and its clones' callers are
8572          impacted, therefore need to be patched as well.
8573
8574          '-flive-patching=inline-clone' disables the following
8575          optimization flags:
8576               -fwhole-program  -fipa-pta  -fipa-reference  -fipa-ra
8577               -fipa-icf  -fipa-icf-functions  -fipa-icf-variables
8578               -fipa-bit-cp  -fipa-vrp  -fipa-pure-const  -fipa-reference-addressable
8579               -fipa-stack-alignment
8580
8581     'inline-only-static'
8582
8583          Only enable inlining of static functions.  As a result, when
8584          patching a static function, all its callers are impacted and
8585          so need to be patched as well.
8586
8587          In addition to all the flags that
8588          '-flive-patching=inline-clone' disables,
8589          '-flive-patching=inline-only-static' disables the following
8590          additional optimization flags:
8591               -fipa-cp-clone  -fipa-sra  -fpartial-inlining  -fipa-cp
8592
8593     When '-flive-patching' is specified without any value, the default
8594     value is INLINE-CLONE.
8595
8596     This flag is disabled by default.
8597
8598     Note that '-flive-patching' is not supported with link-time
8599     optimization ('-flto').
8600
8601'-fisolate-erroneous-paths-dereference'
8602     Detect paths that trigger erroneous or undefined behavior due to
8603     dereferencing a null pointer.  Isolate those paths from the main
8604     control flow and turn the statement with erroneous or undefined
8605     behavior into a trap.  This flag is enabled by default at '-O2' and
8606     higher and depends on '-fdelete-null-pointer-checks' also being
8607     enabled.
8608
8609'-fisolate-erroneous-paths-attribute'
8610     Detect paths that trigger erroneous or undefined behavior due to a
8611     null value being used in a way forbidden by a 'returns_nonnull' or
8612     'nonnull' attribute.  Isolate those paths from the main control
8613     flow and turn the statement with erroneous or undefined behavior
8614     into a trap.  This is not currently enabled, but may be enabled by
8615     '-O2' in the future.
8616
8617'-ftree-sink'
8618     Perform forward store motion on trees.  This flag is enabled by
8619     default at '-O' and higher.
8620
8621'-ftree-bit-ccp'
8622     Perform sparse conditional bit constant propagation on trees and
8623     propagate pointer alignment information.  This pass only operates
8624     on local scalar variables and is enabled by default at '-O1' and
8625     higher, except for '-Og'.  It requires that '-ftree-ccp' is
8626     enabled.
8627
8628'-ftree-ccp'
8629     Perform sparse conditional constant propagation (CCP) on trees.
8630     This pass only operates on local scalar variables and is enabled by
8631     default at '-O' and higher.
8632
8633'-fssa-backprop'
8634     Propagate information about uses of a value up the definition chain
8635     in order to simplify the definitions.  For example, this pass
8636     strips sign operations if the sign of a value never matters.  The
8637     flag is enabled by default at '-O' and higher.
8638
8639'-fssa-phiopt'
8640     Perform pattern matching on SSA PHI nodes to optimize conditional
8641     code.  This pass is enabled by default at '-O1' and higher, except
8642     for '-Og'.
8643
8644'-ftree-switch-conversion'
8645     Perform conversion of simple initializations in a switch to
8646     initializations from a scalar array.  This flag is enabled by
8647     default at '-O2' and higher.
8648
8649'-ftree-tail-merge'
8650     Look for identical code sequences.  When found, replace one with a
8651     jump to the other.  This optimization is known as tail merging or
8652     cross jumping.  This flag is enabled by default at '-O2' and
8653     higher.  The compilation time in this pass can be limited using
8654     'max-tail-merge-comparisons' parameter and
8655     'max-tail-merge-iterations' parameter.
8656
8657'-ftree-dce'
8658     Perform dead code elimination (DCE) on trees.  This flag is enabled
8659     by default at '-O' and higher.
8660
8661'-ftree-builtin-call-dce'
8662     Perform conditional dead code elimination (DCE) for calls to
8663     built-in functions that may set 'errno' but are otherwise free of
8664     side effects.  This flag is enabled by default at '-O2' and higher
8665     if '-Os' is not also specified.
8666
8667'-ftree-dominator-opts'
8668     Perform a variety of simple scalar cleanups (constant/copy
8669     propagation, redundancy elimination, range propagation and
8670     expression simplification) based on a dominator tree traversal.
8671     This also performs jump threading (to reduce jumps to jumps).  This
8672     flag is enabled by default at '-O' and higher.
8673
8674'-ftree-dse'
8675     Perform dead store elimination (DSE) on trees.  A dead store is a
8676     store into a memory location that is later overwritten by another
8677     store without any intervening loads.  In this case the earlier
8678     store can be deleted.  This flag is enabled by default at '-O' and
8679     higher.
8680
8681'-ftree-ch'
8682     Perform loop header copying on trees.  This is beneficial since it
8683     increases effectiveness of code motion optimizations.  It also
8684     saves one jump.  This flag is enabled by default at '-O' and
8685     higher.  It is not enabled for '-Os', since it usually increases
8686     code size.
8687
8688'-ftree-loop-optimize'
8689     Perform loop optimizations on trees.  This flag is enabled by
8690     default at '-O' and higher.
8691
8692'-ftree-loop-linear'
8693'-floop-strip-mine'
8694'-floop-block'
8695     Perform loop nest optimizations.  Same as '-floop-nest-optimize'.
8696     To use this code transformation, GCC has to be configured with
8697     '--with-isl' to enable the Graphite loop transformation
8698     infrastructure.
8699
8700'-fgraphite-identity'
8701     Enable the identity transformation for graphite.  For every SCoP we
8702     generate the polyhedral representation and transform it back to
8703     gimple.  Using '-fgraphite-identity' we can check the costs or
8704     benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
8705     minimal optimizations are also performed by the code generator isl,
8706     like index splitting and dead code elimination in loops.
8707
8708'-floop-nest-optimize'
8709     Enable the isl based loop nest optimizer.  This is a generic loop
8710     nest optimizer based on the Pluto optimization algorithms.  It
8711     calculates a loop structure optimized for data-locality and
8712     parallelism.  This option is experimental.
8713
8714'-floop-parallelize-all'
8715     Use the Graphite data dependence analysis to identify loops that
8716     can be parallelized.  Parallelize all the loops that can be
8717     analyzed to not contain loop carried dependences without checking
8718     that it is profitable to parallelize the loops.
8719
8720'-ftree-coalesce-vars'
8721     While transforming the program out of the SSA representation,
8722     attempt to reduce copying by coalescing versions of different
8723     user-defined variables, instead of just compiler temporaries.  This
8724     may severely limit the ability to debug an optimized program
8725     compiled with '-fno-var-tracking-assignments'.  In the negated
8726     form, this flag prevents SSA coalescing of user variables.  This
8727     option is enabled by default if optimization is enabled, and it
8728     does very little otherwise.
8729
8730'-ftree-loop-if-convert'
8731     Attempt to transform conditional jumps in the innermost loops to
8732     branch-less equivalents.  The intent is to remove control-flow from
8733     the innermost loops in order to improve the ability of the
8734     vectorization pass to handle these loops.  This is enabled by
8735     default if vectorization is enabled.
8736
8737'-ftree-loop-distribution'
8738     Perform loop distribution.  This flag can improve cache performance
8739     on big loop bodies and allow further loop optimizations, like
8740     parallelization or vectorization, to take place.  For example, the
8741     loop
8742          DO I = 1, N
8743            A(I) = B(I) + C
8744            D(I) = E(I) * F
8745          ENDDO
8746     is transformed to
8747          DO I = 1, N
8748             A(I) = B(I) + C
8749          ENDDO
8750          DO I = 1, N
8751             D(I) = E(I) * F
8752          ENDDO
8753     This flag is enabled by default at '-O3'.  It is also enabled by
8754     '-fprofile-use' and '-fauto-profile'.
8755
8756'-ftree-loop-distribute-patterns'
8757     Perform loop distribution of patterns that can be code generated
8758     with calls to a library.  This flag is enabled by default at '-O3',
8759     and by '-fprofile-use' and '-fauto-profile'.
8760
8761     This pass distributes the initialization loops and generates a call
8762     to memset zero.  For example, the loop
8763          DO I = 1, N
8764            A(I) = 0
8765            B(I) = A(I) + I
8766          ENDDO
8767     is transformed to
8768          DO I = 1, N
8769             A(I) = 0
8770          ENDDO
8771          DO I = 1, N
8772             B(I) = A(I) + I
8773          ENDDO
8774     and the initialization loop is transformed into a call to memset
8775     zero.  This flag is enabled by default at '-O3'.  It is also
8776     enabled by '-fprofile-use' and '-fauto-profile'.
8777
8778'-floop-interchange'
8779     Perform loop interchange outside of graphite.  This flag can
8780     improve cache performance on loop nest and allow further loop
8781     optimizations, like vectorization, to take place.  For example, the
8782     loop
8783          for (int i = 0; i < N; i++)
8784            for (int j = 0; j < N; j++)
8785              for (int k = 0; k < N; k++)
8786                c[i][j] = c[i][j] + a[i][k]*b[k][j];
8787     is transformed to
8788          for (int i = 0; i < N; i++)
8789            for (int k = 0; k < N; k++)
8790              for (int j = 0; j < N; j++)
8791                c[i][j] = c[i][j] + a[i][k]*b[k][j];
8792     This flag is enabled by default at '-O3'.  It is also enabled by
8793     '-fprofile-use' and '-fauto-profile'.
8794
8795'-floop-unroll-and-jam'
8796     Apply unroll and jam transformations on feasible loops.  In a loop
8797     nest this unrolls the outer loop by some factor and fuses the
8798     resulting multiple inner loops.  This flag is enabled by default at
8799     '-O3'.  It is also enabled by '-fprofile-use' and '-fauto-profile'.
8800
8801'-ftree-loop-im'
8802     Perform loop invariant motion on trees.  This pass moves only
8803     invariants that are hard to handle at RTL level (function calls,
8804     operations that expand to nontrivial sequences of insns).  With
8805     '-funswitch-loops' it also moves operands of conditions that are
8806     invariant out of the loop, so that we can use just trivial
8807     invariantness analysis in loop unswitching.  The pass also includes
8808     store motion.
8809
8810'-ftree-loop-ivcanon'
8811     Create a canonical counter for number of iterations in loops for
8812     which determining number of iterations requires complicated
8813     analysis.  Later optimizations then may determine the number
8814     easily.  Useful especially in connection with unrolling.
8815
8816'-ftree-scev-cprop'
8817     Perform final value replacement.  If a variable is modified in a
8818     loop in such a way that its value when exiting the loop can be
8819     determined using only its initial value and the number of loop
8820     iterations, replace uses of the final value by such a computation,
8821     provided it is sufficiently cheap.  This reduces data dependencies
8822     and may allow further simplifications.  Enabled by default at '-O'
8823     and higher.
8824
8825'-fivopts'
8826     Perform induction variable optimizations (strength reduction,
8827     induction variable merging and induction variable elimination) on
8828     trees.
8829
8830'-ftree-parallelize-loops=n'
8831     Parallelize loops, i.e., split their iteration space to run in n
8832     threads.  This is only possible for loops whose iterations are
8833     independent and can be arbitrarily reordered.  The optimization is
8834     only profitable on multiprocessor machines, for loops that are
8835     CPU-intensive, rather than constrained e.g. by memory bandwidth.
8836     This option implies '-pthread', and thus is only supported on
8837     targets that have support for '-pthread'.
8838
8839'-ftree-pta'
8840     Perform function-local points-to analysis on trees.  This flag is
8841     enabled by default at '-O1' and higher, except for '-Og'.
8842
8843'-ftree-sra'
8844     Perform scalar replacement of aggregates.  This pass replaces
8845     structure references with scalars to prevent committing structures
8846     to memory too early.  This flag is enabled by default at '-O1' and
8847     higher, except for '-Og'.
8848
8849'-fstore-merging'
8850     Perform merging of narrow stores to consecutive memory addresses.
8851     This pass merges contiguous stores of immediate values narrower
8852     than a word into fewer wider stores to reduce the number of
8853     instructions.  This is enabled by default at '-O2' and higher as
8854     well as '-Os'.
8855
8856'-ftree-ter'
8857     Perform temporary expression replacement during the SSA->normal
8858     phase.  Single use/single def temporaries are replaced at their use
8859     location with their defining expression.  This results in
8860     non-GIMPLE code, but gives the expanders much more complex trees to
8861     work on resulting in better RTL generation.  This is enabled by
8862     default at '-O' and higher.
8863
8864'-ftree-slsr'
8865     Perform straight-line strength reduction on trees.  This recognizes
8866     related expressions involving multiplications and replaces them by
8867     less expensive calculations when possible.  This is enabled by
8868     default at '-O' and higher.
8869
8870'-ftree-vectorize'
8871     Perform vectorization on trees.  This flag enables
8872     '-ftree-loop-vectorize' and '-ftree-slp-vectorize' if not
8873     explicitly specified.
8874
8875'-ftree-loop-vectorize'
8876     Perform loop vectorization on trees.  This flag is enabled by
8877     default at '-O3' and by '-ftree-vectorize', '-fprofile-use', and
8878     '-fauto-profile'.
8879
8880'-ftree-slp-vectorize'
8881     Perform basic block vectorization on trees.  This flag is enabled
8882     by default at '-O3' and by '-ftree-vectorize', '-fprofile-use', and
8883     '-fauto-profile'.
8884
8885'-fvect-cost-model=MODEL'
8886     Alter the cost model used for vectorization.  The MODEL argument
8887     should be one of 'unlimited', 'dynamic' or 'cheap'.  With the
8888     'unlimited' model the vectorized code-path is assumed to be
8889     profitable while with the 'dynamic' model a runtime check guards
8890     the vectorized code-path to enable it only for iteration counts
8891     that will likely execute faster than when executing the original
8892     scalar loop.  The 'cheap' model disables vectorization of loops
8893     where doing so would be cost prohibitive for example due to
8894     required runtime checks for data dependence or alignment but
8895     otherwise is equal to the 'dynamic' model.  The default cost model
8896     depends on other optimization flags and is either 'dynamic' or
8897     'cheap'.
8898
8899'-fsimd-cost-model=MODEL'
8900     Alter the cost model used for vectorization of loops marked with
8901     the OpenMP simd directive.  The MODEL argument should be one of
8902     'unlimited', 'dynamic', 'cheap'.  All values of MODEL have the same
8903     meaning as described in '-fvect-cost-model' and by default a cost
8904     model defined with '-fvect-cost-model' is used.
8905
8906'-ftree-vrp'
8907     Perform Value Range Propagation on trees.  This is similar to the
8908     constant propagation pass, but instead of values, ranges of values
8909     are propagated.  This allows the optimizers to remove unnecessary
8910     range checks like array bound checks and null pointer checks.  This
8911     is enabled by default at '-O2' and higher.  Null pointer check
8912     elimination is only done if '-fdelete-null-pointer-checks' is
8913     enabled.
8914
8915'-fsplit-paths'
8916     Split paths leading to loop backedges.  This can improve dead code
8917     elimination and common subexpression elimination.  This is enabled
8918     by default at '-O3' and above.
8919
8920'-fsplit-ivs-in-unroller'
8921     Enables expression of values of induction variables in later
8922     iterations of the unrolled loop using the value in the first
8923     iteration.  This breaks long dependency chains, thus improving
8924     efficiency of the scheduling passes.
8925
8926     A combination of '-fweb' and CSE is often sufficient to obtain the
8927     same effect.  However, that is not reliable in cases where the loop
8928     body is more complicated than a single basic block.  It also does
8929     not work at all on some architectures due to restrictions in the
8930     CSE pass.
8931
8932     This optimization is enabled by default.
8933
8934'-fvariable-expansion-in-unroller'
8935     With this option, the compiler creates multiple copies of some
8936     local variables when unrolling a loop, which can result in superior
8937     code.
8938
8939'-fpartial-inlining'
8940     Inline parts of functions.  This option has any effect only when
8941     inlining itself is turned on by the '-finline-functions' or
8942     '-finline-small-functions' options.
8943
8944     Enabled at levels '-O2', '-O3', '-Os'.
8945
8946'-fpredictive-commoning'
8947     Perform predictive commoning optimization, i.e., reusing
8948     computations (especially memory loads and stores) performed in
8949     previous iterations of loops.
8950
8951     This option is enabled at level '-O3'.  It is also enabled by
8952     '-fprofile-use' and '-fauto-profile'.
8953
8954'-fprefetch-loop-arrays'
8955     If supported by the target machine, generate instructions to
8956     prefetch memory to improve the performance of loops that access
8957     large arrays.
8958
8959     This option may generate better or worse code; results are highly
8960     dependent on the structure of loops within the source code.
8961
8962     Disabled at level '-Os'.
8963
8964'-fno-printf-return-value'
8965     Do not substitute constants for known return value of formatted
8966     output functions such as 'sprintf', 'snprintf', 'vsprintf', and
8967     'vsnprintf' (but not 'printf' of 'fprintf').  This transformation
8968     allows GCC to optimize or even eliminate branches based on the
8969     known return value of these functions called with arguments that
8970     are either constant, or whose values are known to be in a range
8971     that makes determining the exact return value possible.  For
8972     example, when '-fprintf-return-value' is in effect, both the branch
8973     and the body of the 'if' statement (but not the call to 'snprint')
8974     can be optimized away when 'i' is a 32-bit or smaller integer
8975     because the return value is guaranteed to be at most 8.
8976
8977          char buf[9];
8978          if (snprintf (buf, "%08x", i) >= sizeof buf)
8979            ...
8980
8981     The '-fprintf-return-value' option relies on other optimizations
8982     and yields best results with '-O2' and above.  It works in tandem
8983     with the '-Wformat-overflow' and '-Wformat-truncation' options.
8984     The '-fprintf-return-value' option is enabled by default.
8985
8986'-fno-peephole'
8987'-fno-peephole2'
8988     Disable any machine-specific peephole optimizations.  The
8989     difference between '-fno-peephole' and '-fno-peephole2' is in how
8990     they are implemented in the compiler; some targets use one, some
8991     use the other, a few use both.
8992
8993     '-fpeephole' is enabled by default.  '-fpeephole2' enabled at
8994     levels '-O2', '-O3', '-Os'.
8995
8996'-fno-guess-branch-probability'
8997     Do not guess branch probabilities using heuristics.
8998
8999     GCC uses heuristics to guess branch probabilities if they are not
9000     provided by profiling feedback ('-fprofile-arcs').  These
9001     heuristics are based on the control flow graph.  If some branch
9002     probabilities are specified by '__builtin_expect', then the
9003     heuristics are used to guess branch probabilities for the rest of
9004     the control flow graph, taking the '__builtin_expect' info into
9005     account.  The interactions between the heuristics and
9006     '__builtin_expect' can be complex, and in some cases, it may be
9007     useful to disable the heuristics so that the effects of
9008     '__builtin_expect' are easier to understand.
9009
9010     It is also possible to specify expected probability of the
9011     expression with '__builtin_expect_with_probability' built-in
9012     function.
9013
9014     The default is '-fguess-branch-probability' at levels '-O', '-O2',
9015     '-O3', '-Os'.
9016
9017'-freorder-blocks'
9018     Reorder basic blocks in the compiled function in order to reduce
9019     number of taken branches and improve code locality.
9020
9021     Enabled at levels '-O', '-O2', '-O3', '-Os'.
9022
9023'-freorder-blocks-algorithm=ALGORITHM'
9024     Use the specified algorithm for basic block reordering.  The
9025     ALGORITHM argument can be 'simple', which does not increase code
9026     size (except sometimes due to secondary effects like alignment), or
9027     'stc', the "software trace cache" algorithm, which tries to put all
9028     often executed code together, minimizing the number of branches
9029     executed by making extra copies of code.
9030
9031     The default is 'simple' at levels '-O', '-Os', and 'stc' at levels
9032     '-O2', '-O3'.
9033
9034'-freorder-blocks-and-partition'
9035     In addition to reordering basic blocks in the compiled function, in
9036     order to reduce number of taken branches, partitions hot and cold
9037     basic blocks into separate sections of the assembly and '.o' files,
9038     to improve paging and cache locality performance.
9039
9040     This optimization is automatically turned off in the presence of
9041     exception handling or unwind tables (on targets using
9042     setjump/longjump or target specific scheme), for linkonce sections,
9043     for functions with a user-defined section attribute and on any
9044     architecture that does not support named sections.  When
9045     '-fsplit-stack' is used this option is not enabled by default (to
9046     avoid linker errors), but may be enabled explicitly (if using a
9047     working linker).
9048
9049     Enabled for x86 at levels '-O2', '-O3', '-Os'.
9050
9051'-freorder-functions'
9052     Reorder functions in the object file in order to improve code
9053     locality.  This is implemented by using special subsections
9054     '.text.hot' for most frequently executed functions and
9055     '.text.unlikely' for unlikely executed functions.  Reordering is
9056     done by the linker so object file format must support named
9057     sections and linker must place them in a reasonable way.
9058
9059     This option isn't effective unless you either provide profile
9060     feedback (see '-fprofile-arcs' for details) or manually annotate
9061     functions with 'hot' or 'cold' attributes (*note Common Function
9062     Attributes::).
9063
9064     Enabled at levels '-O2', '-O3', '-Os'.
9065
9066'-fstrict-aliasing'
9067     Allow the compiler to assume the strictest aliasing rules
9068     applicable to the language being compiled.  For C (and C++), this
9069     activates optimizations based on the type of expressions.  In
9070     particular, an object of one type is assumed never to reside at the
9071     same address as an object of a different type, unless the types are
9072     almost the same.  For example, an 'unsigned int' can alias an
9073     'int', but not a 'void*' or a 'double'.  A character type may alias
9074     any other type.
9075
9076     Pay special attention to code like this:
9077          union a_union {
9078            int i;
9079            double d;
9080          };
9081
9082          int f() {
9083            union a_union t;
9084            t.d = 3.0;
9085            return t.i;
9086          }
9087     The practice of reading from a different union member than the one
9088     most recently written to (called "type-punning") is common.  Even
9089     with '-fstrict-aliasing', type-punning is allowed, provided the
9090     memory is accessed through the union type.  So, the code above
9091     works as expected.  *Note Structures unions enumerations and
9092     bit-fields implementation::.  However, this code might not:
9093          int f() {
9094            union a_union t;
9095            int* ip;
9096            t.d = 3.0;
9097            ip = &t.i;
9098            return *ip;
9099          }
9100
9101     Similarly, access by taking the address, casting the resulting
9102     pointer and dereferencing the result has undefined behavior, even
9103     if the cast uses a union type, e.g.:
9104          int f() {
9105            double d = 3.0;
9106            return ((union a_union *) &d)->i;
9107          }
9108
9109     The '-fstrict-aliasing' option is enabled at levels '-O2', '-O3',
9110     '-Os'.
9111
9112'-falign-functions'
9113'-falign-functions=N'
9114'-falign-functions=N:M'
9115'-falign-functions=N:M:N2'
9116'-falign-functions=N:M:N2:M2'
9117     Align the start of functions to the next power-of-two greater than
9118     N, skipping up to M-1 bytes.  This ensures that at least the first
9119     M bytes of the function can be fetched by the CPU without crossing
9120     an N-byte alignment boundary.
9121
9122     If M is not specified, it defaults to N.
9123
9124     Examples: '-falign-functions=32' aligns functions to the next
9125     32-byte boundary, '-falign-functions=24' aligns to the next 32-byte
9126     boundary only if this can be done by skipping 23 bytes or less,
9127     '-falign-functions=32:7' aligns to the next 32-byte boundary only
9128     if this can be done by skipping 6 bytes or less.
9129
9130     The second pair of N2:M2 values allows you to specify a secondary
9131     alignment: '-falign-functions=64:7:32:3' aligns to the next 64-byte
9132     boundary if this can be done by skipping 6 bytes or less, otherwise
9133     aligns to the next 32-byte boundary if this can be done by skipping
9134     2 bytes or less.  If M2 is not specified, it defaults to N2.
9135
9136     Some assemblers only support this flag when N is a power of two; in
9137     that case, it is rounded up.
9138
9139     '-fno-align-functions' and '-falign-functions=1' are equivalent and
9140     mean that functions are not aligned.
9141
9142     If N is not specified or is zero, use a machine-dependent default.
9143     The maximum allowed N option value is 65536.
9144
9145     Enabled at levels '-O2', '-O3'.
9146
9147'-flimit-function-alignment'
9148     If this option is enabled, the compiler tries to avoid
9149     unnecessarily overaligning functions.  It attempts to instruct the
9150     assembler to align by the amount specified by '-falign-functions',
9151     but not to skip more bytes than the size of the function.
9152
9153'-falign-labels'
9154'-falign-labels=N'
9155'-falign-labels=N:M'
9156'-falign-labels=N:M:N2'
9157'-falign-labels=N:M:N2:M2'
9158     Align all branch targets to a power-of-two boundary.
9159
9160     Parameters of this option are analogous to the '-falign-functions'
9161     option.  '-fno-align-labels' and '-falign-labels=1' are equivalent
9162     and mean that labels are not aligned.
9163
9164     If '-falign-loops' or '-falign-jumps' are applicable and are
9165     greater than this value, then their values are used instead.
9166
9167     If N is not specified or is zero, use a machine-dependent default
9168     which is very likely to be '1', meaning no alignment.  The maximum
9169     allowed N option value is 65536.
9170
9171     Enabled at levels '-O2', '-O3'.
9172
9173'-falign-loops'
9174'-falign-loops=N'
9175'-falign-loops=N:M'
9176'-falign-loops=N:M:N2'
9177'-falign-loops=N:M:N2:M2'
9178     Align loops to a power-of-two boundary.  If the loops are executed
9179     many times, this makes up for any execution of the dummy padding
9180     instructions.
9181
9182     Parameters of this option are analogous to the '-falign-functions'
9183     option.  '-fno-align-loops' and '-falign-loops=1' are equivalent
9184     and mean that loops are not aligned.  The maximum allowed N option
9185     value is 65536.
9186
9187     If N is not specified or is zero, use a machine-dependent default.
9188
9189     Enabled at levels '-O2', '-O3'.
9190
9191'-falign-jumps'
9192'-falign-jumps=N'
9193'-falign-jumps=N:M'
9194'-falign-jumps=N:M:N2'
9195'-falign-jumps=N:M:N2:M2'
9196     Align branch targets to a power-of-two boundary, for branch targets
9197     where the targets can only be reached by jumping.  In this case, no
9198     dummy operations need be executed.
9199
9200     Parameters of this option are analogous to the '-falign-functions'
9201     option.  '-fno-align-jumps' and '-falign-jumps=1' are equivalent
9202     and mean that loops are not aligned.
9203
9204     If N is not specified or is zero, use a machine-dependent default.
9205     The maximum allowed N option value is 65536.
9206
9207     Enabled at levels '-O2', '-O3'.
9208
9209'-funit-at-a-time'
9210     This option is left for compatibility reasons.  '-funit-at-a-time'
9211     has no effect, while '-fno-unit-at-a-time' implies
9212     '-fno-toplevel-reorder' and '-fno-section-anchors'.
9213
9214     Enabled by default.
9215
9216'-fno-toplevel-reorder'
9217     Do not reorder top-level functions, variables, and 'asm'
9218     statements.  Output them in the same order that they appear in the
9219     input file.  When this option is used, unreferenced static
9220     variables are not removed.  This option is intended to support
9221     existing code that relies on a particular ordering.  For new code,
9222     it is better to use attributes when possible.
9223
9224     '-ftoplevel-reorder' is the default at '-O1' and higher, and also
9225     at '-O0' if '-fsection-anchors' is explicitly requested.
9226     Additionally '-fno-toplevel-reorder' implies
9227     '-fno-section-anchors'.
9228
9229'-fweb'
9230     Constructs webs as commonly used for register allocation purposes
9231     and assign each web individual pseudo register.  This allows the
9232     register allocation pass to operate on pseudos directly, but also
9233     strengthens several other optimization passes, such as CSE, loop
9234     optimizer and trivial dead code remover.  It can, however, make
9235     debugging impossible, since variables no longer stay in a "home
9236     register".
9237
9238     Enabled by default with '-funroll-loops'.
9239
9240'-fwhole-program'
9241     Assume that the current compilation unit represents the whole
9242     program being compiled.  All public functions and variables with
9243     the exception of 'main' and those merged by attribute
9244     'externally_visible' become static functions and in effect are
9245     optimized more aggressively by interprocedural optimizers.
9246
9247     This option should not be used in combination with '-flto'.
9248     Instead relying on a linker plugin should provide safer and more
9249     precise information.
9250
9251'-flto[=N]'
9252     This option runs the standard link-time optimizer.  When invoked
9253     with source code, it generates GIMPLE (one of GCC's internal
9254     representations) and writes it to special ELF sections in the
9255     object file.  When the object files are linked together, all the
9256     function bodies are read from these ELF sections and instantiated
9257     as if they had been part of the same translation unit.
9258
9259     To use the link-time optimizer, '-flto' and optimization options
9260     should be specified at compile time and during the final link.  It
9261     is recommended that you compile all the files participating in the
9262     same link with the same options and also specify those options at
9263     link time.  For example:
9264
9265          gcc -c -O2 -flto foo.c
9266          gcc -c -O2 -flto bar.c
9267          gcc -o myprog -flto -O2 foo.o bar.o
9268
9269     The first two invocations to GCC save a bytecode representation of
9270     GIMPLE into special ELF sections inside 'foo.o' and 'bar.o'.  The
9271     final invocation reads the GIMPLE bytecode from 'foo.o' and
9272     'bar.o', merges the two files into a single internal image, and
9273     compiles the result as usual.  Since both 'foo.o' and 'bar.o' are
9274     merged into a single image, this causes all the interprocedural
9275     analyses and optimizations in GCC to work across the two files as
9276     if they were a single one.  This means, for example, that the
9277     inliner is able to inline functions in 'bar.o' into functions in
9278     'foo.o' and vice-versa.
9279
9280     Another (simpler) way to enable link-time optimization is:
9281
9282          gcc -o myprog -flto -O2 foo.c bar.c
9283
9284     The above generates bytecode for 'foo.c' and 'bar.c', merges them
9285     together into a single GIMPLE representation and optimizes them as
9286     usual to produce 'myprog'.
9287
9288     The important thing to keep in mind is that to enable link-time
9289     optimizations you need to use the GCC driver to perform the link
9290     step.  GCC automatically performs link-time optimization if any of
9291     the objects involved were compiled with the '-flto' command-line
9292     option.  You can always override the automatic decision to do
9293     link-time optimization by passing '-fno-lto' to the link command.
9294
9295     To make whole program optimization effective, it is necessary to
9296     make certain whole program assumptions.  The compiler needs to know
9297     what functions and variables can be accessed by libraries and
9298     runtime outside of the link-time optimized unit.  When supported by
9299     the linker, the linker plugin (see '-fuse-linker-plugin') passes
9300     information to the compiler about used and externally visible
9301     symbols.  When the linker plugin is not available,
9302     '-fwhole-program' should be used to allow the compiler to make
9303     these assumptions, which leads to more aggressive optimization
9304     decisions.
9305
9306     When a file is compiled with '-flto' without '-fuse-linker-plugin',
9307     the generated object file is larger than a regular object file
9308     because it contains GIMPLE bytecodes and the usual final code (see
9309     '-ffat-lto-objects'.  This means that object files with LTO
9310     information can be linked as normal object files; if '-fno-lto' is
9311     passed to the linker, no interprocedural optimizations are applied.
9312     Note that when '-fno-fat-lto-objects' is enabled the compile stage
9313     is faster but you cannot perform a regular, non-LTO link on them.
9314
9315     When producing the final binary, GCC only applies link-time
9316     optimizations to those files that contain bytecode.  Therefore, you
9317     can mix and match object files and libraries with GIMPLE bytecodes
9318     and final object code.  GCC automatically selects which files to
9319     optimize in LTO mode and which files to link without further
9320     processing.
9321
9322     Generally, options specified at link time override those specified
9323     at compile time, although in some cases GCC attempts to infer
9324     link-time options from the settings used to compile the input
9325     files.
9326
9327     If you do not specify an optimization level option '-O' at link
9328     time, then GCC uses the highest optimization level used when
9329     compiling the object files.  Note that it is generally ineffective
9330     to specify an optimization level option only at link time and not
9331     at compile time, for two reasons.  First, compiling without
9332     optimization suppresses compiler passes that gather information
9333     needed for effective optimization at link time.  Second, some early
9334     optimization passes can be performed only at compile time and not
9335     at link time.
9336
9337     There are some code generation flags preserved by GCC when
9338     generating bytecodes, as they need to be used during the final
9339     link.  Currently, the following options and their settings are
9340     taken from the first object file that explicitly specifies them:
9341     '-fPIC', '-fpic', '-fpie', '-fcommon', '-fexceptions',
9342     '-fnon-call-exceptions', '-fgnu-tm' and all the '-m' target flags.
9343
9344     Certain ABI-changing flags are required to match in all compilation
9345     units, and trying to override this at link time with a conflicting
9346     value is ignored.  This includes options such as
9347     '-freg-struct-return' and '-fpcc-struct-return'.
9348
9349     Other options such as '-ffp-contract', '-fno-strict-overflow',
9350     '-fwrapv', '-fno-trapv' or '-fno-strict-aliasing' are passed
9351     through to the link stage and merged conservatively for conflicting
9352     translation units.  Specifically '-fno-strict-overflow', '-fwrapv'
9353     and '-fno-trapv' take precedence; and for example
9354     '-ffp-contract=off' takes precedence over '-ffp-contract=fast'.
9355     You can override them at link time.
9356
9357     When you need to pass options to the assembler via '-Wa' or
9358     '-Xassembler' make sure to either compile such translation units
9359     with '-fno-lto' or consistently use the same assembler options on
9360     all translation units.  You can alternatively also specify
9361     assembler options at LTO link time.
9362
9363     If LTO encounters objects with C linkage declared with incompatible
9364     types in separate translation units to be linked together
9365     (undefined behavior according to ISO C99 6.2.7), a non-fatal
9366     diagnostic may be issued.  The behavior is still undefined at run
9367     time.  Similar diagnostics may be raised for other languages.
9368
9369     Another feature of LTO is that it is possible to apply
9370     interprocedural optimizations on files written in different
9371     languages:
9372
9373          gcc -c -flto foo.c
9374          g++ -c -flto bar.cc
9375          gfortran -c -flto baz.f90
9376          g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
9377
9378     Notice that the final link is done with 'g++' to get the C++
9379     runtime libraries and '-lgfortran' is added to get the Fortran
9380     runtime libraries.  In general, when mixing languages in LTO mode,
9381     you should use the same link command options as when mixing
9382     languages in a regular (non-LTO) compilation.
9383
9384     If object files containing GIMPLE bytecode are stored in a library
9385     archive, say 'libfoo.a', it is possible to extract and use them in
9386     an LTO link if you are using a linker with plugin support.  To
9387     create static libraries suitable for LTO, use 'gcc-ar' and
9388     'gcc-ranlib' instead of 'ar' and 'ranlib'; to show the symbols of
9389     object files with GIMPLE bytecode, use 'gcc-nm'.  Those commands
9390     require that 'ar', 'ranlib' and 'nm' have been compiled with plugin
9391     support.  At link time, use the flag '-fuse-linker-plugin' to
9392     ensure that the library participates in the LTO optimization
9393     process:
9394
9395          gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
9396
9397     With the linker plugin enabled, the linker extracts the needed
9398     GIMPLE files from 'libfoo.a' and passes them on to the running GCC
9399     to make them part of the aggregated GIMPLE image to be optimized.
9400
9401     If you are not using a linker with plugin support and/or do not
9402     enable the linker plugin, then the objects inside 'libfoo.a' are
9403     extracted and linked as usual, but they do not participate in the
9404     LTO optimization process.  In order to make a static library
9405     suitable for both LTO optimization and usual linkage, compile its
9406     object files with '-flto' '-ffat-lto-objects'.
9407
9408     Link-time optimizations do not require the presence of the whole
9409     program to operate.  If the program does not require any symbols to
9410     be exported, it is possible to combine '-flto' and
9411     '-fwhole-program' to allow the interprocedural optimizers to use
9412     more aggressive assumptions which may lead to improved optimization
9413     opportunities.  Use of '-fwhole-program' is not needed when linker
9414     plugin is active (see '-fuse-linker-plugin').
9415
9416     The current implementation of LTO makes no attempt to generate
9417     bytecode that is portable between different types of hosts.  The
9418     bytecode files are versioned and there is a strict version check,
9419     so bytecode files generated in one version of GCC do not work with
9420     an older or newer version of GCC.
9421
9422     Link-time optimization does not work well with generation of
9423     debugging information on systems other than those using a
9424     combination of ELF and DWARF.
9425
9426     If you specify the optional N, the optimization and code generation
9427     done at link time is executed in parallel using N parallel jobs by
9428     utilizing an installed 'make' program.  The environment variable
9429     'MAKE' may be used to override the program used.  The default value
9430     for N is 1.
9431
9432     You can also specify '-flto=jobserver' to use GNU make's job server
9433     mode to determine the number of parallel jobs.  This is useful when
9434     the Makefile calling GCC is already executing in parallel.  You
9435     must prepend a '+' to the command recipe in the parent Makefile for
9436     this to work.  This option likely only works if 'MAKE' is GNU make.
9437
9438'-flto-partition=ALG'
9439     Specify the partitioning algorithm used by the link-time optimizer.
9440     The value is either '1to1' to specify a partitioning mirroring the
9441     original source files or 'balanced' to specify partitioning into
9442     equally sized chunks (whenever possible) or 'max' to create new
9443     partition for every symbol where possible.  Specifying 'none' as an
9444     algorithm disables partitioning and streaming completely.  The
9445     default value is 'balanced'.  While '1to1' can be used as an
9446     workaround for various code ordering issues, the 'max' partitioning
9447     is intended for internal testing only.  The value 'one' specifies
9448     that exactly one partition should be used while the value 'none'
9449     bypasses partitioning and executes the link-time optimization step
9450     directly from the WPA phase.
9451
9452'-flto-odr-type-merging'
9453     Enable streaming of mangled types names of C++ types and their
9454     unification at link time.  This increases size of LTO object files,
9455     but enables diagnostics about One Definition Rule violations.
9456
9457'-flto-compression-level=N'
9458     This option specifies the level of compression used for
9459     intermediate language written to LTO object files, and is only
9460     meaningful in conjunction with LTO mode ('-flto').  Valid values
9461     are 0 (no compression) to 9 (maximum compression).  Values outside
9462     this range are clamped to either 0 or 9.  If the option is not
9463     given, a default balanced compression setting is used.
9464
9465'-fuse-linker-plugin'
9466     Enables the use of a linker plugin during link-time optimization.
9467     This option relies on plugin support in the linker, which is
9468     available in gold or in GNU ld 2.21 or newer.
9469
9470     This option enables the extraction of object files with GIMPLE
9471     bytecode out of library archives.  This improves the quality of
9472     optimization by exposing more code to the link-time optimizer.
9473     This information specifies what symbols can be accessed externally
9474     (by non-LTO object or during dynamic linking).  Resulting code
9475     quality improvements on binaries (and shared libraries that use
9476     hidden visibility) are similar to '-fwhole-program'.  See '-flto'
9477     for a description of the effect of this flag and how to use it.
9478
9479     This option is enabled by default when LTO support in GCC is
9480     enabled and GCC was configured for use with a linker supporting
9481     plugins (GNU ld 2.21 or newer or gold).
9482
9483'-ffat-lto-objects'
9484     Fat LTO objects are object files that contain both the intermediate
9485     language and the object code.  This makes them usable for both LTO
9486     linking and normal linking.  This option is effective only when
9487     compiling with '-flto' and is ignored at link time.
9488
9489     '-fno-fat-lto-objects' improves compilation time over plain LTO,
9490     but requires the complete toolchain to be aware of LTO. It requires
9491     a linker with linker plugin support for basic functionality.
9492     Additionally, 'nm', 'ar' and 'ranlib' need to support linker
9493     plugins to allow a full-featured build environment (capable of
9494     building static libraries etc).  GCC provides the 'gcc-ar',
9495     'gcc-nm', 'gcc-ranlib' wrappers to pass the right options to these
9496     tools.  With non fat LTO makefiles need to be modified to use them.
9497
9498     Note that modern binutils provide plugin auto-load mechanism.
9499     Installing the linker plugin into '$libdir/bfd-plugins' has the
9500     same effect as usage of the command wrappers ('gcc-ar', 'gcc-nm'
9501     and 'gcc-ranlib').
9502
9503     The default is '-fno-fat-lto-objects' on targets with linker plugin
9504     support.
9505
9506'-fcompare-elim'
9507     After register allocation and post-register allocation instruction
9508     splitting, identify arithmetic instructions that compute processor
9509     flags similar to a comparison operation based on that arithmetic.
9510     If possible, eliminate the explicit comparison operation.
9511
9512     This pass only applies to certain targets that cannot explicitly
9513     represent the comparison operation before register allocation is
9514     complete.
9515
9516     Enabled at levels '-O', '-O2', '-O3', '-Os'.
9517
9518'-fcprop-registers'
9519     After register allocation and post-register allocation instruction
9520     splitting, perform a copy-propagation pass to try to reduce
9521     scheduling dependencies and occasionally eliminate the copy.
9522
9523     Enabled at levels '-O', '-O2', '-O3', '-Os'.
9524
9525'-fprofile-correction'
9526     Profiles collected using an instrumented binary for multi-threaded
9527     programs may be inconsistent due to missed counter updates.  When
9528     this option is specified, GCC uses heuristics to correct or smooth
9529     out such inconsistencies.  By default, GCC emits an error message
9530     when an inconsistent profile is detected.
9531
9532     This option is enabled by '-fauto-profile'.
9533
9534'-fprofile-use'
9535'-fprofile-use=PATH'
9536     Enable profile feedback-directed optimizations, and the following
9537     optimizations, many of which are generally profitable only with
9538     profile feedback available:
9539
9540          -fbranch-probabilities  -fprofile-values
9541          -funroll-loops  -fpeel-loops  -ftracer  -fvpt
9542          -finline-functions  -fipa-cp  -fipa-cp-clone  -fipa-bit-cp
9543          -fpredictive-commoning  -fsplit-loops  -funswitch-loops
9544          -fgcse-after-reload  -ftree-loop-vectorize  -ftree-slp-vectorize
9545          -fvect-cost-model=dynamic  -ftree-loop-distribute-patterns
9546          -fprofile-reorder-functions
9547
9548     Before you can use this option, you must first generate profiling
9549     information.  *Note Instrumentation Options::, for information
9550     about the '-fprofile-generate' option.
9551
9552     By default, GCC emits an error message if the feedback profiles do
9553     not match the source code.  This error can be turned into a warning
9554     by using '-Wno-error=coverage-mismatch'.  Note this may result in
9555     poorly optimized code.  Additionally, by default, GCC also emits a
9556     warning message if the feedback profiles do not exist (see
9557     '-Wmissing-profile').
9558
9559     If PATH is specified, GCC looks at the PATH to find the profile
9560     feedback data files.  See '-fprofile-dir'.
9561
9562'-fauto-profile'
9563'-fauto-profile=PATH'
9564     Enable sampling-based feedback-directed optimizations, and the
9565     following optimizations, many of which are generally profitable
9566     only with profile feedback available:
9567
9568          -fbranch-probabilities  -fprofile-values
9569          -funroll-loops  -fpeel-loops  -ftracer  -fvpt
9570          -finline-functions  -fipa-cp  -fipa-cp-clone  -fipa-bit-cp
9571          -fpredictive-commoning  -fsplit-loops  -funswitch-loops
9572          -fgcse-after-reload  -ftree-loop-vectorize  -ftree-slp-vectorize
9573          -fvect-cost-model=dynamic  -ftree-loop-distribute-patterns
9574          -fprofile-correction
9575
9576     PATH is the name of a file containing AutoFDO profile information.
9577     If omitted, it defaults to 'fbdata.afdo' in the current directory.
9578
9579     Producing an AutoFDO profile data file requires running your
9580     program with the 'perf' utility on a supported GNU/Linux target
9581     system.  For more information, see <https://perf.wiki.kernel.org/>.
9582
9583     E.g.
9584          perf record -e br_inst_retired:near_taken -b -o perf.data \
9585              -- your_program
9586
9587     Then use the 'create_gcov' tool to convert the raw profile data to
9588     a format that can be used by GCC.  You must also supply the
9589     unstripped binary for your program to this tool.  See
9590     <https://github.com/google/autofdo>.
9591
9592     E.g.
9593          create_gcov --binary=your_program.unstripped --profile=perf.data \
9594              --gcov=profile.afdo
9595
9596 The following options control compiler behavior regarding
9597floating-point arithmetic.  These options trade off between speed and
9598correctness.  All must be specifically enabled.
9599
9600'-ffloat-store'
9601     Do not store floating-point variables in registers, and inhibit
9602     other options that might change whether a floating-point value is
9603     taken from a register or memory.
9604
9605     This option prevents undesirable excess precision on machines such
9606     as the 68000 where the floating registers (of the 68881) keep more
9607     precision than a 'double' is supposed to have.  Similarly for the
9608     x86 architecture.  For most programs, the excess precision does
9609     only good, but a few programs rely on the precise definition of
9610     IEEE floating point.  Use '-ffloat-store' for such programs, after
9611     modifying them to store all pertinent intermediate computations
9612     into variables.
9613
9614'-fexcess-precision=STYLE'
9615     This option allows further control over excess precision on
9616     machines where floating-point operations occur in a format with
9617     more precision or range than the IEEE standard and interchange
9618     floating-point types.  By default, '-fexcess-precision=fast' is in
9619     effect; this means that operations may be carried out in a wider
9620     precision than the types specified in the source if that would
9621     result in faster code, and it is unpredictable when rounding to the
9622     types specified in the source code takes place.  When compiling C,
9623     if '-fexcess-precision=standard' is specified then excess precision
9624     follows the rules specified in ISO C99; in particular, both casts
9625     and assignments cause values to be rounded to their semantic types
9626     (whereas '-ffloat-store' only affects assignments).  This option is
9627     enabled by default for C if a strict conformance option such as
9628     '-std=c99' is used.  '-ffast-math' enables
9629     '-fexcess-precision=fast' by default regardless of whether a strict
9630     conformance option is used.
9631
9632     '-fexcess-precision=standard' is not implemented for languages
9633     other than C. On the x86, it has no effect if '-mfpmath=sse' or
9634     '-mfpmath=sse+387' is specified; in the former case, IEEE semantics
9635     apply without excess precision, and in the latter, rounding is
9636     unpredictable.
9637
9638'-ffast-math'
9639     Sets the options '-fno-math-errno', '-funsafe-math-optimizations',
9640     '-ffinite-math-only', '-fno-rounding-math', '-fno-signaling-nans',
9641     '-fcx-limited-range' and '-fexcess-precision=fast'.
9642
9643     This option causes the preprocessor macro '__FAST_MATH__' to be
9644     defined.
9645
9646     This option is not turned on by any '-O' option besides '-Ofast'
9647     since it can result in incorrect output for programs that depend on
9648     an exact implementation of IEEE or ISO rules/specifications for
9649     math functions.  It may, however, yield faster code for programs
9650     that do not require the guarantees of these specifications.
9651
9652'-fno-math-errno'
9653     Do not set 'errno' after calling math functions that are executed
9654     with a single instruction, e.g., 'sqrt'.  A program that relies on
9655     IEEE exceptions for math error handling may want to use this flag
9656     for speed while maintaining IEEE arithmetic compatibility.
9657
9658     This option is not turned on by any '-O' option since it can result
9659     in incorrect output for programs that depend on an exact
9660     implementation of IEEE or ISO rules/specifications for math
9661     functions.  It may, however, yield faster code for programs that do
9662     not require the guarantees of these specifications.
9663
9664     The default is '-fmath-errno'.
9665
9666     On Darwin systems, the math library never sets 'errno'.  There is
9667     therefore no reason for the compiler to consider the possibility
9668     that it might, and '-fno-math-errno' is the default.
9669
9670'-funsafe-math-optimizations'
9671
9672     Allow optimizations for floating-point arithmetic that (a) assume
9673     that arguments and results are valid and (b) may violate IEEE or
9674     ANSI standards.  When used at link time, it may include libraries
9675     or startup files that change the default FPU control word or other
9676     similar optimizations.
9677
9678     This option is not turned on by any '-O' option since it can result
9679     in incorrect output for programs that depend on an exact
9680     implementation of IEEE or ISO rules/specifications for math
9681     functions.  It may, however, yield faster code for programs that do
9682     not require the guarantees of these specifications.  Enables
9683     '-fno-signed-zeros', '-fno-trapping-math', '-fassociative-math' and
9684     '-freciprocal-math'.
9685
9686     The default is '-fno-unsafe-math-optimizations'.
9687
9688'-fassociative-math'
9689
9690     Allow re-association of operands in series of floating-point
9691     operations.  This violates the ISO C and C++ language standard by
9692     possibly changing computation result.  NOTE: re-ordering may change
9693     the sign of zero as well as ignore NaNs and inhibit or create
9694     underflow or overflow (and thus cannot be used on code that relies
9695     on rounding behavior like '(x + 2**52) - 2**52'.  May also reorder
9696     floating-point comparisons and thus may not be used when ordered
9697     comparisons are required.  This option requires that both
9698     '-fno-signed-zeros' and '-fno-trapping-math' be in effect.
9699     Moreover, it doesn't make much sense with '-frounding-math'.  For
9700     Fortran the option is automatically enabled when both
9701     '-fno-signed-zeros' and '-fno-trapping-math' are in effect.
9702
9703     The default is '-fno-associative-math'.
9704
9705'-freciprocal-math'
9706
9707     Allow the reciprocal of a value to be used instead of dividing by
9708     the value if this enables optimizations.  For example 'x / y' can
9709     be replaced with 'x * (1/y)', which is useful if '(1/y)' is subject
9710     to common subexpression elimination.  Note that this loses
9711     precision and increases the number of flops operating on the value.
9712
9713     The default is '-fno-reciprocal-math'.
9714
9715'-ffinite-math-only'
9716     Allow optimizations for floating-point arithmetic that assume that
9717     arguments and results are not NaNs or +-Infs.
9718
9719     This option is not turned on by any '-O' option since it can result
9720     in incorrect output for programs that depend on an exact
9721     implementation of IEEE or ISO rules/specifications for math
9722     functions.  It may, however, yield faster code for programs that do
9723     not require the guarantees of these specifications.
9724
9725     The default is '-fno-finite-math-only'.
9726
9727'-fno-signed-zeros'
9728     Allow optimizations for floating-point arithmetic that ignore the
9729     signedness of zero.  IEEE arithmetic specifies the behavior of
9730     distinct +0.0 and -0.0 values, which then prohibits simplification
9731     of expressions such as x+0.0 or 0.0*x (even with
9732     '-ffinite-math-only').  This option implies that the sign of a zero
9733     result isn't significant.
9734
9735     The default is '-fsigned-zeros'.
9736
9737'-fno-trapping-math'
9738     Compile code assuming that floating-point operations cannot
9739     generate user-visible traps.  These traps include division by zero,
9740     overflow, underflow, inexact result and invalid operation.  This
9741     option requires that '-fno-signaling-nans' be in effect.  Setting
9742     this option may allow faster code if one relies on "non-stop" IEEE
9743     arithmetic, for example.
9744
9745     This option should never be turned on by any '-O' option since it
9746     can result in incorrect output for programs that depend on an exact
9747     implementation of IEEE or ISO rules/specifications for math
9748     functions.
9749
9750     The default is '-ftrapping-math'.
9751
9752'-frounding-math'
9753     Disable transformations and optimizations that assume default
9754     floating-point rounding behavior.  This is round-to-zero for all
9755     floating point to integer conversions, and round-to-nearest for all
9756     other arithmetic truncations.  This option should be specified for
9757     programs that change the FP rounding mode dynamically, or that may
9758     be executed with a non-default rounding mode.  This option disables
9759     constant folding of floating-point expressions at compile time
9760     (which may be affected by rounding mode) and arithmetic
9761     transformations that are unsafe in the presence of sign-dependent
9762     rounding modes.
9763
9764     The default is '-fno-rounding-math'.
9765
9766     This option is experimental and does not currently guarantee to
9767     disable all GCC optimizations that are affected by rounding mode.
9768     Future versions of GCC may provide finer control of this setting
9769     using C99's 'FENV_ACCESS' pragma.  This command-line option will be
9770     used to specify the default state for 'FENV_ACCESS'.
9771
9772'-fsignaling-nans'
9773     Compile code assuming that IEEE signaling NaNs may generate
9774     user-visible traps during floating-point operations.  Setting this
9775     option disables optimizations that may change the number of
9776     exceptions visible with signaling NaNs.  This option implies
9777     '-ftrapping-math'.
9778
9779     This option causes the preprocessor macro '__SUPPORT_SNAN__' to be
9780     defined.
9781
9782     The default is '-fno-signaling-nans'.
9783
9784     This option is experimental and does not currently guarantee to
9785     disable all GCC optimizations that affect signaling NaN behavior.
9786
9787'-fno-fp-int-builtin-inexact'
9788     Do not allow the built-in functions 'ceil', 'floor', 'round' and
9789     'trunc', and their 'float' and 'long double' variants, to generate
9790     code that raises the "inexact" floating-point exception for
9791     noninteger arguments.  ISO C99 and C11 allow these functions to
9792     raise the "inexact" exception, but ISO/IEC TS 18661-1:2014, the C
9793     bindings to IEEE 754-2008, does not allow these functions to do so.
9794
9795     The default is '-ffp-int-builtin-inexact', allowing the exception
9796     to be raised.  This option does nothing unless '-ftrapping-math' is
9797     in effect.
9798
9799     Even if '-fno-fp-int-builtin-inexact' is used, if the functions
9800     generate a call to a library function then the "inexact" exception
9801     may be raised if the library implementation does not follow TS
9802     18661.
9803
9804'-fsingle-precision-constant'
9805     Treat floating-point constants as single precision instead of
9806     implicitly converting them to double-precision constants.
9807
9808'-fcx-limited-range'
9809     When enabled, this option states that a range reduction step is not
9810     needed when performing complex division.  Also, there is no
9811     checking whether the result of a complex multiplication or division
9812     is 'NaN + I*NaN', with an attempt to rescue the situation in that
9813     case.  The default is '-fno-cx-limited-range', but is enabled by
9814     '-ffast-math'.
9815
9816     This option controls the default setting of the ISO C99
9817     'CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to all
9818     languages.
9819
9820'-fcx-fortran-rules'
9821     Complex multiplication and division follow Fortran rules.  Range
9822     reduction is done as part of complex division, but there is no
9823     checking whether the result of a complex multiplication or division
9824     is 'NaN + I*NaN', with an attempt to rescue the situation in that
9825     case.
9826
9827     The default is '-fno-cx-fortran-rules'.
9828
9829 The following options control optimizations that may improve
9830performance, but are not enabled by any '-O' options.  This section
9831includes experimental options that may produce broken code.
9832
9833'-fbranch-probabilities'
9834     After running a program compiled with '-fprofile-arcs' (*note
9835     Instrumentation Options::), you can compile it a second time using
9836     '-fbranch-probabilities', to improve optimizations based on the
9837     number of times each branch was taken.  When a program compiled
9838     with '-fprofile-arcs' exits, it saves arc execution counts to a
9839     file called 'SOURCENAME.gcda' for each source file.  The
9840     information in this data file is very dependent on the structure of
9841     the generated code, so you must use the same source code and the
9842     same optimization options for both compilations.
9843
9844     With '-fbranch-probabilities', GCC puts a 'REG_BR_PROB' note on
9845     each 'JUMP_INSN' and 'CALL_INSN'.  These can be used to improve
9846     optimization.  Currently, they are only used in one place: in
9847     'reorg.c', instead of guessing which path a branch is most likely
9848     to take, the 'REG_BR_PROB' values are used to exactly determine
9849     which path is taken more often.
9850
9851     Enabled by '-fprofile-use' and '-fauto-profile'.
9852
9853'-fprofile-values'
9854     If combined with '-fprofile-arcs', it adds code so that some data
9855     about values of expressions in the program is gathered.
9856
9857     With '-fbranch-probabilities', it reads back the data gathered from
9858     profiling values of expressions for usage in optimizations.
9859
9860     Enabled by '-fprofile-generate', '-fprofile-use', and
9861     '-fauto-profile'.
9862
9863'-fprofile-reorder-functions'
9864     Function reordering based on profile instrumentation collects first
9865     time of execution of a function and orders these functions in
9866     ascending order.
9867
9868     Enabled with '-fprofile-use'.
9869
9870'-fvpt'
9871     If combined with '-fprofile-arcs', this option instructs the
9872     compiler to add code to gather information about values of
9873     expressions.
9874
9875     With '-fbranch-probabilities', it reads back the data gathered and
9876     actually performs the optimizations based on them.  Currently the
9877     optimizations include specialization of division operations using
9878     the knowledge about the value of the denominator.
9879
9880     Enabled with '-fprofile-use' and '-fauto-profile'.
9881
9882'-frename-registers'
9883     Attempt to avoid false dependencies in scheduled code by making use
9884     of registers left over after register allocation.  This
9885     optimization most benefits processors with lots of registers.
9886     Depending on the debug information format adopted by the target,
9887     however, it can make debugging impossible, since variables no
9888     longer stay in a "home register".
9889
9890     Enabled by default with '-funroll-loops'.
9891
9892'-fschedule-fusion'
9893     Performs a target dependent pass over the instruction stream to
9894     schedule instructions of same type together because target machine
9895     can execute them more efficiently if they are adjacent to each
9896     other in the instruction flow.
9897
9898     Enabled at levels '-O2', '-O3', '-Os'.
9899
9900'-ftracer'
9901     Perform tail duplication to enlarge superblock size.  This
9902     transformation simplifies the control flow of the function allowing
9903     other optimizations to do a better job.
9904
9905     Enabled by '-fprofile-use' and '-fauto-profile'.
9906
9907'-funroll-loops'
9908     Unroll loops whose number of iterations can be determined at
9909     compile time or upon entry to the loop.  '-funroll-loops' implies
9910     '-frerun-cse-after-loop', '-fweb' and '-frename-registers'.  It
9911     also turns on complete loop peeling (i.e. complete removal of loops
9912     with a small constant number of iterations).  This option makes
9913     code larger, and may or may not make it run faster.
9914
9915     Enabled by '-fprofile-use' and '-fauto-profile'.
9916
9917'-funroll-all-loops'
9918     Unroll all loops, even if their number of iterations is uncertain
9919     when the loop is entered.  This usually makes programs run more
9920     slowly.  '-funroll-all-loops' implies the same options as
9921     '-funroll-loops'.
9922
9923'-fpeel-loops'
9924     Peels loops for which there is enough information that they do not
9925     roll much (from profile feedback or static analysis).  It also
9926     turns on complete loop peeling (i.e. complete removal of loops with
9927     small constant number of iterations).
9928
9929     Enabled by '-O3', '-fprofile-use', and '-fauto-profile'.
9930
9931'-fmove-loop-invariants'
9932     Enables the loop invariant motion pass in the RTL loop optimizer.
9933     Enabled at level '-O1' and higher, except for '-Og'.
9934
9935'-fsplit-loops'
9936     Split a loop into two if it contains a condition that's always true
9937     for one side of the iteration space and false for the other.
9938
9939     Enabled by '-fprofile-use' and '-fauto-profile'.
9940
9941'-funswitch-loops'
9942     Move branches with loop invariant conditions out of the loop, with
9943     duplicates of the loop on both branches (modified according to
9944     result of the condition).
9945
9946     Enabled by '-fprofile-use' and '-fauto-profile'.
9947
9948'-fversion-loops-for-strides'
9949     If a loop iterates over an array with a variable stride, create
9950     another version of the loop that assumes the stride is always one.
9951     For example:
9952
9953          for (int i = 0; i < n; ++i)
9954            x[i * stride] = ...;
9955
9956     becomes:
9957
9958          if (stride == 1)
9959            for (int i = 0; i < n; ++i)
9960              x[i] = ...;
9961          else
9962            for (int i = 0; i < n; ++i)
9963              x[i * stride] = ...;
9964
9965     This is particularly useful for assumed-shape arrays in Fortran
9966     where (for example) it allows better vectorization assuming
9967     contiguous accesses.  This flag is enabled by default at '-O3'.  It
9968     is also enabled by '-fprofile-use' and '-fauto-profile'.
9969
9970'-ffunction-sections'
9971'-fdata-sections'
9972     Place each function or data item into its own section in the output
9973     file if the target supports arbitrary sections.  The name of the
9974     function or the name of the data item determines the section's name
9975     in the output file.
9976
9977     Use these options on systems where the linker can perform
9978     optimizations to improve locality of reference in the instruction
9979     space.  Most systems using the ELF object format have linkers with
9980     such optimizations.  On AIX, the linker rearranges sections
9981     (CSECTs) based on the call graph.  The performance impact varies.
9982
9983     Together with a linker garbage collection (linker '--gc-sections'
9984     option) these options may lead to smaller statically-linked
9985     executables (after stripping).
9986
9987     On ELF/DWARF systems these options do not degenerate the quality of
9988     the debug information.  There could be issues with other object
9989     files/debug info formats.
9990
9991     Only use these options when there are significant benefits from
9992     doing so.  When you specify these options, the assembler and linker
9993     create larger object and executable files and are also slower.
9994     These options affect code generation.  They prevent optimizations
9995     by the compiler and assembler using relative locations inside a
9996     translation unit since the locations are unknown until link time.
9997     An example of such an optimization is relaxing calls to short call
9998     instructions.
9999
10000'-fbranch-target-load-optimize'
10001     Perform branch target register load optimization before prologue /
10002     epilogue threading.  The use of target registers can typically be
10003     exposed only during reload, thus hoisting loads out of loops and
10004     doing inter-block scheduling needs a separate optimization pass.
10005
10006'-fbranch-target-load-optimize2'
10007     Perform branch target register load optimization after prologue /
10008     epilogue threading.
10009
10010'-fbtr-bb-exclusive'
10011     When performing branch target register load optimization, don't
10012     reuse branch target registers within any basic block.
10013
10014'-fstdarg-opt'
10015     Optimize the prologue of variadic argument functions with respect
10016     to usage of those arguments.
10017
10018'-fsection-anchors'
10019     Try to reduce the number of symbolic address calculations by using
10020     shared "anchor" symbols to address nearby objects.  This
10021     transformation can help to reduce the number of GOT entries and GOT
10022     accesses on some targets.
10023
10024     For example, the implementation of the following function 'foo':
10025
10026          static int a, b, c;
10027          int foo (void) { return a + b + c; }
10028
10029     usually calculates the addresses of all three variables, but if you
10030     compile it with '-fsection-anchors', it accesses the variables from
10031     a common anchor point instead.  The effect is similar to the
10032     following pseudocode (which isn't valid C):
10033
10034          int foo (void)
10035          {
10036            register int *xr = &x;
10037            return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
10038          }
10039
10040     Not all targets support this option.
10041
10042'--param NAME=VALUE'
10043     In some places, GCC uses various constants to control the amount of
10044     optimization that is done.  For example, GCC does not inline
10045     functions that contain more than a certain number of instructions.
10046     You can control some of these constants on the command line using
10047     the '--param' option.
10048
10049     The names of specific parameters, and the meaning of the values,
10050     are tied to the internals of the compiler, and are subject to
10051     change without notice in future releases.
10052
10053     In order to get minimal, maximal and default value of a parameter,
10054     one can use '--help=param -Q' options.
10055
10056     In each case, the VALUE is an integer.  The allowable choices for
10057     NAME are:
10058
10059     'predictable-branch-outcome'
10060          When branch is predicted to be taken with probability lower
10061          than this threshold (in percent), then it is considered well
10062          predictable.
10063
10064     'max-rtl-if-conversion-insns'
10065          RTL if-conversion tries to remove conditional branches around
10066          a block and replace them with conditionally executed
10067          instructions.  This parameter gives the maximum number of
10068          instructions in a block which should be considered for
10069          if-conversion.  The compiler will also use other heuristics to
10070          decide whether if-conversion is likely to be profitable.
10071
10072     'max-rtl-if-conversion-predictable-cost'
10073     'max-rtl-if-conversion-unpredictable-cost'
10074          RTL if-conversion will try to remove conditional branches
10075          around a block and replace them with conditionally executed
10076          instructions.  These parameters give the maximum permissible
10077          cost for the sequence that would be generated by if-conversion
10078          depending on whether the branch is statically determined to be
10079          predictable or not.  The units for this parameter are the same
10080          as those for the GCC internal seq_cost metric.  The compiler
10081          will try to provide a reasonable default for this parameter
10082          using the BRANCH_COST target macro.
10083
10084     'max-crossjump-edges'
10085          The maximum number of incoming edges to consider for
10086          cross-jumping.  The algorithm used by '-fcrossjumping' is
10087          O(N^2) in the number of edges incoming to each block.
10088          Increasing values mean more aggressive optimization, making
10089          the compilation time increase with probably small improvement
10090          in executable size.
10091
10092     'min-crossjump-insns'
10093          The minimum number of instructions that must be matched at the
10094          end of two blocks before cross-jumping is performed on them.
10095          This value is ignored in the case where all instructions in
10096          the block being cross-jumped from are matched.
10097
10098     'max-grow-copy-bb-insns'
10099          The maximum code size expansion factor when copying basic
10100          blocks instead of jumping.  The expansion is relative to a
10101          jump instruction.
10102
10103     'max-goto-duplication-insns'
10104          The maximum number of instructions to duplicate to a block
10105          that jumps to a computed goto.  To avoid O(N^2) behavior in a
10106          number of passes, GCC factors computed gotos early in the
10107          compilation process, and unfactors them as late as possible.
10108          Only computed jumps at the end of a basic blocks with no more
10109          than max-goto-duplication-insns are unfactored.
10110
10111     'max-delay-slot-insn-search'
10112          The maximum number of instructions to consider when looking
10113          for an instruction to fill a delay slot.  If more than this
10114          arbitrary number of instructions are searched, the time
10115          savings from filling the delay slot are minimal, so stop
10116          searching.  Increasing values mean more aggressive
10117          optimization, making the compilation time increase with
10118          probably small improvement in execution time.
10119
10120     'max-delay-slot-live-search'
10121          When trying to fill delay slots, the maximum number of
10122          instructions to consider when searching for a block with valid
10123          live register information.  Increasing this arbitrarily chosen
10124          value means more aggressive optimization, increasing the
10125          compilation time.  This parameter should be removed when the
10126          delay slot code is rewritten to maintain the control-flow
10127          graph.
10128
10129     'max-gcse-memory'
10130          The approximate maximum amount of memory that can be allocated
10131          in order to perform the global common subexpression
10132          elimination optimization.  If more memory than specified is
10133          required, the optimization is not done.
10134
10135     'max-gcse-insertion-ratio'
10136          If the ratio of expression insertions to deletions is larger
10137          than this value for any expression, then RTL PRE inserts or
10138          removes the expression and thus leaves partially redundant
10139          computations in the instruction stream.
10140
10141     'max-pending-list-length'
10142          The maximum number of pending dependencies scheduling allows
10143          before flushing the current state and starting over.  Large
10144          functions with few branches or calls can create excessively
10145          large lists which needlessly consume memory and resources.
10146
10147     'max-modulo-backtrack-attempts'
10148          The maximum number of backtrack attempts the scheduler should
10149          make when modulo scheduling a loop.  Larger values can
10150          exponentially increase compilation time.
10151
10152     'max-inline-insns-single'
10153          Several parameters control the tree inliner used in GCC.  This
10154          number sets the maximum number of instructions (counted in
10155          GCC's internal representation) in a single function that the
10156          tree inliner considers for inlining.  This only affects
10157          functions declared inline and methods implemented in a class
10158          declaration (C++).
10159
10160     'max-inline-insns-auto'
10161          When you use '-finline-functions' (included in '-O3'), a lot
10162          of functions that would otherwise not be considered for
10163          inlining by the compiler are investigated.  To those
10164          functions, a different (more restrictive) limit compared to
10165          functions declared inline can be applied.
10166
10167     'max-inline-insns-small'
10168          This is bound applied to calls which are considered relevant
10169          with '-finline-small-functions'.
10170
10171     'max-inline-insns-size'
10172          This is bound applied to calls which are optimized for size.
10173          Small growth may be desirable to anticipate optimization
10174          oppurtunities exposed by inlining.
10175
10176     'uninlined-function-insns'
10177          Number of instructions accounted by inliner for function
10178          overhead such as function prologue and epilogue.
10179
10180     'uninlined-function-time'
10181          Extra time accounted by inliner for function overhead such as
10182          time needed to execute function prologue and epilogue
10183
10184     'uninlined-thunk-insns'
10185     'uninlined-thunk-time'
10186          Same as '--param uninlined-function-insns' and '--param
10187          uninlined-function-time' but applied to function thunks
10188
10189     'inline-min-speedup'
10190          When estimated performance improvement of caller + callee
10191          runtime exceeds this threshold (in percent), the function can
10192          be inlined regardless of the limit on '--param
10193          max-inline-insns-single' and '--param max-inline-insns-auto'.
10194
10195     'large-function-insns'
10196          The limit specifying really large functions.  For functions
10197          larger than this limit after inlining, inlining is constrained
10198          by '--param large-function-growth'.  This parameter is useful
10199          primarily to avoid extreme compilation time caused by
10200          non-linear algorithms used by the back end.
10201
10202     'large-function-growth'
10203          Specifies maximal growth of large function caused by inlining
10204          in percents.  For example, parameter value 100 limits large
10205          function growth to 2.0 times the original size.
10206
10207     'large-unit-insns'
10208          The limit specifying large translation unit.  Growth caused by
10209          inlining of units larger than this limit is limited by
10210          '--param inline-unit-growth'.  For small units this might be
10211          too tight.  For example, consider a unit consisting of
10212          function A that is inline and B that just calls A three times.
10213          If B is small relative to A, the growth of unit is 300\% and
10214          yet such inlining is very sane.  For very large units
10215          consisting of small inlineable functions, however, the overall
10216          unit growth limit is needed to avoid exponential explosion of
10217          code size.  Thus for smaller units, the size is increased to
10218          '--param large-unit-insns' before applying '--param
10219          inline-unit-growth'.
10220
10221     'inline-unit-growth'
10222          Specifies maximal overall growth of the compilation unit
10223          caused by inlining.  For example, parameter value 20 limits
10224          unit growth to 1.2 times the original size.  Cold functions
10225          (either marked cold via an attribute or by profile feedback)
10226          are not accounted into the unit size.
10227
10228     'ipcp-unit-growth'
10229          Specifies maximal overall growth of the compilation unit
10230          caused by interprocedural constant propagation.  For example,
10231          parameter value 10 limits unit growth to 1.1 times the
10232          original size.
10233
10234     'large-stack-frame'
10235          The limit specifying large stack frames.  While inlining the
10236          algorithm is trying to not grow past this limit too much.
10237
10238     'large-stack-frame-growth'
10239          Specifies maximal growth of large stack frames caused by
10240          inlining in percents.  For example, parameter value 1000
10241          limits large stack frame growth to 11 times the original size.
10242
10243     'max-inline-insns-recursive'
10244     'max-inline-insns-recursive-auto'
10245          Specifies the maximum number of instructions an out-of-line
10246          copy of a self-recursive inline function can grow into by
10247          performing recursive inlining.
10248
10249          '--param max-inline-insns-recursive' applies to functions
10250          declared inline.  For functions not declared inline, recursive
10251          inlining happens only when '-finline-functions' (included in
10252          '-O3') is enabled; '--param max-inline-insns-recursive-auto'
10253          applies instead.
10254
10255     'max-inline-recursive-depth'
10256     'max-inline-recursive-depth-auto'
10257          Specifies the maximum recursion depth used for recursive
10258          inlining.
10259
10260          '--param max-inline-recursive-depth' applies to functions
10261          declared inline.  For functions not declared inline, recursive
10262          inlining happens only when '-finline-functions' (included in
10263          '-O3') is enabled; '--param max-inline-recursive-depth-auto'
10264          applies instead.
10265
10266     'min-inline-recursive-probability'
10267          Recursive inlining is profitable only for function having deep
10268          recursion in average and can hurt for function having little
10269          recursion depth by increasing the prologue size or complexity
10270          of function body to other optimizers.
10271
10272          When profile feedback is available (see '-fprofile-generate')
10273          the actual recursion depth can be guessed from the probability
10274          that function recurses via a given call expression.  This
10275          parameter limits inlining only to call expressions whose
10276          probability exceeds the given threshold (in percents).
10277
10278     'early-inlining-insns'
10279          Specify growth that the early inliner can make.  In effect it
10280          increases the amount of inlining for code having a large
10281          abstraction penalty.
10282
10283     'max-early-inliner-iterations'
10284          Limit of iterations of the early inliner.  This basically
10285          bounds the number of nested indirect calls the early inliner
10286          can resolve.  Deeper chains are still handled by late
10287          inlining.
10288
10289     'comdat-sharing-probability'
10290          Probability (in percent) that C++ inline function with comdat
10291          visibility are shared across multiple compilation units.
10292
10293     'profile-func-internal-id'
10294          A parameter to control whether to use function internal id in
10295          profile database lookup.  If the value is 0, the compiler uses
10296          an id that is based on function assembler name and filename,
10297          which makes old profile data more tolerant to source changes
10298          such as function reordering etc.
10299
10300     'min-vect-loop-bound'
10301          The minimum number of iterations under which loops are not
10302          vectorized when '-ftree-vectorize' is used.  The number of
10303          iterations after vectorization needs to be greater than the
10304          value specified by this option to allow vectorization.
10305
10306     'gcse-cost-distance-ratio'
10307          Scaling factor in calculation of maximum distance an
10308          expression can be moved by GCSE optimizations.  This is
10309          currently supported only in the code hoisting pass.  The
10310          bigger the ratio, the more aggressive code hoisting is with
10311          simple expressions, i.e., the expressions that have cost less
10312          than 'gcse-unrestricted-cost'.  Specifying 0 disables hoisting
10313          of simple expressions.
10314
10315     'gcse-unrestricted-cost'
10316          Cost, roughly measured as the cost of a single typical machine
10317          instruction, at which GCSE optimizations do not constrain the
10318          distance an expression can travel.  This is currently
10319          supported only in the code hoisting pass.  The lesser the
10320          cost, the more aggressive code hoisting is.  Specifying 0
10321          allows all expressions to travel unrestricted distances.
10322
10323     'max-hoist-depth'
10324          The depth of search in the dominator tree for expressions to
10325          hoist.  This is used to avoid quadratic behavior in hoisting
10326          algorithm.  The value of 0 does not limit on the search, but
10327          may slow down compilation of huge functions.
10328
10329     'max-tail-merge-comparisons'
10330          The maximum amount of similar bbs to compare a bb with.  This
10331          is used to avoid quadratic behavior in tree tail merging.
10332
10333     'max-tail-merge-iterations'
10334          The maximum amount of iterations of the pass over the
10335          function.  This is used to limit compilation time in tree tail
10336          merging.
10337
10338     'store-merging-allow-unaligned'
10339          Allow the store merging pass to introduce unaligned stores if
10340          it is legal to do so.
10341
10342     'max-stores-to-merge'
10343          The maximum number of stores to attempt to merge into wider
10344          stores in the store merging pass.
10345
10346     'max-unrolled-insns'
10347          The maximum number of instructions that a loop may have to be
10348          unrolled.  If a loop is unrolled, this parameter also
10349          determines how many times the loop code is unrolled.
10350
10351     'max-average-unrolled-insns'
10352          The maximum number of instructions biased by probabilities of
10353          their execution that a loop may have to be unrolled.  If a
10354          loop is unrolled, this parameter also determines how many
10355          times the loop code is unrolled.
10356
10357     'max-unroll-times'
10358          The maximum number of unrollings of a single loop.
10359
10360     'max-peeled-insns'
10361          The maximum number of instructions that a loop may have to be
10362          peeled.  If a loop is peeled, this parameter also determines
10363          how many times the loop code is peeled.
10364
10365     'max-peel-times'
10366          The maximum number of peelings of a single loop.
10367
10368     'max-peel-branches'
10369          The maximum number of branches on the hot path through the
10370          peeled sequence.
10371
10372     'max-completely-peeled-insns'
10373          The maximum number of insns of a completely peeled loop.
10374
10375     'max-completely-peel-times'
10376          The maximum number of iterations of a loop to be suitable for
10377          complete peeling.
10378
10379     'max-completely-peel-loop-nest-depth'
10380          The maximum depth of a loop nest suitable for complete
10381          peeling.
10382
10383     'max-unswitch-insns'
10384          The maximum number of insns of an unswitched loop.
10385
10386     'max-unswitch-level'
10387          The maximum number of branches unswitched in a single loop.
10388
10389     'lim-expensive'
10390          The minimum cost of an expensive expression in the loop
10391          invariant motion.
10392
10393     'iv-consider-all-candidates-bound'
10394          Bound on number of candidates for induction variables, below
10395          which all candidates are considered for each use in induction
10396          variable optimizations.  If there are more candidates than
10397          this, only the most relevant ones are considered to avoid
10398          quadratic time complexity.
10399
10400     'iv-max-considered-uses'
10401          The induction variable optimizations give up on loops that
10402          contain more induction variable uses.
10403
10404     'iv-always-prune-cand-set-bound'
10405          If the number of candidates in the set is smaller than this
10406          value, always try to remove unnecessary ivs from the set when
10407          adding a new one.
10408
10409     'avg-loop-niter'
10410          Average number of iterations of a loop.
10411
10412     'dse-max-object-size'
10413          Maximum size (in bytes) of objects tracked bytewise by dead
10414          store elimination.  Larger values may result in larger
10415          compilation times.
10416
10417     'dse-max-alias-queries-per-store'
10418          Maximum number of queries into the alias oracle per store.
10419          Larger values result in larger compilation times and may
10420          result in more removed dead stores.
10421
10422     'scev-max-expr-size'
10423          Bound on size of expressions used in the scalar evolutions
10424          analyzer.  Large expressions slow the analyzer.
10425
10426     'scev-max-expr-complexity'
10427          Bound on the complexity of the expressions in the scalar
10428          evolutions analyzer.  Complex expressions slow the analyzer.
10429
10430     'max-tree-if-conversion-phi-args'
10431          Maximum number of arguments in a PHI supported by TREE if
10432          conversion unless the loop is marked with simd pragma.
10433
10434     'vect-max-version-for-alignment-checks'
10435          The maximum number of run-time checks that can be performed
10436          when doing loop versioning for alignment in the vectorizer.
10437
10438     'vect-max-version-for-alias-checks'
10439          The maximum number of run-time checks that can be performed
10440          when doing loop versioning for alias in the vectorizer.
10441
10442     'vect-max-peeling-for-alignment'
10443          The maximum number of loop peels to enhance access alignment
10444          for vectorizer.  Value -1 means no limit.
10445
10446     'max-iterations-to-track'
10447          The maximum number of iterations of a loop the brute-force
10448          algorithm for analysis of the number of iterations of the loop
10449          tries to evaluate.
10450
10451     'hot-bb-count-ws-permille'
10452          A basic block profile count is considered hot if it
10453          contributes to the given permillage (i.e. 0...1000) of the
10454          entire profiled execution.
10455
10456     'hot-bb-frequency-fraction'
10457          Select fraction of the entry block frequency of executions of
10458          basic block in function given basic block needs to have to be
10459          considered hot.
10460
10461     'max-predicted-iterations'
10462          The maximum number of loop iterations we predict statically.
10463          This is useful in cases where a function contains a single
10464          loop with known bound and another loop with unknown bound.
10465          The known number of iterations is predicted correctly, while
10466          the unknown number of iterations average to roughly 10.  This
10467          means that the loop without bounds appears artificially cold
10468          relative to the other one.
10469
10470     'builtin-expect-probability'
10471          Control the probability of the expression having the specified
10472          value.  This parameter takes a percentage (i.e. 0 ...  100) as
10473          input.
10474
10475     'builtin-string-cmp-inline-length'
10476          The maximum length of a constant string for a builtin string
10477          cmp call eligible for inlining.
10478
10479     'align-threshold'
10480
10481          Select fraction of the maximal frequency of executions of a
10482          basic block in a function to align the basic block.
10483
10484     'align-loop-iterations'
10485
10486          A loop expected to iterate at least the selected number of
10487          iterations is aligned.
10488
10489     'tracer-dynamic-coverage'
10490     'tracer-dynamic-coverage-feedback'
10491
10492          This value is used to limit superblock formation once the
10493          given percentage of executed instructions is covered.  This
10494          limits unnecessary code size expansion.
10495
10496          The 'tracer-dynamic-coverage-feedback' parameter is used only
10497          when profile feedback is available.  The real profiles (as
10498          opposed to statically estimated ones) are much less balanced
10499          allowing the threshold to be larger value.
10500
10501     'tracer-max-code-growth'
10502          Stop tail duplication once code growth has reached given
10503          percentage.  This is a rather artificial limit, as most of the
10504          duplicates are eliminated later in cross jumping, so it may be
10505          set to much higher values than is the desired code growth.
10506
10507     'tracer-min-branch-ratio'
10508
10509          Stop reverse growth when the reverse probability of best edge
10510          is less than this threshold (in percent).
10511
10512     'tracer-min-branch-probability'
10513     'tracer-min-branch-probability-feedback'
10514
10515          Stop forward growth if the best edge has probability lower
10516          than this threshold.
10517
10518          Similarly to 'tracer-dynamic-coverage' two parameters are
10519          provided.  'tracer-min-branch-probability-feedback' is used
10520          for compilation with profile feedback and
10521          'tracer-min-branch-probability' compilation without.  The
10522          value for compilation with profile feedback needs to be more
10523          conservative (higher) in order to make tracer effective.
10524
10525     'stack-clash-protection-guard-size'
10526          Specify the size of the operating system provided stack guard
10527          as 2 raised to NUM bytes.  Higher values may reduce the number
10528          of explicit probes, but a value larger than the operating
10529          system provided guard will leave code vulnerable to stack
10530          clash style attacks.
10531
10532     'stack-clash-protection-probe-interval'
10533          Stack clash protection involves probing stack space as it is
10534          allocated.  This param controls the maximum distance between
10535          probes into the stack as 2 raised to NUM bytes.  Higher values
10536          may reduce the number of explicit probes, but a value larger
10537          than the operating system provided guard will leave code
10538          vulnerable to stack clash style attacks.
10539
10540     'max-cse-path-length'
10541
10542          The maximum number of basic blocks on path that CSE considers.
10543
10544     'max-cse-insns'
10545          The maximum number of instructions CSE processes before
10546          flushing.
10547
10548     'ggc-min-expand'
10549
10550          GCC uses a garbage collector to manage its own memory
10551          allocation.  This parameter specifies the minimum percentage
10552          by which the garbage collector's heap should be allowed to
10553          expand between collections.  Tuning this may improve
10554          compilation speed; it has no effect on code generation.
10555
10556          The default is 30% + 70% * (RAM/1GB) with an upper bound of
10557          100% when RAM >= 1GB.  If 'getrlimit' is available, the notion
10558          of "RAM" is the smallest of actual RAM and 'RLIMIT_DATA' or
10559          'RLIMIT_AS'.  If GCC is not able to calculate RAM on a
10560          particular platform, the lower bound of 30% is used.  Setting
10561          this parameter and 'ggc-min-heapsize' to zero causes a full
10562          collection to occur at every opportunity.  This is extremely
10563          slow, but can be useful for debugging.
10564
10565     'ggc-min-heapsize'
10566
10567          Minimum size of the garbage collector's heap before it begins
10568          bothering to collect garbage.  The first collection occurs
10569          after the heap expands by 'ggc-min-expand'% beyond
10570          'ggc-min-heapsize'.  Again, tuning this may improve
10571          compilation speed, and has no effect on code generation.
10572
10573          The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
10574          that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
10575          exceeded, but with a lower bound of 4096 (four megabytes) and
10576          an upper bound of 131072 (128 megabytes).  If GCC is not able
10577          to calculate RAM on a particular platform, the lower bound is
10578          used.  Setting this parameter very large effectively disables
10579          garbage collection.  Setting this parameter and
10580          'ggc-min-expand' to zero causes a full collection to occur at
10581          every opportunity.
10582
10583     'max-reload-search-insns'
10584          The maximum number of instruction reload should look backward
10585          for equivalent register.  Increasing values mean more
10586          aggressive optimization, making the compilation time increase
10587          with probably slightly better performance.
10588
10589     'max-cselib-memory-locations'
10590          The maximum number of memory locations cselib should take into
10591          account.  Increasing values mean more aggressive optimization,
10592          making the compilation time increase with probably slightly
10593          better performance.
10594
10595     'max-sched-ready-insns'
10596          The maximum number of instructions ready to be issued the
10597          scheduler should consider at any given time during the first
10598          scheduling pass.  Increasing values mean more thorough
10599          searches, making the compilation time increase with probably
10600          little benefit.
10601
10602     'max-sched-region-blocks'
10603          The maximum number of blocks in a region to be considered for
10604          interblock scheduling.
10605
10606     'max-pipeline-region-blocks'
10607          The maximum number of blocks in a region to be considered for
10608          pipelining in the selective scheduler.
10609
10610     'max-sched-region-insns'
10611          The maximum number of insns in a region to be considered for
10612          interblock scheduling.
10613
10614     'max-pipeline-region-insns'
10615          The maximum number of insns in a region to be considered for
10616          pipelining in the selective scheduler.
10617
10618     'min-spec-prob'
10619          The minimum probability (in percents) of reaching a source
10620          block for interblock speculative scheduling.
10621
10622     'max-sched-extend-regions-iters'
10623          The maximum number of iterations through CFG to extend
10624          regions.  A value of 0 disables region extensions.
10625
10626     'max-sched-insn-conflict-delay'
10627          The maximum conflict delay for an insn to be considered for
10628          speculative motion.
10629
10630     'sched-spec-prob-cutoff'
10631          The minimal probability of speculation success (in percents),
10632          so that speculative insns are scheduled.
10633
10634     'sched-state-edge-prob-cutoff'
10635          The minimum probability an edge must have for the scheduler to
10636          save its state across it.
10637
10638     'sched-mem-true-dep-cost'
10639          Minimal distance (in CPU cycles) between store and load
10640          targeting same memory locations.
10641
10642     'selsched-max-lookahead'
10643          The maximum size of the lookahead window of selective
10644          scheduling.  It is a depth of search for available
10645          instructions.
10646
10647     'selsched-max-sched-times'
10648          The maximum number of times that an instruction is scheduled
10649          during selective scheduling.  This is the limit on the number
10650          of iterations through which the instruction may be pipelined.
10651
10652     'selsched-insns-to-rename'
10653          The maximum number of best instructions in the ready list that
10654          are considered for renaming in the selective scheduler.
10655
10656     'sms-min-sc'
10657          The minimum value of stage count that swing modulo scheduler
10658          generates.
10659
10660     'max-last-value-rtl'
10661          The maximum size measured as number of RTLs that can be
10662          recorded in an expression in combiner for a pseudo register as
10663          last known value of that register.
10664
10665     'max-combine-insns'
10666          The maximum number of instructions the RTL combiner tries to
10667          combine.
10668
10669     'integer-share-limit'
10670          Small integer constants can use a shared data structure,
10671          reducing the compiler's memory usage and increasing its speed.
10672          This sets the maximum value of a shared integer constant.
10673
10674     'ssp-buffer-size'
10675          The minimum size of buffers (i.e. arrays) that receive stack
10676          smashing protection when '-fstack-protection' is used.
10677
10678     'min-size-for-stack-sharing'
10679          The minimum size of variables taking part in stack slot
10680          sharing when not optimizing.
10681
10682     'max-jump-thread-duplication-stmts'
10683          Maximum number of statements allowed in a block that needs to
10684          be duplicated when threading jumps.
10685
10686     'max-fields-for-field-sensitive'
10687          Maximum number of fields in a structure treated in a field
10688          sensitive manner during pointer analysis.
10689
10690     'prefetch-latency'
10691          Estimate on average number of instructions that are executed
10692          before prefetch finishes.  The distance prefetched ahead is
10693          proportional to this constant.  Increasing this number may
10694          also lead to less streams being prefetched (see
10695          'simultaneous-prefetches').
10696
10697     'simultaneous-prefetches'
10698          Maximum number of prefetches that can run at the same time.
10699
10700     'l1-cache-line-size'
10701          The size of cache line in L1 data cache, in bytes.
10702
10703     'l1-cache-size'
10704          The size of L1 data cache, in kilobytes.
10705
10706     'l2-cache-size'
10707          The size of L2 data cache, in kilobytes.
10708
10709     'prefetch-dynamic-strides'
10710          Whether the loop array prefetch pass should issue software
10711          prefetch hints for strides that are non-constant.  In some
10712          cases this may be beneficial, though the fact the stride is
10713          non-constant may make it hard to predict when there is clear
10714          benefit to issuing these hints.
10715
10716          Set to 1 if the prefetch hints should be issued for
10717          non-constant strides.  Set to 0 if prefetch hints should be
10718          issued only for strides that are known to be constant and
10719          below 'prefetch-minimum-stride'.
10720
10721     'prefetch-minimum-stride'
10722          Minimum constant stride, in bytes, to start using prefetch
10723          hints for.  If the stride is less than this threshold,
10724          prefetch hints will not be issued.
10725
10726          This setting is useful for processors that have hardware
10727          prefetchers, in which case there may be conflicts between the
10728          hardware prefetchers and the software prefetchers.  If the
10729          hardware prefetchers have a maximum stride they can handle, it
10730          should be used here to improve the use of software
10731          prefetchers.
10732
10733          A value of -1 means we don't have a threshold and therefore
10734          prefetch hints can be issued for any constant stride.
10735
10736          This setting is only useful for strides that are known and
10737          constant.
10738
10739     'loop-interchange-max-num-stmts'
10740          The maximum number of stmts in a loop to be interchanged.
10741
10742     'loop-interchange-stride-ratio'
10743          The minimum ratio between stride of two loops for interchange
10744          to be profitable.
10745
10746     'min-insn-to-prefetch-ratio'
10747          The minimum ratio between the number of instructions and the
10748          number of prefetches to enable prefetching in a loop.
10749
10750     'prefetch-min-insn-to-mem-ratio'
10751          The minimum ratio between the number of instructions and the
10752          number of memory references to enable prefetching in a loop.
10753
10754     'use-canonical-types'
10755          Whether the compiler should use the "canonical" type system.
10756          Should always be 1, which uses a more efficient internal
10757          mechanism for comparing types in C++ and Objective-C++.
10758          However, if bugs in the canonical type system are causing
10759          compilation failures, set this value to 0 to disable canonical
10760          types.
10761
10762     'switch-conversion-max-branch-ratio'
10763          Switch initialization conversion refuses to create arrays that
10764          are bigger than 'switch-conversion-max-branch-ratio' times the
10765          number of branches in the switch.
10766
10767     'max-partial-antic-length'
10768          Maximum length of the partial antic set computed during the
10769          tree partial redundancy elimination optimization
10770          ('-ftree-pre') when optimizing at '-O3' and above.  For some
10771          sorts of source code the enhanced partial redundancy
10772          elimination optimization can run away, consuming all of the
10773          memory available on the host machine.  This parameter sets a
10774          limit on the length of the sets that are computed, which
10775          prevents the runaway behavior.  Setting a value of 0 for this
10776          parameter allows an unlimited set length.
10777
10778     'rpo-vn-max-loop-depth'
10779          Maximum loop depth that is value-numbered optimistically.
10780          When the limit hits the innermost RPO-VN-MAX-LOOP-DEPTH loops
10781          and the outermost loop in the loop nest are value-numbered
10782          optimistically and the remaining ones not.
10783
10784     'sccvn-max-alias-queries-per-access'
10785          Maximum number of alias-oracle queries we perform when looking
10786          for redundancies for loads and stores.  If this limit is hit
10787          the search is aborted and the load or store is not considered
10788          redundant.  The number of queries is algorithmically limited
10789          to the number of stores on all paths from the load to the
10790          function entry.
10791
10792     'ira-max-loops-num'
10793          IRA uses regional register allocation by default.  If a
10794          function contains more loops than the number given by this
10795          parameter, only at most the given number of the most
10796          frequently-executed loops form regions for regional register
10797          allocation.
10798
10799     'ira-max-conflict-table-size'
10800          Although IRA uses a sophisticated algorithm to compress the
10801          conflict table, the table can still require excessive amounts
10802          of memory for huge functions.  If the conflict table for a
10803          function could be more than the size in MB given by this
10804          parameter, the register allocator instead uses a faster,
10805          simpler, and lower-quality algorithm that does not require
10806          building a pseudo-register conflict table.
10807
10808     'ira-loop-reserved-regs'
10809          IRA can be used to evaluate more accurate register pressure in
10810          loops for decisions to move loop invariants (see '-O3').  The
10811          number of available registers reserved for some other purposes
10812          is given by this parameter.  Default of the parameter is the
10813          best found from numerous experiments.
10814
10815     'lra-inheritance-ebb-probability-cutoff'
10816          LRA tries to reuse values reloaded in registers in subsequent
10817          insns.  This optimization is called inheritance.  EBB is used
10818          as a region to do this optimization.  The parameter defines a
10819          minimal fall-through edge probability in percentage used to
10820          add BB to inheritance EBB in LRA. The default value was chosen
10821          from numerous runs of SPEC2000 on x86-64.
10822
10823     'loop-invariant-max-bbs-in-loop'
10824          Loop invariant motion can be very expensive, both in
10825          compilation time and in amount of needed compile-time memory,
10826          with very large loops.  Loops with more basic blocks than this
10827          parameter won't have loop invariant motion optimization
10828          performed on them.
10829
10830     'loop-max-datarefs-for-datadeps'
10831          Building data dependencies is expensive for very large loops.
10832          This parameter limits the number of data references in loops
10833          that are considered for data dependence analysis.  These large
10834          loops are no handled by the optimizations using loop data
10835          dependencies.
10836
10837     'max-vartrack-size'
10838          Sets a maximum number of hash table slots to use during
10839          variable tracking dataflow analysis of any function.  If this
10840          limit is exceeded with variable tracking at assignments
10841          enabled, analysis for that function is retried without it,
10842          after removing all debug insns from the function.  If the
10843          limit is exceeded even without debug insns, var tracking
10844          analysis is completely disabled for the function.  Setting the
10845          parameter to zero makes it unlimited.
10846
10847     'max-vartrack-expr-depth'
10848          Sets a maximum number of recursion levels when attempting to
10849          map variable names or debug temporaries to value expressions.
10850          This trades compilation time for more complete debug
10851          information.  If this is set too low, value expressions that
10852          are available and could be represented in debug information
10853          may end up not being used; setting this higher may enable the
10854          compiler to find more complex debug expressions, but compile
10855          time and memory use may grow.
10856
10857     'max-debug-marker-count'
10858          Sets a threshold on the number of debug markers (e.g. begin
10859          stmt markers) to avoid complexity explosion at inlining or
10860          expanding to RTL. If a function has more such gimple stmts
10861          than the set limit, such stmts will be dropped from the
10862          inlined copy of a function, and from its RTL expansion.
10863
10864     'min-nondebug-insn-uid'
10865          Use uids starting at this parameter for nondebug insns.  The
10866          range below the parameter is reserved exclusively for debug
10867          insns created by '-fvar-tracking-assignments', but debug insns
10868          may get (non-overlapping) uids above it if the reserved range
10869          is exhausted.
10870
10871     'ipa-sra-ptr-growth-factor'
10872          IPA-SRA replaces a pointer to an aggregate with one or more
10873          new parameters only when their cumulative size is less or
10874          equal to 'ipa-sra-ptr-growth-factor' times the size of the
10875          original pointer parameter.
10876
10877     'sra-max-scalarization-size-Ospeed'
10878     'sra-max-scalarization-size-Osize'
10879          The two Scalar Reduction of Aggregates passes (SRA and
10880          IPA-SRA) aim to replace scalar parts of aggregates with uses
10881          of independent scalar variables.  These parameters control the
10882          maximum size, in storage units, of aggregate which is
10883          considered for replacement when compiling for speed
10884          ('sra-max-scalarization-size-Ospeed') or size
10885          ('sra-max-scalarization-size-Osize') respectively.
10886
10887     'sra-max-propagations'
10888          The maximum number of artificial accesses that Scalar
10889          Replacement of Aggregates (SRA) will track, per one local
10890          variable, in order to facilitate copy propagation.
10891
10892     'tm-max-aggregate-size'
10893          When making copies of thread-local variables in a transaction,
10894          this parameter specifies the size in bytes after which
10895          variables are saved with the logging functions as opposed to
10896          save/restore code sequence pairs.  This option only applies
10897          when using '-fgnu-tm'.
10898
10899     'graphite-max-nb-scop-params'
10900          To avoid exponential effects in the Graphite loop transforms,
10901          the number of parameters in a Static Control Part (SCoP) is
10902          bounded.  A value of zero can be used to lift the bound.  A
10903          variable whose value is unknown at compilation time and
10904          defined outside a SCoP is a parameter of the SCoP.
10905
10906     'loop-block-tile-size'
10907          Loop blocking or strip mining transforms, enabled with
10908          '-floop-block' or '-floop-strip-mine', strip mine each loop in
10909          the loop nest by a given number of iterations.  The strip
10910          length can be changed using the 'loop-block-tile-size'
10911          parameter.
10912
10913     'ipa-cp-value-list-size'
10914          IPA-CP attempts to track all possible values and types passed
10915          to a function's parameter in order to propagate them and
10916          perform devirtualization.  'ipa-cp-value-list-size' is the
10917          maximum number of values and types it stores per one formal
10918          parameter of a function.
10919
10920     'ipa-cp-eval-threshold'
10921          IPA-CP calculates its own score of cloning profitability
10922          heuristics and performs those cloning opportunities with
10923          scores that exceed 'ipa-cp-eval-threshold'.
10924
10925     'ipa-cp-recursion-penalty'
10926          Percentage penalty the recursive functions will receive when
10927          they are evaluated for cloning.
10928
10929     'ipa-cp-single-call-penalty'
10930          Percentage penalty functions containing a single call to
10931          another function will receive when they are evaluated for
10932          cloning.
10933
10934     'ipa-max-agg-items'
10935          IPA-CP is also capable to propagate a number of scalar values
10936          passed in an aggregate.  'ipa-max-agg-items' controls the
10937          maximum number of such values per one parameter.
10938
10939     'ipa-cp-loop-hint-bonus'
10940          When IPA-CP determines that a cloning candidate would make the
10941          number of iterations of a loop known, it adds a bonus of
10942          'ipa-cp-loop-hint-bonus' to the profitability score of the
10943          candidate.
10944
10945     'ipa-cp-array-index-hint-bonus'
10946          When IPA-CP determines that a cloning candidate would make the
10947          index of an array access known, it adds a bonus of
10948          'ipa-cp-array-index-hint-bonus' to the profitability score of
10949          the candidate.
10950
10951     'ipa-max-aa-steps'
10952          During its analysis of function bodies, IPA-CP employs alias
10953          analysis in order to track values pointed to by function
10954          parameters.  In order not spend too much time analyzing huge
10955          functions, it gives up and consider all memory clobbered after
10956          examining 'ipa-max-aa-steps' statements modifying memory.
10957
10958     'lto-partitions'
10959          Specify desired number of partitions produced during WHOPR
10960          compilation.  The number of partitions should exceed the
10961          number of CPUs used for compilation.
10962
10963     'lto-min-partition'
10964          Size of minimal partition for WHOPR (in estimated
10965          instructions).  This prevents expenses of splitting very small
10966          programs into too many partitions.
10967
10968     'lto-max-partition'
10969          Size of max partition for WHOPR (in estimated instructions).
10970          to provide an upper bound for individual size of partition.
10971          Meant to be used only with balanced partitioning.
10972
10973     'lto-max-streaming-parallelism'
10974          Maximal number of parallel processes used for LTO streaming.
10975
10976     'cxx-max-namespaces-for-diagnostic-help'
10977          The maximum number of namespaces to consult for suggestions
10978          when C++ name lookup fails for an identifier.
10979
10980     'sink-frequency-threshold'
10981          The maximum relative execution frequency (in percents) of the
10982          target block relative to a statement's original block to allow
10983          statement sinking of a statement.  Larger numbers result in
10984          more aggressive statement sinking.  A small positive
10985          adjustment is applied for statements with memory operands as
10986          those are even more profitable so sink.
10987
10988     'max-stores-to-sink'
10989          The maximum number of conditional store pairs that can be
10990          sunk.  Set to 0 if either vectorization ('-ftree-vectorize')
10991          or if-conversion ('-ftree-loop-if-convert') is disabled.
10992
10993     'allow-store-data-races'
10994          Allow optimizers to introduce new data races on stores.  Set
10995          to 1 to allow, otherwise to 0.
10996
10997     'case-values-threshold'
10998          The smallest number of different values for which it is best
10999          to use a jump-table instead of a tree of conditional branches.
11000          If the value is 0, use the default for the machine.
11001
11002     'tree-reassoc-width'
11003          Set the maximum number of instructions executed in parallel in
11004          reassociated tree.  This parameter overrides target dependent
11005          heuristics used by default if has non zero value.
11006
11007     'sched-pressure-algorithm'
11008          Choose between the two available implementations of
11009          '-fsched-pressure'.  Algorithm 1 is the original
11010          implementation and is the more likely to prevent instructions
11011          from being reordered.  Algorithm 2 was designed to be a
11012          compromise between the relatively conservative approach taken
11013          by algorithm 1 and the rather aggressive approach taken by the
11014          default scheduler.  It relies more heavily on having a regular
11015          register file and accurate register pressure classes.  See
11016          'haifa-sched.c' in the GCC sources for more details.
11017
11018          The default choice depends on the target.
11019
11020     'max-slsr-cand-scan'
11021          Set the maximum number of existing candidates that are
11022          considered when seeking a basis for a new straight-line
11023          strength reduction candidate.
11024
11025     'asan-globals'
11026          Enable buffer overflow detection for global objects.  This
11027          kind of protection is enabled by default if you are using
11028          '-fsanitize=address' option.  To disable global objects
11029          protection use '--param asan-globals=0'.
11030
11031     'asan-stack'
11032          Enable buffer overflow detection for stack objects.  This kind
11033          of protection is enabled by default when using
11034          '-fsanitize=address'.  To disable stack protection use
11035          '--param asan-stack=0' option.
11036
11037     'asan-instrument-reads'
11038          Enable buffer overflow detection for memory reads.  This kind
11039          of protection is enabled by default when using
11040          '-fsanitize=address'.  To disable memory reads protection use
11041          '--param asan-instrument-reads=0'.
11042
11043     'asan-instrument-writes'
11044          Enable buffer overflow detection for memory writes.  This kind
11045          of protection is enabled by default when using
11046          '-fsanitize=address'.  To disable memory writes protection use
11047          '--param asan-instrument-writes=0' option.
11048
11049     'asan-memintrin'
11050          Enable detection for built-in functions.  This kind of
11051          protection is enabled by default when using
11052          '-fsanitize=address'.  To disable built-in functions
11053          protection use '--param asan-memintrin=0'.
11054
11055     'asan-use-after-return'
11056          Enable detection of use-after-return.  This kind of protection
11057          is enabled by default when using the '-fsanitize=address'
11058          option.  To disable it use '--param asan-use-after-return=0'.
11059
11060          Note: By default the check is disabled at run time.  To enable
11061          it, add 'detect_stack_use_after_return=1' to the environment
11062          variable 'ASAN_OPTIONS'.
11063
11064     'asan-instrumentation-with-call-threshold'
11065          If number of memory accesses in function being instrumented is
11066          greater or equal to this number, use callbacks instead of
11067          inline checks.  E.g.  to disable inline code use '--param
11068          asan-instrumentation-with-call-threshold=0'.
11069
11070     'use-after-scope-direct-emission-threshold'
11071          If the size of a local variable in bytes is smaller or equal
11072          to this number, directly poison (or unpoison) shadow memory
11073          instead of using run-time callbacks.
11074
11075     'max-fsm-thread-path-insns'
11076          Maximum number of instructions to copy when duplicating blocks
11077          on a finite state automaton jump thread path.
11078
11079     'max-fsm-thread-length'
11080          Maximum number of basic blocks on a finite state automaton
11081          jump thread path.
11082
11083     'max-fsm-thread-paths'
11084          Maximum number of new jump thread paths to create for a finite
11085          state automaton.
11086
11087     'parloops-chunk-size'
11088          Chunk size of omp schedule for loops parallelized by parloops.
11089
11090     'parloops-schedule'
11091          Schedule type of omp schedule for loops parallelized by
11092          parloops (static, dynamic, guided, auto, runtime).
11093
11094     'parloops-min-per-thread'
11095          The minimum number of iterations per thread of an innermost
11096          parallelized loop for which the parallelized variant is
11097          preferred over the single threaded one.  Note that for a
11098          parallelized loop nest the minimum number of iterations of the
11099          outermost loop per thread is two.
11100
11101     'max-ssa-name-query-depth'
11102          Maximum depth of recursion when querying properties of SSA
11103          names in things like fold routines.  One level of recursion
11104          corresponds to following a use-def chain.
11105
11106     'hsa-gen-debug-stores'
11107          Enable emission of special debug stores within HSA kernels
11108          which are then read and reported by libgomp plugin.
11109          Generation of these stores is disabled by default, use
11110          '--param hsa-gen-debug-stores=1' to enable it.
11111
11112     'max-speculative-devirt-maydefs'
11113          The maximum number of may-defs we analyze when looking for a
11114          must-def specifying the dynamic type of an object that invokes
11115          a virtual call we may be able to devirtualize speculatively.
11116
11117     'max-vrp-switch-assertions'
11118          The maximum number of assertions to add along the default edge
11119          of a switch statement during VRP.
11120
11121     'unroll-jam-min-percent'
11122          The minimum percentage of memory references that must be
11123          optimized away for the unroll-and-jam transformation to be
11124          considered profitable.
11125
11126     'unroll-jam-max-unroll'
11127          The maximum number of times the outer loop should be unrolled
11128          by the unroll-and-jam transformation.
11129
11130     'max-rtl-if-conversion-unpredictable-cost'
11131          Maximum permissible cost for the sequence that would be
11132          generated by the RTL if-conversion pass for a branch that is
11133          considered unpredictable.
11134
11135     'max-variable-expansions-in-unroller'
11136          If '-fvariable-expansion-in-unroller' is used, the maximum
11137          number of times that an individual variable will be expanded
11138          during loop unrolling.
11139
11140     'tracer-min-branch-probability-feedback'
11141          Stop forward growth if the probability of best edge is less
11142          than this threshold (in percent).  Used when profile feedback
11143          is available.
11144
11145     'partial-inlining-entry-probability'
11146          Maximum probability of the entry BB of split region (in
11147          percent relative to entry BB of the function) to make partial
11148          inlining happen.
11149
11150     'max-tracked-strlens'
11151          Maximum number of strings for which strlen optimization pass
11152          will track string lengths.
11153
11154     'gcse-after-reload-partial-fraction'
11155          The threshold ratio for performing partial redundancy
11156          elimination after reload.
11157
11158     'gcse-after-reload-critical-fraction'
11159          The threshold ratio of critical edges execution count that
11160          permit performing redundancy elimination after reload.
11161
11162     'max-loop-header-insns'
11163          The maximum number of insns in loop header duplicated by the
11164          copy loop headers pass.
11165
11166     'vect-epilogues-nomask'
11167          Enable loop epilogue vectorization using smaller vector size.
11168
11169     'slp-max-insns-in-bb'
11170          Maximum number of instructions in basic block to be considered
11171          for SLP vectorization.
11172
11173     'avoid-fma-max-bits'
11174          Maximum number of bits for which we avoid creating FMAs.
11175
11176     'sms-loop-average-count-threshold'
11177          A threshold on the average loop count considered by the swing
11178          modulo scheduler.
11179
11180     'sms-dfa-history'
11181          The number of cycles the swing modulo scheduler considers when
11182          checking conflicts using DFA.
11183
11184     'hot-bb-count-fraction'
11185          Select fraction of the maximal count of repetitions of basic
11186          block in program given basic block needs to have to be
11187          considered hot (used in non-LTO mode)
11188
11189     'max-inline-insns-recursive-auto'
11190          The maximum number of instructions non-inline function can
11191          grow to via recursive inlining.
11192
11193     'graphite-allow-codegen-errors'
11194          Whether codegen errors should be ICEs when '-fchecking'.
11195
11196     'sms-max-ii-factor'
11197          A factor for tuning the upper bound that swing modulo
11198          scheduler uses for scheduling a loop.
11199
11200     'lra-max-considered-reload-pseudos'
11201          The max number of reload pseudos which are considered during
11202          spilling a non-reload pseudo.
11203
11204     'max-pow-sqrt-depth'
11205          Maximum depth of sqrt chains to use when synthesizing
11206          exponentiation by a real constant.
11207
11208     'max-dse-active-local-stores'
11209          Maximum number of active local stores in RTL dead store
11210          elimination.
11211
11212     'asan-instrument-allocas'
11213          Enable asan allocas/VLAs protection.
11214
11215     'max-iterations-computation-cost'
11216          Bound on the cost of an expression to compute the number of
11217          iterations.
11218
11219     'max-isl-operations'
11220          Maximum number of isl operations, 0 means unlimited.
11221
11222     'graphite-max-arrays-per-scop'
11223          Maximum number of arrays per scop.
11224
11225     'max-vartrack-reverse-op-size'
11226          Max.  size of loc list for which reverse ops should be added.
11227
11228     'unlikely-bb-count-fraction'
11229          The minimum fraction of profile runs a given basic block
11230          execution count must be not to be considered unlikely.
11231
11232     'tracer-dynamic-coverage-feedback'
11233          The percentage of function, weighted by execution frequency,
11234          that must be covered by trace formation.  Used when profile
11235          feedback is available.
11236
11237     'max-inline-recursive-depth-auto'
11238          The maximum depth of recursive inlining for non-inline
11239          functions.
11240
11241     'fsm-scale-path-stmts'
11242          Scale factor to apply to the number of statements in a
11243          threading path when comparing to the number of (scaled)
11244          blocks.
11245
11246     'fsm-maximum-phi-arguments'
11247          Maximum number of arguments a PHI may have before the FSM
11248          threader will not try to thread through its block.
11249
11250     'uninit-control-dep-attempts'
11251          Maximum number of nested calls to search for control
11252          dependencies during uninitialized variable analysis.
11253
11254     'indir-call-topn-profile'
11255          Track top N target addresses in indirect-call profile.
11256
11257     'max-once-peeled-insns'
11258          The maximum number of insns of a peeled loop that rolls only
11259          once.
11260
11261     'sra-max-scalarization-size-Osize'
11262          Maximum size, in storage units, of an aggregate which should
11263          be considered for scalarization when compiling for size.
11264
11265     'fsm-scale-path-blocks'
11266          Scale factor to apply to the number of blocks in a threading
11267          path when comparing to the number of (scaled) statements.
11268
11269     'sched-autopref-queue-depth'
11270          Hardware autoprefetcher scheduler model control flag.  Number
11271          of lookahead cycles the model looks into; at ' ' only enable
11272          instruction sorting heuristic.
11273
11274     'loop-versioning-max-inner-insns'
11275          The maximum number of instructions that an inner loop can have
11276          before the loop versioning pass considers it too big to copy.
11277
11278     'loop-versioning-max-outer-insns'
11279          The maximum number of instructions that an outer loop can have
11280          before the loop versioning pass considers it too big to copy,
11281          discounting any instructions in inner loops that directly
11282          benefit from versioning.
11283
11284     'ssa-name-def-chain-limit'
11285          The maximum number of SSA_NAME assignments to follow in
11286          determining a property of a variable such as its value.  This
11287          limits the number of iterations or recursive calls GCC
11288          performs when optimizing certain statements or when
11289          determining their validity prior to issuing diagnostics.
11290
11291
11292File: gcc.info,  Node: Instrumentation Options,  Next: Preprocessor Options,  Prev: Optimize Options,  Up: Invoking GCC
11293
112943.11 Program Instrumentation Options
11295====================================
11296
11297GCC supports a number of command-line options that control adding
11298run-time instrumentation to the code it normally generates.  For
11299example, one purpose of instrumentation is collect profiling statistics
11300for use in finding program hot spots, code coverage analysis, or
11301profile-guided optimizations.  Another class of program instrumentation
11302is adding run-time checking to detect programming errors like invalid
11303pointer dereferences or out-of-bounds array accesses, as well as
11304deliberately hostile attacks such as stack smashing or C++ vtable
11305hijacking.  There is also a general hook which can be used to implement
11306other forms of tracing or function-level instrumentation for debug or
11307program analysis purposes.
11308
11309'-p'
11310'-pg'
11311     Generate extra code to write profile information suitable for the
11312     analysis program 'prof' (for '-p') or 'gprof' (for '-pg').  You
11313     must use this option when compiling the source files you want data
11314     about, and you must also use it when linking.
11315
11316     You can use the function attribute 'no_instrument_function' to
11317     suppress profiling of individual functions when compiling with
11318     these options.  *Note Common Function Attributes::.
11319
11320'-fprofile-arcs'
11321     Add code so that program flow "arcs" are instrumented.  During
11322     execution the program records how many times each branch and call
11323     is executed and how many times it is taken or returns.  On targets
11324     that support constructors with priority support, profiling properly
11325     handles constructors, destructors and C++ constructors (and
11326     destructors) of classes which are used as a type of a global
11327     variable.
11328
11329     When the compiled program exits it saves this data to a file called
11330     'AUXNAME.gcda' for each source file.  The data may be used for
11331     profile-directed optimizations ('-fbranch-probabilities'), or for
11332     test coverage analysis ('-ftest-coverage').  Each object file's
11333     AUXNAME is generated from the name of the output file, if
11334     explicitly specified and it is not the final executable, otherwise
11335     it is the basename of the source file.  In both cases any suffix is
11336     removed (e.g. 'foo.gcda' for input file 'dir/foo.c', or
11337     'dir/foo.gcda' for output file specified as '-o dir/foo.o').  *Note
11338     Cross-profiling::.
11339
11340'--coverage'
11341
11342     This option is used to compile and link code instrumented for
11343     coverage analysis.  The option is a synonym for '-fprofile-arcs'
11344     '-ftest-coverage' (when compiling) and '-lgcov' (when linking).
11345     See the documentation for those options for more details.
11346
11347        * Compile the source files with '-fprofile-arcs' plus
11348          optimization and code generation options.  For test coverage
11349          analysis, use the additional '-ftest-coverage' option.  You do
11350          not need to profile every source file in a program.
11351
11352        * Compile the source files additionally with
11353          '-fprofile-abs-path' to create absolute path names in the
11354          '.gcno' files.  This allows 'gcov' to find the correct sources
11355          in projects where compilations occur with different working
11356          directories.
11357
11358        * Link your object files with '-lgcov' or '-fprofile-arcs' (the
11359          latter implies the former).
11360
11361        * Run the program on a representative workload to generate the
11362          arc profile information.  This may be repeated any number of
11363          times.  You can run concurrent instances of your program, and
11364          provided that the file system supports locking, the data files
11365          will be correctly updated.  Unless a strict ISO C dialect
11366          option is in effect, 'fork' calls are detected and correctly
11367          handled without double counting.
11368
11369        * For profile-directed optimizations, compile the source files
11370          again with the same optimization and code generation options
11371          plus '-fbranch-probabilities' (*note Options that Control
11372          Optimization: Optimize Options.).
11373
11374        * For test coverage analysis, use 'gcov' to produce human
11375          readable information from the '.gcno' and '.gcda' files.
11376          Refer to the 'gcov' documentation for further information.
11377
11378     With '-fprofile-arcs', for each function of your program GCC
11379     creates a program flow graph, then finds a spanning tree for the
11380     graph.  Only arcs that are not on the spanning tree have to be
11381     instrumented: the compiler adds code to count the number of times
11382     that these arcs are executed.  When an arc is the only exit or only
11383     entrance to a block, the instrumentation code can be added to the
11384     block; otherwise, a new basic block must be created to hold the
11385     instrumentation code.
11386
11387'-ftest-coverage'
11388     Produce a notes file that the 'gcov' code-coverage utility (*note
11389     'gcov'--a Test Coverage Program: Gcov.) can use to show program
11390     coverage.  Each source file's note file is called 'AUXNAME.gcno'.
11391     Refer to the '-fprofile-arcs' option above for a description of
11392     AUXNAME and instructions on how to generate test coverage data.
11393     Coverage data matches the source files more closely if you do not
11394     optimize.
11395
11396'-fprofile-abs-path'
11397     Automatically convert relative source file names to absolute path
11398     names in the '.gcno' files.  This allows 'gcov' to find the correct
11399     sources in projects where compilations occur with different working
11400     directories.
11401
11402'-fprofile-dir=PATH'
11403
11404     Set the directory to search for the profile data files in to PATH.
11405     This option affects only the profile data generated by
11406     '-fprofile-generate', '-ftest-coverage', '-fprofile-arcs' and used
11407     by '-fprofile-use' and '-fbranch-probabilities' and its related
11408     options.  Both absolute and relative paths can be used.  By
11409     default, GCC uses the current directory as PATH, thus the profile
11410     data file appears in the same directory as the object file.  In
11411     order to prevent the file name clashing, if the object file name is
11412     not an absolute path, we mangle the absolute path of the
11413     'SOURCENAME.gcda' file and use it as the file name of a '.gcda'
11414     file.
11415
11416     When an executable is run in a massive parallel environment, it is
11417     recommended to save profile to different folders.  That can be done
11418     with variables in PATH that are exported during run-time:
11419
11420     '%p'
11421          process ID.
11422
11423     '%q{VAR}'
11424          value of environment variable VAR
11425
11426'-fprofile-generate'
11427'-fprofile-generate=PATH'
11428
11429     Enable options usually used for instrumenting application to
11430     produce profile useful for later recompilation with profile
11431     feedback based optimization.  You must use '-fprofile-generate'
11432     both when compiling and when linking your program.
11433
11434     The following options are enabled: '-fprofile-arcs',
11435     '-fprofile-values', '-finline-functions', and '-fipa-bit-cp'.
11436
11437     If PATH is specified, GCC looks at the PATH to find the profile
11438     feedback data files.  See '-fprofile-dir'.
11439
11440     To optimize the program based on the collected profile information,
11441     use '-fprofile-use'.  *Note Optimize Options::, for more
11442     information.
11443
11444'-fprofile-update=METHOD'
11445
11446     Alter the update method for an application instrumented for profile
11447     feedback based optimization.  The METHOD argument should be one of
11448     'single', 'atomic' or 'prefer-atomic'.  The first one is useful for
11449     single-threaded applications, while the second one prevents profile
11450     corruption by emitting thread-safe code.
11451
11452     *Warning:* When an application does not properly join all threads
11453     (or creates an detached thread), a profile file can be still
11454     corrupted.
11455
11456     Using 'prefer-atomic' would be transformed either to 'atomic', when
11457     supported by a target, or to 'single' otherwise.  The GCC driver
11458     automatically selects 'prefer-atomic' when '-pthread' is present in
11459     the command line.
11460
11461'-fprofile-filter-files=REGEX'
11462
11463     Instrument only functions from files where names match any regular
11464     expression (separated by a semi-colon).
11465
11466     For example, '-fprofile-filter-files=main.c;module.*.c' will
11467     instrument only 'main.c' and all C files starting with 'module'.
11468
11469'-fprofile-exclude-files=REGEX'
11470
11471     Instrument only functions from files where names do not match all
11472     the regular expressions (separated by a semi-colon).
11473
11474     For example, '-fprofile-exclude-files=/usr/*' will prevent
11475     instrumentation of all files that are located in '/usr/' folder.
11476
11477'-fsanitize=address'
11478     Enable AddressSanitizer, a fast memory error detector.  Memory
11479     access instructions are instrumented to detect out-of-bounds and
11480     use-after-free bugs.  The option enables
11481     '-fsanitize-address-use-after-scope'.  See
11482     <https://github.com/google/sanitizers/wiki/AddressSanitizer> for
11483     more details.  The run-time behavior can be influenced using the
11484     'ASAN_OPTIONS' environment variable.  When set to 'help=1', the
11485     available options are shown at startup of the instrumented program.
11486     See
11487     <https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags>
11488     for a list of supported options.  The option cannot be combined
11489     with '-fsanitize=thread'.
11490
11491'-fsanitize=kernel-address'
11492     Enable AddressSanitizer for Linux kernel.  See
11493     <https://github.com/google/kasan/wiki> for more details.
11494
11495'-fsanitize=pointer-compare'
11496     Instrument comparison operation (<, <=, >, >=) with pointer
11497     operands.  The option must be combined with either
11498     '-fsanitize=kernel-address' or '-fsanitize=address' The option
11499     cannot be combined with '-fsanitize=thread'.  Note: By default the
11500     check is disabled at run time.  To enable it, add
11501     'detect_invalid_pointer_pairs=2' to the environment variable
11502     'ASAN_OPTIONS'.  Using 'detect_invalid_pointer_pairs=1' detects
11503     invalid operation only when both pointers are non-null.
11504
11505'-fsanitize=pointer-subtract'
11506     Instrument subtraction with pointer operands.  The option must be
11507     combined with either '-fsanitize=kernel-address' or
11508     '-fsanitize=address' The option cannot be combined with
11509     '-fsanitize=thread'.  Note: By default the check is disabled at run
11510     time.  To enable it, add 'detect_invalid_pointer_pairs=2' to the
11511     environment variable 'ASAN_OPTIONS'.  Using
11512     'detect_invalid_pointer_pairs=1' detects invalid operation only
11513     when both pointers are non-null.
11514
11515'-fsanitize=thread'
11516     Enable ThreadSanitizer, a fast data race detector.  Memory access
11517     instructions are instrumented to detect data race bugs.  See
11518     <https://github.com/google/sanitizers/wiki#threadsanitizer> for
11519     more details.  The run-time behavior can be influenced using the
11520     'TSAN_OPTIONS' environment variable; see
11521     <https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags>
11522     for a list of supported options.  The option cannot be combined
11523     with '-fsanitize=address', '-fsanitize=leak'.
11524
11525     Note that sanitized atomic builtins cannot throw exceptions when
11526     operating on invalid memory addresses with non-call exceptions
11527     ('-fnon-call-exceptions').
11528
11529'-fsanitize=leak'
11530     Enable LeakSanitizer, a memory leak detector.  This option only
11531     matters for linking of executables and the executable is linked
11532     against a library that overrides 'malloc' and other allocator
11533     functions.  See
11534     <https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer>
11535     for more details.  The run-time behavior can be influenced using
11536     the 'LSAN_OPTIONS' environment variable.  The option cannot be
11537     combined with '-fsanitize=thread'.
11538
11539'-fsanitize=undefined'
11540     Enable UndefinedBehaviorSanitizer, a fast undefined behavior
11541     detector.  Various computations are instrumented to detect
11542     undefined behavior at runtime.  Current suboptions are:
11543
11544     '-fsanitize=shift'
11545          This option enables checking that the result of a shift
11546          operation is not undefined.  Note that what exactly is
11547          considered undefined differs slightly between C and C++, as
11548          well as between ISO C90 and C99, etc.  This option has two
11549          suboptions, '-fsanitize=shift-base' and
11550          '-fsanitize=shift-exponent'.
11551
11552     '-fsanitize=shift-exponent'
11553          This option enables checking that the second argument of a
11554          shift operation is not negative and is smaller than the
11555          precision of the promoted first argument.
11556
11557     '-fsanitize=shift-base'
11558          If the second argument of a shift operation is within range,
11559          check that the result of a shift operation is not undefined.
11560          Note that what exactly is considered undefined differs
11561          slightly between C and C++, as well as between ISO C90 and
11562          C99, etc.
11563
11564     '-fsanitize=integer-divide-by-zero'
11565          Detect integer division by zero as well as 'INT_MIN / -1'
11566          division.
11567
11568     '-fsanitize=unreachable'
11569          With this option, the compiler turns the
11570          '__builtin_unreachable' call into a diagnostics message call
11571          instead.  When reaching the '__builtin_unreachable' call, the
11572          behavior is undefined.
11573
11574     '-fsanitize=vla-bound'
11575          This option instructs the compiler to check that the size of a
11576          variable length array is positive.
11577
11578     '-fsanitize=null'
11579          This option enables pointer checking.  Particularly, the
11580          application built with this option turned on will issue an
11581          error message when it tries to dereference a NULL pointer, or
11582          if a reference (possibly an rvalue reference) is bound to a
11583          NULL pointer, or if a method is invoked on an object pointed
11584          by a NULL pointer.
11585
11586     '-fsanitize=return'
11587          This option enables return statement checking.  Programs built
11588          with this option turned on will issue an error message when
11589          the end of a non-void function is reached without actually
11590          returning a value.  This option works in C++ only.
11591
11592     '-fsanitize=signed-integer-overflow'
11593          This option enables signed integer overflow checking.  We
11594          check that the result of '+', '*', and both unary and binary
11595          '-' does not overflow in the signed arithmetics.  Note,
11596          integer promotion rules must be taken into account.  That is,
11597          the following is not an overflow:
11598               signed char a = SCHAR_MAX;
11599               a++;
11600
11601     '-fsanitize=bounds'
11602          This option enables instrumentation of array bounds.  Various
11603          out of bounds accesses are detected.  Flexible array members,
11604          flexible array member-like arrays, and initializers of
11605          variables with static storage are not instrumented.
11606
11607     '-fsanitize=bounds-strict'
11608          This option enables strict instrumentation of array bounds.
11609          Most out of bounds accesses are detected, including flexible
11610          array members and flexible array member-like arrays.
11611          Initializers of variables with static storage are not
11612          instrumented.
11613
11614     '-fsanitize=alignment'
11615
11616          This option enables checking of alignment of pointers when
11617          they are dereferenced, or when a reference is bound to
11618          insufficiently aligned target, or when a method or constructor
11619          is invoked on insufficiently aligned object.
11620
11621     '-fsanitize=object-size'
11622          This option enables instrumentation of memory references using
11623          the '__builtin_object_size' function.  Various out of bounds
11624          pointer accesses are detected.
11625
11626     '-fsanitize=float-divide-by-zero'
11627          Detect floating-point division by zero.  Unlike other similar
11628          options, '-fsanitize=float-divide-by-zero' is not enabled by
11629          '-fsanitize=undefined', since floating-point division by zero
11630          can be a legitimate way of obtaining infinities and NaNs.
11631
11632     '-fsanitize=float-cast-overflow'
11633          This option enables floating-point type to integer conversion
11634          checking.  We check that the result of the conversion does not
11635          overflow.  Unlike other similar options,
11636          '-fsanitize=float-cast-overflow' is not enabled by
11637          '-fsanitize=undefined'.  This option does not work well with
11638          'FE_INVALID' exceptions enabled.
11639
11640     '-fsanitize=nonnull-attribute'
11641
11642          This option enables instrumentation of calls, checking whether
11643          null values are not passed to arguments marked as requiring a
11644          non-null value by the 'nonnull' function attribute.
11645
11646     '-fsanitize=returns-nonnull-attribute'
11647
11648          This option enables instrumentation of return statements in
11649          functions marked with 'returns_nonnull' function attribute, to
11650          detect returning of null values from such functions.
11651
11652     '-fsanitize=bool'
11653
11654          This option enables instrumentation of loads from bool.  If a
11655          value other than 0/1 is loaded, a run-time error is issued.
11656
11657     '-fsanitize=enum'
11658
11659          This option enables instrumentation of loads from an enum
11660          type.  If a value outside the range of values for the enum
11661          type is loaded, a run-time error is issued.
11662
11663     '-fsanitize=vptr'
11664
11665          This option enables instrumentation of C++ member function
11666          calls, member accesses and some conversions between pointers
11667          to base and derived classes, to verify the referenced object
11668          has the correct dynamic type.
11669
11670     '-fsanitize=pointer-overflow'
11671
11672          This option enables instrumentation of pointer arithmetics.
11673          If the pointer arithmetics overflows, a run-time error is
11674          issued.
11675
11676     '-fsanitize=builtin'
11677
11678          This option enables instrumentation of arguments to selected
11679          builtin functions.  If an invalid value is passed to such
11680          arguments, a run-time error is issued.  E.g. passing 0 as the
11681          argument to '__builtin_ctz' or '__builtin_clz' invokes
11682          undefined behavior and is diagnosed by this option.
11683
11684     While '-ftrapv' causes traps for signed overflows to be emitted,
11685     '-fsanitize=undefined' gives a diagnostic message.  This currently
11686     works only for the C family of languages.
11687
11688'-fno-sanitize=all'
11689
11690     This option disables all previously enabled sanitizers.
11691     '-fsanitize=all' is not allowed, as some sanitizers cannot be used
11692     together.
11693
11694'-fasan-shadow-offset=NUMBER'
11695     This option forces GCC to use custom shadow offset in
11696     AddressSanitizer checks.  It is useful for experimenting with
11697     different shadow memory layouts in Kernel AddressSanitizer.
11698
11699'-fsanitize-sections=S1,S2,...'
11700     Sanitize global variables in selected user-defined sections.  SI
11701     may contain wildcards.
11702
11703'-fsanitize-recover[=OPTS]'
11704     '-fsanitize-recover=' controls error recovery mode for sanitizers
11705     mentioned in comma-separated list of OPTS.  Enabling this option
11706     for a sanitizer component causes it to attempt to continue running
11707     the program as if no error happened.  This means multiple runtime
11708     errors can be reported in a single program run, and the exit code
11709     of the program may indicate success even when errors have been
11710     reported.  The '-fno-sanitize-recover=' option can be used to alter
11711     this behavior: only the first detected error is reported and
11712     program then exits with a non-zero exit code.
11713
11714     Currently this feature only works for '-fsanitize=undefined' (and
11715     its suboptions except for '-fsanitize=unreachable' and
11716     '-fsanitize=return'), '-fsanitize=float-cast-overflow',
11717     '-fsanitize=float-divide-by-zero', '-fsanitize=bounds-strict',
11718     '-fsanitize=kernel-address' and '-fsanitize=address'.  For these
11719     sanitizers error recovery is turned on by default, except
11720     '-fsanitize=address', for which this feature is experimental.
11721     '-fsanitize-recover=all' and '-fno-sanitize-recover=all' is also
11722     accepted, the former enables recovery for all sanitizers that
11723     support it, the latter disables recovery for all sanitizers that
11724     support it.
11725
11726     Even if a recovery mode is turned on the compiler side, it needs to
11727     be also enabled on the runtime library side, otherwise the failures
11728     are still fatal.  The runtime library defaults to 'halt_on_error=0'
11729     for ThreadSanitizer and UndefinedBehaviorSanitizer, while default
11730     value for AddressSanitizer is 'halt_on_error=1'.  This can be
11731     overridden through setting the 'halt_on_error' flag in the
11732     corresponding environment variable.
11733
11734     Syntax without an explicit OPTS parameter is deprecated.  It is
11735     equivalent to specifying an OPTS list of:
11736
11737          undefined,float-cast-overflow,float-divide-by-zero,bounds-strict
11738
11739'-fsanitize-address-use-after-scope'
11740     Enable sanitization of local variables to detect use-after-scope
11741     bugs.  The option sets '-fstack-reuse' to 'none'.
11742
11743'-fsanitize-undefined-trap-on-error'
11744     The '-fsanitize-undefined-trap-on-error' option instructs the
11745     compiler to report undefined behavior using '__builtin_trap' rather
11746     than a 'libubsan' library routine.  The advantage of this is that
11747     the 'libubsan' library is not needed and is not linked in, so this
11748     is usable even in freestanding environments.
11749
11750'-fsanitize-coverage=trace-pc'
11751     Enable coverage-guided fuzzing code instrumentation.  Inserts a
11752     call to '__sanitizer_cov_trace_pc' into every basic block.
11753
11754'-fsanitize-coverage=trace-cmp'
11755     Enable dataflow guided fuzzing code instrumentation.  Inserts a
11756     call to '__sanitizer_cov_trace_cmp1', '__sanitizer_cov_trace_cmp2',
11757     '__sanitizer_cov_trace_cmp4' or '__sanitizer_cov_trace_cmp8' for
11758     integral comparison with both operands variable or
11759     '__sanitizer_cov_trace_const_cmp1',
11760     '__sanitizer_cov_trace_const_cmp2',
11761     '__sanitizer_cov_trace_const_cmp4' or
11762     '__sanitizer_cov_trace_const_cmp8' for integral comparison with one
11763     operand constant, '__sanitizer_cov_trace_cmpf' or
11764     '__sanitizer_cov_trace_cmpd' for float or double comparisons and
11765     '__sanitizer_cov_trace_switch' for switch statements.
11766
11767'-fcf-protection=[full|branch|return|none]'
11768     Enable code instrumentation of control-flow transfers to increase
11769     program security by checking that target addresses of control-flow
11770     transfer instructions (such as indirect function call, function
11771     return, indirect jump) are valid.  This prevents diverting the flow
11772     of control to an unexpected target.  This is intended to protect
11773     against such threats as Return-oriented Programming (ROP), and
11774     similarly call/jmp-oriented programming (COP/JOP).
11775
11776     The value 'branch' tells the compiler to implement checking of
11777     validity of control-flow transfer at the point of indirect branch
11778     instructions, i.e. call/jmp instructions.  The value 'return'
11779     implements checking of validity at the point of returning from a
11780     function.  The value 'full' is an alias for specifying both
11781     'branch' and 'return'.  The value 'none' turns off instrumentation.
11782
11783     The macro '__CET__' is defined when '-fcf-protection' is used.  The
11784     first bit of '__CET__' is set to 1 for the value 'branch' and the
11785     second bit of '__CET__' is set to 1 for the 'return'.
11786
11787     You can also use the 'nocf_check' attribute to identify which
11788     functions and calls should be skipped from instrumentation (*note
11789     Function Attributes::).
11790
11791     Currently the x86 GNU/Linux target provides an implementation based
11792     on Intel Control-flow Enforcement Technology (CET).
11793
11794'-fstack-protector'
11795     Emit extra code to check for buffer overflows, such as stack
11796     smashing attacks.  This is done by adding a guard variable to
11797     functions with vulnerable objects.  This includes functions that
11798     call 'alloca', and functions with buffers larger than 8 bytes.  The
11799     guards are initialized when a function is entered and then checked
11800     when the function exits.  If a guard check fails, an error message
11801     is printed and the program exits.
11802
11803'-fstack-protector-all'
11804     Like '-fstack-protector' except that all functions are protected.
11805
11806'-fstack-protector-strong'
11807     Like '-fstack-protector' but includes additional functions to be
11808     protected -- those that have local array definitions, or have
11809     references to local frame addresses.
11810
11811'-fstack-protector-explicit'
11812     Like '-fstack-protector' but only protects those functions which
11813     have the 'stack_protect' attribute.
11814
11815'-fstack-check'
11816     Generate code to verify that you do not go beyond the boundary of
11817     the stack.  You should specify this flag if you are running in an
11818     environment with multiple threads, but you only rarely need to
11819     specify it in a single-threaded environment since stack overflow is
11820     automatically detected on nearly all systems if there is only one
11821     stack.
11822
11823     Note that this switch does not actually cause checking to be done;
11824     the operating system or the language runtime must do that.  The
11825     switch causes generation of code to ensure that they see the stack
11826     being extended.
11827
11828     You can additionally specify a string parameter: 'no' means no
11829     checking, 'generic' means force the use of old-style checking,
11830     'specific' means use the best checking method and is equivalent to
11831     bare '-fstack-check'.
11832
11833     Old-style checking is a generic mechanism that requires no specific
11834     target support in the compiler but comes with the following
11835     drawbacks:
11836
11837       1. Modified allocation strategy for large objects: they are
11838          always allocated dynamically if their size exceeds a fixed
11839          threshold.  Note this may change the semantics of some code.
11840
11841       2. Fixed limit on the size of the static frame of functions: when
11842          it is topped by a particular function, stack checking is not
11843          reliable and a warning is issued by the compiler.
11844
11845       3. Inefficiency: because of both the modified allocation strategy
11846          and the generic implementation, code performance is hampered.
11847
11848     Note that old-style stack checking is also the fallback method for
11849     'specific' if no target support has been added in the compiler.
11850
11851     '-fstack-check=' is designed for Ada's needs to detect infinite
11852     recursion and stack overflows.  'specific' is an excellent choice
11853     when compiling Ada code.  It is not generally sufficient to protect
11854     against stack-clash attacks.  To protect against those you want
11855     '-fstack-clash-protection'.
11856
11857'-fstack-clash-protection'
11858     Generate code to prevent stack clash style attacks.  When this
11859     option is enabled, the compiler will only allocate one page of
11860     stack space at a time and each page is accessed immediately after
11861     allocation.  Thus, it prevents allocations from jumping over any
11862     stack guard page provided by the operating system.
11863
11864     Most targets do not fully support stack clash protection.  However,
11865     on those targets '-fstack-clash-protection' will protect dynamic
11866     stack allocations.  '-fstack-clash-protection' may also provide
11867     limited protection for static stack allocations if the target
11868     supports '-fstack-check=specific'.
11869
11870'-fstack-limit-register=REG'
11871'-fstack-limit-symbol=SYM'
11872'-fno-stack-limit'
11873     Generate code to ensure that the stack does not grow beyond a
11874     certain value, either the value of a register or the address of a
11875     symbol.  If a larger stack is required, a signal is raised at run
11876     time.  For most targets, the signal is raised before the stack
11877     overruns the boundary, so it is possible to catch the signal
11878     without taking special precautions.
11879
11880     For instance, if the stack starts at absolute address '0x80000000'
11881     and grows downwards, you can use the flags
11882     '-fstack-limit-symbol=__stack_limit' and
11883     '-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit of
11884     128KB.  Note that this may only work with the GNU linker.
11885
11886     You can locally override stack limit checking by using the
11887     'no_stack_limit' function attribute (*note Function Attributes::).
11888
11889'-fsplit-stack'
11890     Generate code to automatically split the stack before it overflows.
11891     The resulting program has a discontiguous stack which can only
11892     overflow if the program is unable to allocate any more memory.
11893     This is most useful when running threaded programs, as it is no
11894     longer necessary to calculate a good stack size to use for each
11895     thread.  This is currently only implemented for the x86 targets
11896     running GNU/Linux.
11897
11898     When code compiled with '-fsplit-stack' calls code compiled without
11899     '-fsplit-stack', there may not be much stack space available for
11900     the latter code to run.  If compiling all code, including library
11901     code, with '-fsplit-stack' is not an option, then the linker can
11902     fix up these calls so that the code compiled without
11903     '-fsplit-stack' always has a large stack.  Support for this is
11904     implemented in the gold linker in GNU binutils release 2.21 and
11905     later.
11906
11907'-fvtable-verify=[std|preinit|none]'
11908     This option is only available when compiling C++ code.  It turns on
11909     (or off, if using '-fvtable-verify=none') the security feature that
11910     verifies at run time, for every virtual call, that the vtable
11911     pointer through which the call is made is valid for the type of the
11912     object, and has not been corrupted or overwritten.  If an invalid
11913     vtable pointer is detected at run time, an error is reported and
11914     execution of the program is immediately halted.
11915
11916     This option causes run-time data structures to be built at program
11917     startup, which are used for verifying the vtable pointers.  The
11918     options 'std' and 'preinit' control the timing of when these data
11919     structures are built.  In both cases the data structures are built
11920     before execution reaches 'main'.  Using '-fvtable-verify=std'
11921     causes the data structures to be built after shared libraries have
11922     been loaded and initialized.  '-fvtable-verify=preinit' causes them
11923     to be built before shared libraries have been loaded and
11924     initialized.
11925
11926     If this option appears multiple times in the command line with
11927     different values specified, 'none' takes highest priority over both
11928     'std' and 'preinit'; 'preinit' takes priority over 'std'.
11929
11930'-fvtv-debug'
11931     When used in conjunction with '-fvtable-verify=std' or
11932     '-fvtable-verify=preinit', causes debug versions of the runtime
11933     functions for the vtable verification feature to be called.  This
11934     flag also causes the compiler to log information about which vtable
11935     pointers it finds for each class.  This information is written to a
11936     file named 'vtv_set_ptr_data.log' in the directory named by the
11937     environment variable 'VTV_LOGS_DIR' if that is defined or the
11938     current working directory otherwise.
11939
11940     Note: This feature _appends_ data to the log file.  If you want a
11941     fresh log file, be sure to delete any existing one.
11942
11943'-fvtv-counts'
11944     This is a debugging flag.  When used in conjunction with
11945     '-fvtable-verify=std' or '-fvtable-verify=preinit', this causes the
11946     compiler to keep track of the total number of virtual calls it
11947     encounters and the number of verifications it inserts.  It also
11948     counts the number of calls to certain run-time library functions
11949     that it inserts and logs this information for each compilation
11950     unit.  The compiler writes this information to a file named
11951     'vtv_count_data.log' in the directory named by the environment
11952     variable 'VTV_LOGS_DIR' if that is defined or the current working
11953     directory otherwise.  It also counts the size of the vtable pointer
11954     sets for each class, and writes this information to
11955     'vtv_class_set_sizes.log' in the same directory.
11956
11957     Note: This feature _appends_ data to the log files.  To get fresh
11958     log files, be sure to delete any existing ones.
11959
11960'-finstrument-functions'
11961     Generate instrumentation calls for entry and exit to functions.
11962     Just after function entry and just before function exit, the
11963     following profiling functions are called with the address of the
11964     current function and its call site.  (On some platforms,
11965     '__builtin_return_address' does not work beyond the current
11966     function, so the call site information may not be available to the
11967     profiling functions otherwise.)
11968
11969          void __cyg_profile_func_enter (void *this_fn,
11970                                         void *call_site);
11971          void __cyg_profile_func_exit  (void *this_fn,
11972                                         void *call_site);
11973
11974     The first argument is the address of the start of the current
11975     function, which may be looked up exactly in the symbol table.
11976
11977     This instrumentation is also done for functions expanded inline in
11978     other functions.  The profiling calls indicate where, conceptually,
11979     the inline function is entered and exited.  This means that
11980     addressable versions of such functions must be available.  If all
11981     your uses of a function are expanded inline, this may mean an
11982     additional expansion of code size.  If you use 'extern inline' in
11983     your C code, an addressable version of such functions must be
11984     provided.  (This is normally the case anyway, but if you get lucky
11985     and the optimizer always expands the functions inline, you might
11986     have gotten away without providing static copies.)
11987
11988     A function may be given the attribute 'no_instrument_function', in
11989     which case this instrumentation is not done.  This can be used, for
11990     example, for the profiling functions listed above, high-priority
11991     interrupt routines, and any functions from which the profiling
11992     functions cannot safely be called (perhaps signal handlers, if the
11993     profiling routines generate output or allocate memory).  *Note
11994     Common Function Attributes::.
11995
11996'-finstrument-functions-exclude-file-list=FILE,FILE,...'
11997
11998     Set the list of functions that are excluded from instrumentation
11999     (see the description of '-finstrument-functions').  If the file
12000     that contains a function definition matches with one of FILE, then
12001     that function is not instrumented.  The match is done on
12002     substrings: if the FILE parameter is a substring of the file name,
12003     it is considered to be a match.
12004
12005     For example:
12006
12007          -finstrument-functions-exclude-file-list=/bits/stl,include/sys
12008
12009     excludes any inline function defined in files whose pathnames
12010     contain '/bits/stl' or 'include/sys'.
12011
12012     If, for some reason, you want to include letter ',' in one of SYM,
12013     write '\,'.  For example,
12014     '-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
12015     single quote surrounding the option).
12016
12017'-finstrument-functions-exclude-function-list=SYM,SYM,...'
12018
12019     This is similar to '-finstrument-functions-exclude-file-list', but
12020     this option sets the list of function names to be excluded from
12021     instrumentation.  The function name to be matched is its
12022     user-visible name, such as 'vector<int> blah(const vector<int> &)',
12023     not the internal mangled name (e.g., '_Z4blahRSt6vectorIiSaIiEE').
12024     The match is done on substrings: if the SYM parameter is a
12025     substring of the function name, it is considered to be a match.
12026     For C99 and C++ extended identifiers, the function name must be
12027     given in UTF-8, not using universal character names.
12028
12029'-fpatchable-function-entry=N[,M]'
12030     Generate N NOPs right at the beginning of each function, with the
12031     function entry point before the Mth NOP. If M is omitted, it
12032     defaults to '0' so the function entry points to the address just at
12033     the first NOP. The NOP instructions reserve extra space which can
12034     be used to patch in any desired instrumentation at run time,
12035     provided that the code segment is writable.  The amount of space is
12036     controllable indirectly via the number of NOPs; the NOP instruction
12037     used corresponds to the instruction emitted by the internal GCC
12038     back-end interface 'gen_nop'.  This behavior is target-specific and
12039     may also depend on the architecture variant and/or other
12040     compilation options.
12041
12042     For run-time identification, the starting addresses of these areas,
12043     which correspond to their respective function entries minus M, are
12044     additionally collected in the '__patchable_function_entries'
12045     section of the resulting binary.
12046
12047     Note that the value of '__attribute__ ((patchable_function_entry
12048     (N,M)))' takes precedence over command-line option
12049     '-fpatchable-function-entry=N,M'.  This can be used to increase the
12050     area size or to remove it completely on a single function.  If
12051     'N=0', no pad location is recorded.
12052
12053     The NOP instructions are inserted at--and maybe before, depending
12054     on M--the function entry address, even before the prologue.
12055
12056
12057File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Instrumentation Options,  Up: Invoking GCC
12058
120593.12 Options Controlling the Preprocessor
12060=========================================
12061
12062These options control the C preprocessor, which is run on each C source
12063file before actual compilation.
12064
12065 If you use the '-E' option, nothing is done except preprocessing.  Some
12066of these options make sense only together with '-E' because they cause
12067the preprocessor output to be unsuitable for actual compilation.
12068
12069 In addition to the options listed here, there are a number of options
12070to control search paths for include files documented in *note Directory
12071Options::.  Options to control preprocessor diagnostics are listed in
12072*note Warning Options::.
12073
12074'-D NAME'
12075     Predefine NAME as a macro, with definition '1'.
12076
12077'-D NAME=DEFINITION'
12078     The contents of DEFINITION are tokenized and processed as if they
12079     appeared during translation phase three in a '#define' directive.
12080     In particular, the definition is truncated by embedded newline
12081     characters.
12082
12083     If you are invoking the preprocessor from a shell or shell-like
12084     program you may need to use the shell's quoting syntax to protect
12085     characters such as spaces that have a meaning in the shell syntax.
12086
12087     If you wish to define a function-like macro on the command line,
12088     write its argument list with surrounding parentheses before the
12089     equals sign (if any).  Parentheses are meaningful to most shells,
12090     so you should quote the option.  With 'sh' and 'csh',
12091     '-D'NAME(ARGS...)=DEFINITION'' works.
12092
12093     '-D' and '-U' options are processed in the order they are given on
12094     the command line.  All '-imacros FILE' and '-include FILE' options
12095     are processed after all '-D' and '-U' options.
12096
12097'-U NAME'
12098     Cancel any previous definition of NAME, either built in or provided
12099     with a '-D' option.
12100
12101'-include FILE'
12102     Process FILE as if '#include "file"' appeared as the first line of
12103     the primary source file.  However, the first directory searched for
12104     FILE is the preprocessor's working directory _instead of_ the
12105     directory containing the main source file.  If not found there, it
12106     is searched for in the remainder of the '#include "..."' search
12107     chain as normal.
12108
12109     If multiple '-include' options are given, the files are included in
12110     the order they appear on the command line.
12111
12112'-imacros FILE'
12113     Exactly like '-include', except that any output produced by
12114     scanning FILE is thrown away.  Macros it defines remain defined.
12115     This allows you to acquire all the macros from a header without
12116     also processing its declarations.
12117
12118     All files specified by '-imacros' are processed before all files
12119     specified by '-include'.
12120
12121'-undef'
12122     Do not predefine any system-specific or GCC-specific macros.  The
12123     standard predefined macros remain defined.
12124
12125'-pthread'
12126     Define additional macros required for using the POSIX threads
12127     library.  You should use this option consistently for both
12128     compilation and linking.  This option is supported on GNU/Linux
12129     targets, most other Unix derivatives, and also on x86 Cygwin and
12130     MinGW targets.
12131
12132'-M'
12133     Instead of outputting the result of preprocessing, output a rule
12134     suitable for 'make' describing the dependencies of the main source
12135     file.  The preprocessor outputs one 'make' rule containing the
12136     object file name for that source file, a colon, and the names of
12137     all the included files, including those coming from '-include' or
12138     '-imacros' command-line options.
12139
12140     Unless specified explicitly (with '-MT' or '-MQ'), the object file
12141     name consists of the name of the source file with any suffix
12142     replaced with object file suffix and with any leading directory
12143     parts removed.  If there are many included files then the rule is
12144     split into several lines using '\'-newline.  The rule has no
12145     commands.
12146
12147     This option does not suppress the preprocessor's debug output, such
12148     as '-dM'.  To avoid mixing such debug output with the dependency
12149     rules you should explicitly specify the dependency output file with
12150     '-MF', or use an environment variable like 'DEPENDENCIES_OUTPUT'
12151     (*note Environment Variables::).  Debug output is still sent to the
12152     regular output stream as normal.
12153
12154     Passing '-M' to the driver implies '-E', and suppresses warnings
12155     with an implicit '-w'.
12156
12157'-MM'
12158     Like '-M' but do not mention header files that are found in system
12159     header directories, nor header files that are included, directly or
12160     indirectly, from such a header.
12161
12162     This implies that the choice of angle brackets or double quotes in
12163     an '#include' directive does not in itself determine whether that
12164     header appears in '-MM' dependency output.
12165
12166'-MF FILE'
12167     When used with '-M' or '-MM', specifies a file to write the
12168     dependencies to.  If no '-MF' switch is given the preprocessor
12169     sends the rules to the same place it would send preprocessed
12170     output.
12171
12172     When used with the driver options '-MD' or '-MMD', '-MF' overrides
12173     the default dependency output file.
12174
12175     If FILE is '-', then the dependencies are written to 'stdout'.
12176
12177'-MG'
12178     In conjunction with an option such as '-M' requesting dependency
12179     generation, '-MG' assumes missing header files are generated files
12180     and adds them to the dependency list without raising an error.  The
12181     dependency filename is taken directly from the '#include' directive
12182     without prepending any path.  '-MG' also suppresses preprocessed
12183     output, as a missing header file renders this useless.
12184
12185     This feature is used in automatic updating of makefiles.
12186
12187'-MP'
12188     This option instructs CPP to add a phony target for each dependency
12189     other than the main file, causing each to depend on nothing.  These
12190     dummy rules work around errors 'make' gives if you remove header
12191     files without updating the 'Makefile' to match.
12192
12193     This is typical output:
12194
12195          test.o: test.c test.h
12196
12197          test.h:
12198
12199'-MT TARGET'
12200
12201     Change the target of the rule emitted by dependency generation.  By
12202     default CPP takes the name of the main input file, deletes any
12203     directory components and any file suffix such as '.c', and appends
12204     the platform's usual object suffix.  The result is the target.
12205
12206     An '-MT' option sets the target to be exactly the string you
12207     specify.  If you want multiple targets, you can specify them as a
12208     single argument to '-MT', or use multiple '-MT' options.
12209
12210     For example, '-MT '$(objpfx)foo.o'' might give
12211
12212          $(objpfx)foo.o: foo.c
12213
12214'-MQ TARGET'
12215
12216     Same as '-MT', but it quotes any characters which are special to
12217     Make.  '-MQ '$(objpfx)foo.o'' gives
12218
12219          $$(objpfx)foo.o: foo.c
12220
12221     The default target is automatically quoted, as if it were given
12222     with '-MQ'.
12223
12224'-MD'
12225     '-MD' is equivalent to '-M -MF FILE', except that '-E' is not
12226     implied.  The driver determines FILE based on whether an '-o'
12227     option is given.  If it is, the driver uses its argument but with a
12228     suffix of '.d', otherwise it takes the name of the input file,
12229     removes any directory components and suffix, and applies a '.d'
12230     suffix.
12231
12232     If '-MD' is used in conjunction with '-E', any '-o' switch is
12233     understood to specify the dependency output file (*note -MF:
12234     dashMF.), but if used without '-E', each '-o' is understood to
12235     specify a target object file.
12236
12237     Since '-E' is not implied, '-MD' can be used to generate a
12238     dependency output file as a side effect of the compilation process.
12239
12240'-MMD'
12241     Like '-MD' except mention only user header files, not system header
12242     files.
12243
12244'-fpreprocessed'
12245     Indicate to the preprocessor that the input file has already been
12246     preprocessed.  This suppresses things like macro expansion,
12247     trigraph conversion, escaped newline splicing, and processing of
12248     most directives.  The preprocessor still recognizes and removes
12249     comments, so that you can pass a file preprocessed with '-C' to the
12250     compiler without problems.  In this mode the integrated
12251     preprocessor is little more than a tokenizer for the front ends.
12252
12253     '-fpreprocessed' is implicit if the input file has one of the
12254     extensions '.i', '.ii' or '.mi'.  These are the extensions that GCC
12255     uses for preprocessed files created by '-save-temps'.
12256
12257'-fdirectives-only'
12258     When preprocessing, handle directives, but do not expand macros.
12259
12260     The option's behavior depends on the '-E' and '-fpreprocessed'
12261     options.
12262
12263     With '-E', preprocessing is limited to the handling of directives
12264     such as '#define', '#ifdef', and '#error'.  Other preprocessor
12265     operations, such as macro expansion and trigraph conversion are not
12266     performed.  In addition, the '-dD' option is implicitly enabled.
12267
12268     With '-fpreprocessed', predefinition of command line and most
12269     builtin macros is disabled.  Macros such as '__LINE__', which are
12270     contextually dependent, are handled normally.  This enables
12271     compilation of files previously preprocessed with '-E
12272     -fdirectives-only'.
12273
12274     With both '-E' and '-fpreprocessed', the rules for '-fpreprocessed'
12275     take precedence.  This enables full preprocessing of files
12276     previously preprocessed with '-E -fdirectives-only'.
12277
12278'-fdollars-in-identifiers'
12279     Accept '$' in identifiers.
12280
12281'-fextended-identifiers'
12282     Accept universal character names in identifiers.  This option is
12283     enabled by default for C99 (and later C standard versions) and C++.
12284
12285'-fno-canonical-system-headers'
12286     When preprocessing, do not shorten system header paths with
12287     canonicalization.
12288
12289'-ftabstop=WIDTH'
12290     Set the distance between tab stops.  This helps the preprocessor
12291     report correct column numbers in warnings or errors, even if tabs
12292     appear on the line.  If the value is less than 1 or greater than
12293     100, the option is ignored.  The default is 8.
12294
12295'-ftrack-macro-expansion[=LEVEL]'
12296     Track locations of tokens across macro expansions.  This allows the
12297     compiler to emit diagnostic about the current macro expansion stack
12298     when a compilation error occurs in a macro expansion.  Using this
12299     option makes the preprocessor and the compiler consume more memory.
12300     The LEVEL parameter can be used to choose the level of precision of
12301     token location tracking thus decreasing the memory consumption if
12302     necessary.  Value '0' of LEVEL de-activates this option.  Value '1'
12303     tracks tokens locations in a degraded mode for the sake of minimal
12304     memory overhead.  In this mode all tokens resulting from the
12305     expansion of an argument of a function-like macro have the same
12306     location.  Value '2' tracks tokens locations completely.  This
12307     value is the most memory hungry.  When this option is given no
12308     argument, the default parameter value is '2'.
12309
12310     Note that '-ftrack-macro-expansion=2' is activated by default.
12311
12312'-fmacro-prefix-map=OLD=NEW'
12313     When preprocessing files residing in directory 'OLD', expand the
12314     '__FILE__' and '__BASE_FILE__' macros as if the files resided in
12315     directory 'NEW' instead.  This can be used to change an absolute
12316     path to a relative path by using '.' for NEW which can result in
12317     more reproducible builds that are location independent.  This
12318     option also affects '__builtin_FILE()' during compilation.  See
12319     also '-ffile-prefix-map'.
12320
12321'-fexec-charset=CHARSET'
12322     Set the execution character set, used for string and character
12323     constants.  The default is UTF-8.  CHARSET can be any encoding
12324     supported by the system's 'iconv' library routine.
12325
12326'-fwide-exec-charset=CHARSET'
12327     Set the wide execution character set, used for wide string and
12328     character constants.  The default is UTF-32 or UTF-16, whichever
12329     corresponds to the width of 'wchar_t'.  As with '-fexec-charset',
12330     CHARSET can be any encoding supported by the system's 'iconv'
12331     library routine; however, you will have problems with encodings
12332     that do not fit exactly in 'wchar_t'.
12333
12334'-finput-charset=CHARSET'
12335     Set the input character set, used for translation from the
12336     character set of the input file to the source character set used by
12337     GCC.  If the locale does not specify, or GCC cannot get this
12338     information from the locale, the default is UTF-8.  This can be
12339     overridden by either the locale or this command-line option.
12340     Currently the command-line option takes precedence if there's a
12341     conflict.  CHARSET can be any encoding supported by the system's
12342     'iconv' library routine.
12343
12344'-fpch-deps'
12345     When using precompiled headers (*note Precompiled Headers::), this
12346     flag causes the dependency-output flags to also list the files from
12347     the precompiled header's dependencies.  If not specified, only the
12348     precompiled header are listed and not the files that were used to
12349     create it, because those files are not consulted when a precompiled
12350     header is used.
12351
12352'-fpch-preprocess'
12353     This option allows use of a precompiled header (*note Precompiled
12354     Headers::) together with '-E'.  It inserts a special '#pragma',
12355     '#pragma GCC pch_preprocess "FILENAME"' in the output to mark the
12356     place where the precompiled header was found, and its FILENAME.
12357     When '-fpreprocessed' is in use, GCC recognizes this '#pragma' and
12358     loads the PCH.
12359
12360     This option is off by default, because the resulting preprocessed
12361     output is only really suitable as input to GCC.  It is switched on
12362     by '-save-temps'.
12363
12364     You should not write this '#pragma' in your own code, but it is
12365     safe to edit the filename if the PCH file is available in a
12366     different location.  The filename may be absolute or it may be
12367     relative to GCC's current directory.
12368
12369'-fworking-directory'
12370     Enable generation of linemarkers in the preprocessor output that
12371     let the compiler know the current working directory at the time of
12372     preprocessing.  When this option is enabled, the preprocessor
12373     emits, after the initial linemarker, a second linemarker with the
12374     current working directory followed by two slashes.  GCC uses this
12375     directory, when it's present in the preprocessed input, as the
12376     directory emitted as the current working directory in some
12377     debugging information formats.  This option is implicitly enabled
12378     if debugging information is enabled, but this can be inhibited with
12379     the negated form '-fno-working-directory'.  If the '-P' flag is
12380     present in the command line, this option has no effect, since no
12381     '#line' directives are emitted whatsoever.
12382
12383'-A PREDICATE=ANSWER'
12384     Make an assertion with the predicate PREDICATE and answer ANSWER.
12385     This form is preferred to the older form '-A PREDICATE(ANSWER)',
12386     which is still supported, because it does not use shell special
12387     characters.
12388
12389'-A -PREDICATE=ANSWER'
12390     Cancel an assertion with the predicate PREDICATE and answer ANSWER.
12391
12392'-C'
12393     Do not discard comments.  All comments are passed through to the
12394     output file, except for comments in processed directives, which are
12395     deleted along with the directive.
12396
12397     You should be prepared for side effects when using '-C'; it causes
12398     the preprocessor to treat comments as tokens in their own right.
12399     For example, comments appearing at the start of what would be a
12400     directive line have the effect of turning that line into an
12401     ordinary source line, since the first token on the line is no
12402     longer a '#'.
12403
12404'-CC'
12405     Do not discard comments, including during macro expansion.  This is
12406     like '-C', except that comments contained within macros are also
12407     passed through to the output file where the macro is expanded.
12408
12409     In addition to the side effects of the '-C' option, the '-CC'
12410     option causes all C++-style comments inside a macro to be converted
12411     to C-style comments.  This is to prevent later use of that macro
12412     from inadvertently commenting out the remainder of the source line.
12413
12414     The '-CC' option is generally used to support lint comments.
12415
12416'-P'
12417     Inhibit generation of linemarkers in the output from the
12418     preprocessor.  This might be useful when running the preprocessor
12419     on something that is not C code, and will be sent to a program
12420     which might be confused by the linemarkers.
12421
12422'-traditional'
12423'-traditional-cpp'
12424
12425     Try to imitate the behavior of pre-standard C preprocessors, as
12426     opposed to ISO C preprocessors.  See the GNU CPP manual for
12427     details.
12428
12429     Note that GCC does not otherwise attempt to emulate a pre-standard
12430     C compiler, and these options are only supported with the '-E'
12431     switch, or when invoking CPP explicitly.
12432
12433'-trigraphs'
12434     Support ISO C trigraphs.  These are three-character sequences, all
12435     starting with '??', that are defined by ISO C to stand for single
12436     characters.  For example, '??/' stands for '\', so ''??/n'' is a
12437     character constant for a newline.
12438
12439     The nine trigraphs and their replacements are
12440
12441          Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
12442          Replacement:      [    ]    {    }    #    \    ^    |    ~
12443
12444     By default, GCC ignores trigraphs, but in standard-conforming modes
12445     it converts them.  See the '-std' and '-ansi' options.
12446
12447'-remap'
12448     Enable special code to work around file systems which only permit
12449     very short file names, such as MS-DOS.
12450
12451'-H'
12452     Print the name of each header file used, in addition to other
12453     normal activities.  Each name is indented to show how deep in the
12454     '#include' stack it is.  Precompiled header files are also printed,
12455     even if they are found to be invalid; an invalid precompiled header
12456     file is printed with '...x' and a valid one with '...!' .
12457
12458'-dLETTERS'
12459     Says to make debugging dumps during compilation as specified by
12460     LETTERS.  The flags documented here are those relevant to the
12461     preprocessor.  Other LETTERS are interpreted by the compiler
12462     proper, or reserved for future versions of GCC, and so are silently
12463     ignored.  If you specify LETTERS whose behavior conflicts, the
12464     result is undefined.  *Note Developer Options::, for more
12465     information.
12466
12467     '-dM'
12468          Instead of the normal output, generate a list of '#define'
12469          directives for all the macros defined during the execution of
12470          the preprocessor, including predefined macros.  This gives you
12471          a way of finding out what is predefined in your version of the
12472          preprocessor.  Assuming you have no file 'foo.h', the command
12473
12474               touch foo.h; cpp -dM foo.h
12475
12476          shows all the predefined macros.
12477
12478          If you use '-dM' without the '-E' option, '-dM' is interpreted
12479          as a synonym for '-fdump-rtl-mach'.  *Note (gcc)Developer
12480          Options::.
12481
12482     '-dD'
12483          Like '-dM' except in two respects: it does _not_ include the
12484          predefined macros, and it outputs _both_ the '#define'
12485          directives and the result of preprocessing.  Both kinds of
12486          output go to the standard output file.
12487
12488     '-dN'
12489          Like '-dD', but emit only the macro names, not their
12490          expansions.
12491
12492     '-dI'
12493          Output '#include' directives in addition to the result of
12494          preprocessing.
12495
12496     '-dU'
12497          Like '-dD' except that only macros that are expanded, or whose
12498          definedness is tested in preprocessor directives, are output;
12499          the output is delayed until the use or test of the macro; and
12500          '#undef' directives are also output for macros tested but
12501          undefined at the time.
12502
12503'-fdebug-cpp'
12504     This option is only useful for debugging GCC. When used from CPP or
12505     with '-E', it dumps debugging information about location maps.
12506     Every token in the output is preceded by the dump of the map its
12507     location belongs to.
12508
12509     When used from GCC without '-E', this option has no effect.
12510
12511'-Wp,OPTION'
12512     You can use '-Wp,OPTION' to bypass the compiler driver and pass
12513     OPTION directly through to the preprocessor.  If OPTION contains
12514     commas, it is split into multiple options at the commas.  However,
12515     many options are modified, translated or interpreted by the
12516     compiler driver before being passed to the preprocessor, and '-Wp'
12517     forcibly bypasses this phase.  The preprocessor's direct interface
12518     is undocumented and subject to change, so whenever possible you
12519     should avoid using '-Wp' and let the driver handle the options
12520     instead.
12521
12522'-Xpreprocessor OPTION'
12523     Pass OPTION as an option to the preprocessor.  You can use this to
12524     supply system-specific preprocessor options that GCC does not
12525     recognize.
12526
12527     If you want to pass an option that takes an argument, you must use
12528     '-Xpreprocessor' twice, once for the option and once for the
12529     argument.
12530
12531'-no-integrated-cpp'
12532     Perform preprocessing as a separate pass before compilation.  By
12533     default, GCC performs preprocessing as an integrated part of input
12534     tokenization and parsing.  If this option is provided, the
12535     appropriate language front end ('cc1', 'cc1plus', or 'cc1obj' for
12536     C, C++, and Objective-C, respectively) is instead invoked twice,
12537     once for preprocessing only and once for actual compilation of the
12538     preprocessed input.  This option may be useful in conjunction with
12539     the '-B' or '-wrapper' options to specify an alternate preprocessor
12540     or perform additional processing of the program source between
12541     normal preprocessing and compilation.
12542
12543
12544File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
12545
125463.13 Passing Options to the Assembler
12547=====================================
12548
12549You can pass options to the assembler.
12550
12551'-Wa,OPTION'
12552     Pass OPTION as an option to the assembler.  If OPTION contains
12553     commas, it is split into multiple options at the commas.
12554
12555'-Xassembler OPTION'
12556     Pass OPTION as an option to the assembler.  You can use this to
12557     supply system-specific assembler options that GCC does not
12558     recognize.
12559
12560     If you want to pass an option that takes an argument, you must use
12561     '-Xassembler' twice, once for the option and once for the argument.
12562
12563
12564File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
12565
125663.14 Options for Linking
12567========================
12568
12569These options come into play when the compiler links object files into
12570an executable output file.  They are meaningless if the compiler is not
12571doing a link step.
12572
12573'OBJECT-FILE-NAME'
12574     A file name that does not end in a special recognized suffix is
12575     considered to name an object file or library.  (Object files are
12576     distinguished from libraries by the linker according to the file
12577     contents.)  If linking is done, these object files are used as
12578     input to the linker.
12579
12580'-c'
12581'-S'
12582'-E'
12583     If any of these options is used, then the linker is not run, and
12584     object file names should not be used as arguments.  *Note Overall
12585     Options::.
12586
12587'-flinker-output=TYPE'
12588     This option controls the code generation of the link time
12589     optimizer.  By default the linker output is determined by the
12590     linker plugin automatically.  For debugging the compiler and in the
12591     case of incremental linking to non-lto object file is desired, it
12592     may be useful to control the type manually.
12593
12594     If TYPE is 'exec' the code generation is configured to produce
12595     static binary.  In this case '-fpic' and '-fpie' are both disabled.
12596
12597     If TYPE is 'dyn' the code generation is configured to produce
12598     shared library.  In this case '-fpic' or '-fPIC' is preserved, but
12599     not enabled automatically.  This makes it possible to build shared
12600     libraries without position independent code on architectures this
12601     is possible, i.e. on x86.
12602
12603     If TYPE is 'pie' the code generation is configured to produce
12604     '-fpie' executable.  This result in similar optimizations as 'exec'
12605     except that '-fpie' is not disabled if specified at compilation
12606     time.
12607
12608     If TYPE is 'rel' the compiler assumes that incremental linking is
12609     done.  The sections containing intermediate code for link-time
12610     optimization are merged, pre-optimized, and output to the resulting
12611     object file.  In addition, if '-ffat-lto-objects' is specified the
12612     binary code is produced for future non-lto linking.  The object
12613     file produced by incremental linking will be smaller than a static
12614     library produced from the same object files.  At link-time the
12615     result of incremental linking will also load faster to compiler
12616     than a static library assuming that majority of objects in the
12617     library are used.
12618
12619     Finally 'nolto-rel' configure compiler to for incremental linking
12620     where code generation is forced, final binary is produced and the
12621     intermediate code for later link-time optimization is stripped.
12622     When multiple object files are linked together the resulting code
12623     will be optimized better than with link time optimizations disabled
12624     (for example, the cross-module inlining will happen), most of
12625     benefits of whole program optimizations are however lost.
12626
12627     During the incremental link (by '-r') the linker plugin will
12628     default to 'rel'.  With current interfaces to GNU Binutils it is
12629     however not possible to link incrementally LTO objects and non-LTO
12630     objects into a single mixed object file.  In the case any of object
12631     files in incremental link cannot be used for link-time optimization
12632     the linker plugin will output warning and use 'nolto-rel'.  To
12633     maintain the whole program optimization it is recommended to link
12634     such objects into static library instead.  Alternatively it is
12635     possible to use H.J. Lu's binutils with support for mixed objects.
12636
12637'-fuse-ld=bfd'
12638     Use the 'bfd' linker instead of the default linker.
12639
12640'-fuse-ld=gold'
12641     Use the 'gold' linker instead of the default linker.
12642
12643'-fuse-ld=lld'
12644     Use the LLVM 'lld' linker instead of the default linker.
12645
12646'-lLIBRARY'
12647'-l LIBRARY'
12648     Search the library named LIBRARY when linking.  (The second
12649     alternative with the library as a separate argument is only for
12650     POSIX compliance and is not recommended.)
12651
12652     The '-l' option is passed directly to the linker by GCC. Refer to
12653     your linker documentation for exact details.  The general
12654     description below applies to the GNU linker.
12655
12656     The linker searches a standard list of directories for the library.
12657     The directories searched include several standard system
12658     directories plus any that you specify with '-L'.
12659
12660     Static libraries are archives of object files, and have file names
12661     like 'libLIBRARY.a'.  Some targets also support shared libraries,
12662     which typically have names like 'libLIBRARY.so'.  If both static
12663     and shared libraries are found, the linker gives preference to
12664     linking with the shared library unless the '-static' option is
12665     used.
12666
12667     It makes a difference where in the command you write this option;
12668     the linker searches and processes libraries and object files in the
12669     order they are specified.  Thus, 'foo.o -lz bar.o' searches library
12670     'z' after file 'foo.o' but before 'bar.o'.  If 'bar.o' refers to
12671     functions in 'z', those functions may not be loaded.
12672
12673'-lobjc'
12674     You need this special case of the '-l' option in order to link an
12675     Objective-C or Objective-C++ program.
12676
12677'-nostartfiles'
12678     Do not use the standard system startup files when linking.  The
12679     standard system libraries are used normally, unless '-nostdlib',
12680     '-nolibc', or '-nodefaultlibs' is used.
12681
12682'-nodefaultlibs'
12683     Do not use the standard system libraries when linking.  Only the
12684     libraries you specify are passed to the linker, and options
12685     specifying linkage of the system libraries, such as
12686     '-static-libgcc' or '-shared-libgcc', are ignored.  The standard
12687     startup files are used normally, unless '-nostartfiles' is used.
12688
12689     The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
12690     'memmove'.  These entries are usually resolved by entries in libc.
12691     These entry points should be supplied through some other mechanism
12692     when this option is specified.
12693
12694'-nolibc'
12695     Do not use the C library or system libraries tightly coupled with
12696     it when linking.  Still link with the startup files, 'libgcc' or
12697     toolchain provided language support libraries such as 'libgnat',
12698     'libgfortran' or 'libstdc++' unless options preventing their
12699     inclusion are used as well.  This typically removes '-lc' from the
12700     link command line, as well as system libraries that normally go
12701     with it and become meaningless when absence of a C library is
12702     assumed, for example '-lpthread' or '-lm' in some configurations.
12703     This is intended for bare-board targets when there is indeed no C
12704     library available.
12705
12706'-nostdlib'
12707     Do not use the standard system startup files or libraries when
12708     linking.  No startup files and only the libraries you specify are
12709     passed to the linker, and options specifying linkage of the system
12710     libraries, such as '-static-libgcc' or '-shared-libgcc', are
12711     ignored.
12712
12713     The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
12714     'memmove'.  These entries are usually resolved by entries in libc.
12715     These entry points should be supplied through some other mechanism
12716     when this option is specified.
12717
12718     One of the standard libraries bypassed by '-nostdlib' and
12719     '-nodefaultlibs' is 'libgcc.a', a library of internal subroutines
12720     which GCC uses to overcome shortcomings of particular machines, or
12721     special needs for some languages.  (*Note Interfacing to GCC
12722     Output: (gccint)Interface, for more discussion of 'libgcc.a'.)  In
12723     most cases, you need 'libgcc.a' even when you want to avoid other
12724     standard libraries.  In other words, when you specify '-nostdlib'
12725     or '-nodefaultlibs' you should usually specify '-lgcc' as well.
12726     This ensures that you have no unresolved references to internal GCC
12727     library subroutines.  (An example of such an internal subroutine is
12728     '__main', used to ensure C++ constructors are called; *note
12729     'collect2': (gccint)Collect2.)
12730
12731'-e ENTRY'
12732'--entry=ENTRY'
12733
12734     Specify that the program entry point is ENTRY.  The argument is
12735     interpreted by the linker; the GNU linker accepts either a symbol
12736     name or an address.
12737
12738'-pie'
12739     Produce a dynamically linked position independent executable on
12740     targets that support it.  For predictable results, you must also
12741     specify the same set of options used for compilation ('-fpie',
12742     '-fPIE', or model suboptions) when you specify this linker option.
12743
12744'-no-pie'
12745     Don't produce a dynamically linked position independent executable.
12746
12747'-static-pie'
12748     Produce a static position independent executable on targets that
12749     support it.  A static position independent executable is similar to
12750     a static executable, but can be loaded at any address without a
12751     dynamic linker.  For predictable results, you must also specify the
12752     same set of options used for compilation ('-fpie', '-fPIE', or
12753     model suboptions) when you specify this linker option.
12754
12755'-pthread'
12756     Link with the POSIX threads library.  This option is supported on
12757     GNU/Linux targets, most other Unix derivatives, and also on x86
12758     Cygwin and MinGW targets.  On some targets this option also sets
12759     flags for the preprocessor, so it should be used consistently for
12760     both compilation and linking.
12761
12762'-r'
12763     Produce a relocatable object as output.  This is also known as
12764     partial linking.
12765
12766'-rdynamic'
12767     Pass the flag '-export-dynamic' to the ELF linker, on targets that
12768     support it.  This instructs the linker to add all symbols, not only
12769     used ones, to the dynamic symbol table.  This option is needed for
12770     some uses of 'dlopen' or to allow obtaining backtraces from within
12771     a program.
12772
12773'-s'
12774     Remove all symbol table and relocation information from the
12775     executable.
12776
12777'-static'
12778     On systems that support dynamic linking, this overrides '-pie' and
12779     prevents linking with the shared libraries.  On other systems, this
12780     option has no effect.
12781
12782'-shared'
12783     Produce a shared object which can then be linked with other objects
12784     to form an executable.  Not all systems support this option.  For
12785     predictable results, you must also specify the same set of options
12786     used for compilation ('-fpic', '-fPIC', or model suboptions) when
12787     you specify this linker option.(1)
12788
12789'-shared-libgcc'
12790'-static-libgcc'
12791     On systems that provide 'libgcc' as a shared library, these options
12792     force the use of either the shared or static version, respectively.
12793     If no shared version of 'libgcc' was built when the compiler was
12794     configured, these options have no effect.
12795
12796     There are several situations in which an application should use the
12797     shared 'libgcc' instead of the static version.  The most common of
12798     these is when the application wishes to throw and catch exceptions
12799     across different shared libraries.  In that case, each of the
12800     libraries as well as the application itself should use the shared
12801     'libgcc'.
12802
12803     Therefore, the G++ driver automatically adds '-shared-libgcc'
12804     whenever you build a shared library or a main executable, because
12805     C++ programs typically use exceptions, so this is the right thing
12806     to do.
12807
12808     If, instead, you use the GCC driver to create shared libraries, you
12809     may find that they are not always linked with the shared 'libgcc'.
12810     If GCC finds, at its configuration time, that you have a non-GNU
12811     linker or a GNU linker that does not support option
12812     '--eh-frame-hdr', it links the shared version of 'libgcc' into
12813     shared libraries by default.  Otherwise, it takes advantage of the
12814     linker and optimizes away the linking with the shared version of
12815     'libgcc', linking with the static version of libgcc by default.
12816     This allows exceptions to propagate through such shared libraries,
12817     without incurring relocation costs at library load time.
12818
12819     However, if a library or main executable is supposed to throw or
12820     catch exceptions, you must link it using the G++ driver, or using
12821     the option '-shared-libgcc', such that it is linked with the shared
12822     'libgcc'.
12823
12824'-static-libasan'
12825     When the '-fsanitize=address' option is used to link a program, the
12826     GCC driver automatically links against 'libasan'.  If 'libasan' is
12827     available as a shared library, and the '-static' option is not
12828     used, then this links against the shared version of 'libasan'.  The
12829     '-static-libasan' option directs the GCC driver to link 'libasan'
12830     statically, without necessarily linking other libraries statically.
12831
12832'-static-libtsan'
12833     When the '-fsanitize=thread' option is used to link a program, the
12834     GCC driver automatically links against 'libtsan'.  If 'libtsan' is
12835     available as a shared library, and the '-static' option is not
12836     used, then this links against the shared version of 'libtsan'.  The
12837     '-static-libtsan' option directs the GCC driver to link 'libtsan'
12838     statically, without necessarily linking other libraries statically.
12839
12840'-static-liblsan'
12841     When the '-fsanitize=leak' option is used to link a program, the
12842     GCC driver automatically links against 'liblsan'.  If 'liblsan' is
12843     available as a shared library, and the '-static' option is not
12844     used, then this links against the shared version of 'liblsan'.  The
12845     '-static-liblsan' option directs the GCC driver to link 'liblsan'
12846     statically, without necessarily linking other libraries statically.
12847
12848'-static-libubsan'
12849     When the '-fsanitize=undefined' option is used to link a program,
12850     the GCC driver automatically links against 'libubsan'.  If
12851     'libubsan' is available as a shared library, and the '-static'
12852     option is not used, then this links against the shared version of
12853     'libubsan'.  The '-static-libubsan' option directs the GCC driver
12854     to link 'libubsan' statically, without necessarily linking other
12855     libraries statically.
12856
12857'-static-libstdc++'
12858     When the 'g++' program is used to link a C++ program, it normally
12859     automatically links against 'libstdc++'.  If 'libstdc++' is
12860     available as a shared library, and the '-static' option is not
12861     used, then this links against the shared version of 'libstdc++'.
12862     That is normally fine.  However, it is sometimes useful to freeze
12863     the version of 'libstdc++' used by the program without going all
12864     the way to a fully static link.  The '-static-libstdc++' option
12865     directs the 'g++' driver to link 'libstdc++' statically, without
12866     necessarily linking other libraries statically.
12867
12868'-symbolic'
12869     Bind references to global symbols when building a shared object.
12870     Warn about any unresolved references (unless overridden by the link
12871     editor option '-Xlinker -z -Xlinker defs').  Only a few systems
12872     support this option.
12873
12874'-T SCRIPT'
12875     Use SCRIPT as the linker script.  This option is supported by most
12876     systems using the GNU linker.  On some targets, such as bare-board
12877     targets without an operating system, the '-T' option may be
12878     required when linking to avoid references to undefined symbols.
12879
12880'-Xlinker OPTION'
12881     Pass OPTION as an option to the linker.  You can use this to supply
12882     system-specific linker options that GCC does not recognize.
12883
12884     If you want to pass an option that takes a separate argument, you
12885     must use '-Xlinker' twice, once for the option and once for the
12886     argument.  For example, to pass '-assert definitions', you must
12887     write '-Xlinker -assert -Xlinker definitions'.  It does not work to
12888     write '-Xlinker "-assert definitions"', because this passes the
12889     entire string as a single argument, which is not what the linker
12890     expects.
12891
12892     When using the GNU linker, it is usually more convenient to pass
12893     arguments to linker options using the 'OPTION=VALUE' syntax than as
12894     separate arguments.  For example, you can specify '-Xlinker
12895     -Map=output.map' rather than '-Xlinker -Map -Xlinker output.map'.
12896     Other linkers may not support this syntax for command-line options.
12897
12898'-Wl,OPTION'
12899     Pass OPTION as an option to the linker.  If OPTION contains commas,
12900     it is split into multiple options at the commas.  You can use this
12901     syntax to pass an argument to the option.  For example,
12902     '-Wl,-Map,output.map' passes '-Map output.map' to the linker.  When
12903     using the GNU linker, you can also get the same effect with
12904     '-Wl,-Map=output.map'.
12905
12906'-u SYMBOL'
12907     Pretend the symbol SYMBOL is undefined, to force linking of library
12908     modules to define it.  You can use '-u' multiple times with
12909     different symbols to force loading of additional library modules.
12910
12911'-z KEYWORD'
12912     '-z' is passed directly on to the linker along with the keyword
12913     KEYWORD.  See the section in the documentation of your linker for
12914     permitted values and their meanings.
12915
12916   ---------- Footnotes ----------
12917
12918   (1) On some systems, 'gcc -shared' needs to build supplementary stub
12919code for constructors to work.  On multi-libbed systems, 'gcc -shared'
12920must select the correct support libraries to link against.  Failing to
12921supply the correct flags may lead to subtle defects.  Supplying them in
12922cases where they are not necessary is innocuous.
12923
12924
12925File: gcc.info,  Node: Directory Options,  Next: Code Gen Options,  Prev: Link Options,  Up: Invoking GCC
12926
129273.15 Options for Directory Search
12928=================================
12929
12930These options specify directories to search for header files, for
12931libraries and for parts of the compiler:
12932
12933'-I DIR'
12934'-iquote DIR'
12935'-isystem DIR'
12936'-idirafter DIR'
12937     Add the directory DIR to the list of directories to be searched for
12938     header files during preprocessing.  If DIR begins with '=' or
12939     '$SYSROOT', then the '=' or '$SYSROOT' is replaced by the sysroot
12940     prefix; see '--sysroot' and '-isysroot'.
12941
12942     Directories specified with '-iquote' apply only to the quote form
12943     of the directive, '#include "FILE"'.  Directories specified with
12944     '-I', '-isystem', or '-idirafter' apply to lookup for both the
12945     '#include "FILE"' and '#include <FILE>' directives.
12946
12947     You can specify any number or combination of these options on the
12948     command line to search for header files in several directories.
12949     The lookup order is as follows:
12950
12951       1. For the quote form of the include directive, the directory of
12952          the current file is searched first.
12953
12954       2. For the quote form of the include directive, the directories
12955          specified by '-iquote' options are searched in left-to-right
12956          order, as they appear on the command line.
12957
12958       3. Directories specified with '-I' options are scanned in
12959          left-to-right order.
12960
12961       4. Directories specified with '-isystem' options are scanned in
12962          left-to-right order.
12963
12964       5. Standard system directories are scanned.
12965
12966       6. Directories specified with '-idirafter' options are scanned in
12967          left-to-right order.
12968
12969     You can use '-I' to override a system header file, substituting
12970     your own version, since these directories are searched before the
12971     standard system header file directories.  However, you should not
12972     use this option to add directories that contain vendor-supplied
12973     system header files; use '-isystem' for that.
12974
12975     The '-isystem' and '-idirafter' options also mark the directory as
12976     a system directory, so that it gets the same special treatment that
12977     is applied to the standard system directories.
12978
12979     If a standard system include directory, or a directory specified
12980     with '-isystem', is also specified with '-I', the '-I' option is
12981     ignored.  The directory is still searched but as a system directory
12982     at its normal position in the system include chain.  This is to
12983     ensure that GCC's procedure to fix buggy system headers and the
12984     ordering for the '#include_next' directive are not inadvertently
12985     changed.  If you really need to change the search order for system
12986     directories, use the '-nostdinc' and/or '-isystem' options.
12987
12988'-I-'
12989     Split the include path.  This option has been deprecated.  Please
12990     use '-iquote' instead for '-I' directories before the '-I-' and
12991     remove the '-I-' option.
12992
12993     Any directories specified with '-I' options before '-I-' are
12994     searched only for headers requested with '#include "FILE"'; they
12995     are not searched for '#include <FILE>'.  If additional directories
12996     are specified with '-I' options after the '-I-', those directories
12997     are searched for all '#include' directives.
12998
12999     In addition, '-I-' inhibits the use of the directory of the current
13000     file directory as the first search directory for '#include "FILE"'.
13001     There is no way to override this effect of '-I-'.
13002
13003'-iprefix PREFIX'
13004     Specify PREFIX as the prefix for subsequent '-iwithprefix' options.
13005     If the prefix represents a directory, you should include the final
13006     '/'.
13007
13008'-iwithprefix DIR'
13009'-iwithprefixbefore DIR'
13010     Append DIR to the prefix specified previously with '-iprefix', and
13011     add the resulting directory to the include search path.
13012     '-iwithprefixbefore' puts it in the same place '-I' would;
13013     '-iwithprefix' puts it where '-idirafter' would.
13014
13015'-isysroot DIR'
13016     This option is like the '--sysroot' option, but applies only to
13017     header files (except for Darwin targets, where it applies to both
13018     header files and libraries).  See the '--sysroot' option for more
13019     information.
13020
13021'-imultilib DIR'
13022     Use DIR as a subdirectory of the directory containing
13023     target-specific C++ headers.
13024
13025'-nostdinc'
13026     Do not search the standard system directories for header files.
13027     Only the directories explicitly specified with '-I', '-iquote',
13028     '-isystem', and/or '-idirafter' options (and the directory of the
13029     current file, if appropriate) are searched.
13030
13031'-nostdinc++'
13032     Do not search for header files in the C++-specific standard
13033     directories, but do still search the other standard directories.
13034     (This option is used when building the C++ library.)
13035
13036'-iplugindir=DIR'
13037     Set the directory to search for plugins that are passed by
13038     '-fplugin=NAME' instead of '-fplugin=PATH/NAME.so'.  This option is
13039     not meant to be used by the user, but only passed by the driver.
13040
13041'-LDIR'
13042     Add directory DIR to the list of directories to be searched for
13043     '-l'.
13044
13045'-BPREFIX'
13046     This option specifies where to find the executables, libraries,
13047     include files, and data files of the compiler itself.
13048
13049     The compiler driver program runs one or more of the subprograms
13050     'cpp', 'cc1', 'as' and 'ld'.  It tries PREFIX as a prefix for each
13051     program it tries to run, both with and without 'MACHINE/VERSION/'
13052     for the corresponding target machine and compiler version.
13053
13054     For each subprogram to be run, the compiler driver first tries the
13055     '-B' prefix, if any.  If that name is not found, or if '-B' is not
13056     specified, the driver tries two standard prefixes, '/usr/lib/gcc/'
13057     and '/usr/local/lib/gcc/'.  If neither of those results in a file
13058     name that is found, the unmodified program name is searched for
13059     using the directories specified in your 'PATH' environment
13060     variable.
13061
13062     The compiler checks to see if the path provided by '-B' refers to a
13063     directory, and if necessary it adds a directory separator character
13064     at the end of the path.
13065
13066     '-B' prefixes that effectively specify directory names also apply
13067     to libraries in the linker, because the compiler translates these
13068     options into '-L' options for the linker.  They also apply to
13069     include files in the preprocessor, because the compiler translates
13070     these options into '-isystem' options for the preprocessor.  In
13071     this case, the compiler appends 'include' to the prefix.
13072
13073     The runtime support file 'libgcc.a' can also be searched for using
13074     the '-B' prefix, if needed.  If it is not found there, the two
13075     standard prefixes above are tried, and that is all.  The file is
13076     left out of the link if it is not found by those means.
13077
13078     Another way to specify a prefix much like the '-B' prefix is to use
13079     the environment variable 'GCC_EXEC_PREFIX'.  *Note Environment
13080     Variables::.
13081
13082     As a special kludge, if the path provided by '-B' is
13083     '[dir/]stageN/', where N is a number in the range 0 to 9, then it
13084     is replaced by '[dir/]include'.  This is to help with
13085     boot-strapping the compiler.
13086
13087'-no-canonical-prefixes'
13088     Do not expand any symbolic links, resolve references to '/../' or
13089     '/./', or make the path absolute when generating a relative prefix.
13090
13091'--sysroot=DIR'
13092     Use DIR as the logical root directory for headers and libraries.
13093     For example, if the compiler normally searches for headers in
13094     '/usr/include' and libraries in '/usr/lib', it instead searches
13095     'DIR/usr/include' and 'DIR/usr/lib'.
13096
13097     If you use both this option and the '-isysroot' option, then the
13098     '--sysroot' option applies to libraries, but the '-isysroot' option
13099     applies to header files.
13100
13101     The GNU linker (beginning with version 2.16) has the necessary
13102     support for this option.  If your linker does not support this
13103     option, the header file aspect of '--sysroot' still works, but the
13104     library aspect does not.
13105
13106'--no-sysroot-suffix'
13107     For some targets, a suffix is added to the root directory specified
13108     with '--sysroot', depending on the other options used, so that
13109     headers may for example be found in 'DIR/SUFFIX/usr/include'
13110     instead of 'DIR/usr/include'.  This option disables the addition of
13111     such a suffix.
13112
13113
13114File: gcc.info,  Node: Code Gen Options,  Next: Developer Options,  Prev: Directory Options,  Up: Invoking GCC
13115
131163.16 Options for Code Generation Conventions
13117============================================
13118
13119These machine-independent options control the interface conventions used
13120in code generation.
13121
13122 Most of them have both positive and negative forms; the negative form
13123of '-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
13124listed--the one that is not the default.  You can figure out the other
13125form by either removing 'no-' or adding it.
13126
13127'-fstack-reuse=REUSE-LEVEL'
13128     This option controls stack space reuse for user declared local/auto
13129     variables and compiler generated temporaries.  REUSE_LEVEL can be
13130     'all', 'named_vars', or 'none'.  'all' enables stack reuse for all
13131     local variables and temporaries, 'named_vars' enables the reuse
13132     only for user defined local variables with names, and 'none'
13133     disables stack reuse completely.  The default value is 'all'.  The
13134     option is needed when the program extends the lifetime of a scoped
13135     local variable or a compiler generated temporary beyond the end
13136     point defined by the language.  When a lifetime of a variable ends,
13137     and if the variable lives in memory, the optimizing compiler has
13138     the freedom to reuse its stack space with other temporaries or
13139     scoped local variables whose live range does not overlap with it.
13140     Legacy code extending local lifetime is likely to break with the
13141     stack reuse optimization.
13142
13143     For example,
13144
13145             int *p;
13146             {
13147               int local1;
13148
13149               p = &local1;
13150               local1 = 10;
13151               ....
13152             }
13153             {
13154                int local2;
13155                local2 = 20;
13156                ...
13157             }
13158
13159             if (*p == 10)  // out of scope use of local1
13160               {
13161
13162               }
13163
13164     Another example:
13165
13166             struct A
13167             {
13168                 A(int k) : i(k), j(k) { }
13169                 int i;
13170                 int j;
13171             };
13172
13173             A *ap;
13174
13175             void foo(const A& ar)
13176             {
13177                ap = &ar;
13178             }
13179
13180             void bar()
13181             {
13182                foo(A(10)); // temp object's lifetime ends when foo returns
13183
13184                {
13185                  A a(20);
13186                  ....
13187                }
13188                ap->i+= 10;  // ap references out of scope temp whose space
13189                             // is reused with a. What is the value of ap->i?
13190             }
13191
13192
13193     The lifetime of a compiler generated temporary is well defined by
13194     the C++ standard.  When a lifetime of a temporary ends, and if the
13195     temporary lives in memory, the optimizing compiler has the freedom
13196     to reuse its stack space with other temporaries or scoped local
13197     variables whose live range does not overlap with it.  However some
13198     of the legacy code relies on the behavior of older compilers in
13199     which temporaries' stack space is not reused, the aggressive stack
13200     reuse can lead to runtime errors.  This option is used to control
13201     the temporary stack reuse optimization.
13202
13203'-ftrapv'
13204     This option generates traps for signed overflow on addition,
13205     subtraction, multiplication operations.  The options '-ftrapv' and
13206     '-fwrapv' override each other, so using '-ftrapv' '-fwrapv' on the
13207     command-line results in '-fwrapv' being effective.  Note that only
13208     active options override, so using '-ftrapv' '-fwrapv' '-fno-wrapv'
13209     on the command-line results in '-ftrapv' being effective.
13210
13211'-fwrapv'
13212     This option instructs the compiler to assume that signed arithmetic
13213     overflow of addition, subtraction and multiplication wraps around
13214     using twos-complement representation.  This flag enables some
13215     optimizations and disables others.  The options '-ftrapv' and
13216     '-fwrapv' override each other, so using '-ftrapv' '-fwrapv' on the
13217     command-line results in '-fwrapv' being effective.  Note that only
13218     active options override, so using '-ftrapv' '-fwrapv' '-fno-wrapv'
13219     on the command-line results in '-ftrapv' being effective.
13220
13221'-fwrapv-pointer'
13222     This option instructs the compiler to assume that pointer
13223     arithmetic overflow on addition and subtraction wraps around using
13224     twos-complement representation.  This flag disables some
13225     optimizations which assume pointer overflow is invalid.
13226
13227'-fstrict-overflow'
13228     This option implies '-fno-wrapv' '-fno-wrapv-pointer' and when
13229     negated implies '-fwrapv' '-fwrapv-pointer'.
13230
13231'-fexceptions'
13232     Enable exception handling.  Generates extra code needed to
13233     propagate exceptions.  For some targets, this implies GCC generates
13234     frame unwind information for all functions, which can produce
13235     significant data size overhead, although it does not affect
13236     execution.  If you do not specify this option, GCC enables it by
13237     default for languages like C++ that normally require exception
13238     handling, and disables it for languages like C that do not normally
13239     require it.  However, you may need to enable this option when
13240     compiling C code that needs to interoperate properly with exception
13241     handlers written in C++.  You may also wish to disable this option
13242     if you are compiling older C++ programs that don't use exception
13243     handling.
13244
13245'-fnon-call-exceptions'
13246     Generate code that allows trapping instructions to throw
13247     exceptions.  Note that this requires platform-specific runtime
13248     support that does not exist everywhere.  Moreover, it only allows
13249     _trapping_ instructions to throw exceptions, i.e. memory references
13250     or floating-point instructions.  It does not allow exceptions to be
13251     thrown from arbitrary signal handlers such as 'SIGALRM'.
13252
13253'-fdelete-dead-exceptions'
13254     Consider that instructions that may throw exceptions but don't
13255     otherwise contribute to the execution of the program can be
13256     optimized away.  This option is enabled by default for the Ada
13257     front end, as permitted by the Ada language specification.
13258     Optimization passes that cause dead exceptions to be removed are
13259     enabled independently at different optimization levels.
13260
13261'-funwind-tables'
13262     Similar to '-fexceptions', except that it just generates any needed
13263     static data, but does not affect the generated code in any other
13264     way.  You normally do not need to enable this option; instead, a
13265     language processor that needs this handling enables it on your
13266     behalf.
13267
13268'-fasynchronous-unwind-tables'
13269     Generate unwind table in DWARF format, if supported by target
13270     machine.  The table is exact at each instruction boundary, so it
13271     can be used for stack unwinding from asynchronous events (such as
13272     debugger or garbage collector).
13273
13274'-fno-gnu-unique'
13275     On systems with recent GNU assembler and C library, the C++
13276     compiler uses the 'STB_GNU_UNIQUE' binding to make sure that
13277     definitions of template static data members and static local
13278     variables in inline functions are unique even in the presence of
13279     'RTLD_LOCAL'; this is necessary to avoid problems with a library
13280     used by two different 'RTLD_LOCAL' plugins depending on a
13281     definition in one of them and therefore disagreeing with the other
13282     one about the binding of the symbol.  But this causes 'dlclose' to
13283     be ignored for affected DSOs; if your program relies on
13284     reinitialization of a DSO via 'dlclose' and 'dlopen', you can use
13285     '-fno-gnu-unique'.
13286
13287'-fpcc-struct-return'
13288     Return "short" 'struct' and 'union' values in memory like longer
13289     ones, rather than in registers.  This convention is less efficient,
13290     but it has the advantage of allowing intercallability between
13291     GCC-compiled files and files compiled with other compilers,
13292     particularly the Portable C Compiler (pcc).
13293
13294     The precise convention for returning structures in memory depends
13295     on the target configuration macros.
13296
13297     Short structures and unions are those whose size and alignment
13298     match that of some integer type.
13299
13300     *Warning:* code compiled with the '-fpcc-struct-return' switch is
13301     not binary compatible with code compiled with the
13302     '-freg-struct-return' switch.  Use it to conform to a non-default
13303     application binary interface.
13304
13305'-freg-struct-return'
13306     Return 'struct' and 'union' values in registers when possible.
13307     This is more efficient for small structures than
13308     '-fpcc-struct-return'.
13309
13310     If you specify neither '-fpcc-struct-return' nor
13311     '-freg-struct-return', GCC defaults to whichever convention is
13312     standard for the target.  If there is no standard convention, GCC
13313     defaults to '-fpcc-struct-return', except on targets where GCC is
13314     the principal compiler.  In those cases, we can choose the
13315     standard, and we chose the more efficient register return
13316     alternative.
13317
13318     *Warning:* code compiled with the '-freg-struct-return' switch is
13319     not binary compatible with code compiled with the
13320     '-fpcc-struct-return' switch.  Use it to conform to a non-default
13321     application binary interface.
13322
13323'-fshort-enums'
13324     Allocate to an 'enum' type only as many bytes as it needs for the
13325     declared range of possible values.  Specifically, the 'enum' type
13326     is equivalent to the smallest integer type that has enough room.
13327
13328     *Warning:* the '-fshort-enums' switch causes GCC to generate code
13329     that is not binary compatible with code generated without that
13330     switch.  Use it to conform to a non-default application binary
13331     interface.
13332
13333'-fshort-wchar'
13334     Override the underlying type for 'wchar_t' to be 'short unsigned
13335     int' instead of the default for the target.  This option is useful
13336     for building programs to run under WINE.
13337
13338     *Warning:* the '-fshort-wchar' switch causes GCC to generate code
13339     that is not binary compatible with code generated without that
13340     switch.  Use it to conform to a non-default application binary
13341     interface.
13342
13343'-fno-common'
13344     In C code, this option controls the placement of global variables
13345     defined without an initializer, known as "tentative definitions" in
13346     the C standard.  Tentative definitions are distinct from
13347     declarations of a variable with the 'extern' keyword, which do not
13348     allocate storage.
13349
13350     Unix C compilers have traditionally allocated storage for
13351     uninitialized global variables in a common block.  This allows the
13352     linker to resolve all tentative definitions of the same variable in
13353     different compilation units to the same object, or to a
13354     non-tentative definition.  This is the behavior specified by
13355     '-fcommon', and is the default for GCC on most targets.  On the
13356     other hand, this behavior is not required by ISO C, and on some
13357     targets may carry a speed or code size penalty on variable
13358     references.
13359
13360     The '-fno-common' option specifies that the compiler should instead
13361     place uninitialized global variables in the BSS section of the
13362     object file.  This inhibits the merging of tentative definitions by
13363     the linker so you get a multiple-definition error if the same
13364     variable is defined in more than one compilation unit.  Compiling
13365     with '-fno-common' is useful on targets for which it provides
13366     better performance, or if you wish to verify that the program will
13367     work on other systems that always treat uninitialized variable
13368     definitions this way.
13369
13370'-fno-ident'
13371     Ignore the '#ident' directive.
13372
13373'-finhibit-size-directive'
13374     Don't output a '.size' assembler directive, or anything else that
13375     would cause trouble if the function is split in the middle, and the
13376     two halves are placed at locations far apart in memory.  This
13377     option is used when compiling 'crtstuff.c'; you should not need to
13378     use it for anything else.
13379
13380'-fverbose-asm'
13381     Put extra commentary information in the generated assembly code to
13382     make it more readable.  This option is generally only of use to
13383     those who actually need to read the generated assembly code
13384     (perhaps while debugging the compiler itself).
13385
13386     '-fno-verbose-asm', the default, causes the extra information to be
13387     omitted and is useful when comparing two assembler files.
13388
13389     The added comments include:
13390
13391        * information on the compiler version and command-line options,
13392
13393        * the source code lines associated with the assembly
13394          instructions, in the form FILENAME:LINENUMBER:CONTENT OF LINE,
13395
13396        * hints on which high-level expressions correspond to the
13397          various assembly instruction operands.
13398
13399     For example, given this C source file:
13400
13401          int test (int n)
13402          {
13403            int i;
13404            int total = 0;
13405
13406            for (i = 0; i < n; i++)
13407              total += i * i;
13408
13409            return total;
13410          }
13411
13412     compiling to (x86_64) assembly via '-S' and emitting the result
13413     direct to stdout via '-o' '-'
13414
13415          gcc -S test.c -fverbose-asm -Os -o -
13416
13417     gives output similar to this:
13418
13419          	.file	"test.c"
13420          # GNU C11 (GCC) version 7.0.0 20160809 (experimental) (x86_64-pc-linux-gnu)
13421            [...snip...]
13422          # options passed:
13423            [...snip...]
13424
13425          	.text
13426          	.globl	test
13427          	.type	test, @function
13428          test:
13429          .LFB0:
13430          	.cfi_startproc
13431          # test.c:4:   int total = 0;
13432          	xorl	%eax, %eax	# <retval>
13433          # test.c:6:   for (i = 0; i < n; i++)
13434          	xorl	%edx, %edx	# i
13435          .L2:
13436          # test.c:6:   for (i = 0; i < n; i++)
13437          	cmpl	%edi, %edx	# n, i
13438          	jge	.L5	#,
13439          # test.c:7:     total += i * i;
13440          	movl	%edx, %ecx	# i, tmp92
13441          	imull	%edx, %ecx	# i, tmp92
13442          # test.c:6:   for (i = 0; i < n; i++)
13443          	incl	%edx	# i
13444          # test.c:7:     total += i * i;
13445          	addl	%ecx, %eax	# tmp92, <retval>
13446          	jmp	.L2	#
13447          .L5:
13448          # test.c:10: }
13449          	ret
13450          	.cfi_endproc
13451          .LFE0:
13452          	.size	test, .-test
13453          	.ident	"GCC: (GNU) 7.0.0 20160809 (experimental)"
13454          	.section	.note.GNU-stack,"",@progbits
13455
13456     The comments are intended for humans rather than machines and hence
13457     the precise format of the comments is subject to change.
13458
13459'-frecord-gcc-switches'
13460     This switch causes the command line used to invoke the compiler to
13461     be recorded into the object file that is being created.  This
13462     switch is only implemented on some targets and the exact format of
13463     the recording is target and binary file format dependent, but it
13464     usually takes the form of a section containing ASCII text.  This
13465     switch is related to the '-fverbose-asm' switch, but that switch
13466     only records information in the assembler output file as comments,
13467     so it never reaches the object file.  See also
13468     '-grecord-gcc-switches' for another way of storing compiler options
13469     into the object file.
13470
13471'-fpic'
13472     Generate position-independent code (PIC) suitable for use in a
13473     shared library, if supported for the target machine.  Such code
13474     accesses all constant addresses through a global offset table
13475     (GOT).  The dynamic loader resolves the GOT entries when the
13476     program starts (the dynamic loader is not part of GCC; it is part
13477     of the operating system).  If the GOT size for the linked
13478     executable exceeds a machine-specific maximum size, you get an
13479     error message from the linker indicating that '-fpic' does not
13480     work; in that case, recompile with '-fPIC' instead.  (These
13481     maximums are 8k on the SPARC, 28k on AArch64 and 32k on the m68k
13482     and RS/6000.  The x86 has no such limit.)
13483
13484     Position-independent code requires special support, and therefore
13485     works only on certain machines.  For the x86, GCC supports PIC for
13486     System V but not for the Sun 386i.  Code generated for the IBM
13487     RS/6000 is always position-independent.
13488
13489     When this flag is set, the macros '__pic__' and '__PIC__' are
13490     defined to 1.
13491
13492'-fPIC'
13493     If supported for the target machine, emit position-independent
13494     code, suitable for dynamic linking and avoiding any limit on the
13495     size of the global offset table.  This option makes a difference on
13496     AArch64, m68k, PowerPC and SPARC.
13497
13498     Position-independent code requires special support, and therefore
13499     works only on certain machines.
13500
13501     When this flag is set, the macros '__pic__' and '__PIC__' are
13502     defined to 2.
13503
13504'-fpie'
13505'-fPIE'
13506     These options are similar to '-fpic' and '-fPIC', but the generated
13507     position-independent code can be only linked into executables.
13508     Usually these options are used to compile code that will be linked
13509     using the '-pie' GCC option.
13510
13511     '-fpie' and '-fPIE' both define the macros '__pie__' and '__PIE__'.
13512     The macros have the value 1 for '-fpie' and 2 for '-fPIE'.
13513
13514'-fno-plt'
13515     Do not use the PLT for external function calls in
13516     position-independent code.  Instead, load the callee address at
13517     call sites from the GOT and branch to it.  This leads to more
13518     efficient code by eliminating PLT stubs and exposing GOT loads to
13519     optimizations.  On architectures such as 32-bit x86 where PLT stubs
13520     expect the GOT pointer in a specific register, this gives more
13521     register allocation freedom to the compiler.  Lazy binding requires
13522     use of the PLT; with '-fno-plt' all external symbols are resolved
13523     at load time.
13524
13525     Alternatively, the function attribute 'noplt' can be used to avoid
13526     calls through the PLT for specific external functions.
13527
13528     In position-dependent code, a few targets also convert calls to
13529     functions that are marked to not use the PLT to use the GOT
13530     instead.
13531
13532'-fno-jump-tables'
13533     Do not use jump tables for switch statements even where it would be
13534     more efficient than other code generation strategies.  This option
13535     is of use in conjunction with '-fpic' or '-fPIC' for building code
13536     that forms part of a dynamic linker and cannot reference the
13537     address of a jump table.  On some targets, jump tables do not
13538     require a GOT and this option is not needed.
13539
13540'-ffixed-REG'
13541     Treat the register named REG as a fixed register; generated code
13542     should never refer to it (except perhaps as a stack pointer, frame
13543     pointer or in some other fixed role).
13544
13545     REG must be the name of a register.  The register names accepted
13546     are machine-specific and are defined in the 'REGISTER_NAMES' macro
13547     in the machine description macro file.
13548
13549     This flag does not have a negative form, because it specifies a
13550     three-way choice.
13551
13552'-fcall-used-REG'
13553     Treat the register named REG as an allocable register that is
13554     clobbered by function calls.  It may be allocated for temporaries
13555     or variables that do not live across a call.  Functions compiled
13556     this way do not save and restore the register REG.
13557
13558     It is an error to use this flag with the frame pointer or stack
13559     pointer.  Use of this flag for other registers that have fixed
13560     pervasive roles in the machine's execution model produces
13561     disastrous results.
13562
13563     This flag does not have a negative form, because it specifies a
13564     three-way choice.
13565
13566'-fcall-saved-REG'
13567     Treat the register named REG as an allocable register saved by
13568     functions.  It may be allocated even for temporaries or variables
13569     that live across a call.  Functions compiled this way save and
13570     restore the register REG if they use it.
13571
13572     It is an error to use this flag with the frame pointer or stack
13573     pointer.  Use of this flag for other registers that have fixed
13574     pervasive roles in the machine's execution model produces
13575     disastrous results.
13576
13577     A different sort of disaster results from the use of this flag for
13578     a register in which function values may be returned.
13579
13580     This flag does not have a negative form, because it specifies a
13581     three-way choice.
13582
13583'-fpack-struct[=N]'
13584     Without a value specified, pack all structure members together
13585     without holes.  When a value is specified (which must be a small
13586     power of two), pack structure members according to this value,
13587     representing the maximum alignment (that is, objects with default
13588     alignment requirements larger than this are output potentially
13589     unaligned at the next fitting location.
13590
13591     *Warning:* the '-fpack-struct' switch causes GCC to generate code
13592     that is not binary compatible with code generated without that
13593     switch.  Additionally, it makes the code suboptimal.  Use it to
13594     conform to a non-default application binary interface.
13595
13596'-fleading-underscore'
13597     This option and its counterpart, '-fno-leading-underscore',
13598     forcibly change the way C symbols are represented in the object
13599     file.  One use is to help link with legacy assembly code.
13600
13601     *Warning:* the '-fleading-underscore' switch causes GCC to generate
13602     code that is not binary compatible with code generated without that
13603     switch.  Use it to conform to a non-default application binary
13604     interface.  Not all targets provide complete support for this
13605     switch.
13606
13607'-ftls-model=MODEL'
13608     Alter the thread-local storage model to be used (*note
13609     Thread-Local::).  The MODEL argument should be one of
13610     'global-dynamic', 'local-dynamic', 'initial-exec' or 'local-exec'.
13611     Note that the choice is subject to optimization: the compiler may
13612     use a more efficient model for symbols not visible outside of the
13613     translation unit, or if '-fpic' is not given on the command line.
13614
13615     The default without '-fpic' is 'initial-exec'; with '-fpic' the
13616     default is 'global-dynamic'.
13617
13618'-ftrampolines'
13619     For targets that normally need trampolines for nested functions,
13620     always generate them instead of using descriptors.  Otherwise, for
13621     targets that do not need them, like for example HP-PA or IA-64, do
13622     nothing.
13623
13624     A trampoline is a small piece of code that is created at run time
13625     on the stack when the address of a nested function is taken, and is
13626     used to call the nested function indirectly.  Therefore, it
13627     requires the stack to be made executable in order for the program
13628     to work properly.
13629
13630     '-fno-trampolines' is enabled by default on a language by language
13631     basis to let the compiler avoid generating them, if it computes
13632     that this is safe, and replace them with descriptors.  Descriptors
13633     are made up of data only, but the generated code must be prepared
13634     to deal with them.  As of this writing, '-fno-trampolines' is
13635     enabled by default only for Ada.
13636
13637     Moreover, code compiled with '-ftrampolines' and code compiled with
13638     '-fno-trampolines' are not binary compatible if nested functions
13639     are present.  This option must therefore be used on a program-wide
13640     basis and be manipulated with extreme care.
13641
13642'-fvisibility=[default|internal|hidden|protected]'
13643     Set the default ELF image symbol visibility to the specified
13644     option--all symbols are marked with this unless overridden within
13645     the code.  Using this feature can very substantially improve
13646     linking and load times of shared object libraries, produce more
13647     optimized code, provide near-perfect API export and prevent symbol
13648     clashes.  It is *strongly* recommended that you use this in any
13649     shared objects you distribute.
13650
13651     Despite the nomenclature, 'default' always means public; i.e.,
13652     available to be linked against from outside the shared object.
13653     'protected' and 'internal' are pretty useless in real-world usage
13654     so the only other commonly used option is 'hidden'.  The default if
13655     '-fvisibility' isn't specified is 'default', i.e., make every
13656     symbol public.
13657
13658     A good explanation of the benefits offered by ensuring ELF symbols
13659     have the correct visibility is given by "How To Write Shared
13660     Libraries" by Ulrich Drepper (which can be found at
13661     <https://www.akkadia.org/drepper/>)--however a superior solution
13662     made possible by this option to marking things hidden when the
13663     default is public is to make the default hidden and mark things
13664     public.  This is the norm with DLLs on Windows and with
13665     '-fvisibility=hidden' and '__attribute__ ((visibility("default")))'
13666     instead of '__declspec(dllexport)' you get almost identical
13667     semantics with identical syntax.  This is a great boon to those
13668     working with cross-platform projects.
13669
13670     For those adding visibility support to existing code, you may find
13671     '#pragma GCC visibility' of use.  This works by you enclosing the
13672     declarations you wish to set visibility for with (for example)
13673     '#pragma GCC visibility push(hidden)' and '#pragma GCC visibility
13674     pop'.  Bear in mind that symbol visibility should be viewed *as
13675     part of the API interface contract* and thus all new code should
13676     always specify visibility when it is not the default; i.e.,
13677     declarations only for use within the local DSO should *always* be
13678     marked explicitly as hidden as so to avoid PLT indirection
13679     overheads--making this abundantly clear also aids readability and
13680     self-documentation of the code.  Note that due to ISO C++
13681     specification requirements, 'operator new' and 'operator delete'
13682     must always be of default visibility.
13683
13684     Be aware that headers from outside your project, in particular
13685     system headers and headers from any other library you use, may not
13686     be expecting to be compiled with visibility other than the default.
13687     You may need to explicitly say '#pragma GCC visibility
13688     push(default)' before including any such headers.
13689
13690     'extern' declarations are not affected by '-fvisibility', so a lot
13691     of code can be recompiled with '-fvisibility=hidden' with no
13692     modifications.  However, this means that calls to 'extern'
13693     functions with no explicit visibility use the PLT, so it is more
13694     effective to use '__attribute ((visibility))' and/or '#pragma GCC
13695     visibility' to tell the compiler which 'extern' declarations should
13696     be treated as hidden.
13697
13698     Note that '-fvisibility' does affect C++ vague linkage entities.
13699     This means that, for instance, an exception class that is be thrown
13700     between DSOs must be explicitly marked with default visibility so
13701     that the 'type_info' nodes are unified between the DSOs.
13702
13703     An overview of these techniques, their benefits and how to use them
13704     is at <http://gcc.gnu.org/wiki/Visibility>.
13705
13706'-fstrict-volatile-bitfields'
13707     This option should be used if accesses to volatile bit-fields (or
13708     other structure fields, although the compiler usually honors those
13709     types anyway) should use a single access of the width of the
13710     field's type, aligned to a natural alignment if possible.  For
13711     example, targets with memory-mapped peripheral registers might
13712     require all such accesses to be 16 bits wide; with this flag you
13713     can declare all peripheral bit-fields as 'unsigned short' (assuming
13714     short is 16 bits on these targets) to force GCC to use 16-bit
13715     accesses instead of, perhaps, a more efficient 32-bit access.
13716
13717     If this option is disabled, the compiler uses the most efficient
13718     instruction.  In the previous example, that might be a 32-bit load
13719     instruction, even though that accesses bytes that do not contain
13720     any portion of the bit-field, or memory-mapped registers unrelated
13721     to the one being updated.
13722
13723     In some cases, such as when the 'packed' attribute is applied to a
13724     structure field, it may not be possible to access the field with a
13725     single read or write that is correctly aligned for the target
13726     machine.  In this case GCC falls back to generating multiple
13727     accesses rather than code that will fault or truncate the result at
13728     run time.
13729
13730     Note: Due to restrictions of the C/C++11 memory model, write
13731     accesses are not allowed to touch non bit-field members.  It is
13732     therefore recommended to define all bits of the field's type as
13733     bit-field members.
13734
13735     The default value of this option is determined by the application
13736     binary interface for the target processor.
13737
13738'-fsync-libcalls'
13739     This option controls whether any out-of-line instance of the
13740     '__sync' family of functions may be used to implement the C++11
13741     '__atomic' family of functions.
13742
13743     The default value of this option is enabled, thus the only useful
13744     form of the option is '-fno-sync-libcalls'.  This option is used in
13745     the implementation of the 'libatomic' runtime library.
13746
13747
13748File: gcc.info,  Node: Developer Options,  Next: Submodel Options,  Prev: Code Gen Options,  Up: Invoking GCC
13749
137503.17 GCC Developer Options
13751==========================
13752
13753This section describes command-line options that are primarily of
13754interest to GCC developers, including options to support compiler
13755testing and investigation of compiler bugs and compile-time performance
13756problems.  This includes options that produce debug dumps at various
13757points in the compilation; that print statistics such as memory use and
13758execution time; and that print information about GCC's configuration,
13759such as where it searches for libraries.  You should rarely need to use
13760any of these options for ordinary compilation and linking tasks.
13761
13762 Many developer options that cause GCC to dump output to a file take an
13763optional '=FILENAME' suffix.  You can specify 'stdout' or '-' to dump to
13764standard output, and 'stderr' for standard error.
13765
13766 If '=FILENAME' is omitted, a default dump file name is constructed by
13767concatenating the base dump file name, a pass number, phase letter, and
13768pass name.  The base dump file name is the name of output file produced
13769by the compiler if explicitly specified and not an executable; otherwise
13770it is the source file name.  The pass number is determined by the order
13771passes are registered with the compiler's pass manager.  This is
13772generally the same as the order of execution, but passes registered by
13773plugins, target-specific passes, or passes that are otherwise registered
13774late are numbered higher than the pass named 'final', even if they are
13775executed earlier.  The phase letter is one of 'i' (inter-procedural
13776analysis), 'l' (language-specific), 'r' (RTL), or 't' (tree).  The files
13777are created in the directory of the output file.
13778
13779'-dLETTERS'
13780'-fdump-rtl-PASS'
13781'-fdump-rtl-PASS=FILENAME'
13782     Says to make debugging dumps during compilation at times specified
13783     by LETTERS.  This is used for debugging the RTL-based passes of the
13784     compiler.
13785
13786     Some '-dLETTERS' switches have different meaning when '-E' is used
13787     for preprocessing.  *Note Preprocessor Options::, for information
13788     about preprocessor-specific dump options.
13789
13790     Debug dumps can be enabled with a '-fdump-rtl' switch or some '-d'
13791     option LETTERS.  Here are the possible letters for use in PASS and
13792     LETTERS, and their meanings:
13793
13794     '-fdump-rtl-alignments'
13795          Dump after branch alignments have been computed.
13796
13797     '-fdump-rtl-asmcons'
13798          Dump after fixing rtl statements that have unsatisfied in/out
13799          constraints.
13800
13801     '-fdump-rtl-auto_inc_dec'
13802          Dump after auto-inc-dec discovery.  This pass is only run on
13803          architectures that have auto inc or auto dec instructions.
13804
13805     '-fdump-rtl-barriers'
13806          Dump after cleaning up the barrier instructions.
13807
13808     '-fdump-rtl-bbpart'
13809          Dump after partitioning hot and cold basic blocks.
13810
13811     '-fdump-rtl-bbro'
13812          Dump after block reordering.
13813
13814     '-fdump-rtl-btl1'
13815     '-fdump-rtl-btl2'
13816          '-fdump-rtl-btl1' and '-fdump-rtl-btl2' enable dumping after
13817          the two branch target load optimization passes.
13818
13819     '-fdump-rtl-bypass'
13820          Dump after jump bypassing and control flow optimizations.
13821
13822     '-fdump-rtl-combine'
13823          Dump after the RTL instruction combination pass.
13824
13825     '-fdump-rtl-compgotos'
13826          Dump after duplicating the computed gotos.
13827
13828     '-fdump-rtl-ce1'
13829     '-fdump-rtl-ce2'
13830     '-fdump-rtl-ce3'
13831          '-fdump-rtl-ce1', '-fdump-rtl-ce2', and '-fdump-rtl-ce3'
13832          enable dumping after the three if conversion passes.
13833
13834     '-fdump-rtl-cprop_hardreg'
13835          Dump after hard register copy propagation.
13836
13837     '-fdump-rtl-csa'
13838          Dump after combining stack adjustments.
13839
13840     '-fdump-rtl-cse1'
13841     '-fdump-rtl-cse2'
13842          '-fdump-rtl-cse1' and '-fdump-rtl-cse2' enable dumping after
13843          the two common subexpression elimination passes.
13844
13845     '-fdump-rtl-dce'
13846          Dump after the standalone dead code elimination passes.
13847
13848     '-fdump-rtl-dbr'
13849          Dump after delayed branch scheduling.
13850
13851     '-fdump-rtl-dce1'
13852     '-fdump-rtl-dce2'
13853          '-fdump-rtl-dce1' and '-fdump-rtl-dce2' enable dumping after
13854          the two dead store elimination passes.
13855
13856     '-fdump-rtl-eh'
13857          Dump after finalization of EH handling code.
13858
13859     '-fdump-rtl-eh_ranges'
13860          Dump after conversion of EH handling range regions.
13861
13862     '-fdump-rtl-expand'
13863          Dump after RTL generation.
13864
13865     '-fdump-rtl-fwprop1'
13866     '-fdump-rtl-fwprop2'
13867          '-fdump-rtl-fwprop1' and '-fdump-rtl-fwprop2' enable dumping
13868          after the two forward propagation passes.
13869
13870     '-fdump-rtl-gcse1'
13871     '-fdump-rtl-gcse2'
13872          '-fdump-rtl-gcse1' and '-fdump-rtl-gcse2' enable dumping after
13873          global common subexpression elimination.
13874
13875     '-fdump-rtl-init-regs'
13876          Dump after the initialization of the registers.
13877
13878     '-fdump-rtl-initvals'
13879          Dump after the computation of the initial value sets.
13880
13881     '-fdump-rtl-into_cfglayout'
13882          Dump after converting to cfglayout mode.
13883
13884     '-fdump-rtl-ira'
13885          Dump after iterated register allocation.
13886
13887     '-fdump-rtl-jump'
13888          Dump after the second jump optimization.
13889
13890     '-fdump-rtl-loop2'
13891          '-fdump-rtl-loop2' enables dumping after the rtl loop
13892          optimization passes.
13893
13894     '-fdump-rtl-mach'
13895          Dump after performing the machine dependent reorganization
13896          pass, if that pass exists.
13897
13898     '-fdump-rtl-mode_sw'
13899          Dump after removing redundant mode switches.
13900
13901     '-fdump-rtl-rnreg'
13902          Dump after register renumbering.
13903
13904     '-fdump-rtl-outof_cfglayout'
13905          Dump after converting from cfglayout mode.
13906
13907     '-fdump-rtl-peephole2'
13908          Dump after the peephole pass.
13909
13910     '-fdump-rtl-postreload'
13911          Dump after post-reload optimizations.
13912
13913     '-fdump-rtl-pro_and_epilogue'
13914          Dump after generating the function prologues and epilogues.
13915
13916     '-fdump-rtl-sched1'
13917     '-fdump-rtl-sched2'
13918          '-fdump-rtl-sched1' and '-fdump-rtl-sched2' enable dumping
13919          after the basic block scheduling passes.
13920
13921     '-fdump-rtl-ree'
13922          Dump after sign/zero extension elimination.
13923
13924     '-fdump-rtl-seqabstr'
13925          Dump after common sequence discovery.
13926
13927     '-fdump-rtl-shorten'
13928          Dump after shortening branches.
13929
13930     '-fdump-rtl-sibling'
13931          Dump after sibling call optimizations.
13932
13933     '-fdump-rtl-split1'
13934     '-fdump-rtl-split2'
13935     '-fdump-rtl-split3'
13936     '-fdump-rtl-split4'
13937     '-fdump-rtl-split5'
13938          These options enable dumping after five rounds of instruction
13939          splitting.
13940
13941     '-fdump-rtl-sms'
13942          Dump after modulo scheduling.  This pass is only run on some
13943          architectures.
13944
13945     '-fdump-rtl-stack'
13946          Dump after conversion from GCC's "flat register file"
13947          registers to the x87's stack-like registers.  This pass is
13948          only run on x86 variants.
13949
13950     '-fdump-rtl-subreg1'
13951     '-fdump-rtl-subreg2'
13952          '-fdump-rtl-subreg1' and '-fdump-rtl-subreg2' enable dumping
13953          after the two subreg expansion passes.
13954
13955     '-fdump-rtl-unshare'
13956          Dump after all rtl has been unshared.
13957
13958     '-fdump-rtl-vartrack'
13959          Dump after variable tracking.
13960
13961     '-fdump-rtl-vregs'
13962          Dump after converting virtual registers to hard registers.
13963
13964     '-fdump-rtl-web'
13965          Dump after live range splitting.
13966
13967     '-fdump-rtl-regclass'
13968     '-fdump-rtl-subregs_of_mode_init'
13969     '-fdump-rtl-subregs_of_mode_finish'
13970     '-fdump-rtl-dfinit'
13971     '-fdump-rtl-dfinish'
13972          These dumps are defined but always produce empty files.
13973
13974     '-da'
13975     '-fdump-rtl-all'
13976          Produce all the dumps listed above.
13977
13978     '-dA'
13979          Annotate the assembler output with miscellaneous debugging
13980          information.
13981
13982     '-dD'
13983          Dump all macro definitions, at the end of preprocessing, in
13984          addition to normal output.
13985
13986     '-dH'
13987          Produce a core dump whenever an error occurs.
13988
13989     '-dp'
13990          Annotate the assembler output with a comment indicating which
13991          pattern and alternative is used.  The length and cost of each
13992          instruction are also printed.
13993
13994     '-dP'
13995          Dump the RTL in the assembler output as a comment before each
13996          instruction.  Also turns on '-dp' annotation.
13997
13998     '-dx'
13999          Just generate RTL for a function instead of compiling it.
14000          Usually used with '-fdump-rtl-expand'.
14001
14002'-fdump-debug'
14003     Dump debugging information generated during the debug generation
14004     phase.
14005
14006'-fdump-earlydebug'
14007     Dump debugging information generated during the early debug
14008     generation phase.
14009
14010'-fdump-noaddr'
14011     When doing debugging dumps, suppress address output.  This makes it
14012     more feasible to use diff on debugging dumps for compiler
14013     invocations with different compiler binaries and/or different text
14014     / bss / data / heap / stack / dso start locations.
14015
14016'-freport-bug'
14017     Collect and dump debug information into a temporary file if an
14018     internal compiler error (ICE) occurs.
14019
14020'-fdump-unnumbered'
14021     When doing debugging dumps, suppress instruction numbers and
14022     address output.  This makes it more feasible to use diff on
14023     debugging dumps for compiler invocations with different options, in
14024     particular with and without '-g'.
14025
14026'-fdump-unnumbered-links'
14027     When doing debugging dumps (see '-d' option above), suppress
14028     instruction numbers for the links to the previous and next
14029     instructions in a sequence.
14030
14031'-fdump-ipa-SWITCH'
14032'-fdump-ipa-SWITCH-OPTIONS'
14033     Control the dumping at various stages of inter-procedural analysis
14034     language tree to a file.  The file name is generated by appending a
14035     switch specific suffix to the source file name, and the file is
14036     created in the same directory as the output file.  The following
14037     dumps are possible:
14038
14039     'all'
14040          Enables all inter-procedural analysis dumps.
14041
14042     'cgraph'
14043          Dumps information about call-graph optimization, unused
14044          function removal, and inlining decisions.
14045
14046     'inline'
14047          Dump after function inlining.
14048
14049     Additionally, the options '-optimized', '-missed', '-note', and
14050     '-all' can be provided, with the same meaning as for '-fopt-info',
14051     defaulting to '-optimized'.
14052
14053     For example, '-fdump-ipa-inline-optimized-missed' will emit
14054     information on callsites that were inlined, along with callsites
14055     that were not inlined.
14056
14057     By default, the dump will contain messages about successful
14058     optimizations (equivalent to '-optimized') together with low-level
14059     details about the analysis.
14060
14061'-fdump-lang-all'
14062'-fdump-lang-SWITCH'
14063'-fdump-lang-SWITCH-OPTIONS'
14064'-fdump-lang-SWITCH-OPTIONS=FILENAME'
14065     Control the dumping of language-specific information.  The OPTIONS
14066     and FILENAME portions behave as described in the '-fdump-tree'
14067     option.  The following SWITCH values are accepted:
14068
14069     'all'
14070
14071          Enable all language-specific dumps.
14072
14073     'class'
14074          Dump class hierarchy information.  Virtual table information
14075          is emitted unless ''slim'' is specified.  This option is
14076          applicable to C++ only.
14077
14078     'raw'
14079          Dump the raw internal tree data.  This option is applicable to
14080          C++ only.
14081
14082'-fdump-passes'
14083     Print on 'stderr' the list of optimization passes that are turned
14084     on and off by the current command-line options.
14085
14086'-fdump-statistics-OPTION'
14087     Enable and control dumping of pass statistics in a separate file.
14088     The file name is generated by appending a suffix ending in
14089     '.statistics' to the source file name, and the file is created in
14090     the same directory as the output file.  If the '-OPTION' form is
14091     used, '-stats' causes counters to be summed over the whole
14092     compilation unit while '-details' dumps every event as the passes
14093     generate them.  The default with no option is to sum counters for
14094     each function compiled.
14095
14096'-fdump-tree-all'
14097'-fdump-tree-SWITCH'
14098'-fdump-tree-SWITCH-OPTIONS'
14099'-fdump-tree-SWITCH-OPTIONS=FILENAME'
14100     Control the dumping at various stages of processing the
14101     intermediate language tree to a file.  If the '-OPTIONS' form is
14102     used, OPTIONS is a list of '-' separated options which control the
14103     details of the dump.  Not all options are applicable to all dumps;
14104     those that are not meaningful are ignored.  The following options
14105     are available
14106
14107     'address'
14108          Print the address of each node.  Usually this is not
14109          meaningful as it changes according to the environment and
14110          source file.  Its primary use is for tying up a dump file with
14111          a debug environment.
14112     'asmname'
14113          If 'DECL_ASSEMBLER_NAME' has been set for a given decl, use
14114          that in the dump instead of 'DECL_NAME'.  Its primary use is
14115          ease of use working backward from mangled names in the
14116          assembly file.
14117     'slim'
14118          When dumping front-end intermediate representations, inhibit
14119          dumping of members of a scope or body of a function merely
14120          because that scope has been reached.  Only dump such items
14121          when they are directly reachable by some other path.
14122
14123          When dumping pretty-printed trees, this option inhibits
14124          dumping the bodies of control structures.
14125
14126          When dumping RTL, print the RTL in slim (condensed) form
14127          instead of the default LISP-like representation.
14128     'raw'
14129          Print a raw representation of the tree.  By default, trees are
14130          pretty-printed into a C-like representation.
14131     'details'
14132          Enable more detailed dumps (not honored by every dump option).
14133          Also include information from the optimization passes.
14134     'stats'
14135          Enable dumping various statistics about the pass (not honored
14136          by every dump option).
14137     'blocks'
14138          Enable showing basic block boundaries (disabled in raw dumps).
14139     'graph'
14140          For each of the other indicated dump files
14141          ('-fdump-rtl-PASS'), dump a representation of the control flow
14142          graph suitable for viewing with GraphViz to
14143          'FILE.PASSID.PASS.dot'.  Each function in the file is
14144          pretty-printed as a subgraph, so that GraphViz can render them
14145          all in a single plot.
14146
14147          This option currently only works for RTL dumps, and the RTL is
14148          always dumped in slim form.
14149     'vops'
14150          Enable showing virtual operands for every statement.
14151     'lineno'
14152          Enable showing line numbers for statements.
14153     'uid'
14154          Enable showing the unique ID ('DECL_UID') for each variable.
14155     'verbose'
14156          Enable showing the tree dump for each statement.
14157     'eh'
14158          Enable showing the EH region number holding each statement.
14159     'scev'
14160          Enable showing scalar evolution analysis details.
14161     'optimized'
14162          Enable showing optimization information (only available in
14163          certain passes).
14164     'missed'
14165          Enable showing missed optimization information (only available
14166          in certain passes).
14167     'note'
14168          Enable other detailed optimization information (only available
14169          in certain passes).
14170     'all'
14171          Turn on all options, except 'raw', 'slim', 'verbose' and
14172          'lineno'.
14173     'optall'
14174          Turn on all optimization options, i.e., 'optimized', 'missed',
14175          and 'note'.
14176
14177     To determine what tree dumps are available or find the dump for a
14178     pass of interest follow the steps below.
14179
14180       1. Invoke GCC with '-fdump-passes' and in the 'stderr' output
14181          look for a code that corresponds to the pass you are
14182          interested in.  For example, the codes 'tree-evrp',
14183          'tree-vrp1', and 'tree-vrp2' correspond to the three Value
14184          Range Propagation passes.  The number at the end distinguishes
14185          distinct invocations of the same pass.
14186       2. To enable the creation of the dump file, append the pass code
14187          to the '-fdump-' option prefix and invoke GCC with it.  For
14188          example, to enable the dump from the Early Value Range
14189          Propagation pass, invoke GCC with the '-fdump-tree-evrp'
14190          option.  Optionally, you may specify the name of the dump
14191          file.  If you don't specify one, GCC creates as described
14192          below.
14193       3. Find the pass dump in a file whose name is composed of three
14194          components separated by a period: the name of the source file
14195          GCC was invoked to compile, a numeric suffix indicating the
14196          pass number followed by the letter 't' for tree passes (and
14197          the letter 'r' for RTL passes), and finally the pass code.
14198          For example, the Early VRP pass dump might be in a file named
14199          'myfile.c.038t.evrp' in the current working directory.  Note
14200          that the numeric codes are not stable and may change from one
14201          version of GCC to another.
14202
14203'-fopt-info'
14204'-fopt-info-OPTIONS'
14205'-fopt-info-OPTIONS=FILENAME'
14206     Controls optimization dumps from various optimization passes.  If
14207     the '-OPTIONS' form is used, OPTIONS is a list of '-' separated
14208     option keywords to select the dump details and optimizations.
14209
14210     The OPTIONS can be divided into three groups:
14211       1. options describing what kinds of messages should be emitted,
14212       2. options describing the verbosity of the dump, and
14213       3. options describing which optimizations should be included.
14214     The options from each group can be freely mixed as they are
14215     non-overlapping.  However, in case of any conflicts, the later
14216     options override the earlier options on the command line.
14217
14218     The following options control which kinds of messages should be
14219     emitted:
14220
14221     'optimized'
14222          Print information when an optimization is successfully
14223          applied.  It is up to a pass to decide which information is
14224          relevant.  For example, the vectorizer passes print the source
14225          location of loops which are successfully vectorized.
14226     'missed'
14227          Print information about missed optimizations.  Individual
14228          passes control which information to include in the output.
14229     'note'
14230          Print verbose information about optimizations, such as certain
14231          transformations, more detailed messages about decisions etc.
14232     'all'
14233          Print detailed optimization information.  This includes
14234          'optimized', 'missed', and 'note'.
14235
14236     The following option controls the dump verbosity:
14237
14238     'internals'
14239          By default, only "high-level" messages are emitted.  This
14240          option enables additional, more detailed, messages, which are
14241          likely to only be of interest to GCC developers.
14242
14243     One or more of the following option keywords can be used to
14244     describe a group of optimizations:
14245
14246     'ipa'
14247          Enable dumps from all interprocedural optimizations.
14248     'loop'
14249          Enable dumps from all loop optimizations.
14250     'inline'
14251          Enable dumps from all inlining optimizations.
14252     'omp'
14253          Enable dumps from all OMP (Offloading and Multi Processing)
14254          optimizations.
14255     'vec'
14256          Enable dumps from all vectorization optimizations.
14257     'optall'
14258          Enable dumps from all optimizations.  This is a superset of
14259          the optimization groups listed above.
14260
14261     If OPTIONS is omitted, it defaults to 'optimized-optall', which
14262     means to dump messages about successful optimizations from all the
14263     passes, omitting messages that are treated as "internals".
14264
14265     If the FILENAME is provided, then the dumps from all the applicable
14266     optimizations are concatenated into the FILENAME.  Otherwise the
14267     dump is output onto 'stderr'.  Though multiple '-fopt-info' options
14268     are accepted, only one of them can include a FILENAME.  If other
14269     filenames are provided then all but the first such option are
14270     ignored.
14271
14272     Note that the output FILENAME is overwritten in case of multiple
14273     translation units.  If a combined output from multiple translation
14274     units is desired, 'stderr' should be used instead.
14275
14276     In the following example, the optimization info is output to
14277     'stderr':
14278
14279          gcc -O3 -fopt-info
14280
14281     This example:
14282          gcc -O3 -fopt-info-missed=missed.all
14283
14284     outputs missed optimization report from all the passes into
14285     'missed.all', and this one:
14286
14287          gcc -O2 -ftree-vectorize -fopt-info-vec-missed
14288
14289     prints information about missed optimization opportunities from
14290     vectorization passes on 'stderr'.  Note that
14291     '-fopt-info-vec-missed' is equivalent to '-fopt-info-missed-vec'.
14292     The order of the optimization group names and message types listed
14293     after '-fopt-info' does not matter.
14294
14295     As another example,
14296          gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
14297
14298     outputs information about missed optimizations as well as optimized
14299     locations from all the inlining passes into 'inline.txt'.
14300
14301     Finally, consider:
14302
14303          gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
14304
14305     Here the two output filenames 'vec.miss' and 'loop.opt' are in
14306     conflict since only one output file is allowed.  In this case, only
14307     the first option takes effect and the subsequent options are
14308     ignored.  Thus only 'vec.miss' is produced which contains dumps
14309     from the vectorizer about missed opportunities.
14310
14311'-fsave-optimization-record'
14312     Write a SRCFILE.opt-record.json.gz file detailing what
14313     optimizations were performed, for those optimizations that support
14314     '-fopt-info'.
14315
14316     This option is experimental and the format of the data within the
14317     compressed JSON file is subject to change.
14318
14319     It is roughly equivalent to a machine-readable version of
14320     '-fopt-info-all', as a collection of messages with source file,
14321     line number and column number, with the following additional data
14322     for each message:
14323
14324        * the execution count of the code being optimized, along with
14325          metadata about whether this was from actual profile data, or
14326          just an estimate, allowing consumers to prioritize messages by
14327          code hotness,
14328
14329        * the function name of the code being optimized, where
14330          applicable,
14331
14332        * the "inlining chain" for the code being optimized, so that
14333          when a function is inlined into several different places
14334          (which might themselves be inlined), the reader can
14335          distinguish between the copies,
14336
14337        * objects identifying those parts of the message that refer to
14338          expressions, statements or symbol-table nodes, which of these
14339          categories they are, and, when available, their source code
14340          location,
14341
14342        * the GCC pass that emitted the message, and
14343
14344        * the location in GCC's own code from which the message was
14345          emitted
14346
14347     Additionally, some messages are logically nested within other
14348     messages, reflecting implementation details of the optimization
14349     passes.
14350
14351'-fsched-verbose=N'
14352     On targets that use instruction scheduling, this option controls
14353     the amount of debugging output the scheduler prints to the dump
14354     files.
14355
14356     For N greater than zero, '-fsched-verbose' outputs the same
14357     information as '-fdump-rtl-sched1' and '-fdump-rtl-sched2'.  For N
14358     greater than one, it also output basic block probabilities,
14359     detailed ready list information and unit/insn info.  For N greater
14360     than two, it includes RTL at abort point, control-flow and regions
14361     info.  And for N over four, '-fsched-verbose' also includes
14362     dependence info.
14363
14364'-fenable-KIND-PASS'
14365'-fdisable-KIND-PASS=RANGE-LIST'
14366
14367     This is a set of options that are used to explicitly disable/enable
14368     optimization passes.  These options are intended for use for
14369     debugging GCC. Compiler users should use regular options for
14370     enabling/disabling passes instead.
14371
14372     '-fdisable-ipa-PASS'
14373          Disable IPA pass PASS.  PASS is the pass name.  If the same
14374          pass is statically invoked in the compiler multiple times, the
14375          pass name should be appended with a sequential number starting
14376          from 1.
14377
14378     '-fdisable-rtl-PASS'
14379     '-fdisable-rtl-PASS=RANGE-LIST'
14380          Disable RTL pass PASS.  PASS is the pass name.  If the same
14381          pass is statically invoked in the compiler multiple times, the
14382          pass name should be appended with a sequential number starting
14383          from 1.  RANGE-LIST is a comma-separated list of function
14384          ranges or assembler names.  Each range is a number pair
14385          separated by a colon.  The range is inclusive in both ends.
14386          If the range is trivial, the number pair can be simplified as
14387          a single number.  If the function's call graph node's UID
14388          falls within one of the specified ranges, the PASS is disabled
14389          for that function.  The UID is shown in the function header of
14390          a dump file, and the pass names can be dumped by using option
14391          '-fdump-passes'.
14392
14393     '-fdisable-tree-PASS'
14394     '-fdisable-tree-PASS=RANGE-LIST'
14395          Disable tree pass PASS.  See '-fdisable-rtl' for the
14396          description of option arguments.
14397
14398     '-fenable-ipa-PASS'
14399          Enable IPA pass PASS.  PASS is the pass name.  If the same
14400          pass is statically invoked in the compiler multiple times, the
14401          pass name should be appended with a sequential number starting
14402          from 1.
14403
14404     '-fenable-rtl-PASS'
14405     '-fenable-rtl-PASS=RANGE-LIST'
14406          Enable RTL pass PASS.  See '-fdisable-rtl' for option argument
14407          description and examples.
14408
14409     '-fenable-tree-PASS'
14410     '-fenable-tree-PASS=RANGE-LIST'
14411          Enable tree pass PASS.  See '-fdisable-rtl' for the
14412          description of option arguments.
14413
14414     Here are some examples showing uses of these options.
14415
14416
14417          # disable ccp1 for all functions
14418             -fdisable-tree-ccp1
14419          # disable complete unroll for function whose cgraph node uid is 1
14420             -fenable-tree-cunroll=1
14421          # disable gcse2 for functions at the following ranges [1,1],
14422          # [300,400], and [400,1000]
14423          # disable gcse2 for functions foo and foo2
14424             -fdisable-rtl-gcse2=foo,foo2
14425          # disable early inlining
14426             -fdisable-tree-einline
14427          # disable ipa inlining
14428             -fdisable-ipa-inline
14429          # enable tree full unroll
14430             -fenable-tree-unroll
14431
14432
14433'-fchecking'
14434'-fchecking=N'
14435     Enable internal consistency checking.  The default depends on the
14436     compiler configuration.  '-fchecking=2' enables further internal
14437     consistency checking that might affect code generation.
14438
14439'-frandom-seed=STRING'
14440     This option provides a seed that GCC uses in place of random
14441     numbers in generating certain symbol names that have to be
14442     different in every compiled file.  It is also used to place unique
14443     stamps in coverage data files and the object files that produce
14444     them.  You can use the '-frandom-seed' option to produce
14445     reproducibly identical object files.
14446
14447     The STRING can either be a number (decimal, octal or hex) or an
14448     arbitrary string (in which case it's converted to a number by
14449     computing CRC32).
14450
14451     The STRING should be different for every file you compile.
14452
14453'-save-temps'
14454'-save-temps=cwd'
14455     Store the usual "temporary" intermediate files permanently; place
14456     them in the current directory and name them based on the source
14457     file.  Thus, compiling 'foo.c' with '-c -save-temps' produces files
14458     'foo.i' and 'foo.s', as well as 'foo.o'.  This creates a
14459     preprocessed 'foo.i' output file even though the compiler now
14460     normally uses an integrated preprocessor.
14461
14462     When used in combination with the '-x' command-line option,
14463     '-save-temps' is sensible enough to avoid over writing an input
14464     source file with the same extension as an intermediate file.  The
14465     corresponding intermediate file may be obtained by renaming the
14466     source file before using '-save-temps'.
14467
14468     If you invoke GCC in parallel, compiling several different source
14469     files that share a common base name in different subdirectories or
14470     the same source file compiled for multiple output destinations, it
14471     is likely that the different parallel compilers will interfere with
14472     each other, and overwrite the temporary files.  For instance:
14473
14474          gcc -save-temps -o outdir1/foo.o indir1/foo.c&
14475          gcc -save-temps -o outdir2/foo.o indir2/foo.c&
14476
14477     may result in 'foo.i' and 'foo.o' being written to simultaneously
14478     by both compilers.
14479
14480'-save-temps=obj'
14481     Store the usual "temporary" intermediate files permanently.  If the
14482     '-o' option is used, the temporary files are based on the object
14483     file.  If the '-o' option is not used, the '-save-temps=obj' switch
14484     behaves like '-save-temps'.
14485
14486     For example:
14487
14488          gcc -save-temps=obj -c foo.c
14489          gcc -save-temps=obj -c bar.c -o dir/xbar.o
14490          gcc -save-temps=obj foobar.c -o dir2/yfoobar
14491
14492     creates 'foo.i', 'foo.s', 'dir/xbar.i', 'dir/xbar.s',
14493     'dir2/yfoobar.i', 'dir2/yfoobar.s', and 'dir2/yfoobar.o'.
14494
14495'-time[=FILE]'
14496     Report the CPU time taken by each subprocess in the compilation
14497     sequence.  For C source files, this is the compiler proper and
14498     assembler (plus the linker if linking is done).
14499
14500     Without the specification of an output file, the output looks like
14501     this:
14502
14503          # cc1 0.12 0.01
14504          # as 0.00 0.01
14505
14506     The first number on each line is the "user time", that is time
14507     spent executing the program itself.  The second number is "system
14508     time", time spent executing operating system routines on behalf of
14509     the program.  Both numbers are in seconds.
14510
14511     With the specification of an output file, the output is appended to
14512     the named file, and it looks like this:
14513
14514          0.12 0.01 cc1 OPTIONS
14515          0.00 0.01 as OPTIONS
14516
14517     The "user time" and the "system time" are moved before the program
14518     name, and the options passed to the program are displayed, so that
14519     one can later tell what file was being compiled, and with which
14520     options.
14521
14522'-fdump-final-insns[=FILE]'
14523     Dump the final internal representation (RTL) to FILE.  If the
14524     optional argument is omitted (or if FILE is '.'), the name of the
14525     dump file is determined by appending '.gkd' to the compilation
14526     output file name.
14527
14528'-fcompare-debug[=OPTS]'
14529     If no error occurs during compilation, run the compiler a second
14530     time, adding OPTS and '-fcompare-debug-second' to the arguments
14531     passed to the second compilation.  Dump the final internal
14532     representation in both compilations, and print an error if they
14533     differ.
14534
14535     If the equal sign is omitted, the default '-gtoggle' is used.
14536
14537     The environment variable 'GCC_COMPARE_DEBUG', if defined, non-empty
14538     and nonzero, implicitly enables '-fcompare-debug'.  If
14539     'GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
14540     then it is used for OPTS, otherwise the default '-gtoggle' is used.
14541
14542     '-fcompare-debug=', with the equal sign but without OPTS, is
14543     equivalent to '-fno-compare-debug', which disables the dumping of
14544     the final representation and the second compilation, preventing
14545     even 'GCC_COMPARE_DEBUG' from taking effect.
14546
14547     To verify full coverage during '-fcompare-debug' testing, set
14548     'GCC_COMPARE_DEBUG' to say '-fcompare-debug-not-overridden', which
14549     GCC rejects as an invalid option in any actual compilation (rather
14550     than preprocessing, assembly or linking).  To get just a warning,
14551     setting 'GCC_COMPARE_DEBUG' to '-w%n-fcompare-debug not overridden'
14552     will do.
14553
14554'-fcompare-debug-second'
14555     This option is implicitly passed to the compiler for the second
14556     compilation requested by '-fcompare-debug', along with options to
14557     silence warnings, and omitting other options that would cause the
14558     compiler to produce output to files or to standard output as a side
14559     effect.  Dump files and preserved temporary files are renamed so as
14560     to contain the '.gk' additional extension during the second
14561     compilation, to avoid overwriting those generated by the first.
14562
14563     When this option is passed to the compiler driver, it causes the
14564     _first_ compilation to be skipped, which makes it useful for little
14565     other than debugging the compiler proper.
14566
14567'-gtoggle'
14568     Turn off generation of debug info, if leaving out this option
14569     generates it, or turn it on at level 2 otherwise.  The position of
14570     this argument in the command line does not matter; it takes effect
14571     after all other options are processed, and it does so only once, no
14572     matter how many times it is given.  This is mainly intended to be
14573     used with '-fcompare-debug'.
14574
14575'-fvar-tracking-assignments-toggle'
14576     Toggle '-fvar-tracking-assignments', in the same way that
14577     '-gtoggle' toggles '-g'.
14578
14579'-Q'
14580     Makes the compiler print out each function name as it is compiled,
14581     and print some statistics about each pass when it finishes.
14582
14583'-ftime-report'
14584     Makes the compiler print some statistics about the time consumed by
14585     each pass when it finishes.
14586
14587'-ftime-report-details'
14588     Record the time consumed by infrastructure parts separately for
14589     each pass.
14590
14591'-fira-verbose=N'
14592     Control the verbosity of the dump file for the integrated register
14593     allocator.  The default value is 5.  If the value N is greater or
14594     equal to 10, the dump output is sent to stderr using the same
14595     format as N minus 10.
14596
14597'-flto-report'
14598     Prints a report with internal details on the workings of the
14599     link-time optimizer.  The contents of this report vary from version
14600     to version.  It is meant to be useful to GCC developers when
14601     processing object files in LTO mode (via '-flto').
14602
14603     Disabled by default.
14604
14605'-flto-report-wpa'
14606     Like '-flto-report', but only print for the WPA phase of Link Time
14607     Optimization.
14608
14609'-fmem-report'
14610     Makes the compiler print some statistics about permanent memory
14611     allocation when it finishes.
14612
14613'-fmem-report-wpa'
14614     Makes the compiler print some statistics about permanent memory
14615     allocation for the WPA phase only.
14616
14617'-fpre-ipa-mem-report'
14618'-fpost-ipa-mem-report'
14619     Makes the compiler print some statistics about permanent memory
14620     allocation before or after interprocedural optimization.
14621
14622'-fprofile-report'
14623     Makes the compiler print some statistics about consistency of the
14624     (estimated) profile and effect of individual passes.
14625
14626'-fstack-usage'
14627     Makes the compiler output stack usage information for the program,
14628     on a per-function basis.  The filename for the dump is made by
14629     appending '.su' to the AUXNAME.  AUXNAME is generated from the name
14630     of the output file, if explicitly specified and it is not an
14631     executable, otherwise it is the basename of the source file.  An
14632     entry is made up of three fields:
14633
14634        * The name of the function.
14635        * A number of bytes.
14636        * One or more qualifiers: 'static', 'dynamic', 'bounded'.
14637
14638     The qualifier 'static' means that the function manipulates the
14639     stack statically: a fixed number of bytes are allocated for the
14640     frame on function entry and released on function exit; no stack
14641     adjustments are otherwise made in the function.  The second field
14642     is this fixed number of bytes.
14643
14644     The qualifier 'dynamic' means that the function manipulates the
14645     stack dynamically: in addition to the static allocation described
14646     above, stack adjustments are made in the body of the function, for
14647     example to push/pop arguments around function calls.  If the
14648     qualifier 'bounded' is also present, the amount of these
14649     adjustments is bounded at compile time and the second field is an
14650     upper bound of the total amount of stack used by the function.  If
14651     it is not present, the amount of these adjustments is not bounded
14652     at compile time and the second field only represents the bounded
14653     part.
14654
14655'-fstats'
14656     Emit statistics about front-end processing at the end of the
14657     compilation.  This option is supported only by the C++ front end,
14658     and the information is generally only useful to the G++ development
14659     team.
14660
14661'-fdbg-cnt-list'
14662     Print the name and the counter upper bound for all debug counters.
14663
14664'-fdbg-cnt=COUNTER-VALUE-LIST'
14665     Set the internal debug counter lower and upper bound.
14666     COUNTER-VALUE-LIST is a comma-separated list of
14667     NAME:LOWER_BOUND:UPPER_BOUND tuples which sets the lower and the
14668     upper bound of each debug counter NAME.  The LOWER_BOUND is
14669     optional and is zero initialized if not set.  All debug counters
14670     have the initial upper bound of 'UINT_MAX'; thus 'dbg_cnt' returns
14671     true always unless the upper bound is set by this option.  For
14672     example, with '-fdbg-cnt=dce:2:4,tail_call:10', 'dbg_cnt(dce)'
14673     returns true only for third and fourth invocation.  For
14674     'dbg_cnt(tail_call)' true is returned for first 10 invocations.
14675
14676'-print-file-name=LIBRARY'
14677     Print the full absolute name of the library file LIBRARY that would
14678     be used when linking--and don't do anything else.  With this
14679     option, GCC does not compile or link anything; it just prints the
14680     file name.
14681
14682'-print-multi-directory'
14683     Print the directory name corresponding to the multilib selected by
14684     any other switches present in the command line.  This directory is
14685     supposed to exist in 'GCC_EXEC_PREFIX'.
14686
14687'-print-multi-lib'
14688     Print the mapping from multilib directory names to compiler
14689     switches that enable them.  The directory name is separated from
14690     the switches by ';', and each switch starts with an '@' instead of
14691     the '-', without spaces between multiple switches.  This is
14692     supposed to ease shell processing.
14693
14694'-print-multi-os-directory'
14695     Print the path to OS libraries for the selected multilib, relative
14696     to some 'lib' subdirectory.  If OS libraries are present in the
14697     'lib' subdirectory and no multilibs are used, this is usually just
14698     '.', if OS libraries are present in 'libSUFFIX' sibling directories
14699     this prints e.g. '../lib64', '../lib' or '../lib32', or if OS
14700     libraries are present in 'lib/SUBDIR' subdirectories it prints e.g.
14701     'amd64', 'sparcv9' or 'ev6'.
14702
14703'-print-multiarch'
14704     Print the path to OS libraries for the selected multiarch, relative
14705     to some 'lib' subdirectory.
14706
14707'-print-prog-name=PROGRAM'
14708     Like '-print-file-name', but searches for a program such as 'cpp'.
14709
14710'-print-libgcc-file-name'
14711     Same as '-print-file-name=libgcc.a'.
14712
14713     This is useful when you use '-nostdlib' or '-nodefaultlibs' but you
14714     do want to link with 'libgcc.a'.  You can do:
14715
14716          gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
14717
14718'-print-search-dirs'
14719     Print the name of the configured installation directory and a list
14720     of program and library directories 'gcc' searches--and don't do
14721     anything else.
14722
14723     This is useful when 'gcc' prints the error message 'installation
14724     problem, cannot exec cpp0: No such file or directory'.  To resolve
14725     this you either need to put 'cpp0' and the other compiler
14726     components where 'gcc' expects to find them, or you can set the
14727     environment variable 'GCC_EXEC_PREFIX' to the directory where you
14728     installed them.  Don't forget the trailing '/'.  *Note Environment
14729     Variables::.
14730
14731'-print-sysroot'
14732     Print the target sysroot directory that is used during compilation.
14733     This is the target sysroot specified either at configure time or
14734     using the '--sysroot' option, possibly with an extra suffix that
14735     depends on compilation options.  If no target sysroot is specified,
14736     the option prints nothing.
14737
14738'-print-sysroot-headers-suffix'
14739     Print the suffix added to the target sysroot when searching for
14740     headers, or give an error if the compiler is not configured with
14741     such a suffix--and don't do anything else.
14742
14743'-dumpmachine'
14744     Print the compiler's target machine (for example,
14745     'i686-pc-linux-gnu')--and don't do anything else.
14746
14747'-dumpversion'
14748     Print the compiler version (for example, '3.0', '6.3.0' or
14749     '7')--and don't do anything else.  This is the compiler version
14750     used in filesystem paths and specs.  Depending on how the compiler
14751     has been configured it can be just a single number (major version),
14752     two numbers separated by a dot (major and minor version) or three
14753     numbers separated by dots (major, minor and patchlevel version).
14754
14755'-dumpfullversion'
14756     Print the full compiler version--and don't do anything else.  The
14757     output is always three numbers separated by dots, major, minor and
14758     patchlevel version.
14759
14760'-dumpspecs'
14761     Print the compiler's built-in specs--and don't do anything else.
14762     (This is used when GCC itself is being built.)  *Note Spec Files::.
14763
14764
14765File: gcc.info,  Node: Submodel Options,  Next: Spec Files,  Prev: Developer Options,  Up: Invoking GCC
14766
147673.18 Machine-Dependent Options
14768==============================
14769
14770Each target machine supported by GCC can have its own options--for
14771example, to allow you to compile for a particular processor variant or
14772ABI, or to control optimizations specific to that machine.  By
14773convention, the names of machine-specific options start with '-m'.
14774
14775 Some configurations of the compiler also support additional
14776target-specific options, usually for compatibility with other compilers
14777on the same platform.
14778
14779* Menu:
14780
14781* AArch64 Options::
14782* Adapteva Epiphany Options::
14783* AMD GCN Options::
14784* ARC Options::
14785* ARM Options::
14786* AVR Options::
14787* Blackfin Options::
14788* C6X Options::
14789* CRIS Options::
14790* CR16 Options::
14791* C-SKY Options::
14792* Darwin Options::
14793* DEC Alpha Options::
14794* FR30 Options::
14795* FT32 Options::
14796* FRV Options::
14797* GNU/Linux Options::
14798* H8/300 Options::
14799* HPPA Options::
14800* IA-64 Options::
14801* LM32 Options::
14802* M32C Options::
14803* M32R/D Options::
14804* M680x0 Options::
14805* MCore Options::
14806* MeP Options::
14807* MicroBlaze Options::
14808* MIPS Options::
14809* MMIX Options::
14810* MN10300 Options::
14811* Moxie Options::
14812* MSP430 Options::
14813* NDS32 Options::
14814* Nios II Options::
14815* Nvidia PTX Options::
14816* OpenRISC Options::
14817* PDP-11 Options::
14818* picoChip Options::
14819* PowerPC Options::
14820* RISC-V Options::
14821* RL78 Options::
14822* RS/6000 and PowerPC Options::
14823* RX Options::
14824* S/390 and zSeries Options::
14825* Score Options::
14826* SH Options::
14827* Solaris 2 Options::
14828* SPARC Options::
14829* SPU Options::
14830* System V Options::
14831* TILE-Gx Options::
14832* TILEPro Options::
14833* V850 Options::
14834* VAX Options::
14835* Visium Options::
14836* VMS Options::
14837* VxWorks Options::
14838* x86 Options::
14839* x86 Windows Options::
14840* Xstormy16 Options::
14841* Xtensa Options::
14842* zSeries Options::
14843
14844
14845File: gcc.info,  Node: AArch64 Options,  Next: Adapteva Epiphany Options,  Up: Submodel Options
14846
148473.18.1 AArch64 Options
14848----------------------
14849
14850These options are defined for AArch64 implementations:
14851
14852'-mabi=NAME'
14853     Generate code for the specified data model.  Permissible values are
14854     'ilp32' for SysV-like data model where int, long int and pointers
14855     are 32 bits, and 'lp64' for SysV-like data model where int is 32
14856     bits, but long int and pointers are 64 bits.
14857
14858     The default depends on the specific target configuration.  Note
14859     that the LP64 and ILP32 ABIs are not link-compatible; you must
14860     compile your entire program with the same ABI, and link with a
14861     compatible set of libraries.
14862
14863'-mbig-endian'
14864     Generate big-endian code.  This is the default when GCC is
14865     configured for an 'aarch64_be-*-*' target.
14866
14867'-mgeneral-regs-only'
14868     Generate code which uses only the general-purpose registers.  This
14869     will prevent the compiler from using floating-point and Advanced
14870     SIMD registers but will not impose any restrictions on the
14871     assembler.
14872
14873'-mlittle-endian'
14874     Generate little-endian code.  This is the default when GCC is
14875     configured for an 'aarch64-*-*' but not an 'aarch64_be-*-*' target.
14876
14877'-mcmodel=tiny'
14878     Generate code for the tiny code model.  The program and its
14879     statically defined symbols must be within 1MB of each other.
14880     Programs can be statically or dynamically linked.
14881
14882'-mcmodel=small'
14883     Generate code for the small code model.  The program and its
14884     statically defined symbols must be within 4GB of each other.
14885     Programs can be statically or dynamically linked.  This is the
14886     default code model.
14887
14888'-mcmodel=large'
14889     Generate code for the large code model.  This makes no assumptions
14890     about addresses and sizes of sections.  Programs can be statically
14891     linked only.
14892
14893'-mstrict-align'
14894'-mno-strict-align'
14895     Avoid or allow generating memory accesses that may not be aligned
14896     on a natural object boundary as described in the architecture
14897     specification.
14898
14899'-momit-leaf-frame-pointer'
14900'-mno-omit-leaf-frame-pointer'
14901     Omit or keep the frame pointer in leaf functions.  The former
14902     behavior is the default.
14903
14904'-mstack-protector-guard=GUARD'
14905'-mstack-protector-guard-reg=REG'
14906'-mstack-protector-guard-offset=OFFSET'
14907     Generate stack protection code using canary at GUARD.  Supported
14908     locations are 'global' for a global canary or 'sysreg' for a canary
14909     in an appropriate system register.
14910
14911     With the latter choice the options
14912     '-mstack-protector-guard-reg=REG' and
14913     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
14914     system register to use as base register for reading the canary, and
14915     from what offset from that base register.  There is no default
14916     register or offset as this is entirely for use within the Linux
14917     kernel.
14918
14919'-mstack-protector-guard=GUARD'
14920'-mstack-protector-guard-reg=REG'
14921'-mstack-protector-guard-offset=OFFSET'
14922     Generate stack protection code using canary at GUARD.  Supported
14923     locations are 'global' for a global canary or 'sysreg' for a canary
14924     in an appropriate system register.
14925
14926     With the latter choice the options
14927     '-mstack-protector-guard-reg=REG' and
14928     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
14929     system register to use as base register for reading the canary, and
14930     from what offset from that base register.  There is no default
14931     register or offset as this is entirely for use within the Linux
14932     kernel.
14933
14934'-mtls-dialect=desc'
14935     Use TLS descriptors as the thread-local storage mechanism for
14936     dynamic accesses of TLS variables.  This is the default.
14937
14938'-mtls-dialect=traditional'
14939     Use traditional TLS as the thread-local storage mechanism for
14940     dynamic accesses of TLS variables.
14941
14942'-mtls-size=SIZE'
14943     Specify bit size of immediate TLS offsets.  Valid values are 12,
14944     24, 32, 48.  This option requires binutils 2.26 or newer.
14945
14946'-mfix-cortex-a53-835769'
14947'-mno-fix-cortex-a53-835769'
14948     Enable or disable the workaround for the ARM Cortex-A53 erratum
14949     number 835769.  This involves inserting a NOP instruction between
14950     memory instructions and 64-bit integer multiply-accumulate
14951     instructions.
14952
14953'-mfix-cortex-a53-843419'
14954'-mno-fix-cortex-a53-843419'
14955     Enable or disable the workaround for the ARM Cortex-A53 erratum
14956     number 843419.  This erratum workaround is made at link time and
14957     this will only pass the corresponding flag to the linker.
14958
14959'-mlow-precision-recip-sqrt'
14960'-mno-low-precision-recip-sqrt'
14961     Enable or disable the reciprocal square root approximation.  This
14962     option only has an effect if '-ffast-math' or
14963     '-funsafe-math-optimizations' is used as well.  Enabling this
14964     reduces precision of reciprocal square root results to about 16
14965     bits for single precision and to 32 bits for double precision.
14966
14967'-mlow-precision-sqrt'
14968'-mno-low-precision-sqrt'
14969     Enable or disable the square root approximation.  This option only
14970     has an effect if '-ffast-math' or '-funsafe-math-optimizations' is
14971     used as well.  Enabling this reduces precision of square root
14972     results to about 16 bits for single precision and to 32 bits for
14973     double precision.  If enabled, it implies
14974     '-mlow-precision-recip-sqrt'.
14975
14976'-mlow-precision-div'
14977'-mno-low-precision-div'
14978     Enable or disable the division approximation.  This option only has
14979     an effect if '-ffast-math' or '-funsafe-math-optimizations' is used
14980     as well.  Enabling this reduces precision of division results to
14981     about 16 bits for single precision and to 32 bits for double
14982     precision.
14983
14984'-mtrack-speculation'
14985'-mno-track-speculation'
14986     Enable or disable generation of additional code to track
14987     speculative execution through conditional branches.  The tracking
14988     state can then be used by the compiler when expanding calls to
14989     '__builtin_speculation_safe_copy' to permit a more efficient code
14990     sequence to be generated.
14991
14992'-moutline-atomics'
14993'-mno-outline-atomics'
14994     Enable or disable calls to out-of-line helpers to implement atomic
14995     operations.  These helpers will, at runtime, determine if the LSE
14996     instructions from ARMv8.1-A can be used; if not, they will use the
14997     load/store-exclusive instructions that are present in the base
14998     ARMv8.0 ISA.
14999
15000     This option is only applicable when compiling for the base ARMv8.0
15001     instruction set.  If using a later revision, e.g.
15002     '-march=armv8.1-a' or '-march=armv8-a+lse', the ARMv8.1-Atomics
15003     instructions will be used directly.  The same applies when using
15004     '-mcpu=' when the selected cpu supports the 'lse' feature.
15005
15006'-march=NAME'
15007     Specify the name of the target architecture and, optionally, one or
15008     more feature modifiers.  This option has the form
15009     '-march=ARCH{+[no]FEATURE}*'.
15010
15011     The permissible values for ARCH are 'armv8-a', 'armv8.1-a',
15012     'armv8.2-a', 'armv8.3-a', 'armv8.4-a', 'armv8.5-a' or NATIVE.
15013
15014     The value 'armv8.5-a' implies 'armv8.4-a' and enables compiler
15015     support for the ARMv8.5-A architecture extensions.
15016
15017     The value 'armv8.4-a' implies 'armv8.3-a' and enables compiler
15018     support for the ARMv8.4-A architecture extensions.
15019
15020     The value 'armv8.3-a' implies 'armv8.2-a' and enables compiler
15021     support for the ARMv8.3-A architecture extensions.
15022
15023     The value 'armv8.2-a' implies 'armv8.1-a' and enables compiler
15024     support for the ARMv8.2-A architecture extensions.
15025
15026     The value 'armv8.1-a' implies 'armv8-a' and enables compiler
15027     support for the ARMv8.1-A architecture extension.  In particular,
15028     it enables the '+crc', '+lse', and '+rdma' features.
15029
15030     The value 'native' is available on native AArch64 GNU/Linux and
15031     causes the compiler to pick the architecture of the host system.
15032     This option has no effect if the compiler is unable to recognize
15033     the architecture of the host system,
15034
15035     The permissible values for FEATURE are listed in the sub-section on
15036     *note '-march' and '-mcpu' Feature Modifiers:
15037     aarch64-feature-modifiers.  Where conflicting feature modifiers are
15038     specified, the right-most feature is used.
15039
15040     GCC uses NAME to determine what kind of instructions it can emit
15041     when generating assembly code.  If '-march' is specified without
15042     either of '-mtune' or '-mcpu' also being specified, the code is
15043     tuned to perform well across a range of target processors
15044     implementing the target architecture.
15045
15046'-mtune=NAME'
15047     Specify the name of the target processor for which GCC should tune
15048     the performance of the code.  Permissible values for this option
15049     are: 'generic', 'cortex-a35', 'cortex-a53', 'cortex-a55',
15050     'cortex-a57', 'cortex-a72', 'cortex-a73', 'cortex-a75',
15051     'cortex-a76', 'ares', 'exynos-m1', 'emag', 'falkor', 'neoverse-e1',
15052     'neoverse-n1', 'neoverse-n2', 'neoverse-v1', 'qdf24xx', 'saphira',
15053     'phecda', 'xgene1', 'vulcan', 'octeontx', 'octeontx81',
15054     'octeontx83', 'a64fx', 'thunderx', 'thunderxt88', 'thunderxt88p1',
15055     'thunderxt81', 'tsv110', 'thunderxt83', 'thunderx2t99', 'zeus',
15056     'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
15057     'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53',
15058     'cortex-a75.cortex-a55', 'cortex-a76.cortex-a55' 'native'.
15059
15060     The values 'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
15061     'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53',
15062     'cortex-a75.cortex-a55', 'cortex-a76.cortex-a55' specify that GCC
15063     should tune for a big.LITTLE system.
15064
15065     Additionally on native AArch64 GNU/Linux systems the value 'native'
15066     tunes performance to the host system.  This option has no effect if
15067     the compiler is unable to recognize the processor of the host
15068     system.
15069
15070     Where none of '-mtune=', '-mcpu=' or '-march=' are specified, the
15071     code is tuned to perform well across a range of target processors.
15072
15073     This option cannot be suffixed by feature modifiers.
15074
15075'-mcpu=NAME'
15076     Specify the name of the target processor, optionally suffixed by
15077     one or more feature modifiers.  This option has the form
15078     '-mcpu=CPU{+[no]FEATURE}*', where the permissible values for CPU
15079     are the same as those available for '-mtune'.  The permissible
15080     values for FEATURE are documented in the sub-section on *note
15081     '-march' and '-mcpu' Feature Modifiers: aarch64-feature-modifiers.
15082     Where conflicting feature modifiers are specified, the right-most
15083     feature is used.
15084
15085     GCC uses NAME to determine what kind of instructions it can emit
15086     when generating assembly code (as if by '-march') and to determine
15087     the target processor for which to tune for performance (as if by
15088     '-mtune').  Where this option is used in conjunction with '-march'
15089     or '-mtune', those options take precedence over the appropriate
15090     part of this option.
15091
15092'-moverride=STRING'
15093     Override tuning decisions made by the back-end in response to a
15094     '-mtune=' switch.  The syntax, semantics, and accepted values for
15095     STRING in this option are not guaranteed to be consistent across
15096     releases.
15097
15098     This option is only intended to be useful when developing GCC.
15099
15100'-mverbose-cost-dump'
15101     Enable verbose cost model dumping in the debug dump files.  This
15102     option is provided for use in debugging the compiler.
15103
15104'-mpc-relative-literal-loads'
15105'-mno-pc-relative-literal-loads'
15106     Enable or disable PC-relative literal loads.  With this option
15107     literal pools are accessed using a single instruction and emitted
15108     after each function.  This limits the maximum size of functions to
15109     1MB. This is enabled by default for '-mcmodel=tiny'.
15110
15111'-msign-return-address=SCOPE'
15112     Select the function scope on which return address signing will be
15113     applied.  Permissible values are 'none', which disables return
15114     address signing, 'non-leaf', which enables pointer signing for
15115     functions which are not leaf functions, and 'all', which enables
15116     pointer signing for all functions.  The default value is 'none'.
15117     This option has been deprecated by -mbranch-protection.
15118
15119'-mbranch-protection=NONE|STANDARD|PAC-RET[+LEAF]|BTI'
15120     Select the branch protection features to use.  'none' is the
15121     default and turns off all types of branch protection.  'standard'
15122     turns on all types of branch protection features.  If a feature has
15123     additional tuning options, then 'standard' sets it to its standard
15124     level.  'pac-ret[+LEAF]' turns on return address signing to its
15125     standard level: signing functions that save the return address to
15126     memory (non-leaf functions will practically always do this) using
15127     the a-key.  The optional argument 'leaf' can be used to extend the
15128     signing to include leaf functions.  'bti' turns on branch target
15129     identification mechanism.
15130
15131'-mharden-sls=OPTS'
15132     Enable compiler hardening against straight line speculation (SLS).
15133     OPTS is a comma-separated list of the following options:
15134     'retbr'
15135     'blr'
15136     In addition, '-mharden-sls=all' enables all SLS hardening while
15137     '-mharden-sls=none' disables all SLS hardening.
15138
15139'-msve-vector-bits=BITS'
15140     Specify the number of bits in an SVE vector register.  This option
15141     only has an effect when SVE is enabled.
15142
15143     GCC supports two forms of SVE code generation: "vector-length
15144     agnostic" output that works with any size of vector register and
15145     "vector-length specific" output that allows GCC to make assumptions
15146     about the vector length when it is useful for optimization reasons.
15147     The possible values of 'bits' are: 'scalable', '128', '256', '512',
15148     '1024' and '2048'.  Specifying 'scalable' selects vector-length
15149     agnostic output.  At present '-msve-vector-bits=128' also generates
15150     vector-length agnostic output.  All other values generate
15151     vector-length specific code.  The behavior of these values may
15152     change in future releases and no value except 'scalable' should be
15153     relied on for producing code that is portable across different
15154     hardware SVE vector lengths.
15155
15156     The default is '-msve-vector-bits=scalable', which produces
15157     vector-length agnostic code.
15158
151593.18.1.1 '-march' and '-mcpu' Feature Modifiers
15160...............................................
15161
15162Feature modifiers used with '-march' and '-mcpu' can be any of the
15163following and their inverses 'noFEATURE':
15164
15165'crc'
15166     Enable CRC extension.  This is on by default for
15167     '-march=armv8.1-a'.
15168'crypto'
15169     Enable Crypto extension.  This also enables Advanced SIMD and
15170     floating-point instructions.
15171'fp'
15172     Enable floating-point instructions.  This is on by default for all
15173     possible values for options '-march' and '-mcpu'.
15174'simd'
15175     Enable Advanced SIMD instructions.  This also enables
15176     floating-point instructions.  This is on by default for all
15177     possible values for options '-march' and '-mcpu'.
15178'sve'
15179     Enable Scalable Vector Extension instructions.  This also enables
15180     Advanced SIMD and floating-point instructions.
15181'lse'
15182     Enable Large System Extension instructions.  This is on by default
15183     for '-march=armv8.1-a'.
15184'rdma'
15185     Enable Round Double Multiply Accumulate instructions.  This is on
15186     by default for '-march=armv8.1-a'.
15187'fp16'
15188     Enable FP16 extension.  This also enables floating-point
15189     instructions.
15190'fp16fml'
15191     Enable FP16 fmla extension.  This also enables FP16 extensions and
15192     floating-point instructions.  This option is enabled by default for
15193     '-march=armv8.4-a'.  Use of this option with architectures prior to
15194     Armv8.2-A is not supported.
15195
15196'rcpc'
15197     Enable the RcPc extension.  This does not change code generation
15198     from GCC, but is passed on to the assembler, enabling inline asm
15199     statements to use instructions from the RcPc extension.
15200'dotprod'
15201     Enable the Dot Product extension.  This also enables Advanced SIMD
15202     instructions.
15203'aes'
15204     Enable the Armv8-a aes and pmull crypto extension.  This also
15205     enables Advanced SIMD instructions.
15206'sha2'
15207     Enable the Armv8-a sha2 crypto extension.  This also enables
15208     Advanced SIMD instructions.
15209'sha3'
15210     Enable the sha512 and sha3 crypto extension.  This also enables
15211     Advanced SIMD instructions.  Use of this option with architectures
15212     prior to Armv8.2-A is not supported.
15213'sm4'
15214     Enable the sm3 and sm4 crypto extension.  This also enables
15215     Advanced SIMD instructions.  Use of this option with architectures
15216     prior to Armv8.2-A is not supported.
15217'profile'
15218     Enable the Statistical Profiling extension.  This option is only to
15219     enable the extension at the assembler level and does not affect
15220     code generation.
15221'rng'
15222     Enable the Armv8.5-a Random Number instructions.  This option is
15223     only to enable the extension at the assembler level and does not
15224     affect code generation.
15225'memtag'
15226     Enable the Armv8.5-a Memory Tagging Extensions.  This option is
15227     only to enable the extension at the assembler level and does not
15228     affect code generation.
15229'sb'
15230     Enable the Armv8-a Speculation Barrier instruction.  This option is
15231     only to enable the extension at the assembler level and does not
15232     affect code generation.  This option is enabled by default for
15233     '-march=armv8.5-a'.
15234'ssbs'
15235     Enable the Armv8-a Speculative Store Bypass Safe instruction.  This
15236     option is only to enable the extension at the assembler level and
15237     does not affect code generation.  This option is enabled by default
15238     for '-march=armv8.5-a'.
15239'predres'
15240     Enable the Armv8-a Execution and Data Prediction Restriction
15241     instructions.  This option is only to enable the extension at the
15242     assembler level and does not affect code generation.  This option
15243     is enabled by default for '-march=armv8.5-a'.
15244
15245 Feature 'crypto' implies 'aes', 'sha2', and 'simd', which implies 'fp'.
15246Conversely, 'nofp' implies 'nosimd', which implies 'nocrypto', 'noaes'
15247and 'nosha2'.
15248
15249
15250File: gcc.info,  Node: Adapteva Epiphany Options,  Next: AMD GCN Options,  Prev: AArch64 Options,  Up: Submodel Options
15251
152523.18.2 Adapteva Epiphany Options
15253--------------------------------
15254
15255These '-m' options are defined for Adapteva Epiphany:
15256
15257'-mhalf-reg-file'
15258     Don't allocate any register in the range 'r32'...'r63'.  That
15259     allows code to run on hardware variants that lack these registers.
15260
15261'-mprefer-short-insn-regs'
15262     Preferentially allocate registers that allow short instruction
15263     generation.  This can result in increased instruction count, so
15264     this may either reduce or increase overall code size.
15265
15266'-mbranch-cost=NUM'
15267     Set the cost of branches to roughly NUM "simple" instructions.
15268     This cost is only a heuristic and is not guaranteed to produce
15269     consistent results across releases.
15270
15271'-mcmove'
15272     Enable the generation of conditional moves.
15273
15274'-mnops=NUM'
15275     Emit NUM NOPs before every other generated instruction.
15276
15277'-mno-soft-cmpsf'
15278     For single-precision floating-point comparisons, emit an 'fsub'
15279     instruction and test the flags.  This is faster than a software
15280     comparison, but can get incorrect results in the presence of NaNs,
15281     or when two different small numbers are compared such that their
15282     difference is calculated as zero.  The default is '-msoft-cmpsf',
15283     which uses slower, but IEEE-compliant, software comparisons.
15284
15285'-mstack-offset=NUM'
15286     Set the offset between the top of the stack and the stack pointer.
15287     E.g., a value of 8 means that the eight bytes in the range
15288     'sp+0...sp+7' can be used by leaf functions without stack
15289     allocation.  Values other than '8' or '16' are untested and
15290     unlikely to work.  Note also that this option changes the ABI;
15291     compiling a program with a different stack offset than the
15292     libraries have been compiled with generally does not work.  This
15293     option can be useful if you want to evaluate if a different stack
15294     offset would give you better code, but to actually use a different
15295     stack offset to build working programs, it is recommended to
15296     configure the toolchain with the appropriate
15297     '--with-stack-offset=NUM' option.
15298
15299'-mno-round-nearest'
15300     Make the scheduler assume that the rounding mode has been set to
15301     truncating.  The default is '-mround-nearest'.
15302
15303'-mlong-calls'
15304     If not otherwise specified by an attribute, assume all calls might
15305     be beyond the offset range of the 'b' / 'bl' instructions, and
15306     therefore load the function address into a register before
15307     performing a (otherwise direct) call.  This is the default.
15308
15309'-mshort-calls'
15310     If not otherwise specified by an attribute, assume all direct calls
15311     are in the range of the 'b' / 'bl' instructions, so use these
15312     instructions for direct calls.  The default is '-mlong-calls'.
15313
15314'-msmall16'
15315     Assume addresses can be loaded as 16-bit unsigned values.  This
15316     does not apply to function addresses for which '-mlong-calls'
15317     semantics are in effect.
15318
15319'-mfp-mode=MODE'
15320     Set the prevailing mode of the floating-point unit.  This
15321     determines the floating-point mode that is provided and expected at
15322     function call and return time.  Making this mode match the mode you
15323     predominantly need at function start can make your programs smaller
15324     and faster by avoiding unnecessary mode switches.
15325
15326     MODE can be set to one the following values:
15327
15328     'caller'
15329          Any mode at function entry is valid, and retained or restored
15330          when the function returns, and when it calls other functions.
15331          This mode is useful for compiling libraries or other
15332          compilation units you might want to incorporate into different
15333          programs with different prevailing FPU modes, and the
15334          convenience of being able to use a single object file
15335          outweighs the size and speed overhead for any extra mode
15336          switching that might be needed, compared with what would be
15337          needed with a more specific choice of prevailing FPU mode.
15338
15339     'truncate'
15340          This is the mode used for floating-point calculations with
15341          truncating (i.e. round towards zero) rounding mode.  That
15342          includes conversion from floating point to integer.
15343
15344     'round-nearest'
15345          This is the mode used for floating-point calculations with
15346          round-to-nearest-or-even rounding mode.
15347
15348     'int'
15349          This is the mode used to perform integer calculations in the
15350          FPU, e.g. integer multiply, or integer
15351          multiply-and-accumulate.
15352
15353     The default is '-mfp-mode=caller'
15354
15355'-mno-split-lohi'
15356'-mno-postinc'
15357'-mno-postmodify'
15358     Code generation tweaks that disable, respectively, splitting of
15359     32-bit loads, generation of post-increment addresses, and
15360     generation of post-modify addresses.  The defaults are
15361     'msplit-lohi', '-mpost-inc', and '-mpost-modify'.
15362
15363'-mnovect-double'
15364     Change the preferred SIMD mode to SImode.  The default is
15365     '-mvect-double', which uses DImode as preferred SIMD mode.
15366
15367'-max-vect-align=NUM'
15368     The maximum alignment for SIMD vector mode types.  NUM may be 4 or
15369     8.  The default is 8.  Note that this is an ABI change, even though
15370     many library function interfaces are unaffected if they don't use
15371     SIMD vector modes in places that affect size and/or alignment of
15372     relevant types.
15373
15374'-msplit-vecmove-early'
15375     Split vector moves into single word moves before reload.  In theory
15376     this can give better register allocation, but so far the reverse
15377     seems to be generally the case.
15378
15379'-m1reg-REG'
15380     Specify a register to hold the constant -1, which makes loading
15381     small negative constants and certain bitmasks faster.  Allowable
15382     values for REG are 'r43' and 'r63', which specify use of that
15383     register as a fixed register, and 'none', which means that no
15384     register is used for this purpose.  The default is '-m1reg-none'.
15385
15386
15387File: gcc.info,  Node: AMD GCN Options,  Next: ARC Options,  Prev: Adapteva Epiphany Options,  Up: Submodel Options
15388
153893.18.3 AMD GCN Options
15390----------------------
15391
15392These options are defined specifically for the AMD GCN port.
15393
15394'-march=GPU'
15395'-mtune=GPU'
15396     Set architecture type or tuning for GPU.  Supported values for GPU
15397     are
15398
15399     'fiji'
15400          Compile for GCN3 Fiji devices (gfx803).
15401
15402     'gfx900'
15403          Compile for GCN5 Vega 10 devices (gfx900).
15404
15405'-mstack-size=BYTES'
15406     Specify how many BYTES of stack space will be requested for each
15407     GPU thread (wave-front).  Beware that there may be many threads and
15408     limited memory available.  The size of the stack allocation may
15409     also have an impact on run-time performance.  The default is 32KB
15410     when using OpenACC or OpenMP, and 1MB otherwise.
15411
15412
15413File: gcc.info,  Node: ARC Options,  Next: ARM Options,  Prev: AMD GCN Options,  Up: Submodel Options
15414
154153.18.4 ARC Options
15416------------------
15417
15418The following options control the architecture variant for which code is
15419being compiled:
15420
15421'-mbarrel-shifter'
15422     Generate instructions supported by barrel shifter.  This is the
15423     default unless '-mcpu=ARC601' or '-mcpu=ARCEM' is in effect.
15424
15425'-mjli-always'
15426     Force to call a function using jli_s instruction.  This option is
15427     valid only for ARCv2 architecture.
15428
15429'-mcpu=CPU'
15430     Set architecture type, register usage, and instruction scheduling
15431     parameters for CPU.  There are also shortcut alias options
15432     available for backward compatibility and convenience.  Supported
15433     values for CPU are
15434
15435     'arc600'
15436          Compile for ARC600.  Aliases: '-mA6', '-mARC600'.
15437
15438     'arc601'
15439          Compile for ARC601.  Alias: '-mARC601'.
15440
15441     'arc700'
15442          Compile for ARC700.  Aliases: '-mA7', '-mARC700'.  This is the
15443          default when configured with '--with-cpu=arc700'.
15444
15445     'arcem'
15446          Compile for ARC EM.
15447
15448     'archs'
15449          Compile for ARC HS.
15450
15451     'em'
15452          Compile for ARC EM CPU with no hardware extensions.
15453
15454     'em4'
15455          Compile for ARC EM4 CPU.
15456
15457     'em4_dmips'
15458          Compile for ARC EM4 DMIPS CPU.
15459
15460     'em4_fpus'
15461          Compile for ARC EM4 DMIPS CPU with the single-precision
15462          floating-point extension.
15463
15464     'em4_fpuda'
15465          Compile for ARC EM4 DMIPS CPU with single-precision
15466          floating-point and double assist instructions.
15467
15468     'hs'
15469          Compile for ARC HS CPU with no hardware extensions except the
15470          atomic instructions.
15471
15472     'hs34'
15473          Compile for ARC HS34 CPU.
15474
15475     'hs38'
15476          Compile for ARC HS38 CPU.
15477
15478     'hs38_linux'
15479          Compile for ARC HS38 CPU with all hardware extensions on.
15480
15481     'arc600_norm'
15482          Compile for ARC 600 CPU with 'norm' instructions enabled.
15483
15484     'arc600_mul32x16'
15485          Compile for ARC 600 CPU with 'norm' and 32x16-bit multiply
15486          instructions enabled.
15487
15488     'arc600_mul64'
15489          Compile for ARC 600 CPU with 'norm' and 'mul64'-family
15490          instructions enabled.
15491
15492     'arc601_norm'
15493          Compile for ARC 601 CPU with 'norm' instructions enabled.
15494
15495     'arc601_mul32x16'
15496          Compile for ARC 601 CPU with 'norm' and 32x16-bit multiply
15497          instructions enabled.
15498
15499     'arc601_mul64'
15500          Compile for ARC 601 CPU with 'norm' and 'mul64'-family
15501          instructions enabled.
15502
15503     'nps400'
15504          Compile for ARC 700 on NPS400 chip.
15505
15506     'em_mini'
15507          Compile for ARC EM minimalist configuration featuring reduced
15508          register set.
15509
15510'-mdpfp'
15511'-mdpfp-compact'
15512     Generate double-precision FPX instructions, tuned for the compact
15513     implementation.
15514
15515'-mdpfp-fast'
15516     Generate double-precision FPX instructions, tuned for the fast
15517     implementation.
15518
15519'-mno-dpfp-lrsr'
15520     Disable 'lr' and 'sr' instructions from using FPX extension aux
15521     registers.
15522
15523'-mea'
15524     Generate extended arithmetic instructions.  Currently only 'divaw',
15525     'adds', 'subs', and 'sat16' are supported.  This is always enabled
15526     for '-mcpu=ARC700'.
15527
15528'-mno-mpy'
15529     Do not generate 'mpy'-family instructions for ARC700.  This option
15530     is deprecated.
15531
15532'-mmul32x16'
15533     Generate 32x16-bit multiply and multiply-accumulate instructions.
15534
15535'-mmul64'
15536     Generate 'mul64' and 'mulu64' instructions.  Only valid for
15537     '-mcpu=ARC600'.
15538
15539'-mnorm'
15540     Generate 'norm' instructions.  This is the default if
15541     '-mcpu=ARC700' is in effect.
15542
15543'-mspfp'
15544'-mspfp-compact'
15545     Generate single-precision FPX instructions, tuned for the compact
15546     implementation.
15547
15548'-mspfp-fast'
15549     Generate single-precision FPX instructions, tuned for the fast
15550     implementation.
15551
15552'-msimd'
15553     Enable generation of ARC SIMD instructions via target-specific
15554     builtins.  Only valid for '-mcpu=ARC700'.
15555
15556'-msoft-float'
15557     This option ignored; it is provided for compatibility purposes
15558     only.  Software floating-point code is emitted by default, and this
15559     default can overridden by FPX options; '-mspfp', '-mspfp-compact',
15560     or '-mspfp-fast' for single precision, and '-mdpfp',
15561     '-mdpfp-compact', or '-mdpfp-fast' for double precision.
15562
15563'-mswap'
15564     Generate 'swap' instructions.
15565
15566'-matomic'
15567     This enables use of the locked load/store conditional extension to
15568     implement atomic memory built-in functions.  Not available for ARC
15569     6xx or ARC EM cores.
15570
15571'-mdiv-rem'
15572     Enable 'div' and 'rem' instructions for ARCv2 cores.
15573
15574'-mcode-density'
15575     Enable code density instructions for ARC EM. This option is on by
15576     default for ARC HS.
15577
15578'-mll64'
15579     Enable double load/store operations for ARC HS cores.
15580
15581'-mtp-regno=REGNO'
15582     Specify thread pointer register number.
15583
15584'-mmpy-option=MULTO'
15585     Compile ARCv2 code with a multiplier design option.  You can
15586     specify the option using either a string or numeric value for
15587     MULTO.  'wlh1' is the default value.  The recognized values are:
15588
15589     '0'
15590     'none'
15591          No multiplier available.
15592
15593     '1'
15594     'w'
15595          16x16 multiplier, fully pipelined.  The following instructions
15596          are enabled: 'mpyw' and 'mpyuw'.
15597
15598     '2'
15599     'wlh1'
15600          32x32 multiplier, fully pipelined (1 stage).  The following
15601          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
15602          'mpymu', and 'mpy_s'.
15603
15604     '3'
15605     'wlh2'
15606          32x32 multiplier, fully pipelined (2 stages).  The following
15607          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
15608          'mpymu', and 'mpy_s'.
15609
15610     '4'
15611     'wlh3'
15612          Two 16x16 multipliers, blocking, sequential.  The following
15613          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
15614          'mpymu', and 'mpy_s'.
15615
15616     '5'
15617     'wlh4'
15618          One 16x16 multiplier, blocking, sequential.  The following
15619          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
15620          'mpymu', and 'mpy_s'.
15621
15622     '6'
15623     'wlh5'
15624          One 32x4 multiplier, blocking, sequential.  The following
15625          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
15626          'mpymu', and 'mpy_s'.
15627
15628     '7'
15629     'plus_dmpy'
15630          ARC HS SIMD support.
15631
15632     '8'
15633     'plus_macd'
15634          ARC HS SIMD support.
15635
15636     '9'
15637     'plus_qmacw'
15638          ARC HS SIMD support.
15639
15640     This option is only available for ARCv2 cores.
15641
15642'-mfpu=FPU'
15643     Enables support for specific floating-point hardware extensions for
15644     ARCv2 cores.  Supported values for FPU are:
15645
15646     'fpus'
15647          Enables support for single-precision floating-point hardware
15648          extensions.
15649
15650     'fpud'
15651          Enables support for double-precision floating-point hardware
15652          extensions.  The single-precision floating-point extension is
15653          also enabled.  Not available for ARC EM.
15654
15655     'fpuda'
15656          Enables support for double-precision floating-point hardware
15657          extensions using double-precision assist instructions.  The
15658          single-precision floating-point extension is also enabled.
15659          This option is only available for ARC EM.
15660
15661     'fpuda_div'
15662          Enables support for double-precision floating-point hardware
15663          extensions using double-precision assist instructions.  The
15664          single-precision floating-point, square-root, and divide
15665          extensions are also enabled.  This option is only available
15666          for ARC EM.
15667
15668     'fpuda_fma'
15669          Enables support for double-precision floating-point hardware
15670          extensions using double-precision assist instructions.  The
15671          single-precision floating-point and fused multiply and add
15672          hardware extensions are also enabled.  This option is only
15673          available for ARC EM.
15674
15675     'fpuda_all'
15676          Enables support for double-precision floating-point hardware
15677          extensions using double-precision assist instructions.  All
15678          single-precision floating-point hardware extensions are also
15679          enabled.  This option is only available for ARC EM.
15680
15681     'fpus_div'
15682          Enables support for single-precision floating-point,
15683          square-root and divide hardware extensions.
15684
15685     'fpud_div'
15686          Enables support for double-precision floating-point,
15687          square-root and divide hardware extensions.  This option
15688          includes option 'fpus_div'.  Not available for ARC EM.
15689
15690     'fpus_fma'
15691          Enables support for single-precision floating-point and fused
15692          multiply and add hardware extensions.
15693
15694     'fpud_fma'
15695          Enables support for double-precision floating-point and fused
15696          multiply and add hardware extensions.  This option includes
15697          option 'fpus_fma'.  Not available for ARC EM.
15698
15699     'fpus_all'
15700          Enables support for all single-precision floating-point
15701          hardware extensions.
15702
15703     'fpud_all'
15704          Enables support for all single- and double-precision
15705          floating-point hardware extensions.  Not available for ARC EM.
15706
15707'-mirq-ctrl-saved=REGISTER-RANGE, BLINK, LP_COUNT'
15708     Specifies general-purposes registers that the processor
15709     automatically saves/restores on interrupt entry and exit.
15710     REGISTER-RANGE is specified as two registers separated by a dash.
15711     The register range always starts with 'r0', the upper limit is 'fp'
15712     register.  BLINK and LP_COUNT are optional.  This option is only
15713     valid for ARC EM and ARC HS cores.
15714
15715'-mrgf-banked-regs=NUMBER'
15716     Specifies the number of registers replicated in second register
15717     bank on entry to fast interrupt.  Fast interrupts are interrupts
15718     with the highest priority level P0.  These interrupts save only PC
15719     and STATUS32 registers to avoid memory transactions during
15720     interrupt entry and exit sequences.  Use this option when you are
15721     using fast interrupts in an ARC V2 family processor.  Permitted
15722     values are 4, 8, 16, and 32.
15723
15724'-mlpc-width=WIDTH'
15725     Specify the width of the 'lp_count' register.  Valid values for
15726     WIDTH are 8, 16, 20, 24, 28 and 32 bits.  The default width is
15727     fixed to 32 bits.  If the width is less than 32, the compiler does
15728     not attempt to transform loops in your program to use the
15729     zero-delay loop mechanism unless it is known that the 'lp_count'
15730     register can hold the required loop-counter value.  Depending on
15731     the width specified, the compiler and run-time library might
15732     continue to use the loop mechanism for various needs.  This option
15733     defines macro '__ARC_LPC_WIDTH__' with the value of WIDTH.
15734
15735'-mrf16'
15736     This option instructs the compiler to generate code for a 16-entry
15737     register file.  This option defines the '__ARC_RF16__' preprocessor
15738     macro.
15739
15740'-mbranch-index'
15741     Enable use of 'bi' or 'bih' instructions to implement jump tables.
15742
15743 The following options are passed through to the assembler, and also
15744define preprocessor macro symbols.
15745
15746'-mdsp-packa'
15747     Passed down to the assembler to enable the DSP Pack A extensions.
15748     Also sets the preprocessor symbol '__Xdsp_packa'.  This option is
15749     deprecated.
15750
15751'-mdvbf'
15752     Passed down to the assembler to enable the dual Viterbi butterfly
15753     extension.  Also sets the preprocessor symbol '__Xdvbf'.  This
15754     option is deprecated.
15755
15756'-mlock'
15757     Passed down to the assembler to enable the locked load/store
15758     conditional extension.  Also sets the preprocessor symbol
15759     '__Xlock'.
15760
15761'-mmac-d16'
15762     Passed down to the assembler.  Also sets the preprocessor symbol
15763     '__Xxmac_d16'.  This option is deprecated.
15764
15765'-mmac-24'
15766     Passed down to the assembler.  Also sets the preprocessor symbol
15767     '__Xxmac_24'.  This option is deprecated.
15768
15769'-mrtsc'
15770     Passed down to the assembler to enable the 64-bit time-stamp
15771     counter extension instruction.  Also sets the preprocessor symbol
15772     '__Xrtsc'.  This option is deprecated.
15773
15774'-mswape'
15775     Passed down to the assembler to enable the swap byte ordering
15776     extension instruction.  Also sets the preprocessor symbol
15777     '__Xswape'.
15778
15779'-mtelephony'
15780     Passed down to the assembler to enable dual- and single-operand
15781     instructions for telephony.  Also sets the preprocessor symbol
15782     '__Xtelephony'.  This option is deprecated.
15783
15784'-mxy'
15785     Passed down to the assembler to enable the XY memory extension.
15786     Also sets the preprocessor symbol '__Xxy'.
15787
15788 The following options control how the assembly code is annotated:
15789
15790'-misize'
15791     Annotate assembler instructions with estimated addresses.
15792
15793'-mannotate-align'
15794     Explain what alignment considerations lead to the decision to make
15795     an instruction short or long.
15796
15797 The following options are passed through to the linker:
15798
15799'-marclinux'
15800     Passed through to the linker, to specify use of the 'arclinux'
15801     emulation.  This option is enabled by default in tool chains built
15802     for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when
15803     profiling is not requested.
15804
15805'-marclinux_prof'
15806     Passed through to the linker, to specify use of the 'arclinux_prof'
15807     emulation.  This option is enabled by default in tool chains built
15808     for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when
15809     profiling is requested.
15810
15811 The following options control the semantics of generated code:
15812
15813'-mlong-calls'
15814     Generate calls as register indirect calls, thus providing access to
15815     the full 32-bit address range.
15816
15817'-mmedium-calls'
15818     Don't use less than 25-bit addressing range for calls, which is the
15819     offset available for an unconditional branch-and-link instruction.
15820     Conditional execution of function calls is suppressed, to allow use
15821     of the 25-bit range, rather than the 21-bit range with conditional
15822     branch-and-link.  This is the default for tool chains built for
15823     'arc-linux-uclibc' and 'arceb-linux-uclibc' targets.
15824
15825'-G NUM'
15826     Put definitions of externally-visible data in a small data section
15827     if that data is no bigger than NUM bytes.  The default value of NUM
15828     is 4 for any ARC configuration, or 8 when we have double load/store
15829     operations.
15830
15831'-mno-sdata'
15832     Do not generate sdata references.  This is the default for tool
15833     chains built for 'arc-linux-uclibc' and 'arceb-linux-uclibc'
15834     targets.
15835
15836'-mvolatile-cache'
15837     Use ordinarily cached memory accesses for volatile references.
15838     This is the default.
15839
15840'-mno-volatile-cache'
15841     Enable cache bypass for volatile references.
15842
15843 The following options fine tune code generation:
15844'-malign-call'
15845     Do alignment optimizations for call instructions.
15846
15847'-mauto-modify-reg'
15848     Enable the use of pre/post modify with register displacement.
15849
15850'-mbbit-peephole'
15851     Enable bbit peephole2.
15852
15853'-mno-brcc'
15854     This option disables a target-specific pass in 'arc_reorg' to
15855     generate compare-and-branch ('brCC') instructions.  It has no
15856     effect on generation of these instructions driven by the combiner
15857     pass.
15858
15859'-mcase-vector-pcrel'
15860     Use PC-relative switch case tables to enable case table shortening.
15861     This is the default for '-Os'.
15862
15863'-mcompact-casesi'
15864     Enable compact 'casesi' pattern.  This is the default for '-Os',
15865     and only available for ARCv1 cores.  This option is deprecated.
15866
15867'-mno-cond-exec'
15868     Disable the ARCompact-specific pass to generate conditional
15869     execution instructions.
15870
15871     Due to delay slot scheduling and interactions between operand
15872     numbers, literal sizes, instruction lengths, and the support for
15873     conditional execution, the target-independent pass to generate
15874     conditional execution is often lacking, so the ARC port has kept a
15875     special pass around that tries to find more conditional execution
15876     generation opportunities after register allocation, branch
15877     shortening, and delay slot scheduling have been done.  This pass
15878     generally, but not always, improves performance and code size, at
15879     the cost of extra compilation time, which is why there is an option
15880     to switch it off.  If you have a problem with call instructions
15881     exceeding their allowable offset range because they are
15882     conditionalized, you should consider using '-mmedium-calls'
15883     instead.
15884
15885'-mearly-cbranchsi'
15886     Enable pre-reload use of the 'cbranchsi' pattern.
15887
15888'-mexpand-adddi'
15889     Expand 'adddi3' and 'subdi3' at RTL generation time into 'add.f',
15890     'adc' etc.  This option is deprecated.
15891
15892'-mindexed-loads'
15893     Enable the use of indexed loads.  This can be problematic because
15894     some optimizers then assume that indexed stores exist, which is not
15895     the case.
15896
15897'-mlra'
15898     Enable Local Register Allocation.  This is still experimental for
15899     ARC, so by default the compiler uses standard reload (i.e.
15900     '-mno-lra').
15901
15902'-mlra-priority-none'
15903     Don't indicate any priority for target registers.
15904
15905'-mlra-priority-compact'
15906     Indicate target register priority for r0..r3 / r12..r15.
15907
15908'-mlra-priority-noncompact'
15909     Reduce target register priority for r0..r3 / r12..r15.
15910
15911'-mmillicode'
15912     When optimizing for size (using '-Os'), prologues and epilogues
15913     that have to save or restore a large number of registers are often
15914     shortened by using call to a special function in libgcc; this is
15915     referred to as a _millicode_ call.  As these calls can pose
15916     performance issues, and/or cause linking issues when linking in a
15917     nonstandard way, this option is provided to turn on or off
15918     millicode call generation.
15919
15920'-mcode-density-frame'
15921     This option enable the compiler to emit 'enter' and 'leave'
15922     instructions.  These instructions are only valid for CPUs with
15923     code-density feature.
15924
15925'-mmixed-code'
15926     Tweak register allocation to help 16-bit instruction generation.
15927     This generally has the effect of decreasing the average instruction
15928     size while increasing the instruction count.
15929
15930'-mq-class'
15931     Enable 'q' instruction alternatives.  This is the default for
15932     '-Os'.
15933
15934'-mRcq'
15935     Enable 'Rcq' constraint handling.  Most short code generation
15936     depends on this.  This is the default.
15937
15938'-mRcw'
15939     Enable 'Rcw' constraint handling.  Most ccfsm condexec mostly
15940     depends on this.  This is the default.
15941
15942'-msize-level=LEVEL'
15943     Fine-tune size optimization with regards to instruction lengths and
15944     alignment.  The recognized values for LEVEL are:
15945     '0'
15946          No size optimization.  This level is deprecated and treated
15947          like '1'.
15948
15949     '1'
15950          Short instructions are used opportunistically.
15951
15952     '2'
15953          In addition, alignment of loops and of code after barriers are
15954          dropped.
15955
15956     '3'
15957          In addition, optional data alignment is dropped, and the
15958          option 'Os' is enabled.
15959
15960     This defaults to '3' when '-Os' is in effect.  Otherwise, the
15961     behavior when this is not set is equivalent to level '1'.
15962
15963'-mtune=CPU'
15964     Set instruction scheduling parameters for CPU, overriding any
15965     implied by '-mcpu='.
15966
15967     Supported values for CPU are
15968
15969     'ARC600'
15970          Tune for ARC600 CPU.
15971
15972     'ARC601'
15973          Tune for ARC601 CPU.
15974
15975     'ARC700'
15976          Tune for ARC700 CPU with standard multiplier block.
15977
15978     'ARC700-xmac'
15979          Tune for ARC700 CPU with XMAC block.
15980
15981     'ARC725D'
15982          Tune for ARC725D CPU.
15983
15984     'ARC750D'
15985          Tune for ARC750D CPU.
15986
15987'-mmultcost=NUM'
15988     Cost to assume for a multiply instruction, with '4' being equal to
15989     a normal instruction.
15990
15991'-munalign-prob-threshold=PROBABILITY'
15992     Set probability threshold for unaligning branches.  When tuning for
15993     'ARC700' and optimizing for speed, branches without filled delay
15994     slot are preferably emitted unaligned and long, unless profiling
15995     indicates that the probability for the branch to be taken is below
15996     PROBABILITY.  *Note Cross-profiling::.  The default is
15997     (REG_BR_PROB_BASE/2), i.e. 5000.
15998
15999 The following options are maintained for backward compatibility, but
16000are now deprecated and will be removed in a future release:
16001
16002'-margonaut'
16003     Obsolete FPX.
16004
16005'-mbig-endian'
16006'-EB'
16007     Compile code for big-endian targets.  Use of these options is now
16008     deprecated.  Big-endian code is supported by configuring GCC to
16009     build 'arceb-elf32' and 'arceb-linux-uclibc' targets, for which big
16010     endian is the default.
16011
16012'-mlittle-endian'
16013'-EL'
16014     Compile code for little-endian targets.  Use of these options is
16015     now deprecated.  Little-endian code is supported by configuring GCC
16016     to build 'arc-elf32' and 'arc-linux-uclibc' targets, for which
16017     little endian is the default.
16018
16019'-mbarrel_shifter'
16020     Replaced by '-mbarrel-shifter'.
16021
16022'-mdpfp_compact'
16023     Replaced by '-mdpfp-compact'.
16024
16025'-mdpfp_fast'
16026     Replaced by '-mdpfp-fast'.
16027
16028'-mdsp_packa'
16029     Replaced by '-mdsp-packa'.
16030
16031'-mEA'
16032     Replaced by '-mea'.
16033
16034'-mmac_24'
16035     Replaced by '-mmac-24'.
16036
16037'-mmac_d16'
16038     Replaced by '-mmac-d16'.
16039
16040'-mspfp_compact'
16041     Replaced by '-mspfp-compact'.
16042
16043'-mspfp_fast'
16044     Replaced by '-mspfp-fast'.
16045
16046'-mtune=CPU'
16047     Values 'arc600', 'arc601', 'arc700' and 'arc700-xmac' for CPU are
16048     replaced by 'ARC600', 'ARC601', 'ARC700' and 'ARC700-xmac'
16049     respectively.
16050
16051'-multcost=NUM'
16052     Replaced by '-mmultcost'.
16053
16054
16055File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
16056
160573.18.5 ARM Options
16058------------------
16059
16060These '-m' options are defined for the ARM port:
16061
16062'-mabi=NAME'
16063     Generate code for the specified ABI.  Permissible values are:
16064     'apcs-gnu', 'atpcs', 'aapcs', 'aapcs-linux' and 'iwmmxt'.
16065
16066'-mapcs-frame'
16067     Generate a stack frame that is compliant with the ARM Procedure
16068     Call Standard for all functions, even if this is not strictly
16069     necessary for correct execution of the code.  Specifying
16070     '-fomit-frame-pointer' with this option causes the stack frames not
16071     to be generated for leaf functions.  The default is
16072     '-mno-apcs-frame'.  This option is deprecated.
16073
16074'-mapcs'
16075     This is a synonym for '-mapcs-frame' and is deprecated.
16076
16077'-mthumb-interwork'
16078     Generate code that supports calling between the ARM and Thumb
16079     instruction sets.  Without this option, on pre-v5 architectures,
16080     the two instruction sets cannot be reliably used inside one
16081     program.  The default is '-mno-thumb-interwork', since slightly
16082     larger code is generated when '-mthumb-interwork' is specified.  In
16083     AAPCS configurations this option is meaningless.
16084
16085'-mno-sched-prolog'
16086     Prevent the reordering of instructions in the function prologue, or
16087     the merging of those instruction with the instructions in the
16088     function's body.  This means that all functions start with a
16089     recognizable set of instructions (or in fact one of a choice from a
16090     small set of different function prologues), and this information
16091     can be used to locate the start of functions inside an executable
16092     piece of code.  The default is '-msched-prolog'.
16093
16094'-mfloat-abi=NAME'
16095     Specifies which floating-point ABI to use.  Permissible values are:
16096     'soft', 'softfp' and 'hard'.
16097
16098     Specifying 'soft' causes GCC to generate output containing library
16099     calls for floating-point operations.  'softfp' allows the
16100     generation of code using hardware floating-point instructions, but
16101     still uses the soft-float calling conventions.  'hard' allows
16102     generation of floating-point instructions and uses FPU-specific
16103     calling conventions.
16104
16105     The default depends on the specific target configuration.  Note
16106     that the hard-float and soft-float ABIs are not link-compatible;
16107     you must compile your entire program with the same ABI, and link
16108     with a compatible set of libraries.
16109
16110'-mgeneral-regs-only'
16111     Generate code which uses only the general-purpose registers.  This
16112     will prevent the compiler from using floating-point and Advanced
16113     SIMD registers but will not impose any restrictions on the
16114     assembler.
16115
16116'-mlittle-endian'
16117     Generate code for a processor running in little-endian mode.  This
16118     is the default for all standard configurations.
16119
16120'-mbig-endian'
16121     Generate code for a processor running in big-endian mode; the
16122     default is to compile code for a little-endian processor.
16123
16124'-mbe8'
16125'-mbe32'
16126     When linking a big-endian image select between BE8 and BE32
16127     formats.  The option has no effect for little-endian images and is
16128     ignored.  The default is dependent on the selected target
16129     architecture.  For ARMv6 and later architectures the default is
16130     BE8, for older architectures the default is BE32.  BE32 format has
16131     been deprecated by ARM.
16132
16133'-march=NAME[+extension...]'
16134     This specifies the name of the target ARM architecture.  GCC uses
16135     this name to determine what kind of instructions it can emit when
16136     generating assembly code.  This option can be used in conjunction
16137     with or instead of the '-mcpu=' option.
16138
16139     Permissible names are: 'armv4t', 'armv5t', 'armv5te', 'armv6',
16140     'armv6j', 'armv6k', 'armv6kz', 'armv6t2', 'armv6z', 'armv6zk',
16141     'armv7', 'armv7-a', 'armv7ve', 'armv8-a', 'armv8.1-a', 'armv8.2-a',
16142     'armv8.3-a', 'armv8.4-a', 'armv8.5-a', 'armv7-r', 'armv8-r',
16143     'armv6-m', 'armv6s-m', 'armv7-m', 'armv7e-m', 'armv8-m.base',
16144     'armv8-m.main', 'iwmmxt' and 'iwmmxt2'.
16145
16146     Additionally, the following architectures, which lack support for
16147     the Thumb execution state, are recognized but support is
16148     deprecated: 'armv4'.
16149
16150     Many of the architectures support extensions.  These can be added
16151     by appending '+EXTENSION' to the architecture name.  Extension
16152     options are processed in order and capabilities accumulate.  An
16153     extension will also enable any necessary base extensions upon which
16154     it depends.  For example, the '+crypto' extension will always
16155     enable the '+simd' extension.  The exception to the additive
16156     construction is for extensions that are prefixed with '+no...':
16157     these extensions disable the specified option and any other
16158     extensions that may depend on the presence of that extension.
16159
16160     For example, '-march=armv7-a+simd+nofp+vfpv4' is equivalent to
16161     writing '-march=armv7-a+vfpv4' since the '+simd' option is entirely
16162     disabled by the '+nofp' option that follows it.
16163
16164     Most extension names are generically named, but have an effect that
16165     is dependent upon the architecture to which it is applied.  For
16166     example, the '+simd' option can be applied to both 'armv7-a' and
16167     'armv8-a' architectures, but will enable the original ARMv7-A
16168     Advanced SIMD (Neon) extensions for 'armv7-a' and the ARMv8-A
16169     variant for 'armv8-a'.
16170
16171     The table below lists the supported extensions for each
16172     architecture.  Architectures not mentioned do not support any
16173     extensions.
16174
16175     'armv5te'
16176     'armv6'
16177     'armv6j'
16178     'armv6k'
16179     'armv6kz'
16180     'armv6t2'
16181     'armv6z'
16182     'armv6zk'
16183          '+fp'
16184               The VFPv2 floating-point instructions.  The extension
16185               '+vfpv2' can be used as an alias for this extension.
16186
16187          '+nofp'
16188               Disable the floating-point instructions.
16189
16190     'armv7'
16191          The common subset of the ARMv7-A, ARMv7-R and ARMv7-M
16192          architectures.
16193          '+fp'
16194               The VFPv3 floating-point instructions, with 16
16195               double-precision registers.  The extension '+vfpv3-d16'
16196               can be used as an alias for this extension.  Note that
16197               floating-point is not supported by the base ARMv7-M
16198               architecture, but is compatible with both the ARMv7-A and
16199               ARMv7-R architectures.
16200
16201          '+nofp'
16202               Disable the floating-point instructions.
16203
16204     'armv7-a'
16205          '+mp'
16206               The multiprocessing extension.
16207
16208          '+sec'
16209               The security extension.
16210
16211          '+fp'
16212               The VFPv3 floating-point instructions, with 16
16213               double-precision registers.  The extension '+vfpv3-d16'
16214               can be used as an alias for this extension.
16215
16216          '+simd'
16217               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
16218               instructions.  The extensions '+neon' and '+neon-vfpv3'
16219               can be used as aliases for this extension.
16220
16221          '+vfpv3'
16222               The VFPv3 floating-point instructions, with 32
16223               double-precision registers.
16224
16225          '+vfpv3-d16-fp16'
16226               The VFPv3 floating-point instructions, with 16
16227               double-precision registers and the half-precision
16228               floating-point conversion operations.
16229
16230          '+vfpv3-fp16'
16231               The VFPv3 floating-point instructions, with 32
16232               double-precision registers and the half-precision
16233               floating-point conversion operations.
16234
16235          '+vfpv4-d16'
16236               The VFPv4 floating-point instructions, with 16
16237               double-precision registers.
16238
16239          '+vfpv4'
16240               The VFPv4 floating-point instructions, with 32
16241               double-precision registers.
16242
16243          '+neon-fp16'
16244               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
16245               instructions, with the half-precision floating-point
16246               conversion operations.
16247
16248          '+neon-vfpv4'
16249               The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
16250               instructions.
16251
16252          '+nosimd'
16253               Disable the Advanced SIMD instructions (does not disable
16254               floating point).
16255
16256          '+nofp'
16257               Disable the floating-point and Advanced SIMD
16258               instructions.
16259
16260     'armv7ve'
16261          The extended version of the ARMv7-A architecture with support
16262          for virtualization.
16263          '+fp'
16264               The VFPv4 floating-point instructions, with 16
16265               double-precision registers.  The extension '+vfpv4-d16'
16266               can be used as an alias for this extension.
16267
16268          '+simd'
16269               The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
16270               instructions.  The extension '+neon-vfpv4' can be used as
16271               an alias for this extension.
16272
16273          '+vfpv3-d16'
16274               The VFPv3 floating-point instructions, with 16
16275               double-precision registers.
16276
16277          '+vfpv3'
16278               The VFPv3 floating-point instructions, with 32
16279               double-precision registers.
16280
16281          '+vfpv3-d16-fp16'
16282               The VFPv3 floating-point instructions, with 16
16283               double-precision registers and the half-precision
16284               floating-point conversion operations.
16285
16286          '+vfpv3-fp16'
16287               The VFPv3 floating-point instructions, with 32
16288               double-precision registers and the half-precision
16289               floating-point conversion operations.
16290
16291          '+vfpv4-d16'
16292               The VFPv4 floating-point instructions, with 16
16293               double-precision registers.
16294
16295          '+vfpv4'
16296               The VFPv4 floating-point instructions, with 32
16297               double-precision registers.
16298
16299          '+neon'
16300               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
16301               instructions.  The extension '+neon-vfpv3' can be used as
16302               an alias for this extension.
16303
16304          '+neon-fp16'
16305               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
16306               instructions, with the half-precision floating-point
16307               conversion operations.
16308
16309          '+nosimd'
16310               Disable the Advanced SIMD instructions (does not disable
16311               floating point).
16312
16313          '+nofp'
16314               Disable the floating-point and Advanced SIMD
16315               instructions.
16316
16317     'armv8-a'
16318          '+crc'
16319               The Cyclic Redundancy Check (CRC) instructions.
16320          '+simd'
16321               The ARMv8-A Advanced SIMD and floating-point
16322               instructions.
16323          '+crypto'
16324               The cryptographic instructions.
16325          '+nocrypto'
16326               Disable the cryptographic instructions.
16327          '+nofp'
16328               Disable the floating-point, Advanced SIMD and
16329               cryptographic instructions.
16330          '+sb'
16331               Speculation Barrier Instruction.
16332          '+predres'
16333               Execution and Data Prediction Restriction Instructions.
16334
16335     'armv8.1-a'
16336          '+simd'
16337               The ARMv8.1-A Advanced SIMD and floating-point
16338               instructions.
16339
16340          '+crypto'
16341               The cryptographic instructions.  This also enables the
16342               Advanced SIMD and floating-point instructions.
16343
16344          '+nocrypto'
16345               Disable the cryptographic instructions.
16346
16347          '+nofp'
16348               Disable the floating-point, Advanced SIMD and
16349               cryptographic instructions.
16350
16351          '+sb'
16352               Speculation Barrier Instruction.
16353
16354          '+predres'
16355               Execution and Data Prediction Restriction Instructions.
16356
16357     'armv8.2-a'
16358     'armv8.3-a'
16359          '+fp16'
16360               The half-precision floating-point data processing
16361               instructions.  This also enables the Advanced SIMD and
16362               floating-point instructions.
16363
16364          '+fp16fml'
16365               The half-precision floating-point fmla extension.  This
16366               also enables the half-precision floating-point extension
16367               and Advanced SIMD and floating-point instructions.
16368
16369          '+simd'
16370               The ARMv8.1-A Advanced SIMD and floating-point
16371               instructions.
16372
16373          '+crypto'
16374               The cryptographic instructions.  This also enables the
16375               Advanced SIMD and floating-point instructions.
16376
16377          '+dotprod'
16378               Enable the Dot Product extension.  This also enables
16379               Advanced SIMD instructions.
16380
16381          '+nocrypto'
16382               Disable the cryptographic extension.
16383
16384          '+nofp'
16385               Disable the floating-point, Advanced SIMD and
16386               cryptographic instructions.
16387
16388          '+sb'
16389               Speculation Barrier Instruction.
16390
16391          '+predres'
16392               Execution and Data Prediction Restriction Instructions.
16393
16394     'armv8.4-a'
16395          '+fp16'
16396               The half-precision floating-point data processing
16397               instructions.  This also enables the Advanced SIMD and
16398               floating-point instructions as well as the Dot Product
16399               extension and the half-precision floating-point fmla
16400               extension.
16401
16402          '+simd'
16403               The ARMv8.3-A Advanced SIMD and floating-point
16404               instructions as well as the Dot Product extension.
16405
16406          '+crypto'
16407               The cryptographic instructions.  This also enables the
16408               Advanced SIMD and floating-point instructions as well as
16409               the Dot Product extension.
16410
16411          '+nocrypto'
16412               Disable the cryptographic extension.
16413
16414          '+nofp'
16415               Disable the floating-point, Advanced SIMD and
16416               cryptographic instructions.
16417
16418          '+sb'
16419               Speculation Barrier Instruction.
16420
16421          '+predres'
16422               Execution and Data Prediction Restriction Instructions.
16423
16424     'armv8.5-a'
16425          '+fp16'
16426               The half-precision floating-point data processing
16427               instructions.  This also enables the Advanced SIMD and
16428               floating-point instructions as well as the Dot Product
16429               extension and the half-precision floating-point fmla
16430               extension.
16431
16432          '+simd'
16433               The ARMv8.3-A Advanced SIMD and floating-point
16434               instructions as well as the Dot Product extension.
16435
16436          '+crypto'
16437               The cryptographic instructions.  This also enables the
16438               Advanced SIMD and floating-point instructions as well as
16439               the Dot Product extension.
16440
16441          '+nocrypto'
16442               Disable the cryptographic extension.
16443
16444          '+nofp'
16445               Disable the floating-point, Advanced SIMD and
16446               cryptographic instructions.
16447
16448     'armv7-r'
16449          '+fp.sp'
16450               The single-precision VFPv3 floating-point instructions.
16451               The extension '+vfpv3xd' can be used as an alias for this
16452               extension.
16453
16454          '+fp'
16455               The VFPv3 floating-point instructions with 16
16456               double-precision registers.  The extension +vfpv3-d16 can
16457               be used as an alias for this extension.
16458
16459          '+vfpv3xd-d16-fp16'
16460               The single-precision VFPv3 floating-point instructions
16461               with 16 double-precision registers and the half-precision
16462               floating-point conversion operations.
16463
16464          '+vfpv3-d16-fp16'
16465               The VFPv3 floating-point instructions with 16
16466               double-precision registers and the half-precision
16467               floating-point conversion operations.
16468
16469          '+nofp'
16470               Disable the floating-point extension.
16471
16472          '+idiv'
16473               The ARM-state integer division instructions.
16474
16475          '+noidiv'
16476               Disable the ARM-state integer division extension.
16477
16478     'armv7e-m'
16479          '+fp'
16480               The single-precision VFPv4 floating-point instructions.
16481
16482          '+fpv5'
16483               The single-precision FPv5 floating-point instructions.
16484
16485          '+fp.dp'
16486               The single- and double-precision FPv5 floating-point
16487               instructions.
16488
16489          '+nofp'
16490               Disable the floating-point extensions.
16491
16492     'armv8-m.main'
16493          '+dsp'
16494               The DSP instructions.
16495
16496          '+nodsp'
16497               Disable the DSP extension.
16498
16499          '+fp'
16500               The single-precision floating-point instructions.
16501
16502          '+fp.dp'
16503               The single- and double-precision floating-point
16504               instructions.
16505
16506          '+nofp'
16507               Disable the floating-point extension.
16508
16509     'armv8-r'
16510          '+crc'
16511               The Cyclic Redundancy Check (CRC) instructions.
16512          '+fp.sp'
16513               The single-precision FPv5 floating-point instructions.
16514          '+simd'
16515               The ARMv8-A Advanced SIMD and floating-point
16516               instructions.
16517          '+crypto'
16518               The cryptographic instructions.
16519          '+nocrypto'
16520               Disable the cryptographic instructions.
16521          '+nofp'
16522               Disable the floating-point, Advanced SIMD and
16523               cryptographic instructions.
16524
16525     '-march=native' causes the compiler to auto-detect the architecture
16526     of the build computer.  At present, this feature is only supported
16527     on GNU/Linux, and not all architectures are recognized.  If the
16528     auto-detect is unsuccessful the option has no effect.
16529
16530'-mtune=NAME'
16531     This option specifies the name of the target ARM processor for
16532     which GCC should tune the performance of the code.  For some ARM
16533     implementations better performance can be obtained by using this
16534     option.  Permissible names are: 'arm7tdmi', 'arm7tdmi-s',
16535     'arm710t', 'arm720t', 'arm740t', 'strongarm', 'strongarm110',
16536     'strongarm1100', 0'strongarm1110', 'arm8', 'arm810', 'arm9',
16537     'arm9e', 'arm920', 'arm920t', 'arm922t', 'arm946e-s', 'arm966e-s',
16538     'arm968e-s', 'arm926ej-s', 'arm940t', 'arm9tdmi', 'arm10tdmi',
16539     'arm1020t', 'arm1026ej-s', 'arm10e', 'arm1020e', 'arm1022e',
16540     'arm1136j-s', 'arm1136jf-s', 'mpcore', 'mpcorenovfp',
16541     'arm1156t2-s', 'arm1156t2f-s', 'arm1176jz-s', 'arm1176jzf-s',
16542     'generic-armv7-a', 'cortex-a5', 'cortex-a7', 'cortex-a8',
16543     'cortex-a9', 'cortex-a12', 'cortex-a15', 'cortex-a17',
16544     'cortex-a32', 'cortex-a35', 'cortex-a53', 'cortex-a55',
16545     'cortex-a57', 'cortex-a72', 'cortex-a73', 'cortex-a75',
16546     'cortex-a76', 'ares', 'cortex-r4', 'cortex-r4f', 'cortex-r5',
16547     'cortex-r7', 'cortex-r8', 'cortex-r52', 'cortex-m0',
16548     'cortex-m0plus', 'cortex-m1', 'cortex-m3', 'cortex-m4',
16549     'cortex-m7', 'cortex-m23', 'cortex-m33',
16550     'cortex-m1.small-multiply', 'cortex-m0.small-multiply',
16551     'cortex-m0plus.small-multiply', 'exynos-m1', 'marvell-pj4',
16552     'neoverse-n1', 'neoverse-n2', 'neoverse-v1', 'xscale', 'iwmmxt',
16553     'iwmmxt2', 'ep9312', 'fa526', 'fa626', 'fa606te', 'fa626te',
16554     'fmp626', 'fa726te', 'xgene1'.
16555
16556     Additionally, this option can specify that GCC should tune the
16557     performance of the code for a big.LITTLE system.  Permissible names
16558     are: 'cortex-a15.cortex-a7', 'cortex-a17.cortex-a7',
16559     'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
16560     'cortex-a72.cortex-a35', 'cortex-a73.cortex-a53',
16561     'cortex-a75.cortex-a55', 'cortex-a76.cortex-a55'.
16562
16563     '-mtune=generic-ARCH' specifies that GCC should tune the
16564     performance for a blend of processors within architecture ARCH.
16565     The aim is to generate code that run well on the current most
16566     popular processors, balancing between optimizations that benefit
16567     some CPUs in the range, and avoiding performance pitfalls of other
16568     CPUs.  The effects of this option may change in future GCC versions
16569     as CPU models come and go.
16570
16571     '-mtune' permits the same extension options as '-mcpu', but the
16572     extension options do not affect the tuning of the generated code.
16573
16574     '-mtune=native' causes the compiler to auto-detect the CPU of the
16575     build computer.  At present, this feature is only supported on
16576     GNU/Linux, and not all architectures are recognized.  If the
16577     auto-detect is unsuccessful the option has no effect.
16578
16579'-mcpu=NAME[+extension...]'
16580     This specifies the name of the target ARM processor.  GCC uses this
16581     name to derive the name of the target ARM architecture (as if
16582     specified by '-march') and the ARM processor type for which to tune
16583     for performance (as if specified by '-mtune').  Where this option
16584     is used in conjunction with '-march' or '-mtune', those options
16585     take precedence over the appropriate part of this option.
16586
16587     Many of the supported CPUs implement optional architectural
16588     extensions.  Where this is so the architectural extensions are
16589     normally enabled by default.  If implementations that lack the
16590     extension exist, then the extension syntax can be used to disable
16591     those extensions that have been omitted.  For floating-point and
16592     Advanced SIMD (Neon) instructions, the settings of the options
16593     '-mfloat-abi' and '-mfpu' must also be considered: floating-point
16594     and Advanced SIMD instructions will only be used if '-mfloat-abi'
16595     is not set to 'soft'; and any setting of '-mfpu' other than 'auto'
16596     will override the available floating-point and SIMD extension
16597     instructions.
16598
16599     For example, 'cortex-a9' can be found in three major
16600     configurations: integer only, with just a floating-point unit or
16601     with floating-point and Advanced SIMD. The default is to enable all
16602     the instructions, but the extensions '+nosimd' and '+nofp' can be
16603     used to disable just the SIMD or both the SIMD and floating-point
16604     instructions respectively.
16605
16606     Permissible names for this option are the same as those for
16607     '-mtune'.
16608
16609     The following extension options are common to the listed CPUs:
16610
16611     '+nodsp'
16612          Disable the DSP instructions on 'cortex-m33'.
16613
16614     '+nofp'
16615          Disables the floating-point instructions on 'arm9e',
16616          'arm946e-s', 'arm966e-s', 'arm968e-s', 'arm10e', 'arm1020e',
16617          'arm1022e', 'arm926ej-s', 'arm1026ej-s', 'cortex-r5',
16618          'cortex-r7', 'cortex-r8', 'cortex-m4', 'cortex-m7' and
16619          'cortex-m33'.  Disables the floating-point and SIMD
16620          instructions on 'generic-armv7-a', 'cortex-a5', 'cortex-a7',
16621          'cortex-a8', 'cortex-a9', 'cortex-a12', 'cortex-a15',
16622          'cortex-a17', 'cortex-a15.cortex-a7', 'cortex-a17.cortex-a7',
16623          'cortex-a32', 'cortex-a35', 'cortex-a53' and 'cortex-a55'.
16624
16625     '+nofp.dp'
16626          Disables the double-precision component of the floating-point
16627          instructions on 'cortex-r5', 'cortex-r7', 'cortex-r8',
16628          'cortex-r52' and 'cortex-m7'.
16629
16630     '+nosimd'
16631          Disables the SIMD (but not floating-point) instructions on
16632          'generic-armv7-a', 'cortex-a5', 'cortex-a7' and 'cortex-a9'.
16633
16634     '+crypto'
16635          Enables the cryptographic instructions on 'cortex-a32',
16636          'cortex-a35', 'cortex-a53', 'cortex-a55', 'cortex-a57',
16637          'cortex-a72', 'cortex-a73', 'cortex-a75', 'exynos-m1',
16638          'xgene1', 'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
16639          'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53' and
16640          'cortex-a75.cortex-a55'.
16641
16642     Additionally the 'generic-armv7-a' pseudo target defaults to VFPv3
16643     with 16 double-precision registers.  It supports the following
16644     extension options: 'mp', 'sec', 'vfpv3-d16', 'vfpv3',
16645     'vfpv3-d16-fp16', 'vfpv3-fp16', 'vfpv4-d16', 'vfpv4', 'neon',
16646     'neon-vfpv3', 'neon-fp16', 'neon-vfpv4'.  The meanings are the same
16647     as for the extensions to '-march=armv7-a'.
16648
16649     '-mcpu=generic-ARCH' is also permissible, and is equivalent to
16650     '-march=ARCH -mtune=generic-ARCH'.  See '-mtune' for more
16651     information.
16652
16653     '-mcpu=native' causes the compiler to auto-detect the CPU of the
16654     build computer.  At present, this feature is only supported on
16655     GNU/Linux, and not all architectures are recognized.  If the
16656     auto-detect is unsuccessful the option has no effect.
16657
16658'-mfpu=NAME'
16659     This specifies what floating-point hardware (or hardware emulation)
16660     is available on the target.  Permissible names are: 'auto',
16661     'vfpv2', 'vfpv3', 'vfpv3-fp16', 'vfpv3-d16', 'vfpv3-d16-fp16',
16662     'vfpv3xd', 'vfpv3xd-fp16', 'neon-vfpv3', 'neon-fp16', 'vfpv4',
16663     'vfpv4-d16', 'fpv4-sp-d16', 'neon-vfpv4', 'fpv5-d16',
16664     'fpv5-sp-d16', 'fp-armv8', 'neon-fp-armv8' and
16665     'crypto-neon-fp-armv8'.  Note that 'neon' is an alias for
16666     'neon-vfpv3' and 'vfp' is an alias for 'vfpv2'.
16667
16668     The setting 'auto' is the default and is special.  It causes the
16669     compiler to select the floating-point and Advanced SIMD
16670     instructions based on the settings of '-mcpu' and '-march'.
16671
16672     If the selected floating-point hardware includes the NEON extension
16673     (e.g. '-mfpu=neon'), note that floating-point operations are not
16674     generated by GCC's auto-vectorization pass unless
16675     '-funsafe-math-optimizations' is also specified.  This is because
16676     NEON hardware does not fully implement the IEEE 754 standard for
16677     floating-point arithmetic (in particular denormal values are
16678     treated as zero), so the use of NEON instructions may lead to a
16679     loss of precision.
16680
16681     You can also set the fpu name at function level by using the
16682     'target("fpu=")' function attributes (*note ARM Function
16683     Attributes::) or pragmas (*note Function Specific Option
16684     Pragmas::).
16685
16686'-mfp16-format=NAME'
16687     Specify the format of the '__fp16' half-precision floating-point
16688     type.  Permissible names are 'none', 'ieee', and 'alternative'; the
16689     default is 'none', in which case the '__fp16' type is not defined.
16690     *Note Half-Precision::, for more information.
16691
16692'-mstructure-size-boundary=N'
16693     The sizes of all structures and unions are rounded up to a multiple
16694     of the number of bits set by this option.  Permissible values are
16695     8, 32 and 64.  The default value varies for different toolchains.
16696     For the COFF targeted toolchain the default value is 8.  A value of
16697     64 is only allowed if the underlying ABI supports it.
16698
16699     Specifying a larger number can produce faster, more efficient code,
16700     but can also increase the size of the program.  Different values
16701     are potentially incompatible.  Code compiled with one value cannot
16702     necessarily expect to work with code or libraries compiled with
16703     another value, if they exchange information using structures or
16704     unions.
16705
16706     This option is deprecated.
16707
16708'-mabort-on-noreturn'
16709     Generate a call to the function 'abort' at the end of a 'noreturn'
16710     function.  It is executed if the function tries to return.
16711
16712'-mlong-calls'
16713'-mno-long-calls'
16714     Tells the compiler to perform function calls by first loading the
16715     address of the function into a register and then performing a
16716     subroutine call on this register.  This switch is needed if the
16717     target function lies outside of the 64-megabyte addressing range of
16718     the offset-based version of subroutine call instruction.
16719
16720     Even if this switch is enabled, not all function calls are turned
16721     into long calls.  The heuristic is that static functions, functions
16722     that have the 'short_call' attribute, functions that are inside the
16723     scope of a '#pragma no_long_calls' directive, and functions whose
16724     definitions have already been compiled within the current
16725     compilation unit are not turned into long calls.  The exceptions to
16726     this rule are that weak function definitions, functions with the
16727     'long_call' attribute or the 'section' attribute, and functions
16728     that are within the scope of a '#pragma long_calls' directive are
16729     always turned into long calls.
16730
16731     This feature is not enabled by default.  Specifying
16732     '-mno-long-calls' restores the default behavior, as does placing
16733     the function calls within the scope of a '#pragma long_calls_off'
16734     directive.  Note these switches have no effect on how the compiler
16735     generates code to handle function calls via function pointers.
16736
16737'-msingle-pic-base'
16738     Treat the register used for PIC addressing as read-only, rather
16739     than loading it in the prologue for each function.  The runtime
16740     system is responsible for initializing this register with an
16741     appropriate value before execution begins.
16742
16743'-mpic-register=REG'
16744     Specify the register to be used for PIC addressing.  For standard
16745     PIC base case, the default is any suitable register determined by
16746     compiler.  For single PIC base case, the default is 'R9' if target
16747     is EABI based or stack-checking is enabled, otherwise the default
16748     is 'R10'.
16749
16750'-mpic-data-is-text-relative'
16751     Assume that the displacement between the text and data segments is
16752     fixed at static link time.  This permits using PC-relative
16753     addressing operations to access data known to be in the data
16754     segment.  For non-VxWorks RTP targets, this option is enabled by
16755     default.  When disabled on such targets, it will enable
16756     '-msingle-pic-base' by default.
16757
16758'-mpoke-function-name'
16759     Write the name of each function into the text section, directly
16760     preceding the function prologue.  The generated code is similar to
16761     this:
16762
16763               t0
16764                   .ascii "arm_poke_function_name", 0
16765                   .align
16766               t1
16767                   .word 0xff000000 + (t1 - t0)
16768               arm_poke_function_name
16769                   mov     ip, sp
16770                   stmfd   sp!, {fp, ip, lr, pc}
16771                   sub     fp, ip, #4
16772
16773     When performing a stack backtrace, code can inspect the value of
16774     'pc' stored at 'fp + 0'.  If the trace function then looks at
16775     location 'pc - 12' and the top 8 bits are set, then we know that
16776     there is a function name embedded immediately preceding this
16777     location and has length '((pc[-3]) & 0xff000000)'.
16778
16779'-mthumb'
16780'-marm'
16781
16782     Select between generating code that executes in ARM and Thumb
16783     states.  The default for most configurations is to generate code
16784     that executes in ARM state, but the default can be changed by
16785     configuring GCC with the '--with-mode='STATE configure option.
16786
16787     You can also override the ARM and Thumb mode for each function by
16788     using the 'target("thumb")' and 'target("arm")' function attributes
16789     (*note ARM Function Attributes::) or pragmas (*note Function
16790     Specific Option Pragmas::).
16791
16792'-mflip-thumb'
16793     Switch ARM/Thumb modes on alternating functions.  This option is
16794     provided for regression testing of mixed Thumb/ARM code generation,
16795     and is not intended for ordinary use in compiling code.
16796
16797'-mtpcs-frame'
16798     Generate a stack frame that is compliant with the Thumb Procedure
16799     Call Standard for all non-leaf functions.  (A leaf function is one
16800     that does not call any other functions.)  The default is
16801     '-mno-tpcs-frame'.
16802
16803'-mtpcs-leaf-frame'
16804     Generate a stack frame that is compliant with the Thumb Procedure
16805     Call Standard for all leaf functions.  (A leaf function is one that
16806     does not call any other functions.)  The default is
16807     '-mno-apcs-leaf-frame'.
16808
16809'-mcallee-super-interworking'
16810     Gives all externally visible functions in the file being compiled
16811     an ARM instruction set header which switches to Thumb mode before
16812     executing the rest of the function.  This allows these functions to
16813     be called from non-interworking code.  This option is not valid in
16814     AAPCS configurations because interworking is enabled by default.
16815
16816'-mcaller-super-interworking'
16817     Allows calls via function pointers (including virtual functions) to
16818     execute correctly regardless of whether the target code has been
16819     compiled for interworking or not.  There is a small overhead in the
16820     cost of executing a function pointer if this option is enabled.
16821     This option is not valid in AAPCS configurations because
16822     interworking is enabled by default.
16823
16824'-mtp=NAME'
16825     Specify the access model for the thread local storage pointer.  The
16826     valid models are 'soft', which generates calls to
16827     '__aeabi_read_tp', 'cp15', which fetches the thread pointer from
16828     'cp15' directly (supported in the arm6k architecture), and 'auto',
16829     which uses the best available method for the selected processor.
16830     The default setting is 'auto'.
16831
16832'-mtls-dialect=DIALECT'
16833     Specify the dialect to use for accessing thread local storage.  Two
16834     DIALECTs are supported--'gnu' and 'gnu2'.  The 'gnu' dialect
16835     selects the original GNU scheme for supporting local and global
16836     dynamic TLS models.  The 'gnu2' dialect selects the GNU descriptor
16837     scheme, which provides better performance for shared libraries.
16838     The GNU descriptor scheme is compatible with the original scheme,
16839     but does require new assembler, linker and library support.
16840     Initial and local exec TLS models are unaffected by this option and
16841     always use the original scheme.
16842
16843'-mword-relocations'
16844     Only generate absolute relocations on word-sized values (i.e.
16845     R_ARM_ABS32).  This is enabled by default on targets (uClinux,
16846     SymbianOS) where the runtime loader imposes this restriction, and
16847     when '-fpic' or '-fPIC' is specified.  This option conflicts with
16848     '-mslow-flash-data'.
16849
16850'-mfix-cortex-m3-ldrd'
16851     Some Cortex-M3 cores can cause data corruption when 'ldrd'
16852     instructions with overlapping destination and base registers are
16853     used.  This option avoids generating these instructions.  This
16854     option is enabled by default when '-mcpu=cortex-m3' is specified.
16855
16856'-munaligned-access'
16857'-mno-unaligned-access'
16858     Enables (or disables) reading and writing of 16- and 32- bit values
16859     from addresses that are not 16- or 32- bit aligned.  By default
16860     unaligned access is disabled for all pre-ARMv6, all ARMv6-M and for
16861     ARMv8-M Baseline architectures, and enabled for all other
16862     architectures.  If unaligned access is not enabled then words in
16863     packed data structures are accessed a byte at a time.
16864
16865     The ARM attribute 'Tag_CPU_unaligned_access' is set in the
16866     generated object file to either true or false, depending upon the
16867     setting of this option.  If unaligned access is enabled then the
16868     preprocessor symbol '__ARM_FEATURE_UNALIGNED' is also defined.
16869
16870'-mneon-for-64bits'
16871     Enables using Neon to handle scalar 64-bits operations.  This is
16872     disabled by default since the cost of moving data from core
16873     registers to Neon is high.
16874
16875'-mslow-flash-data'
16876     Assume loading data from flash is slower than fetching instruction.
16877     Therefore literal load is minimized for better performance.  This
16878     option is only supported when compiling for ARMv7 M-profile and off
16879     by default.  It conflicts with '-mword-relocations'.
16880
16881'-masm-syntax-unified'
16882     Assume inline assembler is using unified asm syntax.  The default
16883     is currently off which implies divided syntax.  This option has no
16884     impact on Thumb2.  However, this may change in future releases of
16885     GCC. Divided syntax should be considered deprecated.
16886
16887'-mrestrict-it'
16888     Restricts generation of IT blocks to conform to the rules of
16889     ARMv8-A. IT blocks can only contain a single 16-bit instruction
16890     from a select set of instructions.  This option is on by default
16891     for ARMv8-A Thumb mode.
16892
16893'-mprint-tune-info'
16894     Print CPU tuning information as comment in assembler file.  This is
16895     an option used only for regression testing of the compiler and not
16896     intended for ordinary use in compiling code.  This option is
16897     disabled by default.
16898
16899'-mverbose-cost-dump'
16900     Enable verbose cost model dumping in the debug dump files.  This
16901     option is provided for use in debugging the compiler.
16902
16903'-mpure-code'
16904     Do not allow constant data to be placed in code sections.
16905     Additionally, when compiling for ELF object format give all text
16906     sections the ELF processor-specific section attribute
16907     'SHF_ARM_PURECODE'.  This option is only available when generating
16908     non-pic code for M-profile targets.
16909
16910'-mcmse'
16911     Generate secure code as per the "ARMv8-M Security Extensions:
16912     Requirements on Development Tools Engineering Specification", which
16913     can be found on
16914     <https://developer.arm.com/documentation/ecm0359818/latest/>.
16915
16916
16917File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
16918
169193.18.6 AVR Options
16920------------------
16921
16922These options are defined for AVR implementations:
16923
16924'-mmcu=MCU'
16925     Specify Atmel AVR instruction set architectures (ISA) or MCU type.
16926
16927     The default for this option is 'avr2'.
16928
16929     GCC supports the following AVR devices and ISAs:
16930
16931     'avr2'
16932          "Classic" devices with up to 8 KiB of program memory.
16933          MCU = 'attiny22', 'attiny26', 'at90s2313', 'at90s2323',
16934          'at90s2333', 'at90s2343', 'at90s4414', 'at90s4433',
16935          'at90s4434', 'at90c8534', 'at90s8515', 'at90s8535'.
16936
16937     'avr25'
16938          "Classic" devices with up to 8 KiB of program memory and with
16939          the 'MOVW' instruction.
16940          MCU = 'attiny13', 'attiny13a', 'attiny24', 'attiny24a',
16941          'attiny25', 'attiny261', 'attiny261a', 'attiny2313',
16942          'attiny2313a', 'attiny43u', 'attiny44', 'attiny44a',
16943          'attiny45', 'attiny48', 'attiny441', 'attiny461',
16944          'attiny461a', 'attiny4313', 'attiny84', 'attiny84a',
16945          'attiny85', 'attiny87', 'attiny88', 'attiny828', 'attiny841',
16946          'attiny861', 'attiny861a', 'ata5272', 'ata6616c', 'at86rf401'.
16947
16948     'avr3'
16949          "Classic" devices with 16 KiB up to 64 KiB of program memory.
16950          MCU = 'at76c711', 'at43usb355'.
16951
16952     'avr31'
16953          "Classic" devices with 128 KiB of program memory.
16954          MCU = 'atmega103', 'at43usb320'.
16955
16956     'avr35'
16957          "Classic" devices with 16 KiB up to 64 KiB of program memory
16958          and with the 'MOVW' instruction.
16959          MCU = 'attiny167', 'attiny1634', 'atmega8u2', 'atmega16u2',
16960          'atmega32u2', 'ata5505', 'ata6617c', 'ata664251', 'at90usb82',
16961          'at90usb162'.
16962
16963     'avr4'
16964          "Enhanced" devices with up to 8 KiB of program memory.
16965          MCU = 'atmega48', 'atmega48a', 'atmega48p', 'atmega48pa',
16966          'atmega48pb', 'atmega8', 'atmega8a', 'atmega8hva', 'atmega88',
16967          'atmega88a', 'atmega88p', 'atmega88pa', 'atmega88pb',
16968          'atmega8515', 'atmega8535', 'ata6285', 'ata6286', 'ata6289',
16969          'ata6612c', 'at90pwm1', 'at90pwm2', 'at90pwm2b', 'at90pwm3',
16970          'at90pwm3b', 'at90pwm81'.
16971
16972     'avr5'
16973          "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
16974
16975          MCU = 'atmega16', 'atmega16a', 'atmega16hva', 'atmega16hva2',
16976          'atmega16hvb', 'atmega16hvbrevb', 'atmega16m1', 'atmega16u4',
16977          'atmega161', 'atmega162', 'atmega163', 'atmega164a',
16978          'atmega164p', 'atmega164pa', 'atmega165', 'atmega165a',
16979          'atmega165p', 'atmega165pa', 'atmega168', 'atmega168a',
16980          'atmega168p', 'atmega168pa', 'atmega168pb', 'atmega169',
16981          'atmega169a', 'atmega169p', 'atmega169pa', 'atmega32',
16982          'atmega32a', 'atmega32c1', 'atmega32hvb', 'atmega32hvbrevb',
16983          'atmega32m1', 'atmega32u4', 'atmega32u6', 'atmega323',
16984          'atmega324a', 'atmega324p', 'atmega324pa', 'atmega325',
16985          'atmega325a', 'atmega325p', 'atmega325pa', 'atmega328',
16986          'atmega328p', 'atmega328pb', 'atmega329', 'atmega329a',
16987          'atmega329p', 'atmega329pa', 'atmega3250', 'atmega3250a',
16988          'atmega3250p', 'atmega3250pa', 'atmega3290', 'atmega3290a',
16989          'atmega3290p', 'atmega3290pa', 'atmega406', 'atmega64',
16990          'atmega64a', 'atmega64c1', 'atmega64hve', 'atmega64hve2',
16991          'atmega64m1', 'atmega64rfr2', 'atmega640', 'atmega644',
16992          'atmega644a', 'atmega644p', 'atmega644pa', 'atmega644rfr2',
16993          'atmega645', 'atmega645a', 'atmega645p', 'atmega649',
16994          'atmega649a', 'atmega649p', 'atmega6450', 'atmega6450a',
16995          'atmega6450p', 'atmega6490', 'atmega6490a', 'atmega6490p',
16996          'ata5795', 'ata5790', 'ata5790n', 'ata5791', 'ata6613c',
16997          'ata6614q', 'ata5782', 'ata5831', 'ata8210', 'ata8510',
16998          'ata5702m322', 'at90pwm161', 'at90pwm216', 'at90pwm316',
16999          'at90can32', 'at90can64', 'at90scr100', 'at90usb646',
17000          'at90usb647', 'at94k', 'm3000'.
17001
17002     'avr51'
17003          "Enhanced" devices with 128 KiB of program memory.
17004          MCU = 'atmega128', 'atmega128a', 'atmega128rfa1',
17005          'atmega128rfr2', 'atmega1280', 'atmega1281', 'atmega1284',
17006          'atmega1284p', 'atmega1284rfr2', 'at90can128', 'at90usb1286',
17007          'at90usb1287'.
17008
17009     'avr6'
17010          "Enhanced" devices with 3-byte PC, i.e. with more than 128 KiB
17011          of program memory.
17012          MCU = 'atmega256rfr2', 'atmega2560', 'atmega2561',
17013          'atmega2564rfr2'.
17014
17015     'avrxmega2'
17016          "XMEGA" devices with more than 8 KiB and up to 64 KiB of
17017          program memory.
17018          MCU = 'atxmega8e5', 'atxmega16a4', 'atxmega16a4u',
17019          'atxmega16c4', 'atxmega16d4', 'atxmega16e5', 'atxmega32a4',
17020          'atxmega32a4u', 'atxmega32c3', 'atxmega32c4', 'atxmega32d3',
17021          'atxmega32d4', 'atxmega32e5'.
17022
17023     'avrxmega3'
17024          "XMEGA" devices with up to 64 KiB of combined program memory
17025          and RAM, and with program memory visible in the RAM address
17026          space.
17027          MCU = 'attiny202', 'attiny204', 'attiny212', 'attiny214',
17028          'attiny402', 'attiny404', 'attiny406', 'attiny412',
17029          'attiny414', 'attiny416', 'attiny417', 'attiny804',
17030          'attiny806', 'attiny807', 'attiny814', 'attiny816',
17031          'attiny817', 'attiny1604', 'attiny1606', 'attiny1607',
17032          'attiny1614', 'attiny1616', 'attiny1617', 'attiny3214',
17033          'attiny3216', 'attiny3217', 'atmega808', 'atmega809',
17034          'atmega1608', 'atmega1609', 'atmega3208', 'atmega3209',
17035          'atmega4808', 'atmega4809'.
17036
17037     'avrxmega4'
17038          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
17039          program memory.
17040          MCU = 'atxmega64a3', 'atxmega64a3u', 'atxmega64a4u',
17041          'atxmega64b1', 'atxmega64b3', 'atxmega64c3', 'atxmega64d3',
17042          'atxmega64d4'.
17043
17044     'avrxmega5'
17045          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
17046          program memory and more than 64 KiB of RAM.
17047          MCU = 'atxmega64a1', 'atxmega64a1u'.
17048
17049     'avrxmega6'
17050          "XMEGA" devices with more than 128 KiB of program memory.
17051          MCU = 'atxmega128a3', 'atxmega128a3u', 'atxmega128b1',
17052          'atxmega128b3', 'atxmega128c3', 'atxmega128d3',
17053          'atxmega128d4', 'atxmega192a3', 'atxmega192a3u',
17054          'atxmega192c3', 'atxmega192d3', 'atxmega256a3',
17055          'atxmega256a3b', 'atxmega256a3bu', 'atxmega256a3u',
17056          'atxmega256c3', 'atxmega256d3', 'atxmega384c3',
17057          'atxmega384d3'.
17058
17059     'avrxmega7'
17060          "XMEGA" devices with more than 128 KiB of program memory and
17061          more than 64 KiB of RAM.
17062          MCU = 'atxmega128a1', 'atxmega128a1u', 'atxmega128a4u'.
17063
17064     'avrtiny'
17065          "TINY" Tiny core devices with 512 B up to 4 KiB of program
17066          memory.
17067          MCU = 'attiny4', 'attiny5', 'attiny9', 'attiny10', 'attiny20',
17068          'attiny40'.
17069
17070     'avr1'
17071          This ISA is implemented by the minimal AVR core and supported
17072          for assembler only.
17073          MCU = 'attiny11', 'attiny12', 'attiny15', 'attiny28',
17074          'at90s1200'.
17075
17076'-mabsdata'
17077
17078     Assume that all data in static storage can be accessed by LDS / STS
17079     instructions.  This option has only an effect on reduced Tiny
17080     devices like ATtiny40.  See also the 'absdata' *note variable
17081     attribute: AVR Variable Attributes.
17082
17083'-maccumulate-args'
17084     Accumulate outgoing function arguments and acquire/release the
17085     needed stack space for outgoing function arguments once in function
17086     prologue/epilogue.  Without this option, outgoing arguments are
17087     pushed before calling a function and popped afterwards.
17088
17089     Popping the arguments after the function call can be expensive on
17090     AVR so that accumulating the stack space might lead to smaller
17091     executables because arguments need not be removed from the stack
17092     after such a function call.
17093
17094     This option can lead to reduced code size for functions that
17095     perform several calls to functions that get their arguments on the
17096     stack like calls to printf-like functions.
17097
17098'-mbranch-cost=COST'
17099     Set the branch costs for conditional branch instructions to COST.
17100     Reasonable values for COST are small, non-negative integers.  The
17101     default branch cost is 0.
17102
17103'-mcall-prologues'
17104     Functions prologues/epilogues are expanded as calls to appropriate
17105     subroutines.  Code size is smaller.
17106
17107'-mgas-isr-prologues'
17108     Interrupt service routines (ISRs) may use the '__gcc_isr' pseudo
17109     instruction supported by GNU Binutils.  If this option is on, the
17110     feature can still be disabled for individual ISRs by means of the
17111     *note 'no_gccisr': AVR Function Attributes. function attribute.
17112     This feature is activated per default if optimization is on (but
17113     not with '-Og', *note Optimize Options::), and if GNU Binutils
17114     support PR21683 (https://sourceware.org/PR21683).
17115
17116'-mint8'
17117     Assume 'int' to be 8-bit integer.  This affects the sizes of all
17118     types: a 'char' is 1 byte, an 'int' is 1 byte, a 'long' is 2 bytes,
17119     and 'long long' is 4 bytes.  Please note that this option does not
17120     conform to the C standards, but it results in smaller code size.
17121
17122'-mmain-is-OS_task'
17123     Do not save registers in 'main'.  The effect is the same like
17124     attaching attribute *note 'OS_task': AVR Function Attributes. to
17125     'main'.  It is activated per default if optimization is on.
17126
17127'-mn-flash=NUM'
17128     Assume that the flash memory has a size of NUM times 64 KiB.
17129
17130'-mno-interrupts'
17131     Generated code is not compatible with hardware interrupts.  Code
17132     size is smaller.
17133
17134'-mrelax'
17135     Try to replace 'CALL' resp. 'JMP' instruction by the shorter
17136     'RCALL' resp. 'RJMP' instruction if applicable.  Setting '-mrelax'
17137     just adds the '--mlink-relax' option to the assembler's command
17138     line and the '--relax' option to the linker's command line.
17139
17140     Jump relaxing is performed by the linker because jump offsets are
17141     not known before code is located.  Therefore, the assembler code
17142     generated by the compiler is the same, but the instructions in the
17143     executable may differ from instructions in the assembler code.
17144
17145     Relaxing must be turned on if linker stubs are needed, see the
17146     section on 'EIND' and linker stubs below.
17147
17148'-mrmw'
17149     Assume that the device supports the Read-Modify-Write instructions
17150     'XCH', 'LAC', 'LAS' and 'LAT'.
17151
17152'-mshort-calls'
17153
17154     Assume that 'RJMP' and 'RCALL' can target the whole program memory.
17155
17156     This option is used internally for multilib selection.  It is not
17157     an optimization option, and you don't need to set it by hand.
17158
17159'-msp8'
17160     Treat the stack pointer register as an 8-bit register, i.e. assume
17161     the high byte of the stack pointer is zero.  In general, you don't
17162     need to set this option by hand.
17163
17164     This option is used internally by the compiler to select and build
17165     multilibs for architectures 'avr2' and 'avr25'.  These
17166     architectures mix devices with and without 'SPH'.  For any setting
17167     other than '-mmcu=avr2' or '-mmcu=avr25' the compiler driver adds
17168     or removes this option from the compiler proper's command line,
17169     because the compiler then knows if the device or architecture has
17170     an 8-bit stack pointer and thus no 'SPH' register or not.
17171
17172'-mstrict-X'
17173     Use address register 'X' in a way proposed by the hardware.  This
17174     means that 'X' is only used in indirect, post-increment or
17175     pre-decrement addressing.
17176
17177     Without this option, the 'X' register may be used in the same way
17178     as 'Y' or 'Z' which then is emulated by additional instructions.
17179     For example, loading a value with 'X+const' addressing with a small
17180     non-negative 'const < 64' to a register RN is performed as
17181
17182          adiw r26, const   ; X += const
17183          ld   RN, X        ; RN = *X
17184          sbiw r26, const   ; X -= const
17185
17186'-mtiny-stack'
17187     Only change the lower 8 bits of the stack pointer.
17188
17189'-mfract-convert-truncate'
17190     Allow to use truncation instead of rounding towards zero for
17191     fractional fixed-point types.
17192
17193'-nodevicelib'
17194     Don't link against AVR-LibC's device specific library 'lib<mcu>.a'.
17195
17196'-nodevicespecs'
17197     Don't add '-specs=device-specs/specs-<mcu>' to the compiler
17198     driver's command line.  The user takes responsibility for supplying
17199     the sub-processes like compiler proper, assembler and linker with
17200     appropriate command line options.
17201
17202'-Waddr-space-convert'
17203     Warn about conversions between address spaces in the case where the
17204     resulting address space is not contained in the incoming address
17205     space.
17206
17207'-Wmisspelled-isr'
17208     Warn if the ISR is misspelled, i.e. without __vector prefix.
17209     Enabled by default.
17210
172113.18.6.1 'EIND' and Devices with More Than 128 Ki Bytes of Flash
17212................................................................
17213
17214Pointers in the implementation are 16 bits wide.  The address of a
17215function or label is represented as word address so that indirect jumps
17216and calls can target any code address in the range of 64 Ki words.
17217
17218 In order to facilitate indirect jump on devices with more than 128 Ki
17219bytes of program memory space, there is a special function register
17220called 'EIND' that serves as most significant part of the target address
17221when 'EICALL' or 'EIJMP' instructions are used.
17222
17223 Indirect jumps and calls on these devices are handled as follows by the
17224compiler and are subject to some limitations:
17225
17226   * The compiler never sets 'EIND'.
17227
17228   * The compiler uses 'EIND' implicitly in 'EICALL'/'EIJMP'
17229     instructions or might read 'EIND' directly in order to emulate an
17230     indirect call/jump by means of a 'RET' instruction.
17231
17232   * The compiler assumes that 'EIND' never changes during the startup
17233     code or during the application.  In particular, 'EIND' is not
17234     saved/restored in function or interrupt service routine
17235     prologue/epilogue.
17236
17237   * For indirect calls to functions and computed goto, the linker
17238     generates _stubs_.  Stubs are jump pads sometimes also called
17239     _trampolines_.  Thus, the indirect call/jump jumps to such a stub.
17240     The stub contains a direct jump to the desired address.
17241
17242   * Linker relaxation must be turned on so that the linker generates
17243     the stubs correctly in all situations.  See the compiler option
17244     '-mrelax' and the linker option '--relax'.  There are corner cases
17245     where the linker is supposed to generate stubs but aborts without
17246     relaxation and without a helpful error message.
17247
17248   * The default linker script is arranged for code with 'EIND = 0'.  If
17249     code is supposed to work for a setup with 'EIND != 0', a custom
17250     linker script has to be used in order to place the sections whose
17251     name start with '.trampolines' into the segment where 'EIND' points
17252     to.
17253
17254   * The startup code from libgcc never sets 'EIND'.  Notice that
17255     startup code is a blend of code from libgcc and AVR-LibC. For the
17256     impact of AVR-LibC on 'EIND', see the
17257     AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/).
17258
17259   * It is legitimate for user-specific startup code to set up 'EIND'
17260     early, for example by means of initialization code located in
17261     section '.init3'.  Such code runs prior to general startup code
17262     that initializes RAM and calls constructors, but after the bit of
17263     startup code from AVR-LibC that sets 'EIND' to the segment where
17264     the vector table is located.
17265          #include <avr/io.h>
17266
17267          static void
17268          __attribute__((section(".init3"),naked,used,no_instrument_function))
17269          init3_set_eind (void)
17270          {
17271            __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
17272                            "out %i0,r24" :: "n" (&EIND) : "r24","memory");
17273          }
17274
17275     The '__trampolines_start' symbol is defined in the linker script.
17276
17277   * Stubs are generated automatically by the linker if the following
17278     two conditions are met:
17279
17280        - The address of a label is taken by means of the 'gs' modifier
17281          (short for _generate stubs_) like so:
17282               LDI r24, lo8(gs(FUNC))
17283               LDI r25, hi8(gs(FUNC))
17284        - The final location of that label is in a code segment
17285          _outside_ the segment where the stubs are located.
17286
17287   * The compiler emits such 'gs' modifiers for code labels in the
17288     following situations:
17289        - Taking address of a function or code label.
17290        - Computed goto.
17291        - If prologue-save function is used, see '-mcall-prologues'
17292          command-line option.
17293        - Switch/case dispatch tables.  If you do not want such dispatch
17294          tables you can specify the '-fno-jump-tables' command-line
17295          option.
17296        - C and C++ constructors/destructors called during
17297          startup/shutdown.
17298        - If the tools hit a 'gs()' modifier explained above.
17299
17300   * Jumping to non-symbolic addresses like so is _not_ supported:
17301
17302          int main (void)
17303          {
17304              /* Call function at word address 0x2 */
17305              return ((int(*)(void)) 0x2)();
17306          }
17307
17308     Instead, a stub has to be set up, i.e. the function has to be
17309     called through a symbol ('func_4' in the example):
17310
17311          int main (void)
17312          {
17313              extern int func_4 (void);
17314
17315              /* Call function at byte address 0x4 */
17316              return func_4();
17317          }
17318
17319     and the application be linked with '-Wl,--defsym,func_4=0x4'.
17320     Alternatively, 'func_4' can be defined in the linker script.
17321
173223.18.6.2 Handling of the 'RAMPD', 'RAMPX', 'RAMPY' and 'RAMPZ' Special Function Registers
17323.........................................................................................
17324
17325Some AVR devices support memories larger than the 64 KiB range that can
17326be accessed with 16-bit pointers.  To access memory locations outside
17327this 64 KiB range, the content of a 'RAMP' register is used as high part
17328of the address: The 'X', 'Y', 'Z' address register is concatenated with
17329the 'RAMPX', 'RAMPY', 'RAMPZ' special function register, respectively,
17330to get a wide address.  Similarly, 'RAMPD' is used together with direct
17331addressing.
17332
17333   * The startup code initializes the 'RAMP' special function registers
17334     with zero.
17335
17336   * If a *note named address space: AVR Named Address Spaces. other
17337     than generic or '__flash' is used, then 'RAMPZ' is set as needed
17338     before the operation.
17339
17340   * If the device supports RAM larger than 64 KiB and the compiler
17341     needs to change 'RAMPZ' to accomplish an operation, 'RAMPZ' is
17342     reset to zero after the operation.
17343
17344   * If the device comes with a specific 'RAMP' register, the ISR
17345     prologue/epilogue saves/restores that SFR and initializes it with
17346     zero in case the ISR code might (implicitly) use it.
17347
17348   * RAM larger than 64 KiB is not supported by GCC for AVR targets.  If
17349     you use inline assembler to read from locations outside the 16-bit
17350     address range and change one of the 'RAMP' registers, you must
17351     reset it to zero after the access.
17352
173533.18.6.3 AVR Built-in Macros
17354............................
17355
17356GCC defines several built-in macros so that the user code can test for
17357the presence or absence of features.  Almost any of the following
17358built-in macros are deduced from device capabilities and thus triggered
17359by the '-mmcu=' command-line option.
17360
17361 For even more AVR-specific built-in macros see *note AVR Named Address
17362Spaces:: and *note AVR Built-in Functions::.
17363
17364'__AVR_ARCH__'
17365     Build-in macro that resolves to a decimal number that identifies
17366     the architecture and depends on the '-mmcu=MCU' option.  Possible
17367     values are:
17368
17369     '2', '25', '3', '31', '35', '4', '5', '51', '6'
17370
17371     for MCU='avr2', 'avr25', 'avr3', 'avr31', 'avr35', 'avr4', 'avr5',
17372     'avr51', 'avr6',
17373
17374     respectively and
17375
17376     '100', '102', '103', '104', '105', '106', '107'
17377
17378     for MCU='avrtiny', 'avrxmega2', 'avrxmega3', 'avrxmega4',
17379     'avrxmega5', 'avrxmega6', 'avrxmega7', respectively.  If MCU
17380     specifies a device, this built-in macro is set accordingly.  For
17381     example, with '-mmcu=atmega8' the macro is defined to '4'.
17382
17383'__AVR_DEVICE__'
17384     Setting '-mmcu=DEVICE' defines this built-in macro which reflects
17385     the device's name.  For example, '-mmcu=atmega8' defines the
17386     built-in macro '__AVR_ATmega8__', '-mmcu=attiny261a' defines
17387     '__AVR_ATtiny261A__', etc.
17388
17389     The built-in macros' names follow the scheme '__AVR_DEVICE__' where
17390     DEVICE is the device name as from the AVR user manual.  The
17391     difference between DEVICE in the built-in macro and DEVICE in
17392     '-mmcu=DEVICE' is that the latter is always lowercase.
17393
17394     If DEVICE is not a device but only a core architecture like
17395     'avr51', this macro is not defined.
17396
17397'__AVR_DEVICE_NAME__'
17398     Setting '-mmcu=DEVICE' defines this built-in macro to the device's
17399     name.  For example, with '-mmcu=atmega8' the macro is defined to
17400     'atmega8'.
17401
17402     If DEVICE is not a device but only a core architecture like
17403     'avr51', this macro is not defined.
17404
17405'__AVR_XMEGA__'
17406     The device / architecture belongs to the XMEGA family of devices.
17407
17408'__AVR_HAVE_ELPM__'
17409     The device has the 'ELPM' instruction.
17410
17411'__AVR_HAVE_ELPMX__'
17412     The device has the 'ELPM RN,Z' and 'ELPM RN,Z+' instructions.
17413
17414'__AVR_HAVE_MOVW__'
17415     The device has the 'MOVW' instruction to perform 16-bit
17416     register-register moves.
17417
17418'__AVR_HAVE_LPMX__'
17419     The device has the 'LPM RN,Z' and 'LPM RN,Z+' instructions.
17420
17421'__AVR_HAVE_MUL__'
17422     The device has a hardware multiplier.
17423
17424'__AVR_HAVE_JMP_CALL__'
17425     The device has the 'JMP' and 'CALL' instructions.  This is the case
17426     for devices with more than 8 KiB of program memory.
17427
17428'__AVR_HAVE_EIJMP_EICALL__'
17429'__AVR_3_BYTE_PC__'
17430     The device has the 'EIJMP' and 'EICALL' instructions.  This is the
17431     case for devices with more than 128 KiB of program memory.  This
17432     also means that the program counter (PC) is 3 bytes wide.
17433
17434'__AVR_2_BYTE_PC__'
17435     The program counter (PC) is 2 bytes wide.  This is the case for
17436     devices with up to 128 KiB of program memory.
17437
17438'__AVR_HAVE_8BIT_SP__'
17439'__AVR_HAVE_16BIT_SP__'
17440     The stack pointer (SP) register is treated as 8-bit respectively
17441     16-bit register by the compiler.  The definition of these macros is
17442     affected by '-mtiny-stack'.
17443
17444'__AVR_HAVE_SPH__'
17445'__AVR_SP8__'
17446     The device has the SPH (high part of stack pointer) special
17447     function register or has an 8-bit stack pointer, respectively.  The
17448     definition of these macros is affected by '-mmcu=' and in the cases
17449     of '-mmcu=avr2' and '-mmcu=avr25' also by '-msp8'.
17450
17451'__AVR_HAVE_RAMPD__'
17452'__AVR_HAVE_RAMPX__'
17453'__AVR_HAVE_RAMPY__'
17454'__AVR_HAVE_RAMPZ__'
17455     The device has the 'RAMPD', 'RAMPX', 'RAMPY', 'RAMPZ' special
17456     function register, respectively.
17457
17458'__NO_INTERRUPTS__'
17459     This macro reflects the '-mno-interrupts' command-line option.
17460
17461'__AVR_ERRATA_SKIP__'
17462'__AVR_ERRATA_SKIP_JMP_CALL__'
17463     Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
17464     instructions because of a hardware erratum.  Skip instructions are
17465     'SBRS', 'SBRC', 'SBIS', 'SBIC' and 'CPSE'.  The second macro is
17466     only defined if '__AVR_HAVE_JMP_CALL__' is also set.
17467
17468'__AVR_ISA_RMW__'
17469     The device has Read-Modify-Write instructions (XCH, LAC, LAS and
17470     LAT).
17471
17472'__AVR_SFR_OFFSET__=OFFSET'
17473     Instructions that can address I/O special function registers
17474     directly like 'IN', 'OUT', 'SBI', etc. may use a different address
17475     as if addressed by an instruction to access RAM like 'LD' or 'STS'.
17476     This offset depends on the device architecture and has to be
17477     subtracted from the RAM address in order to get the respective
17478     I/O address.
17479
17480'__AVR_SHORT_CALLS__'
17481     The '-mshort-calls' command line option is set.
17482
17483'__AVR_PM_BASE_ADDRESS__=ADDR'
17484     Some devices support reading from flash memory by means of 'LD*'
17485     instructions.  The flash memory is seen in the data address space
17486     at an offset of '__AVR_PM_BASE_ADDRESS__'.  If this macro is not
17487     defined, this feature is not available.  If defined, the address
17488     space is linear and there is no need to put '.rodata' into RAM.
17489     This is handled by the default linker description file, and is
17490     currently available for 'avrtiny' and 'avrxmega3'.  Even more
17491     convenient, there is no need to use address spaces like '__flash'
17492     or features like attribute 'progmem' and 'pgm_read_*'.
17493
17494'__WITH_AVRLIBC__'
17495     The compiler is configured to be used together with AVR-Libc.  See
17496     the '--with-avrlibc' configure option.
17497
17498
17499File: gcc.info,  Node: Blackfin Options,  Next: C6X Options,  Prev: AVR Options,  Up: Submodel Options
17500
175013.18.7 Blackfin Options
17502-----------------------
17503
17504'-mcpu=CPU[-SIREVISION]'
17505     Specifies the name of the target Blackfin processor.  Currently,
17506     CPU can be one of 'bf512', 'bf514', 'bf516', 'bf518', 'bf522',
17507     'bf523', 'bf524', 'bf525', 'bf526', 'bf527', 'bf531', 'bf532',
17508     'bf533', 'bf534', 'bf536', 'bf537', 'bf538', 'bf539', 'bf542',
17509     'bf544', 'bf547', 'bf548', 'bf549', 'bf542m', 'bf544m', 'bf547m',
17510     'bf548m', 'bf549m', 'bf561', 'bf592'.
17511
17512     The optional SIREVISION specifies the silicon revision of the
17513     target Blackfin processor.  Any workarounds available for the
17514     targeted silicon revision are enabled.  If SIREVISION is 'none', no
17515     workarounds are enabled.  If SIREVISION is 'any', all workarounds
17516     for the targeted processor are enabled.  The '__SILICON_REVISION__'
17517     macro is defined to two hexadecimal digits representing the major
17518     and minor numbers in the silicon revision.  If SIREVISION is
17519     'none', the '__SILICON_REVISION__' is not defined.  If SIREVISION
17520     is 'any', the '__SILICON_REVISION__' is defined to be '0xffff'.  If
17521     this optional SIREVISION is not used, GCC assumes the latest known
17522     silicon revision of the targeted Blackfin processor.
17523
17524     GCC defines a preprocessor macro for the specified CPU.  For the
17525     'bfin-elf' toolchain, this option causes the hardware BSP provided
17526     by libgloss to be linked in if '-msim' is not given.
17527
17528     Without this option, 'bf532' is used as the processor by default.
17529
17530     Note that support for 'bf561' is incomplete.  For 'bf561', only the
17531     preprocessor macro is defined.
17532
17533'-msim'
17534     Specifies that the program will be run on the simulator.  This
17535     causes the simulator BSP provided by libgloss to be linked in.
17536     This option has effect only for 'bfin-elf' toolchain.  Certain
17537     other options, such as '-mid-shared-library' and '-mfdpic', imply
17538     '-msim'.
17539
17540'-momit-leaf-frame-pointer'
17541     Don't keep the frame pointer in a register for leaf functions.
17542     This avoids the instructions to save, set up and restore frame
17543     pointers and makes an extra register available in leaf functions.
17544
17545'-mspecld-anomaly'
17546     When enabled, the compiler ensures that the generated code does not
17547     contain speculative loads after jump instructions.  If this option
17548     is used, '__WORKAROUND_SPECULATIVE_LOADS' is defined.
17549
17550'-mno-specld-anomaly'
17551     Don't generate extra code to prevent speculative loads from
17552     occurring.
17553
17554'-mcsync-anomaly'
17555     When enabled, the compiler ensures that the generated code does not
17556     contain CSYNC or SSYNC instructions too soon after conditional
17557     branches.  If this option is used, '__WORKAROUND_SPECULATIVE_SYNCS'
17558     is defined.
17559
17560'-mno-csync-anomaly'
17561     Don't generate extra code to prevent CSYNC or SSYNC instructions
17562     from occurring too soon after a conditional branch.
17563
17564'-mlow64k'
17565     When enabled, the compiler is free to take advantage of the
17566     knowledge that the entire program fits into the low 64k of memory.
17567
17568'-mno-low64k'
17569     Assume that the program is arbitrarily large.  This is the default.
17570
17571'-mstack-check-l1'
17572     Do stack checking using information placed into L1 scratchpad
17573     memory by the uClinux kernel.
17574
17575'-mid-shared-library'
17576     Generate code that supports shared libraries via the library ID
17577     method.  This allows for execute in place and shared libraries in
17578     an environment without virtual memory management.  This option
17579     implies '-fPIC'.  With a 'bfin-elf' target, this option implies
17580     '-msim'.
17581
17582'-mno-id-shared-library'
17583     Generate code that doesn't assume ID-based shared libraries are
17584     being used.  This is the default.
17585
17586'-mleaf-id-shared-library'
17587     Generate code that supports shared libraries via the library ID
17588     method, but assumes that this library or executable won't link
17589     against any other ID shared libraries.  That allows the compiler to
17590     use faster code for jumps and calls.
17591
17592'-mno-leaf-id-shared-library'
17593     Do not assume that the code being compiled won't link against any
17594     ID shared libraries.  Slower code is generated for jump and call
17595     insns.
17596
17597'-mshared-library-id=n'
17598     Specifies the identification number of the ID-based shared library
17599     being compiled.  Specifying a value of 0 generates more compact
17600     code; specifying other values forces the allocation of that number
17601     to the current library but is no more space- or time-efficient than
17602     omitting this option.
17603
17604'-msep-data'
17605     Generate code that allows the data segment to be located in a
17606     different area of memory from the text segment.  This allows for
17607     execute in place in an environment without virtual memory
17608     management by eliminating relocations against the text section.
17609
17610'-mno-sep-data'
17611     Generate code that assumes that the data segment follows the text
17612     segment.  This is the default.
17613
17614'-mlong-calls'
17615'-mno-long-calls'
17616     Tells the compiler to perform function calls by first loading the
17617     address of the function into a register and then performing a
17618     subroutine call on this register.  This switch is needed if the
17619     target function lies outside of the 24-bit addressing range of the
17620     offset-based version of subroutine call instruction.
17621
17622     This feature is not enabled by default.  Specifying
17623     '-mno-long-calls' restores the default behavior.  Note these
17624     switches have no effect on how the compiler generates code to
17625     handle function calls via function pointers.
17626
17627'-mfast-fp'
17628     Link with the fast floating-point library.  This library relaxes
17629     some of the IEEE floating-point standard's rules for checking
17630     inputs against Not-a-Number (NAN), in the interest of performance.
17631
17632'-minline-plt'
17633     Enable inlining of PLT entries in function calls to functions that
17634     are not known to bind locally.  It has no effect without '-mfdpic'.
17635
17636'-mmulticore'
17637     Build a standalone application for multicore Blackfin processors.
17638     This option causes proper start files and link scripts supporting
17639     multicore to be used, and defines the macro '__BFIN_MULTICORE'.  It
17640     can only be used with '-mcpu=bf561[-SIREVISION]'.
17641
17642     This option can be used with '-mcorea' or '-mcoreb', which selects
17643     the one-application-per-core programming model.  Without '-mcorea'
17644     or '-mcoreb', the single-application/dual-core programming model is
17645     used.  In this model, the main function of Core B should be named
17646     as 'coreb_main'.
17647
17648     If this option is not used, the single-core application programming
17649     model is used.
17650
17651'-mcorea'
17652     Build a standalone application for Core A of BF561 when using the
17653     one-application-per-core programming model.  Proper start files and
17654     link scripts are used to support Core A, and the macro
17655     '__BFIN_COREA' is defined.  This option can only be used in
17656     conjunction with '-mmulticore'.
17657
17658'-mcoreb'
17659     Build a standalone application for Core B of BF561 when using the
17660     one-application-per-core programming model.  Proper start files and
17661     link scripts are used to support Core B, and the macro
17662     '__BFIN_COREB' is defined.  When this option is used, 'coreb_main'
17663     should be used instead of 'main'.  This option can only be used in
17664     conjunction with '-mmulticore'.
17665
17666'-msdram'
17667     Build a standalone application for SDRAM. Proper start files and
17668     link scripts are used to put the application into SDRAM, and the
17669     macro '__BFIN_SDRAM' is defined.  The loader should initialize
17670     SDRAM before loading the application.
17671
17672'-micplb'
17673     Assume that ICPLBs are enabled at run time.  This has an effect on
17674     certain anomaly workarounds.  For Linux targets, the default is to
17675     assume ICPLBs are enabled; for standalone applications the default
17676     is off.
17677
17678
17679File: gcc.info,  Node: C6X Options,  Next: CRIS Options,  Prev: Blackfin Options,  Up: Submodel Options
17680
176813.18.8 C6X Options
17682------------------
17683
17684'-march=NAME'
17685     This specifies the name of the target architecture.  GCC uses this
17686     name to determine what kind of instructions it can emit when
17687     generating assembly code.  Permissible names are: 'c62x', 'c64x',
17688     'c64x+', 'c67x', 'c67x+', 'c674x'.
17689
17690'-mbig-endian'
17691     Generate code for a big-endian target.
17692
17693'-mlittle-endian'
17694     Generate code for a little-endian target.  This is the default.
17695
17696'-msim'
17697     Choose startup files and linker script suitable for the simulator.
17698
17699'-msdata=default'
17700     Put small global and static data in the '.neardata' section, which
17701     is pointed to by register 'B14'.  Put small uninitialized global
17702     and static data in the '.bss' section, which is adjacent to the
17703     '.neardata' section.  Put small read-only data into the '.rodata'
17704     section.  The corresponding sections used for large pieces of data
17705     are '.fardata', '.far' and '.const'.
17706
17707'-msdata=all'
17708     Put all data, not just small objects, into the sections reserved
17709     for small data, and use addressing relative to the 'B14' register
17710     to access them.
17711
17712'-msdata=none'
17713     Make no use of the sections reserved for small data, and use
17714     absolute addresses to access all data.  Put all initialized global
17715     and static data in the '.fardata' section, and all uninitialized
17716     data in the '.far' section.  Put all constant data into the
17717     '.const' section.
17718
17719
17720File: gcc.info,  Node: CRIS Options,  Next: CR16 Options,  Prev: C6X Options,  Up: Submodel Options
17721
177223.18.9 CRIS Options
17723-------------------
17724
17725These options are defined specifically for the CRIS ports.
17726
17727'-march=ARCHITECTURE-TYPE'
17728'-mcpu=ARCHITECTURE-TYPE'
17729     Generate code for the specified architecture.  The choices for
17730     ARCHITECTURE-TYPE are 'v3', 'v8' and 'v10' for respectively
17731     ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is 'v0' except for
17732     cris-axis-linux-gnu, where the default is 'v10'.
17733
17734'-mtune=ARCHITECTURE-TYPE'
17735     Tune to ARCHITECTURE-TYPE everything applicable about the generated
17736     code, except for the ABI and the set of available instructions.
17737     The choices for ARCHITECTURE-TYPE are the same as for
17738     '-march=ARCHITECTURE-TYPE'.
17739
17740'-mmax-stack-frame=N'
17741     Warn when the stack frame of a function exceeds N bytes.
17742
17743'-metrax4'
17744'-metrax100'
17745     The options '-metrax4' and '-metrax100' are synonyms for
17746     '-march=v3' and '-march=v8' respectively.
17747
17748'-mmul-bug-workaround'
17749'-mno-mul-bug-workaround'
17750     Work around a bug in the 'muls' and 'mulu' instructions for CPU
17751     models where it applies.  This option is active by default.
17752
17753'-mpdebug'
17754     Enable CRIS-specific verbose debug-related information in the
17755     assembly code.  This option also has the effect of turning off the
17756     '#NO_APP' formatted-code indicator to the assembler at the
17757     beginning of the assembly file.
17758
17759'-mcc-init'
17760     Do not use condition-code results from previous instruction; always
17761     emit compare and test instructions before use of condition codes.
17762
17763'-mno-side-effects'
17764     Do not emit instructions with side effects in addressing modes
17765     other than post-increment.
17766
17767'-mstack-align'
17768'-mno-stack-align'
17769'-mdata-align'
17770'-mno-data-align'
17771'-mconst-align'
17772'-mno-const-align'
17773     These options ('no-' options) arrange (eliminate arrangements) for
17774     the stack frame, individual data and constants to be aligned for
17775     the maximum single data access size for the chosen CPU model.  The
17776     default is to arrange for 32-bit alignment.  ABI details such as
17777     structure layout are not affected by these options.
17778
17779'-m32-bit'
17780'-m16-bit'
17781'-m8-bit'
17782     Similar to the stack- data- and const-align options above, these
17783     options arrange for stack frame, writable data and constants to all
17784     be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
17785     alignment.
17786
17787'-mno-prologue-epilogue'
17788'-mprologue-epilogue'
17789     With '-mno-prologue-epilogue', the normal function prologue and
17790     epilogue which set up the stack frame are omitted and no return
17791     instructions or return sequences are generated in the code.  Use
17792     this option only together with visual inspection of the compiled
17793     code: no warnings or errors are generated when call-saved registers
17794     must be saved, or storage for local variables needs to be
17795     allocated.
17796
17797'-mno-gotplt'
17798'-mgotplt'
17799     With '-fpic' and '-fPIC', don't generate (do generate) instruction
17800     sequences that load addresses for functions from the PLT part of
17801     the GOT rather than (traditional on other architectures) calls to
17802     the PLT.  The default is '-mgotplt'.
17803
17804'-melf'
17805     Legacy no-op option only recognized with the cris-axis-elf and
17806     cris-axis-linux-gnu targets.
17807
17808'-mlinux'
17809     Legacy no-op option only recognized with the cris-axis-linux-gnu
17810     target.
17811
17812'-sim'
17813     This option, recognized for the cris-axis-elf, arranges to link
17814     with input-output functions from a simulator library.  Code,
17815     initialized data and zero-initialized data are allocated
17816     consecutively.
17817
17818'-sim2'
17819     Like '-sim', but pass linker options to locate initialized data at
17820     0x40000000 and zero-initialized data at 0x80000000.
17821
17822
17823File: gcc.info,  Node: CR16 Options,  Next: C-SKY Options,  Prev: CRIS Options,  Up: Submodel Options
17824
178253.18.10 CR16 Options
17826--------------------
17827
17828These options are defined specifically for the CR16 ports.
17829
17830'-mmac'
17831     Enable the use of multiply-accumulate instructions.  Disabled by
17832     default.
17833
17834'-mcr16cplus'
17835'-mcr16c'
17836     Generate code for CR16C or CR16C+ architecture.  CR16C+
17837     architecture is default.
17838
17839'-msim'
17840     Links the library libsim.a which is in compatible with simulator.
17841     Applicable to ELF compiler only.
17842
17843'-mint32'
17844     Choose integer type as 32-bit wide.
17845
17846'-mbit-ops'
17847     Generates 'sbit'/'cbit' instructions for bit manipulations.
17848
17849'-mdata-model=MODEL'
17850     Choose a data model.  The choices for MODEL are 'near', 'far' or
17851     'medium'.  'medium' is default.  However, 'far' is not valid with
17852     '-mcr16c', as the CR16C architecture does not support the far data
17853     model.
17854
17855
17856File: gcc.info,  Node: C-SKY Options,  Next: Darwin Options,  Prev: CR16 Options,  Up: Submodel Options
17857
178583.18.11 C-SKY Options
17859---------------------
17860
17861GCC supports these options when compiling for C-SKY V2 processors.
17862
17863'-march=ARCH'
17864     Specify the C-SKY target architecture.  Valid values for ARCH are:
17865     'ck801', 'ck802', 'ck803', 'ck807', and 'ck810'.  The default is
17866     'ck810'.
17867
17868'-mcpu=CPU'
17869     Specify the C-SKY target processor.  Valid values for CPU are:
17870     'ck801', 'ck801t', 'ck802', 'ck802t', 'ck802j', 'ck803', 'ck803h',
17871     'ck803t', 'ck803ht', 'ck803f', 'ck803fh', 'ck803e', 'ck803eh',
17872     'ck803et', 'ck803eht', 'ck803ef', 'ck803efh', 'ck803ft',
17873     'ck803eft', 'ck803efht', 'ck803r1', 'ck803hr1', 'ck803tr1',
17874     'ck803htr1', 'ck803fr1', 'ck803fhr1', 'ck803er1', 'ck803ehr1',
17875     'ck803etr1', 'ck803ehtr1', 'ck803efr1', 'ck803efhr1', 'ck803ftr1',
17876     'ck803eftr1', 'ck803efhtr1', 'ck803s', 'ck803st', 'ck803se',
17877     'ck803sf', 'ck803sef', 'ck803seft', 'ck807e', 'ck807ef', 'ck807',
17878     'ck807f', 'ck810e', 'ck810et', 'ck810ef', 'ck810eft', 'ck810',
17879     'ck810v', 'ck810f', 'ck810t', 'ck810fv', 'ck810tv', 'ck810ft', and
17880     'ck810ftv'.
17881
17882'-mbig-endian'
17883'-EB'
17884'-mlittle-endian'
17885'-EL'
17886
17887     Select big- or little-endian code.  The default is little-endian.
17888
17889'-mhard-float'
17890'-msoft-float'
17891
17892     Select hardware or software floating-point implementations.  The
17893     default is soft float.
17894
17895'-mdouble-float'
17896'-mno-double-float'
17897     When '-mhard-float' is in effect, enable generation of
17898     double-precision float instructions.  This is the default except
17899     when compiling for CK803.
17900
17901'-mfdivdu'
17902'-mno-fdivdu'
17903     When '-mhard-float' is in effect, enable generation of 'frecipd',
17904     'fsqrtd', and 'fdivd' instructions.  This is the default except
17905     when compiling for CK803.
17906
17907'-mfpu=FPU'
17908     Select the floating-point processor.  This option can only be used
17909     with '-mhard-float'.  Values for FPU are 'fpv2_sf' (equivalent to
17910     '-mno-double-float -mno-fdivdu'), 'fpv2' ('-mdouble-float
17911     -mno-divdu'), and 'fpv2_divd' ('-mdouble-float -mdivdu').
17912
17913'-melrw'
17914'-mno-elrw'
17915     Enable the extended 'lrw' instruction.  This option defaults to on
17916     for CK801 and off otherwise.
17917
17918'-mistack'
17919'-mno-istack'
17920     Enable interrupt stack instructions; the default is off.
17921
17922     The '-mistack' option is required to handle the 'interrupt' and
17923     'isr' function attributes (*note C-SKY Function Attributes::).
17924
17925'-mmp'
17926     Enable multiprocessor instructions; the default is off.
17927
17928'-mcp'
17929     Enable coprocessor instructions; the default is off.
17930
17931'-mcache'
17932     Enable coprocessor instructions; the default is off.
17933
17934'-msecurity'
17935     Enable C-SKY security instructions; the default is off.
17936
17937'-mtrust'
17938     Enable C-SKY trust instructions; the default is off.
17939
17940'-mdsp'
17941'-medsp'
17942'-mvdsp'
17943     Enable C-SKY DSP, Enhanced DSP, or Vector DSP instructions,
17944     respectively.  All of these options default to off.
17945
17946'-mdiv'
17947'-mno-div'
17948     Generate divide instructions.  Default is off.
17949
17950'-msmart'
17951'-mno-smart'
17952     Generate code for Smart Mode, using only registers numbered 0-7 to
17953     allow use of 16-bit instructions.  This option is ignored for CK801
17954     where this is the required behavior, and it defaults to on for
17955     CK802.  For other targets, the default is off.
17956
17957'-mhigh-registers'
17958'-mno-high-registers'
17959     Generate code using the high registers numbered 16-31.  This option
17960     is not supported on CK801, CK802, or CK803, and is enabled by
17961     default for other processors.
17962
17963'-manchor'
17964'-mno-anchor'
17965     Generate code using global anchor symbol addresses.
17966
17967'-mpushpop'
17968'-mno-pushpop'
17969     Generate code using 'push' and 'pop' instructions.  This option
17970     defaults to on.
17971
17972'-mmultiple-stld'
17973'-mstm'
17974'-mno-multiple-stld'
17975'-mno-stm'
17976     Generate code using 'stm' and 'ldm' instructions.  This option
17977     isn't supported on CK801 but is enabled by default on other
17978     processors.
17979
17980'-mconstpool'
17981'-mno-constpool'
17982     Create constant pools in the compiler instead of deferring it to
17983     the assembler.  This option is the default and required for correct
17984     code generation on CK801 and CK802, and is optional on other
17985     processors.
17986
17987'-mstack-size'
17988'-mno-stack-size'
17989     Emit '.stack_size' directives for each function in the assembly
17990     output.  This option defaults to off.
17991
17992'-mccrt'
17993'-mno-ccrt'
17994     Generate code for the C-SKY compiler runtime instead of libgcc.
17995     This option defaults to off.
17996
17997'-mbranch-cost=N'
17998     Set the branch costs to roughly 'n' instructions.  The default is
17999     1.
18000
18001'-msched-prolog'
18002'-mno-sched-prolog'
18003     Permit scheduling of function prologue and epilogue sequences.
18004     Using this option can result in code that is not compliant with the
18005     C-SKY V2 ABI prologue requirements and that cannot be debugged or
18006     backtraced.  It is disabled by default.
18007
18008
18009File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: C-SKY Options,  Up: Submodel Options
18010
180113.18.12 Darwin Options
18012----------------------
18013
18014These options are defined for all architectures running the Darwin
18015operating system.
18016
18017 FSF GCC on Darwin does not create "fat" object files; it creates an
18018object file for the single architecture that GCC was built to target.
18019Apple's GCC on Darwin does create "fat" files if multiple '-arch'
18020options are used; it does so by running the compiler or linker multiple
18021times and joining the results together with 'lipo'.
18022
18023 The subtype of the file created (like 'ppc7400' or 'ppc970' or 'i686')
18024is determined by the flags that specify the ISA that GCC is targeting,
18025like '-mcpu' or '-march'.  The '-force_cpusubtype_ALL' option can be
18026used to override this.
18027
18028 The Darwin tools vary in their behavior when presented with an ISA
18029mismatch.  The assembler, 'as', only permits instructions to be used
18030that are valid for the subtype of the file it is generating, so you
18031cannot put 64-bit instructions in a 'ppc750' object file.  The linker
18032for shared libraries, '/usr/bin/libtool', fails and prints an error if
18033asked to create a shared library with a less restrictive subtype than
18034its input files (for instance, trying to put a 'ppc970' object file in a
18035'ppc7400' library).  The linker for executables, 'ld', quietly gives the
18036executable the most restrictive subtype of any of its input files.
18037
18038'-FDIR'
18039     Add the framework directory DIR to the head of the list of
18040     directories to be searched for header files.  These directories are
18041     interleaved with those specified by '-I' options and are scanned in
18042     a left-to-right order.
18043
18044     A framework directory is a directory with frameworks in it.  A
18045     framework is a directory with a 'Headers' and/or 'PrivateHeaders'
18046     directory contained directly in it that ends in '.framework'.  The
18047     name of a framework is the name of this directory excluding the
18048     '.framework'.  Headers associated with the framework are found in
18049     one of those two directories, with 'Headers' being searched first.
18050     A subframework is a framework directory that is in a framework's
18051     'Frameworks' directory.  Includes of subframework headers can only
18052     appear in a header of a framework that contains the subframework,
18053     or in a sibling subframework header.  Two subframeworks are
18054     siblings if they occur in the same framework.  A subframework
18055     should not have the same name as a framework; a warning is issued
18056     if this is violated.  Currently a subframework cannot have
18057     subframeworks; in the future, the mechanism may be extended to
18058     support this.  The standard frameworks can be found in
18059     '/System/Library/Frameworks' and '/Library/Frameworks'.  An example
18060     include looks like '#include <Framework/header.h>', where
18061     'Framework' denotes the name of the framework and 'header.h' is
18062     found in the 'PrivateHeaders' or 'Headers' directory.
18063
18064'-iframeworkDIR'
18065     Like '-F' except the directory is a treated as a system directory.
18066     The main difference between this '-iframework' and '-F' is that
18067     with '-iframework' the compiler does not warn about constructs
18068     contained within header files found via DIR.  This option is valid
18069     only for the C family of languages.
18070
18071'-gused'
18072     Emit debugging information for symbols that are used.  For stabs
18073     debugging format, this enables '-feliminate-unused-debug-symbols'.
18074     This is by default ON.
18075
18076'-gfull'
18077     Emit debugging information for all symbols and types.
18078
18079'-mmacosx-version-min=VERSION'
18080     The earliest version of MacOS X that this executable will run on is
18081     VERSION.  Typical values of VERSION include '10.1', '10.2', and
18082     '10.3.9'.
18083
18084     If the compiler was built to use the system's headers by default,
18085     then the default for this option is the system version on which the
18086     compiler is running, otherwise the default is to make choices that
18087     are compatible with as many systems and code bases as possible.
18088
18089'-mkernel'
18090     Enable kernel development mode.  The '-mkernel' option sets
18091     '-static', '-fno-common', '-fno-use-cxa-atexit', '-fno-exceptions',
18092     '-fno-non-call-exceptions', '-fapple-kext', '-fno-weak' and
18093     '-fno-rtti' where applicable.  This mode also sets '-mno-altivec',
18094     '-msoft-float', '-fno-builtin' and '-mlong-branch' for PowerPC
18095     targets.
18096
18097'-mone-byte-bool'
18098     Override the defaults for 'bool' so that 'sizeof(bool)==1'.  By
18099     default 'sizeof(bool)' is '4' when compiling for Darwin/PowerPC and
18100     '1' when compiling for Darwin/x86, so this option has no effect on
18101     x86.
18102
18103     *Warning:* The '-mone-byte-bool' switch causes GCC to generate code
18104     that is not binary compatible with code generated without that
18105     switch.  Using this switch may require recompiling all other
18106     modules in a program, including system libraries.  Use this switch
18107     to conform to a non-default data model.
18108
18109'-mfix-and-continue'
18110'-ffix-and-continue'
18111'-findirect-data'
18112     Generate code suitable for fast turnaround development, such as to
18113     allow GDB to dynamically load '.o' files into already-running
18114     programs.  '-findirect-data' and '-ffix-and-continue' are provided
18115     for backwards compatibility.
18116
18117'-all_load'
18118     Loads all members of static archive libraries.  See man ld(1) for
18119     more information.
18120
18121'-arch_errors_fatal'
18122     Cause the errors having to do with files that have the wrong
18123     architecture to be fatal.
18124
18125'-bind_at_load'
18126     Causes the output file to be marked such that the dynamic linker
18127     will bind all undefined references when the file is loaded or
18128     launched.
18129
18130'-bundle'
18131     Produce a Mach-o bundle format file.  See man ld(1) for more
18132     information.
18133
18134'-bundle_loader EXECUTABLE'
18135     This option specifies the EXECUTABLE that will load the build
18136     output file being linked.  See man ld(1) for more information.
18137
18138'-dynamiclib'
18139     When passed this option, GCC produces a dynamic library instead of
18140     an executable when linking, using the Darwin 'libtool' command.
18141
18142'-force_cpusubtype_ALL'
18143     This causes GCC's output file to have the 'ALL' subtype, instead of
18144     one controlled by the '-mcpu' or '-march' option.
18145
18146'-allowable_client CLIENT_NAME'
18147'-client_name'
18148'-compatibility_version'
18149'-current_version'
18150'-dead_strip'
18151'-dependency-file'
18152'-dylib_file'
18153'-dylinker_install_name'
18154'-dynamic'
18155'-exported_symbols_list'
18156'-filelist'
18157'-flat_namespace'
18158'-force_flat_namespace'
18159'-headerpad_max_install_names'
18160'-image_base'
18161'-init'
18162'-install_name'
18163'-keep_private_externs'
18164'-multi_module'
18165'-multiply_defined'
18166'-multiply_defined_unused'
18167'-noall_load'
18168'-no_dead_strip_inits_and_terms'
18169'-nofixprebinding'
18170'-nomultidefs'
18171'-noprebind'
18172'-noseglinkedit'
18173'-pagezero_size'
18174'-prebind'
18175'-prebind_all_twolevel_modules'
18176'-private_bundle'
18177'-read_only_relocs'
18178'-sectalign'
18179'-sectobjectsymbols'
18180'-whyload'
18181'-seg1addr'
18182'-sectcreate'
18183'-sectobjectsymbols'
18184'-sectorder'
18185'-segaddr'
18186'-segs_read_only_addr'
18187'-segs_read_write_addr'
18188'-seg_addr_table'
18189'-seg_addr_table_filename'
18190'-seglinkedit'
18191'-segprot'
18192'-segs_read_only_addr'
18193'-segs_read_write_addr'
18194'-single_module'
18195'-static'
18196'-sub_library'
18197'-sub_umbrella'
18198'-twolevel_namespace'
18199'-umbrella'
18200'-undefined'
18201'-unexported_symbols_list'
18202'-weak_reference_mismatches'
18203'-whatsloaded'
18204     These options are passed to the Darwin linker.  The Darwin linker
18205     man page describes them in detail.
18206
18207
18208File: gcc.info,  Node: DEC Alpha Options,  Next: FR30 Options,  Prev: Darwin Options,  Up: Submodel Options
18209
182103.18.13 DEC Alpha Options
18211-------------------------
18212
18213These '-m' options are defined for the DEC Alpha implementations:
18214
18215'-mno-soft-float'
18216'-msoft-float'
18217     Use (do not use) the hardware floating-point instructions for
18218     floating-point operations.  When '-msoft-float' is specified,
18219     functions in 'libgcc.a' are used to perform floating-point
18220     operations.  Unless they are replaced by routines that emulate the
18221     floating-point operations, or compiled in such a way as to call
18222     such emulations routines, these routines issue floating-point
18223     operations.  If you are compiling for an Alpha without
18224     floating-point operations, you must ensure that the library is
18225     built so as not to call them.
18226
18227     Note that Alpha implementations without floating-point operations
18228     are required to have floating-point registers.
18229
18230'-mfp-reg'
18231'-mno-fp-regs'
18232     Generate code that uses (does not use) the floating-point register
18233     set.  '-mno-fp-regs' implies '-msoft-float'.  If the floating-point
18234     register set is not used, floating-point operands are passed in
18235     integer registers as if they were integers and floating-point
18236     results are passed in '$0' instead of '$f0'.  This is a
18237     non-standard calling sequence, so any function with a
18238     floating-point argument or return value called by code compiled
18239     with '-mno-fp-regs' must also be compiled with that option.
18240
18241     A typical use of this option is building a kernel that does not
18242     use, and hence need not save and restore, any floating-point
18243     registers.
18244
18245'-mieee'
18246     The Alpha architecture implements floating-point hardware optimized
18247     for maximum performance.  It is mostly compliant with the IEEE
18248     floating-point standard.  However, for full compliance, software
18249     assistance is required.  This option generates code fully
18250     IEEE-compliant code _except_ that the INEXACT-FLAG is not
18251     maintained (see below).  If this option is turned on, the
18252     preprocessor macro '_IEEE_FP' is defined during compilation.  The
18253     resulting code is less efficient but is able to correctly support
18254     denormalized numbers and exceptional IEEE values such as
18255     not-a-number and plus/minus infinity.  Other Alpha compilers call
18256     this option '-ieee_with_no_inexact'.
18257
18258'-mieee-with-inexact'
18259     This is like '-mieee' except the generated code also maintains the
18260     IEEE INEXACT-FLAG.  Turning on this option causes the generated
18261     code to implement fully-compliant IEEE math.  In addition to
18262     '_IEEE_FP', '_IEEE_FP_EXACT' is defined as a preprocessor macro.
18263     On some Alpha implementations the resulting code may execute
18264     significantly slower than the code generated by default.  Since
18265     there is very little code that depends on the INEXACT-FLAG, you
18266     should normally not specify this option.  Other Alpha compilers
18267     call this option '-ieee_with_inexact'.
18268
18269'-mfp-trap-mode=TRAP-MODE'
18270     This option controls what floating-point related traps are enabled.
18271     Other Alpha compilers call this option '-fptm TRAP-MODE'.  The trap
18272     mode can be set to one of four values:
18273
18274     'n'
18275          This is the default (normal) setting.  The only traps that are
18276          enabled are the ones that cannot be disabled in software
18277          (e.g., division by zero trap).
18278
18279     'u'
18280          In addition to the traps enabled by 'n', underflow traps are
18281          enabled as well.
18282
18283     'su'
18284          Like 'u', but the instructions are marked to be safe for
18285          software completion (see Alpha architecture manual for
18286          details).
18287
18288     'sui'
18289          Like 'su', but inexact traps are enabled as well.
18290
18291'-mfp-rounding-mode=ROUNDING-MODE'
18292     Selects the IEEE rounding mode.  Other Alpha compilers call this
18293     option '-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
18294
18295     'n'
18296          Normal IEEE rounding mode.  Floating-point numbers are rounded
18297          towards the nearest machine number or towards the even machine
18298          number in case of a tie.
18299
18300     'm'
18301          Round towards minus infinity.
18302
18303     'c'
18304          Chopped rounding mode.  Floating-point numbers are rounded
18305          towards zero.
18306
18307     'd'
18308          Dynamic rounding mode.  A field in the floating-point control
18309          register (FPCR, see Alpha architecture reference manual)
18310          controls the rounding mode in effect.  The C library
18311          initializes this register for rounding towards plus infinity.
18312          Thus, unless your program modifies the FPCR, 'd' corresponds
18313          to round towards plus infinity.
18314
18315'-mtrap-precision=TRAP-PRECISION'
18316     In the Alpha architecture, floating-point traps are imprecise.
18317     This means without software assistance it is impossible to recover
18318     from a floating trap and program execution normally needs to be
18319     terminated.  GCC can generate code that can assist operating system
18320     trap handlers in determining the exact location that caused a
18321     floating-point trap.  Depending on the requirements of an
18322     application, different levels of precisions can be selected:
18323
18324     'p'
18325          Program precision.  This option is the default and means a
18326          trap handler can only identify which program caused a
18327          floating-point exception.
18328
18329     'f'
18330          Function precision.  The trap handler can determine the
18331          function that caused a floating-point exception.
18332
18333     'i'
18334          Instruction precision.  The trap handler can determine the
18335          exact instruction that caused a floating-point exception.
18336
18337     Other Alpha compilers provide the equivalent options called
18338     '-scope_safe' and '-resumption_safe'.
18339
18340'-mieee-conformant'
18341     This option marks the generated code as IEEE conformant.  You must
18342     not use this option unless you also specify '-mtrap-precision=i'
18343     and either '-mfp-trap-mode=su' or '-mfp-trap-mode=sui'.  Its only
18344     effect is to emit the line '.eflag 48' in the function prologue of
18345     the generated assembly file.
18346
18347'-mbuild-constants'
18348     Normally GCC examines a 32- or 64-bit integer constant to see if it
18349     can construct it from smaller constants in two or three
18350     instructions.  If it cannot, it outputs the constant as a literal
18351     and generates code to load it from the data segment at run time.
18352
18353     Use this option to require GCC to construct _all_ integer constants
18354     using code, even if it takes more instructions (the maximum is
18355     six).
18356
18357     You typically use this option to build a shared library dynamic
18358     loader.  Itself a shared library, it must relocate itself in memory
18359     before it can find the variables and constants in its own data
18360     segment.
18361
18362'-mbwx'
18363'-mno-bwx'
18364'-mcix'
18365'-mno-cix'
18366'-mfix'
18367'-mno-fix'
18368'-mmax'
18369'-mno-max'
18370     Indicate whether GCC should generate code to use the optional BWX,
18371     CIX, FIX and MAX instruction sets.  The default is to use the
18372     instruction sets supported by the CPU type specified via '-mcpu='
18373     option or that of the CPU on which GCC was built if none is
18374     specified.
18375
18376'-mfloat-vax'
18377'-mfloat-ieee'
18378     Generate code that uses (does not use) VAX F and G floating-point
18379     arithmetic instead of IEEE single and double precision.
18380
18381'-mexplicit-relocs'
18382'-mno-explicit-relocs'
18383     Older Alpha assemblers provided no way to generate symbol
18384     relocations except via assembler macros.  Use of these macros does
18385     not allow optimal instruction scheduling.  GNU binutils as of
18386     version 2.12 supports a new syntax that allows the compiler to
18387     explicitly mark which relocations should apply to which
18388     instructions.  This option is mostly useful for debugging, as GCC
18389     detects the capabilities of the assembler when it is built and sets
18390     the default accordingly.
18391
18392'-msmall-data'
18393'-mlarge-data'
18394     When '-mexplicit-relocs' is in effect, static data is accessed via
18395     "gp-relative" relocations.  When '-msmall-data' is used, objects 8
18396     bytes long or smaller are placed in a "small data area" (the
18397     '.sdata' and '.sbss' sections) and are accessed via 16-bit
18398     relocations off of the '$gp' register.  This limits the size of the
18399     small data area to 64KB, but allows the variables to be directly
18400     accessed via a single instruction.
18401
18402     The default is '-mlarge-data'.  With this option the data area is
18403     limited to just below 2GB.  Programs that require more than 2GB of
18404     data must use 'malloc' or 'mmap' to allocate the data in the heap
18405     instead of in the program's data segment.
18406
18407     When generating code for shared libraries, '-fpic' implies
18408     '-msmall-data' and '-fPIC' implies '-mlarge-data'.
18409
18410'-msmall-text'
18411'-mlarge-text'
18412     When '-msmall-text' is used, the compiler assumes that the code of
18413     the entire program (or shared library) fits in 4MB, and is thus
18414     reachable with a branch instruction.  When '-msmall-data' is used,
18415     the compiler can assume that all local symbols share the same '$gp'
18416     value, and thus reduce the number of instructions required for a
18417     function call from 4 to 1.
18418
18419     The default is '-mlarge-text'.
18420
18421'-mcpu=CPU_TYPE'
18422     Set the instruction set and instruction scheduling parameters for
18423     machine type CPU_TYPE.  You can specify either the 'EV' style name
18424     or the corresponding chip number.  GCC supports scheduling
18425     parameters for the EV4, EV5 and EV6 family of processors and
18426     chooses the default values for the instruction set from the
18427     processor you specify.  If you do not specify a processor type, GCC
18428     defaults to the processor on which the compiler was built.
18429
18430     Supported values for CPU_TYPE are
18431
18432     'ev4'
18433     'ev45'
18434     '21064'
18435          Schedules as an EV4 and has no instruction set extensions.
18436
18437     'ev5'
18438     '21164'
18439          Schedules as an EV5 and has no instruction set extensions.
18440
18441     'ev56'
18442     '21164a'
18443          Schedules as an EV5 and supports the BWX extension.
18444
18445     'pca56'
18446     '21164pc'
18447     '21164PC'
18448          Schedules as an EV5 and supports the BWX and MAX extensions.
18449
18450     'ev6'
18451     '21264'
18452          Schedules as an EV6 and supports the BWX, FIX, and MAX
18453          extensions.
18454
18455     'ev67'
18456     '21264a'
18457          Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
18458          extensions.
18459
18460     Native toolchains also support the value 'native', which selects
18461     the best architecture option for the host processor.
18462     '-mcpu=native' has no effect if GCC does not recognize the
18463     processor.
18464
18465'-mtune=CPU_TYPE'
18466     Set only the instruction scheduling parameters for machine type
18467     CPU_TYPE.  The instruction set is not changed.
18468
18469     Native toolchains also support the value 'native', which selects
18470     the best architecture option for the host processor.
18471     '-mtune=native' has no effect if GCC does not recognize the
18472     processor.
18473
18474'-mmemory-latency=TIME'
18475     Sets the latency the scheduler should assume for typical memory
18476     references as seen by the application.  This number is highly
18477     dependent on the memory access patterns used by the application and
18478     the size of the external cache on the machine.
18479
18480     Valid options for TIME are
18481
18482     'NUMBER'
18483          A decimal number representing clock cycles.
18484
18485     'L1'
18486     'L2'
18487     'L3'
18488     'main'
18489          The compiler contains estimates of the number of clock cycles
18490          for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
18491          (also called Dcache, Scache, and Bcache), as well as to main
18492          memory.  Note that L3 is only valid for EV5.
18493
18494
18495File: gcc.info,  Node: FR30 Options,  Next: FT32 Options,  Prev: DEC Alpha Options,  Up: Submodel Options
18496
184973.18.14 FR30 Options
18498--------------------
18499
18500These options are defined specifically for the FR30 port.
18501
18502'-msmall-model'
18503     Use the small address space model.  This can produce smaller code,
18504     but it does assume that all symbolic values and addresses fit into
18505     a 20-bit range.
18506
18507'-mno-lsim'
18508     Assume that runtime support has been provided and so there is no
18509     need to include the simulator library ('libsim.a') on the linker
18510     command line.
18511
18512
18513File: gcc.info,  Node: FT32 Options,  Next: FRV Options,  Prev: FR30 Options,  Up: Submodel Options
18514
185153.18.15 FT32 Options
18516--------------------
18517
18518These options are defined specifically for the FT32 port.
18519
18520'-msim'
18521     Specifies that the program will be run on the simulator.  This
18522     causes an alternate runtime startup and library to be linked.  You
18523     must not use this option when generating programs that will run on
18524     real hardware; you must provide your own runtime library for
18525     whatever I/O functions are needed.
18526
18527'-mlra'
18528     Enable Local Register Allocation.  This is still experimental for
18529     FT32, so by default the compiler uses standard reload.
18530
18531'-mnodiv'
18532     Do not use div and mod instructions.
18533
18534'-mft32b'
18535     Enable use of the extended instructions of the FT32B processor.
18536
18537'-mcompress'
18538     Compress all code using the Ft32B code compression scheme.
18539
18540'-mnopm'
18541     Do not generate code that reads program memory.
18542
18543
18544File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FT32 Options,  Up: Submodel Options
18545
185463.18.16 FRV Options
18547-------------------
18548
18549'-mgpr-32'
18550
18551     Only use the first 32 general-purpose registers.
18552
18553'-mgpr-64'
18554
18555     Use all 64 general-purpose registers.
18556
18557'-mfpr-32'
18558
18559     Use only the first 32 floating-point registers.
18560
18561'-mfpr-64'
18562
18563     Use all 64 floating-point registers.
18564
18565'-mhard-float'
18566
18567     Use hardware instructions for floating-point operations.
18568
18569'-msoft-float'
18570
18571     Use library routines for floating-point operations.
18572
18573'-malloc-cc'
18574
18575     Dynamically allocate condition code registers.
18576
18577'-mfixed-cc'
18578
18579     Do not try to dynamically allocate condition code registers, only
18580     use 'icc0' and 'fcc0'.
18581
18582'-mdword'
18583
18584     Change ABI to use double word insns.
18585
18586'-mno-dword'
18587
18588     Do not use double word instructions.
18589
18590'-mdouble'
18591
18592     Use floating-point double instructions.
18593
18594'-mno-double'
18595
18596     Do not use floating-point double instructions.
18597
18598'-mmedia'
18599
18600     Use media instructions.
18601
18602'-mno-media'
18603
18604     Do not use media instructions.
18605
18606'-mmuladd'
18607
18608     Use multiply and add/subtract instructions.
18609
18610'-mno-muladd'
18611
18612     Do not use multiply and add/subtract instructions.
18613
18614'-mfdpic'
18615
18616     Select the FDPIC ABI, which uses function descriptors to represent
18617     pointers to functions.  Without any PIC/PIE-related options, it
18618     implies '-fPIE'.  With '-fpic' or '-fpie', it assumes GOT entries
18619     and small data are within a 12-bit range from the GOT base address;
18620     with '-fPIC' or '-fPIE', GOT offsets are computed with 32 bits.
18621     With a 'bfin-elf' target, this option implies '-msim'.
18622
18623'-minline-plt'
18624
18625     Enable inlining of PLT entries in function calls to functions that
18626     are not known to bind locally.  It has no effect without '-mfdpic'.
18627     It's enabled by default if optimizing for speed and compiling for
18628     shared libraries (i.e., '-fPIC' or '-fpic'), or when an
18629     optimization option such as '-O3' or above is present in the
18630     command line.
18631
18632'-mTLS'
18633
18634     Assume a large TLS segment when generating thread-local code.
18635
18636'-mtls'
18637
18638     Do not assume a large TLS segment when generating thread-local
18639     code.
18640
18641'-mgprel-ro'
18642
18643     Enable the use of 'GPREL' relocations in the FDPIC ABI for data
18644     that is known to be in read-only sections.  It's enabled by
18645     default, except for '-fpic' or '-fpie': even though it may help
18646     make the global offset table smaller, it trades 1 instruction for
18647     4.  With '-fPIC' or '-fPIE', it trades 3 instructions for 4, one of
18648     which may be shared by multiple symbols, and it avoids the need for
18649     a GOT entry for the referenced symbol, so it's more likely to be a
18650     win.  If it is not, '-mno-gprel-ro' can be used to disable it.
18651
18652'-multilib-library-pic'
18653
18654     Link with the (library, not FD) pic libraries.  It's implied by
18655     '-mlibrary-pic', as well as by '-fPIC' and '-fpic' without
18656     '-mfdpic'.  You should never have to use it explicitly.
18657
18658'-mlinked-fp'
18659
18660     Follow the EABI requirement of always creating a frame pointer
18661     whenever a stack frame is allocated.  This option is enabled by
18662     default and can be disabled with '-mno-linked-fp'.
18663
18664'-mlong-calls'
18665
18666     Use indirect addressing to call functions outside the current
18667     compilation unit.  This allows the functions to be placed anywhere
18668     within the 32-bit address space.
18669
18670'-malign-labels'
18671
18672     Try to align labels to an 8-byte boundary by inserting NOPs into
18673     the previous packet.  This option only has an effect when VLIW
18674     packing is enabled.  It doesn't create new packets; it merely adds
18675     NOPs to existing ones.
18676
18677'-mlibrary-pic'
18678
18679     Generate position-independent EABI code.
18680
18681'-macc-4'
18682
18683     Use only the first four media accumulator registers.
18684
18685'-macc-8'
18686
18687     Use all eight media accumulator registers.
18688
18689'-mpack'
18690
18691     Pack VLIW instructions.
18692
18693'-mno-pack'
18694
18695     Do not pack VLIW instructions.
18696
18697'-mno-eflags'
18698
18699     Do not mark ABI switches in e_flags.
18700
18701'-mcond-move'
18702
18703     Enable the use of conditional-move instructions (default).
18704
18705     This switch is mainly for debugging the compiler and will likely be
18706     removed in a future version.
18707
18708'-mno-cond-move'
18709
18710     Disable the use of conditional-move instructions.
18711
18712     This switch is mainly for debugging the compiler and will likely be
18713     removed in a future version.
18714
18715'-mscc'
18716
18717     Enable the use of conditional set instructions (default).
18718
18719     This switch is mainly for debugging the compiler and will likely be
18720     removed in a future version.
18721
18722'-mno-scc'
18723
18724     Disable the use of conditional set instructions.
18725
18726     This switch is mainly for debugging the compiler and will likely be
18727     removed in a future version.
18728
18729'-mcond-exec'
18730
18731     Enable the use of conditional execution (default).
18732
18733     This switch is mainly for debugging the compiler and will likely be
18734     removed in a future version.
18735
18736'-mno-cond-exec'
18737
18738     Disable the use of conditional execution.
18739
18740     This switch is mainly for debugging the compiler and will likely be
18741     removed in a future version.
18742
18743'-mvliw-branch'
18744
18745     Run a pass to pack branches into VLIW instructions (default).
18746
18747     This switch is mainly for debugging the compiler and will likely be
18748     removed in a future version.
18749
18750'-mno-vliw-branch'
18751
18752     Do not run a pass to pack branches into VLIW instructions.
18753
18754     This switch is mainly for debugging the compiler and will likely be
18755     removed in a future version.
18756
18757'-mmulti-cond-exec'
18758
18759     Enable optimization of '&&' and '||' in conditional execution
18760     (default).
18761
18762     This switch is mainly for debugging the compiler and will likely be
18763     removed in a future version.
18764
18765'-mno-multi-cond-exec'
18766
18767     Disable optimization of '&&' and '||' in conditional execution.
18768
18769     This switch is mainly for debugging the compiler and will likely be
18770     removed in a future version.
18771
18772'-mnested-cond-exec'
18773
18774     Enable nested conditional execution optimizations (default).
18775
18776     This switch is mainly for debugging the compiler and will likely be
18777     removed in a future version.
18778
18779'-mno-nested-cond-exec'
18780
18781     Disable nested conditional execution optimizations.
18782
18783     This switch is mainly for debugging the compiler and will likely be
18784     removed in a future version.
18785
18786'-moptimize-membar'
18787
18788     This switch removes redundant 'membar' instructions from the
18789     compiler-generated code.  It is enabled by default.
18790
18791'-mno-optimize-membar'
18792
18793     This switch disables the automatic removal of redundant 'membar'
18794     instructions from the generated code.
18795
18796'-mtomcat-stats'
18797
18798     Cause gas to print out tomcat statistics.
18799
18800'-mcpu=CPU'
18801
18802     Select the processor type for which to generate code.  Possible
18803     values are 'frv', 'fr550', 'tomcat', 'fr500', 'fr450', 'fr405',
18804     'fr400', 'fr300' and 'simple'.
18805
18806
18807File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
18808
188093.18.17 GNU/Linux Options
18810-------------------------
18811
18812These '-m' options are defined for GNU/Linux targets:
18813
18814'-mglibc'
18815     Use the GNU C library.  This is the default except on
18816     '*-*-linux-*uclibc*', '*-*-linux-*musl*' and '*-*-linux-*android*'
18817     targets.
18818
18819'-muclibc'
18820     Use uClibc C library.  This is the default on '*-*-linux-*uclibc*'
18821     targets.
18822
18823'-mmusl'
18824     Use the musl C library.  This is the default on '*-*-linux-*musl*'
18825     targets.
18826
18827'-mbionic'
18828     Use Bionic C library.  This is the default on '*-*-linux-*android*'
18829     targets.
18830
18831'-mandroid'
18832     Compile code compatible with Android platform.  This is the default
18833     on '*-*-linux-*android*' targets.
18834
18835     When compiling, this option enables '-mbionic', '-fPIC',
18836     '-fno-exceptions' and '-fno-rtti' by default.  When linking, this
18837     option makes the GCC driver pass Android-specific options to the
18838     linker.  Finally, this option causes the preprocessor macro
18839     '__ANDROID__' to be defined.
18840
18841'-tno-android-cc'
18842     Disable compilation effects of '-mandroid', i.e., do not enable
18843     '-mbionic', '-fPIC', '-fno-exceptions' and '-fno-rtti' by default.
18844
18845'-tno-android-ld'
18846     Disable linking effects of '-mandroid', i.e., pass standard Linux
18847     linking options to the linker.
18848
18849
18850File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
18851
188523.18.18 H8/300 Options
18853----------------------
18854
18855These '-m' options are defined for the H8/300 implementations:
18856
18857'-mrelax'
18858     Shorten some address references at link time, when possible; uses
18859     the linker option '-relax'.  *Note 'ld' and the H8/300: (ld)H8/300,
18860     for a fuller description.
18861
18862'-mh'
18863     Generate code for the H8/300H.
18864
18865'-ms'
18866     Generate code for the H8S.
18867
18868'-mn'
18869     Generate code for the H8S and H8/300H in the normal mode.  This
18870     switch must be used either with '-mh' or '-ms'.
18871
18872'-ms2600'
18873     Generate code for the H8S/2600.  This switch must be used with
18874     '-ms'.
18875
18876'-mexr'
18877     Extended registers are stored on stack before execution of function
18878     with monitor attribute.  Default option is '-mexr'.  This option is
18879     valid only for H8S targets.
18880
18881'-mno-exr'
18882     Extended registers are not stored on stack before execution of
18883     function with monitor attribute.  Default option is '-mno-exr'.
18884     This option is valid only for H8S targets.
18885
18886'-mint32'
18887     Make 'int' data 32 bits by default.
18888
18889'-malign-300'
18890     On the H8/300H and H8S, use the same alignment rules as for the
18891     H8/300.  The default for the H8/300H and H8S is to align longs and
18892     floats on 4-byte boundaries.  '-malign-300' causes them to be
18893     aligned on 2-byte boundaries.  This option has no effect on the
18894     H8/300.
18895
18896
18897File: gcc.info,  Node: HPPA Options,  Next: IA-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
18898
188993.18.19 HPPA Options
18900--------------------
18901
18902These '-m' options are defined for the HPPA family of computers:
18903
18904'-march=ARCHITECTURE-TYPE'
18905     Generate code for the specified architecture.  The choices for
18906     ARCHITECTURE-TYPE are '1.0' for PA 1.0, '1.1' for PA 1.1, and '2.0'
18907     for PA 2.0 processors.  Refer to '/usr/lib/sched.models' on an
18908     HP-UX system to determine the proper architecture option for your
18909     machine.  Code compiled for lower numbered architectures runs on
18910     higher numbered architectures, but not the other way around.
18911
18912'-mpa-risc-1-0'
18913'-mpa-risc-1-1'
18914'-mpa-risc-2-0'
18915     Synonyms for '-march=1.0', '-march=1.1', and '-march=2.0'
18916     respectively.
18917
18918'-mcaller-copies'
18919     The caller copies function arguments passed by hidden reference.
18920     This option should be used with care as it is not compatible with
18921     the default 32-bit runtime.  However, only aggregates larger than
18922     eight bytes are passed by hidden reference and the option provides
18923     better compatibility with OpenMP.
18924
18925'-mjump-in-delay'
18926     This option is ignored and provided for compatibility purposes
18927     only.
18928
18929'-mdisable-fpregs'
18930     Prevent floating-point registers from being used in any manner.
18931     This is necessary for compiling kernels that perform lazy context
18932     switching of floating-point registers.  If you use this option and
18933     attempt to perform floating-point operations, the compiler aborts.
18934
18935'-mdisable-indexing'
18936     Prevent the compiler from using indexing address modes.  This
18937     avoids some rather obscure problems when compiling MIG generated
18938     code under MACH.
18939
18940'-mno-space-regs'
18941     Generate code that assumes the target has no space registers.  This
18942     allows GCC to generate faster indirect calls and use unscaled index
18943     address modes.
18944
18945     Such code is suitable for level 0 PA systems and kernels.
18946
18947'-mfast-indirect-calls'
18948     Generate code that assumes calls never cross space boundaries.
18949     This allows GCC to emit code that performs faster indirect calls.
18950
18951     This option does not work in the presence of shared libraries or
18952     nested functions.
18953
18954'-mfixed-range=REGISTER-RANGE'
18955     Generate code treating the given register range as fixed registers.
18956     A fixed register is one that the register allocator cannot use.
18957     This is useful when compiling kernel code.  A register range is
18958     specified as two registers separated by a dash.  Multiple register
18959     ranges can be specified separated by a comma.
18960
18961'-mlong-load-store'
18962     Generate 3-instruction load and store sequences as sometimes
18963     required by the HP-UX 10 linker.  This is equivalent to the '+k'
18964     option to the HP compilers.
18965
18966'-mportable-runtime'
18967     Use the portable calling conventions proposed by HP for ELF
18968     systems.
18969
18970'-mgas'
18971     Enable the use of assembler directives only GAS understands.
18972
18973'-mschedule=CPU-TYPE'
18974     Schedule code according to the constraints for the machine type
18975     CPU-TYPE.  The choices for CPU-TYPE are '700' '7100', '7100LC',
18976     '7200', '7300' and '8000'.  Refer to '/usr/lib/sched.models' on an
18977     HP-UX system to determine the proper scheduling option for your
18978     machine.  The default scheduling is '8000'.
18979
18980'-mlinker-opt'
18981     Enable the optimization pass in the HP-UX linker.  Note this makes
18982     symbolic debugging impossible.  It also triggers a bug in the HP-UX
18983     8 and HP-UX 9 linkers in which they give bogus error messages when
18984     linking some programs.
18985
18986'-msoft-float'
18987     Generate output containing library calls for floating point.
18988     *Warning:* the requisite libraries are not available for all HPPA
18989     targets.  Normally the facilities of the machine's usual C compiler
18990     are used, but this cannot be done directly in cross-compilation.
18991     You must make your own arrangements to provide suitable library
18992     functions for cross-compilation.
18993
18994     '-msoft-float' changes the calling convention in the output file;
18995     therefore, it is only useful if you compile _all_ of a program with
18996     this option.  In particular, you need to compile 'libgcc.a', the
18997     library that comes with GCC, with '-msoft-float' in order for this
18998     to work.
18999
19000'-msio'
19001     Generate the predefine, '_SIO', for server IO.  The default is
19002     '-mwsio'.  This generates the predefines, '__hp9000s700',
19003     '__hp9000s700__' and '_WSIO', for workstation IO.  These options
19004     are available under HP-UX and HI-UX.
19005
19006'-mgnu-ld'
19007     Use options specific to GNU 'ld'.  This passes '-shared' to 'ld'
19008     when building a shared library.  It is the default when GCC is
19009     configured, explicitly or implicitly, with the GNU linker.  This
19010     option does not affect which 'ld' is called; it only changes what
19011     parameters are passed to that 'ld'.  The 'ld' that is called is
19012     determined by the '--with-ld' configure option, GCC's program
19013     search path, and finally by the user's 'PATH'.  The linker used by
19014     GCC can be printed using 'which `gcc -print-prog-name=ld`'.  This
19015     option is only available on the 64-bit HP-UX GCC, i.e. configured
19016     with 'hppa*64*-*-hpux*'.
19017
19018'-mhp-ld'
19019     Use options specific to HP 'ld'.  This passes '-b' to 'ld' when
19020     building a shared library and passes '+Accept TypeMismatch' to 'ld'
19021     on all links.  It is the default when GCC is configured, explicitly
19022     or implicitly, with the HP linker.  This option does not affect
19023     which 'ld' is called; it only changes what parameters are passed to
19024     that 'ld'.  The 'ld' that is called is determined by the
19025     '--with-ld' configure option, GCC's program search path, and
19026     finally by the user's 'PATH'.  The linker used by GCC can be
19027     printed using 'which `gcc -print-prog-name=ld`'.  This option is
19028     only available on the 64-bit HP-UX GCC, i.e. configured with
19029     'hppa*64*-*-hpux*'.
19030
19031'-mlong-calls'
19032     Generate code that uses long call sequences.  This ensures that a
19033     call is always able to reach linker generated stubs.  The default
19034     is to generate long calls only when the distance from the call site
19035     to the beginning of the function or translation unit, as the case
19036     may be, exceeds a predefined limit set by the branch type being
19037     used.  The limits for normal calls are 7,600,000 and 240,000 bytes,
19038     respectively for the PA 2.0 and PA 1.X architectures.  Sibcalls are
19039     always limited at 240,000 bytes.
19040
19041     Distances are measured from the beginning of functions when using
19042     the '-ffunction-sections' option, or when using the '-mgas' and
19043     '-mno-portable-runtime' options together under HP-UX with the SOM
19044     linker.
19045
19046     It is normally not desirable to use this option as it degrades
19047     performance.  However, it may be useful in large applications,
19048     particularly when partial linking is used to build the application.
19049
19050     The types of long calls used depends on the capabilities of the
19051     assembler and linker, and the type of code being generated.  The
19052     impact on systems that support long absolute calls, and long pic
19053     symbol-difference or pc-relative calls should be relatively small.
19054     However, an indirect call is used on 32-bit ELF systems in pic code
19055     and it is quite long.
19056
19057'-munix=UNIX-STD'
19058     Generate compiler predefines and select a startfile for the
19059     specified UNIX standard.  The choices for UNIX-STD are '93', '95'
19060     and '98'.  '93' is supported on all HP-UX versions.  '95' is
19061     available on HP-UX 10.10 and later.  '98' is available on HP-UX
19062     11.11 and later.  The default values are '93' for HP-UX 10.00, '95'
19063     for HP-UX 10.10 though to 11.00, and '98' for HP-UX 11.11 and
19064     later.
19065
19066     '-munix=93' provides the same predefines as GCC 3.3 and 3.4.
19067     '-munix=95' provides additional predefines for 'XOPEN_UNIX' and
19068     '_XOPEN_SOURCE_EXTENDED', and the startfile 'unix95.o'.
19069     '-munix=98' provides additional predefines for '_XOPEN_UNIX',
19070     '_XOPEN_SOURCE_EXTENDED', '_INCLUDE__STDC_A1_SOURCE' and
19071     '_INCLUDE_XOPEN_SOURCE_500', and the startfile 'unix98.o'.
19072
19073     It is _important_ to note that this option changes the interfaces
19074     for various library routines.  It also affects the operational
19075     behavior of the C library.  Thus, _extreme_ care is needed in using
19076     this option.
19077
19078     Library code that is intended to operate with more than one UNIX
19079     standard must test, set and restore the variable
19080     '__xpg4_extended_mask' as appropriate.  Most GNU software doesn't
19081     provide this capability.
19082
19083'-nolibdld'
19084     Suppress the generation of link options to search libdld.sl when
19085     the '-static' option is specified on HP-UX 10 and later.
19086
19087'-static'
19088     The HP-UX implementation of setlocale in libc has a dependency on
19089     libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
19090     when the '-static' option is specified, special link options are
19091     needed to resolve this dependency.
19092
19093     On HP-UX 10 and later, the GCC driver adds the necessary options to
19094     link with libdld.sl when the '-static' option is specified.  This
19095     causes the resulting binary to be dynamic.  On the 64-bit port, the
19096     linkers generate dynamic binaries by default in any case.  The
19097     '-nolibdld' option can be used to prevent the GCC driver from
19098     adding these link options.
19099
19100'-threads'
19101     Add support for multithreading with the "dce thread" library under
19102     HP-UX.  This option sets flags for both the preprocessor and
19103     linker.
19104
19105
19106File: gcc.info,  Node: IA-64 Options,  Next: LM32 Options,  Prev: HPPA Options,  Up: Submodel Options
19107
191083.18.20 IA-64 Options
19109---------------------
19110
19111These are the '-m' options defined for the Intel IA-64 architecture.
19112
19113'-mbig-endian'
19114     Generate code for a big-endian target.  This is the default for
19115     HP-UX.
19116
19117'-mlittle-endian'
19118     Generate code for a little-endian target.  This is the default for
19119     AIX5 and GNU/Linux.
19120
19121'-mgnu-as'
19122'-mno-gnu-as'
19123     Generate (or don't) code for the GNU assembler.  This is the
19124     default.
19125
19126'-mgnu-ld'
19127'-mno-gnu-ld'
19128     Generate (or don't) code for the GNU linker.  This is the default.
19129
19130'-mno-pic'
19131     Generate code that does not use a global pointer register.  The
19132     result is not position independent code, and violates the IA-64
19133     ABI.
19134
19135'-mvolatile-asm-stop'
19136'-mno-volatile-asm-stop'
19137     Generate (or don't) a stop bit immediately before and after
19138     volatile asm statements.
19139
19140'-mregister-names'
19141'-mno-register-names'
19142     Generate (or don't) 'in', 'loc', and 'out' register names for the
19143     stacked registers.  This may make assembler output more readable.
19144
19145'-mno-sdata'
19146'-msdata'
19147     Disable (or enable) optimizations that use the small data section.
19148     This may be useful for working around optimizer bugs.
19149
19150'-mconstant-gp'
19151     Generate code that uses a single constant global pointer value.
19152     This is useful when compiling kernel code.
19153
19154'-mauto-pic'
19155     Generate code that is self-relocatable.  This implies
19156     '-mconstant-gp'.  This is useful when compiling firmware code.
19157
19158'-minline-float-divide-min-latency'
19159     Generate code for inline divides of floating-point values using the
19160     minimum latency algorithm.
19161
19162'-minline-float-divide-max-throughput'
19163     Generate code for inline divides of floating-point values using the
19164     maximum throughput algorithm.
19165
19166'-mno-inline-float-divide'
19167     Do not generate inline code for divides of floating-point values.
19168
19169'-minline-int-divide-min-latency'
19170     Generate code for inline divides of integer values using the
19171     minimum latency algorithm.
19172
19173'-minline-int-divide-max-throughput'
19174     Generate code for inline divides of integer values using the
19175     maximum throughput algorithm.
19176
19177'-mno-inline-int-divide'
19178     Do not generate inline code for divides of integer values.
19179
19180'-minline-sqrt-min-latency'
19181     Generate code for inline square roots using the minimum latency
19182     algorithm.
19183
19184'-minline-sqrt-max-throughput'
19185     Generate code for inline square roots using the maximum throughput
19186     algorithm.
19187
19188'-mno-inline-sqrt'
19189     Do not generate inline code for 'sqrt'.
19190
19191'-mfused-madd'
19192'-mno-fused-madd'
19193     Do (don't) generate code that uses the fused multiply/add or
19194     multiply/subtract instructions.  The default is to use these
19195     instructions.
19196
19197'-mno-dwarf2-asm'
19198'-mdwarf2-asm'
19199     Don't (or do) generate assembler code for the DWARF line number
19200     debugging info.  This may be useful when not using the GNU
19201     assembler.
19202
19203'-mearly-stop-bits'
19204'-mno-early-stop-bits'
19205     Allow stop bits to be placed earlier than immediately preceding the
19206     instruction that triggered the stop bit.  This can improve
19207     instruction scheduling, but does not always do so.
19208
19209'-mfixed-range=REGISTER-RANGE'
19210     Generate code treating the given register range as fixed registers.
19211     A fixed register is one that the register allocator cannot use.
19212     This is useful when compiling kernel code.  A register range is
19213     specified as two registers separated by a dash.  Multiple register
19214     ranges can be specified separated by a comma.
19215
19216'-mtls-size=TLS-SIZE'
19217     Specify bit size of immediate TLS offsets.  Valid values are 14,
19218     22, and 64.
19219
19220'-mtune=CPU-TYPE'
19221     Tune the instruction scheduling for a particular CPU, Valid values
19222     are 'itanium', 'itanium1', 'merced', 'itanium2', and 'mckinley'.
19223
19224'-milp32'
19225'-mlp64'
19226     Generate code for a 32-bit or 64-bit environment.  The 32-bit
19227     environment sets int, long and pointer to 32 bits.  The 64-bit
19228     environment sets int to 32 bits and long and pointer to 64 bits.
19229     These are HP-UX specific flags.
19230
19231'-mno-sched-br-data-spec'
19232'-msched-br-data-spec'
19233     (Dis/En)able data speculative scheduling before reload.  This
19234     results in generation of 'ld.a' instructions and the corresponding
19235     check instructions ('ld.c' / 'chk.a').  The default setting is
19236     disabled.
19237
19238'-msched-ar-data-spec'
19239'-mno-sched-ar-data-spec'
19240     (En/Dis)able data speculative scheduling after reload.  This
19241     results in generation of 'ld.a' instructions and the corresponding
19242     check instructions ('ld.c' / 'chk.a').  The default setting is
19243     enabled.
19244
19245'-mno-sched-control-spec'
19246'-msched-control-spec'
19247     (Dis/En)able control speculative scheduling.  This feature is
19248     available only during region scheduling (i.e. before reload).  This
19249     results in generation of the 'ld.s' instructions and the
19250     corresponding check instructions 'chk.s'.  The default setting is
19251     disabled.
19252
19253'-msched-br-in-data-spec'
19254'-mno-sched-br-in-data-spec'
19255     (En/Dis)able speculative scheduling of the instructions that are
19256     dependent on the data speculative loads before reload.  This is
19257     effective only with '-msched-br-data-spec' enabled.  The default
19258     setting is enabled.
19259
19260'-msched-ar-in-data-spec'
19261'-mno-sched-ar-in-data-spec'
19262     (En/Dis)able speculative scheduling of the instructions that are
19263     dependent on the data speculative loads after reload.  This is
19264     effective only with '-msched-ar-data-spec' enabled.  The default
19265     setting is enabled.
19266
19267'-msched-in-control-spec'
19268'-mno-sched-in-control-spec'
19269     (En/Dis)able speculative scheduling of the instructions that are
19270     dependent on the control speculative loads.  This is effective only
19271     with '-msched-control-spec' enabled.  The default setting is
19272     enabled.
19273
19274'-mno-sched-prefer-non-data-spec-insns'
19275'-msched-prefer-non-data-spec-insns'
19276     If enabled, data-speculative instructions are chosen for schedule
19277     only if there are no other choices at the moment.  This makes the
19278     use of the data speculation much more conservative.  The default
19279     setting is disabled.
19280
19281'-mno-sched-prefer-non-control-spec-insns'
19282'-msched-prefer-non-control-spec-insns'
19283     If enabled, control-speculative instructions are chosen for
19284     schedule only if there are no other choices at the moment.  This
19285     makes the use of the control speculation much more conservative.
19286     The default setting is disabled.
19287
19288'-mno-sched-count-spec-in-critical-path'
19289'-msched-count-spec-in-critical-path'
19290     If enabled, speculative dependencies are considered during
19291     computation of the instructions priorities.  This makes the use of
19292     the speculation a bit more conservative.  The default setting is
19293     disabled.
19294
19295'-msched-spec-ldc'
19296     Use a simple data speculation check.  This option is on by default.
19297
19298'-msched-control-spec-ldc'
19299     Use a simple check for control speculation.  This option is on by
19300     default.
19301
19302'-msched-stop-bits-after-every-cycle'
19303     Place a stop bit after every cycle when scheduling.  This option is
19304     on by default.
19305
19306'-msched-fp-mem-deps-zero-cost'
19307     Assume that floating-point stores and loads are not likely to cause
19308     a conflict when placed into the same instruction group.  This
19309     option is disabled by default.
19310
19311'-msel-sched-dont-check-control-spec'
19312     Generate checks for control speculation in selective scheduling.
19313     This flag is disabled by default.
19314
19315'-msched-max-memory-insns=MAX-INSNS'
19316     Limit on the number of memory insns per instruction group, giving
19317     lower priority to subsequent memory insns attempting to schedule in
19318     the same instruction group.  Frequently useful to prevent cache
19319     bank conflicts.  The default value is 1.
19320
19321'-msched-max-memory-insns-hard-limit'
19322     Makes the limit specified by 'msched-max-memory-insns' a hard
19323     limit, disallowing more than that number in an instruction group.
19324     Otherwise, the limit is "soft", meaning that non-memory operations
19325     are preferred when the limit is reached, but memory operations may
19326     still be scheduled.
19327
19328
19329File: gcc.info,  Node: LM32 Options,  Next: M32C Options,  Prev: IA-64 Options,  Up: Submodel Options
19330
193313.18.21 LM32 Options
19332--------------------
19333
19334These '-m' options are defined for the LatticeMico32 architecture:
19335
19336'-mbarrel-shift-enabled'
19337     Enable barrel-shift instructions.
19338
19339'-mdivide-enabled'
19340     Enable divide and modulus instructions.
19341
19342'-mmultiply-enabled'
19343     Enable multiply instructions.
19344
19345'-msign-extend-enabled'
19346     Enable sign extend instructions.
19347
19348'-muser-enabled'
19349     Enable user-defined instructions.
19350
19351
19352File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: LM32 Options,  Up: Submodel Options
19353
193543.18.22 M32C Options
19355--------------------
19356
19357'-mcpu=NAME'
19358     Select the CPU for which code is generated.  NAME may be one of
19359     'r8c' for the R8C/Tiny series, 'm16c' for the M16C (up to /60)
19360     series, 'm32cm' for the M16C/80 series, or 'm32c' for the M32C/80
19361     series.
19362
19363'-msim'
19364     Specifies that the program will be run on the simulator.  This
19365     causes an alternate runtime library to be linked in which supports,
19366     for example, file I/O.  You must not use this option when
19367     generating programs that will run on real hardware; you must
19368     provide your own runtime library for whatever I/O functions are
19369     needed.
19370
19371'-memregs=NUMBER'
19372     Specifies the number of memory-based pseudo-registers GCC uses
19373     during code generation.  These pseudo-registers are used like real
19374     registers, so there is a tradeoff between GCC's ability to fit the
19375     code into available registers, and the performance penalty of using
19376     memory instead of registers.  Note that all modules in a program
19377     must be compiled with the same value for this option.  Because of
19378     that, you must not use this option with GCC's default runtime
19379     libraries.
19380
19381
19382File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
19383
193843.18.23 M32R/D Options
19385----------------------
19386
19387These '-m' options are defined for Renesas M32R/D architectures:
19388
19389'-m32r2'
19390     Generate code for the M32R/2.
19391
19392'-m32rx'
19393     Generate code for the M32R/X.
19394
19395'-m32r'
19396     Generate code for the M32R.  This is the default.
19397
19398'-mmodel=small'
19399     Assume all objects live in the lower 16MB of memory (so that their
19400     addresses can be loaded with the 'ld24' instruction), and assume
19401     all subroutines are reachable with the 'bl' instruction.  This is
19402     the default.
19403
19404     The addressability of a particular object can be set with the
19405     'model' attribute.
19406
19407'-mmodel=medium'
19408     Assume objects may be anywhere in the 32-bit address space (the
19409     compiler generates 'seth/add3' instructions to load their
19410     addresses), and assume all subroutines are reachable with the 'bl'
19411     instruction.
19412
19413'-mmodel=large'
19414     Assume objects may be anywhere in the 32-bit address space (the
19415     compiler generates 'seth/add3' instructions to load their
19416     addresses), and assume subroutines may not be reachable with the
19417     'bl' instruction (the compiler generates the much slower
19418     'seth/add3/jl' instruction sequence).
19419
19420'-msdata=none'
19421     Disable use of the small data area.  Variables are put into one of
19422     '.data', '.bss', or '.rodata' (unless the 'section' attribute has
19423     been specified).  This is the default.
19424
19425     The small data area consists of sections '.sdata' and '.sbss'.
19426     Objects may be explicitly put in the small data area with the
19427     'section' attribute using one of these sections.
19428
19429'-msdata=sdata'
19430     Put small global and static data in the small data area, but do not
19431     generate special code to reference them.
19432
19433'-msdata=use'
19434     Put small global and static data in the small data area, and
19435     generate special instructions to reference them.
19436
19437'-G NUM'
19438     Put global and static objects less than or equal to NUM bytes into
19439     the small data or BSS sections instead of the normal data or BSS
19440     sections.  The default value of NUM is 8.  The '-msdata' option
19441     must be set to one of 'sdata' or 'use' for this option to have any
19442     effect.
19443
19444     All modules should be compiled with the same '-G NUM' value.
19445     Compiling with different values of NUM may or may not work; if it
19446     doesn't the linker gives an error message--incorrect code is not
19447     generated.
19448
19449'-mdebug'
19450     Makes the M32R-specific code in the compiler display some
19451     statistics that might help in debugging programs.
19452
19453'-malign-loops'
19454     Align all loops to a 32-byte boundary.
19455
19456'-mno-align-loops'
19457     Do not enforce a 32-byte alignment for loops.  This is the default.
19458
19459'-missue-rate=NUMBER'
19460     Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
19461
19462'-mbranch-cost=NUMBER'
19463     NUMBER can only be 1 or 2.  If it is 1 then branches are preferred
19464     over conditional code, if it is 2, then the opposite applies.
19465
19466'-mflush-trap=NUMBER'
19467     Specifies the trap number to use to flush the cache.  The default
19468     is 12.  Valid numbers are between 0 and 15 inclusive.
19469
19470'-mno-flush-trap'
19471     Specifies that the cache cannot be flushed by using a trap.
19472
19473'-mflush-func=NAME'
19474     Specifies the name of the operating system function to call to
19475     flush the cache.  The default is '_flush_cache', but a function
19476     call is only used if a trap is not available.
19477
19478'-mno-flush-func'
19479     Indicates that there is no OS function for flushing the cache.
19480
19481
19482File: gcc.info,  Node: M680x0 Options,  Next: MCore Options,  Prev: M32R/D Options,  Up: Submodel Options
19483
194843.18.24 M680x0 Options
19485----------------------
19486
19487These are the '-m' options defined for M680x0 and ColdFire processors.
19488The default settings depend on which architecture was selected when the
19489compiler was configured; the defaults for the most common choices are
19490given below.
19491
19492'-march=ARCH'
19493     Generate code for a specific M680x0 or ColdFire instruction set
19494     architecture.  Permissible values of ARCH for M680x0 architectures
19495     are: '68000', '68010', '68020', '68030', '68040', '68060' and
19496     'cpu32'.  ColdFire architectures are selected according to
19497     Freescale's ISA classification and the permissible values are:
19498     'isaa', 'isaaplus', 'isab' and 'isac'.
19499
19500     GCC defines a macro '__mcfARCH__' whenever it is generating code
19501     for a ColdFire target.  The ARCH in this macro is one of the
19502     '-march' arguments given above.
19503
19504     When used together, '-march' and '-mtune' select code that runs on
19505     a family of similar processors but that is optimized for a
19506     particular microarchitecture.
19507
19508'-mcpu=CPU'
19509     Generate code for a specific M680x0 or ColdFire processor.  The
19510     M680x0 CPUs are: '68000', '68010', '68020', '68030', '68040',
19511     '68060', '68302', '68332' and 'cpu32'.  The ColdFire CPUs are given
19512     by the table below, which also classifies the CPUs into families:
19513
19514     *Family*       *'-mcpu' arguments*
19515     '51'           '51' '51ac' '51ag' '51cn' '51em' '51je' '51jf' '51jg'
19516                    '51jm' '51mm' '51qe' '51qm'
19517     '5206'         '5202' '5204' '5206'
19518     '5206e'        '5206e'
19519     '5208'         '5207' '5208'
19520     '5211a'        '5210a' '5211a'
19521     '5213'         '5211' '5212' '5213'
19522     '5216'         '5214' '5216'
19523     '52235'        '52230' '52231' '52232' '52233' '52234' '52235'
19524     '5225'         '5224' '5225'
19525     '52259'        '52252' '52254' '52255' '52256' '52258' '52259'
19526     '5235'         '5232' '5233' '5234' '5235' '523x'
19527     '5249'         '5249'
19528     '5250'         '5250'
19529     '5271'         '5270' '5271'
19530     '5272'         '5272'
19531     '5275'         '5274' '5275'
19532     '5282'         '5280' '5281' '5282' '528x'
19533     '53017'        '53011' '53012' '53013' '53014' '53015' '53016' '53017'
19534     '5307'         '5307'
19535     '5329'         '5327' '5328' '5329' '532x'
19536     '5373'         '5372' '5373' '537x'
19537     '5407'         '5407'
19538     '5475'         '5470' '5471' '5472' '5473' '5474' '5475' '547x' '5480'
19539                    '5481' '5482' '5483' '5484' '5485'
19540
19541     '-mcpu=CPU' overrides '-march=ARCH' if ARCH is compatible with CPU.
19542     Other combinations of '-mcpu' and '-march' are rejected.
19543
19544     GCC defines the macro '__mcf_cpu_CPU' when ColdFire target CPU is
19545     selected.  It also defines '__mcf_family_FAMILY', where the value
19546     of FAMILY is given by the table above.
19547
19548'-mtune=TUNE'
19549     Tune the code for a particular microarchitecture within the
19550     constraints set by '-march' and '-mcpu'.  The M680x0
19551     microarchitectures are: '68000', '68010', '68020', '68030',
19552     '68040', '68060' and 'cpu32'.  The ColdFire microarchitectures are:
19553     'cfv1', 'cfv2', 'cfv3', 'cfv4' and 'cfv4e'.
19554
19555     You can also use '-mtune=68020-40' for code that needs to run
19556     relatively well on 68020, 68030 and 68040 targets.
19557     '-mtune=68020-60' is similar but includes 68060 targets as well.
19558     These two options select the same tuning decisions as '-m68020-40'
19559     and '-m68020-60' respectively.
19560
19561     GCC defines the macros '__mcARCH' and '__mcARCH__' when tuning for
19562     680x0 architecture ARCH.  It also defines 'mcARCH' unless either
19563     '-ansi' or a non-GNU '-std' option is used.  If GCC is tuning for a
19564     range of architectures, as selected by '-mtune=68020-40' or
19565     '-mtune=68020-60', it defines the macros for every architecture in
19566     the range.
19567
19568     GCC also defines the macro '__mUARCH__' when tuning for ColdFire
19569     microarchitecture UARCH, where UARCH is one of the arguments given
19570     above.
19571
19572'-m68000'
19573'-mc68000'
19574     Generate output for a 68000.  This is the default when the compiler
19575     is configured for 68000-based systems.  It is equivalent to
19576     '-march=68000'.
19577
19578     Use this option for microcontrollers with a 68000 or EC000 core,
19579     including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
19580
19581'-m68010'
19582     Generate output for a 68010.  This is the default when the compiler
19583     is configured for 68010-based systems.  It is equivalent to
19584     '-march=68010'.
19585
19586'-m68020'
19587'-mc68020'
19588     Generate output for a 68020.  This is the default when the compiler
19589     is configured for 68020-based systems.  It is equivalent to
19590     '-march=68020'.
19591
19592'-m68030'
19593     Generate output for a 68030.  This is the default when the compiler
19594     is configured for 68030-based systems.  It is equivalent to
19595     '-march=68030'.
19596
19597'-m68040'
19598     Generate output for a 68040.  This is the default when the compiler
19599     is configured for 68040-based systems.  It is equivalent to
19600     '-march=68040'.
19601
19602     This option inhibits the use of 68881/68882 instructions that have
19603     to be emulated by software on the 68040.  Use this option if your
19604     68040 does not have code to emulate those instructions.
19605
19606'-m68060'
19607     Generate output for a 68060.  This is the default when the compiler
19608     is configured for 68060-based systems.  It is equivalent to
19609     '-march=68060'.
19610
19611     This option inhibits the use of 68020 and 68881/68882 instructions
19612     that have to be emulated by software on the 68060.  Use this option
19613     if your 68060 does not have code to emulate those instructions.
19614
19615'-mcpu32'
19616     Generate output for a CPU32.  This is the default when the compiler
19617     is configured for CPU32-based systems.  It is equivalent to
19618     '-march=cpu32'.
19619
19620     Use this option for microcontrollers with a CPU32 or CPU32+ core,
19621     including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
19622     68341, 68349 and 68360.
19623
19624'-m5200'
19625     Generate output for a 520X ColdFire CPU.  This is the default when
19626     the compiler is configured for 520X-based systems.  It is
19627     equivalent to '-mcpu=5206', and is now deprecated in favor of that
19628     option.
19629
19630     Use this option for microcontroller with a 5200 core, including the
19631     MCF5202, MCF5203, MCF5204 and MCF5206.
19632
19633'-m5206e'
19634     Generate output for a 5206e ColdFire CPU.  The option is now
19635     deprecated in favor of the equivalent '-mcpu=5206e'.
19636
19637'-m528x'
19638     Generate output for a member of the ColdFire 528X family.  The
19639     option is now deprecated in favor of the equivalent '-mcpu=528x'.
19640
19641'-m5307'
19642     Generate output for a ColdFire 5307 CPU.  The option is now
19643     deprecated in favor of the equivalent '-mcpu=5307'.
19644
19645'-m5407'
19646     Generate output for a ColdFire 5407 CPU.  The option is now
19647     deprecated in favor of the equivalent '-mcpu=5407'.
19648
19649'-mcfv4e'
19650     Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
19651     This includes use of hardware floating-point instructions.  The
19652     option is equivalent to '-mcpu=547x', and is now deprecated in
19653     favor of that option.
19654
19655'-m68020-40'
19656     Generate output for a 68040, without using any of the new
19657     instructions.  This results in code that can run relatively
19658     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
19659     generated code does use the 68881 instructions that are emulated on
19660     the 68040.
19661
19662     The option is equivalent to '-march=68020' '-mtune=68020-40'.
19663
19664'-m68020-60'
19665     Generate output for a 68060, without using any of the new
19666     instructions.  This results in code that can run relatively
19667     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
19668     generated code does use the 68881 instructions that are emulated on
19669     the 68060.
19670
19671     The option is equivalent to '-march=68020' '-mtune=68020-60'.
19672
19673'-mhard-float'
19674'-m68881'
19675     Generate floating-point instructions.  This is the default for
19676     68020 and above, and for ColdFire devices that have an FPU.  It
19677     defines the macro '__HAVE_68881__' on M680x0 targets and
19678     '__mcffpu__' on ColdFire targets.
19679
19680'-msoft-float'
19681     Do not generate floating-point instructions; use library calls
19682     instead.  This is the default for 68000, 68010, and 68832 targets.
19683     It is also the default for ColdFire devices that have no FPU.
19684
19685'-mdiv'
19686'-mno-div'
19687     Generate (do not generate) ColdFire hardware divide and remainder
19688     instructions.  If '-march' is used without '-mcpu', the default is
19689     "on" for ColdFire architectures and "off" for M680x0 architectures.
19690     Otherwise, the default is taken from the target CPU (either the
19691     default CPU, or the one specified by '-mcpu').  For example, the
19692     default is "off" for '-mcpu=5206' and "on" for '-mcpu=5206e'.
19693
19694     GCC defines the macro '__mcfhwdiv__' when this option is enabled.
19695
19696'-mshort'
19697     Consider type 'int' to be 16 bits wide, like 'short int'.
19698     Additionally, parameters passed on the stack are also aligned to a
19699     16-bit boundary even on targets whose API mandates promotion to
19700     32-bit.
19701
19702'-mno-short'
19703     Do not consider type 'int' to be 16 bits wide.  This is the
19704     default.
19705
19706'-mnobitfield'
19707'-mno-bitfield'
19708     Do not use the bit-field instructions.  The '-m68000', '-mcpu32'
19709     and '-m5200' options imply '-mnobitfield'.
19710
19711'-mbitfield'
19712     Do use the bit-field instructions.  The '-m68020' option implies
19713     '-mbitfield'.  This is the default if you use a configuration
19714     designed for a 68020.
19715
19716'-mrtd'
19717     Use a different function-calling convention, in which functions
19718     that take a fixed number of arguments return with the 'rtd'
19719     instruction, which pops their arguments while returning.  This
19720     saves one instruction in the caller since there is no need to pop
19721     the arguments there.
19722
19723     This calling convention is incompatible with the one normally used
19724     on Unix, so you cannot use it if you need to call libraries
19725     compiled with the Unix compiler.
19726
19727     Also, you must provide function prototypes for all functions that
19728     take variable numbers of arguments (including 'printf'); otherwise
19729     incorrect code is generated for calls to those functions.
19730
19731     In addition, seriously incorrect code results if you call a
19732     function with too many arguments.  (Normally, extra arguments are
19733     harmlessly ignored.)
19734
19735     The 'rtd' instruction is supported by the 68010, 68020, 68030,
19736     68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
19737
19738     The default is '-mno-rtd'.
19739
19740'-malign-int'
19741'-mno-align-int'
19742     Control whether GCC aligns 'int', 'long', 'long long', 'float',
19743     'double', and 'long double' variables on a 32-bit boundary
19744     ('-malign-int') or a 16-bit boundary ('-mno-align-int').  Aligning
19745     variables on 32-bit boundaries produces code that runs somewhat
19746     faster on processors with 32-bit busses at the expense of more
19747     memory.
19748
19749     *Warning:* if you use the '-malign-int' switch, GCC aligns
19750     structures containing the above types differently than most
19751     published application binary interface specifications for the m68k.
19752
19753'-mpcrel'
19754     Use the pc-relative addressing mode of the 68000 directly, instead
19755     of using a global offset table.  At present, this option implies
19756     '-fpic', allowing at most a 16-bit offset for pc-relative
19757     addressing.  '-fPIC' is not presently supported with '-mpcrel',
19758     though this could be supported for 68020 and higher processors.
19759
19760'-mno-strict-align'
19761'-mstrict-align'
19762     Do not (do) assume that unaligned memory references are handled by
19763     the system.
19764
19765'-msep-data'
19766     Generate code that allows the data segment to be located in a
19767     different area of memory from the text segment.  This allows for
19768     execute-in-place in an environment without virtual memory
19769     management.  This option implies '-fPIC'.
19770
19771'-mno-sep-data'
19772     Generate code that assumes that the data segment follows the text
19773     segment.  This is the default.
19774
19775'-mid-shared-library'
19776     Generate code that supports shared libraries via the library ID
19777     method.  This allows for execute-in-place and shared libraries in
19778     an environment without virtual memory management.  This option
19779     implies '-fPIC'.
19780
19781'-mno-id-shared-library'
19782     Generate code that doesn't assume ID-based shared libraries are
19783     being used.  This is the default.
19784
19785'-mshared-library-id=n'
19786     Specifies the identification number of the ID-based shared library
19787     being compiled.  Specifying a value of 0 generates more compact
19788     code; specifying other values forces the allocation of that number
19789     to the current library, but is no more space- or time-efficient
19790     than omitting this option.
19791
19792'-mxgot'
19793'-mno-xgot'
19794     When generating position-independent code for ColdFire, generate
19795     code that works if the GOT has more than 8192 entries.  This code
19796     is larger and slower than code generated without this option.  On
19797     M680x0 processors, this option is not needed; '-fPIC' suffices.
19798
19799     GCC normally uses a single instruction to load values from the GOT.
19800     While this is relatively efficient, it only works if the GOT is
19801     smaller than about 64k.  Anything larger causes the linker to
19802     report an error such as:
19803
19804          relocation truncated to fit: R_68K_GOT16O foobar
19805
19806     If this happens, you should recompile your code with '-mxgot'.  It
19807     should then work with very large GOTs.  However, code generated
19808     with '-mxgot' is less efficient, since it takes 4 instructions to
19809     fetch the value of a global symbol.
19810
19811     Note that some linkers, including newer versions of the GNU linker,
19812     can create multiple GOTs and sort GOT entries.  If you have such a
19813     linker, you should only need to use '-mxgot' when compiling a
19814     single object file that accesses more than 8192 GOT entries.  Very
19815     few do.
19816
19817     These options have no effect unless GCC is generating
19818     position-independent code.
19819
19820'-mlong-jump-table-offsets'
19821     Use 32-bit offsets in 'switch' tables.  The default is to use
19822     16-bit offsets.
19823
19824
19825File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M680x0 Options,  Up: Submodel Options
19826
198273.18.25 MCore Options
19828---------------------
19829
19830These are the '-m' options defined for the Motorola M*Core processors.
19831
19832'-mhardlit'
19833'-mno-hardlit'
19834     Inline constants into the code stream if it can be done in two
19835     instructions or less.
19836
19837'-mdiv'
19838'-mno-div'
19839     Use the divide instruction.  (Enabled by default).
19840
19841'-mrelax-immediate'
19842'-mno-relax-immediate'
19843     Allow arbitrary-sized immediates in bit operations.
19844
19845'-mwide-bitfields'
19846'-mno-wide-bitfields'
19847     Always treat bit-fields as 'int'-sized.
19848
19849'-m4byte-functions'
19850'-mno-4byte-functions'
19851     Force all functions to be aligned to a 4-byte boundary.
19852
19853'-mcallgraph-data'
19854'-mno-callgraph-data'
19855     Emit callgraph information.
19856
19857'-mslow-bytes'
19858'-mno-slow-bytes'
19859     Prefer word access when reading byte quantities.
19860
19861'-mlittle-endian'
19862'-mbig-endian'
19863     Generate code for a little-endian target.
19864
19865'-m210'
19866'-m340'
19867     Generate code for the 210 processor.
19868
19869'-mno-lsim'
19870     Assume that runtime support has been provided and so omit the
19871     simulator library ('libsim.a)' from the linker command line.
19872
19873'-mstack-increment=SIZE'
19874     Set the maximum amount for a single stack increment operation.
19875     Large values can increase the speed of programs that contain
19876     functions that need a large amount of stack space, but they can
19877     also trigger a segmentation fault if the stack is extended too
19878     much.  The default value is 0x1000.
19879
19880
19881File: gcc.info,  Node: MeP Options,  Next: MicroBlaze Options,  Prev: MCore Options,  Up: Submodel Options
19882
198833.18.26 MeP Options
19884-------------------
19885
19886'-mabsdiff'
19887     Enables the 'abs' instruction, which is the absolute difference
19888     between two registers.
19889
19890'-mall-opts'
19891     Enables all the optional instructions--average, multiply, divide,
19892     bit operations, leading zero, absolute difference, min/max, clip,
19893     and saturation.
19894
19895'-maverage'
19896     Enables the 'ave' instruction, which computes the average of two
19897     registers.
19898
19899'-mbased=N'
19900     Variables of size N bytes or smaller are placed in the '.based'
19901     section by default.  Based variables use the '$tp' register as a
19902     base register, and there is a 128-byte limit to the '.based'
19903     section.
19904
19905'-mbitops'
19906     Enables the bit operation instructions--bit test ('btstm'), set
19907     ('bsetm'), clear ('bclrm'), invert ('bnotm'), and test-and-set
19908     ('tas').
19909
19910'-mc=NAME'
19911     Selects which section constant data is placed in.  NAME may be
19912     'tiny', 'near', or 'far'.
19913
19914'-mclip'
19915     Enables the 'clip' instruction.  Note that '-mclip' is not useful
19916     unless you also provide '-mminmax'.
19917
19918'-mconfig=NAME'
19919     Selects one of the built-in core configurations.  Each MeP chip has
19920     one or more modules in it; each module has a core CPU and a variety
19921     of coprocessors, optional instructions, and peripherals.  The
19922     'MeP-Integrator' tool, not part of GCC, provides these
19923     configurations through this option; using this option is the same
19924     as using all the corresponding command-line options.  The default
19925     configuration is 'default'.
19926
19927'-mcop'
19928     Enables the coprocessor instructions.  By default, this is a 32-bit
19929     coprocessor.  Note that the coprocessor is normally enabled via the
19930     '-mconfig=' option.
19931
19932'-mcop32'
19933     Enables the 32-bit coprocessor's instructions.
19934
19935'-mcop64'
19936     Enables the 64-bit coprocessor's instructions.
19937
19938'-mivc2'
19939     Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
19940
19941'-mdc'
19942     Causes constant variables to be placed in the '.near' section.
19943
19944'-mdiv'
19945     Enables the 'div' and 'divu' instructions.
19946
19947'-meb'
19948     Generate big-endian code.
19949
19950'-mel'
19951     Generate little-endian code.
19952
19953'-mio-volatile'
19954     Tells the compiler that any variable marked with the 'io' attribute
19955     is to be considered volatile.
19956
19957'-ml'
19958     Causes variables to be assigned to the '.far' section by default.
19959
19960'-mleadz'
19961     Enables the 'leadz' (leading zero) instruction.
19962
19963'-mm'
19964     Causes variables to be assigned to the '.near' section by default.
19965
19966'-mminmax'
19967     Enables the 'min' and 'max' instructions.
19968
19969'-mmult'
19970     Enables the multiplication and multiply-accumulate instructions.
19971
19972'-mno-opts'
19973     Disables all the optional instructions enabled by '-mall-opts'.
19974
19975'-mrepeat'
19976     Enables the 'repeat' and 'erepeat' instructions, used for
19977     low-overhead looping.
19978
19979'-ms'
19980     Causes all variables to default to the '.tiny' section.  Note that
19981     there is a 65536-byte limit to this section.  Accesses to these
19982     variables use the '%gp' base register.
19983
19984'-msatur'
19985     Enables the saturation instructions.  Note that the compiler does
19986     not currently generate these itself, but this option is included
19987     for compatibility with other tools, like 'as'.
19988
19989'-msdram'
19990     Link the SDRAM-based runtime instead of the default ROM-based
19991     runtime.
19992
19993'-msim'
19994     Link the simulator run-time libraries.
19995
19996'-msimnovec'
19997     Link the simulator runtime libraries, excluding built-in support
19998     for reset and exception vectors and tables.
19999
20000'-mtf'
20001     Causes all functions to default to the '.far' section.  Without
20002     this option, functions default to the '.near' section.
20003
20004'-mtiny=N'
20005     Variables that are N bytes or smaller are allocated to the '.tiny'
20006     section.  These variables use the '$gp' base register.  The default
20007     for this option is 4, but note that there's a 65536-byte limit to
20008     the '.tiny' section.
20009
20010
20011File: gcc.info,  Node: MicroBlaze Options,  Next: MIPS Options,  Prev: MeP Options,  Up: Submodel Options
20012
200133.18.27 MicroBlaze Options
20014--------------------------
20015
20016'-msoft-float'
20017     Use software emulation for floating point (default).
20018
20019'-mhard-float'
20020     Use hardware floating-point instructions.
20021
20022'-mmemcpy'
20023     Do not optimize block moves, use 'memcpy'.
20024
20025'-mno-clearbss'
20026     This option is deprecated.  Use '-fno-zero-initialized-in-bss'
20027     instead.
20028
20029'-mcpu=CPU-TYPE'
20030     Use features of, and schedule code for, the given CPU. Supported
20031     values are in the format 'vX.YY.Z', where X is a major version, YY
20032     is the minor version, and Z is compatibility code.  Example values
20033     are 'v3.00.a', 'v4.00.b', 'v5.00.a', 'v5.00.b', 'v6.00.a'.
20034
20035'-mxl-soft-mul'
20036     Use software multiply emulation (default).
20037
20038'-mxl-soft-div'
20039     Use software emulation for divides (default).
20040
20041'-mxl-barrel-shift'
20042     Use the hardware barrel shifter.
20043
20044'-mxl-pattern-compare'
20045     Use pattern compare instructions.
20046
20047'-msmall-divides'
20048     Use table lookup optimization for small signed integer divisions.
20049
20050'-mxl-stack-check'
20051     This option is deprecated.  Use '-fstack-check' instead.
20052
20053'-mxl-gp-opt'
20054     Use GP-relative '.sdata'/'.sbss' sections.
20055
20056'-mxl-multiply-high'
20057     Use multiply high instructions for high part of 32x32 multiply.
20058
20059'-mxl-float-convert'
20060     Use hardware floating-point conversion instructions.
20061
20062'-mxl-float-sqrt'
20063     Use hardware floating-point square root instruction.
20064
20065'-mbig-endian'
20066     Generate code for a big-endian target.
20067
20068'-mlittle-endian'
20069     Generate code for a little-endian target.
20070
20071'-mxl-reorder'
20072     Use reorder instructions (swap and byte reversed load/store).
20073
20074'-mxl-mode-APP-MODEL'
20075     Select application model APP-MODEL.  Valid models are
20076     'executable'
20077          normal executable (default), uses startup code 'crt0.o'.
20078
20079     '-mpic-data-is-text-relative'
20080          Assume that the displacement between the text and data
20081          segments is fixed at static link time.  This allows data to be
20082          referenced by offset from start of text address instead of GOT
20083          since PC-relative addressing is not supported.
20084
20085     'xmdstub'
20086          for use with Xilinx Microprocessor Debugger (XMD) based
20087          software intrusive debug agent called xmdstub.  This uses
20088          startup file 'crt1.o' and sets the start address of the
20089          program to 0x800.
20090
20091     'bootstrap'
20092          for applications that are loaded using a bootloader.  This
20093          model uses startup file 'crt2.o' which does not contain a
20094          processor reset vector handler.  This is suitable for
20095          transferring control on a processor reset to the bootloader
20096          rather than the application.
20097
20098     'novectors'
20099          for applications that do not require any of the MicroBlaze
20100          vectors.  This option may be useful for applications running
20101          within a monitoring application.  This model uses 'crt3.o' as
20102          a startup file.
20103
20104     Option '-xl-mode-APP-MODEL' is a deprecated alias for
20105     '-mxl-mode-APP-MODEL'.
20106
20107
20108File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MicroBlaze Options,  Up: Submodel Options
20109
201103.18.28 MIPS Options
20111--------------------
20112
20113'-EB'
20114     Generate big-endian code.
20115
20116'-EL'
20117     Generate little-endian code.  This is the default for 'mips*el-*-*'
20118     configurations.
20119
20120'-march=ARCH'
20121     Generate code that runs on ARCH, which can be the name of a generic
20122     MIPS ISA, or the name of a particular processor.  The ISA names
20123     are: 'mips1', 'mips2', 'mips3', 'mips4', 'mips32', 'mips32r2',
20124     'mips32r3', 'mips32r5', 'mips32r6', 'mips64', 'mips64r2',
20125     'mips64r3', 'mips64r5' and 'mips64r6'.  The processor names are:
20126     '4kc', '4km', '4kp', '4ksc', '4kec', '4kem', '4kep', '4ksd', '5kc',
20127     '5kf', '20kc', '24kc', '24kf2_1', '24kf1_1', '24kec', '24kef2_1',
20128     '24kef1_1', '34kc', '34kf2_1', '34kf1_1', '34kn', '74kc',
20129     '74kf2_1', '74kf1_1', '74kf3_2', '1004kc', '1004kf2_1',
20130     '1004kf1_1', 'i6400', 'i6500', 'interaptiv', 'loongson2e',
20131     'loongson2f', 'loongson3a', 'gs464', 'gs464e', 'gs264e', 'm4k',
20132     'm14k', 'm14kc', 'm14ke', 'm14kec', 'm5100', 'm5101', 'octeon',
20133     'octeon+', 'octeon2', 'octeon3', 'orion', 'p5600', 'p6600',
20134     'r2000', 'r3000', 'r3900', 'r4000', 'r4400', 'r4600', 'r4650',
20135     'r4700', 'r5900', 'r6000', 'r8000', 'rm7000', 'rm9000', 'r10000',
20136     'r12000', 'r14000', 'r16000', 'sb1', 'sr71000', 'vr4100', 'vr4111',
20137     'vr4120', 'vr4130', 'vr4300', 'vr5000', 'vr5400', 'vr5500', 'xlr'
20138     and 'xlp'.  The special value 'from-abi' selects the most
20139     compatible architecture for the selected ABI (that is, 'mips1' for
20140     32-bit ABIs and 'mips3' for 64-bit ABIs).
20141
20142     The native Linux/GNU toolchain also supports the value 'native',
20143     which selects the best architecture option for the host processor.
20144     '-march=native' has no effect if GCC does not recognize the
20145     processor.
20146
20147     In processor names, a final '000' can be abbreviated as 'k' (for
20148     example, '-march=r2k').  Prefixes are optional, and 'vr' may be
20149     written 'r'.
20150
20151     Names of the form 'Nf2_1' refer to processors with FPUs clocked at
20152     half the rate of the core, names of the form 'Nf1_1' refer to
20153     processors with FPUs clocked at the same rate as the core, and
20154     names of the form 'Nf3_2' refer to processors with FPUs clocked a
20155     ratio of 3:2 with respect to the core.  For compatibility reasons,
20156     'Nf' is accepted as a synonym for 'Nf2_1' while 'Nx' and 'Bfx' are
20157     accepted as synonyms for 'Nf1_1'.
20158
20159     GCC defines two macros based on the value of this option.  The
20160     first is '_MIPS_ARCH', which gives the name of target architecture,
20161     as a string.  The second has the form '_MIPS_ARCH_FOO', where FOO
20162     is the capitalized value of '_MIPS_ARCH'.  For example,
20163     '-march=r2000' sets '_MIPS_ARCH' to '"r2000"' and defines the macro
20164     '_MIPS_ARCH_R2000'.
20165
20166     Note that the '_MIPS_ARCH' macro uses the processor names given
20167     above.  In other words, it has the full prefix and does not
20168     abbreviate '000' as 'k'.  In the case of 'from-abi', the macro
20169     names the resolved architecture (either '"mips1"' or '"mips3"').
20170     It names the default architecture when no '-march' option is given.
20171
20172'-mtune=ARCH'
20173     Optimize for ARCH.  Among other things, this option controls the
20174     way instructions are scheduled, and the perceived cost of
20175     arithmetic operations.  The list of ARCH values is the same as for
20176     '-march'.
20177
20178     When this option is not used, GCC optimizes for the processor
20179     specified by '-march'.  By using '-march' and '-mtune' together, it
20180     is possible to generate code that runs on a family of processors,
20181     but optimize the code for one particular member of that family.
20182
20183     '-mtune' defines the macros '_MIPS_TUNE' and '_MIPS_TUNE_FOO',
20184     which work in the same way as the '-march' ones described above.
20185
20186'-mips1'
20187     Equivalent to '-march=mips1'.
20188
20189'-mips2'
20190     Equivalent to '-march=mips2'.
20191
20192'-mips3'
20193     Equivalent to '-march=mips3'.
20194
20195'-mips4'
20196     Equivalent to '-march=mips4'.
20197
20198'-mips32'
20199     Equivalent to '-march=mips32'.
20200
20201'-mips32r3'
20202     Equivalent to '-march=mips32r3'.
20203
20204'-mips32r5'
20205     Equivalent to '-march=mips32r5'.
20206
20207'-mips32r6'
20208     Equivalent to '-march=mips32r6'.
20209
20210'-mips64'
20211     Equivalent to '-march=mips64'.
20212
20213'-mips64r2'
20214     Equivalent to '-march=mips64r2'.
20215
20216'-mips64r3'
20217     Equivalent to '-march=mips64r3'.
20218
20219'-mips64r5'
20220     Equivalent to '-march=mips64r5'.
20221
20222'-mips64r6'
20223     Equivalent to '-march=mips64r6'.
20224
20225'-mips16'
20226'-mno-mips16'
20227     Generate (do not generate) MIPS16 code.  If GCC is targeting a
20228     MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
20229
20230     MIPS16 code generation can also be controlled on a per-function
20231     basis by means of 'mips16' and 'nomips16' attributes.  *Note
20232     Function Attributes::, for more information.
20233
20234'-mflip-mips16'
20235     Generate MIPS16 code on alternating functions.  This option is
20236     provided for regression testing of mixed MIPS16/non-MIPS16 code
20237     generation, and is not intended for ordinary use in compiling user
20238     code.
20239
20240'-minterlink-compressed'
20241'-mno-interlink-compressed'
20242     Require (do not require) that code using the standard
20243     (uncompressed) MIPS ISA be link-compatible with MIPS16 and
20244     microMIPS code, and vice versa.
20245
20246     For example, code using the standard ISA encoding cannot jump
20247     directly to MIPS16 or microMIPS code; it must either use a call or
20248     an indirect jump.  '-minterlink-compressed' therefore disables
20249     direct jumps unless GCC knows that the target of the jump is not
20250     compressed.
20251
20252'-minterlink-mips16'
20253'-mno-interlink-mips16'
20254     Aliases of '-minterlink-compressed' and
20255     '-mno-interlink-compressed'.  These options predate the microMIPS
20256     ASE and are retained for backwards compatibility.
20257
20258'-mabi=32'
20259'-mabi=o64'
20260'-mabi=n32'
20261'-mabi=64'
20262'-mabi=eabi'
20263     Generate code for the given ABI.
20264
20265     Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
20266     generates 64-bit code when you select a 64-bit architecture, but
20267     you can use '-mgp32' to get 32-bit code instead.
20268
20269     For information about the O64 ABI, see
20270     <http://gcc.gnu.org/projects/mipso64-abi.html>.
20271
20272     GCC supports a variant of the o32 ABI in which floating-point
20273     registers are 64 rather than 32 bits wide.  You can select this
20274     combination with '-mabi=32' '-mfp64'.  This ABI relies on the
20275     'mthc1' and 'mfhc1' instructions and is therefore only supported
20276     for MIPS32R2, MIPS32R3 and MIPS32R5 processors.
20277
20278     The register assignments for arguments and return values remain the
20279     same, but each scalar value is passed in a single 64-bit register
20280     rather than a pair of 32-bit registers.  For example, scalar
20281     floating-point values are returned in '$f0' only, not a '$f0'/'$f1'
20282     pair.  The set of call-saved registers also remains the same in
20283     that the even-numbered double-precision registers are saved.
20284
20285     Two additional variants of the o32 ABI are supported to enable a
20286     transition from 32-bit to 64-bit registers.  These are FPXX
20287     ('-mfpxx') and FP64A ('-mfp64' '-mno-odd-spreg').  The FPXX
20288     extension mandates that all code must execute correctly when run
20289     using 32-bit or 64-bit registers.  The code can be interlinked with
20290     either FP32 or FP64, but not both.  The FP64A extension is similar
20291     to the FP64 extension but forbids the use of odd-numbered
20292     single-precision registers.  This can be used in conjunction with
20293     the 'FRE' mode of FPUs in MIPS32R5 processors and allows both FP32
20294     and FP64A code to interlink and run in the same process without
20295     changing FPU modes.
20296
20297'-mabicalls'
20298'-mno-abicalls'
20299     Generate (do not generate) code that is suitable for SVR4-style
20300     dynamic objects.  '-mabicalls' is the default for SVR4-based
20301     systems.
20302
20303'-mshared'
20304'-mno-shared'
20305     Generate (do not generate) code that is fully position-independent,
20306     and that can therefore be linked into shared libraries.  This
20307     option only affects '-mabicalls'.
20308
20309     All '-mabicalls' code has traditionally been position-independent,
20310     regardless of options like '-fPIC' and '-fpic'.  However, as an
20311     extension, the GNU toolchain allows executables to use absolute
20312     accesses for locally-binding symbols.  It can also use shorter GP
20313     initialization sequences and generate direct calls to
20314     locally-defined functions.  This mode is selected by '-mno-shared'.
20315
20316     '-mno-shared' depends on binutils 2.16 or higher and generates
20317     objects that can only be linked by the GNU linker.  However, the
20318     option does not affect the ABI of the final executable; it only
20319     affects the ABI of relocatable objects.  Using '-mno-shared'
20320     generally makes executables both smaller and quicker.
20321
20322     '-mshared' is the default.
20323
20324'-mplt'
20325'-mno-plt'
20326     Assume (do not assume) that the static and dynamic linkers support
20327     PLTs and copy relocations.  This option only affects '-mno-shared
20328     -mabicalls'.  For the n64 ABI, this option has no effect without
20329     '-msym32'.
20330
20331     You can make '-mplt' the default by configuring GCC with
20332     '--with-mips-plt'.  The default is '-mno-plt' otherwise.
20333
20334'-mxgot'
20335'-mno-xgot'
20336     Lift (do not lift) the usual restrictions on the size of the global
20337     offset table.
20338
20339     GCC normally uses a single instruction to load values from the GOT.
20340     While this is relatively efficient, it only works if the GOT is
20341     smaller than about 64k.  Anything larger causes the linker to
20342     report an error such as:
20343
20344          relocation truncated to fit: R_MIPS_GOT16 foobar
20345
20346     If this happens, you should recompile your code with '-mxgot'.
20347     This works with very large GOTs, although the code is also less
20348     efficient, since it takes three instructions to fetch the value of
20349     a global symbol.
20350
20351     Note that some linkers can create multiple GOTs.  If you have such
20352     a linker, you should only need to use '-mxgot' when a single object
20353     file accesses more than 64k's worth of GOT entries.  Very few do.
20354
20355     These options have no effect unless GCC is generating position
20356     independent code.
20357
20358'-mgp32'
20359     Assume that general-purpose registers are 32 bits wide.
20360
20361'-mgp64'
20362     Assume that general-purpose registers are 64 bits wide.
20363
20364'-mfp32'
20365     Assume that floating-point registers are 32 bits wide.
20366
20367'-mfp64'
20368     Assume that floating-point registers are 64 bits wide.
20369
20370'-mfpxx'
20371     Do not assume the width of floating-point registers.
20372
20373'-mhard-float'
20374     Use floating-point coprocessor instructions.
20375
20376'-msoft-float'
20377     Do not use floating-point coprocessor instructions.  Implement
20378     floating-point calculations using library calls instead.
20379
20380'-mno-float'
20381     Equivalent to '-msoft-float', but additionally asserts that the
20382     program being compiled does not perform any floating-point
20383     operations.  This option is presently supported only by some
20384     bare-metal MIPS configurations, where it may select a special set
20385     of libraries that lack all floating-point support (including, for
20386     example, the floating-point 'printf' formats).  If code compiled
20387     with '-mno-float' accidentally contains floating-point operations,
20388     it is likely to suffer a link-time or run-time failure.
20389
20390'-msingle-float'
20391     Assume that the floating-point coprocessor only supports
20392     single-precision operations.
20393
20394'-mdouble-float'
20395     Assume that the floating-point coprocessor supports
20396     double-precision operations.  This is the default.
20397
20398'-modd-spreg'
20399'-mno-odd-spreg'
20400     Enable the use of odd-numbered single-precision floating-point
20401     registers for the o32 ABI. This is the default for processors that
20402     are known to support these registers.  When using the o32 FPXX ABI,
20403     '-mno-odd-spreg' is set by default.
20404
20405'-mabs=2008'
20406'-mabs=legacy'
20407     These options control the treatment of the special not-a-number
20408     (NaN) IEEE 754 floating-point data with the 'abs.fmt' and 'neg.fmt'
20409     machine instructions.
20410
20411     By default or when '-mabs=legacy' is used the legacy treatment is
20412     selected.  In this case these instructions are considered
20413     arithmetic and avoided where correct operation is required and the
20414     input operand might be a NaN. A longer sequence of instructions
20415     that manipulate the sign bit of floating-point datum manually is
20416     used instead unless the '-ffinite-math-only' option has also been
20417     specified.
20418
20419     The '-mabs=2008' option selects the IEEE 754-2008 treatment.  In
20420     this case these instructions are considered non-arithmetic and
20421     therefore operating correctly in all cases, including in particular
20422     where the input operand is a NaN. These instructions are therefore
20423     always used for the respective operations.
20424
20425'-mnan=2008'
20426'-mnan=legacy'
20427     These options control the encoding of the special not-a-number
20428     (NaN) IEEE 754 floating-point data.
20429
20430     The '-mnan=legacy' option selects the legacy encoding.  In this
20431     case quiet NaNs (qNaNs) are denoted by the first bit of their
20432     trailing significand field being 0, whereas signaling NaNs (sNaNs)
20433     are denoted by the first bit of their trailing significand field
20434     being 1.
20435
20436     The '-mnan=2008' option selects the IEEE 754-2008 encoding.  In
20437     this case qNaNs are denoted by the first bit of their trailing
20438     significand field being 1, whereas sNaNs are denoted by the first
20439     bit of their trailing significand field being 0.
20440
20441     The default is '-mnan=legacy' unless GCC has been configured with
20442     '--with-nan=2008'.
20443
20444'-mllsc'
20445'-mno-llsc'
20446     Use (do not use) 'll', 'sc', and 'sync' instructions to implement
20447     atomic memory built-in functions.  When neither option is
20448     specified, GCC uses the instructions if the target architecture
20449     supports them.
20450
20451     '-mllsc' is useful if the runtime environment can emulate the
20452     instructions and '-mno-llsc' can be useful when compiling for
20453     nonstandard ISAs.  You can make either option the default by
20454     configuring GCC with '--with-llsc' and '--without-llsc'
20455     respectively.  '--with-llsc' is the default for some
20456     configurations; see the installation documentation for details.
20457
20458'-mdsp'
20459'-mno-dsp'
20460     Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
20461     Built-in Functions::.  This option defines the preprocessor macro
20462     '__mips_dsp'.  It also defines '__mips_dsp_rev' to 1.
20463
20464'-mdspr2'
20465'-mno-dspr2'
20466     Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
20467     Built-in Functions::.  This option defines the preprocessor macros
20468     '__mips_dsp' and '__mips_dspr2'.  It also defines '__mips_dsp_rev'
20469     to 2.
20470
20471'-msmartmips'
20472'-mno-smartmips'
20473     Use (do not use) the MIPS SmartMIPS ASE.
20474
20475'-mpaired-single'
20476'-mno-paired-single'
20477     Use (do not use) paired-single floating-point instructions.  *Note
20478     MIPS Paired-Single Support::.  This option requires hardware
20479     floating-point support to be enabled.
20480
20481'-mdmx'
20482'-mno-mdmx'
20483     Use (do not use) MIPS Digital Media Extension instructions.  This
20484     option can only be used when generating 64-bit code and requires
20485     hardware floating-point support to be enabled.
20486
20487'-mips3d'
20488'-mno-mips3d'
20489     Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
20490     Functions::.  The option '-mips3d' implies '-mpaired-single'.
20491
20492'-mmicromips'
20493'-mno-micromips'
20494     Generate (do not generate) microMIPS code.
20495
20496     MicroMIPS code generation can also be controlled on a per-function
20497     basis by means of 'micromips' and 'nomicromips' attributes.  *Note
20498     Function Attributes::, for more information.
20499
20500'-mmt'
20501'-mno-mt'
20502     Use (do not use) MT Multithreading instructions.
20503
20504'-mmcu'
20505'-mno-mcu'
20506     Use (do not use) the MIPS MCU ASE instructions.
20507
20508'-meva'
20509'-mno-eva'
20510     Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
20511
20512'-mvirt'
20513'-mno-virt'
20514     Use (do not use) the MIPS Virtualization (VZ) instructions.
20515
20516'-mxpa'
20517'-mno-xpa'
20518     Use (do not use) the MIPS eXtended Physical Address (XPA)
20519     instructions.
20520
20521'-mcrc'
20522'-mno-crc'
20523     Use (do not use) the MIPS Cyclic Redundancy Check (CRC)
20524     instructions.
20525
20526'-mginv'
20527'-mno-ginv'
20528     Use (do not use) the MIPS Global INValidate (GINV) instructions.
20529
20530'-mloongson-mmi'
20531'-mno-loongson-mmi'
20532     Use (do not use) the MIPS Loongson MultiMedia extensions
20533     Instructions (MMI).
20534
20535'-mloongson-ext'
20536'-mno-loongson-ext'
20537     Use (do not use) the MIPS Loongson EXTensions (EXT) instructions.
20538
20539'-mloongson-ext2'
20540'-mno-loongson-ext2'
20541     Use (do not use) the MIPS Loongson EXTensions r2 (EXT2)
20542     instructions.
20543
20544'-mlong64'
20545     Force 'long' types to be 64 bits wide.  See '-mlong32' for an
20546     explanation of the default and the way that the pointer size is
20547     determined.
20548
20549'-mlong32'
20550     Force 'long', 'int', and pointer types to be 32 bits wide.
20551
20552     The default size of 'int's, 'long's and pointers depends on the
20553     ABI.  All the supported ABIs use 32-bit 'int's.  The n64 ABI uses
20554     64-bit 'long's, as does the 64-bit EABI; the others use 32-bit
20555     'long's.  Pointers are the same size as 'long's, or the same size
20556     as integer registers, whichever is smaller.
20557
20558'-msym32'
20559'-mno-sym32'
20560     Assume (do not assume) that all symbols have 32-bit values,
20561     regardless of the selected ABI.  This option is useful in
20562     combination with '-mabi=64' and '-mno-abicalls' because it allows
20563     GCC to generate shorter and faster references to symbolic
20564     addresses.
20565
20566'-G NUM'
20567     Put definitions of externally-visible data in a small data section
20568     if that data is no bigger than NUM bytes.  GCC can then generate
20569     more efficient accesses to the data; see '-mgpopt' for details.
20570
20571     The default '-G' option depends on the configuration.
20572
20573'-mlocal-sdata'
20574'-mno-local-sdata'
20575     Extend (do not extend) the '-G' behavior to local data too, such as
20576     to static variables in C.  '-mlocal-sdata' is the default for all
20577     configurations.
20578
20579     If the linker complains that an application is using too much small
20580     data, you might want to try rebuilding the less
20581     performance-critical parts with '-mno-local-sdata'.  You might also
20582     want to build large libraries with '-mno-local-sdata', so that the
20583     libraries leave more room for the main program.
20584
20585'-mextern-sdata'
20586'-mno-extern-sdata'
20587     Assume (do not assume) that externally-defined data is in a small
20588     data section if the size of that data is within the '-G' limit.
20589     '-mextern-sdata' is the default for all configurations.
20590
20591     If you compile a module MOD with '-mextern-sdata' '-G NUM'
20592     '-mgpopt', and MOD references a variable VAR that is no bigger than
20593     NUM bytes, you must make sure that VAR is placed in a small data
20594     section.  If VAR is defined by another module, you must either
20595     compile that module with a high-enough '-G' setting or attach a
20596     'section' attribute to VAR's definition.  If VAR is common, you
20597     must link the application with a high-enough '-G' setting.
20598
20599     The easiest way of satisfying these restrictions is to compile and
20600     link every module with the same '-G' option.  However, you may wish
20601     to build a library that supports several different small data
20602     limits.  You can do this by compiling the library with the highest
20603     supported '-G' setting and additionally using '-mno-extern-sdata'
20604     to stop the library from making assumptions about
20605     externally-defined data.
20606
20607'-mgpopt'
20608'-mno-gpopt'
20609     Use (do not use) GP-relative accesses for symbols that are known to
20610     be in a small data section; see '-G', '-mlocal-sdata' and
20611     '-mextern-sdata'.  '-mgpopt' is the default for all configurations.
20612
20613     '-mno-gpopt' is useful for cases where the '$gp' register might not
20614     hold the value of '_gp'.  For example, if the code is part of a
20615     library that might be used in a boot monitor, programs that call
20616     boot monitor routines pass an unknown value in '$gp'.  (In such
20617     situations, the boot monitor itself is usually compiled with
20618     '-G0'.)
20619
20620     '-mno-gpopt' implies '-mno-local-sdata' and '-mno-extern-sdata'.
20621
20622'-membedded-data'
20623'-mno-embedded-data'
20624     Allocate variables to the read-only data section first if possible,
20625     then next in the small data section if possible, otherwise in data.
20626     This gives slightly slower code than the default, but reduces the
20627     amount of RAM required when executing, and thus may be preferred
20628     for some embedded systems.
20629
20630'-muninit-const-in-rodata'
20631'-mno-uninit-const-in-rodata'
20632     Put uninitialized 'const' variables in the read-only data section.
20633     This option is only meaningful in conjunction with
20634     '-membedded-data'.
20635
20636'-mcode-readable=SETTING'
20637     Specify whether GCC may generate code that reads from executable
20638     sections.  There are three possible settings:
20639
20640     '-mcode-readable=yes'
20641          Instructions may freely access executable sections.  This is
20642          the default setting.
20643
20644     '-mcode-readable=pcrel'
20645          MIPS16 PC-relative load instructions can access executable
20646          sections, but other instructions must not do so.  This option
20647          is useful on 4KSc and 4KSd processors when the code TLBs have
20648          the Read Inhibit bit set.  It is also useful on processors
20649          that can be configured to have a dual instruction/data SRAM
20650          interface and that, like the M4K, automatically redirect
20651          PC-relative loads to the instruction RAM.
20652
20653     '-mcode-readable=no'
20654          Instructions must not access executable sections.  This option
20655          can be useful on targets that are configured to have a dual
20656          instruction/data SRAM interface but that (unlike the M4K) do
20657          not automatically redirect PC-relative loads to the
20658          instruction RAM.
20659
20660'-msplit-addresses'
20661'-mno-split-addresses'
20662     Enable (disable) use of the '%hi()' and '%lo()' assembler
20663     relocation operators.  This option has been superseded by
20664     '-mexplicit-relocs' but is retained for backwards compatibility.
20665
20666'-mexplicit-relocs'
20667'-mno-explicit-relocs'
20668     Use (do not use) assembler relocation operators when dealing with
20669     symbolic addresses.  The alternative, selected by
20670     '-mno-explicit-relocs', is to use assembler macros instead.
20671
20672     '-mexplicit-relocs' is the default if GCC was configured to use an
20673     assembler that supports relocation operators.
20674
20675'-mcheck-zero-division'
20676'-mno-check-zero-division'
20677     Trap (do not trap) on integer division by zero.
20678
20679     The default is '-mcheck-zero-division'.
20680
20681'-mdivide-traps'
20682'-mdivide-breaks'
20683     MIPS systems check for division by zero by generating either a
20684     conditional trap or a break instruction.  Using traps results in
20685     smaller code, but is only supported on MIPS II and later.  Also,
20686     some versions of the Linux kernel have a bug that prevents trap
20687     from generating the proper signal ('SIGFPE').  Use '-mdivide-traps'
20688     to allow conditional traps on architectures that support them and
20689     '-mdivide-breaks' to force the use of breaks.
20690
20691     The default is usually '-mdivide-traps', but this can be overridden
20692     at configure time using '--with-divide=breaks'.  Divide-by-zero
20693     checks can be completely disabled using '-mno-check-zero-division'.
20694
20695'-mload-store-pairs'
20696'-mno-load-store-pairs'
20697     Enable (disable) an optimization that pairs consecutive load or
20698     store instructions to enable load/store bonding.  This option is
20699     enabled by default but only takes effect when the selected
20700     architecture is known to support bonding.
20701
20702'-mmemcpy'
20703'-mno-memcpy'
20704     Force (do not force) the use of 'memcpy' for non-trivial block
20705     moves.  The default is '-mno-memcpy', which allows GCC to inline
20706     most constant-sized copies.
20707
20708'-mlong-calls'
20709'-mno-long-calls'
20710     Disable (do not disable) use of the 'jal' instruction.  Calling
20711     functions using 'jal' is more efficient but requires the caller and
20712     callee to be in the same 256 megabyte segment.
20713
20714     This option has no effect on abicalls code.  The default is
20715     '-mno-long-calls'.
20716
20717'-mmad'
20718'-mno-mad'
20719     Enable (disable) use of the 'mad', 'madu' and 'mul' instructions,
20720     as provided by the R4650 ISA.
20721
20722'-mimadd'
20723'-mno-imadd'
20724     Enable (disable) use of the 'madd' and 'msub' integer instructions.
20725     The default is '-mimadd' on architectures that support 'madd' and
20726     'msub' except for the 74k architecture where it was found to
20727     generate slower code.
20728
20729'-mfused-madd'
20730'-mno-fused-madd'
20731     Enable (disable) use of the floating-point multiply-accumulate
20732     instructions, when they are available.  The default is
20733     '-mfused-madd'.
20734
20735     On the R8000 CPU when multiply-accumulate instructions are used,
20736     the intermediate product is calculated to infinite precision and is
20737     not subject to the FCSR Flush to Zero bit.  This may be undesirable
20738     in some circumstances.  On other processors the result is
20739     numerically identical to the equivalent computation using separate
20740     multiply, add, subtract and negate instructions.
20741
20742'-nocpp'
20743     Tell the MIPS assembler to not run its preprocessor over user
20744     assembler files (with a '.s' suffix) when assembling them.
20745
20746'-mfix-24k'
20747'-mno-fix-24k'
20748     Work around the 24K E48 (lost data on stores during refill) errata.
20749     The workarounds are implemented by the assembler rather than by
20750     GCC.
20751
20752'-mfix-r4000'
20753'-mno-fix-r4000'
20754     Work around certain R4000 CPU errata:
20755        - A double-word or a variable shift may give an incorrect result
20756          if executed immediately after starting an integer division.
20757        - A double-word or a variable shift may give an incorrect result
20758          if executed while an integer multiplication is in progress.
20759        - An integer division may give an incorrect result if started in
20760          a delay slot of a taken branch or a jump.
20761
20762'-mfix-r4400'
20763'-mno-fix-r4400'
20764     Work around certain R4400 CPU errata:
20765        - A double-word or a variable shift may give an incorrect result
20766          if executed immediately after starting an integer division.
20767
20768'-mfix-r10000'
20769'-mno-fix-r10000'
20770     Work around certain R10000 errata:
20771        - 'll'/'sc' sequences may not behave atomically on revisions
20772          prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
20773
20774     This option can only be used if the target architecture supports
20775     branch-likely instructions.  '-mfix-r10000' is the default when
20776     '-march=r10000' is used; '-mno-fix-r10000' is the default
20777     otherwise.
20778
20779'-mfix-r5900'
20780'-mno-fix-r5900'
20781     Do not attempt to schedule the preceding instruction into the delay
20782     slot of a branch instruction placed at the end of a short loop of
20783     six instructions or fewer and always schedule a 'nop' instruction
20784     there instead.  The short loop bug under certain conditions causes
20785     loops to execute only once or twice, due to a hardware bug in the
20786     R5900 chip.  The workaround is implemented by the assembler rather
20787     than by GCC.
20788
20789'-mfix-rm7000'
20790'-mno-fix-rm7000'
20791     Work around the RM7000 'dmult'/'dmultu' errata.  The workarounds
20792     are implemented by the assembler rather than by GCC.
20793
20794'-mfix-vr4120'
20795'-mno-fix-vr4120'
20796     Work around certain VR4120 errata:
20797        - 'dmultu' does not always produce the correct result.
20798        - 'div' and 'ddiv' do not always produce the correct result if
20799          one of the operands is negative.
20800     The workarounds for the division errata rely on special functions
20801     in 'libgcc.a'.  At present, these functions are only provided by
20802     the 'mips64vr*-elf' configurations.
20803
20804     Other VR4120 errata require a NOP to be inserted between certain
20805     pairs of instructions.  These errata are handled by the assembler,
20806     not by GCC itself.
20807
20808'-mfix-vr4130'
20809     Work around the VR4130 'mflo'/'mfhi' errata.  The workarounds are
20810     implemented by the assembler rather than by GCC, although GCC
20811     avoids using 'mflo' and 'mfhi' if the VR4130 'macc', 'macchi',
20812     'dmacc' and 'dmacchi' instructions are available instead.
20813
20814'-mfix-sb1'
20815'-mno-fix-sb1'
20816     Work around certain SB-1 CPU core errata.  (This flag currently
20817     works around the SB-1 revision 2 "F1" and "F2" floating-point
20818     errata.)
20819
20820'-mr10k-cache-barrier=SETTING'
20821     Specify whether GCC should insert cache barriers to avoid the side
20822     effects of speculation on R10K processors.
20823
20824     In common with many processors, the R10K tries to predict the
20825     outcome of a conditional branch and speculatively executes
20826     instructions from the "taken" branch.  It later aborts these
20827     instructions if the predicted outcome is wrong.  However, on the
20828     R10K, even aborted instructions can have side effects.
20829
20830     This problem only affects kernel stores and, depending on the
20831     system, kernel loads.  As an example, a speculatively-executed
20832     store may load the target memory into cache and mark the cache line
20833     as dirty, even if the store itself is later aborted.  If a DMA
20834     operation writes to the same area of memory before the "dirty" line
20835     is flushed, the cached data overwrites the DMA-ed data.  See the
20836     R10K processor manual for a full description, including other
20837     potential problems.
20838
20839     One workaround is to insert cache barrier instructions before every
20840     memory access that might be speculatively executed and that might
20841     have side effects even if aborted.  '-mr10k-cache-barrier=SETTING'
20842     controls GCC's implementation of this workaround.  It assumes that
20843     aborted accesses to any byte in the following regions does not have
20844     side effects:
20845
20846       1. the memory occupied by the current function's stack frame;
20847
20848       2. the memory occupied by an incoming stack argument;
20849
20850       3. the memory occupied by an object with a link-time-constant
20851          address.
20852
20853     It is the kernel's responsibility to ensure that speculative
20854     accesses to these regions are indeed safe.
20855
20856     If the input program contains a function declaration such as:
20857
20858          void foo (void);
20859
20860     then the implementation of 'foo' must allow 'j foo' and 'jal foo'
20861     to be executed speculatively.  GCC honors this restriction for
20862     functions it compiles itself.  It expects non-GCC functions (such
20863     as hand-written assembly code) to do the same.
20864
20865     The option has three forms:
20866
20867     '-mr10k-cache-barrier=load-store'
20868          Insert a cache barrier before a load or store that might be
20869          speculatively executed and that might have side effects even
20870          if aborted.
20871
20872     '-mr10k-cache-barrier=store'
20873          Insert a cache barrier before a store that might be
20874          speculatively executed and that might have side effects even
20875          if aborted.
20876
20877     '-mr10k-cache-barrier=none'
20878          Disable the insertion of cache barriers.  This is the default
20879          setting.
20880
20881'-mflush-func=FUNC'
20882'-mno-flush-func'
20883     Specifies the function to call to flush the I and D caches, or to
20884     not call any such function.  If called, the function must take the
20885     same arguments as the common '_flush_func', that is, the address of
20886     the memory range for which the cache is being flushed, the size of
20887     the memory range, and the number 3 (to flush both caches).  The
20888     default depends on the target GCC was configured for, but commonly
20889     is either '_flush_func' or '__cpu_flush'.
20890
20891'mbranch-cost=NUM'
20892     Set the cost of branches to roughly NUM "simple" instructions.
20893     This cost is only a heuristic and is not guaranteed to produce
20894     consistent results across releases.  A zero cost redundantly
20895     selects the default, which is based on the '-mtune' setting.
20896
20897'-mbranch-likely'
20898'-mno-branch-likely'
20899     Enable or disable use of Branch Likely instructions, regardless of
20900     the default for the selected architecture.  By default, Branch
20901     Likely instructions may be generated if they are supported by the
20902     selected architecture.  An exception is for the MIPS32 and MIPS64
20903     architectures and processors that implement those architectures;
20904     for those, Branch Likely instructions are not be generated by
20905     default because the MIPS32 and MIPS64 architectures specifically
20906     deprecate their use.
20907
20908'-mcompact-branches=never'
20909'-mcompact-branches=optimal'
20910'-mcompact-branches=always'
20911     These options control which form of branches will be generated.
20912     The default is '-mcompact-branches=optimal'.
20913
20914     The '-mcompact-branches=never' option ensures that compact branch
20915     instructions will never be generated.
20916
20917     The '-mcompact-branches=always' option ensures that a compact
20918     branch instruction will be generated if available.  If a compact
20919     branch instruction is not available, a delay slot form of the
20920     branch will be used instead.
20921
20922     This option is supported from MIPS Release 6 onwards.
20923
20924     The '-mcompact-branches=optimal' option will cause a delay slot
20925     branch to be used if one is available in the current ISA and the
20926     delay slot is successfully filled.  If the delay slot is not
20927     filled, a compact branch will be chosen if one is available.
20928
20929'-mfp-exceptions'
20930'-mno-fp-exceptions'
20931     Specifies whether FP exceptions are enabled.  This affects how FP
20932     instructions are scheduled for some processors.  The default is
20933     that FP exceptions are enabled.
20934
20935     For instance, on the SB-1, if FP exceptions are disabled, and we
20936     are emitting 64-bit code, then we can use both FP pipes.
20937     Otherwise, we can only use one FP pipe.
20938
20939'-mvr4130-align'
20940'-mno-vr4130-align'
20941     The VR4130 pipeline is two-way superscalar, but can only issue two
20942     instructions together if the first one is 8-byte aligned.  When
20943     this option is enabled, GCC aligns pairs of instructions that it
20944     thinks should execute in parallel.
20945
20946     This option only has an effect when optimizing for the VR4130.  It
20947     normally makes code faster, but at the expense of making it bigger.
20948     It is enabled by default at optimization level '-O3'.
20949
20950'-msynci'
20951'-mno-synci'
20952     Enable (disable) generation of 'synci' instructions on
20953     architectures that support it.  The 'synci' instructions (if
20954     enabled) are generated when '__builtin___clear_cache' is compiled.
20955
20956     This option defaults to '-mno-synci', but the default can be
20957     overridden by configuring GCC with '--with-synci'.
20958
20959     When compiling code for single processor systems, it is generally
20960     safe to use 'synci'.  However, on many multi-core (SMP) systems, it
20961     does not invalidate the instruction caches on all cores and may
20962     lead to undefined behavior.
20963
20964'-mrelax-pic-calls'
20965'-mno-relax-pic-calls'
20966     Try to turn PIC calls that are normally dispatched via register
20967     '$25' into direct calls.  This is only possible if the linker can
20968     resolve the destination at link time and if the destination is
20969     within range for a direct call.
20970
20971     '-mrelax-pic-calls' is the default if GCC was configured to use an
20972     assembler and a linker that support the '.reloc' assembly directive
20973     and '-mexplicit-relocs' is in effect.  With '-mno-explicit-relocs',
20974     this optimization can be performed by the assembler and the linker
20975     alone without help from the compiler.
20976
20977'-mmcount-ra-address'
20978'-mno-mcount-ra-address'
20979     Emit (do not emit) code that allows '_mcount' to modify the calling
20980     function's return address.  When enabled, this option extends the
20981     usual '_mcount' interface with a new RA-ADDRESS parameter, which
20982     has type 'intptr_t *' and is passed in register '$12'.  '_mcount'
20983     can then modify the return address by doing both of the following:
20984        * Returning the new address in register '$31'.
20985        * Storing the new address in '*RA-ADDRESS', if RA-ADDRESS is
20986          nonnull.
20987
20988     The default is '-mno-mcount-ra-address'.
20989
20990'-mframe-header-opt'
20991'-mno-frame-header-opt'
20992     Enable (disable) frame header optimization in the o32 ABI. When
20993     using the o32 ABI, calling functions will allocate 16 bytes on the
20994     stack for the called function to write out register arguments.
20995     When enabled, this optimization will suppress the allocation of the
20996     frame header if it can be determined that it is unused.
20997
20998     This optimization is off by default at all optimization levels.
20999
21000'-mlxc1-sxc1'
21001'-mno-lxc1-sxc1'
21002     When applicable, enable (disable) the generation of 'lwxc1',
21003     'swxc1', 'ldxc1', 'sdxc1' instructions.  Enabled by default.
21004
21005'-mmadd4'
21006'-mno-madd4'
21007     When applicable, enable (disable) the generation of 4-operand
21008     'madd.s', 'madd.d' and related instructions.  Enabled by default.
21009
21010
21011File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
21012
210133.18.29 MMIX Options
21014--------------------
21015
21016These options are defined for the MMIX:
21017
21018'-mlibfuncs'
21019'-mno-libfuncs'
21020     Specify that intrinsic library functions are being compiled,
21021     passing all values in registers, no matter the size.
21022
21023'-mepsilon'
21024'-mno-epsilon'
21025     Generate floating-point comparison instructions that compare with
21026     respect to the 'rE' epsilon register.
21027
21028'-mabi=mmixware'
21029'-mabi=gnu'
21030     Generate code that passes function parameters and return values
21031     that (in the called function) are seen as registers '$0' and up, as
21032     opposed to the GNU ABI which uses global registers '$231' and up.
21033
21034'-mzero-extend'
21035'-mno-zero-extend'
21036     When reading data from memory in sizes shorter than 64 bits, use
21037     (do not use) zero-extending load instructions by default, rather
21038     than sign-extending ones.
21039
21040'-mknuthdiv'
21041'-mno-knuthdiv'
21042     Make the result of a division yielding a remainder have the same
21043     sign as the divisor.  With the default, '-mno-knuthdiv', the sign
21044     of the remainder follows the sign of the dividend.  Both methods
21045     are arithmetically valid, the latter being almost exclusively used.
21046
21047'-mtoplevel-symbols'
21048'-mno-toplevel-symbols'
21049     Prepend (do not prepend) a ':' to all global symbols, so the
21050     assembly code can be used with the 'PREFIX' assembly directive.
21051
21052'-melf'
21053     Generate an executable in the ELF format, rather than the default
21054     'mmo' format used by the 'mmix' simulator.
21055
21056'-mbranch-predict'
21057'-mno-branch-predict'
21058     Use (do not use) the probable-branch instructions, when static
21059     branch prediction indicates a probable branch.
21060
21061'-mbase-addresses'
21062'-mno-base-addresses'
21063     Generate (do not generate) code that uses _base addresses_.  Using
21064     a base address automatically generates a request (handled by the
21065     assembler and the linker) for a constant to be set up in a global
21066     register.  The register is used for one or more base address
21067     requests within the range 0 to 255 from the value held in the
21068     register.  The generally leads to short and fast code, but the
21069     number of different data items that can be addressed is limited.
21070     This means that a program that uses lots of static data may require
21071     '-mno-base-addresses'.
21072
21073'-msingle-exit'
21074'-mno-single-exit'
21075     Force (do not force) generated code to have a single exit point in
21076     each function.
21077
21078
21079File: gcc.info,  Node: MN10300 Options,  Next: Moxie Options,  Prev: MMIX Options,  Up: Submodel Options
21080
210813.18.30 MN10300 Options
21082-----------------------
21083
21084These '-m' options are defined for Matsushita MN10300 architectures:
21085
21086'-mmult-bug'
21087     Generate code to avoid bugs in the multiply instructions for the
21088     MN10300 processors.  This is the default.
21089
21090'-mno-mult-bug'
21091     Do not generate code to avoid bugs in the multiply instructions for
21092     the MN10300 processors.
21093
21094'-mam33'
21095     Generate code using features specific to the AM33 processor.
21096
21097'-mno-am33'
21098     Do not generate code using features specific to the AM33 processor.
21099     This is the default.
21100
21101'-mam33-2'
21102     Generate code using features specific to the AM33/2.0 processor.
21103
21104'-mam34'
21105     Generate code using features specific to the AM34 processor.
21106
21107'-mtune=CPU-TYPE'
21108     Use the timing characteristics of the indicated CPU type when
21109     scheduling instructions.  This does not change the targeted
21110     processor type.  The CPU type must be one of 'mn10300', 'am33',
21111     'am33-2' or 'am34'.
21112
21113'-mreturn-pointer-on-d0'
21114     When generating a function that returns a pointer, return the
21115     pointer in both 'a0' and 'd0'.  Otherwise, the pointer is returned
21116     only in 'a0', and attempts to call such functions without a
21117     prototype result in errors.  Note that this option is on by
21118     default; use '-mno-return-pointer-on-d0' to disable it.
21119
21120'-mno-crt0'
21121     Do not link in the C run-time initialization object file.
21122
21123'-mrelax'
21124     Indicate to the linker that it should perform a relaxation
21125     optimization pass to shorten branches, calls and absolute memory
21126     addresses.  This option only has an effect when used on the command
21127     line for the final link step.
21128
21129     This option makes symbolic debugging impossible.
21130
21131'-mliw'
21132     Allow the compiler to generate _Long Instruction Word_ instructions
21133     if the target is the 'AM33' or later.  This is the default.  This
21134     option defines the preprocessor macro '__LIW__'.
21135
21136'-mno-liw'
21137     Do not allow the compiler to generate _Long Instruction Word_
21138     instructions.  This option defines the preprocessor macro
21139     '__NO_LIW__'.
21140
21141'-msetlb'
21142     Allow the compiler to generate the _SETLB_ and _Lcc_ instructions
21143     if the target is the 'AM33' or later.  This is the default.  This
21144     option defines the preprocessor macro '__SETLB__'.
21145
21146'-mno-setlb'
21147     Do not allow the compiler to generate _SETLB_ or _Lcc_
21148     instructions.  This option defines the preprocessor macro
21149     '__NO_SETLB__'.
21150
21151
21152File: gcc.info,  Node: Moxie Options,  Next: MSP430 Options,  Prev: MN10300 Options,  Up: Submodel Options
21153
211543.18.31 Moxie Options
21155---------------------
21156
21157'-meb'
21158     Generate big-endian code.  This is the default for 'moxie-*-*'
21159     configurations.
21160
21161'-mel'
21162     Generate little-endian code.
21163
21164'-mmul.x'
21165     Generate mul.x and umul.x instructions.  This is the default for
21166     'moxiebox-*-*' configurations.
21167
21168'-mno-crt0'
21169     Do not link in the C run-time initialization object file.
21170
21171
21172File: gcc.info,  Node: MSP430 Options,  Next: NDS32 Options,  Prev: Moxie Options,  Up: Submodel Options
21173
211743.18.32 MSP430 Options
21175----------------------
21176
21177These options are defined for the MSP430:
21178
21179'-masm-hex'
21180     Force assembly output to always use hex constants.  Normally such
21181     constants are signed decimals, but this option is available for
21182     testsuite and/or aesthetic purposes.
21183
21184'-mmcu='
21185     Select the MCU to target.  This is used to create a C preprocessor
21186     symbol based upon the MCU name, converted to upper case and pre-
21187     and post-fixed with '__'.  This in turn is used by the 'msp430.h'
21188     header file to select an MCU-specific supplementary header file.
21189
21190     The option also sets the ISA to use.  If the MCU name is one that
21191     is known to only support the 430 ISA then that is selected,
21192     otherwise the 430X ISA is selected.  A generic MCU name of 'msp430'
21193     can also be used to select the 430 ISA. Similarly the generic
21194     'msp430x' MCU name selects the 430X ISA.
21195
21196     In addition an MCU-specific linker script is added to the linker
21197     command line.  The script's name is the name of the MCU with '.ld'
21198     appended.  Thus specifying '-mmcu=xxx' on the 'gcc' command line
21199     defines the C preprocessor symbol '__XXX__' and cause the linker to
21200     search for a script called 'xxx.ld'.
21201
21202     This option is also passed on to the assembler.
21203
21204'-mwarn-mcu'
21205'-mno-warn-mcu'
21206     This option enables or disables warnings about conflicts between
21207     the MCU name specified by the '-mmcu' option and the ISA set by the
21208     '-mcpu' option and/or the hardware multiply support set by the
21209     '-mhwmult' option.  It also toggles warnings about unrecognized MCU
21210     names.  This option is on by default.
21211
21212'-mcpu='
21213     Specifies the ISA to use.  Accepted values are 'msp430', 'msp430x'
21214     and 'msp430xv2'.  This option is deprecated.  The '-mmcu=' option
21215     should be used to select the ISA.
21216
21217'-msim'
21218     Link to the simulator runtime libraries and linker script.
21219     Overrides any scripts that would be selected by the '-mmcu='
21220     option.
21221
21222'-mlarge'
21223     Use large-model addressing (20-bit pointers, 32-bit 'size_t').
21224
21225'-msmall'
21226     Use small-model addressing (16-bit pointers, 16-bit 'size_t').
21227
21228'-mrelax'
21229     This option is passed to the assembler and linker, and allows the
21230     linker to perform certain optimizations that cannot be done until
21231     the final link.
21232
21233'mhwmult='
21234     Describes the type of hardware multiply supported by the target.
21235     Accepted values are 'none' for no hardware multiply, '16bit' for
21236     the original 16-bit-only multiply supported by early MCUs.  '32bit'
21237     for the 16/32-bit multiply supported by later MCUs and 'f5series'
21238     for the 16/32-bit multiply supported by F5-series MCUs.  A value of
21239     'auto' can also be given.  This tells GCC to deduce the hardware
21240     multiply support based upon the MCU name provided by the '-mmcu'
21241     option.  If no '-mmcu' option is specified or if the MCU name is
21242     not recognized then no hardware multiply support is assumed.
21243     'auto' is the default setting.
21244
21245     Hardware multiplies are normally performed by calling a library
21246     routine.  This saves space in the generated code.  When compiling
21247     at '-O3' or higher however the hardware multiplier is invoked
21248     inline.  This makes for bigger, but faster code.
21249
21250     The hardware multiply routines disable interrupts whilst running
21251     and restore the previous interrupt state when they finish.  This
21252     makes them safe to use inside interrupt handlers as well as in
21253     normal code.
21254
21255'-minrt'
21256     Enable the use of a minimum runtime environment - no static
21257     initializers or constructors.  This is intended for
21258     memory-constrained devices.  The compiler includes special symbols
21259     in some objects that tell the linker and runtime which code
21260     fragments are required.
21261
21262'-mcode-region='
21263'-mdata-region='
21264     These options tell the compiler where to place functions and data
21265     that do not have one of the 'lower', 'upper', 'either' or 'section'
21266     attributes.  Possible values are 'lower', 'upper', 'either' or
21267     'any'.  The first three behave like the corresponding attribute.
21268     The fourth possible value - 'any' - is the default.  It leaves
21269     placement entirely up to the linker script and how it assigns the
21270     standard sections ('.text', '.data', etc) to the memory regions.
21271
21272'-msilicon-errata='
21273     This option passes on a request to assembler to enable the fixes
21274     for the named silicon errata.
21275
21276'-msilicon-errata-warn='
21277     This option passes on a request to the assembler to enable warning
21278     messages when a silicon errata might need to be applied.
21279
21280
21281File: gcc.info,  Node: NDS32 Options,  Next: Nios II Options,  Prev: MSP430 Options,  Up: Submodel Options
21282
212833.18.33 NDS32 Options
21284---------------------
21285
21286These options are defined for NDS32 implementations:
21287
21288'-mbig-endian'
21289     Generate code in big-endian mode.
21290
21291'-mlittle-endian'
21292     Generate code in little-endian mode.
21293
21294'-mreduced-regs'
21295     Use reduced-set registers for register allocation.
21296
21297'-mfull-regs'
21298     Use full-set registers for register allocation.
21299
21300'-mcmov'
21301     Generate conditional move instructions.
21302
21303'-mno-cmov'
21304     Do not generate conditional move instructions.
21305
21306'-mext-perf'
21307     Generate performance extension instructions.
21308
21309'-mno-ext-perf'
21310     Do not generate performance extension instructions.
21311
21312'-mext-perf2'
21313     Generate performance extension 2 instructions.
21314
21315'-mno-ext-perf2'
21316     Do not generate performance extension 2 instructions.
21317
21318'-mext-string'
21319     Generate string extension instructions.
21320
21321'-mno-ext-string'
21322     Do not generate string extension instructions.
21323
21324'-mv3push'
21325     Generate v3 push25/pop25 instructions.
21326
21327'-mno-v3push'
21328     Do not generate v3 push25/pop25 instructions.
21329
21330'-m16-bit'
21331     Generate 16-bit instructions.
21332
21333'-mno-16-bit'
21334     Do not generate 16-bit instructions.
21335
21336'-misr-vector-size=NUM'
21337     Specify the size of each interrupt vector, which must be 4 or 16.
21338
21339'-mcache-block-size=NUM'
21340     Specify the size of each cache block, which must be a power of 2
21341     between 4 and 512.
21342
21343'-march=ARCH'
21344     Specify the name of the target architecture.
21345
21346'-mcmodel=CODE-MODEL'
21347     Set the code model to one of
21348     'small'
21349          All the data and read-only data segments must be within 512KB
21350          addressing space.  The text segment must be within 16MB
21351          addressing space.
21352     'medium'
21353          The data segment must be within 512KB while the read-only data
21354          segment can be within 4GB addressing space.  The text segment
21355          should be still within 16MB addressing space.
21356     'large'
21357          All the text and data segments can be within 4GB addressing
21358          space.
21359
21360'-mctor-dtor'
21361     Enable constructor/destructor feature.
21362
21363'-mrelax'
21364     Guide linker to relax instructions.
21365
21366
21367File: gcc.info,  Node: Nios II Options,  Next: Nvidia PTX Options,  Prev: NDS32 Options,  Up: Submodel Options
21368
213693.18.34 Nios II Options
21370-----------------------
21371
21372These are the options defined for the Altera Nios II processor.
21373
21374'-G NUM'
21375     Put global and static objects less than or equal to NUM bytes into
21376     the small data or BSS sections instead of the normal data or BSS
21377     sections.  The default value of NUM is 8.
21378
21379'-mgpopt=OPTION'
21380'-mgpopt'
21381'-mno-gpopt'
21382     Generate (do not generate) GP-relative accesses.  The following
21383     OPTION names are recognized:
21384
21385     'none'
21386          Do not generate GP-relative accesses.
21387
21388     'local'
21389          Generate GP-relative accesses for small data objects that are
21390          not external, weak, or uninitialized common symbols.  Also use
21391          GP-relative addressing for objects that have been explicitly
21392          placed in a small data section via a 'section' attribute.
21393
21394     'global'
21395          As for 'local', but also generate GP-relative accesses for
21396          small data objects that are external, weak, or common.  If you
21397          use this option, you must ensure that all parts of your
21398          program (including libraries) are compiled with the same '-G'
21399          setting.
21400
21401     'data'
21402          Generate GP-relative accesses for all data objects in the
21403          program.  If you use this option, the entire data and BSS
21404          segments of your program must fit in 64K of memory and you
21405          must use an appropriate linker script to allocate them within
21406          the addressable range of the global pointer.
21407
21408     'all'
21409          Generate GP-relative addresses for function pointers as well
21410          as data pointers.  If you use this option, the entire text,
21411          data, and BSS segments of your program must fit in 64K of
21412          memory and you must use an appropriate linker script to
21413          allocate them within the addressable range of the global
21414          pointer.
21415
21416     '-mgpopt' is equivalent to '-mgpopt=local', and '-mno-gpopt' is
21417     equivalent to '-mgpopt=none'.
21418
21419     The default is '-mgpopt' except when '-fpic' or '-fPIC' is
21420     specified to generate position-independent code.  Note that the
21421     Nios II ABI does not permit GP-relative accesses from shared
21422     libraries.
21423
21424     You may need to specify '-mno-gpopt' explicitly when building
21425     programs that include large amounts of small data, including large
21426     GOT data sections.  In this case, the 16-bit offset for GP-relative
21427     addressing may not be large enough to allow access to the entire
21428     small data section.
21429
21430'-mgprel-sec=REGEXP'
21431     This option specifies additional section names that can be accessed
21432     via GP-relative addressing.  It is most useful in conjunction with
21433     'section' attributes on variable declarations (*note Common
21434     Variable Attributes::) and a custom linker script.  The REGEXP is a
21435     POSIX Extended Regular Expression.
21436
21437     This option does not affect the behavior of the '-G' option, and
21438     the specified sections are in addition to the standard '.sdata' and
21439     '.sbss' small-data sections that are recognized by '-mgpopt'.
21440
21441'-mr0rel-sec=REGEXP'
21442     This option specifies names of sections that can be accessed via a
21443     16-bit offset from 'r0'; that is, in the low 32K or high 32K of the
21444     32-bit address space.  It is most useful in conjunction with
21445     'section' attributes on variable declarations (*note Common
21446     Variable Attributes::) and a custom linker script.  The REGEXP is a
21447     POSIX Extended Regular Expression.
21448
21449     In contrast to the use of GP-relative addressing for small data,
21450     zero-based addressing is never generated by default and there are
21451     no conventional section names used in standard linker scripts for
21452     sections in the low or high areas of memory.
21453
21454'-mel'
21455'-meb'
21456     Generate little-endian (default) or big-endian (experimental) code,
21457     respectively.
21458
21459'-march=ARCH'
21460     This specifies the name of the target Nios II architecture.  GCC
21461     uses this name to determine what kind of instructions it can emit
21462     when generating assembly code.  Permissible names are: 'r1', 'r2'.
21463
21464     The preprocessor macro '__nios2_arch__' is available to programs,
21465     with value 1 or 2, indicating the targeted ISA level.
21466
21467'-mbypass-cache'
21468'-mno-bypass-cache'
21469     Force all load and store instructions to always bypass cache by
21470     using I/O variants of the instructions.  The default is not to
21471     bypass the cache.
21472
21473'-mno-cache-volatile'
21474'-mcache-volatile'
21475     Volatile memory access bypass the cache using the I/O variants of
21476     the load and store instructions.  The default is not to bypass the
21477     cache.
21478
21479'-mno-fast-sw-div'
21480'-mfast-sw-div'
21481     Do not use table-based fast divide for small numbers.  The default
21482     is to use the fast divide at '-O3' and above.
21483
21484'-mno-hw-mul'
21485'-mhw-mul'
21486'-mno-hw-mulx'
21487'-mhw-mulx'
21488'-mno-hw-div'
21489'-mhw-div'
21490     Enable or disable emitting 'mul', 'mulx' and 'div' family of
21491     instructions by the compiler.  The default is to emit 'mul' and not
21492     emit 'div' and 'mulx'.
21493
21494'-mbmx'
21495'-mno-bmx'
21496'-mcdx'
21497'-mno-cdx'
21498     Enable or disable generation of Nios II R2 BMX (bit manipulation)
21499     and CDX (code density) instructions.  Enabling these instructions
21500     also requires '-march=r2'.  Since these instructions are optional
21501     extensions to the R2 architecture, the default is not to emit them.
21502
21503'-mcustom-INSN=N'
21504'-mno-custom-INSN'
21505     Each '-mcustom-INSN=N' option enables use of a custom instruction
21506     with encoding N when generating code that uses INSN.  For example,
21507     '-mcustom-fadds=253' generates custom instruction 253 for
21508     single-precision floating-point add operations instead of the
21509     default behavior of using a library call.
21510
21511     The following values of INSN are supported.  Except as otherwise
21512     noted, floating-point operations are expected to be implemented
21513     with normal IEEE 754 semantics and correspond directly to the C
21514     operators or the equivalent GCC built-in functions (*note Other
21515     Builtins::).
21516
21517     Single-precision floating point:
21518
21519     'fadds', 'fsubs', 'fdivs', 'fmuls'
21520          Binary arithmetic operations.
21521
21522     'fnegs'
21523          Unary negation.
21524
21525     'fabss'
21526          Unary absolute value.
21527
21528     'fcmpeqs', 'fcmpges', 'fcmpgts', 'fcmples', 'fcmplts', 'fcmpnes'
21529          Comparison operations.
21530
21531     'fmins', 'fmaxs'
21532          Floating-point minimum and maximum.  These instructions are
21533          only generated if '-ffinite-math-only' is specified.
21534
21535     'fsqrts'
21536          Unary square root operation.
21537
21538     'fcoss', 'fsins', 'ftans', 'fatans', 'fexps', 'flogs'
21539          Floating-point trigonometric and exponential functions.  These
21540          instructions are only generated if
21541          '-funsafe-math-optimizations' is also specified.
21542
21543     Double-precision floating point:
21544
21545     'faddd', 'fsubd', 'fdivd', 'fmuld'
21546          Binary arithmetic operations.
21547
21548     'fnegd'
21549          Unary negation.
21550
21551     'fabsd'
21552          Unary absolute value.
21553
21554     'fcmpeqd', 'fcmpged', 'fcmpgtd', 'fcmpled', 'fcmpltd', 'fcmpned'
21555          Comparison operations.
21556
21557     'fmind', 'fmaxd'
21558          Double-precision minimum and maximum.  These instructions are
21559          only generated if '-ffinite-math-only' is specified.
21560
21561     'fsqrtd'
21562          Unary square root operation.
21563
21564     'fcosd', 'fsind', 'ftand', 'fatand', 'fexpd', 'flogd'
21565          Double-precision trigonometric and exponential functions.
21566          These instructions are only generated if
21567          '-funsafe-math-optimizations' is also specified.
21568
21569     Conversions:
21570     'fextsd'
21571          Conversion from single precision to double precision.
21572
21573     'ftruncds'
21574          Conversion from double precision to single precision.
21575
21576     'fixsi', 'fixsu', 'fixdi', 'fixdu'
21577          Conversion from floating point to signed or unsigned integer
21578          types, with truncation towards zero.
21579
21580     'round'
21581          Conversion from single-precision floating point to signed
21582          integer, rounding to the nearest integer and ties away from
21583          zero.  This corresponds to the '__builtin_lroundf' function
21584          when '-fno-math-errno' is used.
21585
21586     'floatis', 'floatus', 'floatid', 'floatud'
21587          Conversion from signed or unsigned integer types to
21588          floating-point types.
21589
21590     In addition, all of the following transfer instructions for
21591     internal registers X and Y must be provided to use any of the
21592     double-precision floating-point instructions.  Custom instructions
21593     taking two double-precision source operands expect the first
21594     operand in the 64-bit register X. The other operand (or only
21595     operand of a unary operation) is given to the custom arithmetic
21596     instruction with the least significant half in source register SRC1
21597     and the most significant half in SRC2.  A custom instruction that
21598     returns a double-precision result returns the most significant 32
21599     bits in the destination register and the other half in 32-bit
21600     register Y. GCC automatically generates the necessary code
21601     sequences to write register X and/or read register Y when
21602     double-precision floating-point instructions are used.
21603
21604     'fwrx'
21605          Write SRC1 into the least significant half of X and SRC2 into
21606          the most significant half of X.
21607
21608     'fwry'
21609          Write SRC1 into Y.
21610
21611     'frdxhi', 'frdxlo'
21612          Read the most or least (respectively) significant half of X
21613          and store it in DEST.
21614
21615     'frdy'
21616          Read the value of Y and store it into DEST.
21617
21618     Note that you can gain more local control over generation of Nios
21619     II custom instructions by using the 'target("custom-INSN=N")' and
21620     'target("no-custom-INSN")' function attributes (*note Function
21621     Attributes::) or pragmas (*note Function Specific Option
21622     Pragmas::).
21623
21624'-mcustom-fpu-cfg=NAME'
21625
21626     This option enables a predefined, named set of custom instruction
21627     encodings (see '-mcustom-INSN' above).  Currently, the following
21628     sets are defined:
21629
21630     '-mcustom-fpu-cfg=60-1' is equivalent to:
21631          -mcustom-fmuls=252
21632          -mcustom-fadds=253
21633          -mcustom-fsubs=254
21634          -fsingle-precision-constant
21635
21636     '-mcustom-fpu-cfg=60-2' is equivalent to:
21637          -mcustom-fmuls=252
21638          -mcustom-fadds=253
21639          -mcustom-fsubs=254
21640          -mcustom-fdivs=255
21641          -fsingle-precision-constant
21642
21643     '-mcustom-fpu-cfg=72-3' is equivalent to:
21644          -mcustom-floatus=243
21645          -mcustom-fixsi=244
21646          -mcustom-floatis=245
21647          -mcustom-fcmpgts=246
21648          -mcustom-fcmples=249
21649          -mcustom-fcmpeqs=250
21650          -mcustom-fcmpnes=251
21651          -mcustom-fmuls=252
21652          -mcustom-fadds=253
21653          -mcustom-fsubs=254
21654          -mcustom-fdivs=255
21655          -fsingle-precision-constant
21656
21657     Custom instruction assignments given by individual '-mcustom-INSN='
21658     options override those given by '-mcustom-fpu-cfg=', regardless of
21659     the order of the options on the command line.
21660
21661     Note that you can gain more local control over selection of a FPU
21662     configuration by using the 'target("custom-fpu-cfg=NAME")' function
21663     attribute (*note Function Attributes::) or pragma (*note Function
21664     Specific Option Pragmas::).
21665
21666 These additional '-m' options are available for the Altera Nios II ELF
21667(bare-metal) target:
21668
21669'-mhal'
21670     Link with HAL BSP. This suppresses linking with the GCC-provided C
21671     runtime startup and termination code, and is typically used in
21672     conjunction with '-msys-crt0=' to specify the location of the
21673     alternate startup code provided by the HAL BSP.
21674
21675'-msmallc'
21676     Link with a limited version of the C library, '-lsmallc', rather
21677     than Newlib.
21678
21679'-msys-crt0=STARTFILE'
21680     STARTFILE is the file name of the startfile (crt0) to use when
21681     linking.  This option is only useful in conjunction with '-mhal'.
21682
21683'-msys-lib=SYSTEMLIB'
21684     SYSTEMLIB is the library name of the library that provides
21685     low-level system calls required by the C library, e.g. 'read' and
21686     'write'.  This option is typically used to link with a library
21687     provided by a HAL BSP.
21688
21689
21690File: gcc.info,  Node: Nvidia PTX Options,  Next: OpenRISC Options,  Prev: Nios II Options,  Up: Submodel Options
21691
216923.18.35 Nvidia PTX Options
21693--------------------------
21694
21695These options are defined for Nvidia PTX:
21696
21697'-m32'
21698'-m64'
21699     Generate code for 32-bit or 64-bit ABI.
21700
21701'-misa=ISA-STRING'
21702     Generate code for given the specified PTX ISA (e.g. 'sm_35').  ISA
21703     strings must be lower-case.  Valid ISA strings include 'sm_30' and
21704     'sm_35'.  The default ISA is sm_30.
21705
21706'-mmainkernel'
21707     Link in code for a __main kernel.  This is for stand-alone instead
21708     of offloading execution.
21709
21710'-moptimize'
21711     Apply partitioned execution optimizations.  This is the default
21712     when any level of optimization is selected.
21713
21714'-msoft-stack'
21715     Generate code that does not use '.local' memory directly for stack
21716     storage.  Instead, a per-warp stack pointer is maintained
21717     explicitly.  This enables variable-length stack allocation (with
21718     variable-length arrays or 'alloca'), and when global memory is used
21719     for underlying storage, makes it possible to access automatic
21720     variables from other threads, or with atomic instructions.  This
21721     code generation variant is used for OpenMP offloading, but the
21722     option is exposed on its own for the purpose of testing the
21723     compiler; to generate code suitable for linking into programs using
21724     OpenMP offloading, use option '-mgomp'.
21725
21726'-muniform-simt'
21727     Switch to code generation variant that allows to execute all
21728     threads in each warp, while maintaining memory state and side
21729     effects as if only one thread in each warp was active outside of
21730     OpenMP SIMD regions.  All atomic operations and calls to runtime
21731     (malloc, free, vprintf) are conditionally executed (iff current
21732     lane index equals the master lane index), and the register being
21733     assigned is copied via a shuffle instruction from the master lane.
21734     Outside of SIMD regions lane 0 is the master; inside, each thread
21735     sees itself as the master.  Shared memory array 'int __nvptx_uni[]'
21736     stores all-zeros or all-ones bitmasks for each warp, indicating
21737     current mode (0 outside of SIMD regions).  Each thread can
21738     bitwise-and the bitmask at position 'tid.y' with current lane index
21739     to compute the master lane index.
21740
21741'-mgomp'
21742     Generate code for use in OpenMP offloading: enables '-msoft-stack'
21743     and '-muniform-simt' options, and selects corresponding multilib
21744     variant.
21745
21746
21747File: gcc.info,  Node: OpenRISC Options,  Next: PDP-11 Options,  Prev: Nvidia PTX Options,  Up: Submodel Options
21748
217493.18.36 OpenRISC Options
21750------------------------
21751
21752These options are defined for OpenRISC:
21753
21754'-mboard=NAME'
21755     Configure a board specific runtime.  This will be passed to the
21756     linker for newlib board library linking.  The default is 'or1ksim'.
21757
21758'-mnewlib'
21759     For compatibility, it's always newlib for elf now.
21760
21761'-mhard-div'
21762     Generate code for hardware which supports divide instructions.
21763     This is the default.
21764
21765'-mhard-mul'
21766     Generate code for hardware which supports multiply instructions.
21767     This is the default.
21768
21769'-mcmov'
21770     Generate code for hardware which supports the conditional move
21771     ('l.cmov') instruction.
21772
21773'-mror'
21774     Generate code for hardware which supports rotate right
21775     instructions.
21776
21777'-msext'
21778     Generate code for hardware which supports sign-extension
21779     instructions.
21780
21781'-msfimm'
21782     Generate code for hardware which supports set flag immediate
21783     ('l.sf*i') instructions.
21784
21785'-mshftimm'
21786     Generate code for hardware which supports shift immediate related
21787     instructions (i.e.  'l.srai', 'l.srli', 'l.slli', '1.rori').  Note,
21788     to enable generation of the 'l.rori' instruction the '-mror' flag
21789     must also be specified.
21790
21791'-msoft-div'
21792     Generate code for hardware which requires divide instruction
21793     emulation.
21794
21795'-msoft-mul'
21796     Generate code for hardware which requires multiply instruction
21797     emulation.
21798
21799
21800File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: OpenRISC Options,  Up: Submodel Options
21801
218023.18.37 PDP-11 Options
21803----------------------
21804
21805These options are defined for the PDP-11:
21806
21807'-mfpu'
21808     Use hardware FPP floating point.  This is the default.  (FIS
21809     floating point on the PDP-11/40 is not supported.)  Implies -m45.
21810
21811'-msoft-float'
21812     Do not use hardware floating point.
21813
21814'-mac0'
21815     Return floating-point results in ac0 (fr0 in Unix assembler
21816     syntax).
21817
21818'-mno-ac0'
21819     Return floating-point results in memory.  This is the default.
21820
21821'-m40'
21822     Generate code for a PDP-11/40.  Implies -msoft-float -mno-split.
21823
21824'-m45'
21825     Generate code for a PDP-11/45.  This is the default.
21826
21827'-m10'
21828     Generate code for a PDP-11/10.  Implies -msoft-float -mno-split.
21829
21830'-mint16'
21831'-mno-int32'
21832     Use 16-bit 'int'.  This is the default.
21833
21834'-mint32'
21835'-mno-int16'
21836     Use 32-bit 'int'.
21837
21838'-msplit'
21839     Target has split instruction and data space.  Implies -m45.
21840
21841'-munix-asm'
21842     Use Unix assembler syntax.
21843
21844'-mdec-asm'
21845     Use DEC assembler syntax.
21846
21847'-mgnu-asm'
21848     Use GNU assembler syntax.  This is the default.
21849
21850'-mlra'
21851     Use the new LRA register allocator.  By default, the old "reload"
21852     allocator is used.
21853
21854
21855File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
21856
218573.18.38 picoChip Options
21858------------------------
21859
21860These '-m' options are defined for picoChip implementations:
21861
21862'-mae=AE_TYPE'
21863     Set the instruction set, register set, and instruction scheduling
21864     parameters for array element type AE_TYPE.  Supported values for
21865     AE_TYPE are 'ANY', 'MUL', and 'MAC'.
21866
21867     '-mae=ANY' selects a completely generic AE type.  Code generated
21868     with this option runs on any of the other AE types.  The code is
21869     not as efficient as it would be if compiled for a specific AE type,
21870     and some types of operation (e.g., multiplication) do not work
21871     properly on all types of AE.
21872
21873     '-mae=MUL' selects a MUL AE type.  This is the most useful AE type
21874     for compiled code, and is the default.
21875
21876     '-mae=MAC' selects a DSP-style MAC AE. Code compiled with this
21877     option may suffer from poor performance of byte (char)
21878     manipulation, since the DSP AE does not provide hardware support
21879     for byte load/stores.
21880
21881'-msymbol-as-address'
21882     Enable the compiler to directly use a symbol name as an address in
21883     a load/store instruction, without first loading it into a register.
21884     Typically, the use of this option generates larger programs, which
21885     run faster than when the option isn't used.  However, the results
21886     vary from program to program, so it is left as a user option,
21887     rather than being permanently enabled.
21888
21889'-mno-inefficient-warnings'
21890     Disables warnings about the generation of inefficient code.  These
21891     warnings can be generated, for example, when compiling code that
21892     performs byte-level memory operations on the MAC AE type.  The MAC
21893     AE has no hardware support for byte-level memory operations, so all
21894     byte load/stores must be synthesized from word load/store
21895     operations.  This is inefficient and a warning is generated to
21896     indicate that you should rewrite the code to avoid byte operations,
21897     or to target an AE type that has the necessary hardware support.
21898     This option disables these warnings.
21899
21900
21901File: gcc.info,  Node: PowerPC Options,  Next: RISC-V Options,  Prev: picoChip Options,  Up: Submodel Options
21902
219033.18.39 PowerPC Options
21904-----------------------
21905
21906These are listed under *Note RS/6000 and PowerPC Options::.
21907
21908
21909File: gcc.info,  Node: RISC-V Options,  Next: RL78 Options,  Prev: PowerPC Options,  Up: Submodel Options
21910
219113.18.40 RISC-V Options
21912----------------------
21913
21914These command-line options are defined for RISC-V targets:
21915
21916'-mbranch-cost=N'
21917     Set the cost of branches to roughly N instructions.
21918
21919'-mplt'
21920'-mno-plt'
21921     When generating PIC code, do or don't allow the use of PLTs.
21922     Ignored for non-PIC. The default is '-mplt'.
21923
21924'-mabi=ABI-STRING'
21925     Specify integer and floating-point calling convention.  ABI-STRING
21926     contains two parts: the size of integer types and the registers
21927     used for floating-point types.  For example '-march=rv64ifd
21928     -mabi=lp64d' means that 'long' and pointers are 64-bit (implicitly
21929     defining 'int' to be 32-bit), and that floating-point values up to
21930     64 bits wide are passed in F registers.  Contrast this with
21931     '-march=rv64ifd -mabi=lp64f', which still allows the compiler to
21932     generate code that uses the F and D extensions but only allows
21933     floating-point values up to 32 bits long to be passed in registers;
21934     or '-march=rv64ifd -mabi=lp64', in which no floating-point
21935     arguments will be passed in registers.
21936
21937     The default for this argument is system dependent, users who want a
21938     specific calling convention should specify one explicitly.  The
21939     valid calling conventions are: 'ilp32', 'ilp32f', 'ilp32d', 'lp64',
21940     'lp64f', and 'lp64d'.  Some calling conventions are impossible to
21941     implement on some ISAs: for example, '-march=rv32if -mabi=ilp32d'
21942     is invalid because the ABI requires 64-bit values be passed in F
21943     registers, but F registers are only 32 bits wide.  There is also
21944     the 'ilp32e' ABI that can only be used with the 'rv32e'
21945     architecture.  This ABI is not well specified at present, and is
21946     subject to change.
21947
21948'-mfdiv'
21949'-mno-fdiv'
21950     Do or don't use hardware floating-point divide and square root
21951     instructions.  This requires the F or D extensions for
21952     floating-point registers.  The default is to use them if the
21953     specified architecture has these instructions.
21954
21955'-mdiv'
21956'-mno-div'
21957     Do or don't use hardware instructions for integer division.  This
21958     requires the M extension.  The default is to use them if the
21959     specified architecture has these instructions.
21960
21961'-march=ISA-STRING'
21962     Generate code for given RISC-V ISA (e.g. 'rv64im').  ISA strings
21963     must be lower-case.  Examples include 'rv64i', 'rv32g', 'rv32e',
21964     and 'rv32imaf'.
21965
21966'-mtune=PROCESSOR-STRING'
21967     Optimize the output for the given processor, specified by
21968     microarchitecture name.  Permissible values for this option are:
21969     'rocket', 'sifive-3-series', 'sifive-5-series', 'sifive-7-series',
21970     and 'size'.
21971
21972     When '-mtune=' is not specified, the default is 'rocket'.
21973
21974     The 'size' choice is not intended for use by end-users.  This is
21975     used when '-Os' is specified.  It overrides the instruction cost
21976     info provided by '-mtune=', but does not override the pipeline
21977     info.  This helps reduce code size while still giving good
21978     performance.
21979
21980'-mpreferred-stack-boundary=NUM'
21981     Attempt to keep the stack boundary aligned to a 2 raised to NUM
21982     byte boundary.  If '-mpreferred-stack-boundary' is not specified,
21983     the default is 4 (16 bytes or 128-bits).
21984
21985     *Warning:* If you use this switch, then you must build all modules
21986     with the same value, including any libraries.  This includes the
21987     system libraries and startup modules.
21988
21989'-msmall-data-limit=N'
21990     Put global and static data smaller than N bytes into a special
21991     section (on some targets).
21992
21993'-msave-restore'
21994'-mno-save-restore'
21995     Do or don't use smaller but slower prologue and epilogue code that
21996     uses library function calls.  The default is to use fast inline
21997     prologues and epilogues.
21998
21999'-mstrict-align'
22000'-mno-strict-align'
22001     Do not or do generate unaligned memory accesses.  The default is
22002     set depending on whether the processor we are optimizing for
22003     supports fast unaligned access or not.
22004
22005'-mcmodel=medlow'
22006     Generate code for the medium-low code model.  The program and its
22007     statically defined symbols must lie within a single 2 GiB address
22008     range and must lie between absolute addresses -2 GiB and +2 GiB.
22009     Programs can be statically or dynamically linked.  This is the
22010     default code model.
22011
22012'-mcmodel=medany'
22013     Generate code for the medium-any code model.  The program and its
22014     statically defined symbols must be within any single 2 GiB address
22015     range.  Programs can be statically or dynamically linked.
22016
22017'-mexplicit-relocs'
22018'-mno-exlicit-relocs'
22019     Use or do not use assembler relocation operators when dealing with
22020     symbolic addresses.  The alternative is to use assembler macros
22021     instead, which may limit optimization.
22022
22023'-mrelax'
22024'-mno-relax'
22025     Take advantage of linker relaxations to reduce the number of
22026     instructions required to materialize symbol addresses.  The default
22027     is to take advantage of linker relaxations.
22028
22029'-memit-attribute'
22030'-mno-emit-attribute'
22031     Emit (do not emit) RISC-V attribute to record extra information
22032     into ELF objects.  This feature requires at least binutils 2.32.
22033
22034
22035File: gcc.info,  Node: RL78 Options,  Next: RS/6000 and PowerPC Options,  Prev: RISC-V Options,  Up: Submodel Options
22036
220373.18.41 RL78 Options
22038--------------------
22039
22040'-msim'
22041     Links in additional target libraries to support operation within a
22042     simulator.
22043
22044'-mmul=none'
22045'-mmul=g10'
22046'-mmul=g13'
22047'-mmul=g14'
22048'-mmul=rl78'
22049     Specifies the type of hardware multiplication and division support
22050     to be used.  The simplest is 'none', which uses software for both
22051     multiplication and division.  This is the default.  The 'g13' value
22052     is for the hardware multiply/divide peripheral found on the
22053     RL78/G13 (S2 core) targets.  The 'g14' value selects the use of the
22054     multiplication and division instructions supported by the RL78/G14
22055     (S3 core) parts.  The value 'rl78' is an alias for 'g14' and the
22056     value 'mg10' is an alias for 'none'.
22057
22058     In addition a C preprocessor macro is defined, based upon the
22059     setting of this option.  Possible values are: '__RL78_MUL_NONE__',
22060     '__RL78_MUL_G13__' or '__RL78_MUL_G14__'.
22061
22062'-mcpu=g10'
22063'-mcpu=g13'
22064'-mcpu=g14'
22065'-mcpu=rl78'
22066     Specifies the RL78 core to target.  The default is the G14 core,
22067     also known as an S3 core or just RL78.  The G13 or S2 core does not
22068     have multiply or divide instructions, instead it uses a hardware
22069     peripheral for these operations.  The G10 or S1 core does not have
22070     register banks, so it uses a different calling convention.
22071
22072     If this option is set it also selects the type of hardware multiply
22073     support to use, unless this is overridden by an explicit
22074     '-mmul=none' option on the command line.  Thus specifying
22075     '-mcpu=g13' enables the use of the G13 hardware multiply peripheral
22076     and specifying '-mcpu=g10' disables the use of hardware
22077     multiplications altogether.
22078
22079     Note, although the RL78/G14 core is the default target, specifying
22080     '-mcpu=g14' or '-mcpu=rl78' on the command line does change the
22081     behavior of the toolchain since it also enables G14 hardware
22082     multiply support.  If these options are not specified on the
22083     command line then software multiplication routines will be used
22084     even though the code targets the RL78 core.  This is for backwards
22085     compatibility with older toolchains which did not have hardware
22086     multiply and divide support.
22087
22088     In addition a C preprocessor macro is defined, based upon the
22089     setting of this option.  Possible values are: '__RL78_G10__',
22090     '__RL78_G13__' or '__RL78_G14__'.
22091
22092'-mg10'
22093'-mg13'
22094'-mg14'
22095'-mrl78'
22096     These are aliases for the corresponding '-mcpu=' option.  They are
22097     provided for backwards compatibility.
22098
22099'-mallregs'
22100     Allow the compiler to use all of the available registers.  By
22101     default registers 'r24..r31' are reserved for use in interrupt
22102     handlers.  With this option enabled these registers can be used in
22103     ordinary functions as well.
22104
22105'-m64bit-doubles'
22106'-m32bit-doubles'
22107     Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32
22108     bits ('-m32bit-doubles') in size.  The default is
22109     '-m32bit-doubles'.
22110
22111'-msave-mduc-in-interrupts'
22112'-mno-save-mduc-in-interrupts'
22113     Specifies that interrupt handler functions should preserve the MDUC
22114     registers.  This is only necessary if normal code might use the
22115     MDUC registers, for example because it performs multiplication and
22116     division operations.  The default is to ignore the MDUC registers
22117     as this makes the interrupt handlers faster.  The target option
22118     -mg13 needs to be passed for this to work as this feature is only
22119     available on the G13 target (S2 core).  The MDUC registers will
22120     only be saved if the interrupt handler performs a multiplication or
22121     division operation or it calls another function.
22122
22123
22124File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: RL78 Options,  Up: Submodel Options
22125
221263.18.42 IBM RS/6000 and PowerPC Options
22127---------------------------------------
22128
22129These '-m' options are defined for the IBM RS/6000 and PowerPC:
22130'-mpowerpc-gpopt'
22131'-mno-powerpc-gpopt'
22132'-mpowerpc-gfxopt'
22133'-mno-powerpc-gfxopt'
22134'-mpowerpc64'
22135'-mno-powerpc64'
22136'-mmfcrf'
22137'-mno-mfcrf'
22138'-mpopcntb'
22139'-mno-popcntb'
22140'-mpopcntd'
22141'-mno-popcntd'
22142'-mfprnd'
22143'-mno-fprnd'
22144'-mcmpb'
22145'-mno-cmpb'
22146'-mmfpgpr'
22147'-mno-mfpgpr'
22148'-mhard-dfp'
22149'-mno-hard-dfp'
22150     You use these options to specify which instructions are available
22151     on the processor you are using.  The default value of these options
22152     is determined when configuring GCC.  Specifying the
22153     '-mcpu=CPU_TYPE' overrides the specification of these options.  We
22154     recommend you use the '-mcpu=CPU_TYPE' option rather than the
22155     options listed above.
22156
22157     Specifying '-mpowerpc-gpopt' allows GCC to use the optional PowerPC
22158     architecture instructions in the General Purpose group, including
22159     floating-point square root.  Specifying '-mpowerpc-gfxopt' allows
22160     GCC to use the optional PowerPC architecture instructions in the
22161     Graphics group, including floating-point select.
22162
22163     The '-mmfcrf' option allows GCC to generate the move from condition
22164     register field instruction implemented on the POWER4 processor and
22165     other processors that support the PowerPC V2.01 architecture.  The
22166     '-mpopcntb' option allows GCC to generate the popcount and
22167     double-precision FP reciprocal estimate instruction implemented on
22168     the POWER5 processor and other processors that support the PowerPC
22169     V2.02 architecture.  The '-mpopcntd' option allows GCC to generate
22170     the popcount instruction implemented on the POWER7 processor and
22171     other processors that support the PowerPC V2.06 architecture.  The
22172     '-mfprnd' option allows GCC to generate the FP round to integer
22173     instructions implemented on the POWER5+ processor and other
22174     processors that support the PowerPC V2.03 architecture.  The
22175     '-mcmpb' option allows GCC to generate the compare bytes
22176     instruction implemented on the POWER6 processor and other
22177     processors that support the PowerPC V2.05 architecture.  The
22178     '-mmfpgpr' option allows GCC to generate the FP move to/from
22179     general-purpose register instructions implemented on the POWER6X
22180     processor and other processors that support the extended PowerPC
22181     V2.05 architecture.  The '-mhard-dfp' option allows GCC to generate
22182     the decimal floating-point instructions implemented on some POWER
22183     processors.
22184
22185     The '-mpowerpc64' option allows GCC to generate the additional
22186     64-bit instructions that are found in the full PowerPC64
22187     architecture and to treat GPRs as 64-bit, doubleword quantities.
22188     GCC defaults to '-mno-powerpc64'.
22189
22190'-mcpu=CPU_TYPE'
22191     Set architecture type, register usage, and instruction scheduling
22192     parameters for machine type CPU_TYPE.  Supported values for
22193     CPU_TYPE are '401', '403', '405', '405fp', '440', '440fp', '464',
22194     '464fp', '476', '476fp', '505', '601', '602', '603', '603e', '604',
22195     '604e', '620', '630', '740', '7400', '7450', '750', '801', '821',
22196     '823', '860', '970', '8540', 'a2', 'e300c2', 'e300c3', 'e500mc',
22197     'e500mc64', 'e5500', 'e6500', 'ec603e', 'G3', 'G4', 'G5', 'titan',
22198     'power3', 'power4', 'power5', 'power5+', 'power6', 'power6x',
22199     'power7', 'power8', 'power9', 'powerpc', 'powerpc64',
22200     'powerpc64le', 'rs64', and 'native'.
22201
22202     '-mcpu=powerpc', '-mcpu=powerpc64', and '-mcpu=powerpc64le' specify
22203     pure 32-bit PowerPC (either endian), 64-bit big endian PowerPC and
22204     64-bit little endian PowerPC architecture machine types, with an
22205     appropriate, generic processor model assumed for scheduling
22206     purposes.
22207
22208     Specifying 'native' as cpu type detects and selects the
22209     architecture option that corresponds to the host processor of the
22210     system performing the compilation.  '-mcpu=native' has no effect if
22211     GCC does not recognize the processor.
22212
22213     The other options specify a specific processor.  Code generated
22214     under those options runs best on that processor, and may not run at
22215     all on others.
22216
22217     The '-mcpu' options automatically enable or disable the following
22218     options:
22219
22220          -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
22221          -mpopcntb  -mpopcntd  -mpowerpc64
22222          -mpowerpc-gpopt  -mpowerpc-gfxopt
22223          -mmulhw  -mdlmzb  -mmfpgpr  -mvsx
22224          -mcrypto  -mhtm  -mpower8-fusion  -mpower8-vector
22225          -mquad-memory  -mquad-memory-atomic  -mfloat128  -mfloat128-hardware
22226
22227     The particular options set for any particular CPU varies between
22228     compiler versions, depending on what setting seems to produce
22229     optimal code for that CPU; it doesn't necessarily reflect the
22230     actual hardware's capabilities.  If you wish to set an individual
22231     option to a particular value, you may specify it after the '-mcpu'
22232     option, like '-mcpu=970 -mno-altivec'.
22233
22234     On AIX, the '-maltivec' and '-mpowerpc64' options are not enabled
22235     or disabled by the '-mcpu' option at present because AIX does not
22236     have full support for these options.  You may still enable or
22237     disable them individually if you're sure it'll work in your
22238     environment.
22239
22240'-mtune=CPU_TYPE'
22241     Set the instruction scheduling parameters for machine type
22242     CPU_TYPE, but do not set the architecture type or register usage,
22243     as '-mcpu=CPU_TYPE' does.  The same values for CPU_TYPE are used
22244     for '-mtune' as for '-mcpu'.  If both are specified, the code
22245     generated uses the architecture and registers set by '-mcpu', but
22246     the scheduling parameters set by '-mtune'.
22247
22248'-mcmodel=small'
22249     Generate PowerPC64 code for the small model: The TOC is limited to
22250     64k.
22251
22252'-mcmodel=medium'
22253     Generate PowerPC64 code for the medium model: The TOC and other
22254     static data may be up to a total of 4G in size.  This is the
22255     default for 64-bit Linux.
22256
22257'-mcmodel=large'
22258     Generate PowerPC64 code for the large model: The TOC may be up to
22259     4G in size.  Other data and code is only limited by the 64-bit
22260     address space.
22261
22262'-maltivec'
22263'-mno-altivec'
22264     Generate code that uses (does not use) AltiVec instructions, and
22265     also enable the use of built-in functions that allow more direct
22266     access to the AltiVec instruction set.  You may also need to set
22267     '-mabi=altivec' to adjust the current ABI with AltiVec ABI
22268     enhancements.
22269
22270     When '-maltivec' is used, the element order for AltiVec intrinsics
22271     such as 'vec_splat', 'vec_extract', and 'vec_insert' match array
22272     element order corresponding to the endianness of the target.  That
22273     is, element zero identifies the leftmost element in a vector
22274     register when targeting a big-endian platform, and identifies the
22275     rightmost element in a vector register when targeting a
22276     little-endian platform.
22277
22278'-mvrsave'
22279'-mno-vrsave'
22280     Generate VRSAVE instructions when generating AltiVec code.
22281
22282'-msecure-plt'
22283     Generate code that allows 'ld' and 'ld.so' to build executables and
22284     shared libraries with non-executable '.plt' and '.got' sections.
22285     This is a PowerPC 32-bit SYSV ABI option.
22286
22287'-mbss-plt'
22288     Generate code that uses a BSS '.plt' section that 'ld.so' fills in,
22289     and requires '.plt' and '.got' sections that are both writable and
22290     executable.  This is a PowerPC 32-bit SYSV ABI option.
22291
22292'-misel'
22293'-mno-isel'
22294     This switch enables or disables the generation of ISEL
22295     instructions.
22296
22297'-mvsx'
22298'-mno-vsx'
22299     Generate code that uses (does not use) vector/scalar (VSX)
22300     instructions, and also enable the use of built-in functions that
22301     allow more direct access to the VSX instruction set.
22302
22303'-mcrypto'
22304'-mno-crypto'
22305     Enable the use (disable) of the built-in functions that allow
22306     direct access to the cryptographic instructions that were added in
22307     version 2.07 of the PowerPC ISA.
22308
22309'-mhtm'
22310'-mno-htm'
22311     Enable (disable) the use of the built-in functions that allow
22312     direct access to the Hardware Transactional Memory (HTM)
22313     instructions that were added in version 2.07 of the PowerPC ISA.
22314
22315'-mpower8-fusion'
22316'-mno-power8-fusion'
22317     Generate code that keeps (does not keeps) some integer operations
22318     adjacent so that the instructions can be fused together on power8
22319     and later processors.
22320
22321'-mpower8-vector'
22322'-mno-power8-vector'
22323     Generate code that uses (does not use) the vector and scalar
22324     instructions that were added in version 2.07 of the PowerPC ISA.
22325     Also enable the use of built-in functions that allow more direct
22326     access to the vector instructions.
22327
22328'-mquad-memory'
22329'-mno-quad-memory'
22330     Generate code that uses (does not use) the non-atomic quad word
22331     memory instructions.  The '-mquad-memory' option requires use of
22332     64-bit mode.
22333
22334'-mquad-memory-atomic'
22335'-mno-quad-memory-atomic'
22336     Generate code that uses (does not use) the atomic quad word memory
22337     instructions.  The '-mquad-memory-atomic' option requires use of
22338     64-bit mode.
22339
22340'-mfloat128'
22341'-mno-float128'
22342     Enable/disable the __FLOAT128 keyword for IEEE 128-bit floating
22343     point and use either software emulation for IEEE 128-bit floating
22344     point or hardware instructions.
22345
22346     The VSX instruction set ('-mvsx', '-mcpu=power7', '-mcpu=power8'),
22347     or '-mcpu=power9' must be enabled to use the IEEE 128-bit floating
22348     point support.  The IEEE 128-bit floating point support only works
22349     on PowerPC Linux systems.
22350
22351     The default for '-mfloat128' is enabled on PowerPC Linux systems
22352     using the VSX instruction set, and disabled on other systems.
22353
22354     If you use the ISA 3.0 instruction set ('-mpower9-vector' or
22355     '-mcpu=power9') on a 64-bit system, the IEEE 128-bit floating point
22356     support will also enable the generation of ISA 3.0 IEEE 128-bit
22357     floating point instructions.  Otherwise, if you do not specify to
22358     generate ISA 3.0 instructions or you are targeting a 32-bit big
22359     endian system, IEEE 128-bit floating point will be done with
22360     software emulation.
22361
22362'-mfloat128-hardware'
22363'-mno-float128-hardware'
22364     Enable/disable using ISA 3.0 hardware instructions to support the
22365     __FLOAT128 data type.
22366
22367     The default for '-mfloat128-hardware' is enabled on PowerPC Linux
22368     systems using the ISA 3.0 instruction set, and disabled on other
22369     systems.
22370
22371'-m32'
22372'-m64'
22373     Generate code for 32-bit or 64-bit environments of Darwin and SVR4
22374     targets (including GNU/Linux).  The 32-bit environment sets int,
22375     long and pointer to 32 bits and generates code that runs on any
22376     PowerPC variant.  The 64-bit environment sets int to 32 bits and
22377     long and pointer to 64 bits, and generates code for PowerPC64, as
22378     for '-mpowerpc64'.
22379
22380'-mfull-toc'
22381'-mno-fp-in-toc'
22382'-mno-sum-in-toc'
22383'-mminimal-toc'
22384     Modify generation of the TOC (Table Of Contents), which is created
22385     for every executable file.  The '-mfull-toc' option is selected by
22386     default.  In that case, GCC allocates at least one TOC entry for
22387     each unique non-automatic variable reference in your program.  GCC
22388     also places floating-point constants in the TOC.  However, only
22389     16,384 entries are available in the TOC.
22390
22391     If you receive a linker error message that saying you have
22392     overflowed the available TOC space, you can reduce the amount of
22393     TOC space used with the '-mno-fp-in-toc' and '-mno-sum-in-toc'
22394     options.  '-mno-fp-in-toc' prevents GCC from putting floating-point
22395     constants in the TOC and '-mno-sum-in-toc' forces GCC to generate
22396     code to calculate the sum of an address and a constant at run time
22397     instead of putting that sum into the TOC.  You may specify one or
22398     both of these options.  Each causes GCC to produce very slightly
22399     slower and larger code at the expense of conserving TOC space.
22400
22401     If you still run out of space in the TOC even when you specify both
22402     of these options, specify '-mminimal-toc' instead.  This option
22403     causes GCC to make only one TOC entry for every file.  When you
22404     specify this option, GCC produces code that is slower and larger
22405     but which uses extremely little TOC space.  You may wish to use
22406     this option only on files that contain less frequently-executed
22407     code.
22408
22409'-maix64'
22410'-maix32'
22411     Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
22412     64-bit 'long' type, and the infrastructure needed to support them.
22413     Specifying '-maix64' implies '-mpowerpc64', while '-maix32'
22414     disables the 64-bit ABI and implies '-mno-powerpc64'.  GCC defaults
22415     to '-maix32'.
22416
22417'-mxl-compat'
22418'-mno-xl-compat'
22419     Produce code that conforms more closely to IBM XL compiler
22420     semantics when using AIX-compatible ABI.  Pass floating-point
22421     arguments to prototyped functions beyond the register save area
22422     (RSA) on the stack in addition to argument FPRs.  Do not assume
22423     that most significant double in 128-bit long double value is
22424     properly rounded when comparing values and converting to double.
22425     Use XL symbol names for long double support routines.
22426
22427     The AIX calling convention was extended but not initially
22428     documented to handle an obscure K&R C case of calling a function
22429     that takes the address of its arguments with fewer arguments than
22430     declared.  IBM XL compilers access floating-point arguments that do
22431     not fit in the RSA from the stack when a subroutine is compiled
22432     without optimization.  Because always storing floating-point
22433     arguments on the stack is inefficient and rarely needed, this
22434     option is not enabled by default and only is necessary when calling
22435     subroutines compiled by IBM XL compilers without optimization.
22436
22437'-mpe'
22438     Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
22439     application written to use message passing with special startup
22440     code to enable the application to run.  The system must have PE
22441     installed in the standard location ('/usr/lpp/ppe.poe/'), or the
22442     'specs' file must be overridden with the '-specs=' option to
22443     specify the appropriate directory location.  The Parallel
22444     Environment does not support threads, so the '-mpe' option and the
22445     '-pthread' option are incompatible.
22446
22447'-malign-natural'
22448'-malign-power'
22449     On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
22450     '-malign-natural' overrides the ABI-defined alignment of larger
22451     types, such as floating-point doubles, on their natural size-based
22452     boundary.  The option '-malign-power' instructs GCC to follow the
22453     ABI-specified alignment rules.  GCC defaults to the standard
22454     alignment defined in the ABI.
22455
22456     On 64-bit Darwin, natural alignment is the default, and
22457     '-malign-power' is not supported.
22458
22459'-msoft-float'
22460'-mhard-float'
22461     Generate code that does not use (uses) the floating-point register
22462     set.  Software floating-point emulation is provided if you use the
22463     '-msoft-float' option, and pass the option to GCC when linking.
22464
22465'-mmultiple'
22466'-mno-multiple'
22467     Generate code that uses (does not use) the load multiple word
22468     instructions and the store multiple word instructions.  These
22469     instructions are generated by default on POWER systems, and not
22470     generated on PowerPC systems.  Do not use '-mmultiple' on
22471     little-endian PowerPC systems, since those instructions do not work
22472     when the processor is in little-endian mode.  The exceptions are
22473     PPC740 and PPC750 which permit these instructions in little-endian
22474     mode.
22475
22476'-mupdate'
22477'-mno-update'
22478     Generate code that uses (does not use) the load or store
22479     instructions that update the base register to the address of the
22480     calculated memory location.  These instructions are generated by
22481     default.  If you use '-mno-update', there is a small window between
22482     the time that the stack pointer is updated and the address of the
22483     previous frame is stored, which means code that walks the stack
22484     frame across interrupts or signals may get corrupted data.
22485
22486'-mavoid-indexed-addresses'
22487'-mno-avoid-indexed-addresses'
22488     Generate code that tries to avoid (not avoid) the use of indexed
22489     load or store instructions.  These instructions can incur a
22490     performance penalty on Power6 processors in certain situations,
22491     such as when stepping through large arrays that cross a 16M
22492     boundary.  This option is enabled by default when targeting Power6
22493     and disabled otherwise.
22494
22495'-mfused-madd'
22496'-mno-fused-madd'
22497     Generate code that uses (does not use) the floating-point multiply
22498     and accumulate instructions.  These instructions are generated by
22499     default if hardware floating point is used.  The machine-dependent
22500     '-mfused-madd' option is now mapped to the machine-independent
22501     '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
22502     '-ffp-contract=off'.
22503
22504'-mmulhw'
22505'-mno-mulhw'
22506     Generate code that uses (does not use) the half-word multiply and
22507     multiply-accumulate instructions on the IBM 405, 440, 464 and 476
22508     processors.  These instructions are generated by default when
22509     targeting those processors.
22510
22511'-mdlmzb'
22512'-mno-dlmzb'
22513     Generate code that uses (does not use) the string-search 'dlmzb'
22514     instruction on the IBM 405, 440, 464 and 476 processors.  This
22515     instruction is generated by default when targeting those
22516     processors.
22517
22518'-mno-bit-align'
22519'-mbit-align'
22520     On System V.4 and embedded PowerPC systems do not (do) force
22521     structures and unions that contain bit-fields to be aligned to the
22522     base type of the bit-field.
22523
22524     For example, by default a structure containing nothing but 8
22525     'unsigned' bit-fields of length 1 is aligned to a 4-byte boundary
22526     and has a size of 4 bytes.  By using '-mno-bit-align', the
22527     structure is aligned to a 1-byte boundary and is 1 byte in size.
22528
22529'-mno-strict-align'
22530'-mstrict-align'
22531     On System V.4 and embedded PowerPC systems do not (do) assume that
22532     unaligned memory references are handled by the system.
22533
22534'-mrelocatable'
22535'-mno-relocatable'
22536     Generate code that allows (does not allow) a static executable to
22537     be relocated to a different address at run time.  A simple embedded
22538     PowerPC system loader should relocate the entire contents of
22539     '.got2' and 4-byte locations listed in the '.fixup' section, a
22540     table of 32-bit addresses generated by this option.  For this to
22541     work, all objects linked together must be compiled with
22542     '-mrelocatable' or '-mrelocatable-lib'.  '-mrelocatable' code
22543     aligns the stack to an 8-byte boundary.
22544
22545'-mrelocatable-lib'
22546'-mno-relocatable-lib'
22547     Like '-mrelocatable', '-mrelocatable-lib' generates a '.fixup'
22548     section to allow static executables to be relocated at run time,
22549     but '-mrelocatable-lib' does not use the smaller stack alignment of
22550     '-mrelocatable'.  Objects compiled with '-mrelocatable-lib' may be
22551     linked with objects compiled with any combination of the
22552     '-mrelocatable' options.
22553
22554'-mno-toc'
22555'-mtoc'
22556     On System V.4 and embedded PowerPC systems do not (do) assume that
22557     register 2 contains a pointer to a global area pointing to the
22558     addresses used in the program.
22559
22560'-mlittle'
22561'-mlittle-endian'
22562     On System V.4 and embedded PowerPC systems compile code for the
22563     processor in little-endian mode.  The '-mlittle-endian' option is
22564     the same as '-mlittle'.
22565
22566'-mbig'
22567'-mbig-endian'
22568     On System V.4 and embedded PowerPC systems compile code for the
22569     processor in big-endian mode.  The '-mbig-endian' option is the
22570     same as '-mbig'.
22571
22572'-mdynamic-no-pic'
22573     On Darwin and Mac OS X systems, compile code so that it is not
22574     relocatable, but that its external references are relocatable.  The
22575     resulting code is suitable for applications, but not shared
22576     libraries.
22577
22578'-msingle-pic-base'
22579     Treat the register used for PIC addressing as read-only, rather
22580     than loading it in the prologue for each function.  The runtime
22581     system is responsible for initializing this register with an
22582     appropriate value before execution begins.
22583
22584'-mprioritize-restricted-insns=PRIORITY'
22585     This option controls the priority that is assigned to dispatch-slot
22586     restricted instructions during the second scheduling pass.  The
22587     argument PRIORITY takes the value '0', '1', or '2' to assign no,
22588     highest, or second-highest (respectively) priority to dispatch-slot
22589     restricted instructions.
22590
22591'-msched-costly-dep=DEPENDENCE_TYPE'
22592     This option controls which dependences are considered costly by the
22593     target during instruction scheduling.  The argument DEPENDENCE_TYPE
22594     takes one of the following values:
22595
22596     'no'
22597          No dependence is costly.
22598
22599     'all'
22600          All dependences are costly.
22601
22602     'true_store_to_load'
22603          A true dependence from store to load is costly.
22604
22605     'store_to_load'
22606          Any dependence from store to load is costly.
22607
22608     NUMBER
22609          Any dependence for which the latency is greater than or equal
22610          to NUMBER is costly.
22611
22612'-minsert-sched-nops=SCHEME'
22613     This option controls which NOP insertion scheme is used during the
22614     second scheduling pass.  The argument SCHEME takes one of the
22615     following values:
22616
22617     'no'
22618          Don't insert NOPs.
22619
22620     'pad'
22621          Pad with NOPs any dispatch group that has vacant issue slots,
22622          according to the scheduler's grouping.
22623
22624     'regroup_exact'
22625          Insert NOPs to force costly dependent insns into separate
22626          groups.  Insert exactly as many NOPs as needed to force an
22627          insn to a new group, according to the estimated processor
22628          grouping.
22629
22630     NUMBER
22631          Insert NOPs to force costly dependent insns into separate
22632          groups.  Insert NUMBER NOPs to force an insn to a new group.
22633
22634'-mcall-sysv'
22635     On System V.4 and embedded PowerPC systems compile code using
22636     calling conventions that adhere to the March 1995 draft of the
22637     System V Application Binary Interface, PowerPC processor
22638     supplement.  This is the default unless you configured GCC using
22639     'powerpc-*-eabiaix'.
22640
22641'-mcall-sysv-eabi'
22642'-mcall-eabi'
22643     Specify both '-mcall-sysv' and '-meabi' options.
22644
22645'-mcall-sysv-noeabi'
22646     Specify both '-mcall-sysv' and '-mno-eabi' options.
22647
22648'-mcall-aixdesc'
22649     On System V.4 and embedded PowerPC systems compile code for the AIX
22650     operating system.
22651
22652'-mcall-linux'
22653     On System V.4 and embedded PowerPC systems compile code for the
22654     Linux-based GNU system.
22655
22656'-mcall-freebsd'
22657     On System V.4 and embedded PowerPC systems compile code for the
22658     FreeBSD operating system.
22659
22660'-mcall-netbsd'
22661     On System V.4 and embedded PowerPC systems compile code for the
22662     NetBSD operating system.
22663
22664'-mcall-openbsd'
22665     On System V.4 and embedded PowerPC systems compile code for the
22666     OpenBSD operating system.
22667
22668'-mtraceback=TRACEBACK_TYPE'
22669     Select the type of traceback table.  Valid values for
22670     TRACEBACK_TYPE are 'full', 'part', and 'no'.
22671
22672'-maix-struct-return'
22673     Return all structures in memory (as specified by the AIX ABI).
22674
22675'-msvr4-struct-return'
22676     Return structures smaller than 8 bytes in registers (as specified
22677     by the SVR4 ABI).
22678
22679'-mabi=ABI-TYPE'
22680     Extend the current ABI with a particular extension, or remove such
22681     extension.  Valid values are 'altivec', 'no-altivec',
22682     'ibmlongdouble', 'ieeelongdouble', 'elfv1', 'elfv2'.
22683
22684'-mabi=ibmlongdouble'
22685     Change the current ABI to use IBM extended-precision long double.
22686     This is not likely to work if your system defaults to using IEEE
22687     extended-precision long double.  If you change the long double type
22688     from IEEE extended-precision, the compiler will issue a warning
22689     unless you use the '-Wno-psabi' option.  Requires
22690     '-mlong-double-128' to be enabled.
22691
22692'-mabi=ieeelongdouble'
22693     Change the current ABI to use IEEE extended-precision long double.
22694     This is not likely to work if your system defaults to using IBM
22695     extended-precision long double.  If you change the long double type
22696     from IBM extended-precision, the compiler will issue a warning
22697     unless you use the '-Wno-psabi' option.  Requires
22698     '-mlong-double-128' to be enabled.
22699
22700'-mabi=elfv1'
22701     Change the current ABI to use the ELFv1 ABI. This is the default
22702     ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
22703     ABI requires special system support and is likely to fail in
22704     spectacular ways.
22705
22706'-mabi=elfv2'
22707     Change the current ABI to use the ELFv2 ABI. This is the default
22708     ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
22709     ABI requires special system support and is likely to fail in
22710     spectacular ways.
22711
22712'-mgnu-attribute'
22713'-mno-gnu-attribute'
22714     Emit .gnu_attribute assembly directives to set tag/value pairs in a
22715     .gnu.attributes section that specify ABI variations in function
22716     parameters or return values.
22717
22718'-mprototype'
22719'-mno-prototype'
22720     On System V.4 and embedded PowerPC systems assume that all calls to
22721     variable argument functions are properly prototyped.  Otherwise,
22722     the compiler must insert an instruction before every non-prototyped
22723     call to set or clear bit 6 of the condition code register ('CR') to
22724     indicate whether floating-point values are passed in the
22725     floating-point registers in case the function takes variable
22726     arguments.  With '-mprototype', only calls to prototyped variable
22727     argument functions set or clear the bit.
22728
22729'-msim'
22730     On embedded PowerPC systems, assume that the startup module is
22731     called 'sim-crt0.o' and that the standard C libraries are
22732     'libsim.a' and 'libc.a'.  This is the default for
22733     'powerpc-*-eabisim' configurations.
22734
22735'-mmvme'
22736     On embedded PowerPC systems, assume that the startup module is
22737     called 'crt0.o' and the standard C libraries are 'libmvme.a' and
22738     'libc.a'.
22739
22740'-mads'
22741     On embedded PowerPC systems, assume that the startup module is
22742     called 'crt0.o' and the standard C libraries are 'libads.a' and
22743     'libc.a'.
22744
22745'-myellowknife'
22746     On embedded PowerPC systems, assume that the startup module is
22747     called 'crt0.o' and the standard C libraries are 'libyk.a' and
22748     'libc.a'.
22749
22750'-mvxworks'
22751     On System V.4 and embedded PowerPC systems, specify that you are
22752     compiling for a VxWorks system.
22753
22754'-memb'
22755     On embedded PowerPC systems, set the 'PPC_EMB' bit in the ELF flags
22756     header to indicate that 'eabi' extended relocations are used.
22757
22758'-meabi'
22759'-mno-eabi'
22760     On System V.4 and embedded PowerPC systems do (do not) adhere to
22761     the Embedded Applications Binary Interface (EABI), which is a set
22762     of modifications to the System V.4 specifications.  Selecting
22763     '-meabi' means that the stack is aligned to an 8-byte boundary, a
22764     function '__eabi' is called from 'main' to set up the EABI
22765     environment, and the '-msdata' option can use both 'r2' and 'r13'
22766     to point to two separate small data areas.  Selecting '-mno-eabi'
22767     means that the stack is aligned to a 16-byte boundary, no EABI
22768     initialization function is called from 'main', and the '-msdata'
22769     option only uses 'r13' to point to a single small data area.  The
22770     '-meabi' option is on by default if you configured GCC using one of
22771     the 'powerpc*-*-eabi*' options.
22772
22773'-msdata=eabi'
22774     On System V.4 and embedded PowerPC systems, put small initialized
22775     'const' global and static data in the '.sdata2' section, which is
22776     pointed to by register 'r2'.  Put small initialized non-'const'
22777     global and static data in the '.sdata' section, which is pointed to
22778     by register 'r13'.  Put small uninitialized global and static data
22779     in the '.sbss' section, which is adjacent to the '.sdata' section.
22780     The '-msdata=eabi' option is incompatible with the '-mrelocatable'
22781     option.  The '-msdata=eabi' option also sets the '-memb' option.
22782
22783'-msdata=sysv'
22784     On System V.4 and embedded PowerPC systems, put small global and
22785     static data in the '.sdata' section, which is pointed to by
22786     register 'r13'.  Put small uninitialized global and static data in
22787     the '.sbss' section, which is adjacent to the '.sdata' section.
22788     The '-msdata=sysv' option is incompatible with the '-mrelocatable'
22789     option.
22790
22791'-msdata=default'
22792'-msdata'
22793     On System V.4 and embedded PowerPC systems, if '-meabi' is used,
22794     compile code the same as '-msdata=eabi', otherwise compile code the
22795     same as '-msdata=sysv'.
22796
22797'-msdata=data'
22798     On System V.4 and embedded PowerPC systems, put small global data
22799     in the '.sdata' section.  Put small uninitialized global data in
22800     the '.sbss' section.  Do not use register 'r13' to address small
22801     data however.  This is the default behavior unless other '-msdata'
22802     options are used.
22803
22804'-msdata=none'
22805'-mno-sdata'
22806     On embedded PowerPC systems, put all initialized global and static
22807     data in the '.data' section, and all uninitialized data in the
22808     '.bss' section.
22809
22810'-mreadonly-in-sdata'
22811     Put read-only objects in the '.sdata' section as well.  This is the
22812     default.
22813
22814'-mblock-move-inline-limit=NUM'
22815     Inline all block moves (such as calls to 'memcpy' or structure
22816     copies) less than or equal to NUM bytes.  The minimum value for NUM
22817     is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
22818     default value is target-specific.
22819
22820'-mblock-compare-inline-limit=NUM'
22821     Generate non-looping inline code for all block compares (such as
22822     calls to 'memcmp' or structure compares) less than or equal to NUM
22823     bytes.  If NUM is 0, all inline expansion (non-loop and loop) of
22824     block compare is disabled.  The default value is target-specific.
22825
22826'-mblock-compare-inline-loop-limit=NUM'
22827     Generate an inline expansion using loop code for all block compares
22828     that are less than or equal to NUM bytes, but greater than the
22829     limit for non-loop inline block compare expansion.  If the block
22830     length is not constant, at most NUM bytes will be compared before
22831     'memcmp' is called to compare the remainder of the block.  The
22832     default value is target-specific.
22833
22834'-mstring-compare-inline-limit=NUM'
22835     Compare at most NUM string bytes with inline code.  If the
22836     difference or end of string is not found at the end of the inline
22837     compare a call to 'strcmp' or 'strncmp' will take care of the rest
22838     of the comparison.  The default is 64 bytes.
22839
22840'-G NUM'
22841     On embedded PowerPC systems, put global and static items less than
22842     or equal to NUM bytes into the small data or BSS sections instead
22843     of the normal data or BSS section.  By default, NUM is 8.  The '-G
22844     NUM' switch is also passed to the linker.  All modules should be
22845     compiled with the same '-G NUM' value.
22846
22847'-mregnames'
22848'-mno-regnames'
22849     On System V.4 and embedded PowerPC systems do (do not) emit
22850     register names in the assembly language output using symbolic
22851     forms.
22852
22853'-mlongcall'
22854'-mno-longcall'
22855     By default assume that all calls are far away so that a longer and
22856     more expensive calling sequence is required.  This is required for
22857     calls farther than 32 megabytes (33,554,432 bytes) from the current
22858     location.  A short call is generated if the compiler knows the call
22859     cannot be that far away.  This setting can be overridden by the
22860     'shortcall' function attribute, or by '#pragma longcall(0)'.
22861
22862     Some linkers are capable of detecting out-of-range calls and
22863     generating glue code on the fly.  On these systems, long calls are
22864     unnecessary and generate slower code.  As of this writing, the AIX
22865     linker can do this, as can the GNU linker for PowerPC/64.  It is
22866     planned to add this feature to the GNU linker for 32-bit PowerPC
22867     systems as well.
22868
22869     On PowerPC64 ELFv2 and 32-bit PowerPC systems with newer GNU
22870     linkers, GCC can generate long calls using an inline PLT call
22871     sequence (see '-mpltseq').  PowerPC with '-mbss-plt' and PowerPC64
22872     ELFv1 (big-endian) do not support inline PLT calls.
22873
22874     On Darwin/PPC systems, '#pragma longcall' generates 'jbsr callee,
22875     L42', plus a "branch island" (glue code).  The two target addresses
22876     represent the callee and the branch island.  The Darwin/PPC linker
22877     prefers the first address and generates a 'bl callee' if the PPC
22878     'bl' instruction reaches the callee directly; otherwise, the linker
22879     generates 'bl L42' to call the branch island.  The branch island is
22880     appended to the body of the calling function; it computes the full
22881     32-bit address of the callee and jumps to it.
22882
22883     On Mach-O (Darwin) systems, this option directs the compiler emit
22884     to the glue for every direct call, and the Darwin linker decides
22885     whether to use or discard it.
22886
22887     In the future, GCC may ignore all longcall specifications when the
22888     linker is known to generate glue.
22889
22890'-mpltseq'
22891'-mno-pltseq'
22892     Implement (do not implement) -fno-plt and long calls using an
22893     inline PLT call sequence that supports lazy linking and long calls
22894     to functions in dlopen'd shared libraries.  Inline PLT calls are
22895     only supported on PowerPC64 ELFv2 and 32-bit PowerPC systems with
22896     newer GNU linkers, and are enabled by default if the support is
22897     detected when configuring GCC, and, in the case of 32-bit PowerPC,
22898     if GCC is configured with '--enable-secureplt'.  '-mpltseq' code
22899     and '-mbss-plt' 32-bit PowerPC relocatable objects may not be
22900     linked together.
22901
22902'-mtls-markers'
22903'-mno-tls-markers'
22904     Mark (do not mark) calls to '__tls_get_addr' with a relocation
22905     specifying the function argument.  The relocation allows the linker
22906     to reliably associate function call with argument setup
22907     instructions for TLS optimization, which in turn allows GCC to
22908     better schedule the sequence.
22909
22910'-mrecip'
22911'-mno-recip'
22912     This option enables use of the reciprocal estimate and reciprocal
22913     square root estimate instructions with additional Newton-Raphson
22914     steps to increase precision instead of doing a divide or square
22915     root and divide for floating-point arguments.  You should use the
22916     '-ffast-math' option when using '-mrecip' (or at least
22917     '-funsafe-math-optimizations', '-ffinite-math-only',
22918     '-freciprocal-math' and '-fno-trapping-math').  Note that while the
22919     throughput of the sequence is generally higher than the throughput
22920     of the non-reciprocal instruction, the precision of the sequence
22921     can be decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
22922     0.99999994) for reciprocal square roots.
22923
22924'-mrecip=OPT'
22925     This option controls which reciprocal estimate instructions may be
22926     used.  OPT is a comma-separated list of options, which may be
22927     preceded by a '!' to invert the option:
22928
22929     'all'
22930          Enable all estimate instructions.
22931
22932     'default'
22933          Enable the default instructions, equivalent to '-mrecip'.
22934
22935     'none'
22936          Disable all estimate instructions, equivalent to '-mno-recip'.
22937
22938     'div'
22939          Enable the reciprocal approximation instructions for both
22940          single and double precision.
22941
22942     'divf'
22943          Enable the single-precision reciprocal approximation
22944          instructions.
22945
22946     'divd'
22947          Enable the double-precision reciprocal approximation
22948          instructions.
22949
22950     'rsqrt'
22951          Enable the reciprocal square root approximation instructions
22952          for both single and double precision.
22953
22954     'rsqrtf'
22955          Enable the single-precision reciprocal square root
22956          approximation instructions.
22957
22958     'rsqrtd'
22959          Enable the double-precision reciprocal square root
22960          approximation instructions.
22961
22962     So, for example, '-mrecip=all,!rsqrtd' enables all of the
22963     reciprocal estimate instructions, except for the 'FRSQRTE',
22964     'XSRSQRTEDP', and 'XVRSQRTEDP' instructions which handle the
22965     double-precision reciprocal square root calculations.
22966
22967'-mrecip-precision'
22968'-mno-recip-precision'
22969     Assume (do not assume) that the reciprocal estimate instructions
22970     provide higher-precision estimates than is mandated by the PowerPC
22971     ABI. Selecting '-mcpu=power6', '-mcpu=power7' or '-mcpu=power8'
22972     automatically selects '-mrecip-precision'.  The double-precision
22973     square root estimate instructions are not generated by default on
22974     low-precision machines, since they do not provide an estimate that
22975     converges after three steps.
22976
22977'-mveclibabi=TYPE'
22978     Specifies the ABI type to use for vectorizing intrinsics using an
22979     external library.  The only type supported at present is 'mass',
22980     which specifies to use IBM's Mathematical Acceleration Subsystem
22981     (MASS) libraries for vectorizing intrinsics using external
22982     libraries.  GCC currently emits calls to 'acosd2', 'acosf4',
22983     'acoshd2', 'acoshf4', 'asind2', 'asinf4', 'asinhd2', 'asinhf4',
22984     'atan2d2', 'atan2f4', 'atand2', 'atanf4', 'atanhd2', 'atanhf4',
22985     'cbrtd2', 'cbrtf4', 'cosd2', 'cosf4', 'coshd2', 'coshf4', 'erfcd2',
22986     'erfcf4', 'erfd2', 'erff4', 'exp2d2', 'exp2f4', 'expd2', 'expf4',
22987     'expm1d2', 'expm1f4', 'hypotd2', 'hypotf4', 'lgammad2', 'lgammaf4',
22988     'log10d2', 'log10f4', 'log1pd2', 'log1pf4', 'log2d2', 'log2f4',
22989     'logd2', 'logf4', 'powd2', 'powf4', 'sind2', 'sinf4', 'sinhd2',
22990     'sinhf4', 'sqrtd2', 'sqrtf4', 'tand2', 'tanf4', 'tanhd2', and
22991     'tanhf4' when generating code for power7.  Both '-ftree-vectorize'
22992     and '-funsafe-math-optimizations' must also be enabled.  The MASS
22993     libraries must be specified at link time.
22994
22995'-mfriz'
22996'-mno-friz'
22997     Generate (do not generate) the 'friz' instruction when the
22998     '-funsafe-math-optimizations' option is used to optimize rounding
22999     of floating-point values to 64-bit integer and back to floating
23000     point.  The 'friz' instruction does not return the same value if
23001     the floating-point number is too large to fit in an integer.
23002
23003'-mpointers-to-nested-functions'
23004'-mno-pointers-to-nested-functions'
23005     Generate (do not generate) code to load up the static chain
23006     register ('r11') when calling through a pointer on AIX and 64-bit
23007     Linux systems where a function pointer points to a 3-word
23008     descriptor giving the function address, TOC value to be loaded in
23009     register 'r2', and static chain value to be loaded in register
23010     'r11'.  The '-mpointers-to-nested-functions' is on by default.  You
23011     cannot call through pointers to nested functions or pointers to
23012     functions compiled in other languages that use the static chain if
23013     you use '-mno-pointers-to-nested-functions'.
23014
23015'-msave-toc-indirect'
23016'-mno-save-toc-indirect'
23017     Generate (do not generate) code to save the TOC value in the
23018     reserved stack location in the function prologue if the function
23019     calls through a pointer on AIX and 64-bit Linux systems.  If the
23020     TOC value is not saved in the prologue, it is saved just before the
23021     call through the pointer.  The '-mno-save-toc-indirect' option is
23022     the default.
23023
23024'-mcompat-align-parm'
23025'-mno-compat-align-parm'
23026     Generate (do not generate) code to pass structure parameters with a
23027     maximum alignment of 64 bits, for compatibility with older versions
23028     of GCC.
23029
23030     Older versions of GCC (prior to 4.9.0) incorrectly did not align a
23031     structure parameter on a 128-bit boundary when that structure
23032     contained a member requiring 128-bit alignment.  This is corrected
23033     in more recent versions of GCC. This option may be used to generate
23034     code that is compatible with functions compiled with older versions
23035     of GCC.
23036
23037     The '-mno-compat-align-parm' option is the default.
23038
23039'-mstack-protector-guard=GUARD'
23040'-mstack-protector-guard-reg=REG'
23041'-mstack-protector-guard-offset=OFFSET'
23042'-mstack-protector-guard-symbol=SYMBOL'
23043     Generate stack protection code using canary at GUARD.  Supported
23044     locations are 'global' for global canary or 'tls' for per-thread
23045     canary in the TLS block (the default with GNU libc version 2.4 or
23046     later).
23047
23048     With the latter choice the options
23049     '-mstack-protector-guard-reg=REG' and
23050     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
23051     register to use as base register for reading the canary, and from
23052     what offset from that base register.  The default for those is as
23053     specified in the relevant ABI.
23054     '-mstack-protector-guard-symbol=SYMBOL' overrides the offset with a
23055     symbol reference to a canary in the TLS block.
23056
23057
23058File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
23059
230603.18.43 RX Options
23061------------------
23062
23063These command-line options are defined for RX targets:
23064
23065'-m64bit-doubles'
23066'-m32bit-doubles'
23067     Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32
23068     bits ('-m32bit-doubles') in size.  The default is
23069     '-m32bit-doubles'.  _Note_ RX floating-point hardware only works on
23070     32-bit values, which is why the default is '-m32bit-doubles'.
23071
23072'-fpu'
23073'-nofpu'
23074     Enables ('-fpu') or disables ('-nofpu') the use of RX
23075     floating-point hardware.  The default is enabled for the RX600
23076     series and disabled for the RX200 series.
23077
23078     Floating-point instructions are only generated for 32-bit
23079     floating-point values, however, so the FPU hardware is not used for
23080     doubles if the '-m64bit-doubles' option is used.
23081
23082     _Note_ If the '-fpu' option is enabled then
23083     '-funsafe-math-optimizations' is also enabled automatically.  This
23084     is because the RX FPU instructions are themselves unsafe.
23085
23086'-mcpu=NAME'
23087     Selects the type of RX CPU to be targeted.  Currently three types
23088     are supported, the generic 'RX600' and 'RX200' series hardware and
23089     the specific 'RX610' CPU. The default is 'RX600'.
23090
23091     The only difference between 'RX600' and 'RX610' is that the 'RX610'
23092     does not support the 'MVTIPL' instruction.
23093
23094     The 'RX200' series does not have a hardware floating-point unit and
23095     so '-nofpu' is enabled by default when this type is selected.
23096
23097'-mbig-endian-data'
23098'-mlittle-endian-data'
23099     Store data (but not code) in the big-endian format.  The default is
23100     '-mlittle-endian-data', i.e. to store data in the little-endian
23101     format.
23102
23103'-msmall-data-limit=N'
23104     Specifies the maximum size in bytes of global and static variables
23105     which can be placed into the small data area.  Using the small data
23106     area can lead to smaller and faster code, but the size of area is
23107     limited and it is up to the programmer to ensure that the area does
23108     not overflow.  Also when the small data area is used one of the
23109     RX's registers (usually 'r13') is reserved for use pointing to this
23110     area, so it is no longer available for use by the compiler.  This
23111     could result in slower and/or larger code if variables are pushed
23112     onto the stack instead of being held in this register.
23113
23114     Note, common variables (variables that have not been initialized)
23115     and constants are not placed into the small data area as they are
23116     assigned to other sections in the output executable.
23117
23118     The default value is zero, which disables this feature.  Note, this
23119     feature is not enabled by default with higher optimization levels
23120     ('-O2' etc) because of the potentially detrimental effects of
23121     reserving a register.  It is up to the programmer to experiment and
23122     discover whether this feature is of benefit to their program.  See
23123     the description of the '-mpid' option for a description of how the
23124     actual register to hold the small data area pointer is chosen.
23125
23126'-msim'
23127'-mno-sim'
23128     Use the simulator runtime.  The default is to use the libgloss
23129     board-specific runtime.
23130
23131'-mas100-syntax'
23132'-mno-as100-syntax'
23133     When generating assembler output use a syntax that is compatible
23134     with Renesas's AS100 assembler.  This syntax can also be handled by
23135     the GAS assembler, but it has some restrictions so it is not
23136     generated by default.
23137
23138'-mmax-constant-size=N'
23139     Specifies the maximum size, in bytes, of a constant that can be
23140     used as an operand in a RX instruction.  Although the RX
23141     instruction set does allow constants of up to 4 bytes in length to
23142     be used in instructions, a longer value equates to a longer
23143     instruction.  Thus in some circumstances it can be beneficial to
23144     restrict the size of constants that are used in instructions.
23145     Constants that are too big are instead placed into a constant pool
23146     and referenced via register indirection.
23147
23148     The value N can be between 0 and 4.  A value of 0 (the default) or
23149     4 means that constants of any size are allowed.
23150
23151'-mrelax'
23152     Enable linker relaxation.  Linker relaxation is a process whereby
23153     the linker attempts to reduce the size of a program by finding
23154     shorter versions of various instructions.  Disabled by default.
23155
23156'-mint-register=N'
23157     Specify the number of registers to reserve for fast interrupt
23158     handler functions.  The value N can be between 0 and 4.  A value of
23159     1 means that register 'r13' is reserved for the exclusive use of
23160     fast interrupt handlers.  A value of 2 reserves 'r13' and 'r12'.  A
23161     value of 3 reserves 'r13', 'r12' and 'r11', and a value of 4
23162     reserves 'r13' through 'r10'.  A value of 0, the default, does not
23163     reserve any registers.
23164
23165'-msave-acc-in-interrupts'
23166     Specifies that interrupt handler functions should preserve the
23167     accumulator register.  This is only necessary if normal code might
23168     use the accumulator register, for example because it performs
23169     64-bit multiplications.  The default is to ignore the accumulator
23170     as this makes the interrupt handlers faster.
23171
23172'-mpid'
23173'-mno-pid'
23174     Enables the generation of position independent data.  When enabled
23175     any access to constant data is done via an offset from a base
23176     address held in a register.  This allows the location of constant
23177     data to be determined at run time without requiring the executable
23178     to be relocated, which is a benefit to embedded applications with
23179     tight memory constraints.  Data that can be modified is not
23180     affected by this option.
23181
23182     Note, using this feature reserves a register, usually 'r13', for
23183     the constant data base address.  This can result in slower and/or
23184     larger code, especially in complicated functions.
23185
23186     The actual register chosen to hold the constant data base address
23187     depends upon whether the '-msmall-data-limit' and/or the
23188     '-mint-register' command-line options are enabled.  Starting with
23189     register 'r13' and proceeding downwards, registers are allocated
23190     first to satisfy the requirements of '-mint-register', then '-mpid'
23191     and finally '-msmall-data-limit'.  Thus it is possible for the
23192     small data area register to be 'r8' if both '-mint-register=4' and
23193     '-mpid' are specified on the command line.
23194
23195     By default this feature is not enabled.  The default can be
23196     restored via the '-mno-pid' command-line option.
23197
23198'-mno-warn-multiple-fast-interrupts'
23199'-mwarn-multiple-fast-interrupts'
23200     Prevents GCC from issuing a warning message if it finds more than
23201     one fast interrupt handler when it is compiling a file.  The
23202     default is to issue a warning for each extra fast interrupt handler
23203     found, as the RX only supports one such interrupt.
23204
23205'-mallow-string-insns'
23206'-mno-allow-string-insns'
23207     Enables or disables the use of the string manipulation instructions
23208     'SMOVF', 'SCMPU', 'SMOVB', 'SMOVU', 'SUNTIL' 'SWHILE' and also the
23209     'RMPA' instruction.  These instructions may prefetch data, which is
23210     not safe to do if accessing an I/O register.  (See section 12.2.7
23211     of the RX62N Group User's Manual for more information).
23212
23213     The default is to allow these instructions, but it is not possible
23214     for GCC to reliably detect all circumstances where a string
23215     instruction might be used to access an I/O register, so their use
23216     cannot be disabled automatically.  Instead it is reliant upon the
23217     programmer to use the '-mno-allow-string-insns' option if their
23218     program accesses I/O space.
23219
23220     When the instructions are enabled GCC defines the C preprocessor
23221     symbol '__RX_ALLOW_STRING_INSNS__', otherwise it defines the symbol
23222     '__RX_DISALLOW_STRING_INSNS__'.
23223
23224'-mjsr'
23225'-mno-jsr'
23226     Use only (or not only) 'JSR' instructions to access functions.
23227     This option can be used when code size exceeds the range of 'BSR'
23228     instructions.  Note that '-mno-jsr' does not mean to not use 'JSR'
23229     but instead means that any type of branch may be used.
23230
23231 _Note:_ The generic GCC command-line option '-ffixed-REG' has special
23232significance to the RX port when used with the 'interrupt' function
23233attribute.  This attribute indicates a function intended to process fast
23234interrupts.  GCC ensures that it only uses the registers 'r10', 'r11',
23235'r12' and/or 'r13' and only provided that the normal use of the
23236corresponding registers have been restricted via the '-ffixed-REG' or
23237'-mint-register' command-line options.
23238
23239
23240File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RX Options,  Up: Submodel Options
23241
232423.18.44 S/390 and zSeries Options
23243---------------------------------
23244
23245These are the '-m' options defined for the S/390 and zSeries
23246architecture.
23247
23248'-mhard-float'
23249'-msoft-float'
23250     Use (do not use) the hardware floating-point instructions and
23251     registers for floating-point operations.  When '-msoft-float' is
23252     specified, functions in 'libgcc.a' are used to perform
23253     floating-point operations.  When '-mhard-float' is specified, the
23254     compiler generates IEEE floating-point instructions.  This is the
23255     default.
23256
23257'-mhard-dfp'
23258'-mno-hard-dfp'
23259     Use (do not use) the hardware decimal-floating-point instructions
23260     for decimal-floating-point operations.  When '-mno-hard-dfp' is
23261     specified, functions in 'libgcc.a' are used to perform
23262     decimal-floating-point operations.  When '-mhard-dfp' is specified,
23263     the compiler generates decimal-floating-point hardware
23264     instructions.  This is the default for '-march=z9-ec' or higher.
23265
23266'-mlong-double-64'
23267'-mlong-double-128'
23268     These switches control the size of 'long double' type.  A size of
23269     64 bits makes the 'long double' type equivalent to the 'double'
23270     type.  This is the default.
23271
23272'-mbackchain'
23273'-mno-backchain'
23274     Store (do not store) the address of the caller's frame as backchain
23275     pointer into the callee's stack frame.  A backchain may be needed
23276     to allow debugging using tools that do not understand DWARF call
23277     frame information.  When '-mno-packed-stack' is in effect, the
23278     backchain pointer is stored at the bottom of the stack frame; when
23279     '-mpacked-stack' is in effect, the backchain is placed into the
23280     topmost word of the 96/160 byte register save area.
23281
23282     In general, code compiled with '-mbackchain' is call-compatible
23283     with code compiled with '-mmo-backchain'; however, use of the
23284     backchain for debugging purposes usually requires that the whole
23285     binary is built with '-mbackchain'.  Note that the combination of
23286     '-mbackchain', '-mpacked-stack' and '-mhard-float' is not
23287     supported.  In order to build a linux kernel use '-msoft-float'.
23288
23289     The default is to not maintain the backchain.
23290
23291'-mpacked-stack'
23292'-mno-packed-stack'
23293     Use (do not use) the packed stack layout.  When '-mno-packed-stack'
23294     is specified, the compiler uses the all fields of the 96/160 byte
23295     register save area only for their default purpose; unused fields
23296     still take up stack space.  When '-mpacked-stack' is specified,
23297     register save slots are densely packed at the top of the register
23298     save area; unused space is reused for other purposes, allowing for
23299     more efficient use of the available stack space.  However, when
23300     '-mbackchain' is also in effect, the topmost word of the save area
23301     is always used to store the backchain, and the return address
23302     register is always saved two words below the backchain.
23303
23304     As long as the stack frame backchain is not used, code generated
23305     with '-mpacked-stack' is call-compatible with code generated with
23306     '-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
23307     for S/390 or zSeries generated code that uses the stack frame
23308     backchain at run time, not just for debugging purposes.  Such code
23309     is not call-compatible with code compiled with '-mpacked-stack'.
23310     Also, note that the combination of '-mbackchain', '-mpacked-stack'
23311     and '-mhard-float' is not supported.  In order to build a linux
23312     kernel use '-msoft-float'.
23313
23314     The default is to not use the packed stack layout.
23315
23316'-msmall-exec'
23317'-mno-small-exec'
23318     Generate (or do not generate) code using the 'bras' instruction to
23319     do subroutine calls.  This only works reliably if the total
23320     executable size does not exceed 64k.  The default is to use the
23321     'basr' instruction instead, which does not have this limitation.
23322
23323'-m64'
23324'-m31'
23325     When '-m31' is specified, generate code compliant to the GNU/Linux
23326     for S/390 ABI.  When '-m64' is specified, generate code compliant
23327     to the GNU/Linux for zSeries ABI.  This allows GCC in particular to
23328     generate 64-bit instructions.  For the 's390' targets, the default
23329     is '-m31', while the 's390x' targets default to '-m64'.
23330
23331'-mzarch'
23332'-mesa'
23333     When '-mzarch' is specified, generate code using the instructions
23334     available on z/Architecture.  When '-mesa' is specified, generate
23335     code using the instructions available on ESA/390.  Note that
23336     '-mesa' is not possible with '-m64'.  When generating code
23337     compliant to the GNU/Linux for S/390 ABI, the default is '-mesa'.
23338     When generating code compliant to the GNU/Linux for zSeries ABI,
23339     the default is '-mzarch'.
23340
23341'-mhtm'
23342'-mno-htm'
23343     The '-mhtm' option enables a set of builtins making use of
23344     instructions available with the transactional execution facility
23345     introduced with the IBM zEnterprise EC12 machine generation *note
23346     S/390 System z Built-in Functions::.  '-mhtm' is enabled by default
23347     when using '-march=zEC12'.
23348
23349'-mvx'
23350'-mno-vx'
23351     When '-mvx' is specified, generate code using the instructions
23352     available with the vector extension facility introduced with the
23353     IBM z13 machine generation.  This option changes the ABI for some
23354     vector type values with regard to alignment and calling
23355     conventions.  In case vector type values are being used in an
23356     ABI-relevant context a GAS '.gnu_attribute' command will be added
23357     to mark the resulting binary with the ABI used.  '-mvx' is enabled
23358     by default when using '-march=z13'.
23359
23360'-mzvector'
23361'-mno-zvector'
23362     The '-mzvector' option enables vector language extensions and
23363     builtins using instructions available with the vector extension
23364     facility introduced with the IBM z13 machine generation.  This
23365     option adds support for 'vector' to be used as a keyword to define
23366     vector type variables and arguments.  'vector' is only available
23367     when GNU extensions are enabled.  It will not be expanded when
23368     requesting strict standard compliance e.g. with '-std=c99'.  In
23369     addition to the GCC low-level builtins '-mzvector' enables a set of
23370     builtins added for compatibility with AltiVec-style implementations
23371     like Power and Cell.  In order to make use of these builtins the
23372     header file 'vecintrin.h' needs to be included.  '-mzvector' is
23373     disabled by default.
23374
23375'-mmvcle'
23376'-mno-mvcle'
23377     Generate (or do not generate) code using the 'mvcle' instruction to
23378     perform block moves.  When '-mno-mvcle' is specified, use a 'mvc'
23379     loop instead.  This is the default unless optimizing for size.
23380
23381'-mdebug'
23382'-mno-debug'
23383     Print (or do not print) additional debug information when
23384     compiling.  The default is to not print debug information.
23385
23386'-march=CPU-TYPE'
23387     Generate code that runs on CPU-TYPE, which is the name of a system
23388     representing a certain processor type.  Possible values for
23389     CPU-TYPE are 'z900'/'arch5', 'z990'/'arch6', 'z9-109',
23390     'z9-ec'/'arch7', 'z10'/'arch8', 'z196'/'arch9', 'zEC12',
23391     'z13'/'arch11', 'z14'/'arch12', and 'native'.
23392
23393     The default is '-march=z900'.
23394
23395     Specifying 'native' as cpu type can be used to select the best
23396     architecture option for the host processor.  '-march=native' has no
23397     effect if GCC does not recognize the processor.
23398
23399'-mtune=CPU-TYPE'
23400     Tune to CPU-TYPE everything applicable about the generated code,
23401     except for the ABI and the set of available instructions.  The list
23402     of CPU-TYPE values is the same as for '-march'.  The default is the
23403     value used for '-march'.
23404
23405'-mtpf-trace'
23406'-mno-tpf-trace'
23407     Generate code that adds (does not add) in TPF OS specific branches
23408     to trace routines in the operating system.  This option is off by
23409     default, even when compiling for the TPF OS.
23410
23411'-mfused-madd'
23412'-mno-fused-madd'
23413     Generate code that uses (does not use) the floating-point multiply
23414     and accumulate instructions.  These instructions are generated by
23415     default if hardware floating point is used.
23416
23417'-mwarn-framesize=FRAMESIZE'
23418     Emit a warning if the current function exceeds the given frame
23419     size.  Because this is a compile-time check it doesn't need to be a
23420     real problem when the program runs.  It is intended to identify
23421     functions that most probably cause a stack overflow.  It is useful
23422     to be used in an environment with limited stack size e.g. the linux
23423     kernel.
23424
23425'-mwarn-dynamicstack'
23426     Emit a warning if the function calls 'alloca' or uses
23427     dynamically-sized arrays.  This is generally a bad idea with a
23428     limited stack size.
23429
23430'-mstack-guard=STACK-GUARD'
23431'-mstack-size=STACK-SIZE'
23432     If these options are provided the S/390 back end emits additional
23433     instructions in the function prologue that trigger a trap if the
23434     stack size is STACK-GUARD bytes above the STACK-SIZE (remember that
23435     the stack on S/390 grows downward).  If the STACK-GUARD option is
23436     omitted the smallest power of 2 larger than the frame size of the
23437     compiled function is chosen.  These options are intended to be used
23438     to help debugging stack overflow problems.  The additionally
23439     emitted code causes only little overhead and hence can also be used
23440     in production-like systems without greater performance degradation.
23441     The given values have to be exact powers of 2 and STACK-SIZE has to
23442     be greater than STACK-GUARD without exceeding 64k.  In order to be
23443     efficient the extra code makes the assumption that the stack starts
23444     at an address aligned to the value given by STACK-SIZE.  The
23445     STACK-GUARD option can only be used in conjunction with STACK-SIZE.
23446
23447'-mhotpatch=PRE-HALFWORDS,POST-HALFWORDS'
23448     If the hotpatch option is enabled, a "hot-patching" function
23449     prologue is generated for all functions in the compilation unit.
23450     The funtion label is prepended with the given number of two-byte
23451     NOP instructions (PRE-HALFWORDS, maximum 1000000).  After the
23452     label, 2 * POST-HALFWORDS bytes are appended, using the largest NOP
23453     like instructions the architecture allows (maximum 1000000).
23454
23455     If both arguments are zero, hotpatching is disabled.
23456
23457     This option can be overridden for individual functions with the
23458     'hotpatch' attribute.
23459
23460
23461File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
23462
234633.18.45 Score Options
23464---------------------
23465
23466These options are defined for Score implementations:
23467
23468'-meb'
23469     Compile code for big-endian mode.  This is the default.
23470
23471'-mel'
23472     Compile code for little-endian mode.
23473
23474'-mnhwloop'
23475     Disable generation of 'bcnz' instructions.
23476
23477'-muls'
23478     Enable generation of unaligned load and store instructions.
23479
23480'-mmac'
23481     Enable the use of multiply-accumulate instructions.  Disabled by
23482     default.
23483
23484'-mscore5'
23485     Specify the SCORE5 as the target architecture.
23486
23487'-mscore5u'
23488     Specify the SCORE5U of the target architecture.
23489
23490'-mscore7'
23491     Specify the SCORE7 as the target architecture.  This is the
23492     default.
23493
23494'-mscore7d'
23495     Specify the SCORE7D as the target architecture.
23496
23497
23498File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: Score Options,  Up: Submodel Options
23499
235003.18.46 SH Options
23501------------------
23502
23503These '-m' options are defined for the SH implementations:
23504
23505'-m1'
23506     Generate code for the SH1.
23507
23508'-m2'
23509     Generate code for the SH2.
23510
23511'-m2e'
23512     Generate code for the SH2e.
23513
23514'-m2a-nofpu'
23515     Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
23516     way that the floating-point unit is not used.
23517
23518'-m2a-single-only'
23519     Generate code for the SH2a-FPU, in such a way that no
23520     double-precision floating-point operations are used.
23521
23522'-m2a-single'
23523     Generate code for the SH2a-FPU assuming the floating-point unit is
23524     in single-precision mode by default.
23525
23526'-m2a'
23527     Generate code for the SH2a-FPU assuming the floating-point unit is
23528     in double-precision mode by default.
23529
23530'-m3'
23531     Generate code for the SH3.
23532
23533'-m3e'
23534     Generate code for the SH3e.
23535
23536'-m4-nofpu'
23537     Generate code for the SH4 without a floating-point unit.
23538
23539'-m4-single-only'
23540     Generate code for the SH4 with a floating-point unit that only
23541     supports single-precision arithmetic.
23542
23543'-m4-single'
23544     Generate code for the SH4 assuming the floating-point unit is in
23545     single-precision mode by default.
23546
23547'-m4'
23548     Generate code for the SH4.
23549
23550'-m4-100'
23551     Generate code for SH4-100.
23552
23553'-m4-100-nofpu'
23554     Generate code for SH4-100 in such a way that the floating-point
23555     unit is not used.
23556
23557'-m4-100-single'
23558     Generate code for SH4-100 assuming the floating-point unit is in
23559     single-precision mode by default.
23560
23561'-m4-100-single-only'
23562     Generate code for SH4-100 in such a way that no double-precision
23563     floating-point operations are used.
23564
23565'-m4-200'
23566     Generate code for SH4-200.
23567
23568'-m4-200-nofpu'
23569     Generate code for SH4-200 without in such a way that the
23570     floating-point unit is not used.
23571
23572'-m4-200-single'
23573     Generate code for SH4-200 assuming the floating-point unit is in
23574     single-precision mode by default.
23575
23576'-m4-200-single-only'
23577     Generate code for SH4-200 in such a way that no double-precision
23578     floating-point operations are used.
23579
23580'-m4-300'
23581     Generate code for SH4-300.
23582
23583'-m4-300-nofpu'
23584     Generate code for SH4-300 without in such a way that the
23585     floating-point unit is not used.
23586
23587'-m4-300-single'
23588     Generate code for SH4-300 in such a way that no double-precision
23589     floating-point operations are used.
23590
23591'-m4-300-single-only'
23592     Generate code for SH4-300 in such a way that no double-precision
23593     floating-point operations are used.
23594
23595'-m4-340'
23596     Generate code for SH4-340 (no MMU, no FPU).
23597
23598'-m4-500'
23599     Generate code for SH4-500 (no FPU). Passes '-isa=sh4-nofpu' to the
23600     assembler.
23601
23602'-m4a-nofpu'
23603     Generate code for the SH4al-dsp, or for a SH4a in such a way that
23604     the floating-point unit is not used.
23605
23606'-m4a-single-only'
23607     Generate code for the SH4a, in such a way that no double-precision
23608     floating-point operations are used.
23609
23610'-m4a-single'
23611     Generate code for the SH4a assuming the floating-point unit is in
23612     single-precision mode by default.
23613
23614'-m4a'
23615     Generate code for the SH4a.
23616
23617'-m4al'
23618     Same as '-m4a-nofpu', except that it implicitly passes '-dsp' to
23619     the assembler.  GCC doesn't generate any DSP instructions at the
23620     moment.
23621
23622'-mb'
23623     Compile code for the processor in big-endian mode.
23624
23625'-ml'
23626     Compile code for the processor in little-endian mode.
23627
23628'-mdalign'
23629     Align doubles at 64-bit boundaries.  Note that this changes the
23630     calling conventions, and thus some functions from the standard C
23631     library do not work unless you recompile it first with '-mdalign'.
23632
23633'-mrelax'
23634     Shorten some address references at link time, when possible; uses
23635     the linker option '-relax'.
23636
23637'-mbigtable'
23638     Use 32-bit offsets in 'switch' tables.  The default is to use
23639     16-bit offsets.
23640
23641'-mbitops'
23642     Enable the use of bit manipulation instructions on SH2A.
23643
23644'-mfmovd'
23645     Enable the use of the instruction 'fmovd'.  Check '-mdalign' for
23646     alignment constraints.
23647
23648'-mrenesas'
23649     Comply with the calling conventions defined by Renesas.
23650
23651'-mno-renesas'
23652     Comply with the calling conventions defined for GCC before the
23653     Renesas conventions were available.  This option is the default for
23654     all targets of the SH toolchain.
23655
23656'-mnomacsave'
23657     Mark the 'MAC' register as call-clobbered, even if '-mrenesas' is
23658     given.
23659
23660'-mieee'
23661'-mno-ieee'
23662     Control the IEEE compliance of floating-point comparisons, which
23663     affects the handling of cases where the result of a comparison is
23664     unordered.  By default '-mieee' is implicitly enabled.  If
23665     '-ffinite-math-only' is enabled '-mno-ieee' is implicitly set,
23666     which results in faster floating-point greater-equal and less-equal
23667     comparisons.  The implicit settings can be overridden by specifying
23668     either '-mieee' or '-mno-ieee'.
23669
23670'-minline-ic_invalidate'
23671     Inline code to invalidate instruction cache entries after setting
23672     up nested function trampolines.  This option has no effect if
23673     '-musermode' is in effect and the selected code generation option
23674     (e.g. '-m4') does not allow the use of the 'icbi' instruction.  If
23675     the selected code generation option does not allow the use of the
23676     'icbi' instruction, and '-musermode' is not in effect, the inlined
23677     code manipulates the instruction cache address array directly with
23678     an associative write.  This not only requires privileged mode at
23679     run time, but it also fails if the cache line had been mapped via
23680     the TLB and has become unmapped.
23681
23682'-misize'
23683     Dump instruction size and location in the assembly code.
23684
23685'-mpadstruct'
23686     This option is deprecated.  It pads structures to multiple of 4
23687     bytes, which is incompatible with the SH ABI.
23688
23689'-matomic-model=MODEL'
23690     Sets the model of atomic operations and additional parameters as a
23691     comma separated list.  For details on the atomic built-in functions
23692     see *note __atomic Builtins::.  The following models and parameters
23693     are supported:
23694
23695     'none'
23696          Disable compiler generated atomic sequences and emit library
23697          calls for atomic operations.  This is the default if the
23698          target is not 'sh*-*-linux*'.
23699
23700     'soft-gusa'
23701          Generate GNU/Linux compatible gUSA software atomic sequences
23702          for the atomic built-in functions.  The generated atomic
23703          sequences require additional support from the
23704          interrupt/exception handling code of the system and are only
23705          suitable for SH3* and SH4* single-core systems.  This option
23706          is enabled by default when the target is 'sh*-*-linux*' and
23707          SH3* or SH4*.  When the target is SH4A, this option also
23708          partially utilizes the hardware atomic instructions 'movli.l'
23709          and 'movco.l' to create more efficient code, unless 'strict'
23710          is specified.
23711
23712     'soft-tcb'
23713          Generate software atomic sequences that use a variable in the
23714          thread control block.  This is a variation of the gUSA
23715          sequences which can also be used on SH1* and SH2* targets.
23716          The generated atomic sequences require additional support from
23717          the interrupt/exception handling code of the system and are
23718          only suitable for single-core systems.  When using this model,
23719          the 'gbr-offset=' parameter has to be specified as well.
23720
23721     'soft-imask'
23722          Generate software atomic sequences that temporarily disable
23723          interrupts by setting 'SR.IMASK = 1111'.  This model works
23724          only when the program runs in privileged mode and is only
23725          suitable for single-core systems.  Additional support from the
23726          interrupt/exception handling code of the system is not
23727          required.  This model is enabled by default when the target is
23728          'sh*-*-linux*' and SH1* or SH2*.
23729
23730     'hard-llcs'
23731          Generate hardware atomic sequences using the 'movli.l' and
23732          'movco.l' instructions only.  This is only available on SH4A
23733          and is suitable for multi-core systems.  Since the hardware
23734          instructions support only 32 bit atomic variables access to 8
23735          or 16 bit variables is emulated with 32 bit accesses.  Code
23736          compiled with this option is also compatible with other
23737          software atomic model interrupt/exception handling systems if
23738          executed on an SH4A system.  Additional support from the
23739          interrupt/exception handling code of the system is not
23740          required for this model.
23741
23742     'gbr-offset='
23743          This parameter specifies the offset in bytes of the variable
23744          in the thread control block structure that should be used by
23745          the generated atomic sequences when the 'soft-tcb' model has
23746          been selected.  For other models this parameter is ignored.
23747          The specified value must be an integer multiple of four and in
23748          the range 0-1020.
23749
23750     'strict'
23751          This parameter prevents mixed usage of multiple atomic models,
23752          even if they are compatible, and makes the compiler generate
23753          atomic sequences of the specified model only.
23754
23755'-mtas'
23756     Generate the 'tas.b' opcode for '__atomic_test_and_set'.  Notice
23757     that depending on the particular hardware and software
23758     configuration this can degrade overall performance due to the
23759     operand cache line flushes that are implied by the 'tas.b'
23760     instruction.  On multi-core SH4A processors the 'tas.b' instruction
23761     must be used with caution since it can result in data corruption
23762     for certain cache configurations.
23763
23764'-mprefergot'
23765     When generating position-independent code, emit function calls
23766     using the Global Offset Table instead of the Procedure Linkage
23767     Table.
23768
23769'-musermode'
23770'-mno-usermode'
23771     Don't allow (allow) the compiler generating privileged mode code.
23772     Specifying '-musermode' also implies '-mno-inline-ic_invalidate' if
23773     the inlined code would not work in user mode.  '-musermode' is the
23774     default when the target is 'sh*-*-linux*'.  If the target is SH1*
23775     or SH2* '-musermode' has no effect, since there is no user mode.
23776
23777'-multcost=NUMBER'
23778     Set the cost to assume for a multiply insn.
23779
23780'-mdiv=STRATEGY'
23781     Set the division strategy to be used for integer division
23782     operations.  STRATEGY can be one of:
23783
23784     'call-div1'
23785          Calls a library function that uses the single-step division
23786          instruction 'div1' to perform the operation.  Division by zero
23787          calculates an unspecified result and does not trap.  This is
23788          the default except for SH4, SH2A and SHcompact.
23789
23790     'call-fp'
23791          Calls a library function that performs the operation in double
23792          precision floating point.  Division by zero causes a
23793          floating-point exception.  This is the default for SHcompact
23794          with FPU. Specifying this for targets that do not have a
23795          double precision FPU defaults to 'call-div1'.
23796
23797     'call-table'
23798          Calls a library function that uses a lookup table for small
23799          divisors and the 'div1' instruction with case distinction for
23800          larger divisors.  Division by zero calculates an unspecified
23801          result and does not trap.  This is the default for SH4.
23802          Specifying this for targets that do not have dynamic shift
23803          instructions defaults to 'call-div1'.
23804
23805     When a division strategy has not been specified the default
23806     strategy is selected based on the current target.  For SH2A the
23807     default strategy is to use the 'divs' and 'divu' instructions
23808     instead of library function calls.
23809
23810'-maccumulate-outgoing-args'
23811     Reserve space once for outgoing arguments in the function prologue
23812     rather than around each call.  Generally beneficial for performance
23813     and size.  Also needed for unwinding to avoid changing the stack
23814     frame around conditional code.
23815
23816'-mdivsi3_libfunc=NAME'
23817     Set the name of the library function used for 32-bit signed
23818     division to NAME.  This only affects the name used in the 'call'
23819     division strategies, and the compiler still expects the same sets
23820     of input/output/clobbered registers as if this option were not
23821     present.
23822
23823'-mfixed-range=REGISTER-RANGE'
23824     Generate code treating the given register range as fixed registers.
23825     A fixed register is one that the register allocator cannot use.
23826     This is useful when compiling kernel code.  A register range is
23827     specified as two registers separated by a dash.  Multiple register
23828     ranges can be specified separated by a comma.
23829
23830'-mbranch-cost=NUM'
23831     Assume NUM to be the cost for a branch instruction.  Higher numbers
23832     make the compiler try to generate more branch-free code if
23833     possible.  If not specified the value is selected depending on the
23834     processor type that is being compiled for.
23835
23836'-mzdcbranch'
23837'-mno-zdcbranch'
23838     Assume (do not assume) that zero displacement conditional branch
23839     instructions 'bt' and 'bf' are fast.  If '-mzdcbranch' is
23840     specified, the compiler prefers zero displacement branch code
23841     sequences.  This is enabled by default when generating code for SH4
23842     and SH4A. It can be explicitly disabled by specifying
23843     '-mno-zdcbranch'.
23844
23845'-mcbranch-force-delay-slot'
23846     Force the usage of delay slots for conditional branches, which
23847     stuffs the delay slot with a 'nop' if a suitable instruction cannot
23848     be found.  By default this option is disabled.  It can be enabled
23849     to work around hardware bugs as found in the original SH7055.
23850
23851'-mfused-madd'
23852'-mno-fused-madd'
23853     Generate code that uses (does not use) the floating-point multiply
23854     and accumulate instructions.  These instructions are generated by
23855     default if hardware floating point is used.  The machine-dependent
23856     '-mfused-madd' option is now mapped to the machine-independent
23857     '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
23858     '-ffp-contract=off'.
23859
23860'-mfsca'
23861'-mno-fsca'
23862     Allow or disallow the compiler to emit the 'fsca' instruction for
23863     sine and cosine approximations.  The option '-mfsca' must be used
23864     in combination with '-funsafe-math-optimizations'.  It is enabled
23865     by default when generating code for SH4A. Using '-mno-fsca'
23866     disables sine and cosine approximations even if
23867     '-funsafe-math-optimizations' is in effect.
23868
23869'-mfsrra'
23870'-mno-fsrra'
23871     Allow or disallow the compiler to emit the 'fsrra' instruction for
23872     reciprocal square root approximations.  The option '-mfsrra' must
23873     be used in combination with '-funsafe-math-optimizations' and
23874     '-ffinite-math-only'.  It is enabled by default when generating
23875     code for SH4A. Using '-mno-fsrra' disables reciprocal square root
23876     approximations even if '-funsafe-math-optimizations' and
23877     '-ffinite-math-only' are in effect.
23878
23879'-mpretend-cmove'
23880     Prefer zero-displacement conditional branches for conditional move
23881     instruction patterns.  This can result in faster code on the SH4
23882     processor.
23883
23884'-mfdpic'
23885     Generate code using the FDPIC ABI.
23886
23887
23888File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Options,  Up: Submodel Options
23889
238903.18.47 Solaris 2 Options
23891-------------------------
23892
23893These '-m' options are supported on Solaris 2:
23894
23895'-mclear-hwcap'
23896     '-mclear-hwcap' tells the compiler to remove the hardware
23897     capabilities generated by the Solaris assembler.  This is only
23898     necessary when object files use ISA extensions not supported by the
23899     current machine, but check at runtime whether or not to use them.
23900
23901'-mimpure-text'
23902     '-mimpure-text', used in addition to '-shared', tells the compiler
23903     to not pass '-z text' to the linker when linking a shared object.
23904     Using this option, you can link position-dependent code into a
23905     shared object.
23906
23907     '-mimpure-text' suppresses the "relocations remain against
23908     allocatable but non-writable sections" linker error message.
23909     However, the necessary relocations trigger copy-on-write, and the
23910     shared object is not actually shared across processes.  Instead of
23911     using '-mimpure-text', you should compile all source code with
23912     '-fpic' or '-fPIC'.
23913
23914 These switches are supported in addition to the above on Solaris 2:
23915
23916'-pthreads'
23917     This is a synonym for '-pthread'.
23918
23919
23920File: gcc.info,  Node: SPARC Options,  Next: SPU Options,  Prev: Solaris 2 Options,  Up: Submodel Options
23921
239223.18.48 SPARC Options
23923---------------------
23924
23925These '-m' options are supported on the SPARC:
23926
23927'-mno-app-regs'
23928'-mapp-regs'
23929     Specify '-mapp-regs' to generate output using the global registers
23930     2 through 4, which the SPARC SVR4 ABI reserves for applications.
23931     Like the global register 1, each global register 2 through 4 is
23932     then treated as an allocable register that is clobbered by function
23933     calls.  This is the default.
23934
23935     To be fully SVR4 ABI-compliant at the cost of some performance
23936     loss, specify '-mno-app-regs'.  You should compile libraries and
23937     system software with this option.
23938
23939'-mflat'
23940'-mno-flat'
23941     With '-mflat', the compiler does not generate save/restore
23942     instructions and uses a "flat" or single register window model.
23943     This model is compatible with the regular register window model.
23944     The local registers and the input registers (0-5) are still treated
23945     as "call-saved" registers and are saved on the stack as needed.
23946
23947     With '-mno-flat' (the default), the compiler generates save/restore
23948     instructions (except for leaf functions).  This is the normal
23949     operating mode.
23950
23951'-mfpu'
23952'-mhard-float'
23953     Generate output containing floating-point instructions.  This is
23954     the default.
23955
23956'-mno-fpu'
23957'-msoft-float'
23958     Generate output containing library calls for floating point.
23959     *Warning:* the requisite libraries are not available for all SPARC
23960     targets.  Normally the facilities of the machine's usual C compiler
23961     are used, but this cannot be done directly in cross-compilation.
23962     You must make your own arrangements to provide suitable library
23963     functions for cross-compilation.  The embedded targets
23964     'sparc-*-aout' and 'sparclite-*-*' do provide software
23965     floating-point support.
23966
23967     '-msoft-float' changes the calling convention in the output file;
23968     therefore, it is only useful if you compile _all_ of a program with
23969     this option.  In particular, you need to compile 'libgcc.a', the
23970     library that comes with GCC, with '-msoft-float' in order for this
23971     to work.
23972
23973'-mhard-quad-float'
23974     Generate output containing quad-word (long double) floating-point
23975     instructions.
23976
23977'-msoft-quad-float'
23978     Generate output containing library calls for quad-word (long
23979     double) floating-point instructions.  The functions called are
23980     those specified in the SPARC ABI.  This is the default.
23981
23982     As of this writing, there are no SPARC implementations that have
23983     hardware support for the quad-word floating-point instructions.
23984     They all invoke a trap handler for one of these instructions, and
23985     then the trap handler emulates the effect of the instruction.
23986     Because of the trap handler overhead, this is much slower than
23987     calling the ABI library routines.  Thus the '-msoft-quad-float'
23988     option is the default.
23989
23990'-mno-unaligned-doubles'
23991'-munaligned-doubles'
23992     Assume that doubles have 8-byte alignment.  This is the default.
23993
23994     With '-munaligned-doubles', GCC assumes that doubles have 8-byte
23995     alignment only if they are contained in another type, or if they
23996     have an absolute address.  Otherwise, it assumes they have 4-byte
23997     alignment.  Specifying this option avoids some rare compatibility
23998     problems with code generated by other compilers.  It is not the
23999     default because it results in a performance loss, especially for
24000     floating-point code.
24001
24002'-muser-mode'
24003'-mno-user-mode'
24004     Do not generate code that can only run in supervisor mode.  This is
24005     relevant only for the 'casa' instruction emitted for the LEON3
24006     processor.  This is the default.
24007
24008'-mfaster-structs'
24009'-mno-faster-structs'
24010     With '-mfaster-structs', the compiler assumes that structures
24011     should have 8-byte alignment.  This enables the use of pairs of
24012     'ldd' and 'std' instructions for copies in structure assignment, in
24013     place of twice as many 'ld' and 'st' pairs.  However, the use of
24014     this changed alignment directly violates the SPARC ABI.  Thus, it's
24015     intended only for use on targets where the developer acknowledges
24016     that their resulting code is not directly in line with the rules of
24017     the ABI.
24018
24019'-mstd-struct-return'
24020'-mno-std-struct-return'
24021     With '-mstd-struct-return', the compiler generates checking code in
24022     functions returning structures or unions to detect size mismatches
24023     between the two sides of function calls, as per the 32-bit ABI.
24024
24025     The default is '-mno-std-struct-return'.  This option has no effect
24026     in 64-bit mode.
24027
24028'-mlra'
24029'-mno-lra'
24030     Enable Local Register Allocation.  This is the default for SPARC
24031     since GCC 7 so '-mno-lra' needs to be passed to get old Reload.
24032
24033'-mcpu=CPU_TYPE'
24034     Set the instruction set, register set, and instruction scheduling
24035     parameters for machine type CPU_TYPE.  Supported values for
24036     CPU_TYPE are 'v7', 'cypress', 'v8', 'supersparc', 'hypersparc',
24037     'leon', 'leon3', 'leon3v7', 'sparclite', 'f930', 'f934',
24038     'sparclite86x', 'sparclet', 'tsc701', 'v9', 'ultrasparc',
24039     'ultrasparc3', 'niagara', 'niagara2', 'niagara3', 'niagara4',
24040     'niagara7' and 'm8'.
24041
24042     Native Solaris and GNU/Linux toolchains also support the value
24043     'native', which selects the best architecture option for the host
24044     processor.  '-mcpu=native' has no effect if GCC does not recognize
24045     the processor.
24046
24047     Default instruction scheduling parameters are used for values that
24048     select an architecture and not an implementation.  These are 'v7',
24049     'v8', 'sparclite', 'sparclet', 'v9'.
24050
24051     Here is a list of each supported architecture and their supported
24052     implementations.
24053
24054     v7
24055          cypress, leon3v7
24056
24057     v8
24058          supersparc, hypersparc, leon, leon3
24059
24060     sparclite
24061          f930, f934, sparclite86x
24062
24063     sparclet
24064          tsc701
24065
24066     v9
24067          ultrasparc, ultrasparc3, niagara, niagara2, niagara3,
24068          niagara4, niagara7, m8
24069
24070     By default (unless configured otherwise), GCC generates code for
24071     the V7 variant of the SPARC architecture.  With '-mcpu=cypress',
24072     the compiler additionally optimizes it for the Cypress CY7C602
24073     chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
24074     also appropriate for the older SPARCStation 1, 2, IPX etc.
24075
24076     With '-mcpu=v8', GCC generates code for the V8 variant of the SPARC
24077     architecture.  The only difference from V7 code is that the
24078     compiler emits the integer multiply and integer divide instructions
24079     which exist in SPARC-V8 but not in SPARC-V7.  With
24080     '-mcpu=supersparc', the compiler additionally optimizes it for the
24081     SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
24082     series.
24083
24084     With '-mcpu=sparclite', GCC generates code for the SPARClite
24085     variant of the SPARC architecture.  This adds the integer multiply,
24086     integer divide step and scan ('ffs') instructions which exist in
24087     SPARClite but not in SPARC-V7.  With '-mcpu=f930', the compiler
24088     additionally optimizes it for the Fujitsu MB86930 chip, which is
24089     the original SPARClite, with no FPU.  With '-mcpu=f934', the
24090     compiler additionally optimizes it for the Fujitsu MB86934 chip,
24091     which is the more recent SPARClite with FPU.
24092
24093     With '-mcpu=sparclet', GCC generates code for the SPARClet variant
24094     of the SPARC architecture.  This adds the integer multiply,
24095     multiply/accumulate, integer divide step and scan ('ffs')
24096     instructions which exist in SPARClet but not in SPARC-V7.  With
24097     '-mcpu=tsc701', the compiler additionally optimizes it for the
24098     TEMIC SPARClet chip.
24099
24100     With '-mcpu=v9', GCC generates code for the V9 variant of the SPARC
24101     architecture.  This adds 64-bit integer and floating-point move
24102     instructions, 3 additional floating-point condition code registers
24103     and conditional move instructions.  With '-mcpu=ultrasparc', the
24104     compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
24105     chips.  With '-mcpu=ultrasparc3', the compiler additionally
24106     optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
24107     chips.  With '-mcpu=niagara', the compiler additionally optimizes
24108     it for Sun UltraSPARC T1 chips.  With '-mcpu=niagara2', the
24109     compiler additionally optimizes it for Sun UltraSPARC T2 chips.
24110     With '-mcpu=niagara3', the compiler additionally optimizes it for
24111     Sun UltraSPARC T3 chips.  With '-mcpu=niagara4', the compiler
24112     additionally optimizes it for Sun UltraSPARC T4 chips.  With
24113     '-mcpu=niagara7', the compiler additionally optimizes it for Oracle
24114     SPARC M7 chips.  With '-mcpu=m8', the compiler additionally
24115     optimizes it for Oracle M8 chips.
24116
24117'-mtune=CPU_TYPE'
24118     Set the instruction scheduling parameters for machine type
24119     CPU_TYPE, but do not set the instruction set or register set that
24120     the option '-mcpu=CPU_TYPE' does.
24121
24122     The same values for '-mcpu=CPU_TYPE' can be used for
24123     '-mtune=CPU_TYPE', but the only useful values are those that select
24124     a particular CPU implementation.  Those are 'cypress',
24125     'supersparc', 'hypersparc', 'leon', 'leon3', 'leon3v7', 'f930',
24126     'f934', 'sparclite86x', 'tsc701', 'ultrasparc', 'ultrasparc3',
24127     'niagara', 'niagara2', 'niagara3', 'niagara4', 'niagara7' and 'm8'.
24128     With native Solaris and GNU/Linux toolchains, 'native' can also be
24129     used.
24130
24131'-mv8plus'
24132'-mno-v8plus'
24133     With '-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
24134     difference from the V8 ABI is that the global and out registers are
24135     considered 64 bits wide.  This is enabled by default on Solaris in
24136     32-bit mode for all SPARC-V9 processors.
24137
24138'-mvis'
24139'-mno-vis'
24140     With '-mvis', GCC generates code that takes advantage of the
24141     UltraSPARC Visual Instruction Set extensions.  The default is
24142     '-mno-vis'.
24143
24144'-mvis2'
24145'-mno-vis2'
24146     With '-mvis2', GCC generates code that takes advantage of version
24147     2.0 of the UltraSPARC Visual Instruction Set extensions.  The
24148     default is '-mvis2' when targeting a cpu that supports such
24149     instructions, such as UltraSPARC-III and later.  Setting '-mvis2'
24150     also sets '-mvis'.
24151
24152'-mvis3'
24153'-mno-vis3'
24154     With '-mvis3', GCC generates code that takes advantage of version
24155     3.0 of the UltraSPARC Visual Instruction Set extensions.  The
24156     default is '-mvis3' when targeting a cpu that supports such
24157     instructions, such as niagara-3 and later.  Setting '-mvis3' also
24158     sets '-mvis2' and '-mvis'.
24159
24160'-mvis4'
24161'-mno-vis4'
24162     With '-mvis4', GCC generates code that takes advantage of version
24163     4.0 of the UltraSPARC Visual Instruction Set extensions.  The
24164     default is '-mvis4' when targeting a cpu that supports such
24165     instructions, such as niagara-7 and later.  Setting '-mvis4' also
24166     sets '-mvis3', '-mvis2' and '-mvis'.
24167
24168'-mvis4b'
24169'-mno-vis4b'
24170     With '-mvis4b', GCC generates code that takes advantage of version
24171     4.0 of the UltraSPARC Visual Instruction Set extensions, plus the
24172     additional VIS instructions introduced in the Oracle SPARC
24173     Architecture 2017.  The default is '-mvis4b' when targeting a cpu
24174     that supports such instructions, such as m8 and later.  Setting
24175     '-mvis4b' also sets '-mvis4', '-mvis3', '-mvis2' and '-mvis'.
24176
24177'-mcbcond'
24178'-mno-cbcond'
24179     With '-mcbcond', GCC generates code that takes advantage of the
24180     UltraSPARC Compare-and-Branch-on-Condition instructions.  The
24181     default is '-mcbcond' when targeting a CPU that supports such
24182     instructions, such as Niagara-4 and later.
24183
24184'-mfmaf'
24185'-mno-fmaf'
24186     With '-mfmaf', GCC generates code that takes advantage of the
24187     UltraSPARC Fused Multiply-Add Floating-point instructions.  The
24188     default is '-mfmaf' when targeting a CPU that supports such
24189     instructions, such as Niagara-3 and later.
24190
24191'-mfsmuld'
24192'-mno-fsmuld'
24193     With '-mfsmuld', GCC generates code that takes advantage of the
24194     Floating-point Multiply Single to Double (FsMULd) instruction.  The
24195     default is '-mfsmuld' when targeting a CPU supporting the
24196     architecture versions V8 or V9 with FPU except '-mcpu=leon'.
24197
24198'-mpopc'
24199'-mno-popc'
24200     With '-mpopc', GCC generates code that takes advantage of the
24201     UltraSPARC Population Count instruction.  The default is '-mpopc'
24202     when targeting a CPU that supports such an instruction, such as
24203     Niagara-2 and later.
24204
24205'-msubxc'
24206'-mno-subxc'
24207     With '-msubxc', GCC generates code that takes advantage of the
24208     UltraSPARC Subtract-Extended-with-Carry instruction.  The default
24209     is '-msubxc' when targeting a CPU that supports such an
24210     instruction, such as Niagara-7 and later.
24211
24212'-mfix-at697f'
24213     Enable the documented workaround for the single erratum of the
24214     Atmel AT697F processor (which corresponds to erratum #13 of the
24215     AT697E processor).
24216
24217'-mfix-ut699'
24218     Enable the documented workarounds for the floating-point errata and
24219     the data cache nullify errata of the UT699 processor.
24220
24221'-mfix-ut700'
24222     Enable the documented workaround for the back-to-back store errata
24223     of the UT699E/UT700 processor.
24224
24225'-mfix-gr712rc'
24226     Enable the documented workaround for the back-to-back store errata
24227     of the GR712RC processor.
24228
24229 These '-m' options are supported in addition to the above on SPARC-V9
24230processors in 64-bit environments:
24231
24232'-m32'
24233'-m64'
24234     Generate code for a 32-bit or 64-bit environment.  The 32-bit
24235     environment sets int, long and pointer to 32 bits.  The 64-bit
24236     environment sets int to 32 bits and long and pointer to 64 bits.
24237
24238'-mcmodel=WHICH'
24239     Set the code model to one of
24240
24241     'medlow'
24242          The Medium/Low code model: 64-bit addresses, programs must be
24243          linked in the low 32 bits of memory.  Programs can be
24244          statically or dynamically linked.
24245
24246     'medmid'
24247          The Medium/Middle code model: 64-bit addresses, programs must
24248          be linked in the low 44 bits of memory, the text and data
24249          segments must be less than 2GB in size and the data segment
24250          must be located within 2GB of the text segment.
24251
24252     'medany'
24253          The Medium/Anywhere code model: 64-bit addresses, programs may
24254          be linked anywhere in memory, the text and data segments must
24255          be less than 2GB in size and the data segment must be located
24256          within 2GB of the text segment.
24257
24258     'embmedany'
24259          The Medium/Anywhere code model for embedded systems: 64-bit
24260          addresses, the text and data segments must be less than 2GB in
24261          size, both starting anywhere in memory (determined at link
24262          time).  The global register %g4 points to the base of the data
24263          segment.  Programs are statically linked and PIC is not
24264          supported.
24265
24266'-mmemory-model=MEM-MODEL'
24267     Set the memory model in force on the processor to one of
24268
24269     'default'
24270          The default memory model for the processor and operating
24271          system.
24272
24273     'rmo'
24274          Relaxed Memory Order
24275
24276     'pso'
24277          Partial Store Order
24278
24279     'tso'
24280          Total Store Order
24281
24282     'sc'
24283          Sequential Consistency
24284
24285     These memory models are formally defined in Appendix D of the
24286     SPARC-V9 architecture manual, as set in the processor's 'PSTATE.MM'
24287     field.
24288
24289'-mstack-bias'
24290'-mno-stack-bias'
24291     With '-mstack-bias', GCC assumes that the stack pointer, and frame
24292     pointer if present, are offset by -2047 which must be added back
24293     when making stack frame references.  This is the default in 64-bit
24294     mode.  Otherwise, assume no such offset is present.
24295
24296
24297File: gcc.info,  Node: SPU Options,  Next: System V Options,  Prev: SPARC Options,  Up: Submodel Options
24298
242993.18.49 SPU Options
24300-------------------
24301
24302These '-m' options are supported on the SPU:
24303
24304'-mwarn-reloc'
24305'-merror-reloc'
24306
24307     The loader for SPU does not handle dynamic relocations.  By
24308     default, GCC gives an error when it generates code that requires a
24309     dynamic relocation.  '-mno-error-reloc' disables the error,
24310     '-mwarn-reloc' generates a warning instead.
24311
24312'-msafe-dma'
24313'-munsafe-dma'
24314
24315     Instructions that initiate or test completion of DMA must not be
24316     reordered with respect to loads and stores of the memory that is
24317     being accessed.  With '-munsafe-dma' you must use the 'volatile'
24318     keyword to protect memory accesses, but that can lead to
24319     inefficient code in places where the memory is known to not change.
24320     Rather than mark the memory as volatile, you can use '-msafe-dma'
24321     to tell the compiler to treat the DMA instructions as potentially
24322     affecting all memory.
24323
24324'-mbranch-hints'
24325
24326     By default, GCC generates a branch hint instruction to avoid
24327     pipeline stalls for always-taken or probably-taken branches.  A
24328     hint is not generated closer than 8 instructions away from its
24329     branch.  There is little reason to disable them, except for
24330     debugging purposes, or to make an object a little bit smaller.
24331
24332'-msmall-mem'
24333'-mlarge-mem'
24334
24335     By default, GCC generates code assuming that addresses are never
24336     larger than 18 bits.  With '-mlarge-mem' code is generated that
24337     assumes a full 32-bit address.
24338
24339'-mstdmain'
24340
24341     By default, GCC links against startup code that assumes the
24342     SPU-style main function interface (which has an unconventional
24343     parameter list).  With '-mstdmain', GCC links your program against
24344     startup code that assumes a C99-style interface to 'main',
24345     including a local copy of 'argv' strings.
24346
24347'-mfixed-range=REGISTER-RANGE'
24348     Generate code treating the given register range as fixed registers.
24349     A fixed register is one that the register allocator cannot use.
24350     This is useful when compiling kernel code.  A register range is
24351     specified as two registers separated by a dash.  Multiple register
24352     ranges can be specified separated by a comma.
24353
24354'-mea32'
24355'-mea64'
24356     Compile code assuming that pointers to the PPU address space
24357     accessed via the '__ea' named address space qualifier are either 32
24358     or 64 bits wide.  The default is 32 bits.  As this is an
24359     ABI-changing option, all object code in an executable must be
24360     compiled with the same setting.
24361
24362'-maddress-space-conversion'
24363'-mno-address-space-conversion'
24364     Allow/disallow treating the '__ea' address space as superset of the
24365     generic address space.  This enables explicit type casts between
24366     '__ea' and generic pointer as well as implicit conversions of
24367     generic pointers to '__ea' pointers.  The default is to allow
24368     address space pointer conversions.
24369
24370'-mcache-size=CACHE-SIZE'
24371     This option controls the version of libgcc that the compiler links
24372     to an executable and selects a software-managed cache for accessing
24373     variables in the '__ea' address space with a particular cache size.
24374     Possible options for CACHE-SIZE are '8', '16', '32', '64' and
24375     '128'.  The default cache size is 64KB.
24376
24377'-matomic-updates'
24378'-mno-atomic-updates'
24379     This option controls the version of libgcc that the compiler links
24380     to an executable and selects whether atomic updates to the
24381     software-managed cache of PPU-side variables are used.  If you use
24382     atomic updates, changes to a PPU variable from SPU code using the
24383     '__ea' named address space qualifier do not interfere with changes
24384     to other PPU variables residing in the same cache line from PPU
24385     code.  If you do not use atomic updates, such interference may
24386     occur; however, writing back cache lines is more efficient.  The
24387     default behavior is to use atomic updates.
24388
24389'-mdual-nops'
24390'-mdual-nops=N'
24391     By default, GCC inserts NOPs to increase dual issue when it expects
24392     it to increase performance.  N can be a value from 0 to 10.  A
24393     smaller N inserts fewer NOPs.  10 is the default, 0 is the same as
24394     '-mno-dual-nops'.  Disabled with '-Os'.
24395
24396'-mhint-max-nops=N'
24397     Maximum number of NOPs to insert for a branch hint.  A branch hint
24398     must be at least 8 instructions away from the branch it is
24399     affecting.  GCC inserts up to N NOPs to enforce this, otherwise it
24400     does not generate the branch hint.
24401
24402'-mhint-max-distance=N'
24403     The encoding of the branch hint instruction limits the hint to be
24404     within 256 instructions of the branch it is affecting.  By default,
24405     GCC makes sure it is within 125.
24406
24407'-msafe-hints'
24408     Work around a hardware bug that causes the SPU to stall
24409     indefinitely.  By default, GCC inserts the 'hbrp' instruction to
24410     make sure this stall won't happen.
24411
24412
24413File: gcc.info,  Node: System V Options,  Next: TILE-Gx Options,  Prev: SPU Options,  Up: Submodel Options
24414
244153.18.50 Options for System V
24416----------------------------
24417
24418These additional options are available on System V Release 4 for
24419compatibility with other compilers on those systems:
24420
24421'-G'
24422     Create a shared object.  It is recommended that '-symbolic' or
24423     '-shared' be used instead.
24424
24425'-Qy'
24426     Identify the versions of each tool used by the compiler, in a
24427     '.ident' assembler directive in the output.
24428
24429'-Qn'
24430     Refrain from adding '.ident' directives to the output file (this is
24431     the default).
24432
24433'-YP,DIRS'
24434     Search the directories DIRS, and no others, for libraries specified
24435     with '-l'.
24436
24437'-Ym,DIR'
24438     Look in the directory DIR to find the M4 preprocessor.  The
24439     assembler uses this option.
24440
24441
24442File: gcc.info,  Node: TILE-Gx Options,  Next: TILEPro Options,  Prev: System V Options,  Up: Submodel Options
24443
244443.18.51 TILE-Gx Options
24445-----------------------
24446
24447These '-m' options are supported on the TILE-Gx:
24448
24449'-mcmodel=small'
24450     Generate code for the small model.  The distance for direct calls
24451     is limited to 500M in either direction.  PC-relative addresses are
24452     32 bits.  Absolute addresses support the full address range.
24453
24454'-mcmodel=large'
24455     Generate code for the large model.  There is no limitation on call
24456     distance, pc-relative addresses, or absolute addresses.
24457
24458'-mcpu=NAME'
24459     Selects the type of CPU to be targeted.  Currently the only
24460     supported type is 'tilegx'.
24461
24462'-m32'
24463'-m64'
24464     Generate code for a 32-bit or 64-bit environment.  The 32-bit
24465     environment sets int, long, and pointer to 32 bits.  The 64-bit
24466     environment sets int to 32 bits and long and pointer to 64 bits.
24467
24468'-mbig-endian'
24469'-mlittle-endian'
24470     Generate code in big/little endian mode, respectively.
24471
24472
24473File: gcc.info,  Node: TILEPro Options,  Next: V850 Options,  Prev: TILE-Gx Options,  Up: Submodel Options
24474
244753.18.52 TILEPro Options
24476-----------------------
24477
24478These '-m' options are supported on the TILEPro:
24479
24480'-mcpu=NAME'
24481     Selects the type of CPU to be targeted.  Currently the only
24482     supported type is 'tilepro'.
24483
24484'-m32'
24485     Generate code for a 32-bit environment, which sets int, long, and
24486     pointer to 32 bits.  This is the only supported behavior so the
24487     flag is essentially ignored.
24488
24489
24490File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: TILEPro Options,  Up: Submodel Options
24491
244923.18.53 V850 Options
24493--------------------
24494
24495These '-m' options are defined for V850 implementations:
24496
24497'-mlong-calls'
24498'-mno-long-calls'
24499     Treat all calls as being far away (near).  If calls are assumed to
24500     be far away, the compiler always loads the function's address into
24501     a register, and calls indirect through the pointer.
24502
24503'-mno-ep'
24504'-mep'
24505     Do not optimize (do optimize) basic blocks that use the same index
24506     pointer 4 or more times to copy pointer into the 'ep' register, and
24507     use the shorter 'sld' and 'sst' instructions.  The '-mep' option is
24508     on by default if you optimize.
24509
24510'-mno-prolog-function'
24511'-mprolog-function'
24512     Do not use (do use) external functions to save and restore
24513     registers at the prologue and epilogue of a function.  The external
24514     functions are slower, but use less code space if more than one
24515     function saves the same number of registers.  The
24516     '-mprolog-function' option is on by default if you optimize.
24517
24518'-mspace'
24519     Try to make the code as small as possible.  At present, this just
24520     turns on the '-mep' and '-mprolog-function' options.
24521
24522'-mtda=N'
24523     Put static or global variables whose size is N bytes or less into
24524     the tiny data area that register 'ep' points to.  The tiny data
24525     area can hold up to 256 bytes in total (128 bytes for byte
24526     references).
24527
24528'-msda=N'
24529     Put static or global variables whose size is N bytes or less into
24530     the small data area that register 'gp' points to.  The small data
24531     area can hold up to 64 kilobytes.
24532
24533'-mzda=N'
24534     Put static or global variables whose size is N bytes or less into
24535     the first 32 kilobytes of memory.
24536
24537'-mv850'
24538     Specify that the target processor is the V850.
24539
24540'-mv850e3v5'
24541     Specify that the target processor is the V850E3V5.  The
24542     preprocessor constant '__v850e3v5__' is defined if this option is
24543     used.
24544
24545'-mv850e2v4'
24546     Specify that the target processor is the V850E3V5.  This is an
24547     alias for the '-mv850e3v5' option.
24548
24549'-mv850e2v3'
24550     Specify that the target processor is the V850E2V3.  The
24551     preprocessor constant '__v850e2v3__' is defined if this option is
24552     used.
24553
24554'-mv850e2'
24555     Specify that the target processor is the V850E2.  The preprocessor
24556     constant '__v850e2__' is defined if this option is used.
24557
24558'-mv850e1'
24559     Specify that the target processor is the V850E1.  The preprocessor
24560     constants '__v850e1__' and '__v850e__' are defined if this option
24561     is used.
24562
24563'-mv850es'
24564     Specify that the target processor is the V850ES. This is an alias
24565     for the '-mv850e1' option.
24566
24567'-mv850e'
24568     Specify that the target processor is the V850E.  The preprocessor
24569     constant '__v850e__' is defined if this option is used.
24570
24571     If neither '-mv850' nor '-mv850e' nor '-mv850e1' nor '-mv850e2' nor
24572     '-mv850e2v3' nor '-mv850e3v5' are defined then a default target
24573     processor is chosen and the relevant '__v850*__' preprocessor
24574     constant is defined.
24575
24576     The preprocessor constants '__v850' and '__v851__' are always
24577     defined, regardless of which processor variant is the target.
24578
24579'-mdisable-callt'
24580'-mno-disable-callt'
24581     This option suppresses generation of the 'CALLT' instruction for
24582     the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
24583     v850 architecture.
24584
24585     This option is enabled by default when the RH850 ABI is in use (see
24586     '-mrh850-abi'), and disabled by default when the GCC ABI is in use.
24587     If 'CALLT' instructions are being generated then the C preprocessor
24588     symbol '__V850_CALLT__' is defined.
24589
24590'-mrelax'
24591'-mno-relax'
24592     Pass on (or do not pass on) the '-mrelax' command-line option to
24593     the assembler.
24594
24595'-mlong-jumps'
24596'-mno-long-jumps'
24597     Disable (or re-enable) the generation of PC-relative jump
24598     instructions.
24599
24600'-msoft-float'
24601'-mhard-float'
24602     Disable (or re-enable) the generation of hardware floating point
24603     instructions.  This option is only significant when the target
24604     architecture is 'V850E2V3' or higher.  If hardware floating point
24605     instructions are being generated then the C preprocessor symbol
24606     '__FPU_OK__' is defined, otherwise the symbol '__NO_FPU__' is
24607     defined.
24608
24609'-mloop'
24610     Enables the use of the e3v5 LOOP instruction.  The use of this
24611     instruction is not enabled by default when the e3v5 architecture is
24612     selected because its use is still experimental.
24613
24614'-mrh850-abi'
24615'-mghs'
24616     Enables support for the RH850 version of the V850 ABI. This is the
24617     default.  With this version of the ABI the following rules apply:
24618
24619        * Integer sized structures and unions are returned via a memory
24620          pointer rather than a register.
24621
24622        * Large structures and unions (more than 8 bytes in size) are
24623          passed by value.
24624
24625        * Functions are aligned to 16-bit boundaries.
24626
24627        * The '-m8byte-align' command-line option is supported.
24628
24629        * The '-mdisable-callt' command-line option is enabled by
24630          default.  The '-mno-disable-callt' command-line option is not
24631          supported.
24632
24633     When this version of the ABI is enabled the C preprocessor symbol
24634     '__V850_RH850_ABI__' is defined.
24635
24636'-mgcc-abi'
24637     Enables support for the old GCC version of the V850 ABI. With this
24638     version of the ABI the following rules apply:
24639
24640        * Integer sized structures and unions are returned in register
24641          'r10'.
24642
24643        * Large structures and unions (more than 8 bytes in size) are
24644          passed by reference.
24645
24646        * Functions are aligned to 32-bit boundaries, unless optimizing
24647          for size.
24648
24649        * The '-m8byte-align' command-line option is not supported.
24650
24651        * The '-mdisable-callt' command-line option is supported but not
24652          enabled by default.
24653
24654     When this version of the ABI is enabled the C preprocessor symbol
24655     '__V850_GCC_ABI__' is defined.
24656
24657'-m8byte-align'
24658'-mno-8byte-align'
24659     Enables support for 'double' and 'long long' types to be aligned on
24660     8-byte boundaries.  The default is to restrict the alignment of all
24661     objects to at most 4-bytes.  When '-m8byte-align' is in effect the
24662     C preprocessor symbol '__V850_8BYTE_ALIGN__' is defined.
24663
24664'-mbig-switch'
24665     Generate code suitable for big switch tables.  Use this option only
24666     if the assembler/linker complain about out of range branches within
24667     a switch table.
24668
24669'-mapp-regs'
24670     This option causes r2 and r5 to be used in the code generated by
24671     the compiler.  This setting is the default.
24672
24673'-mno-app-regs'
24674     This option causes r2 and r5 to be treated as fixed registers.
24675
24676
24677File: gcc.info,  Node: VAX Options,  Next: Visium Options,  Prev: V850 Options,  Up: Submodel Options
24678
246793.18.54 VAX Options
24680-------------------
24681
24682These '-m' options are defined for the VAX:
24683
24684'-munix'
24685     Do not output certain jump instructions ('aobleq' and so on) that
24686     the Unix assembler for the VAX cannot handle across long ranges.
24687
24688'-mgnu'
24689     Do output those jump instructions, on the assumption that the GNU
24690     assembler is being used.
24691
24692'-mg'
24693     Output code for G-format floating-point numbers instead of
24694     D-format.
24695
24696
24697File: gcc.info,  Node: Visium Options,  Next: VMS Options,  Prev: VAX Options,  Up: Submodel Options
24698
246993.18.55 Visium Options
24700----------------------
24701
24702'-mdebug'
24703     A program which performs file I/O and is destined to run on an MCM
24704     target should be linked with this option.  It causes the libraries
24705     libc.a and libdebug.a to be linked.  The program should be run on
24706     the target under the control of the GDB remote debugging stub.
24707
24708'-msim'
24709     A program which performs file I/O and is destined to run on the
24710     simulator should be linked with option.  This causes libraries
24711     libc.a and libsim.a to be linked.
24712
24713'-mfpu'
24714'-mhard-float'
24715     Generate code containing floating-point instructions.  This is the
24716     default.
24717
24718'-mno-fpu'
24719'-msoft-float'
24720     Generate code containing library calls for floating-point.
24721
24722     '-msoft-float' changes the calling convention in the output file;
24723     therefore, it is only useful if you compile _all_ of a program with
24724     this option.  In particular, you need to compile 'libgcc.a', the
24725     library that comes with GCC, with '-msoft-float' in order for this
24726     to work.
24727
24728'-mcpu=CPU_TYPE'
24729     Set the instruction set, register set, and instruction scheduling
24730     parameters for machine type CPU_TYPE.  Supported values for
24731     CPU_TYPE are 'mcm', 'gr5' and 'gr6'.
24732
24733     'mcm' is a synonym of 'gr5' present for backward compatibility.
24734
24735     By default (unless configured otherwise), GCC generates code for
24736     the GR5 variant of the Visium architecture.
24737
24738     With '-mcpu=gr6', GCC generates code for the GR6 variant of the
24739     Visium architecture.  The only difference from GR5 code is that the
24740     compiler will generate block move instructions.
24741
24742'-mtune=CPU_TYPE'
24743     Set the instruction scheduling parameters for machine type
24744     CPU_TYPE, but do not set the instruction set or register set that
24745     the option '-mcpu=CPU_TYPE' would.
24746
24747'-msv-mode'
24748     Generate code for the supervisor mode, where there are no
24749     restrictions on the access to general registers.  This is the
24750     default.
24751
24752'-muser-mode'
24753     Generate code for the user mode, where the access to some general
24754     registers is forbidden: on the GR5, registers r24 to r31 cannot be
24755     accessed in this mode; on the GR6, only registers r29 to r31 are
24756     affected.
24757
24758
24759File: gcc.info,  Node: VMS Options,  Next: VxWorks Options,  Prev: Visium Options,  Up: Submodel Options
24760
247613.18.56 VMS Options
24762-------------------
24763
24764These '-m' options are defined for the VMS implementations:
24765
24766'-mvms-return-codes'
24767     Return VMS condition codes from 'main'.  The default is to return
24768     POSIX-style condition (e.g. error) codes.
24769
24770'-mdebug-main=PREFIX'
24771     Flag the first routine whose name starts with PREFIX as the main
24772     routine for the debugger.
24773
24774'-mmalloc64'
24775     Default to 64-bit memory allocation routines.
24776
24777'-mpointer-size=SIZE'
24778     Set the default size of pointers.  Possible options for SIZE are
24779     '32' or 'short' for 32 bit pointers, '64' or 'long' for 64 bit
24780     pointers, and 'no' for supporting only 32 bit pointers.  The later
24781     option disables 'pragma pointer_size'.
24782
24783
24784File: gcc.info,  Node: VxWorks Options,  Next: x86 Options,  Prev: VMS Options,  Up: Submodel Options
24785
247863.18.57 VxWorks Options
24787-----------------------
24788
24789The options in this section are defined for all VxWorks targets.
24790Options specific to the target hardware are listed with the other
24791options for that target.
24792
24793'-mrtp'
24794     GCC can generate code for both VxWorks kernels and real time
24795     processes (RTPs).  This option switches from the former to the
24796     latter.  It also defines the preprocessor macro '__RTP__'.
24797
24798'-non-static'
24799     Link an RTP executable against shared libraries rather than static
24800     libraries.  The options '-static' and '-shared' can also be used
24801     for RTPs (*note Link Options::); '-static' is the default.
24802
24803'-Bstatic'
24804'-Bdynamic'
24805     These options are passed down to the linker.  They are defined for
24806     compatibility with Diab.
24807
24808'-Xbind-lazy'
24809     Enable lazy binding of function calls.  This option is equivalent
24810     to '-Wl,-z,now' and is defined for compatibility with Diab.
24811
24812'-Xbind-now'
24813     Disable lazy binding of function calls.  This option is the default
24814     and is defined for compatibility with Diab.
24815
24816
24817File: gcc.info,  Node: x86 Options,  Next: x86 Windows Options,  Prev: VxWorks Options,  Up: Submodel Options
24818
248193.18.58 x86 Options
24820-------------------
24821
24822These '-m' options are defined for the x86 family of computers.
24823
24824'-march=CPU-TYPE'
24825     Generate instructions for the machine type CPU-TYPE.  In contrast
24826     to '-mtune=CPU-TYPE', which merely tunes the generated code for the
24827     specified CPU-TYPE, '-march=CPU-TYPE' allows GCC to generate code
24828     that may not run at all on processors other than the one indicated.
24829     Specifying '-march=CPU-TYPE' implies '-mtune=CPU-TYPE'.
24830
24831     The choices for CPU-TYPE are:
24832
24833     'native'
24834          This selects the CPU to generate code for at compilation time
24835          by determining the processor type of the compiling machine.
24836          Using '-march=native' enables all instruction subsets
24837          supported by the local machine (hence the result might not run
24838          on different machines).  Using '-mtune=native' produces code
24839          optimized for the local machine under the constraints of the
24840          selected instruction set.
24841
24842     'x86-64'
24843          A generic CPU with 64-bit extensions.
24844
24845     'i386'
24846          Original Intel i386 CPU.
24847
24848     'i486'
24849          Intel i486 CPU.  (No scheduling is implemented for this chip.)
24850
24851     'i586'
24852     'pentium'
24853          Intel Pentium CPU with no MMX support.
24854
24855     'lakemont'
24856          Intel Lakemont MCU, based on Intel Pentium CPU.
24857
24858     'pentium-mmx'
24859          Intel Pentium MMX CPU, based on Pentium core with MMX
24860          instruction set support.
24861
24862     'pentiumpro'
24863          Intel Pentium Pro CPU.
24864
24865     'i686'
24866          When used with '-march', the Pentium Pro instruction set is
24867          used, so the code runs on all i686 family chips.  When used
24868          with '-mtune', it has the same meaning as 'generic'.
24869
24870     'pentium2'
24871          Intel Pentium II CPU, based on Pentium Pro core with MMX
24872          instruction set support.
24873
24874     'pentium3'
24875     'pentium3m'
24876          Intel Pentium III CPU, based on Pentium Pro core with MMX and
24877          SSE instruction set support.
24878
24879     'pentium-m'
24880          Intel Pentium M; low-power version of Intel Pentium III CPU
24881          with MMX, SSE and SSE2 instruction set support.  Used by
24882          Centrino notebooks.
24883
24884     'pentium4'
24885     'pentium4m'
24886          Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
24887          support.
24888
24889     'prescott'
24890          Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2
24891          and SSE3 instruction set support.
24892
24893     'nocona'
24894          Improved version of Intel Pentium 4 CPU with 64-bit
24895          extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
24896
24897     'core2'
24898          Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
24899          and SSSE3 instruction set support.
24900
24901     'nehalem'
24902          Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2,
24903          SSE3, SSSE3, SSE4.1, SSE4.2 and POPCNT instruction set
24904          support.
24905
24906     'westmere'
24907          Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2,
24908          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES and PCLMUL
24909          instruction set support.
24910
24911     'sandybridge'
24912          Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
24913          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL
24914          instruction set support.
24915
24916     'ivybridge'
24917          Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
24918          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL,
24919          FSGSBASE, RDRND and F16C instruction set support.
24920
24921     'haswell'
24922          Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE,
24923          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
24924          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction
24925          set support.
24926
24927     'broadwell'
24928          Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
24929          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
24930          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED ADCX and
24931          PREFETCHW instruction set support.
24932
24933     'skylake'
24934          Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE,
24935          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
24936          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
24937          PREFETCHW, CLFLUSHOPT, XSAVEC and XSAVES instruction set
24938          support.
24939
24940     'bonnell'
24941          Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE,
24942          SSE2, SSE3 and SSSE3 instruction set support.
24943
24944     'silvermont'
24945          Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE,
24946          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
24947          PCLMUL and RDRND instruction set support.
24948
24949     'goldmont'
24950          Intel Goldmont CPU with 64-bit extensions, MOVBE, MMX, SSE,
24951          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
24952          PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT and FSGSBASE
24953          instruction set support.
24954
24955     'goldmont-plus'
24956          Intel Goldmont Plus CPU with 64-bit extensions, MOVBE, MMX,
24957          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES,
24958          PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT,
24959          FSGSBASE, PTWRITE, RDPID, SGX and UMIP instruction set
24960          support.
24961
24962     'tremont'
24963          Intel Tremont CPU with 64-bit extensions, MOVBE, MMX, SSE,
24964          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
24965          PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE,
24966          PTWRITE, RDPID, SGX, UMIP, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B,
24967          CLDEMOTE and WAITPKG instruction set support.
24968
24969     'knl'
24970          Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX,
24971          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2,
24972          AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
24973          ADCX, PREFETCHW, PREFETCHWT1, AVX512F, AVX512PF, AVX512ER and
24974          AVX512CD instruction set support.
24975
24976     'knm'
24977          Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX,
24978          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2,
24979          AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
24980          ADCX, PREFETCHW, PREFETCHWT1, AVX512F, AVX512PF, AVX512ER,
24981          AVX512CD, AVX5124VNNIW, AVX5124FMAPS and AVX512VPOPCNTDQ
24982          instruction set support.
24983
24984     'skylake-avx512'
24985          Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX,
24986          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX,
24987          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
24988          RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
24989          CLWB, AVX512VL, AVX512BW, AVX512DQ and AVX512CD instruction
24990          set support.
24991
24992     'cannonlake'
24993          Intel Cannonlake Server CPU with 64-bit extensions, MOVBE,
24994          MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX,
24995          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
24996          RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
24997          AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
24998          AVX512IFMA, SHA and UMIP instruction set support.
24999
25000     'icelake-client'
25001          Intel Icelake Client CPU with 64-bit extensions, MOVBE, MMX,
25002          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX,
25003          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
25004          RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
25005          AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
25006          AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2,
25007          AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES
25008          instruction set support.
25009
25010     'icelake-server'
25011          Intel Icelake Server CPU with 64-bit extensions, MOVBE, MMX,
25012          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX,
25013          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
25014          RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
25015          AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
25016          AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2,
25017          AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES,
25018          PCONFIG and WBNOINVD instruction set support.
25019
25020     'cascadelake'
25021          Intel Cascadelake CPU with 64-bit extensions, MOVBE, MMX, SSE,
25022          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
25023          AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
25024          ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB,
25025          AVX512VL, AVX512BW, AVX512DQ, AVX512CD and AVX512VNNI
25026          instruction set support.
25027
25028     'tigerlake'
25029          Intel Tigerlake CPU with 64-bit extensions, MOVBE, MMX, SSE,
25030          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
25031          AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
25032          ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
25033          AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
25034          AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2,
25035          AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES,
25036          PCONFIG, WBNOINVD, MOVDIRI, MOVDIR64B and CLWB instruction set
25037          support.
25038
25039     'k6'
25040          AMD K6 CPU with MMX instruction set support.
25041
25042     'k6-2'
25043     'k6-3'
25044          Improved versions of AMD K6 CPU with MMX and 3DNow!
25045          instruction set support.
25046
25047     'athlon'
25048     'athlon-tbird'
25049          AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
25050          prefetch instructions support.
25051
25052     'athlon-4'
25053     'athlon-xp'
25054     'athlon-mp'
25055          Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
25056          full SSE instruction set support.
25057
25058     'k8'
25059     'opteron'
25060     'athlon64'
25061     'athlon-fx'
25062          Processors based on the AMD K8 core with x86-64 instruction
25063          set support, including the AMD Opteron, Athlon 64, and Athlon
25064          64 FX processors.  (This supersets MMX, SSE, SSE2, 3DNow!,
25065          enhanced 3DNow! and 64-bit instruction set extensions.)
25066
25067     'k8-sse3'
25068     'opteron-sse3'
25069     'athlon64-sse3'
25070          Improved versions of AMD K8 cores with SSE3 instruction set
25071          support.
25072
25073     'amdfam10'
25074     'barcelona'
25075          CPUs based on AMD Family 10h cores with x86-64 instruction set
25076          support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
25077          enhanced 3DNow!, ABM and 64-bit instruction set extensions.)
25078
25079     'bdver1'
25080          CPUs based on AMD Family 15h cores with x86-64 instruction set
25081          support.  (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL,
25082          CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
25083          and 64-bit instruction set extensions.)
25084     'bdver2'
25085          AMD Family 15h core based CPUs with x86-64 instruction set
25086          support.  (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP,
25087          LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
25088          SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
25089     'bdver3'
25090          AMD Family 15h core based CPUs with x86-64 instruction set
25091          support.  (This supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE,
25092          AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3,
25093          SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set
25094          extensions.
25095     'bdver4'
25096          AMD Family 15h core based CPUs with x86-64 instruction set
25097          support.  (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4,
25098          FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE, MMX,
25099          SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit
25100          instruction set extensions.
25101
25102     'znver1'
25103          AMD Family 17h core based CPUs with x86-64 instruction set
25104          support.  (This supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX,
25105          AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCL_MUL, CX16,
25106          MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2,
25107          ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64-bit
25108          instruction set extensions.
25109     'znver2'
25110          AMD Family 17h core based CPUs with x86-64 instruction set
25111          support.  (This supersets BMI, BMI2, ,CLWB, F16C, FMA,
25112          FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
25113          PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
25114          SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and
25115          64-bit instruction set extensions.)
25116
25117     'btver1'
25118          CPUs based on AMD Family 14h cores with x86-64 instruction set
25119          support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
25120          CX16, ABM and 64-bit instruction set extensions.)
25121
25122     'btver2'
25123          CPUs based on AMD Family 16h cores with x86-64 instruction set
25124          support.  This includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES,
25125          SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
25126          and 64-bit instruction set extensions.
25127
25128     'winchip-c6'
25129          IDT WinChip C6 CPU, dealt in same way as i486 with additional
25130          MMX instruction set support.
25131
25132     'winchip2'
25133          IDT WinChip 2 CPU, dealt in same way as i486 with additional
25134          MMX and 3DNow! instruction set support.
25135
25136     'c3'
25137          VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
25138          scheduling is implemented for this chip.)
25139
25140     'c3-2'
25141          VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
25142          support.  (No scheduling is implemented for this chip.)
25143
25144     'c7'
25145          VIA C7 (Esther) CPU with MMX, SSE, SSE2 and SSE3 instruction
25146          set support.  (No scheduling is implemented for this chip.)
25147
25148     'samuel-2'
25149          VIA Eden Samuel 2 CPU with MMX and 3DNow! instruction set
25150          support.  (No scheduling is implemented for this chip.)
25151
25152     'nehemiah'
25153          VIA Eden Nehemiah CPU with MMX and SSE instruction set
25154          support.  (No scheduling is implemented for this chip.)
25155
25156     'esther'
25157          VIA Eden Esther CPU with MMX, SSE, SSE2 and SSE3 instruction
25158          set support.  (No scheduling is implemented for this chip.)
25159
25160     'eden-x2'
25161          VIA Eden X2 CPU with x86-64, MMX, SSE, SSE2 and SSE3
25162          instruction set support.  (No scheduling is implemented for
25163          this chip.)
25164
25165     'eden-x4'
25166          VIA Eden X4 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3,
25167          SSE4.1, SSE4.2, AVX and AVX2 instruction set support.  (No
25168          scheduling is implemented for this chip.)
25169
25170     'nano'
25171          Generic VIA Nano CPU with x86-64, MMX, SSE, SSE2, SSE3 and
25172          SSSE3 instruction set support.  (No scheduling is implemented
25173          for this chip.)
25174
25175     'nano-1000'
25176          VIA Nano 1xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
25177          instruction set support.  (No scheduling is implemented for
25178          this chip.)
25179
25180     'nano-2000'
25181          VIA Nano 2xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
25182          instruction set support.  (No scheduling is implemented for
25183          this chip.)
25184
25185     'nano-3000'
25186          VIA Nano 3xxx CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and
25187          SSE4.1 instruction set support.  (No scheduling is implemented
25188          for this chip.)
25189
25190     'nano-x2'
25191          VIA Nano Dual Core CPU with x86-64, MMX, SSE, SSE2, SSE3,
25192          SSSE3 and SSE4.1 instruction set support.  (No scheduling is
25193          implemented for this chip.)
25194
25195     'nano-x4'
25196          VIA Nano Quad Core CPU with x86-64, MMX, SSE, SSE2, SSE3,
25197          SSSE3 and SSE4.1 instruction set support.  (No scheduling is
25198          implemented for this chip.)
25199
25200     'geode'
25201          AMD Geode embedded processor with MMX and 3DNow! instruction
25202          set support.
25203
25204'-mtune=CPU-TYPE'
25205     Tune to CPU-TYPE everything applicable about the generated code,
25206     except for the ABI and the set of available instructions.  While
25207     picking a specific CPU-TYPE schedules things appropriately for that
25208     particular chip, the compiler does not generate any code that
25209     cannot run on the default machine type unless you use a
25210     '-march=CPU-TYPE' option.  For example, if GCC is configured for
25211     i686-pc-linux-gnu then '-mtune=pentium4' generates code that is
25212     tuned for Pentium 4 but still runs on i686 machines.
25213
25214     The choices for CPU-TYPE are the same as for '-march'.  In
25215     addition, '-mtune' supports 2 extra choices for CPU-TYPE:
25216
25217     'generic'
25218          Produce code optimized for the most common IA32/AMD64/EM64T
25219          processors.  If you know the CPU on which your code will run,
25220          then you should use the corresponding '-mtune' or '-march'
25221          option instead of '-mtune=generic'.  But, if you do not know
25222          exactly what CPU users of your application will have, then you
25223          should use this option.
25224
25225          As new processors are deployed in the marketplace, the
25226          behavior of this option will change.  Therefore, if you
25227          upgrade to a newer version of GCC, code generation controlled
25228          by this option will change to reflect the processors that are
25229          most common at the time that version of GCC is released.
25230
25231          There is no '-march=generic' option because '-march' indicates
25232          the instruction set the compiler can use, and there is no
25233          generic instruction set applicable to all processors.  In
25234          contrast, '-mtune' indicates the processor (or, in this case,
25235          collection of processors) for which the code is optimized.
25236
25237     'intel'
25238          Produce code optimized for the most current Intel processors,
25239          which are Haswell and Silvermont for this version of GCC. If
25240          you know the CPU on which your code will run, then you should
25241          use the corresponding '-mtune' or '-march' option instead of
25242          '-mtune=intel'.  But, if you want your application performs
25243          better on both Haswell and Silvermont, then you should use
25244          this option.
25245
25246          As new Intel processors are deployed in the marketplace, the
25247          behavior of this option will change.  Therefore, if you
25248          upgrade to a newer version of GCC, code generation controlled
25249          by this option will change to reflect the most current Intel
25250          processors at the time that version of GCC is released.
25251
25252          There is no '-march=intel' option because '-march' indicates
25253          the instruction set the compiler can use, and there is no
25254          common instruction set applicable to all processors.  In
25255          contrast, '-mtune' indicates the processor (or, in this case,
25256          collection of processors) for which the code is optimized.
25257
25258'-mcpu=CPU-TYPE'
25259     A deprecated synonym for '-mtune'.
25260
25261'-mfpmath=UNIT'
25262     Generate floating-point arithmetic for selected unit UNIT.  The
25263     choices for UNIT are:
25264
25265     '387'
25266          Use the standard 387 floating-point coprocessor present on the
25267          majority of chips and emulated otherwise.  Code compiled with
25268          this option runs almost everywhere.  The temporary results are
25269          computed in 80-bit precision instead of the precision
25270          specified by the type, resulting in slightly different results
25271          compared to most of other chips.  See '-ffloat-store' for more
25272          detailed description.
25273
25274          This is the default choice for non-Darwin x86-32 targets.
25275
25276     'sse'
25277          Use scalar floating-point instructions present in the SSE
25278          instruction set.  This instruction set is supported by Pentium
25279          III and newer chips, and in the AMD line by Athlon-4, Athlon
25280          XP and Athlon MP chips.  The earlier version of the SSE
25281          instruction set supports only single-precision arithmetic,
25282          thus the double and extended-precision arithmetic are still
25283          done using 387.  A later version, present only in Pentium 4
25284          and AMD x86-64 chips, supports double-precision arithmetic
25285          too.
25286
25287          For the x86-32 compiler, you must use '-march=CPU-TYPE',
25288          '-msse' or '-msse2' switches to enable SSE extensions and make
25289          this option effective.  For the x86-64 compiler, these
25290          extensions are enabled by default.
25291
25292          The resulting code should be considerably faster in the
25293          majority of cases and avoid the numerical instability problems
25294          of 387 code, but may break some existing code that expects
25295          temporaries to be 80 bits.
25296
25297          This is the default choice for the x86-64 compiler, Darwin
25298          x86-32 targets, and the default choice for x86-32 targets with
25299          the SSE2 instruction set when '-ffast-math' is enabled.
25300
25301     'sse,387'
25302     'sse+387'
25303     'both'
25304          Attempt to utilize both instruction sets at once.  This
25305          effectively doubles the amount of available registers, and on
25306          chips with separate execution units for 387 and SSE the
25307          execution resources too.  Use this option with care, as it is
25308          still experimental, because the GCC register allocator does
25309          not model separate functional units well, resulting in
25310          unstable performance.
25311
25312'-masm=DIALECT'
25313     Output assembly instructions using selected DIALECT.  Also affects
25314     which dialect is used for basic 'asm' (*note Basic Asm::) and
25315     extended 'asm' (*note Extended Asm::).  Supported choices (in
25316     dialect order) are 'att' or 'intel'.  The default is 'att'.  Darwin
25317     does not support 'intel'.
25318
25319'-mieee-fp'
25320'-mno-ieee-fp'
25321     Control whether or not the compiler uses IEEE floating-point
25322     comparisons.  These correctly handle the case where the result of a
25323     comparison is unordered.
25324
25325'-m80387'
25326'-mhard-float'
25327     Generate output containing 80387 instructions for floating point.
25328
25329'-mno-80387'
25330'-msoft-float'
25331     Generate output containing library calls for floating point.
25332
25333     *Warning:* the requisite libraries are not part of GCC.  Normally
25334     the facilities of the machine's usual C compiler are used, but this
25335     cannot be done directly in cross-compilation.  You must make your
25336     own arrangements to provide suitable library functions for
25337     cross-compilation.
25338
25339     On machines where a function returns floating-point results in the
25340     80387 register stack, some floating-point opcodes may be emitted
25341     even if '-msoft-float' is used.
25342
25343'-mno-fp-ret-in-387'
25344     Do not use the FPU registers for return values of functions.
25345
25346     The usual calling convention has functions return values of types
25347     'float' and 'double' in an FPU register, even if there is no FPU.
25348     The idea is that the operating system should emulate an FPU.
25349
25350     The option '-mno-fp-ret-in-387' causes such values to be returned
25351     in ordinary CPU registers instead.
25352
25353'-mno-fancy-math-387'
25354     Some 387 emulators do not support the 'sin', 'cos' and 'sqrt'
25355     instructions for the 387.  Specify this option to avoid generating
25356     those instructions.  This option is overridden when '-march'
25357     indicates that the target CPU always has an FPU and so the
25358     instruction does not need emulation.  These instructions are not
25359     generated unless you also use the '-funsafe-math-optimizations'
25360     switch.
25361
25362'-malign-double'
25363'-mno-align-double'
25364     Control whether GCC aligns 'double', 'long double', and 'long long'
25365     variables on a two-word boundary or a one-word boundary.  Aligning
25366     'double' variables on a two-word boundary produces code that runs
25367     somewhat faster on a Pentium at the expense of more memory.
25368
25369     On x86-64, '-malign-double' is enabled by default.
25370
25371     *Warning:* if you use the '-malign-double' switch, structures
25372     containing the above types are aligned differently than the
25373     published application binary interface specifications for the
25374     x86-32 and are not binary compatible with structures in code
25375     compiled without that switch.
25376
25377'-m96bit-long-double'
25378'-m128bit-long-double'
25379     These switches control the size of 'long double' type.  The x86-32
25380     application binary interface specifies the size to be 96 bits, so
25381     '-m96bit-long-double' is the default in 32-bit mode.
25382
25383     Modern architectures (Pentium and newer) prefer 'long double' to be
25384     aligned to an 8- or 16-byte boundary.  In arrays or structures
25385     conforming to the ABI, this is not possible.  So specifying
25386     '-m128bit-long-double' aligns 'long double' to a 16-byte boundary
25387     by padding the 'long double' with an additional 32-bit zero.
25388
25389     In the x86-64 compiler, '-m128bit-long-double' is the default
25390     choice as its ABI specifies that 'long double' is aligned on
25391     16-byte boundary.
25392
25393     Notice that neither of these options enable any extra precision
25394     over the x87 standard of 80 bits for a 'long double'.
25395
25396     *Warning:* if you override the default value for your target ABI,
25397     this changes the size of structures and arrays containing 'long
25398     double' variables, as well as modifying the function calling
25399     convention for functions taking 'long double'.  Hence they are not
25400     binary-compatible with code compiled without that switch.
25401
25402'-mlong-double-64'
25403'-mlong-double-80'
25404'-mlong-double-128'
25405     These switches control the size of 'long double' type.  A size of
25406     64 bits makes the 'long double' type equivalent to the 'double'
25407     type.  This is the default for 32-bit Bionic C library.  A size of
25408     128 bits makes the 'long double' type equivalent to the
25409     '__float128' type.  This is the default for 64-bit Bionic C
25410     library.
25411
25412     *Warning:* if you override the default value for your target ABI,
25413     this changes the size of structures and arrays containing 'long
25414     double' variables, as well as modifying the function calling
25415     convention for functions taking 'long double'.  Hence they are not
25416     binary-compatible with code compiled without that switch.
25417
25418'-malign-data=TYPE'
25419     Control how GCC aligns variables.  Supported values for TYPE are
25420     'compat' uses increased alignment value compatible uses GCC 4.8 and
25421     earlier, 'abi' uses alignment value as specified by the psABI, and
25422     'cacheline' uses increased alignment value to match the cache line
25423     size.  'compat' is the default.
25424
25425'-mlarge-data-threshold=THRESHOLD'
25426     When '-mcmodel=medium' is specified, data objects larger than
25427     THRESHOLD are placed in the large data section.  This value must be
25428     the same across all objects linked into the binary, and defaults to
25429     65535.
25430
25431'-mrtd'
25432     Use a different function-calling convention, in which functions
25433     that take a fixed number of arguments return with the 'ret NUM'
25434     instruction, which pops their arguments while returning.  This
25435     saves one instruction in the caller since there is no need to pop
25436     the arguments there.
25437
25438     You can specify that an individual function is called with this
25439     calling sequence with the function attribute 'stdcall'.  You can
25440     also override the '-mrtd' option by using the function attribute
25441     'cdecl'.  *Note Function Attributes::.
25442
25443     *Warning:* this calling convention is incompatible with the one
25444     normally used on Unix, so you cannot use it if you need to call
25445     libraries compiled with the Unix compiler.
25446
25447     Also, you must provide function prototypes for all functions that
25448     take variable numbers of arguments (including 'printf'); otherwise
25449     incorrect code is generated for calls to those functions.
25450
25451     In addition, seriously incorrect code results if you call a
25452     function with too many arguments.  (Normally, extra arguments are
25453     harmlessly ignored.)
25454
25455'-mregparm=NUM'
25456     Control how many registers are used to pass integer arguments.  By
25457     default, no registers are used to pass arguments, and at most 3
25458     registers can be used.  You can control this behavior for a
25459     specific function by using the function attribute 'regparm'.  *Note
25460     Function Attributes::.
25461
25462     *Warning:* if you use this switch, and NUM is nonzero, then you
25463     must build all modules with the same value, including any
25464     libraries.  This includes the system libraries and startup modules.
25465
25466'-msseregparm'
25467     Use SSE register passing conventions for float and double arguments
25468     and return values.  You can control this behavior for a specific
25469     function by using the function attribute 'sseregparm'.  *Note
25470     Function Attributes::.
25471
25472     *Warning:* if you use this switch then you must build all modules
25473     with the same value, including any libraries.  This includes the
25474     system libraries and startup modules.
25475
25476'-mvect8-ret-in-mem'
25477     Return 8-byte vectors in memory instead of MMX registers.  This is
25478     the default on Solaris 8 and 9 and VxWorks to match the ABI of the
25479     Sun Studio compilers until version 12.  Later compiler versions
25480     (starting with Studio 12 Update 1) follow the ABI used by other x86
25481     targets, which is the default on Solaris 10 and later.  _Only_ use
25482     this option if you need to remain compatible with existing code
25483     produced by those previous compiler versions or older versions of
25484     GCC.
25485
25486'-mpc32'
25487'-mpc64'
25488'-mpc80'
25489
25490     Set 80387 floating-point precision to 32, 64 or 80 bits.  When
25491     '-mpc32' is specified, the significands of results of
25492     floating-point operations are rounded to 24 bits (single
25493     precision); '-mpc64' rounds the significands of results of
25494     floating-point operations to 53 bits (double precision) and
25495     '-mpc80' rounds the significands of results of floating-point
25496     operations to 64 bits (extended double precision), which is the
25497     default.  When this option is used, floating-point operations in
25498     higher precisions are not available to the programmer without
25499     setting the FPU control word explicitly.
25500
25501     Setting the rounding of floating-point operations to less than the
25502     default 80 bits can speed some programs by 2% or more.  Note that
25503     some mathematical libraries assume that extended-precision (80-bit)
25504     floating-point operations are enabled by default; routines in such
25505     libraries could suffer significant loss of accuracy, typically
25506     through so-called "catastrophic cancellation", when this option is
25507     used to set the precision to less than extended precision.
25508
25509'-mstackrealign'
25510     Realign the stack at entry.  On the x86, the '-mstackrealign'
25511     option generates an alternate prologue and epilogue that realigns
25512     the run-time stack if necessary.  This supports mixing legacy codes
25513     that keep 4-byte stack alignment with modern codes that keep
25514     16-byte stack alignment for SSE compatibility.  See also the
25515     attribute 'force_align_arg_pointer', applicable to individual
25516     functions.
25517
25518'-mpreferred-stack-boundary=NUM'
25519     Attempt to keep the stack boundary aligned to a 2 raised to NUM
25520     byte boundary.  If '-mpreferred-stack-boundary' is not specified,
25521     the default is 4 (16 bytes or 128 bits).
25522
25523     *Warning:* When generating code for the x86-64 architecture with
25524     SSE extensions disabled, '-mpreferred-stack-boundary=3' can be used
25525     to keep the stack boundary aligned to 8 byte boundary.  Since
25526     x86-64 ABI require 16 byte stack alignment, this is ABI
25527     incompatible and intended to be used in controlled environment
25528     where stack space is important limitation.  This option leads to
25529     wrong code when functions compiled with 16 byte stack alignment
25530     (such as functions from a standard library) are called with
25531     misaligned stack.  In this case, SSE instructions may lead to
25532     misaligned memory access traps.  In addition, variable arguments
25533     are handled incorrectly for 16 byte aligned objects (including x87
25534     long double and __int128), leading to wrong results.  You must
25535     build all modules with '-mpreferred-stack-boundary=3', including
25536     any libraries.  This includes the system libraries and startup
25537     modules.
25538
25539'-mincoming-stack-boundary=NUM'
25540     Assume the incoming stack is aligned to a 2 raised to NUM byte
25541     boundary.  If '-mincoming-stack-boundary' is not specified, the one
25542     specified by '-mpreferred-stack-boundary' is used.
25543
25544     On Pentium and Pentium Pro, 'double' and 'long double' values
25545     should be aligned to an 8-byte boundary (see '-malign-double') or
25546     suffer significant run time performance penalties.  On Pentium III,
25547     the Streaming SIMD Extension (SSE) data type '__m128' may not work
25548     properly if it is not 16-byte aligned.
25549
25550     To ensure proper alignment of this values on the stack, the stack
25551     boundary must be as aligned as that required by any value stored on
25552     the stack.  Further, every function must be generated such that it
25553     keeps the stack aligned.  Thus calling a function compiled with a
25554     higher preferred stack boundary from a function compiled with a
25555     lower preferred stack boundary most likely misaligns the stack.  It
25556     is recommended that libraries that use callbacks always use the
25557     default setting.
25558
25559     This extra alignment does consume extra stack space, and generally
25560     increases code size.  Code that is sensitive to stack space usage,
25561     such as embedded systems and operating system kernels, may want to
25562     reduce the preferred alignment to '-mpreferred-stack-boundary=2'.
25563
25564'-mmmx'
25565'-msse'
25566'-msse2'
25567'-msse3'
25568'-mssse3'
25569'-msse4'
25570'-msse4a'
25571'-msse4.1'
25572'-msse4.2'
25573'-mavx'
25574'-mavx2'
25575'-mavx512f'
25576'-mavx512pf'
25577'-mavx512er'
25578'-mavx512cd'
25579'-mavx512vl'
25580'-mavx512bw'
25581'-mavx512dq'
25582'-mavx512ifma'
25583'-mavx512vbmi'
25584'-msha'
25585'-maes'
25586'-mpclmul'
25587'-mclflushopt'
25588'-mclwb'
25589'-mfsgsbase'
25590'-mptwrite'
25591'-mrdrnd'
25592'-mf16c'
25593'-mfma'
25594'-mpconfig'
25595'-mwbnoinvd'
25596'-mfma4'
25597'-mprfchw'
25598'-mrdpid'
25599'-mprefetchwt1'
25600'-mrdseed'
25601'-msgx'
25602'-mxop'
25603'-mlwp'
25604'-m3dnow'
25605'-m3dnowa'
25606'-mpopcnt'
25607'-mabm'
25608'-madx'
25609'-mbmi'
25610'-mbmi2'
25611'-mlzcnt'
25612'-mfxsr'
25613'-mxsave'
25614'-mxsaveopt'
25615'-mxsavec'
25616'-mxsaves'
25617'-mrtm'
25618'-mhle'
25619'-mtbm'
25620'-mmwaitx'
25621'-mclzero'
25622'-mpku'
25623'-mavx512vbmi2'
25624'-mgfni'
25625'-mvaes'
25626'-mwaitpkg'
25627'-mvpclmulqdq'
25628'-mavx512bitalg'
25629'-mmovdiri'
25630'-mmovdir64b'
25631'-mavx512vpopcntdq'
25632'-mavx5124fmaps'
25633'-mavx512vnni'
25634'-mavx5124vnniw'
25635'-mcldemote'
25636     These switches enable the use of instructions in the MMX, SSE,
25637     SSE2, SSE3, SSSE3, SSE4, SSE4A, SSE4.1, SSE4.2, AVX, AVX2, AVX512F,
25638     AVX512PF, AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ,
25639     AVX512IFMA, AVX512VBMI, SHA, AES, PCLMUL, CLFLUSHOPT, CLWB,
25640     FSGSBASE, PTWRITE, RDRND, F16C, FMA, PCONFIG, WBNOINVD, FMA4,
25641     PREFETCHW, RDPID, PREFETCHWT1, RDSEED, SGX, XOP, LWP, 3DNow!,
25642     enhanced 3DNow!, POPCNT, ABM, ADX, BMI, BMI2, LZCNT, FXSR, XSAVE,
25643     XSAVEOPT, XSAVEC, XSAVES, RTM, HLE, TBM, MWAITX, CLZERO, PKU,
25644     AVX512VBMI2, GFNI, VAES, WAITPKG, VPCLMULQDQ, AVX512BITALG,
25645     MOVDIRI, MOVDIR64B, AVX512VPOPCNTDQ, AVX5124FMAPS, AVX512VNNI,
25646     AVX5124VNNIW, or CLDEMOTE extended instruction sets.  Each has a
25647     corresponding '-mno-' option to disable use of these instructions.
25648
25649     These extensions are also available as built-in functions: see
25650     *note x86 Built-in Functions::, for details of the functions
25651     enabled and disabled by these switches.
25652
25653     To generate SSE/SSE2 instructions automatically from floating-point
25654     code (as opposed to 387 instructions), see '-mfpmath=sse'.
25655
25656     GCC depresses SSEx instructions when '-mavx' is used.  Instead, it
25657     generates new AVX instructions or AVX equivalence for all SSEx
25658     instructions when needed.
25659
25660     These options enable GCC to use these extended instructions in
25661     generated code, even without '-mfpmath=sse'.  Applications that
25662     perform run-time CPU detection must compile separate files for each
25663     supported architecture, using the appropriate flags.  In
25664     particular, the file containing the CPU detection code should be
25665     compiled without these options.
25666
25667'-mdump-tune-features'
25668     This option instructs GCC to dump the names of the x86 performance
25669     tuning features and default settings.  The names can be used in
25670     '-mtune-ctrl=FEATURE-LIST'.
25671
25672'-mtune-ctrl=FEATURE-LIST'
25673     This option is used to do fine grain control of x86 code generation
25674     features.  FEATURE-LIST is a comma separated list of FEATURE names.
25675     See also '-mdump-tune-features'.  When specified, the FEATURE is
25676     turned on if it is not preceded with '^', otherwise, it is turned
25677     off.  '-mtune-ctrl=FEATURE-LIST' is intended to be used by GCC
25678     developers.  Using it may lead to code paths not covered by testing
25679     and can potentially result in compiler ICEs or runtime errors.
25680
25681'-mno-default'
25682     This option instructs GCC to turn off all tunable features.  See
25683     also '-mtune-ctrl=FEATURE-LIST' and '-mdump-tune-features'.
25684
25685'-mcld'
25686     This option instructs GCC to emit a 'cld' instruction in the
25687     prologue of functions that use string instructions.  String
25688     instructions depend on the DF flag to select between autoincrement
25689     or autodecrement mode.  While the ABI specifies the DF flag to be
25690     cleared on function entry, some operating systems violate this
25691     specification by not clearing the DF flag in their exception
25692     dispatchers.  The exception handler can be invoked with the DF flag
25693     set, which leads to wrong direction mode when string instructions
25694     are used.  This option can be enabled by default on 32-bit x86
25695     targets by configuring GCC with the '--enable-cld' configure
25696     option.  Generation of 'cld' instructions can be suppressed with
25697     the '-mno-cld' compiler option in this case.
25698
25699'-mvzeroupper'
25700     This option instructs GCC to emit a 'vzeroupper' instruction before
25701     a transfer of control flow out of the function to minimize the AVX
25702     to SSE transition penalty as well as remove unnecessary 'zeroupper'
25703     intrinsics.
25704
25705'-mprefer-avx128'
25706     This option instructs GCC to use 128-bit AVX instructions instead
25707     of 256-bit AVX instructions in the auto-vectorizer.
25708
25709'-mprefer-vector-width=OPT'
25710     This option instructs GCC to use OPT-bit vector width in
25711     instructions instead of default on the selected platform.
25712
25713     'none'
25714          No extra limitations applied to GCC other than defined by the
25715          selected platform.
25716
25717     '128'
25718          Prefer 128-bit vector width for instructions.
25719
25720     '256'
25721          Prefer 256-bit vector width for instructions.
25722
25723     '512'
25724          Prefer 512-bit vector width for instructions.
25725
25726'-mcx16'
25727     This option enables GCC to generate 'CMPXCHG16B' instructions in
25728     64-bit code to implement compare-and-exchange operations on 16-byte
25729     aligned 128-bit objects.  This is useful for atomic updates of data
25730     structures exceeding one machine word in size.  The compiler uses
25731     this instruction to implement *note __sync Builtins::.  However,
25732     for *note __atomic Builtins:: operating on 128-bit integers, a
25733     library call is always used.
25734
25735'-msahf'
25736     This option enables generation of 'SAHF' instructions in 64-bit
25737     code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
25738     the introduction of Pentium 4 G1 step in December 2005, lacked the
25739     'LAHF' and 'SAHF' instructions which are supported by AMD64.  These
25740     are load and store instructions, respectively, for certain status
25741     flags.  In 64-bit mode, the 'SAHF' instruction is used to optimize
25742     'fmod', 'drem', and 'remainder' built-in functions; see *note Other
25743     Builtins:: for details.
25744
25745'-mmovbe'
25746     This option enables use of the 'movbe' instruction to implement
25747     '__builtin_bswap32' and '__builtin_bswap64'.
25748
25749'-mshstk'
25750     The '-mshstk' option enables shadow stack built-in functions from
25751     x86 Control-flow Enforcement Technology (CET).
25752
25753'-mcrc32'
25754     This option enables built-in functions '__builtin_ia32_crc32qi',
25755     '__builtin_ia32_crc32hi', '__builtin_ia32_crc32si' and
25756     '__builtin_ia32_crc32di' to generate the 'crc32' machine
25757     instruction.
25758
25759'-mrecip'
25760     This option enables use of 'RCPSS' and 'RSQRTSS' instructions (and
25761     their vectorized variants 'RCPPS' and 'RSQRTPS') with an additional
25762     Newton-Raphson step to increase precision instead of 'DIVSS' and
25763     'SQRTSS' (and their vectorized variants) for single-precision
25764     floating-point arguments.  These instructions are generated only
25765     when '-funsafe-math-optimizations' is enabled together with
25766     '-ffinite-math-only' and '-fno-trapping-math'.  Note that while the
25767     throughput of the sequence is higher than the throughput of the
25768     non-reciprocal instruction, the precision of the sequence can be
25769     decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
25770     0.99999994).
25771
25772     Note that GCC implements '1.0f/sqrtf(X)' in terms of 'RSQRTSS' (or
25773     'RSQRTPS') already with '-ffast-math' (or the above option
25774     combination), and doesn't need '-mrecip'.
25775
25776     Also note that GCC emits the above sequence with additional
25777     Newton-Raphson step for vectorized single-float division and
25778     vectorized 'sqrtf(X)' already with '-ffast-math' (or the above
25779     option combination), and doesn't need '-mrecip'.
25780
25781'-mrecip=OPT'
25782     This option controls which reciprocal estimate instructions may be
25783     used.  OPT is a comma-separated list of options, which may be
25784     preceded by a '!' to invert the option:
25785
25786     'all'
25787          Enable all estimate instructions.
25788
25789     'default'
25790          Enable the default instructions, equivalent to '-mrecip'.
25791
25792     'none'
25793          Disable all estimate instructions, equivalent to '-mno-recip'.
25794
25795     'div'
25796          Enable the approximation for scalar division.
25797
25798     'vec-div'
25799          Enable the approximation for vectorized division.
25800
25801     'sqrt'
25802          Enable the approximation for scalar square root.
25803
25804     'vec-sqrt'
25805          Enable the approximation for vectorized square root.
25806
25807     So, for example, '-mrecip=all,!sqrt' enables all of the reciprocal
25808     approximations, except for square root.
25809
25810'-mveclibabi=TYPE'
25811     Specifies the ABI type to use for vectorizing intrinsics using an
25812     external library.  Supported values for TYPE are 'svml' for the
25813     Intel short vector math library and 'acml' for the AMD math core
25814     library.  To use this option, both '-ftree-vectorize' and
25815     '-funsafe-math-optimizations' have to be enabled, and an SVML or
25816     ACML ABI-compatible library must be specified at link time.
25817
25818     GCC currently emits calls to 'vmldExp2', 'vmldLn2', 'vmldLog102',
25819     'vmldPow2', 'vmldTanh2', 'vmldTan2', 'vmldAtan2', 'vmldAtanh2',
25820     'vmldCbrt2', 'vmldSinh2', 'vmldSin2', 'vmldAsinh2', 'vmldAsin2',
25821     'vmldCosh2', 'vmldCos2', 'vmldAcosh2', 'vmldAcos2', 'vmlsExp4',
25822     'vmlsLn4', 'vmlsLog104', 'vmlsPow4', 'vmlsTanh4', 'vmlsTan4',
25823     'vmlsAtan4', 'vmlsAtanh4', 'vmlsCbrt4', 'vmlsSinh4', 'vmlsSin4',
25824     'vmlsAsinh4', 'vmlsAsin4', 'vmlsCosh4', 'vmlsCos4', 'vmlsAcosh4'
25825     and 'vmlsAcos4' for corresponding function type when
25826     '-mveclibabi=svml' is used, and '__vrd2_sin', '__vrd2_cos',
25827     '__vrd2_exp', '__vrd2_log', '__vrd2_log2', '__vrd2_log10',
25828     '__vrs4_sinf', '__vrs4_cosf', '__vrs4_expf', '__vrs4_logf',
25829     '__vrs4_log2f', '__vrs4_log10f' and '__vrs4_powf' for the
25830     corresponding function type when '-mveclibabi=acml' is used.
25831
25832'-mabi=NAME'
25833     Generate code for the specified calling convention.  Permissible
25834     values are 'sysv' for the ABI used on GNU/Linux and other systems,
25835     and 'ms' for the Microsoft ABI. The default is to use the Microsoft
25836     ABI when targeting Microsoft Windows and the SysV ABI on all other
25837     systems.  You can control this behavior for specific functions by
25838     using the function attributes 'ms_abi' and 'sysv_abi'.  *Note
25839     Function Attributes::.
25840
25841'-mforce-indirect-call'
25842     Force all calls to functions to be indirect.  This is useful when
25843     using Intel Processor Trace where it generates more precise timing
25844     information for function calls.
25845
25846'-mmanual-endbr'
25847     Insert ENDBR instruction at function entry only via the 'cf_check'
25848     function attribute.  This is useful when used with the option
25849     '-fcf-protection=branch' to control ENDBR insertion at the function
25850     entry.
25851
25852'-mcall-ms2sysv-xlogues'
25853     Due to differences in 64-bit ABIs, any Microsoft ABI function that
25854     calls a System V ABI function must consider RSI, RDI and XMM6-15 as
25855     clobbered.  By default, the code for saving and restoring these
25856     registers is emitted inline, resulting in fairly lengthy prologues
25857     and epilogues.  Using '-mcall-ms2sysv-xlogues' emits prologues and
25858     epilogues that use stubs in the static portion of libgcc to perform
25859     these saves and restores, thus reducing function size at the cost
25860     of a few extra instructions.
25861
25862'-mtls-dialect=TYPE'
25863     Generate code to access thread-local storage using the 'gnu' or
25864     'gnu2' conventions.  'gnu' is the conservative default; 'gnu2' is
25865     more efficient, but it may add compile- and run-time requirements
25866     that cannot be satisfied on all systems.
25867
25868'-mpush-args'
25869'-mno-push-args'
25870     Use PUSH operations to store outgoing parameters.  This method is
25871     shorter and usually equally fast as method using SUB/MOV operations
25872     and is enabled by default.  In some cases disabling it may improve
25873     performance because of improved scheduling and reduced
25874     dependencies.
25875
25876'-maccumulate-outgoing-args'
25877     If enabled, the maximum amount of space required for outgoing
25878     arguments is computed in the function prologue.  This is faster on
25879     most modern CPUs because of reduced dependencies, improved
25880     scheduling and reduced stack usage when the preferred stack
25881     boundary is not equal to 2.  The drawback is a notable increase in
25882     code size.  This switch implies '-mno-push-args'.
25883
25884'-mthreads'
25885     Support thread-safe exception handling on MinGW. Programs that rely
25886     on thread-safe exception handling must compile and link all code
25887     with the '-mthreads' option.  When compiling, '-mthreads' defines
25888     '-D_MT'; when linking, it links in a special thread helper library
25889     '-lmingwthrd' which cleans up per-thread exception-handling data.
25890
25891'-mms-bitfields'
25892'-mno-ms-bitfields'
25893
25894     Enable/disable bit-field layout compatible with the native
25895     Microsoft Windows compiler.
25896
25897     If 'packed' is used on a structure, or if bit-fields are used, it
25898     may be that the Microsoft ABI lays out the structure differently
25899     than the way GCC normally does.  Particularly when moving packed
25900     data between functions compiled with GCC and the native Microsoft
25901     compiler (either via function call or as data in a file), it may be
25902     necessary to access either format.
25903
25904     This option is enabled by default for Microsoft Windows targets.
25905     This behavior can also be controlled locally by use of variable or
25906     type attributes.  For more information, see *note x86 Variable
25907     Attributes:: and *note x86 Type Attributes::.
25908
25909     The Microsoft structure layout algorithm is fairly simple with the
25910     exception of the bit-field packing.  The padding and alignment of
25911     members of structures and whether a bit-field can straddle a
25912     storage-unit boundary are determine by these rules:
25913
25914       1. Structure members are stored sequentially in the order in
25915          which they are declared: the first member has the lowest
25916          memory address and the last member the highest.
25917
25918       2. Every data object has an alignment requirement.  The alignment
25919          requirement for all data except structures, unions, and arrays
25920          is either the size of the object or the current packing size
25921          (specified with either the 'aligned' attribute or the 'pack'
25922          pragma), whichever is less.  For structures, unions, and
25923          arrays, the alignment requirement is the largest alignment
25924          requirement of its members.  Every object is allocated an
25925          offset so that:
25926
25927               offset % alignment_requirement == 0
25928
25929       3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte
25930          allocation unit if the integral types are the same size and if
25931          the next bit-field fits into the current allocation unit
25932          without crossing the boundary imposed by the common alignment
25933          requirements of the bit-fields.
25934
25935     MSVC interprets zero-length bit-fields in the following ways:
25936
25937       1. If a zero-length bit-field is inserted between two bit-fields
25938          that are normally coalesced, the bit-fields are not coalesced.
25939
25940          For example:
25941
25942               struct
25943                {
25944                  unsigned long bf_1 : 12;
25945                  unsigned long : 0;
25946                  unsigned long bf_2 : 12;
25947                } t1;
25948
25949          The size of 't1' is 8 bytes with the zero-length bit-field.
25950          If the zero-length bit-field were removed, 't1''s size would
25951          be 4 bytes.
25952
25953       2. If a zero-length bit-field is inserted after a bit-field,
25954          'foo', and the alignment of the zero-length bit-field is
25955          greater than the member that follows it, 'bar', 'bar' is
25956          aligned as the type of the zero-length bit-field.
25957
25958          For example:
25959
25960               struct
25961                {
25962                  char foo : 4;
25963                  short : 0;
25964                  char bar;
25965                } t2;
25966
25967               struct
25968                {
25969                  char foo : 4;
25970                  short : 0;
25971                  double bar;
25972                } t3;
25973
25974          For 't2', 'bar' is placed at offset 2, rather than offset 1.
25975          Accordingly, the size of 't2' is 4.  For 't3', the zero-length
25976          bit-field does not affect the alignment of 'bar' or, as a
25977          result, the size of the structure.
25978
25979          Taking this into account, it is important to note the
25980          following:
25981
25982            1. If a zero-length bit-field follows a normal bit-field,
25983               the type of the zero-length bit-field may affect the
25984               alignment of the structure as whole.  For example, 't2'
25985               has a size of 4 bytes, since the zero-length bit-field
25986               follows a normal bit-field, and is of type short.
25987
25988            2. Even if a zero-length bit-field is not followed by a
25989               normal bit-field, it may still affect the alignment of
25990               the structure:
25991
25992                    struct
25993                     {
25994                       char foo : 6;
25995                       long : 0;
25996                     } t4;
25997
25998               Here, 't4' takes up 4 bytes.
25999
26000       3. Zero-length bit-fields following non-bit-field members are
26001          ignored:
26002
26003               struct
26004                {
26005                  char foo;
26006                  long : 0;
26007                  char bar;
26008                } t5;
26009
26010          Here, 't5' takes up 2 bytes.
26011
26012'-mno-align-stringops'
26013     Do not align the destination of inlined string operations.  This
26014     switch reduces code size and improves performance in case the
26015     destination is already aligned, but GCC doesn't know about it.
26016
26017'-minline-all-stringops'
26018     By default GCC inlines string operations only when the destination
26019     is known to be aligned to least a 4-byte boundary.  This enables
26020     more inlining and increases code size, but may improve performance
26021     of code that depends on fast 'memcpy', 'strlen', and 'memset' for
26022     short lengths.
26023
26024'-minline-stringops-dynamically'
26025     For string operations of unknown size, use run-time checks with
26026     inline code for small blocks and a library call for large blocks.
26027
26028'-mstringop-strategy=ALG'
26029     Override the internal decision heuristic for the particular
26030     algorithm to use for inlining string operations.  The allowed
26031     values for ALG are:
26032
26033     'rep_byte'
26034     'rep_4byte'
26035     'rep_8byte'
26036          Expand using i386 'rep' prefix of the specified size.
26037
26038     'byte_loop'
26039     'loop'
26040     'unrolled_loop'
26041          Expand into an inline loop.
26042
26043     'libcall'
26044          Always use a library call.
26045
26046'-mmemcpy-strategy=STRATEGY'
26047     Override the internal decision heuristic to decide if
26048     '__builtin_memcpy' should be inlined and what inline algorithm to
26049     use when the expected size of the copy operation is known.
26050     STRATEGY is a comma-separated list of ALG:MAX_SIZE:DEST_ALIGN
26051     triplets.  ALG is specified in '-mstringop-strategy', MAX_SIZE
26052     specifies the max byte size with which inline algorithm ALG is
26053     allowed.  For the last triplet, the MAX_SIZE must be '-1'.  The
26054     MAX_SIZE of the triplets in the list must be specified in
26055     increasing order.  The minimal byte size for ALG is '0' for the
26056     first triplet and 'MAX_SIZE + 1' of the preceding range.
26057
26058'-mmemset-strategy=STRATEGY'
26059     The option is similar to '-mmemcpy-strategy=' except that it is to
26060     control '__builtin_memset' expansion.
26061
26062'-momit-leaf-frame-pointer'
26063     Don't keep the frame pointer in a register for leaf functions.
26064     This avoids the instructions to save, set up, and restore frame
26065     pointers and makes an extra register available in leaf functions.
26066     The option '-fomit-leaf-frame-pointer' removes the frame pointer
26067     for leaf functions, which might make debugging harder.
26068
26069'-mtls-direct-seg-refs'
26070'-mno-tls-direct-seg-refs'
26071     Controls whether TLS variables may be accessed with offsets from
26072     the TLS segment register ('%gs' for 32-bit, '%fs' for 64-bit), or
26073     whether the thread base pointer must be added.  Whether or not this
26074     is valid depends on the operating system, and whether it maps the
26075     segment to cover the entire TLS area.
26076
26077     For systems that use the GNU C Library, the default is on.
26078
26079'-msse2avx'
26080'-mno-sse2avx'
26081     Specify that the assembler should encode SSE instructions with VEX
26082     prefix.  The option '-mavx' turns this on by default.
26083
26084'-mfentry'
26085'-mno-fentry'
26086     If profiling is active ('-pg'), put the profiling counter call
26087     before the prologue.  Note: On x86 architectures the attribute
26088     'ms_hook_prologue' isn't possible at the moment for '-mfentry' and
26089     '-pg'.
26090
26091'-mrecord-mcount'
26092'-mno-record-mcount'
26093     If profiling is active ('-pg'), generate a __mcount_loc section
26094     that contains pointers to each profiling call.  This is useful for
26095     automatically patching and out calls.
26096
26097'-mnop-mcount'
26098'-mno-nop-mcount'
26099     If profiling is active ('-pg'), generate the calls to the profiling
26100     functions as NOPs.  This is useful when they should be patched in
26101     later dynamically.  This is likely only useful together with
26102     '-mrecord-mcount'.
26103
26104'-minstrument-return=TYPE'
26105     Instrument function exit in -pg -mfentry instrumented functions
26106     with call to specified function.  This only instruments true
26107     returns ending with ret, but not sibling calls ending with jump.
26108     Valid types are NONE to not instrument, CALL to generate a call to
26109     __return__, or NOP5 to generate a 5 byte nop.
26110
26111'-mrecord-return'
26112'-mno-record-return'
26113     Generate a __return_loc section pointing to all return
26114     instrumentation code.
26115
26116'-mfentry-name=NAME'
26117     Set name of __fentry__ symbol called at function entry for -pg
26118     -mfentry functions.
26119
26120'-mfentry-section=NAME'
26121     Set name of section to record -mrecord-mcount calls (default
26122     __mcount_loc).
26123
26124'-mskip-rax-setup'
26125'-mno-skip-rax-setup'
26126     When generating code for the x86-64 architecture with SSE
26127     extensions disabled, '-mskip-rax-setup' can be used to skip setting
26128     up RAX register when there are no variable arguments passed in
26129     vector registers.
26130
26131     *Warning:* Since RAX register is used to avoid unnecessarily saving
26132     vector registers on stack when passing variable arguments, the
26133     impacts of this option are callees may waste some stack space,
26134     misbehave or jump to a random location.  GCC 4.4 or newer don't
26135     have those issues, regardless the RAX register value.
26136
26137'-m8bit-idiv'
26138'-mno-8bit-idiv'
26139     On some processors, like Intel Atom, 8-bit unsigned integer divide
26140     is much faster than 32-bit/64-bit integer divide.  This option
26141     generates a run-time check.  If both dividend and divisor are
26142     within range of 0 to 255, 8-bit unsigned integer divide is used
26143     instead of 32-bit/64-bit integer divide.
26144
26145'-mavx256-split-unaligned-load'
26146'-mavx256-split-unaligned-store'
26147     Split 32-byte AVX unaligned load and store.
26148
26149'-mstack-protector-guard=GUARD'
26150'-mstack-protector-guard-reg=REG'
26151'-mstack-protector-guard-offset=OFFSET'
26152     Generate stack protection code using canary at GUARD.  Supported
26153     locations are 'global' for global canary or 'tls' for per-thread
26154     canary in the TLS block (the default).  This option has effect only
26155     when '-fstack-protector' or '-fstack-protector-all' is specified.
26156
26157     With the latter choice the options
26158     '-mstack-protector-guard-reg=REG' and
26159     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
26160     segment register ('%fs' or '%gs') to use as base register for
26161     reading the canary, and from what offset from that base register.
26162     The default for those is as specified in the relevant ABI.
26163
26164'-mgeneral-regs-only'
26165     Generate code that uses only the general-purpose registers.  This
26166     prevents the compiler from using floating-point, vector, mask and
26167     bound registers.
26168
26169'-mindirect-branch=CHOICE'
26170     Convert indirect call and jump with CHOICE.  The default is 'keep',
26171     which keeps indirect call and jump unmodified.  'thunk' converts
26172     indirect call and jump to call and return thunk.  'thunk-inline'
26173     converts indirect call and jump to inlined call and return thunk.
26174     'thunk-extern' converts indirect call and jump to external call and
26175     return thunk provided in a separate object file.  You can control
26176     this behavior for a specific function by using the function
26177     attribute 'indirect_branch'.  *Note Function Attributes::.
26178
26179     Note that '-mcmodel=large' is incompatible with
26180     '-mindirect-branch=thunk' and '-mindirect-branch=thunk-extern'
26181     since the thunk function may not be reachable in the large code
26182     model.
26183
26184     Note that '-mindirect-branch=thunk-extern' is compatible with
26185     '-fcf-protection=branch' since the external thunk can be made to
26186     enable control-flow check.
26187
26188'-mfunction-return=CHOICE'
26189     Convert function return with CHOICE.  The default is 'keep', which
26190     keeps function return unmodified.  'thunk' converts function return
26191     to call and return thunk.  'thunk-inline' converts function return
26192     to inlined call and return thunk.  'thunk-extern' converts function
26193     return to external call and return thunk provided in a separate
26194     object file.  You can control this behavior for a specific function
26195     by using the function attribute 'function_return'.  *Note Function
26196     Attributes::.
26197
26198     Note that '-mindirect-return=thunk-extern' is compatible with
26199     '-fcf-protection=branch' since the external thunk can be made to
26200     enable control-flow check.
26201
26202     Note that '-mcmodel=large' is incompatible with
26203     '-mfunction-return=thunk' and '-mfunction-return=thunk-extern'
26204     since the thunk function may not be reachable in the large code
26205     model.
26206
26207'-mindirect-branch-register'
26208     Force indirect call and jump via register.
26209
26210 These '-m' switches are supported in addition to the above on x86-64
26211processors in 64-bit environments.
26212
26213'-m32'
26214'-m64'
26215'-mx32'
26216'-m16'
26217'-miamcu'
26218     Generate code for a 16-bit, 32-bit or 64-bit environment.  The
26219     '-m32' option sets 'int', 'long', and pointer types to 32 bits, and
26220     generates code that runs on any i386 system.
26221
26222     The '-m64' option sets 'int' to 32 bits and 'long' and pointer
26223     types to 64 bits, and generates code for the x86-64 architecture.
26224     For Darwin only the '-m64' option also turns off the '-fno-pic' and
26225     '-mdynamic-no-pic' options.
26226
26227     The '-mx32' option sets 'int', 'long', and pointer types to 32
26228     bits, and generates code for the x86-64 architecture.
26229
26230     The '-m16' option is the same as '-m32', except for that it outputs
26231     the '.code16gcc' assembly directive at the beginning of the
26232     assembly output so that the binary can run in 16-bit mode.
26233
26234     The '-miamcu' option generates code which conforms to Intel MCU
26235     psABI. It requires the '-m32' option to be turned on.
26236
26237'-mno-red-zone'
26238     Do not use a so-called "red zone" for x86-64 code.  The red zone is
26239     mandated by the x86-64 ABI; it is a 128-byte area beyond the
26240     location of the stack pointer that is not modified by signal or
26241     interrupt handlers and therefore can be used for temporary data
26242     without adjusting the stack pointer.  The flag '-mno-red-zone'
26243     disables this red zone.
26244
26245'-mcmodel=small'
26246     Generate code for the small code model: the program and its symbols
26247     must be linked in the lower 2 GB of the address space.  Pointers
26248     are 64 bits.  Programs can be statically or dynamically linked.
26249     This is the default code model.
26250
26251'-mcmodel=kernel'
26252     Generate code for the kernel code model.  The kernel runs in the
26253     negative 2 GB of the address space.  This model has to be used for
26254     Linux kernel code.
26255
26256'-mcmodel=medium'
26257     Generate code for the medium model: the program is linked in the
26258     lower 2 GB of the address space.  Small symbols are also placed
26259     there.  Symbols with sizes larger than '-mlarge-data-threshold' are
26260     put into large data or BSS sections and can be located above 2GB.
26261     Programs can be statically or dynamically linked.
26262
26263'-mcmodel=large'
26264     Generate code for the large model.  This model makes no assumptions
26265     about addresses and sizes of sections.
26266
26267'-maddress-mode=long'
26268     Generate code for long address mode.  This is only supported for
26269     64-bit and x32 environments.  It is the default address mode for
26270     64-bit environments.
26271
26272'-maddress-mode=short'
26273     Generate code for short address mode.  This is only supported for
26274     32-bit and x32 environments.  It is the default address mode for
26275     32-bit and x32 environments.
26276
26277
26278File: gcc.info,  Node: x86 Windows Options,  Next: Xstormy16 Options,  Prev: x86 Options,  Up: Submodel Options
26279
262803.18.59 x86 Windows Options
26281---------------------------
26282
26283These additional options are available for Microsoft Windows targets:
26284
26285'-mconsole'
26286     This option specifies that a console application is to be
26287     generated, by instructing the linker to set the PE header subsystem
26288     type required for console applications.  This option is available
26289     for Cygwin and MinGW targets and is enabled by default on those
26290     targets.
26291
26292'-mdll'
26293     This option is available for Cygwin and MinGW targets.  It
26294     specifies that a DLL--a dynamic link library--is to be generated,
26295     enabling the selection of the required runtime startup object and
26296     entry point.
26297
26298'-mnop-fun-dllimport'
26299     This option is available for Cygwin and MinGW targets.  It
26300     specifies that the 'dllimport' attribute should be ignored.
26301
26302'-mthread'
26303     This option is available for MinGW targets.  It specifies that
26304     MinGW-specific thread support is to be used.
26305
26306'-municode'
26307     This option is available for MinGW-w64 targets.  It causes the
26308     'UNICODE' preprocessor macro to be predefined, and chooses
26309     Unicode-capable runtime startup code.
26310
26311'-mwin32'
26312     This option is available for Cygwin and MinGW targets.  It
26313     specifies that the typical Microsoft Windows predefined macros are
26314     to be set in the pre-processor, but does not influence the choice
26315     of runtime library/startup code.
26316
26317'-mwindows'
26318     This option is available for Cygwin and MinGW targets.  It
26319     specifies that a GUI application is to be generated by instructing
26320     the linker to set the PE header subsystem type appropriately.
26321
26322'-fno-set-stack-executable'
26323     This option is available for MinGW targets.  It specifies that the
26324     executable flag for the stack used by nested functions isn't set.
26325     This is necessary for binaries running in kernel mode of Microsoft
26326     Windows, as there the User32 API, which is used to set executable
26327     privileges, isn't available.
26328
26329'-fwritable-relocated-rdata'
26330     This option is available for MinGW and Cygwin targets.  It
26331     specifies that relocated-data in read-only section is put into the
26332     '.data' section.  This is a necessary for older runtimes not
26333     supporting modification of '.rdata' sections for pseudo-relocation.
26334
26335'-mpe-aligned-commons'
26336     This option is available for Cygwin and MinGW targets.  It
26337     specifies that the GNU extension to the PE file format that permits
26338     the correct alignment of COMMON variables should be used when
26339     generating code.  It is enabled by default if GCC detects that the
26340     target assembler found during configuration supports the feature.
26341
26342 See also under *note x86 Options:: for standard options.
26343
26344
26345File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86 Windows Options,  Up: Submodel Options
26346
263473.18.60 Xstormy16 Options
26348-------------------------
26349
26350These options are defined for Xstormy16:
26351
26352'-msim'
26353     Choose startup files and linker script suitable for the simulator.
26354
26355
26356File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
26357
263583.18.61 Xtensa Options
26359----------------------
26360
26361These options are supported for Xtensa targets:
26362
26363'-mconst16'
26364'-mno-const16'
26365     Enable or disable use of 'CONST16' instructions for loading
26366     constant values.  The 'CONST16' instruction is currently not a
26367     standard option from Tensilica.  When enabled, 'CONST16'
26368     instructions are always used in place of the standard 'L32R'
26369     instructions.  The use of 'CONST16' is enabled by default only if
26370     the 'L32R' instruction is not available.
26371
26372'-mfused-madd'
26373'-mno-fused-madd'
26374     Enable or disable use of fused multiply/add and multiply/subtract
26375     instructions in the floating-point option.  This has no effect if
26376     the floating-point option is not also enabled.  Disabling fused
26377     multiply/add and multiply/subtract instructions forces the compiler
26378     to use separate instructions for the multiply and add/subtract
26379     operations.  This may be desirable in some cases where strict IEEE
26380     754-compliant results are required: the fused multiply add/subtract
26381     instructions do not round the intermediate result, thereby
26382     producing results with _more_ bits of precision than specified by
26383     the IEEE standard.  Disabling fused multiply add/subtract
26384     instructions also ensures that the program output is not sensitive
26385     to the compiler's ability to combine multiply and add/subtract
26386     operations.
26387
26388'-mserialize-volatile'
26389'-mno-serialize-volatile'
26390     When this option is enabled, GCC inserts 'MEMW' instructions before
26391     'volatile' memory references to guarantee sequential consistency.
26392     The default is '-mserialize-volatile'.  Use
26393     '-mno-serialize-volatile' to omit the 'MEMW' instructions.
26394
26395'-mforce-no-pic'
26396     For targets, like GNU/Linux, where all user-mode Xtensa code must
26397     be position-independent code (PIC), this option disables PIC for
26398     compiling kernel code.
26399
26400'-mtext-section-literals'
26401'-mno-text-section-literals'
26402     These options control the treatment of literal pools.  The default
26403     is '-mno-text-section-literals', which places literals in a
26404     separate section in the output file.  This allows the literal pool
26405     to be placed in a data RAM/ROM, and it also allows the linker to
26406     combine literal pools from separate object files to remove
26407     redundant literals and improve code size.  With
26408     '-mtext-section-literals', the literals are interspersed in the
26409     text section in order to keep them as close as possible to their
26410     references.  This may be necessary for large assembly files.
26411     Literals for each function are placed right before that function.
26412
26413'-mauto-litpools'
26414'-mno-auto-litpools'
26415     These options control the treatment of literal pools.  The default
26416     is '-mno-auto-litpools', which places literals in a separate
26417     section in the output file unless '-mtext-section-literals' is
26418     used.  With '-mauto-litpools' the literals are interspersed in the
26419     text section by the assembler.  Compiler does not produce explicit
26420     '.literal' directives and loads literals into registers with 'MOVI'
26421     instructions instead of 'L32R' to let the assembler do relaxation
26422     and place literals as necessary.  This option allows assembler to
26423     create several literal pools per function and assemble very big
26424     functions, which may not be possible with
26425     '-mtext-section-literals'.
26426
26427'-mtarget-align'
26428'-mno-target-align'
26429     When this option is enabled, GCC instructs the assembler to
26430     automatically align instructions to reduce branch penalties at the
26431     expense of some code density.  The assembler attempts to widen
26432     density instructions to align branch targets and the instructions
26433     following call instructions.  If there are not enough preceding
26434     safe density instructions to align a target, no widening is
26435     performed.  The default is '-mtarget-align'.  These options do not
26436     affect the treatment of auto-aligned instructions like 'LOOP',
26437     which the assembler always aligns, either by widening density
26438     instructions or by inserting NOP instructions.
26439
26440'-mlongcalls'
26441'-mno-longcalls'
26442     When this option is enabled, GCC instructs the assembler to
26443     translate direct calls to indirect calls unless it can determine
26444     that the target of a direct call is in the range allowed by the
26445     call instruction.  This translation typically occurs for calls to
26446     functions in other source files.  Specifically, the assembler
26447     translates a direct 'CALL' instruction into an 'L32R' followed by a
26448     'CALLX' instruction.  The default is '-mno-longcalls'.  This option
26449     should be used in programs where the call target can potentially be
26450     out of range.  This option is implemented in the assembler, not the
26451     compiler, so the assembly code generated by GCC still shows direct
26452     call instructions--look at the disassembled object code to see the
26453     actual instructions.  Note that the assembler uses an indirect call
26454     for every cross-file call, not just those that really are out of
26455     range.
26456
26457
26458File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
26459
264603.18.62 zSeries Options
26461-----------------------
26462
26463These are listed under *Note S/390 and zSeries Options::.
26464
26465
26466File: gcc.info,  Node: Spec Files,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
26467
264683.19 Specifying Subprocesses and the Switches to Pass to Them
26469=============================================================
26470
26471'gcc' is a driver program.  It performs its job by invoking a sequence
26472of other programs to do the work of compiling, assembling and linking.
26473GCC interprets its command-line parameters and uses these to deduce
26474which programs it should invoke, and which command-line options it ought
26475to place on their command lines.  This behavior is controlled by "spec
26476strings".  In most cases there is one spec string for each program that
26477GCC can invoke, but a few programs have multiple spec strings to control
26478their behavior.  The spec strings built into GCC can be overridden by
26479using the '-specs=' command-line switch to specify a spec file.
26480
26481 "Spec files" are plain-text files that are used to construct spec
26482strings.  They consist of a sequence of directives separated by blank
26483lines.  The type of directive is determined by the first non-whitespace
26484character on the line, which can be one of the following:
26485
26486'%COMMAND'
26487     Issues a COMMAND to the spec file processor.  The commands that can
26488     appear here are:
26489
26490     '%include <FILE>'
26491          Search for FILE and insert its text at the current point in
26492          the specs file.
26493
26494     '%include_noerr <FILE>'
26495          Just like '%include', but do not generate an error message if
26496          the include file cannot be found.
26497
26498     '%rename OLD_NAME NEW_NAME'
26499          Rename the spec string OLD_NAME to NEW_NAME.
26500
26501'*[SPEC_NAME]:'
26502     This tells the compiler to create, override or delete the named
26503     spec string.  All lines after this directive up to the next
26504     directive or blank line are considered to be the text for the spec
26505     string.  If this results in an empty string then the spec is
26506     deleted.  (Or, if the spec did not exist, then nothing happens.)
26507     Otherwise, if the spec does not currently exist a new spec is
26508     created.  If the spec does exist then its contents are overridden
26509     by the text of this directive, unless the first character of that
26510     text is the '+' character, in which case the text is appended to
26511     the spec.
26512
26513'[SUFFIX]:'
26514     Creates a new '[SUFFIX] spec' pair.  All lines after this directive
26515     and up to the next directive or blank line are considered to make
26516     up the spec string for the indicated suffix.  When the compiler
26517     encounters an input file with the named suffix, it processes the
26518     spec string in order to work out how to compile that file.  For
26519     example:
26520
26521          .ZZ:
26522          z-compile -input %i
26523
26524     This says that any input file whose name ends in '.ZZ' should be
26525     passed to the program 'z-compile', which should be invoked with the
26526     command-line switch '-input' and with the result of performing the
26527     '%i' substitution.  (See below.)
26528
26529     As an alternative to providing a spec string, the text following a
26530     suffix directive can be one of the following:
26531
26532     '@LANGUAGE'
26533          This says that the suffix is an alias for a known LANGUAGE.
26534          This is similar to using the '-x' command-line switch to GCC
26535          to specify a language explicitly.  For example:
26536
26537               .ZZ:
26538               @c++
26539
26540          Says that .ZZ files are, in fact, C++ source files.
26541
26542     '#NAME'
26543          This causes an error messages saying:
26544
26545               NAME compiler not installed on this system.
26546
26547     GCC already has an extensive list of suffixes built into it.  This
26548     directive adds an entry to the end of the list of suffixes, but
26549     since the list is searched from the end backwards, it is
26550     effectively possible to override earlier entries using this
26551     technique.
26552
26553 GCC has the following spec strings built into it.  Spec files can
26554override these strings or create their own.  Note that individual
26555targets can also add their own spec strings to this list.
26556
26557     asm          Options to pass to the assembler
26558     asm_final    Options to pass to the assembler post-processor
26559     cpp          Options to pass to the C preprocessor
26560     cc1          Options to pass to the C compiler
26561     cc1plus      Options to pass to the C++ compiler
26562     endfile      Object files to include at the end of the link
26563     link         Options to pass to the linker
26564     lib          Libraries to include on the command line to the linker
26565     libgcc       Decides which GCC support library to pass to the linker
26566     linker       Sets the name of the linker
26567     predefines   Defines to be passed to the C preprocessor
26568     signed_char  Defines to pass to CPP to say whether char is signed
26569                  by default
26570     startfile    Object files to include at the start of the link
26571
26572 Here is a small example of a spec file:
26573
26574     %rename lib                 old_lib
26575
26576     *lib:
26577     --start-group -lgcc -lc -leval1 --end-group %(old_lib)
26578
26579 This example renames the spec called 'lib' to 'old_lib' and then
26580overrides the previous definition of 'lib' with a new one.  The new
26581definition adds in some extra command-line options before including the
26582text of the old definition.
26583
26584 "Spec strings" are a list of command-line options to be passed to their
26585corresponding program.  In addition, the spec strings can contain
26586'%'-prefixed sequences to substitute variable text or to conditionally
26587insert text into the command line.  Using these constructs it is
26588possible to generate quite complex command lines.
26589
26590 Here is a table of all defined '%'-sequences for spec strings.  Note
26591that spaces are not generated automatically around the results of
26592expanding these sequences.  Therefore you can concatenate them together
26593or combine them with constant text in a single argument.
26594
26595'%%'
26596     Substitute one '%' into the program name or argument.
26597
26598'%i'
26599     Substitute the name of the input file being processed.
26600
26601'%b'
26602     Substitute the basename of the input file being processed.  This is
26603     the substring up to (and not including) the last period and not
26604     including the directory.
26605
26606'%B'
26607     This is the same as '%b', but include the file suffix (text after
26608     the last period).
26609
26610'%d'
26611     Marks the argument containing or following the '%d' as a temporary
26612     file name, so that that file is deleted if GCC exits successfully.
26613     Unlike '%g', this contributes no text to the argument.
26614
26615'%gSUFFIX'
26616     Substitute a file name that has suffix SUFFIX and is chosen once
26617     per compilation, and mark the argument in the same way as '%d'.  To
26618     reduce exposure to denial-of-service attacks, the file name is now
26619     chosen in a way that is hard to predict even when previously chosen
26620     file names are known.  For example, '%g.s ... %g.o ... %g.s' might
26621     turn into 'ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX matches the
26622     regexp '[.A-Za-z]*' or the special string '%O', which is treated
26623     exactly as if '%O' had been preprocessed.  Previously, '%g' was
26624     simply substituted with a file name chosen once per compilation,
26625     without regard to any appended suffix (which was therefore treated
26626     just like ordinary text), making such attacks more likely to
26627     succeed.
26628
26629'%uSUFFIX'
26630     Like '%g', but generates a new temporary file name each time it
26631     appears instead of once per compilation.
26632
26633'%USUFFIX'
26634     Substitutes the last file name generated with '%uSUFFIX',
26635     generating a new one if there is no such last file name.  In the
26636     absence of any '%uSUFFIX', this is just like '%gSUFFIX', except
26637     they don't share the same suffix _space_, so '%g.s ... %U.s ...
26638     %g.s ... %U.s' involves the generation of two distinct file names,
26639     one for each '%g.s' and another for each '%U.s'.  Previously, '%U'
26640     was simply substituted with a file name chosen for the previous
26641     '%u', without regard to any appended suffix.
26642
26643'%jSUFFIX'
26644     Substitutes the name of the 'HOST_BIT_BUCKET', if any, and if it is
26645     writable, and if '-save-temps' is not used; otherwise, substitute
26646     the name of a temporary file, just like '%u'.  This temporary file
26647     is not meant for communication between processes, but rather as a
26648     junk disposal mechanism.
26649
26650'%|SUFFIX'
26651'%mSUFFIX'
26652     Like '%g', except if '-pipe' is in effect.  In that case '%|'
26653     substitutes a single dash and '%m' substitutes nothing at all.
26654     These are the two most common ways to instruct a program that it
26655     should read from standard input or write to standard output.  If
26656     you need something more elaborate you can use an '%{pipe:'X'}'
26657     construct: see for example 'f/lang-specs.h'.
26658
26659'%.SUFFIX'
26660     Substitutes .SUFFIX for the suffixes of a matched switch's args
26661     when it is subsequently output with '%*'.  SUFFIX is terminated by
26662     the next space or %.
26663
26664'%w'
26665     Marks the argument containing or following the '%w' as the
26666     designated output file of this compilation.  This puts the argument
26667     into the sequence of arguments that '%o' substitutes.
26668
26669'%o'
26670     Substitutes the names of all the output files, with spaces
26671     automatically placed around them.  You should write spaces around
26672     the '%o' as well or the results are undefined.  '%o' is for use in
26673     the specs for running the linker.  Input files whose names have no
26674     recognized suffix are not compiled at all, but they are included
26675     among the output files, so they are linked.
26676
26677'%O'
26678     Substitutes the suffix for object files.  Note that this is handled
26679     specially when it immediately follows '%g, %u, or %U', because of
26680     the need for those to form complete file names.  The handling is
26681     such that '%O' is treated exactly as if it had already been
26682     substituted, except that '%g, %u, and %U' do not currently support
26683     additional SUFFIX characters following '%O' as they do following,
26684     for example, '.o'.
26685
26686'%p'
26687     Substitutes the standard macro predefinitions for the current
26688     target machine.  Use this when running 'cpp'.
26689
26690'%P'
26691     Like '%p', but puts '__' before and after the name of each
26692     predefined macro, except for macros that start with '__' or with
26693     '_L', where L is an uppercase letter.  This is for ISO C.
26694
26695'%I'
26696     Substitute any of '-iprefix' (made from 'GCC_EXEC_PREFIX'),
26697     '-isysroot' (made from 'TARGET_SYSTEM_ROOT'), '-isystem' (made from
26698     'COMPILER_PATH' and '-B' options) and '-imultilib' as necessary.
26699
26700'%s'
26701     Current argument is the name of a library or startup file of some
26702     sort.  Search for that file in a standard list of directories and
26703     substitute the full name found.  The current working directory is
26704     included in the list of directories scanned.
26705
26706'%T'
26707     Current argument is the name of a linker script.  Search for that
26708     file in the current list of directories to scan for libraries.  If
26709     the file is located insert a '--script' option into the command
26710     line followed by the full path name found.  If the file is not
26711     found then generate an error message.  Note: the current working
26712     directory is not searched.
26713
26714'%eSTR'
26715     Print STR as an error message.  STR is terminated by a newline.
26716     Use this when inconsistent options are detected.
26717
26718'%(NAME)'
26719     Substitute the contents of spec string NAME at this point.
26720
26721'%x{OPTION}'
26722     Accumulate an option for '%X'.
26723
26724'%X'
26725     Output the accumulated linker options specified by '-Wl' or a '%x'
26726     spec string.
26727
26728'%Y'
26729     Output the accumulated assembler options specified by '-Wa'.
26730
26731'%Z'
26732     Output the accumulated preprocessor options specified by '-Wp'.
26733
26734'%a'
26735     Process the 'asm' spec.  This is used to compute the switches to be
26736     passed to the assembler.
26737
26738'%A'
26739     Process the 'asm_final' spec.  This is a spec string for passing
26740     switches to an assembler post-processor, if such a program is
26741     needed.
26742
26743'%l'
26744     Process the 'link' spec.  This is the spec for computing the
26745     command line passed to the linker.  Typically it makes use of the
26746     '%L %G %S %D and %E' sequences.
26747
26748'%D'
26749     Dump out a '-L' option for each directory that GCC believes might
26750     contain startup files.  If the target supports multilibs then the
26751     current multilib directory is prepended to each of these paths.
26752
26753'%L'
26754     Process the 'lib' spec.  This is a spec string for deciding which
26755     libraries are included on the command line to the linker.
26756
26757'%G'
26758     Process the 'libgcc' spec.  This is a spec string for deciding
26759     which GCC support library is included on the command line to the
26760     linker.
26761
26762'%S'
26763     Process the 'startfile' spec.  This is a spec for deciding which
26764     object files are the first ones passed to the linker.  Typically
26765     this might be a file named 'crt0.o'.
26766
26767'%E'
26768     Process the 'endfile' spec.  This is a spec string that specifies
26769     the last object files that are passed to the linker.
26770
26771'%C'
26772     Process the 'cpp' spec.  This is used to construct the arguments to
26773     be passed to the C preprocessor.
26774
26775'%1'
26776     Process the 'cc1' spec.  This is used to construct the options to
26777     be passed to the actual C compiler ('cc1').
26778
26779'%2'
26780     Process the 'cc1plus' spec.  This is used to construct the options
26781     to be passed to the actual C++ compiler ('cc1plus').
26782
26783'%*'
26784     Substitute the variable part of a matched option.  See below.  Note
26785     that each comma in the substituted string is replaced by a single
26786     space.
26787
26788'%<S'
26789     Remove all occurrences of '-S' from the command line.  Note--this
26790     command is position dependent.  '%' commands in the spec string
26791     before this one see '-S', '%' commands in the spec string after
26792     this one do not.
26793
26794'%:FUNCTION(ARGS)'
26795     Call the named function FUNCTION, passing it ARGS.  ARGS is first
26796     processed as a nested spec string, then split into an argument
26797     vector in the usual fashion.  The function returns a string which
26798     is processed as if it had appeared literally as part of the current
26799     spec.
26800
26801     The following built-in spec functions are provided:
26802
26803     'getenv'
26804          The 'getenv' spec function takes two arguments: an environment
26805          variable name and a string.  If the environment variable is
26806          not defined, a fatal error is issued.  Otherwise, the return
26807          value is the value of the environment variable concatenated
26808          with the string.  For example, if 'TOPDIR' is defined as
26809          '/path/to/top', then:
26810
26811               %:getenv(TOPDIR /include)
26812
26813          expands to '/path/to/top/include'.
26814
26815     'if-exists'
26816          The 'if-exists' spec function takes one argument, an absolute
26817          pathname to a file.  If the file exists, 'if-exists' returns
26818          the pathname.  Here is a small example of its usage:
26819
26820               *startfile:
26821               crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
26822
26823     'if-exists-else'
26824          The 'if-exists-else' spec function is similar to the
26825          'if-exists' spec function, except that it takes two arguments.
26826          The first argument is an absolute pathname to a file.  If the
26827          file exists, 'if-exists-else' returns the pathname.  If it
26828          does not exist, it returns the second argument.  This way,
26829          'if-exists-else' can be used to select one file or another,
26830          based on the existence of the first.  Here is a small example
26831          of its usage:
26832
26833               *startfile:
26834               crt0%O%s %:if-exists(crti%O%s) \
26835               %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
26836
26837     'replace-outfile'
26838          The 'replace-outfile' spec function takes two arguments.  It
26839          looks for the first argument in the outfiles array and
26840          replaces it with the second argument.  Here is a small example
26841          of its usage:
26842
26843               %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
26844
26845     'remove-outfile'
26846          The 'remove-outfile' spec function takes one argument.  It
26847          looks for the first argument in the outfiles array and removes
26848          it.  Here is a small example its usage:
26849
26850               %:remove-outfile(-lm)
26851
26852     'pass-through-libs'
26853          The 'pass-through-libs' spec function takes any number of
26854          arguments.  It finds any '-l' options and any non-options
26855          ending in '.a' (which it assumes are the names of linker input
26856          library archive files) and returns a result containing all the
26857          found arguments each prepended by '-plugin-opt=-pass-through='
26858          and joined by spaces.  This list is intended to be passed to
26859          the LTO linker plugin.
26860
26861               %:pass-through-libs(%G %L %G)
26862
26863     'print-asm-header'
26864          The 'print-asm-header' function takes no arguments and simply
26865          prints a banner like:
26866
26867               Assembler options
26868               =================
26869
26870               Use "-Wa,OPTION" to pass "OPTION" to the assembler.
26871
26872          It is used to separate compiler options from assembler options
26873          in the '--target-help' output.
26874
26875'%{S}'
26876     Substitutes the '-S' switch, if that switch is given to GCC.  If
26877     that switch is not specified, this substitutes nothing.  Note that
26878     the leading dash is omitted when specifying this option, and it is
26879     automatically inserted if the substitution is performed.  Thus the
26880     spec string '%{foo}' matches the command-line option '-foo' and
26881     outputs the command-line option '-foo'.
26882
26883'%W{S}'
26884     Like %{'S'} but mark last argument supplied within as a file to be
26885     deleted on failure.
26886
26887'%{S*}'
26888     Substitutes all the switches specified to GCC whose names start
26889     with '-S', but which also take an argument.  This is used for
26890     switches like '-o', '-D', '-I', etc.  GCC considers '-o foo' as
26891     being one switch whose name starts with 'o'.  %{o*} substitutes
26892     this text, including the space.  Thus two arguments are generated.
26893
26894'%{S*&T*}'
26895     Like %{'S'*}, but preserve order of 'S' and 'T' options (the order
26896     of 'S' and 'T' in the spec is not significant).  There can be any
26897     number of ampersand-separated variables; for each the wild card is
26898     optional.  Useful for CPP as '%{D*&U*&A*}'.
26899
26900'%{S:X}'
26901     Substitutes 'X', if the '-S' switch is given to GCC.
26902
26903'%{!S:X}'
26904     Substitutes 'X', if the '-S' switch is _not_ given to GCC.
26905
26906'%{S*:X}'
26907     Substitutes 'X' if one or more switches whose names start with '-S'
26908     are specified to GCC.  Normally 'X' is substituted only once, no
26909     matter how many such switches appeared.  However, if '%*' appears
26910     somewhere in 'X', then 'X' is substituted once for each matching
26911     switch, with the '%*' replaced by the part of that switch matching
26912     the '*'.
26913
26914     If '%*' appears as the last part of a spec sequence then a space is
26915     added after the end of the last substitution.  If there is more
26916     text in the sequence, however, then a space is not generated.  This
26917     allows the '%*' substitution to be used as part of a larger string.
26918     For example, a spec string like this:
26919
26920          %{mcu=*:--script=%*/memory.ld}
26921
26922     when matching an option like '-mcu=newchip' produces:
26923
26924          --script=newchip/memory.ld
26925
26926'%{.S:X}'
26927     Substitutes 'X', if processing a file with suffix 'S'.
26928
26929'%{!.S:X}'
26930     Substitutes 'X', if _not_ processing a file with suffix 'S'.
26931
26932'%{,S:X}'
26933     Substitutes 'X', if processing a file for language 'S'.
26934
26935'%{!,S:X}'
26936     Substitutes 'X', if not processing a file for language 'S'.
26937
26938'%{S|P:X}'
26939     Substitutes 'X' if either '-S' or '-P' is given to GCC.  This may
26940     be combined with '!', '.', ',', and '*' sequences as well, although
26941     they have a stronger binding than the '|'.  If '%*' appears in 'X',
26942     all of the alternatives must be starred, and only the first
26943     matching alternative is substituted.
26944
26945     For example, a spec string like this:
26946
26947          %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
26948
26949     outputs the following command-line options from the following input
26950     command-line options:
26951
26952          fred.c        -foo -baz
26953          jim.d         -bar -boggle
26954          -d fred.c     -foo -baz -boggle
26955          -d jim.d      -bar -baz -boggle
26956
26957'%{S:X; T:Y; :D}'
26958
26959     If 'S' is given to GCC, substitutes 'X'; else if 'T' is given to
26960     GCC, substitutes 'Y'; else substitutes 'D'.  There can be as many
26961     clauses as you need.  This may be combined with '.', ',', '!', '|',
26962     and '*' as needed.
26963
26964 The switch matching text 'S' in a '%{S}', '%{S:X}' or similar construct
26965can use a backslash to ignore the special meaning of the character
26966following it, thus allowing literal matching of a character that is
26967otherwise specially treated.  For example, '%{std=iso9899\:1999:X}'
26968substitutes 'X' if the '-std=iso9899:1999' option is given.
26969
26970 The conditional text 'X' in a '%{S:X}' or similar construct may contain
26971other nested '%' constructs or spaces, or even newlines.  They are
26972processed as usual, as described above.  Trailing white space in 'X' is
26973ignored.  White space may also appear anywhere on the left side of the
26974colon in these constructs, except between '.' or '*' and the
26975corresponding word.
26976
26977 The '-O', '-f', '-m', and '-W' switches are handled specifically in
26978these constructs.  If another value of '-O' or the negated form of a
26979'-f', '-m', or '-W' switch is found later in the command line, the
26980earlier switch value is ignored, except with {'S'*} where 'S' is just
26981one letter, which passes all matching options.
26982
26983 The character '|' at the beginning of the predicate text is used to
26984indicate that a command should be piped to the following command, but
26985only if '-pipe' is specified.
26986
26987 It is built into GCC which switches take arguments and which do not.
26988(You might think it would be useful to generalize this to allow each
26989compiler's spec to say which switches take arguments.  But this cannot
26990be done in a consistent fashion.  GCC cannot even decide which input
26991files have been specified without knowing which switches take arguments,
26992and it must know which input files to compile in order to tell which
26993compilers to run).
26994
26995 GCC also knows implicitly that arguments starting in '-l' are to be
26996treated as compiler output files, and passed to the linker in their
26997proper position among the other output files.
26998
26999
27000File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Spec Files,  Up: Invoking GCC
27001
270023.20 Environment Variables Affecting GCC
27003========================================
27004
27005This section describes several environment variables that affect how GCC
27006operates.  Some of them work by specifying directories or prefixes to
27007use when searching for various kinds of files.  Some are used to specify
27008other aspects of the compilation environment.
27009
27010 Note that you can also specify places to search using options such as
27011'-B', '-I' and '-L' (*note Directory Options::).  These take precedence
27012over places specified using environment variables, which in turn take
27013precedence over those specified by the configuration of GCC.  *Note
27014Controlling the Compilation Driver 'gcc': (gccint)Driver.
27015
27016'LANG'
27017'LC_CTYPE'
27018'LC_MESSAGES'
27019'LC_ALL'
27020     These environment variables control the way that GCC uses
27021     localization information which allows GCC to work with different
27022     national conventions.  GCC inspects the locale categories
27023     'LC_CTYPE' and 'LC_MESSAGES' if it has been configured to do so.
27024     These locale categories can be set to any value supported by your
27025     installation.  A typical value is 'en_GB.UTF-8' for English in the
27026     United Kingdom encoded in UTF-8.
27027
27028     The 'LC_CTYPE' environment variable specifies character
27029     classification.  GCC uses it to determine the character boundaries
27030     in a string; this is needed for some multibyte encodings that
27031     contain quote and escape characters that are otherwise interpreted
27032     as a string end or escape.
27033
27034     The 'LC_MESSAGES' environment variable specifies the language to
27035     use in diagnostic messages.
27036
27037     If the 'LC_ALL' environment variable is set, it overrides the value
27038     of 'LC_CTYPE' and 'LC_MESSAGES'; otherwise, 'LC_CTYPE' and
27039     'LC_MESSAGES' default to the value of the 'LANG' environment
27040     variable.  If none of these variables are set, GCC defaults to
27041     traditional C English behavior.
27042
27043'TMPDIR'
27044     If 'TMPDIR' is set, it specifies the directory to use for temporary
27045     files.  GCC uses temporary files to hold the output of one stage of
27046     compilation which is to be used as input to the next stage: for
27047     example, the output of the preprocessor, which is the input to the
27048     compiler proper.
27049
27050'GCC_COMPARE_DEBUG'
27051     Setting 'GCC_COMPARE_DEBUG' is nearly equivalent to passing
27052     '-fcompare-debug' to the compiler driver.  See the documentation of
27053     this option for more details.
27054
27055'GCC_EXEC_PREFIX'
27056     If 'GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
27057     names of the subprograms executed by the compiler.  No slash is
27058     added when this prefix is combined with the name of a subprogram,
27059     but you can specify a prefix that ends with a slash if you wish.
27060
27061     If 'GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an
27062     appropriate prefix to use based on the pathname it is invoked with.
27063
27064     If GCC cannot find the subprogram using the specified prefix, it
27065     tries looking in the usual places for the subprogram.
27066
27067     The default value of 'GCC_EXEC_PREFIX' is 'PREFIX/lib/gcc/' where
27068     PREFIX is the prefix to the installed compiler.  In many cases
27069     PREFIX is the value of 'prefix' when you ran the 'configure'
27070     script.
27071
27072     Other prefixes specified with '-B' take precedence over this
27073     prefix.
27074
27075     This prefix is also used for finding files such as 'crt0.o' that
27076     are used for linking.
27077
27078     In addition, the prefix is used in an unusual way in finding the
27079     directories to search for header files.  For each of the standard
27080     directories whose name normally begins with '/usr/local/lib/gcc'
27081     (more precisely, with the value of 'GCC_INCLUDE_DIR'), GCC tries
27082     replacing that beginning with the specified prefix to produce an
27083     alternate directory name.  Thus, with '-Bfoo/', GCC searches
27084     'foo/bar' just before it searches the standard directory
27085     '/usr/local/lib/bar'.  If a standard directory begins with the
27086     configured PREFIX then the value of PREFIX is replaced by
27087     'GCC_EXEC_PREFIX' when looking for header files.
27088
27089'COMPILER_PATH'
27090     The value of 'COMPILER_PATH' is a colon-separated list of
27091     directories, much like 'PATH'.  GCC tries the directories thus
27092     specified when searching for subprograms, if it cannot find the
27093     subprograms using 'GCC_EXEC_PREFIX'.
27094
27095'LIBRARY_PATH'
27096     The value of 'LIBRARY_PATH' is a colon-separated list of
27097     directories, much like 'PATH'.  When configured as a native
27098     compiler, GCC tries the directories thus specified when searching
27099     for special linker files, if it cannot find them using
27100     'GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
27101     when searching for ordinary libraries for the '-l' option (but
27102     directories specified with '-L' come first).
27103
27104'LANG'
27105     This variable is used to pass locale information to the compiler.
27106     One way in which this information is used is to determine the
27107     character set to be used when character literals, string literals
27108     and comments are parsed in C and C++.  When the compiler is
27109     configured to allow multibyte characters, the following values for
27110     'LANG' are recognized:
27111
27112     'C-JIS'
27113          Recognize JIS characters.
27114     'C-SJIS'
27115          Recognize SJIS characters.
27116     'C-EUCJP'
27117          Recognize EUCJP characters.
27118
27119     If 'LANG' is not defined, or if it has some other value, then the
27120     compiler uses 'mblen' and 'mbtowc' as defined by the default locale
27121     to recognize and translate multibyte characters.
27122
27123Some additional environment variables affect the behavior of the
27124preprocessor.
27125
27126'CPATH'
27127'C_INCLUDE_PATH'
27128'CPLUS_INCLUDE_PATH'
27129'OBJC_INCLUDE_PATH'
27130     Each variable's value is a list of directories separated by a
27131     special character, much like 'PATH', in which to look for header
27132     files.  The special character, 'PATH_SEPARATOR', is
27133     target-dependent and determined at GCC build time.  For Microsoft
27134     Windows-based targets it is a semicolon, and for almost all other
27135     targets it is a colon.
27136
27137     'CPATH' specifies a list of directories to be searched as if
27138     specified with '-I', but after any paths given with '-I' options on
27139     the command line.  This environment variable is used regardless of
27140     which language is being preprocessed.
27141
27142     The remaining environment variables apply only when preprocessing
27143     the particular language indicated.  Each specifies a list of
27144     directories to be searched as if specified with '-isystem', but
27145     after any paths given with '-isystem' options on the command line.
27146
27147     In all these variables, an empty element instructs the compiler to
27148     search its current working directory.  Empty elements can appear at
27149     the beginning or end of a path.  For instance, if the value of
27150     'CPATH' is ':/special/include', that has the same effect as
27151     '-I. -I/special/include'.
27152
27153'DEPENDENCIES_OUTPUT'
27154     If this variable is set, its value specifies how to output
27155     dependencies for Make based on the non-system header files
27156     processed by the compiler.  System header files are ignored in the
27157     dependency output.
27158
27159     The value of 'DEPENDENCIES_OUTPUT' can be just a file name, in
27160     which case the Make rules are written to that file, guessing the
27161     target name from the source file name.  Or the value can have the
27162     form 'FILE TARGET', in which case the rules are written to file
27163     FILE using TARGET as the target name.
27164
27165     In other words, this environment variable is equivalent to
27166     combining the options '-MM' and '-MF' (*note Preprocessor
27167     Options::), with an optional '-MT' switch too.
27168
27169'SUNPRO_DEPENDENCIES'
27170     This variable is the same as 'DEPENDENCIES_OUTPUT' (see above),
27171     except that system header files are not ignored, so it implies '-M'
27172     rather than '-MM'.  However, the dependence on the main input file
27173     is omitted.  *Note Preprocessor Options::.
27174
27175'SOURCE_DATE_EPOCH'
27176     If this variable is set, its value specifies a UNIX timestamp to be
27177     used in replacement of the current date and time in the '__DATE__'
27178     and '__TIME__' macros, so that the embedded timestamps become
27179     reproducible.
27180
27181     The value of 'SOURCE_DATE_EPOCH' must be a UNIX timestamp, defined
27182     as the number of seconds (excluding leap seconds) since 01 Jan 1970
27183     00:00:00 represented in ASCII; identical to the output of ''date
27184     +%s'' on GNU/Linux and other systems that support the '%s'
27185     extension in the 'date' command.
27186
27187     The value should be a known timestamp such as the last modification
27188     time of the source or package and it should be set by the build
27189     process.
27190
27191
27192File: gcc.info,  Node: Precompiled Headers,  Prev: Environment Variables,  Up: Invoking GCC
27193
271943.21 Using Precompiled Headers
27195==============================
27196
27197Often large projects have many header files that are included in every
27198source file.  The time the compiler takes to process these header files
27199over and over again can account for nearly all of the time required to
27200build the project.  To make builds faster, GCC allows you to
27201"precompile" a header file.
27202
27203 To create a precompiled header file, simply compile it as you would any
27204other file, if necessary using the '-x' option to make the driver treat
27205it as a C or C++ header file.  You may want to use a tool like 'make' to
27206keep the precompiled header up-to-date when the headers it contains
27207change.
27208
27209 A precompiled header file is searched for when '#include' is seen in
27210the compilation.  As it searches for the included file (*note Search
27211Path: (cpp)Search Path.) the compiler looks for a precompiled header in
27212each directory just before it looks for the include file in that
27213directory.  The name searched for is the name specified in the
27214'#include' with '.gch' appended.  If the precompiled header file cannot
27215be used, it is ignored.
27216
27217 For instance, if you have '#include "all.h"', and you have 'all.h.gch'
27218in the same directory as 'all.h', then the precompiled header file is
27219used if possible, and the original header is used otherwise.
27220
27221 Alternatively, you might decide to put the precompiled header file in a
27222directory and use '-I' to ensure that directory is searched before (or
27223instead of) the directory containing the original header.  Then, if you
27224want to check that the precompiled header file is always used, you can
27225put a file of the same name as the original header in this directory
27226containing an '#error' command.
27227
27228 This also works with '-include'.  So yet another way to use precompiled
27229headers, good for projects not designed with precompiled header files in
27230mind, is to simply take most of the header files used by a project,
27231include them from another header file, precompile that header file, and
27232'-include' the precompiled header.  If the header files have guards
27233against multiple inclusion, they are skipped because they've already
27234been included (in the precompiled header).
27235
27236 If you need to precompile the same header file for different languages,
27237targets, or compiler options, you can instead make a _directory_ named
27238like 'all.h.gch', and put each precompiled header in the directory,
27239perhaps using '-o'.  It doesn't matter what you call the files in the
27240directory; every precompiled header in the directory is considered.  The
27241first precompiled header encountered in the directory that is valid for
27242this compilation is used; they're searched in no particular order.
27243
27244 There are many other possibilities, limited only by your imagination,
27245good sense, and the constraints of your build system.
27246
27247 A precompiled header file can be used only when these conditions apply:
27248
27249   * Only one precompiled header can be used in a particular
27250     compilation.
27251
27252   * A precompiled header cannot be used once the first C token is seen.
27253     You can have preprocessor directives before a precompiled header;
27254     you cannot include a precompiled header from inside another header.
27255
27256   * The precompiled header file must be produced for the same language
27257     as the current compilation.  You cannot use a C precompiled header
27258     for a C++ compilation.
27259
27260   * The precompiled header file must have been produced by the same
27261     compiler binary as the current compilation is using.
27262
27263   * Any macros defined before the precompiled header is included must
27264     either be defined in the same way as when the precompiled header
27265     was generated, or must not affect the precompiled header, which
27266     usually means that they don't appear in the precompiled header at
27267     all.
27268
27269     The '-D' option is one way to define a macro before a precompiled
27270     header is included; using a '#define' can also do it.  There are
27271     also some options that define macros implicitly, like '-O' and
27272     '-Wdeprecated'; the same rule applies to macros defined this way.
27273
27274   * If debugging information is output when using the precompiled
27275     header, using '-g' or similar, the same kind of debugging
27276     information must have been output when building the precompiled
27277     header.  However, a precompiled header built using '-g' can be used
27278     in a compilation when no debugging information is being output.
27279
27280   * The same '-m' options must generally be used when building and
27281     using the precompiled header.  *Note Submodel Options::, for any
27282     cases where this rule is relaxed.
27283
27284   * Each of the following options must be the same when building and
27285     using the precompiled header:
27286
27287          -fexceptions
27288
27289   * Some other command-line options starting with '-f', '-p', or '-O'
27290     must be defined in the same way as when the precompiled header was
27291     generated.  At present, it's not clear which options are safe to
27292     change and which are not; the safest choice is to use exactly the
27293     same options when generating and using the precompiled header.  The
27294     following are known to be safe:
27295
27296          -fmessage-length=  -fpreprocessed  -fsched-interblock
27297          -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
27298          -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
27299          -pedantic-errors
27300
27301 For all of these except the last, the compiler automatically ignores
27302the precompiled header if the conditions aren't met.  If you find an
27303option combination that doesn't work and doesn't cause the precompiled
27304header to be ignored, please consider filing a bug report, see *note
27305Bugs::.
27306
27307 If you do use differing options when generating and using the
27308precompiled header, the actual behavior is a mixture of the behavior for
27309the options.  For instance, if you use '-g' to generate the precompiled
27310header but not when using it, you may or may not get debugging
27311information for routines in the precompiled header.
27312
27313
27314File: gcc.info,  Node: C Implementation,  Next: C++ Implementation,  Prev: Invoking GCC,  Up: Top
27315
273164 C Implementation-Defined Behavior
27317***********************************
27318
27319A conforming implementation of ISO C is required to document its choice
27320of behavior in each of the areas that are designated "implementation
27321defined".  The following lists all such areas, along with the section
27322numbers from the ISO/IEC 9899:1990, ISO/IEC 9899:1999 and ISO/IEC
273239899:2011 standards.  Some areas are only implementation-defined in one
27324version of the standard.
27325
27326 Some choices depend on the externally determined ABI for the platform
27327(including standard character encodings) which GCC follows; these are
27328listed as "determined by ABI" below.  *Note Binary Compatibility:
27329Compatibility, and <http://gcc.gnu.org/readings.html>.  Some choices are
27330documented in the preprocessor manual.  *Note Implementation-defined
27331behavior: (cpp)Implementation-defined behavior.  Some choices are made
27332by the library and operating system (or other environment when compiling
27333for a freestanding environment); refer to their documentation for
27334details.
27335
27336* Menu:
27337
27338* Translation implementation::
27339* Environment implementation::
27340* Identifiers implementation::
27341* Characters implementation::
27342* Integers implementation::
27343* Floating point implementation::
27344* Arrays and pointers implementation::
27345* Hints implementation::
27346* Structures unions enumerations and bit-fields implementation::
27347* Qualifiers implementation::
27348* Declarators implementation::
27349* Statements implementation::
27350* Preprocessing directives implementation::
27351* Library functions implementation::
27352* Architecture implementation::
27353* Locale-specific behavior implementation::
27354
27355
27356File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
27357
273584.1 Translation
27359===============
27360
27361   * 'How a diagnostic is identified (C90 3.7, C99 and C11 3.10, C90,
27362     C99 and C11 5.1.1.3).'
27363
27364     Diagnostics consist of all the output sent to stderr by GCC.
27365
27366   * 'Whether each nonempty sequence of white-space characters other
27367     than new-line is retained or replaced by one space character in
27368     translation phase 3 (C90, C99 and C11 5.1.1.2).'
27369
27370     *Note Implementation-defined behavior: (cpp)Implementation-defined
27371     behavior.
27372
27373
27374File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
27375
273764.2 Environment
27377===============
27378
27379The behavior of most of these points are dependent on the implementation
27380of the C library, and are not defined by GCC itself.
27381
27382   * 'The mapping between physical source file multibyte characters and
27383     the source character set in translation phase 1 (C90, C99 and C11
27384     5.1.1.2).'
27385
27386     *Note Implementation-defined behavior: (cpp)Implementation-defined
27387     behavior.
27388
27389
27390File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
27391
273924.3 Identifiers
27393===============
27394
27395   * 'Which additional multibyte characters may appear in identifiers
27396     and their correspondence to universal character names (C99 and C11
27397     6.4.2).'
27398
27399     *Note Implementation-defined behavior: (cpp)Implementation-defined
27400     behavior.
27401
27402   * 'The number of significant initial characters in an identifier (C90
27403     6.1.2, C90, C99 and C11 5.2.4.1, C99 and C11 6.4.2).'
27404
27405     For internal names, all characters are significant.  For external
27406     names, the number of significant characters are defined by the
27407     linker; for almost all targets, all characters are significant.
27408
27409   * 'Whether case distinctions are significant in an identifier with
27410     external linkage (C90 6.1.2).'
27411
27412     This is a property of the linker.  C99 and C11 require that case
27413     distinctions are always significant in identifiers with external
27414     linkage and systems without this property are not supported by GCC.
27415
27416
27417File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
27418
274194.4 Characters
27420==============
27421
27422   * 'The number of bits in a byte (C90 3.4, C99 and C11 3.6).'
27423
27424     Determined by ABI.
27425
27426   * 'The values of the members of the execution character set (C90, C99
27427     and C11 5.2.1).'
27428
27429     Determined by ABI.
27430
27431   * 'The unique value of the member of the execution character set
27432     produced for each of the standard alphabetic escape sequences (C90,
27433     C99 and C11 5.2.2).'
27434
27435     Determined by ABI.
27436
27437   * 'The value of a 'char' object into which has been stored any
27438     character other than a member of the basic execution character set
27439     (C90 6.1.2.5, C99 and C11 6.2.5).'
27440
27441     Determined by ABI.
27442
27443   * 'Which of 'signed char' or 'unsigned char' has the same range,
27444     representation, and behavior as "plain" 'char' (C90 6.1.2.5, C90
27445     6.2.1.1, C99 and C11 6.2.5, C99 and C11 6.3.1.1).'
27446
27447     Determined by ABI.  The options '-funsigned-char' and
27448     '-fsigned-char' change the default.  *Note Options Controlling C
27449     Dialect: C Dialect Options.
27450
27451   * 'The mapping of members of the source character set (in character
27452     constants and string literals) to members of the execution
27453     character set (C90 6.1.3.4, C99 and C11 6.4.4.4, C90, C99 and C11
27454     5.1.1.2).'
27455
27456     Determined by ABI.
27457
27458   * 'The value of an integer character constant containing more than
27459     one character or containing a character or escape sequence that
27460     does not map to a single-byte execution character (C90 6.1.3.4, C99
27461     and C11 6.4.4.4).'
27462
27463     *Note Implementation-defined behavior: (cpp)Implementation-defined
27464     behavior.
27465
27466   * 'The value of a wide character constant containing more than one
27467     multibyte character or a single multibyte character that maps to
27468     multiple members of the extended execution character set, or
27469     containing a multibyte character or escape sequence not represented
27470     in the extended execution character set (C90 6.1.3.4, C99 and C11
27471     6.4.4.4).'
27472
27473     *Note Implementation-defined behavior: (cpp)Implementation-defined
27474     behavior.
27475
27476   * 'The current locale used to convert a wide character constant
27477     consisting of a single multibyte character that maps to a member of
27478     the extended execution character set into a corresponding wide
27479     character code (C90 6.1.3.4, C99 and C11 6.4.4.4).'
27480
27481     *Note Implementation-defined behavior: (cpp)Implementation-defined
27482     behavior.
27483
27484   * 'Whether differently-prefixed wide string literal tokens can be
27485     concatenated and, if so, the treatment of the resulting multibyte
27486     character sequence (C11 6.4.5).'
27487
27488     Such tokens may not be concatenated.
27489
27490   * 'The current locale used to convert a wide string literal into
27491     corresponding wide character codes (C90 6.1.4, C99 and C11 6.4.5).'
27492
27493     *Note Implementation-defined behavior: (cpp)Implementation-defined
27494     behavior.
27495
27496   * 'The value of a string literal containing a multibyte character or
27497     escape sequence not represented in the execution character set (C90
27498     6.1.4, C99 and C11 6.4.5).'
27499
27500     *Note Implementation-defined behavior: (cpp)Implementation-defined
27501     behavior.
27502
27503   * 'The encoding of any of 'wchar_t', 'char16_t', and 'char32_t' where
27504     the corresponding standard encoding macro ('__STDC_ISO_10646__',
27505     '__STDC_UTF_16__', or '__STDC_UTF_32__') is not defined (C11
27506     6.10.8.2).'
27507
27508     *Note Implementation-defined behavior: (cpp)Implementation-defined
27509     behavior.  'char16_t' and 'char32_t' literals are always encoded in
27510     UTF-16 and UTF-32 respectively.
27511
27512
27513File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
27514
275154.5 Integers
27516============
27517
27518   * 'Any extended integer types that exist in the implementation (C99
27519     and C11 6.2.5).'
27520
27521     GCC does not support any extended integer types.
27522
27523   * 'Whether signed integer types are represented using sign and
27524     magnitude, two's complement, or one's complement, and whether the
27525     extraordinary value is a trap representation or an ordinary value
27526     (C99 and C11 6.2.6.2).'
27527
27528     GCC supports only two's complement integer types, and all bit
27529     patterns are ordinary values.
27530
27531   * 'The rank of any extended integer type relative to another extended
27532     integer type with the same precision (C99 and C11 6.3.1.1).'
27533
27534     GCC does not support any extended integer types.
27535
27536   * 'The result of, or the signal raised by, converting an integer to a
27537     signed integer type when the value cannot be represented in an
27538     object of that type (C90 6.2.1.2, C99 and C11 6.3.1.3).'
27539
27540     For conversion to a type of width N, the value is reduced modulo
27541     2^N to be within range of the type; no signal is raised.
27542
27543   * 'The results of some bitwise operations on signed integers (C90
27544     6.3, C99 and C11 6.5).'
27545
27546     Bitwise operators act on the representation of the value including
27547     both the sign and value bits, where the sign bit is considered
27548     immediately above the highest-value value bit.  Signed '>>' acts on
27549     negative numbers by sign extension.
27550
27551     As an extension to the C language, GCC does not use the latitude
27552     given in C99 and C11 only to treat certain aspects of signed '<<'
27553     as undefined.  However, '-fsanitize=shift' (and
27554     '-fsanitize=undefined') will diagnose such cases.  They are also
27555     diagnosed where constant expressions are required.
27556
27557   * 'The sign of the remainder on integer division (C90 6.3.5).'
27558
27559     GCC always follows the C99 and C11 requirement that the result of
27560     division is truncated towards zero.
27561
27562
27563File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
27564
275654.6 Floating Point
27566==================
27567
27568   * 'The accuracy of the floating-point operations and of the library
27569     functions in '<math.h>' and '<complex.h>' that return
27570     floating-point results (C90, C99 and C11 5.2.4.2.2).'
27571
27572     The accuracy is unknown.
27573
27574   * 'The rounding behaviors characterized by non-standard values of
27575     'FLT_ROUNDS' (C90, C99 and C11 5.2.4.2.2).'
27576
27577     GCC does not use such values.
27578
27579   * 'The evaluation methods characterized by non-standard negative
27580     values of 'FLT_EVAL_METHOD' (C99 and C11 5.2.4.2.2).'
27581
27582     GCC does not use such values.
27583
27584   * 'The direction of rounding when an integer is converted to a
27585     floating-point number that cannot exactly represent the original
27586     value (C90 6.2.1.3, C99 and C11 6.3.1.4).'
27587
27588     C99 Annex F is followed.
27589
27590   * 'The direction of rounding when a floating-point number is
27591     converted to a narrower floating-point number (C90 6.2.1.4, C99 and
27592     C11 6.3.1.5).'
27593
27594     C99 Annex F is followed.
27595
27596   * 'How the nearest representable value or the larger or smaller
27597     representable value immediately adjacent to the nearest
27598     representable value is chosen for certain floating constants (C90
27599     6.1.3.1, C99 and C11 6.4.4.2).'
27600
27601     C99 Annex F is followed.
27602
27603   * 'Whether and how floating expressions are contracted when not
27604     disallowed by the 'FP_CONTRACT' pragma (C99 and C11 6.5).'
27605
27606     Expressions are currently only contracted if '-ffp-contract=fast',
27607     '-funsafe-math-optimizations' or '-ffast-math' are used.  This is
27608     subject to change.
27609
27610   * 'The default state for the 'FENV_ACCESS' pragma (C99 and C11
27611     7.6.1).'
27612
27613     This pragma is not implemented, but the default is to "off" unless
27614     '-frounding-math' is used in which case it is "on".
27615
27616   * 'Additional floating-point exceptions, rounding modes,
27617     environments, and classifications, and their macro names (C99 and
27618     C11 7.6, C99 and C11 7.12).'
27619
27620     This is dependent on the implementation of the C library, and is
27621     not defined by GCC itself.
27622
27623   * 'The default state for the 'FP_CONTRACT' pragma (C99 and C11
27624     7.12.2).'
27625
27626     This pragma is not implemented.  Expressions are currently only
27627     contracted if '-ffp-contract=fast', '-funsafe-math-optimizations'
27628     or '-ffast-math' are used.  This is subject to change.
27629
27630   * 'Whether the "inexact" floating-point exception can be raised when
27631     the rounded result actually does equal the mathematical result in
27632     an IEC 60559 conformant implementation (C99 F.9).'
27633
27634     This is dependent on the implementation of the C library, and is
27635     not defined by GCC itself.
27636
27637   * 'Whether the "underflow" (and "inexact") floating-point exception
27638     can be raised when a result is tiny but not inexact in an IEC 60559
27639     conformant implementation (C99 F.9).'
27640
27641     This is dependent on the implementation of the C library, and is
27642     not defined by GCC itself.
27643
27644
27645File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
27646
276474.7 Arrays and Pointers
27648=======================
27649
27650   * 'The result of converting a pointer to an integer or vice versa
27651     (C90 6.3.4, C99 and C11 6.3.2.3).'
27652
27653     A cast from pointer to integer discards most-significant bits if
27654     the pointer representation is larger than the integer type,
27655     sign-extends(1) if the pointer representation is smaller than the
27656     integer type, otherwise the bits are unchanged.
27657
27658     A cast from integer to pointer discards most-significant bits if
27659     the pointer representation is smaller than the integer type,
27660     extends according to the signedness of the integer type if the
27661     pointer representation is larger than the integer type, otherwise
27662     the bits are unchanged.
27663
27664     When casting from pointer to integer and back again, the resulting
27665     pointer must reference the same object as the original pointer,
27666     otherwise the behavior is undefined.  That is, one may not use
27667     integer arithmetic to avoid the undefined behavior of pointer
27668     arithmetic as proscribed in C99 and C11 6.5.6/8.
27669
27670   * 'The size of the result of subtracting two pointers to elements of
27671     the same array (C90 6.3.6, C99 and C11 6.5.6).'
27672
27673     The value is as specified in the standard and the type is
27674     determined by the ABI.
27675
27676   ---------- Footnotes ----------
27677
27678   (1) Future versions of GCC may zero-extend, or use a target-defined
27679'ptr_extend' pattern.  Do not rely on sign extension.
27680
27681
27682File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
27683
276844.8 Hints
27685=========
27686
27687   * 'The extent to which suggestions made by using the 'register'
27688     storage-class specifier are effective (C90 6.5.1, C99 and C11
27689     6.7.1).'
27690
27691     The 'register' specifier affects code generation only in these
27692     ways:
27693
27694        * When used as part of the register variable extension, see
27695          *note Explicit Register Variables::.
27696
27697        * When '-O0' is in use, the compiler allocates distinct stack
27698          memory for all variables that do not have the 'register'
27699          storage-class specifier; if 'register' is specified, the
27700          variable may have a shorter lifespan than the code would
27701          indicate and may never be placed in memory.
27702
27703        * On some rare x86 targets, 'setjmp' doesn't save the registers
27704          in all circumstances.  In those cases, GCC doesn't allocate
27705          any variables in registers unless they are marked 'register'.
27706
27707   * 'The extent to which suggestions made by using the inline function
27708     specifier are effective (C99 and C11 6.7.4).'
27709
27710     GCC will not inline any functions if the '-fno-inline' option is
27711     used or if '-O0' is used.  Otherwise, GCC may still be unable to
27712     inline a function for many reasons; the '-Winline' option may be
27713     used to determine if a function has not been inlined and why not.
27714
27715
27716File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
27717
277184.9 Structures, Unions, Enumerations, and Bit-Fields
27719====================================================
27720
27721   * 'A member of a union object is accessed using a member of a
27722     different type (C90 6.3.2.3).'
27723
27724     The relevant bytes of the representation of the object are treated
27725     as an object of the type used for the access.  *Note
27726     Type-punning::.  This may be a trap representation.
27727
27728   * 'Whether a "plain" 'int' bit-field is treated as a 'signed int'
27729     bit-field or as an 'unsigned int' bit-field (C90 6.5.2, C90
27730     6.5.2.1, C99 and C11 6.7.2, C99 and C11 6.7.2.1).'
27731
27732     By default it is treated as 'signed int' but this may be changed by
27733     the '-funsigned-bitfields' option.
27734
27735   * 'Allowable bit-field types other than '_Bool', 'signed int', and
27736     'unsigned int' (C99 and C11 6.7.2.1).'
27737
27738     Other integer types, such as 'long int', and enumerated types are
27739     permitted even in strictly conforming mode.
27740
27741   * 'Whether atomic types are permitted for bit-fields (C11 6.7.2.1).'
27742
27743     Atomic types are not permitted for bit-fields.
27744
27745   * 'Whether a bit-field can straddle a storage-unit boundary (C90
27746     6.5.2.1, C99 and C11 6.7.2.1).'
27747
27748     Determined by ABI.
27749
27750   * 'The order of allocation of bit-fields within a unit (C90 6.5.2.1,
27751     C99 and C11 6.7.2.1).'
27752
27753     Determined by ABI.
27754
27755   * 'The alignment of non-bit-field members of structures (C90 6.5.2.1,
27756     C99 and C11 6.7.2.1).'
27757
27758     Determined by ABI.
27759
27760   * 'The integer type compatible with each enumerated type (C90
27761     6.5.2.2, C99 and C11 6.7.2.2).'
27762
27763     Normally, the type is 'unsigned int' if there are no negative
27764     values in the enumeration, otherwise 'int'.  If '-fshort-enums' is
27765     specified, then if there are negative values it is the first of
27766     'signed char', 'short' and 'int' that can represent all the values,
27767     otherwise it is the first of 'unsigned char', 'unsigned short' and
27768     'unsigned int' that can represent all the values.
27769
27770     On some targets, '-fshort-enums' is the default; this is determined
27771     by the ABI.
27772
27773
27774File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
27775
277764.10 Qualifiers
27777===============
27778
27779   * 'What constitutes an access to an object that has
27780     volatile-qualified type (C90 6.5.3, C99 and C11 6.7.3).'
27781
27782     Such an object is normally accessed by pointers and used for
27783     accessing hardware.  In most expressions, it is intuitively obvious
27784     what is a read and what is a write.  For example
27785
27786          volatile int *dst = SOMEVALUE;
27787          volatile int *src = SOMEOTHERVALUE;
27788          *dst = *src;
27789
27790     will cause a read of the volatile object pointed to by SRC and
27791     store the value into the volatile object pointed to by DST.  There
27792     is no guarantee that these reads and writes are atomic, especially
27793     for objects larger than 'int'.
27794
27795     However, if the volatile storage is not being modified, and the
27796     value of the volatile storage is not used, then the situation is
27797     less obvious.  For example
27798
27799          volatile int *src = SOMEVALUE;
27800          *src;
27801
27802     According to the C standard, such an expression is an rvalue whose
27803     type is the unqualified version of its original type, i.e. 'int'.
27804     Whether GCC interprets this as a read of the volatile object being
27805     pointed to or only as a request to evaluate the expression for its
27806     side effects depends on this type.
27807
27808     If it is a scalar type, or on most targets an aggregate type whose
27809     only member object is of a scalar type, or a union type whose
27810     member objects are of scalar types, the expression is interpreted
27811     by GCC as a read of the volatile object; in the other cases, the
27812     expression is only evaluated for its side effects.
27813
27814
27815File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
27816
278174.11 Declarators
27818================
27819
27820   * 'The maximum number of declarators that may modify an arithmetic,
27821     structure or union type (C90 6.5.4).'
27822
27823     GCC is only limited by available memory.
27824
27825
27826File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
27827
278284.12 Statements
27829===============
27830
27831   * 'The maximum number of 'case' values in a 'switch' statement (C90
27832     6.6.4.2).'
27833
27834     GCC is only limited by available memory.
27835
27836
27837File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
27838
278394.13 Preprocessing Directives
27840=============================
27841
27842*Note Implementation-defined behavior: (cpp)Implementation-defined
27843behavior, for details of these aspects of implementation-defined
27844behavior.
27845
27846   * 'The locations within '#pragma' directives where header name
27847     preprocessing tokens are recognized (C11 6.4, C11 6.4.7).'
27848
27849   * 'How sequences in both forms of header names are mapped to headers
27850     or external source file names (C90 6.1.7, C99 and C11 6.4.7).'
27851
27852   * 'Whether the value of a character constant in a constant expression
27853     that controls conditional inclusion matches the value of the same
27854     character constant in the execution character set (C90 6.8.1, C99
27855     and C11 6.10.1).'
27856
27857   * 'Whether the value of a single-character character constant in a
27858     constant expression that controls conditional inclusion may have a
27859     negative value (C90 6.8.1, C99 and C11 6.10.1).'
27860
27861   * 'The places that are searched for an included '<>' delimited
27862     header, and how the places are specified or the header is
27863     identified (C90 6.8.2, C99 and C11 6.10.2).'
27864
27865   * 'How the named source file is searched for in an included '""'
27866     delimited header (C90 6.8.2, C99 and C11 6.10.2).'
27867
27868   * 'The method by which preprocessing tokens (possibly resulting from
27869     macro expansion) in a '#include' directive are combined into a
27870     header name (C90 6.8.2, C99 and C11 6.10.2).'
27871
27872   * 'The nesting limit for '#include' processing (C90 6.8.2, C99 and
27873     C11 6.10.2).'
27874
27875   * 'Whether the '#' operator inserts a '\' character before the '\'
27876     character that begins a universal character name in a character
27877     constant or string literal (C99 and C11 6.10.3.2).'
27878
27879   * 'The behavior on each recognized non-'STDC #pragma' directive (C90
27880     6.8.6, C99 and C11 6.10.6).'
27881
27882     *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by GCC
27883     on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
27884     details of target-specific pragmas.
27885
27886   * 'The definitions for '__DATE__' and '__TIME__' when respectively,
27887     the date and time of translation are not available (C90 6.8.8, C99
27888     6.10.8, C11 6.10.8.1).'
27889
27890
27891File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
27892
278934.14 Library Functions
27894======================
27895
27896The behavior of most of these points are dependent on the implementation
27897of the C library, and are not defined by GCC itself.
27898
27899   * 'The null pointer constant to which the macro 'NULL' expands (C90
27900     7.1.6, C99 7.17, C11 7.19).'
27901
27902     In '<stddef.h>', 'NULL' expands to '((void *)0)'.  GCC does not
27903     provide the other headers which define 'NULL' and some library
27904     implementations may use other definitions in those headers.
27905
27906
27907File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
27908
279094.15 Architecture
27910=================
27911
27912   * 'The values or expressions assigned to the macros specified in the
27913     headers '<float.h>', '<limits.h>', and '<stdint.h>' (C90, C99 and
27914     C11 5.2.4.2, C99 7.18.2, C99 7.18.3, C11 7.20.2, C11 7.20.3).'
27915
27916     Determined by ABI.
27917
27918   * 'The result of attempting to indirectly access an object with
27919     automatic or thread storage duration from a thread other than the
27920     one with which it is associated (C11 6.2.4).'
27921
27922     Such accesses are supported, subject to the same requirements for
27923     synchronization for concurrent accesses as for concurrent accesses
27924     to any object.
27925
27926   * 'The number, order, and encoding of bytes in any object (when not
27927     explicitly specified in this International Standard) (C99 and C11
27928     6.2.6.1).'
27929
27930     Determined by ABI.
27931
27932   * 'Whether any extended alignments are supported and the contexts in
27933     which they are supported (C11 6.2.8).'
27934
27935     Extended alignments up to 2^{28} (bytes) are supported for objects
27936     of automatic storage duration.  Alignments supported for objects of
27937     static and thread storage duration are determined by the ABI.
27938
27939   * 'Valid alignment values other than those returned by an _Alignof
27940     expression for fundamental types, if any (C11 6.2.8).'
27941
27942     Valid alignments are powers of 2 up to and including 2^{28}.
27943
27944   * 'The value of the result of the 'sizeof' and '_Alignof' operators
27945     (C90 6.3.3.4, C99 and C11 6.5.3.4).'
27946
27947     Determined by ABI.
27948
27949
27950File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
27951
279524.16 Locale-Specific Behavior
27953=============================
27954
27955The behavior of these points are dependent on the implementation of the
27956C library, and are not defined by GCC itself.
27957
27958
27959File: gcc.info,  Node: C++ Implementation,  Next: C Extensions,  Prev: C Implementation,  Up: Top
27960
279615 C++ Implementation-Defined Behavior
27962*************************************
27963
27964A conforming implementation of ISO C++ is required to document its
27965choice of behavior in each of the areas that are designated
27966"implementation defined".  The following lists all such areas, along
27967with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC
2796814882:2003 standards.  Some areas are only implementation-defined in one
27969version of the standard.
27970
27971 Some choices depend on the externally determined ABI for the platform
27972(including standard character encodings) which GCC follows; these are
27973listed as "determined by ABI" below.  *Note Binary Compatibility:
27974Compatibility, and <http://gcc.gnu.org/readings.html>.  Some choices are
27975documented in the preprocessor manual.  *Note Implementation-defined
27976behavior: (cpp)Implementation-defined behavior.  Some choices are
27977documented in the corresponding document for the C language.  *Note C
27978Implementation::.  Some choices are made by the library and operating
27979system (or other environment when compiling for a freestanding
27980environment); refer to their documentation for details.
27981
27982* Menu:
27983
27984* Conditionally-supported behavior::
27985* Exception handling::
27986
27987
27988File: gcc.info,  Node: Conditionally-supported behavior,  Next: Exception handling,  Up: C++ Implementation
27989
279905.1 Conditionally-Supported Behavior
27991====================================
27992
27993'Each implementation shall include documentation that identifies all
27994conditionally-supported constructs that it does not support (C++0x
279951.4).'
27996
27997   * 'Whether an argument of class type with a non-trivial copy
27998     constructor or destructor can be passed to ... (C++0x 5.2.2).'
27999
28000     Such argument passing is supported, using the same
28001     pass-by-invisible-reference approach used for normal function
28002     arguments of such types.
28003
28004
28005File: gcc.info,  Node: Exception handling,  Prev: Conditionally-supported behavior,  Up: C++ Implementation
28006
280075.2 Exception Handling
28008======================
28009
28010   * 'In the situation where no matching handler is found, it is
28011     implementation-defined whether or not the stack is unwound before
28012     std::terminate() is called (C++98 15.5.1).'
28013
28014     The stack is not unwound before std::terminate is called.
28015
28016 c Copyright (C) 1988-2019 Free Software Foundation, Inc.
28017
28018
28019File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C++ Implementation,  Up: Top
28020
280216 Extensions to the C Language Family
28022*************************************
28023
28024GNU C provides several language features not found in ISO standard C.
28025(The '-pedantic' option directs GCC to print a warning message if any of
28026these features is used.)  To test for the availability of these features
28027in conditional compilation, check for a predefined macro '__GNUC__',
28028which is always defined under GCC.
28029
28030 These extensions are available in C and Objective-C.  Most of them are
28031also available in C++.  *Note Extensions to the C++ Language: C++
28032Extensions, for extensions that apply _only_ to C++.
28033
28034 Some features that are in ISO C99 but not C90 or C++ are also, as
28035extensions, accepted by GCC in C90 mode and in C++.
28036
28037* Menu:
28038
28039* Statement Exprs::     Putting statements and declarations inside expressions.
28040* Local Labels::        Labels local to a block.
28041* Labels as Values::    Getting pointers to labels, and computed gotos.
28042* Nested Functions::    Nested function in GNU C.
28043* Nonlocal Gotos::      Nonlocal gotos.
28044* Constructing Calls::  Dispatching a call to another function.
28045* Typeof::              'typeof': referring to the type of an expression.
28046* Conditionals::        Omitting the middle operand of a '?:' expression.
28047* __int128::		128-bit integers--'__int128'.
28048* Long Long::           Double-word integers--'long long int'.
28049* Complex::             Data types for complex numbers.
28050* Floating Types::      Additional Floating Types.
28051* Half-Precision::      Half-Precision Floating Point.
28052* Decimal Float::       Decimal Floating Types.
28053* Hex Floats::          Hexadecimal floating-point constants.
28054* Fixed-Point::         Fixed-Point Types.
28055* Named Address Spaces::Named address spaces.
28056* Zero Length::         Zero-length arrays.
28057* Empty Structures::    Structures with no members.
28058* Variable Length::     Arrays whose length is computed at run time.
28059* Variadic Macros::     Macros with a variable number of arguments.
28060* Escaped Newlines::    Slightly looser rules for escaped newlines.
28061* Subscripting::        Any array can be subscripted, even if not an lvalue.
28062* Pointer Arith::       Arithmetic on 'void'-pointers and function pointers.
28063* Variadic Pointer Args::  Pointer arguments to variadic functions.
28064* Pointers to Arrays::  Pointers to arrays with qualifiers work as expected.
28065* Initializers::        Non-constant initializers.
28066* Compound Literals::   Compound literals give structures, unions
28067                        or arrays as values.
28068* Designated Inits::    Labeling elements of initializers.
28069* Case Ranges::         'case 1 ... 9' and such.
28070* Cast to Union::       Casting to union type from any member of the union.
28071* Mixed Declarations::  Mixing declarations and code.
28072* Function Attributes:: Declaring that functions have no side effects,
28073                        or that they can never return.
28074* Variable Attributes:: Specifying attributes of variables.
28075* Type Attributes::     Specifying attributes of types.
28076* Label Attributes::    Specifying attributes on labels.
28077* Enumerator Attributes:: Specifying attributes on enumerators.
28078* Statement Attributes:: Specifying attributes on statements.
28079* Attribute Syntax::    Formal syntax for attributes.
28080* Function Prototypes:: Prototype declarations and old-style definitions.
28081* C++ Comments::        C++ comments are recognized.
28082* Dollar Signs::        Dollar sign is allowed in identifiers.
28083* Character Escapes::   '\e' stands for the character <ESC>.
28084* Alignment::           Determining the alignment of a function, type or variable.
28085* Inline::              Defining inline functions (as fast as macros).
28086* Volatiles::           What constitutes an access to a volatile object.
28087* Using Assembly Language with C:: Instructions and extensions for interfacing C with assembler.
28088* Alternate Keywords::  '__const__', '__asm__', etc., for header files.
28089* Incomplete Enums::    'enum foo;', with details to follow.
28090* Function Names::      Printable strings which are the name of the current
28091                        function.
28092* Return Address::      Getting the return or frame address of a function.
28093* Vector Extensions::   Using vector instructions through built-in functions.
28094* Offsetof::            Special syntax for implementing 'offsetof'.
28095* __sync Builtins::     Legacy built-in functions for atomic memory access.
28096* __atomic Builtins::   Atomic built-in functions with memory model.
28097* Integer Overflow Builtins:: Built-in functions to perform arithmetics and
28098                        arithmetic overflow checking.
28099* x86 specific memory model extensions for transactional memory:: x86 memory models.
28100* Object Size Checking:: Built-in functions for limited buffer overflow
28101                        checking.
28102* Other Builtins::      Other built-in functions.
28103* Target Builtins::     Built-in functions specific to particular targets.
28104* Target Format Checks:: Format checks specific to particular targets.
28105* Pragmas::             Pragmas accepted by GCC.
28106* Unnamed Fields::      Unnamed struct/union fields within structs/unions.
28107* Thread-Local::        Per-thread variables.
28108* Binary constants::    Binary constants using the '0b' prefix.
28109
28110
28111File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
28112
281136.1 Statements and Declarations in Expressions
28114==============================================
28115
28116A compound statement enclosed in parentheses may appear as an expression
28117in GNU C.  This allows you to use loops, switches, and local variables
28118within an expression.
28119
28120 Recall that a compound statement is a sequence of statements surrounded
28121by braces; in this construct, parentheses go around the braces.  For
28122example:
28123
28124     ({ int y = foo (); int z;
28125        if (y > 0) z = y;
28126        else z = - y;
28127        z; })
28128
28129is a valid (though slightly more complex than necessary) expression for
28130the absolute value of 'foo ()'.
28131
28132 The last thing in the compound statement should be an expression
28133followed by a semicolon; the value of this subexpression serves as the
28134value of the entire construct.  (If you use some other kind of statement
28135last within the braces, the construct has type 'void', and thus
28136effectively no value.)
28137
28138 This feature is especially useful in making macro definitions "safe"
28139(so that they evaluate each operand exactly once).  For example, the
28140"maximum" function is commonly defined as a macro in standard C as
28141follows:
28142
28143     #define max(a,b) ((a) > (b) ? (a) : (b))
28144
28145But this definition computes either A or B twice, with bad results if
28146the operand has side effects.  In GNU C, if you know the type of the
28147operands (here taken as 'int'), you can avoid this problem by defining
28148the macro as follows:
28149
28150     #define maxint(a,b) \
28151       ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
28152
28153 Note that introducing variable declarations (as we do in 'maxint') can
28154cause variable shadowing, so while this example using the 'max' macro
28155produces correct results:
28156     int _a = 1, _b = 2, c;
28157     c = max (_a, _b);
28158this example using maxint will not:
28159     int _a = 1, _b = 2, c;
28160     c = maxint (_a, _b);
28161
28162 This problem may for instance occur when we use this pattern
28163recursively, like so:
28164
28165     #define maxint3(a, b, c) \
28166       ({int _a = (a), _b = (b), _c = (c); maxint (maxint (_a, _b), _c); })
28167
28168 Embedded statements are not allowed in constant expressions, such as
28169the value of an enumeration constant, the width of a bit-field, or the
28170initial value of a static variable.
28171
28172 If you don't know the type of the operand, you can still do this, but
28173you must use 'typeof' or '__auto_type' (*note Typeof::).
28174
28175 In G++, the result value of a statement expression undergoes array and
28176function pointer decay, and is returned by value to the enclosing
28177expression.  For instance, if 'A' is a class, then
28178
28179             A a;
28180
28181             ({a;}).Foo ()
28182
28183constructs a temporary 'A' object to hold the result of the statement
28184expression, and that is used to invoke 'Foo'.  Therefore the 'this'
28185pointer observed by 'Foo' is not the address of 'a'.
28186
28187 In a statement expression, any temporaries created within a statement
28188are destroyed at that statement's end.  This makes statement expressions
28189inside macros slightly different from function calls.  In the latter
28190case temporaries introduced during argument evaluation are destroyed at
28191the end of the statement that includes the function call.  In the
28192statement expression case they are destroyed during the statement
28193expression.  For instance,
28194
28195     #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
28196     template<typename T> T function(T a) { T b = a; return b + 3; }
28197
28198     void foo ()
28199     {
28200       macro (X ());
28201       function (X ());
28202     }
28203
28204has different places where temporaries are destroyed.  For the 'macro'
28205case, the temporary 'X' is destroyed just after the initialization of
28206'b'.  In the 'function' case that temporary is destroyed when the
28207function returns.
28208
28209 These considerations mean that it is probably a bad idea to use
28210statement expressions of this form in header files that are designed to
28211work with C++.  (Note that some versions of the GNU C Library contained
28212header files using statement expressions that lead to precisely this
28213bug.)
28214
28215 Jumping into a statement expression with 'goto' or using a 'switch'
28216statement outside the statement expression with a 'case' or 'default'
28217label inside the statement expression is not permitted.  Jumping into a
28218statement expression with a computed 'goto' (*note Labels as Values::)
28219has undefined behavior.  Jumping out of a statement expression is
28220permitted, but if the statement expression is part of a larger
28221expression then it is unspecified which other subexpressions of that
28222expression have been evaluated except where the language definition
28223requires certain subexpressions to be evaluated before or after the
28224statement expression.  A 'break' or 'continue' statement inside of a
28225statement expression used in 'while', 'do' or 'for' loop or 'switch'
28226statement condition or 'for' statement init or increment expressions
28227jumps to an outer loop or 'switch' statement if any (otherwise it is an
28228error), rather than to the loop or 'switch' statement in whose condition
28229or init or increment expression it appears.  In any case, as with a
28230function call, the evaluation of a statement expression is not
28231interleaved with the evaluation of other parts of the containing
28232expression.  For example,
28233
28234       foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
28235
28236calls 'foo' and 'bar1' and does not call 'baz' but may or may not call
28237'bar2'.  If 'bar2' is called, it is called after 'foo' and before
28238'bar1'.
28239
28240
28241File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
28242
282436.2 Locally Declared Labels
28244===========================
28245
28246GCC allows you to declare "local labels" in any nested block scope.  A
28247local label is just like an ordinary label, but you can only reference
28248it (with a 'goto' statement, or by taking its address) within the block
28249in which it is declared.
28250
28251 A local label declaration looks like this:
28252
28253     __label__ LABEL;
28254
28255or
28256
28257     __label__ LABEL1, LABEL2, /* ... */;
28258
28259 Local label declarations must come at the beginning of the block,
28260before any ordinary declarations or statements.
28261
28262 The label declaration defines the label _name_, but does not define the
28263label itself.  You must do this in the usual way, with 'LABEL:', within
28264the statements of the statement expression.
28265
28266 The local label feature is useful for complex macros.  If a macro
28267contains nested loops, a 'goto' can be useful for breaking out of them.
28268However, an ordinary label whose scope is the whole function cannot be
28269used: if the macro can be expanded several times in one function, the
28270label is multiply defined in that function.  A local label avoids this
28271problem.  For example:
28272
28273     #define SEARCH(value, array, target)              \
28274     do {                                              \
28275       __label__ found;                                \
28276       typeof (target) _SEARCH_target = (target);      \
28277       typeof (*(array)) *_SEARCH_array = (array);     \
28278       int i, j;                                       \
28279       int value;                                      \
28280       for (i = 0; i < max; i++)                       \
28281         for (j = 0; j < max; j++)                     \
28282           if (_SEARCH_array[i][j] == _SEARCH_target)  \
28283             { (value) = i; goto found; }              \
28284       (value) = -1;                                   \
28285      found:;                                          \
28286     } while (0)
28287
28288 This could also be written using a statement expression:
28289
28290     #define SEARCH(array, target)                     \
28291     ({                                                \
28292       __label__ found;                                \
28293       typeof (target) _SEARCH_target = (target);      \
28294       typeof (*(array)) *_SEARCH_array = (array);     \
28295       int i, j;                                       \
28296       int value;                                      \
28297       for (i = 0; i < max; i++)                       \
28298         for (j = 0; j < max; j++)                     \
28299           if (_SEARCH_array[i][j] == _SEARCH_target)  \
28300             { value = i; goto found; }                \
28301       value = -1;                                     \
28302      found:                                           \
28303       value;                                          \
28304     })
28305
28306 Local label declarations also make the labels they declare visible to
28307nested functions, if there are any.  *Note Nested Functions::, for
28308details.
28309
28310
28311File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
28312
283136.3 Labels as Values
28314====================
28315
28316You can get the address of a label defined in the current function (or a
28317containing function) with the unary operator '&&'.  The value has type
28318'void *'.  This value is a constant and can be used wherever a constant
28319of that type is valid.  For example:
28320
28321     void *ptr;
28322     /* ... */
28323     ptr = &&foo;
28324
28325 To use these values, you need to be able to jump to one.  This is done
28326with the computed goto statement(1), 'goto *EXP;'.  For example,
28327
28328     goto *ptr;
28329
28330Any expression of type 'void *' is allowed.
28331
28332 One way of using these constants is in initializing a static array that
28333serves as a jump table:
28334
28335     static void *array[] = { &&foo, &&bar, &&hack };
28336
28337Then you can select a label with indexing, like this:
28338
28339     goto *array[i];
28340
28341Note that this does not check whether the subscript is in bounds--array
28342indexing in C never does that.
28343
28344 Such an array of label values serves a purpose much like that of the
28345'switch' statement.  The 'switch' statement is cleaner, so use that
28346rather than an array unless the problem does not fit a 'switch'
28347statement very well.
28348
28349 Another use of label values is in an interpreter for threaded code.
28350The labels within the interpreter function can be stored in the threaded
28351code for super-fast dispatching.
28352
28353 You may not use this mechanism to jump to code in a different function.
28354If you do that, totally unpredictable things happen.  The best way to
28355avoid this is to store the label address only in automatic variables and
28356never pass it as an argument.
28357
28358 An alternate way to write the above example is
28359
28360     static const int array[] = { &&foo - &&foo, &&bar - &&foo,
28361                                  &&hack - &&foo };
28362     goto *(&&foo + array[i]);
28363
28364This is more friendly to code living in shared libraries, as it reduces
28365the number of dynamic relocations that are needed, and by consequence,
28366allows the data to be read-only.  This alternative with label
28367differences is not supported for the AVR target, please use the first
28368approach for AVR programs.
28369
28370 The '&&foo' expressions for the same label might have different values
28371if the containing function is inlined or cloned.  If a program relies on
28372them being always the same, '__attribute__((__noinline__,__noclone__))'
28373should be used to prevent inlining and cloning.  If '&&foo' is used in a
28374static variable initializer, inlining and cloning is forbidden.
28375
28376   ---------- Footnotes ----------
28377
28378   (1) The analogous feature in Fortran is called an assigned goto, but
28379that name seems inappropriate in C, where one can do more than simply
28380store label addresses in label variables.
28381
28382
28383File: gcc.info,  Node: Nested Functions,  Next: Nonlocal Gotos,  Prev: Labels as Values,  Up: C Extensions
28384
283856.4 Nested Functions
28386====================
28387
28388A "nested function" is a function defined inside another function.
28389Nested functions are supported as an extension in GNU C, but are not
28390supported by GNU C++.
28391
28392 The nested function's name is local to the block where it is defined.
28393For example, here we define a nested function named 'square', and call
28394it twice:
28395
28396     foo (double a, double b)
28397     {
28398       double square (double z) { return z * z; }
28399
28400       return square (a) + square (b);
28401     }
28402
28403 The nested function can access all the variables of the containing
28404function that are visible at the point of its definition.  This is
28405called "lexical scoping".  For example, here we show a nested function
28406which uses an inherited variable named 'offset':
28407
28408     bar (int *array, int offset, int size)
28409     {
28410       int access (int *array, int index)
28411         { return array[index + offset]; }
28412       int i;
28413       /* ... */
28414       for (i = 0; i < size; i++)
28415         /* ... */ access (array, i) /* ... */
28416     }
28417
28418 Nested function definitions are permitted within functions in the
28419places where variable definitions are allowed; that is, in any block,
28420mixed with the other declarations and statements in the block.
28421
28422 It is possible to call the nested function from outside the scope of
28423its name by storing its address or passing the address to another
28424function:
28425
28426     hack (int *array, int size)
28427     {
28428       void store (int index, int value)
28429         { array[index] = value; }
28430
28431       intermediate (store, size);
28432     }
28433
28434 Here, the function 'intermediate' receives the address of 'store' as an
28435argument.  If 'intermediate' calls 'store', the arguments given to
28436'store' are used to store into 'array'.  But this technique works only
28437so long as the containing function ('hack', in this example) does not
28438exit.
28439
28440 If you try to call the nested function through its address after the
28441containing function exits, all hell breaks loose.  If you try to call it
28442after a containing scope level exits, and if it refers to some of the
28443variables that are no longer in scope, you may be lucky, but it's not
28444wise to take the risk.  If, however, the nested function does not refer
28445to anything that has gone out of scope, you should be safe.
28446
28447 GCC implements taking the address of a nested function using a
28448technique called "trampolines".  This technique was described in
28449'Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
28450Proceedings, October 17-21, 1988).
28451
28452 A nested function can jump to a label inherited from a containing
28453function, provided the label is explicitly declared in the containing
28454function (*note Local Labels::).  Such a jump returns instantly to the
28455containing function, exiting the nested function that did the 'goto' and
28456any intermediate functions as well.  Here is an example:
28457
28458     bar (int *array, int offset, int size)
28459     {
28460       __label__ failure;
28461       int access (int *array, int index)
28462         {
28463           if (index > size)
28464             goto failure;
28465           return array[index + offset];
28466         }
28467       int i;
28468       /* ... */
28469       for (i = 0; i < size; i++)
28470         /* ... */ access (array, i) /* ... */
28471       /* ... */
28472       return 0;
28473
28474      /* Control comes here from 'access'
28475         if it detects an error.  */
28476      failure:
28477       return -1;
28478     }
28479
28480 A nested function always has no linkage.  Declaring one with 'extern'
28481or 'static' is erroneous.  If you need to declare the nested function
28482before its definition, use 'auto' (which is otherwise meaningless for
28483function declarations).
28484
28485     bar (int *array, int offset, int size)
28486     {
28487       __label__ failure;
28488       auto int access (int *, int);
28489       /* ... */
28490       int access (int *array, int index)
28491         {
28492           if (index > size)
28493             goto failure;
28494           return array[index + offset];
28495         }
28496       /* ... */
28497     }
28498
28499
28500File: gcc.info,  Node: Nonlocal Gotos,  Next: Constructing Calls,  Prev: Nested Functions,  Up: C Extensions
28501
285026.5 Nonlocal Gotos
28503==================
28504
28505GCC provides the built-in functions '__builtin_setjmp' and
28506'__builtin_longjmp' which are similar to, but not interchangeable with,
28507the C library functions 'setjmp' and 'longjmp'.  The built-in versions
28508are used internally by GCC's libraries to implement exception handling
28509on some targets.  You should use the standard C library functions
28510declared in '<setjmp.h>' in user code instead of the builtins.
28511
28512 The built-in versions of these functions use GCC's normal mechanisms to
28513save and restore registers using the stack on function entry and exit.
28514The jump buffer argument BUF holds only the information needed to
28515restore the stack frame, rather than the entire set of saved register
28516values.
28517
28518 An important caveat is that GCC arranges to save and restore only those
28519registers known to the specific architecture variant being compiled for.
28520This can make '__builtin_setjmp' and '__builtin_longjmp' more efficient
28521than their library counterparts in some cases, but it can also cause
28522incorrect and mysterious behavior when mixing with code that uses the
28523full register set.
28524
28525 You should declare the jump buffer argument BUF to the built-in
28526functions as:
28527
28528     #include <stdint.h>
28529     intptr_t BUF[5];
28530
28531 -- Built-in Function: int __builtin_setjmp (intptr_t *BUF)
28532     This function saves the current stack context in BUF.
28533     '__builtin_setjmp' returns 0 when returning directly, and 1 when
28534     returning from '__builtin_longjmp' using the same BUF.
28535
28536 -- Built-in Function: void __builtin_longjmp (intptr_t *BUF, int VAL)
28537     This function restores the stack context in BUF, saved by a
28538     previous call to '__builtin_setjmp'.  After '__builtin_longjmp' is
28539     finished, the program resumes execution as if the matching
28540     '__builtin_setjmp' returns the value VAL, which must be 1.
28541
28542     Because '__builtin_longjmp' depends on the function return
28543     mechanism to restore the stack context, it cannot be called from
28544     the same function calling '__builtin_setjmp' to initialize BUF.  It
28545     can only be called from a function called (directly or indirectly)
28546     from the function calling '__builtin_setjmp'.
28547
28548
28549File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nonlocal Gotos,  Up: C Extensions
28550
285516.6 Constructing Function Calls
28552===============================
28553
28554Using the built-in functions described below, you can record the
28555arguments a function received, and call another function with the same
28556arguments, without knowing the number or types of the arguments.
28557
28558 You can also record the return value of that function call, and later
28559return that value, without knowing what data type the function tried to
28560return (as long as your caller expects that data type).
28561
28562 However, these built-in functions may interact badly with some
28563sophisticated features or other extensions of the language.  It is,
28564therefore, not recommended to use them outside very simple functions
28565acting as mere forwarders for their arguments.
28566
28567 -- Built-in Function: void * __builtin_apply_args ()
28568     This built-in function returns a pointer to data describing how to
28569     perform a call with the same arguments as are passed to the current
28570     function.
28571
28572     The function saves the arg pointer register, structure value
28573     address, and all registers that might be used to pass arguments to
28574     a function into a block of memory allocated on the stack.  Then it
28575     returns the address of that block.
28576
28577 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
28578          *ARGUMENTS, size_t SIZE)
28579     This built-in function invokes FUNCTION with a copy of the
28580     parameters described by ARGUMENTS and SIZE.
28581
28582     The value of ARGUMENTS should be the value returned by
28583     '__builtin_apply_args'.  The argument SIZE specifies the size of
28584     the stack argument data, in bytes.
28585
28586     This function returns a pointer to data describing how to return
28587     whatever value is returned by FUNCTION.  The data is saved in a
28588     block of memory allocated on the stack.
28589
28590     It is not always simple to compute the proper value for SIZE.  The
28591     value is used by '__builtin_apply' to compute the amount of data
28592     that should be pushed on the stack and copied from the incoming
28593     argument area.
28594
28595 -- Built-in Function: void __builtin_return (void *RESULT)
28596     This built-in function returns the value described by RESULT from
28597     the containing function.  You should specify, for RESULT, a value
28598     returned by '__builtin_apply'.
28599
28600 -- Built-in Function: __builtin_va_arg_pack ()
28601     This built-in function represents all anonymous arguments of an
28602     inline function.  It can be used only in inline functions that are
28603     always inlined, never compiled as a separate function, such as
28604     those using '__attribute__ ((__always_inline__))' or '__attribute__
28605     ((__gnu_inline__))' extern inline functions.  It must be only
28606     passed as last argument to some other function with variable
28607     arguments.  This is useful for writing small wrapper inlines for
28608     variable argument functions, when using preprocessor macros is
28609     undesirable.  For example:
28610          extern int myprintf (FILE *f, const char *format, ...);
28611          extern inline __attribute__ ((__gnu_inline__)) int
28612          myprintf (FILE *f, const char *format, ...)
28613          {
28614            int r = fprintf (f, "myprintf: ");
28615            if (r < 0)
28616              return r;
28617            int s = fprintf (f, format, __builtin_va_arg_pack ());
28618            if (s < 0)
28619              return s;
28620            return r + s;
28621          }
28622
28623 -- Built-in Function: size_t __builtin_va_arg_pack_len ()
28624     This built-in function returns the number of anonymous arguments of
28625     an inline function.  It can be used only in inline functions that
28626     are always inlined, never compiled as a separate function, such as
28627     those using '__attribute__ ((__always_inline__))' or '__attribute__
28628     ((__gnu_inline__))' extern inline functions.  For example following
28629     does link- or run-time checking of open arguments for optimized
28630     code:
28631          #ifdef __OPTIMIZE__
28632          extern inline __attribute__((__gnu_inline__)) int
28633          myopen (const char *path, int oflag, ...)
28634          {
28635            if (__builtin_va_arg_pack_len () > 1)
28636              warn_open_too_many_arguments ();
28637
28638            if (__builtin_constant_p (oflag))
28639              {
28640                if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
28641                  {
28642                    warn_open_missing_mode ();
28643                    return __open_2 (path, oflag);
28644                  }
28645                return open (path, oflag, __builtin_va_arg_pack ());
28646              }
28647
28648            if (__builtin_va_arg_pack_len () < 1)
28649              return __open_2 (path, oflag);
28650
28651            return open (path, oflag, __builtin_va_arg_pack ());
28652          }
28653          #endif
28654
28655
28656File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
28657
286586.7 Referring to a Type with 'typeof'
28659=====================================
28660
28661Another way to refer to the type of an expression is with 'typeof'.  The
28662syntax of using of this keyword looks like 'sizeof', but the construct
28663acts semantically like a type name defined with 'typedef'.
28664
28665 There are two ways of writing the argument to 'typeof': with an
28666expression or with a type.  Here is an example with an expression:
28667
28668     typeof (x[0](1))
28669
28670This assumes that 'x' is an array of pointers to functions; the type
28671described is that of the values of the functions.
28672
28673 Here is an example with a typename as the argument:
28674
28675     typeof (int *)
28676
28677Here the type described is that of pointers to 'int'.
28678
28679 If you are writing a header file that must work when included in ISO C
28680programs, write '__typeof__' instead of 'typeof'.  *Note Alternate
28681Keywords::.
28682
28683 A 'typeof' construct can be used anywhere a typedef name can be used.
28684For example, you can use it in a declaration, in a cast, or inside of
28685'sizeof' or 'typeof'.
28686
28687 The operand of 'typeof' is evaluated for its side effects if and only
28688if it is an expression of variably modified type or the name of such a
28689type.
28690
28691 'typeof' is often useful in conjunction with statement expressions
28692(*note Statement Exprs::).  Here is how the two together can be used to
28693define a safe "maximum" macro which operates on any arithmetic type and
28694evaluates each of its arguments exactly once:
28695
28696     #define max(a,b) \
28697       ({ typeof (a) _a = (a); \
28698           typeof (b) _b = (b); \
28699         _a > _b ? _a : _b; })
28700
28701 The reason for using names that start with underscores for the local
28702variables is to avoid conflicts with variable names that occur within
28703the expressions that are substituted for 'a' and 'b'.  Eventually we
28704hope to design a new form of declaration syntax that allows you to
28705declare variables whose scopes start only after their initializers; this
28706will be a more reliable way to prevent such conflicts.
28707
28708Some more examples of the use of 'typeof':
28709
28710   * This declares 'y' with the type of what 'x' points to.
28711
28712          typeof (*x) y;
28713
28714   * This declares 'y' as an array of such values.
28715
28716          typeof (*x) y[4];
28717
28718   * This declares 'y' as an array of pointers to characters:
28719
28720          typeof (typeof (char *)[4]) y;
28721
28722     It is equivalent to the following traditional C declaration:
28723
28724          char *y[4];
28725
28726     To see the meaning of the declaration using 'typeof', and why it
28727     might be a useful way to write, rewrite it with these macros:
28728
28729          #define pointer(T)  typeof(T *)
28730          #define array(T, N) typeof(T [N])
28731
28732     Now the declaration can be rewritten this way:
28733
28734          array (pointer (char), 4) y;
28735
28736     Thus, 'array (pointer (char), 4)' is the type of arrays of 4
28737     pointers to 'char'.
28738
28739 In GNU C, but not GNU C++, you may also declare the type of a variable
28740as '__auto_type'.  In that case, the declaration must declare only one
28741variable, whose declarator must just be an identifier, the declaration
28742must be initialized, and the type of the variable is determined by the
28743initializer; the name of the variable is not in scope until after the
28744initializer.  (In C++, you should use C++11 'auto' for this purpose.)
28745Using '__auto_type', the "maximum" macro above could be written as:
28746
28747     #define max(a,b) \
28748       ({ __auto_type _a = (a); \
28749           __auto_type _b = (b); \
28750         _a > _b ? _a : _b; })
28751
28752 Using '__auto_type' instead of 'typeof' has two advantages:
28753
28754   * Each argument to the macro appears only once in the expansion of
28755     the macro.  This prevents the size of the macro expansion growing
28756     exponentially when calls to such macros are nested inside arguments
28757     of such macros.
28758
28759   * If the argument to the macro has variably modified type, it is
28760     evaluated only once when using '__auto_type', but twice if 'typeof'
28761     is used.
28762
28763
28764File: gcc.info,  Node: Conditionals,  Next: __int128,  Prev: Typeof,  Up: C Extensions
28765
287666.8 Conditionals with Omitted Operands
28767======================================
28768
28769The middle operand in a conditional expression may be omitted.  Then if
28770the first operand is nonzero, its value is the value of the conditional
28771expression.
28772
28773 Therefore, the expression
28774
28775     x ? : y
28776
28777has the value of 'x' if that is nonzero; otherwise, the value of 'y'.
28778
28779 This example is perfectly equivalent to
28780
28781     x ? x : y
28782
28783In this simple case, the ability to omit the middle operand is not
28784especially useful.  When it becomes useful is when the first operand
28785does, or may (if it is a macro argument), contain a side effect.  Then
28786repeating the operand in the middle would perform the side effect twice.
28787Omitting the middle operand uses the value already computed without the
28788undesirable effects of recomputing it.
28789
28790
28791File: gcc.info,  Node: __int128,  Next: Long Long,  Prev: Conditionals,  Up: C Extensions
28792
287936.9 128-bit Integers
28794====================
28795
28796As an extension the integer scalar type '__int128' is supported for
28797targets which have an integer mode wide enough to hold 128 bits.  Simply
28798write '__int128' for a signed 128-bit integer, or 'unsigned __int128'
28799for an unsigned 128-bit integer.  There is no support in GCC for
28800expressing an integer constant of type '__int128' for targets with 'long
28801long' integer less than 128 bits wide.
28802
28803
28804File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: __int128,  Up: C Extensions
28805
288066.10 Double-Word Integers
28807=========================
28808
28809ISO C99 and ISO C++11 support data types for integers that are at least
2881064 bits wide, and as an extension GCC supports them in C90 and C++98
28811modes.  Simply write 'long long int' for a signed integer, or 'unsigned
28812long long int' for an unsigned integer.  To make an integer constant of
28813type 'long long int', add the suffix 'LL' to the integer.  To make an
28814integer constant of type 'unsigned long long int', add the suffix 'ULL'
28815to the integer.
28816
28817 You can use these types in arithmetic like any other integer types.
28818Addition, subtraction, and bitwise boolean operations on these types are
28819open-coded on all types of machines.  Multiplication is open-coded if
28820the machine supports a fullword-to-doubleword widening multiply
28821instruction.  Division and shifts are open-coded only on machines that
28822provide special support.  The operations that are not open-coded use
28823special library routines that come with GCC.
28824
28825 There may be pitfalls when you use 'long long' types for function
28826arguments without function prototypes.  If a function expects type 'int'
28827for its argument, and you pass a value of type 'long long int',
28828confusion results because the caller and the subroutine disagree about
28829the number of bytes for the argument.  Likewise, if the function expects
28830'long long int' and you pass 'int'.  The best way to avoid such problems
28831is to use prototypes.
28832
28833
28834File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: Long Long,  Up: C Extensions
28835
288366.11 Complex Numbers
28837====================
28838
28839ISO C99 supports complex floating data types, and as an extension GCC
28840supports them in C90 mode and in C++.  GCC also supports complex integer
28841data types which are not part of ISO C99.  You can declare complex types
28842using the keyword '_Complex'.  As an extension, the older GNU keyword
28843'__complex__' is also supported.
28844
28845 For example, '_Complex double x;' declares 'x' as a variable whose real
28846part and imaginary part are both of type 'double'.  '_Complex short int
28847y;' declares 'y' to have real and imaginary parts of type 'short int';
28848this is not likely to be useful, but it shows that the set of complex
28849types is complete.
28850
28851 To write a constant with a complex data type, use the suffix 'i' or 'j'
28852(either one; they are equivalent).  For example, '2.5fi' has type
28853'_Complex float' and '3i' has type '_Complex int'.  Such a constant
28854always has a pure imaginary value, but you can form any complex value
28855you like by adding one to a real constant.  This is a GNU extension; if
28856you have an ISO C99 conforming C library (such as the GNU C Library),
28857and want to construct complex constants of floating type, you should
28858include '<complex.h>' and use the macros 'I' or '_Complex_I' instead.
28859
28860 The ISO C++14 library also defines the 'i' suffix, so C++14 code that
28861includes the '<complex>' header cannot use 'i' for the GNU extension.
28862The 'j' suffix still has the GNU meaning.
28863
28864 To extract the real part of a complex-valued expression EXP, write
28865'__real__ EXP'.  Likewise, use '__imag__' to extract the imaginary part.
28866This is a GNU extension; for values of floating type, you should use the
28867ISO C99 functions 'crealf', 'creal', 'creall', 'cimagf', 'cimag' and
28868'cimagl', declared in '<complex.h>' and also provided as built-in
28869functions by GCC.
28870
28871 The operator '~' performs complex conjugation when used on a value with
28872a complex type.  This is a GNU extension; for values of floating type,
28873you should use the ISO C99 functions 'conjf', 'conj' and 'conjl',
28874declared in '<complex.h>' and also provided as built-in functions by
28875GCC.
28876
28877 GCC can allocate complex automatic variables in a noncontiguous
28878fashion; it's even possible for the real part to be in a register while
28879the imaginary part is on the stack (or vice versa).  Only the DWARF
28880debug info format can represent this, so use of DWARF is recommended.
28881If you are using the stabs debug info format, GCC describes a
28882noncontiguous complex variable as if it were two separate variables of
28883noncomplex type.  If the variable's actual name is 'foo', the two
28884fictitious variables are named 'foo$real' and 'foo$imag'.  You can
28885examine and set these two fictitious variables with your debugger.
28886
28887
28888File: gcc.info,  Node: Floating Types,  Next: Half-Precision,  Prev: Complex,  Up: C Extensions
28889
288906.12 Additional Floating Types
28891==============================
28892
28893ISO/IEC TS 18661-3:2015 defines C support for additional floating types
28894'_FloatN' and '_FloatNx', and GCC supports these type names; the set of
28895types supported depends on the target architecture.  These types are not
28896supported when compiling C++.  Constants with these types use suffixes
28897'fN' or 'FN' and 'fNx' or 'FNx'.  These type names can be used together
28898with '_Complex' to declare complex types.
28899
28900 As an extension, GNU C and GNU C++ support additional floating types,
28901which are not supported by all targets.
28902   * '__float128' is available on i386, x86_64, IA-64, and hppa HP-UX,
28903     as well as on PowerPC GNU/Linux targets that enable the vector
28904     scalar (VSX) instruction set.  '__float128' supports the 128-bit
28905     floating type.  On i386, x86_64, PowerPC, and IA-64 other than
28906     HP-UX, '__float128' is an alias for '_Float128'.  On hppa and IA-64
28907     HP-UX, '__float128' is an alias for 'long double'.
28908
28909   * '__float80' is available on the i386, x86_64, and IA-64 targets,
28910     and supports the 80-bit ('XFmode') floating type.  It is an alias
28911     for the type name '_Float64x' on these targets.
28912
28913   * '__ibm128' is available on PowerPC targets, and provides access to
28914     the IBM extended double format which is the current format used for
28915     'long double'.  When 'long double' transitions to '__float128' on
28916     PowerPC in the future, '__ibm128' will remain for use in
28917     conversions between the two types.
28918
28919 Support for these additional types includes the arithmetic operators:
28920add, subtract, multiply, divide; unary arithmetic operators; relational
28921operators; equality operators; and conversions to and from integer and
28922other floating types.  Use a suffix 'w' or 'W' in a literal constant of
28923type '__float80' or type '__ibm128'.  Use a suffix 'q' or 'Q' for
28924'_float128'.
28925
28926 In order to use '_Float128', '__float128', and '__ibm128' on PowerPC
28927Linux systems, you must use the '-mfloat128' option.  It is expected in
28928future versions of GCC that '_Float128' and '__float128' will be enabled
28929automatically.
28930
28931 The '_Float128' type is supported on all systems where '__float128' is
28932supported or where 'long double' has the IEEE binary128 format.  The
28933'_Float64x' type is supported on all systems where '__float128' is
28934supported.  The '_Float32' type is supported on all systems supporting
28935IEEE binary32; the '_Float64' and '_Float32x' types are supported on all
28936systems supporting IEEE binary64.  The '_Float16' type is supported on
28937AArch64 systems by default, and on ARM systems when the IEEE format for
2893816-bit floating-point types is selected with '-mfp16-format=ieee'.  GCC
28939does not currently support '_Float128x' on any systems.
28940
28941 On the i386, x86_64, IA-64, and HP-UX targets, you can declare complex
28942types using the corresponding internal complex type, 'XCmode' for
28943'__float80' type and 'TCmode' for '__float128' type:
28944
28945     typedef _Complex float __attribute__((mode(TC))) _Complex128;
28946     typedef _Complex float __attribute__((mode(XC))) _Complex80;
28947
28948 On the PowerPC Linux VSX targets, you can declare complex types using
28949the corresponding internal complex type, 'KCmode' for '__float128' type
28950and 'ICmode' for '__ibm128' type:
28951
28952     typedef _Complex float __attribute__((mode(KC))) _Complex_float128;
28953     typedef _Complex float __attribute__((mode(IC))) _Complex_ibm128;
28954
28955
28956File: gcc.info,  Node: Half-Precision,  Next: Decimal Float,  Prev: Floating Types,  Up: C Extensions
28957
289586.13 Half-Precision Floating Point
28959==================================
28960
28961On ARM and AArch64 targets, GCC supports half-precision (16-bit)
28962floating point via the '__fp16' type defined in the ARM C Language
28963Extensions.  On ARM systems, you must enable this type explicitly with
28964the '-mfp16-format' command-line option in order to use it.
28965
28966 ARM targets support two incompatible representations for half-precision
28967floating-point values.  You must choose one of the representations and
28968use it consistently in your program.
28969
28970 Specifying '-mfp16-format=ieee' selects the IEEE 754-2008 format.  This
28971format can represent normalized values in the range of 2^{-14} to 65504.
28972There are 11 bits of significand precision, approximately 3 decimal
28973digits.
28974
28975 Specifying '-mfp16-format=alternative' selects the ARM alternative
28976format.  This representation is similar to the IEEE format, but does not
28977support infinities or NaNs.  Instead, the range of exponents is
28978extended, so that this format can represent normalized values in the
28979range of 2^{-14} to 131008.
28980
28981 The GCC port for AArch64 only supports the IEEE 754-2008 format, and
28982does not require use of the '-mfp16-format' command-line option.
28983
28984 The '__fp16' type may only be used as an argument to intrinsics defined
28985in '<arm_fp16.h>', or as a storage format.  For purposes of arithmetic
28986and other operations, '__fp16' values in C or C++ expressions are
28987automatically promoted to 'float'.
28988
28989 The ARM target provides hardware support for conversions between
28990'__fp16' and 'float' values as an extension to VFP and NEON (Advanced
28991SIMD), and from ARMv8-A provides hardware support for conversions
28992between '__fp16' and 'double' values.  GCC generates code using these
28993hardware instructions if you compile with options to select an FPU that
28994provides them; for example, '-mfpu=neon-fp16 -mfloat-abi=softfp', in
28995addition to the '-mfp16-format' option to select a half-precision
28996format.
28997
28998 Language-level support for the '__fp16' data type is independent of
28999whether GCC generates code using hardware floating-point instructions.
29000In cases where hardware support is not specified, GCC implements
29001conversions between '__fp16' and other types as library calls.
29002
29003 It is recommended that portable code use the '_Float16' type defined by
29004ISO/IEC TS 18661-3:2015.  *Note Floating Types::.
29005
29006
29007File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Half-Precision,  Up: C Extensions
29008
290096.14 Decimal Floating Types
29010===========================
29011
29012As an extension, GNU C supports decimal floating types as defined in the
29013N1312 draft of ISO/IEC WDTR24732.  Support for decimal floating types in
29014GCC will evolve as the draft technical report changes.  Calling
29015conventions for any target might also change.  Not all targets support
29016decimal floating types.
29017
29018 The decimal floating types are '_Decimal32', '_Decimal64', and
29019'_Decimal128'.  They use a radix of ten, unlike the floating types
29020'float', 'double', and 'long double' whose radix is not specified by the
29021C standard but is usually two.
29022
29023 Support for decimal floating types includes the arithmetic operators
29024add, subtract, multiply, divide; unary arithmetic operators; relational
29025operators; equality operators; and conversions to and from integer and
29026other floating types.  Use a suffix 'df' or 'DF' in a literal constant
29027of type '_Decimal32', 'dd' or 'DD' for '_Decimal64', and 'dl' or 'DL'
29028for '_Decimal128'.
29029
29030 GCC support of decimal float as specified by the draft technical report
29031is incomplete:
29032
29033   * When the value of a decimal floating type cannot be represented in
29034     the integer type to which it is being converted, the result is
29035     undefined rather than the result value specified by the draft
29036     technical report.
29037
29038   * GCC does not provide the C library functionality associated with
29039     'math.h', 'fenv.h', 'stdio.h', 'stdlib.h', and 'wchar.h', which
29040     must come from a separate C library implementation.  Because of
29041     this the GNU C compiler does not define macro '__STDC_DEC_FP__' to
29042     indicate that the implementation conforms to the technical report.
29043
29044 Types '_Decimal32', '_Decimal64', and '_Decimal128' are supported by
29045the DWARF debug information format.
29046
29047
29048File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
29049
290506.15 Hex Floats
29051===============
29052
29053ISO C99 and ISO C++17 support floating-point numbers written not only in
29054the usual decimal notation, such as '1.55e1', but also numbers such as
29055'0x1.fp3' written in hexadecimal format.  As a GNU extension, GCC
29056supports this in C90 mode (except in some cases when strictly
29057conforming) and in C++98, C++11 and C++14 modes.  In that format the
29058'0x' hex introducer and the 'p' or 'P' exponent field are mandatory.
29059The exponent is a decimal number that indicates the power of 2 by which
29060the significant part is multiplied.  Thus '0x1.f' is 1 15/16, 'p3'
29061multiplies it by 8, and the value of '0x1.fp3' is the same as '1.55e1'.
29062
29063 Unlike for floating-point numbers in the decimal notation the exponent
29064is always required in the hexadecimal notation.  Otherwise the compiler
29065would not be able to resolve the ambiguity of, e.g., '0x1.f'.  This
29066could mean '1.0f' or '1.9375' since 'f' is also the extension for
29067floating-point constants of type 'float'.
29068
29069
29070File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
29071
290726.16 Fixed-Point Types
29073======================
29074
29075As an extension, GNU C supports fixed-point types as defined in the
29076N1169 draft of ISO/IEC DTR 18037.  Support for fixed-point types in GCC
29077will evolve as the draft technical report changes.  Calling conventions
29078for any target might also change.  Not all targets support fixed-point
29079types.
29080
29081 The fixed-point types are 'short _Fract', '_Fract', 'long _Fract',
29082'long long _Fract', 'unsigned short _Fract', 'unsigned _Fract',
29083'unsigned long _Fract', 'unsigned long long _Fract', '_Sat short
29084_Fract', '_Sat _Fract', '_Sat long _Fract', '_Sat long long _Fract',
29085'_Sat unsigned short _Fract', '_Sat unsigned _Fract', '_Sat unsigned
29086long _Fract', '_Sat unsigned long long _Fract', 'short _Accum',
29087'_Accum', 'long _Accum', 'long long _Accum', 'unsigned short _Accum',
29088'unsigned _Accum', 'unsigned long _Accum', 'unsigned long long _Accum',
29089'_Sat short _Accum', '_Sat _Accum', '_Sat long _Accum', '_Sat long long
29090_Accum', '_Sat unsigned short _Accum', '_Sat unsigned _Accum', '_Sat
29091unsigned long _Accum', '_Sat unsigned long long _Accum'.
29092
29093 Fixed-point data values contain fractional and optional integral parts.
29094The format of fixed-point data varies and depends on the target machine.
29095
29096 Support for fixed-point types includes:
29097   * prefix and postfix increment and decrement operators ('++', '--')
29098   * unary arithmetic operators ('+', '-', '!')
29099   * binary arithmetic operators ('+', '-', '*', '/')
29100   * binary shift operators ('<<', '>>')
29101   * relational operators ('<', '<=', '>=', '>')
29102   * equality operators ('==', '!=')
29103   * assignment operators ('+=', '-=', '*=', '/=', '<<=', '>>=')
29104   * conversions to and from integer, floating-point, or fixed-point
29105     types
29106
29107 Use a suffix in a fixed-point literal constant:
29108   * 'hr' or 'HR' for 'short _Fract' and '_Sat short _Fract'
29109   * 'r' or 'R' for '_Fract' and '_Sat _Fract'
29110   * 'lr' or 'LR' for 'long _Fract' and '_Sat long _Fract'
29111   * 'llr' or 'LLR' for 'long long _Fract' and '_Sat long long _Fract'
29112   * 'uhr' or 'UHR' for 'unsigned short _Fract' and '_Sat unsigned short
29113     _Fract'
29114   * 'ur' or 'UR' for 'unsigned _Fract' and '_Sat unsigned _Fract'
29115   * 'ulr' or 'ULR' for 'unsigned long _Fract' and '_Sat unsigned long
29116     _Fract'
29117   * 'ullr' or 'ULLR' for 'unsigned long long _Fract' and '_Sat unsigned
29118     long long _Fract'
29119   * 'hk' or 'HK' for 'short _Accum' and '_Sat short _Accum'
29120   * 'k' or 'K' for '_Accum' and '_Sat _Accum'
29121   * 'lk' or 'LK' for 'long _Accum' and '_Sat long _Accum'
29122   * 'llk' or 'LLK' for 'long long _Accum' and '_Sat long long _Accum'
29123   * 'uhk' or 'UHK' for 'unsigned short _Accum' and '_Sat unsigned short
29124     _Accum'
29125   * 'uk' or 'UK' for 'unsigned _Accum' and '_Sat unsigned _Accum'
29126   * 'ulk' or 'ULK' for 'unsigned long _Accum' and '_Sat unsigned long
29127     _Accum'
29128   * 'ullk' or 'ULLK' for 'unsigned long long _Accum' and '_Sat unsigned
29129     long long _Accum'
29130
29131 GCC support of fixed-point types as specified by the draft technical
29132report is incomplete:
29133
29134   * Pragmas to control overflow and rounding behaviors are not
29135     implemented.
29136
29137 Fixed-point types are supported by the DWARF debug information format.
29138
29139
29140File: gcc.info,  Node: Named Address Spaces,  Next: Zero Length,  Prev: Fixed-Point,  Up: C Extensions
29141
291426.17 Named Address Spaces
29143=========================
29144
29145As an extension, GNU C supports named address spaces as defined in the
29146N1275 draft of ISO/IEC DTR 18037.  Support for named address spaces in
29147GCC will evolve as the draft technical report changes.  Calling
29148conventions for any target might also change.  At present, only the AVR,
29149SPU, M32C, RL78, and x86 targets support address spaces other than the
29150generic address space.
29151
29152 Address space identifiers may be used exactly like any other C type
29153qualifier (e.g., 'const' or 'volatile').  See the N1275 document for
29154more details.
29155
291566.17.1 AVR Named Address Spaces
29157-------------------------------
29158
29159On the AVR target, there are several address spaces that can be used in
29160order to put read-only data into the flash memory and access that data
29161by means of the special instructions 'LPM' or 'ELPM' needed to read from
29162flash.
29163
29164 Devices belonging to 'avrtiny' and 'avrxmega3' can access flash memory
29165by means of 'LD*' instructions because the flash memory is mapped into
29166the RAM address space.  There is _no need_ for language extensions like
29167'__flash' or attribute *note 'progmem': AVR Variable Attributes.  The
29168default linker description files for these devices cater for that
29169feature and '.rodata' stays in flash: The compiler just generates 'LD*'
29170instructions, and the linker script adds core specific offsets to all
29171'.rodata' symbols: '0x4000' in the case of 'avrtiny' and '0x8000' in the
29172case of 'avrxmega3'.  See *note AVR Options:: for a list of respective
29173devices.
29174
29175 For devices not in 'avrtiny' or 'avrxmega3', any data including
29176read-only data is located in RAM (the generic address space) because
29177flash memory is not visible in the RAM address space.  In order to
29178locate read-only data in flash memory _and_ to generate the right
29179instructions to access this data without using (inline) assembler code,
29180special address spaces are needed.
29181
29182'__flash'
29183     The '__flash' qualifier locates data in the '.progmem.data'
29184     section.  Data is read using the 'LPM' instruction.  Pointers to
29185     this address space are 16 bits wide.
29186
29187'__flash1'
29188'__flash2'
29189'__flash3'
29190'__flash4'
29191'__flash5'
29192     These are 16-bit address spaces locating data in section
29193     '.progmemN.data' where N refers to address space '__flashN'.  The
29194     compiler sets the 'RAMPZ' segment register appropriately before
29195     reading data by means of the 'ELPM' instruction.
29196
29197'__memx'
29198     This is a 24-bit address space that linearizes flash and RAM: If
29199     the high bit of the address is set, data is read from RAM using the
29200     lower two bytes as RAM address.  If the high bit of the address is
29201     clear, data is read from flash with 'RAMPZ' set according to the
29202     high byte of the address.  *Note '__builtin_avr_flash_segment': AVR
29203     Built-in Functions.
29204
29205     Objects in this address space are located in '.progmemx.data'.
29206
29207 Example
29208
29209     char my_read (const __flash char ** p)
29210     {
29211         /* p is a pointer to RAM that points to a pointer to flash.
29212            The first indirection of p reads that flash pointer
29213            from RAM and the second indirection reads a char from this
29214            flash address.  */
29215
29216         return **p;
29217     }
29218
29219     /* Locate array[] in flash memory */
29220     const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 };
29221
29222     int i = 1;
29223
29224     int main (void)
29225     {
29226        /* Return 17 by reading from flash memory */
29227        return array[array[i]];
29228     }
29229
29230For each named address space supported by avr-gcc there is an equally
29231named but uppercase built-in macro defined.  The purpose is to
29232facilitate testing if respective address space support is available or
29233not:
29234
29235     #ifdef __FLASH
29236     const __flash int var = 1;
29237
29238     int read_var (void)
29239     {
29240         return var;
29241     }
29242     #else
29243     #include <avr/pgmspace.h> /* From AVR-LibC */
29244
29245     const int var PROGMEM = 1;
29246
29247     int read_var (void)
29248     {
29249         return (int) pgm_read_word (&var);
29250     }
29251     #endif /* __FLASH */
29252
29253Notice that attribute *note 'progmem': AVR Variable Attributes. locates
29254data in flash but accesses to these data read from generic address
29255space, i.e. from RAM, so that you need special accessors like
29256'pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/)
29257together with attribute 'progmem'.
29258
29259Limitations and caveats
29260
29261   * Reading across the 64 KiB section boundary of the '__flash' or
29262     '__flashN' address spaces shows undefined behavior.  The only
29263     address space that supports reading across the 64 KiB flash segment
29264     boundaries is '__memx'.
29265
29266   * If you use one of the '__flashN' address spaces you must arrange
29267     your linker script to locate the '.progmemN.data' sections
29268     according to your needs.
29269
29270   * Any data or pointers to the non-generic address spaces must be
29271     qualified as 'const', i.e. as read-only data.  This still applies
29272     if the data in one of these address spaces like software version
29273     number or calibration lookup table are intended to be changed after
29274     load time by, say, a boot loader.  In this case the right
29275     qualification is 'const' 'volatile' so that the compiler must not
29276     optimize away known values or insert them as immediates into
29277     operands of instructions.
29278
29279   * The following code initializes a variable 'pfoo' located in static
29280     storage with a 24-bit address:
29281          extern const __memx char foo;
29282          const __memx void *pfoo = &foo;
29283
29284   * On the reduced Tiny devices like ATtiny40, no address spaces are
29285     supported.  Just use vanilla C / C++ code without overhead as
29286     outlined above.  Attribute 'progmem' is supported but works
29287     differently, see *note AVR Variable Attributes::.
29288
292896.17.2 M32C Named Address Spaces
29290--------------------------------
29291
29292On the M32C target, with the R8C and M16C CPU variants, variables
29293qualified with '__far' are accessed using 32-bit addresses in order to
29294access memory beyond the first 64 Ki bytes.  If '__far' is used with the
29295M32CM or M32C CPU variants, it has no effect.
29296
292976.17.3 RL78 Named Address Spaces
29298--------------------------------
29299
29300On the RL78 target, variables qualified with '__far' are accessed with
2930132-bit pointers (20-bit addresses) rather than the default 16-bit
29302addresses.  Non-far variables are assumed to appear in the topmost
2930364 KiB of the address space.
29304
293056.17.4 SPU Named Address Spaces
29306-------------------------------
29307
29308On the SPU target variables may be declared as belonging to another
29309address space by qualifying the type with the '__ea' address space
29310identifier:
29311
29312     extern int __ea i;
29313
29314The compiler generates special code to access the variable 'i'.  It may
29315use runtime library support, or generate special machine instructions to
29316access that address space.
29317
293186.17.5 x86 Named Address Spaces
29319-------------------------------
29320
29321On the x86 target, variables may be declared as being relative to the
29322'%fs' or '%gs' segments.
29323
29324'__seg_fs'
29325'__seg_gs'
29326     The object is accessed with the respective segment override prefix.
29327
29328     The respective segment base must be set via some method specific to
29329     the operating system.  Rather than require an expensive system call
29330     to retrieve the segment base, these address spaces are not
29331     considered to be subspaces of the generic (flat) address space.
29332     This means that explicit casts are required to convert pointers
29333     between these address spaces and the generic address space.  In
29334     practice the application should cast to 'uintptr_t' and apply the
29335     segment base offset that it installed previously.
29336
29337     The preprocessor symbols '__SEG_FS' and '__SEG_GS' are defined when
29338     these address spaces are supported.
29339
29340
29341File: gcc.info,  Node: Zero Length,  Next: Empty Structures,  Prev: Named Address Spaces,  Up: C Extensions
29342
293436.18 Arrays of Length Zero
29344==========================
29345
29346Declaring zero-length arrays is allowed in GNU C as an extension.  A
29347zero-length array can be useful as the last element of a structure that
29348is really a header for a variable-length object:
29349
29350     struct line {
29351       int length;
29352       char contents[0];
29353     };
29354
29355     struct line *thisline = (struct line *)
29356       malloc (sizeof (struct line) + this_length);
29357     thisline->length = this_length;
29358
29359 Although the size of a zero-length array is zero, an array member of
29360this kind may increase the size of the enclosing type as a result of
29361tail padding.  The offset of a zero-length array member from the
29362beginning of the enclosing structure is the same as the offset of an
29363array with one or more elements of the same type.  The alignment of a
29364zero-length array is the same as the alignment of its elements.
29365
29366 Declaring zero-length arrays in other contexts, including as interior
29367members of structure objects or as non-member objects, is discouraged.
29368Accessing elements of zero-length arrays declared in such contexts is
29369undefined and may be diagnosed.
29370
29371 In the absence of the zero-length array extension, in ISO C90 the
29372'contents' array in the example above would typically be declared to
29373have a single element.  Unlike a zero-length array which only
29374contributes to the size of the enclosing structure for the purposes of
29375alignment, a one-element array always occupies at least as much space as
29376a single object of the type.  Although using one-element arrays this way
29377is discouraged, GCC handles accesses to trailing one-element array
29378members analogously to zero-length arrays.
29379
29380 The preferred mechanism to declare variable-length types like 'struct
29381line' above is the ISO C99 "flexible array member", with slightly
29382different syntax and semantics:
29383
29384   * Flexible array members are written as 'contents[]' without the '0'.
29385
29386   * Flexible array members have incomplete type, and so the 'sizeof'
29387     operator may not be applied.  As a quirk of the original
29388     implementation of zero-length arrays, 'sizeof' evaluates to zero.
29389
29390   * Flexible array members may only appear as the last member of a
29391     'struct' that is otherwise non-empty.
29392
29393   * A structure containing a flexible array member, or a union
29394     containing such a structure (possibly recursively), may not be a
29395     member of a structure or an element of an array.  (However, these
29396     uses are permitted by GCC as extensions.)
29397
29398 Non-empty initialization of zero-length arrays is treated like any case
29399where there are more initializer elements than the array holds, in that
29400a suitable warning about "excess elements in array" is given, and the
29401excess elements (all of them, in this case) are ignored.
29402
29403 GCC allows static initialization of flexible array members.  This is
29404equivalent to defining a new structure containing the original structure
29405followed by an array of sufficient size to contain the data.  E.g. in
29406the following, 'f1' is constructed as if it were declared like 'f2'.
29407
29408     struct f1 {
29409       int x; int y[];
29410     } f1 = { 1, { 2, 3, 4 } };
29411
29412     struct f2 {
29413       struct f1 f1; int data[3];
29414     } f2 = { { 1 }, { 2, 3, 4 } };
29415
29416The convenience of this extension is that 'f1' has the desired type,
29417eliminating the need to consistently refer to 'f2.f1'.
29418
29419 This has symmetry with normal static arrays, in that an array of
29420unknown size is also written with '[]'.
29421
29422 Of course, this extension only makes sense if the extra data comes at
29423the end of a top-level object, as otherwise we would be overwriting data
29424at subsequent offsets.  To avoid undue complication and confusion with
29425initialization of deeply nested arrays, we simply disallow any non-empty
29426initialization except when the structure is the top-level object.  For
29427example:
29428
29429     struct foo { int x; int y[]; };
29430     struct bar { struct foo z; };
29431
29432     struct foo a = { 1, { 2, 3, 4 } };        // Valid.
29433     struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
29434     struct bar c = { { 1, { } } };            // Valid.
29435     struct foo d[1] = { { 1, { 2, 3, 4 } } };  // Invalid.
29436
29437
29438File: gcc.info,  Node: Empty Structures,  Next: Variable Length,  Prev: Zero Length,  Up: C Extensions
29439
294406.19 Structures with No Members
29441===============================
29442
29443GCC permits a C structure to have no members:
29444
29445     struct empty {
29446     };
29447
29448 The structure has size zero.  In C++, empty structures are part of the
29449language.  G++ treats empty structures as if they had a single member of
29450type 'char'.
29451
29452
29453File: gcc.info,  Node: Variable Length,  Next: Variadic Macros,  Prev: Empty Structures,  Up: C Extensions
29454
294556.20 Arrays of Variable Length
29456==============================
29457
29458Variable-length automatic arrays are allowed in ISO C99, and as an
29459extension GCC accepts them in C90 mode and in C++.  These arrays are
29460declared like any other automatic arrays, but with a length that is not
29461a constant expression.  The storage is allocated at the point of
29462declaration and deallocated when the block scope containing the
29463declaration exits.  For example:
29464
29465     FILE *
29466     concat_fopen (char *s1, char *s2, char *mode)
29467     {
29468       char str[strlen (s1) + strlen (s2) + 1];
29469       strcpy (str, s1);
29470       strcat (str, s2);
29471       return fopen (str, mode);
29472     }
29473
29474 Jumping or breaking out of the scope of the array name deallocates the
29475storage.  Jumping into the scope is not allowed; you get an error
29476message for it.
29477
29478 As an extension, GCC accepts variable-length arrays as a member of a
29479structure or a union.  For example:
29480
29481     void
29482     foo (int n)
29483     {
29484       struct S { int x[n]; };
29485     }
29486
29487 You can use the function 'alloca' to get an effect much like
29488variable-length arrays.  The function 'alloca' is available in many
29489other C implementations (but not in all).  On the other hand,
29490variable-length arrays are more elegant.
29491
29492 There are other differences between these two methods.  Space allocated
29493with 'alloca' exists until the containing _function_ returns.  The space
29494for a variable-length array is deallocated as soon as the array name's
29495scope ends, unless you also use 'alloca' in this scope.
29496
29497 You can also use variable-length arrays as arguments to functions:
29498
29499     struct entry
29500     tester (int len, char data[len][len])
29501     {
29502       /* ... */
29503     }
29504
29505 The length of an array is computed once when the storage is allocated
29506and is remembered for the scope of the array in case you access it with
29507'sizeof'.
29508
29509 If you want to pass the array first and the length afterward, you can
29510use a forward declaration in the parameter list--another GNU extension.
29511
29512     struct entry
29513     tester (int len; char data[len][len], int len)
29514     {
29515       /* ... */
29516     }
29517
29518 The 'int len' before the semicolon is a "parameter forward
29519declaration", and it serves the purpose of making the name 'len' known
29520when the declaration of 'data' is parsed.
29521
29522 You can write any number of such parameter forward declarations in the
29523parameter list.  They can be separated by commas or semicolons, but the
29524last one must end with a semicolon, which is followed by the "real"
29525parameter declarations.  Each forward declaration must match a "real"
29526declaration in parameter name and data type.  ISO C99 does not support
29527parameter forward declarations.
29528
29529
29530File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Variable Length,  Up: C Extensions
29531
295326.21 Macros with a Variable Number of Arguments.
29533================================================
29534
29535In the ISO C standard of 1999, a macro can be declared to accept a
29536variable number of arguments much as a function can.  The syntax for
29537defining the macro is similar to that of a function.  Here is an
29538example:
29539
29540     #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
29541
29542Here '...' is a "variable argument".  In the invocation of such a macro,
29543it represents the zero or more tokens until the closing parenthesis that
29544ends the invocation, including any commas.  This set of tokens replaces
29545the identifier '__VA_ARGS__' in the macro body wherever it appears.  See
29546the CPP manual for more information.
29547
29548 GCC has long supported variadic macros, and used a different syntax
29549that allowed you to give a name to the variable arguments just like any
29550other argument.  Here is an example:
29551
29552     #define debug(format, args...) fprintf (stderr, format, args)
29553
29554This is in all ways equivalent to the ISO C example above, but arguably
29555more readable and descriptive.
29556
29557 GNU CPP has two further variadic macro extensions, and permits them to
29558be used with either of the above forms of macro definition.
29559
29560 In standard C, you are not allowed to leave the variable argument out
29561entirely; but you are allowed to pass an empty argument.  For example,
29562this invocation is invalid in ISO C, because there is no comma after the
29563string:
29564
29565     debug ("A message")
29566
29567 GNU CPP permits you to completely omit the variable arguments in this
29568way.  In the above examples, the compiler would complain, though since
29569the expansion of the macro still has the extra comma after the format
29570string.
29571
29572 To help solve this problem, CPP behaves specially for variable
29573arguments used with the token paste operator, '##'.  If instead you
29574write
29575
29576     #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
29577
29578and if the variable arguments are omitted or empty, the '##' operator
29579causes the preprocessor to remove the comma before it.  If you do
29580provide some variable arguments in your macro invocation, GNU CPP does
29581not complain about the paste operation and instead places the variable
29582arguments after the comma.  Just like any other pasted macro argument,
29583these arguments are not macro expanded.
29584
29585
29586File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
29587
295886.22 Slightly Looser Rules for Escaped Newlines
29589===============================================
29590
29591The preprocessor treatment of escaped newlines is more relaxed than that
29592specified by the C90 standard, which requires the newline to immediately
29593follow a backslash.  GCC's implementation allows whitespace in the form
29594of spaces, horizontal and vertical tabs, and form feeds between the
29595backslash and the subsequent newline.  The preprocessor issues a
29596warning, but treats it as a valid escaped newline and combines the two
29597lines to form a single logical line.  This works within comments and
29598tokens, as well as between tokens.  Comments are _not_ treated as
29599whitespace for the purposes of this relaxation, since they have not yet
29600been replaced with spaces.
29601
29602
29603File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
29604
296056.23 Non-Lvalue Arrays May Have Subscripts
29606==========================================
29607
29608In ISO C99, arrays that are not lvalues still decay to pointers, and may
29609be subscripted, although they may not be modified or used after the next
29610sequence point and the unary '&' operator may not be applied to them.
29611As an extension, GNU C allows such arrays to be subscripted in C90 mode,
29612though otherwise they do not decay to pointers outside C99 mode.  For
29613example, this is valid in GNU C though not valid in C90:
29614
29615     struct foo {int a[4];};
29616
29617     struct foo f();
29618
29619     bar (int index)
29620     {
29621       return f().a[index];
29622     }
29623
29624
29625File: gcc.info,  Node: Pointer Arith,  Next: Variadic Pointer Args,  Prev: Subscripting,  Up: C Extensions
29626
296276.24 Arithmetic on 'void'- and Function-Pointers
29628================================================
29629
29630In GNU C, addition and subtraction operations are supported on pointers
29631to 'void' and on pointers to functions.  This is done by treating the
29632size of a 'void' or of a function as 1.
29633
29634 A consequence of this is that 'sizeof' is also allowed on 'void' and on
29635function types, and returns 1.
29636
29637 The option '-Wpointer-arith' requests a warning if these extensions are
29638used.
29639
29640
29641File: gcc.info,  Node: Variadic Pointer Args,  Next: Pointers to Arrays,  Prev: Pointer Arith,  Up: C Extensions
29642
296436.25 Pointer Arguments in Variadic Functions
29644============================================
29645
29646Standard C requires that pointer types used with 'va_arg' in functions
29647with variable argument lists either must be compatible with that of the
29648actual argument, or that one type must be a pointer to 'void' and the
29649other a pointer to a character type.  GNU C implements the POSIX XSI
29650extension that additionally permits the use of 'va_arg' with a pointer
29651type to receive arguments of any other pointer type.
29652
29653 In particular, in GNU C 'va_arg (ap, void *)' can safely be used to
29654consume an argument of any pointer type.
29655
29656
29657File: gcc.info,  Node: Pointers to Arrays,  Next: Initializers,  Prev: Variadic Pointer Args,  Up: C Extensions
29658
296596.26 Pointers to Arrays with Qualifiers Work as Expected
29660========================================================
29661
29662In GNU C, pointers to arrays with qualifiers work similar to pointers to
29663other qualified types.  For example, a value of type 'int (*)[5]' can be
29664used to initialize a variable of type 'const int (*)[5]'.  These types
29665are incompatible in ISO C because the 'const' qualifier is formally
29666attached to the element type of the array and not the array itself.
29667
29668     extern void
29669     transpose (int N, int M, double out[M][N], const double in[N][M]);
29670     double x[3][2];
29671     double y[2][3];
29672     ...
29673     transpose(3, 2, y, x);
29674
29675
29676File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointers to Arrays,  Up: C Extensions
29677
296786.27 Non-Constant Initializers
29679==============================
29680
29681As in standard C++ and ISO C99, the elements of an aggregate initializer
29682for an automatic variable are not required to be constant expressions in
29683GNU C.  Here is an example of an initializer with run-time varying
29684elements:
29685
29686     foo (float f, float g)
29687     {
29688       float beat_freqs[2] = { f-g, f+g };
29689       /* ... */
29690     }
29691
29692
29693File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
29694
296956.28 Compound Literals
29696======================
29697
29698A compound literal looks like a cast of a brace-enclosed aggregate
29699initializer list.  Its value is an object of the type specified in the
29700cast, containing the elements specified in the initializer.  Unlike the
29701result of a cast, a compound literal is an lvalue.  ISO C99 and later
29702support compound literals.  As an extension, GCC supports compound
29703literals also in C90 mode and in C++, although as explained below, the
29704C++ semantics are somewhat different.
29705
29706 Usually, the specified type of a compound literal is a structure.
29707Assume that 'struct foo' and 'structure' are declared as shown:
29708
29709     struct foo {int a; char b[2];} structure;
29710
29711Here is an example of constructing a 'struct foo' with a compound
29712literal:
29713
29714     structure = ((struct foo) {x + y, 'a', 0});
29715
29716This is equivalent to writing the following:
29717
29718     {
29719       struct foo temp = {x + y, 'a', 0};
29720       structure = temp;
29721     }
29722
29723 You can also construct an array, though this is dangerous in C++, as
29724explained below.  If all the elements of the compound literal are (made
29725up of) simple constant expressions suitable for use in initializers of
29726objects of static storage duration, then the compound literal can be
29727coerced to a pointer to its first element and used in such an
29728initializer, as shown here:
29729
29730     char **foo = (char *[]) { "x", "y", "z" };
29731
29732 Compound literals for scalar types and union types are also allowed.
29733In the following example the variable 'i' is initialized to the value
29734'2', the result of incrementing the unnamed object created by the
29735compound literal.
29736
29737     int i = ++(int) { 1 };
29738
29739 As a GNU extension, GCC allows initialization of objects with static
29740storage duration by compound literals (which is not possible in ISO C99
29741because the initializer is not a constant).  It is handled as if the
29742object were initialized only with the brace-enclosed list if the types
29743of the compound literal and the object match.  The elements of the
29744compound literal must be constant.  If the object being initialized has
29745array type of unknown size, the size is determined by the size of the
29746compound literal.
29747
29748     static struct foo x = (struct foo) {1, 'a', 'b'};
29749     static int y[] = (int []) {1, 2, 3};
29750     static int z[] = (int [3]) {1};
29751
29752The above lines are equivalent to the following:
29753     static struct foo x = {1, 'a', 'b'};
29754     static int y[] = {1, 2, 3};
29755     static int z[] = {1, 0, 0};
29756
29757 In C, a compound literal designates an unnamed object with static or
29758automatic storage duration.  In C++, a compound literal designates a
29759temporary object that only lives until the end of its full-expression.
29760As a result, well-defined C code that takes the address of a subobject
29761of a compound literal can be undefined in C++, so G++ rejects the
29762conversion of a temporary array to a pointer.  For instance, if the
29763array compound literal example above appeared inside a function, any
29764subsequent use of 'foo' in C++ would have undefined behavior because the
29765lifetime of the array ends after the declaration of 'foo'.
29766
29767 As an optimization, G++ sometimes gives array compound literals longer
29768lifetimes: when the array either appears outside a function or has a
29769'const'-qualified type.  If 'foo' and its initializer had elements of
29770type 'char *const' rather than 'char *', or if 'foo' were a global
29771variable, the array would have static storage duration.  But it is
29772probably safest just to avoid the use of array compound literals in C++
29773code.
29774
29775
29776File: gcc.info,  Node: Designated Inits,  Next: Case Ranges,  Prev: Compound Literals,  Up: C Extensions
29777
297786.29 Designated Initializers
29779============================
29780
29781Standard C90 requires the elements of an initializer to appear in a
29782fixed order, the same as the order of the elements in the array or
29783structure being initialized.
29784
29785 In ISO C99 you can give the elements in any order, specifying the array
29786indices or structure field names they apply to, and GNU C allows this as
29787an extension in C90 mode as well.  This extension is not implemented in
29788GNU C++.
29789
29790 To specify an array index, write '[INDEX] =' before the element value.
29791For example,
29792
29793     int a[6] = { [4] = 29, [2] = 15 };
29794
29795is equivalent to
29796
29797     int a[6] = { 0, 0, 15, 0, 29, 0 };
29798
29799The index values must be constant expressions, even if the array being
29800initialized is automatic.
29801
29802 An alternative syntax for this that has been obsolete since GCC 2.5 but
29803GCC still accepts is to write '[INDEX]' before the element value, with
29804no '='.
29805
29806 To initialize a range of elements to the same value, write '[FIRST ...
29807LAST] = VALUE'.  This is a GNU extension.  For example,
29808
29809     int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
29810
29811If the value in it has side effects, the side effects happen only once,
29812not for each initialized field by the range initializer.
29813
29814Note that the length of the array is the highest value specified plus
29815one.
29816
29817 In a structure initializer, specify the name of a field to initialize
29818with '.FIELDNAME =' before the element value.  For example, given the
29819following structure,
29820
29821     struct point { int x, y; };
29822
29823the following initialization
29824
29825     struct point p = { .y = yvalue, .x = xvalue };
29826
29827is equivalent to
29828
29829     struct point p = { xvalue, yvalue };
29830
29831 Another syntax that has the same meaning, obsolete since GCC 2.5, is
29832'FIELDNAME:', as shown here:
29833
29834     struct point p = { y: yvalue, x: xvalue };
29835
29836 Omitted fields are implicitly initialized the same as for objects that
29837have static storage duration.
29838
29839 The '[INDEX]' or '.FIELDNAME' is known as a "designator".  You can also
29840use a designator (or the obsolete colon syntax) when initializing a
29841union, to specify which element of the union should be used.  For
29842example,
29843
29844     union foo { int i; double d; };
29845
29846     union foo f = { .d = 4 };
29847
29848converts 4 to a 'double' to store it in the union using the second
29849element.  By contrast, casting 4 to type 'union foo' stores it into the
29850union as the integer 'i', since it is an integer.  *Note Cast to
29851Union::.
29852
29853 You can combine this technique of naming elements with ordinary C
29854initialization of successive elements.  Each initializer element that
29855does not have a designator applies to the next consecutive element of
29856the array or structure.  For example,
29857
29858     int a[6] = { [1] = v1, v2, [4] = v4 };
29859
29860is equivalent to
29861
29862     int a[6] = { 0, v1, v2, 0, v4, 0 };
29863
29864 Labeling the elements of an array initializer is especially useful when
29865the indices are characters or belong to an 'enum' type.  For example:
29866
29867     int whitespace[256]
29868       = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
29869           ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
29870
29871 You can also write a series of '.FIELDNAME' and '[INDEX]' designators
29872before an '=' to specify a nested subobject to initialize; the list is
29873taken relative to the subobject corresponding to the closest surrounding
29874brace pair.  For example, with the 'struct point' declaration above:
29875
29876     struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
29877
29878 If the same field is initialized multiple times, or overlapping fields
29879of a union are initialized, the value from the last initialization is
29880used.  When a field of a union is itself a structure, the entire
29881structure from the last field initialized is used.  If any previous
29882initializer has side effect, it is unspecified whether the side effect
29883happens or not.  Currently, GCC discards the side-effecting initializer
29884expressions and issues a warning.
29885
29886
29887File: gcc.info,  Node: Case Ranges,  Next: Cast to Union,  Prev: Designated Inits,  Up: C Extensions
29888
298896.30 Case Ranges
29890================
29891
29892You can specify a range of consecutive values in a single 'case' label,
29893like this:
29894
29895     case LOW ... HIGH:
29896
29897This has the same effect as the proper number of individual 'case'
29898labels, one for each integer value from LOW to HIGH, inclusive.
29899
29900 This feature is especially useful for ranges of ASCII character codes:
29901
29902     case 'A' ... 'Z':
29903
29904 *Be careful:* Write spaces around the '...', for otherwise it may be
29905parsed wrong when you use it with integer values.  For example, write
29906this:
29907
29908     case 1 ... 5:
29909
29910rather than this:
29911
29912     case 1...5:
29913
29914
29915File: gcc.info,  Node: Cast to Union,  Next: Mixed Declarations,  Prev: Case Ranges,  Up: C Extensions
29916
299176.31 Cast to a Union Type
29918=========================
29919
29920A cast to a union type is a C extension not available in C++.  It looks
29921just like ordinary casts with the constraint that the type specified is
29922a union type.  You can specify the type either with the 'union' keyword
29923or with a 'typedef' name that refers to a union.  The result of a cast
29924to a union is a temporary rvalue of the union type with a member whose
29925type matches that of the operand initialized to the value of the
29926operand.  The effect of a cast to a union is similar to a compound
29927literal except that it yields an rvalue like standard casts do.  *Note
29928Compound Literals::.
29929
29930 Expressions that may be cast to the union type are those whose type
29931matches at least one of the members of the union.  Thus, given the
29932following union and variables:
29933
29934     union foo { int i; double d; };
29935     int x;
29936     double y;
29937     union foo z;
29938
29939both 'x' and 'y' can be cast to type 'union foo' and the following
29940assignments
29941       z = (union foo) x;
29942       z = (union foo) y;
29943 are shorthand equivalents of these
29944       z = (union foo) { .i = x };
29945       z = (union foo) { .d = y };
29946
29947 However, '(union foo) FLT_MAX;' is not a valid cast because the union
29948has no member of type 'float'.
29949
29950 Using the cast as the right-hand side of an assignment to a variable of
29951union type is equivalent to storing in a member of the union with the
29952same type
29953
29954     union foo u;
29955     /* ... */
29956     u = (union foo) x  ==  u.i = x
29957     u = (union foo) y  ==  u.d = y
29958
29959 You can also use the union cast as a function argument:
29960
29961     void hack (union foo);
29962     /* ... */
29963     hack ((union foo) x);
29964
29965
29966File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Cast to Union,  Up: C Extensions
29967
299686.32 Mixed Declarations and Code
29969================================
29970
29971ISO C99 and ISO C++ allow declarations and code to be freely mixed
29972within compound statements.  As an extension, GNU C also allows this in
29973C90 mode.  For example, you could do:
29974
29975     int i;
29976     /* ... */
29977     i++;
29978     int j = i + 2;
29979
29980 Each identifier is visible from where it is declared until the end of
29981the enclosing block.
29982
29983
29984File: gcc.info,  Node: Function Attributes,  Next: Variable Attributes,  Prev: Mixed Declarations,  Up: C Extensions
29985
299866.33 Declaring Attributes of Functions
29987======================================
29988
29989In GNU C and C++, you can use function attributes to specify certain
29990function properties that may help the compiler optimize calls or check
29991code more carefully for correctness.  For example, you can use
29992attributes to specify that a function never returns ('noreturn'),
29993returns a value depending only on the values of its arguments ('const'),
29994or has 'printf'-style arguments ('format').
29995
29996 You can also use attributes to control memory placement, code
29997generation options or call/return conventions within the function being
29998annotated.  Many of these attributes are target-specific.  For example,
29999many targets support attributes for defining interrupt handler
30000functions, which typically must follow special register usage and return
30001conventions.  Such attributes are described in the subsection for each
30002target.  However, a considerable number of attributes are supported by
30003most, if not all targets.  Those are described in the *note Common
30004Function Attributes:: section.
30005
30006 Function attributes are introduced by the '__attribute__' keyword in
30007the declaration of a function, followed by an attribute specification
30008enclosed in double parentheses.  You can specify multiple attributes in
30009a declaration by separating them by commas within the double parentheses
30010or by immediately following one attribute specification with another.
30011*Note Attribute Syntax::, for the exact rules on attribute syntax and
30012placement.  Compatible attribute specifications on distinct declarations
30013of the same function are merged.  An attribute specification that is not
30014compatible with attributes already applied to a declaration of the same
30015function is ignored with a warning.
30016
30017 Some function attributes take one or more arguments that refer to the
30018function's parameters by their positions within the function parameter
30019list.  Such attribute arguments are referred to as "positional
30020arguments".  Unless specified otherwise, positional arguments that
30021specify properties of parameters with pointer types can also specify the
30022same properties of the implicit C++ 'this' argument in non-static member
30023functions, and of parameters of reference to a pointer type.  For
30024ordinary functions, position one refers to the first parameter on the
30025list.  In C++ non-static member functions, position one refers to the
30026implicit 'this' pointer.  The same restrictions and effects apply to
30027function attributes used with ordinary functions or C++ member
30028functions.
30029
30030 GCC also supports attributes on variable declarations (*note Variable
30031Attributes::), labels (*note Label Attributes::), enumerators (*note
30032Enumerator Attributes::), statements (*note Statement Attributes::), and
30033types (*note Type Attributes::).
30034
30035 There is some overlap between the purposes of attributes and pragmas
30036(*note Pragmas Accepted by GCC: Pragmas.).  It has been found convenient
30037to use '__attribute__' to achieve a natural attachment of attributes to
30038their corresponding declarations, whereas '#pragma' is of use for
30039compatibility with other compilers or constructs that do not naturally
30040form part of the grammar.
30041
30042 In addition to the attributes documented here, GCC plugins may provide
30043their own attributes.
30044
30045* Menu:
30046
30047* Common Function Attributes::
30048* AArch64 Function Attributes::
30049* AMD GCN Function Attributes::
30050* ARC Function Attributes::
30051* ARM Function Attributes::
30052* AVR Function Attributes::
30053* Blackfin Function Attributes::
30054* CR16 Function Attributes::
30055* C-SKY Function Attributes::
30056* Epiphany Function Attributes::
30057* H8/300 Function Attributes::
30058* IA-64 Function Attributes::
30059* M32C Function Attributes::
30060* M32R/D Function Attributes::
30061* m68k Function Attributes::
30062* MCORE Function Attributes::
30063* MeP Function Attributes::
30064* MicroBlaze Function Attributes::
30065* Microsoft Windows Function Attributes::
30066* MIPS Function Attributes::
30067* MSP430 Function Attributes::
30068* NDS32 Function Attributes::
30069* Nios II Function Attributes::
30070* Nvidia PTX Function Attributes::
30071* PowerPC Function Attributes::
30072* RISC-V Function Attributes::
30073* RL78 Function Attributes::
30074* RX Function Attributes::
30075* S/390 Function Attributes::
30076* SH Function Attributes::
30077* SPU Function Attributes::
30078* Symbian OS Function Attributes::
30079* V850 Function Attributes::
30080* Visium Function Attributes::
30081* x86 Function Attributes::
30082* Xstormy16 Function Attributes::
30083
30084
30085File: gcc.info,  Node: Common Function Attributes,  Next: AArch64 Function Attributes,  Up: Function Attributes
30086
300876.33.1 Common Function Attributes
30088---------------------------------
30089
30090The following attributes are supported on most targets.
30091
30092'alias ("TARGET")'
30093     The 'alias' attribute causes the declaration to be emitted as an
30094     alias for another symbol, which must be specified.  For instance,
30095
30096          void __f () { /* Do something. */; }
30097          void f () __attribute__ ((weak, alias ("__f")));
30098
30099     defines 'f' to be a weak alias for '__f'.  In C++, the mangled name
30100     for the target must be used.  It is an error if '__f' is not
30101     defined in the same translation unit.
30102
30103     This attribute requires assembler and object file support, and may
30104     not be available on all targets.
30105
30106'aligned'
30107'aligned (ALIGNMENT)'
30108     The 'aligned' attribute specifies a minimum alignment for the first
30109     instruction of the function, measured in bytes.  When specified,
30110     ALIGNMENT must be an integer constant power of 2.  Specifying no
30111     ALIGNMENT argument implies the ideal alignment for the target.  The
30112     '__alignof__' operator can be used to determine what that is (*note
30113     Alignment::).  The attribute has no effect when a definition for
30114     the function is not provided in the same translation unit.
30115
30116     The attribute cannot be used to decrease the alignment of a
30117     function previously declared with a more restrictive alignment;
30118     only to increase it.  Attempts to do otherwise are diagnosed.  Some
30119     targets specify a minimum default alignment for functions that is
30120     greater than 1.  On such targets, specifying a less restrictive
30121     alignment is silently ignored.  Using the attribute overrides the
30122     effect of the '-falign-functions' (*note Optimize Options::) option
30123     for this function.
30124
30125     Note that the effectiveness of 'aligned' attributes may be limited
30126     by inherent limitations in the system linker and/or object file
30127     format.  On some systems, the linker is only able to arrange for
30128     functions to be aligned up to a certain maximum alignment.  (For
30129     some linkers, the maximum supported alignment may be very very
30130     small.)  See your linker documentation for further information.
30131
30132     The 'aligned' attribute can also be used for variables and fields
30133     (*note Variable Attributes::.)
30134
30135'alloc_align (POSITION)'
30136     The 'alloc_align' attribute may be applied to a function that
30137     returns a pointer and takes at least one argument of an integer or
30138     enumerated type.  It indicates that the returned pointer is aligned
30139     on a boundary given by the function argument at POSITION.
30140     Meaningful alignments are powers of 2 greater than one.  GCC uses
30141     this information to improve pointer alignment analysis.
30142
30143     The function parameter denoting the allocated alignment is
30144     specified by one constant integer argument whose number is the
30145     argument of the attribute.  Argument numbering starts at one.
30146
30147     For instance,
30148
30149          void* my_memalign (size_t, size_t) __attribute__ ((alloc_align (1)));
30150
30151     declares that 'my_memalign' returns memory with minimum alignment
30152     given by parameter 1.
30153
30154'alloc_size (POSITION)'
30155'alloc_size (POSITION-1, POSITION-2)'
30156     The 'alloc_size' attribute may be applied to a function that
30157     returns a pointer and takes at least one argument of an integer or
30158     enumerated type.  It indicates that the returned pointer points to
30159     memory whose size is given by the function argument at POSITION-1,
30160     or by the product of the arguments at POSITION-1 and POSITION-2.
30161     Meaningful sizes are positive values less than 'PTRDIFF_MAX'.  GCC
30162     uses this information to improve the results of
30163     '__builtin_object_size'.
30164
30165     The function parameter(s) denoting the allocated size are specified
30166     by one or two integer arguments supplied to the attribute.  The
30167     allocated size is either the value of the single function argument
30168     specified or the product of the two function arguments specified.
30169     Argument numbering starts at one for ordinary functions, and at two
30170     for C++ non-static member functions.
30171
30172     For instance,
30173
30174          void* my_calloc (size_t, size_t) __attribute__ ((alloc_size (1, 2)));
30175          void* my_realloc (void*, size_t) __attribute__ ((alloc_size (2)));
30176
30177     declares that 'my_calloc' returns memory of the size given by the
30178     product of parameter 1 and 2 and that 'my_realloc' returns memory
30179     of the size given by parameter 2.
30180
30181'always_inline'
30182     Generally, functions are not inlined unless optimization is
30183     specified.  For functions declared inline, this attribute inlines
30184     the function independent of any restrictions that otherwise apply
30185     to inlining.  Failure to inline such a function is diagnosed as an
30186     error.  Note that if such a function is called indirectly the
30187     compiler may or may not inline it depending on optimization level
30188     and a failure to inline an indirect call may or may not be
30189     diagnosed.
30190
30191'artificial'
30192     This attribute is useful for small inline wrappers that if possible
30193     should appear during debugging as a unit.  Depending on the debug
30194     info format it either means marking the function as artificial or
30195     using the caller location for all instructions within the inlined
30196     body.
30197
30198'assume_aligned (ALIGNMENT)'
30199'assume_aligned (ALIGNMENT, OFFSET)'
30200     The 'assume_aligned' attribute may be applied to a function that
30201     returns a pointer.  It indicates that the returned pointer is
30202     aligned on a boundary given by ALIGNMENT.  If the attribute has two
30203     arguments, the second argument is misalignment OFFSET.  Meaningful
30204     values of ALIGNMENT are powers of 2 greater than one.  Meaningful
30205     values of OFFSET are greater than zero and less than ALIGNMENT.
30206
30207     For instance
30208
30209          void* my_alloc1 (size_t) __attribute__((assume_aligned (16)));
30210          void* my_alloc2 (size_t) __attribute__((assume_aligned (32, 8)));
30211
30212     declares that 'my_alloc1' returns 16-byte aligned pointers and that
30213     'my_alloc2' returns a pointer whose value modulo 32 is equal to 8.
30214
30215'cold'
30216     The 'cold' attribute on functions is used to inform the compiler
30217     that the function is unlikely to be executed.  The function is
30218     optimized for size rather than speed and on many targets it is
30219     placed into a special subsection of the text section so all cold
30220     functions appear close together, improving code locality of
30221     non-cold parts of program.  The paths leading to calls of cold
30222     functions within code are marked as unlikely by the branch
30223     prediction mechanism.  It is thus useful to mark functions used to
30224     handle unlikely conditions, such as 'perror', as cold to improve
30225     optimization of hot functions that do call marked functions in rare
30226     occasions.
30227
30228     When profile feedback is available, via '-fprofile-use', cold
30229     functions are automatically detected and this attribute is ignored.
30230
30231'const'
30232     Calls to functions whose return value is not affected by changes to
30233     the observable state of the program and that have no observable
30234     effects on such state other than to return a value may lend
30235     themselves to optimizations such as common subexpression
30236     elimination.  Declaring such functions with the 'const' attribute
30237     allows GCC to avoid emitting some calls in repeated invocations of
30238     the function with the same argument values.
30239
30240     For example,
30241
30242          int square (int) __attribute__ ((const));
30243
30244     tells GCC that subsequent calls to function 'square' with the same
30245     argument value can be replaced by the result of the first call
30246     regardless of the statements in between.
30247
30248     The 'const' attribute prohibits a function from reading objects
30249     that affect its return value between successive invocations.
30250     However, functions declared with the attribute can safely read
30251     objects that do not change their return value, such as non-volatile
30252     constants.
30253
30254     The 'const' attribute imposes greater restrictions on a function's
30255     definition than the similar 'pure' attribute.  Declaring the same
30256     function with both the 'const' and the 'pure' attribute is
30257     diagnosed.  Because a const function cannot have any observable
30258     side effects it does not make sense for it to return 'void'.
30259     Declaring such a function is diagnosed.
30260
30261     Note that a function that has pointer arguments and examines the
30262     data pointed to must _not_ be declared 'const' if the pointed-to
30263     data might change between successive invocations of the function.
30264     In general, since a function cannot distinguish data that might
30265     change from data that cannot, const functions should never take
30266     pointer or, in C++, reference arguments.  Likewise, a function that
30267     calls a non-const function usually must not be const itself.
30268
30269'constructor'
30270'destructor'
30271'constructor (PRIORITY)'
30272'destructor (PRIORITY)'
30273     The 'constructor' attribute causes the function to be called
30274     automatically before execution enters 'main ()'.  Similarly, the
30275     'destructor' attribute causes the function to be called
30276     automatically after 'main ()' completes or 'exit ()' is called.
30277     Functions with these attributes are useful for initializing data
30278     that is used implicitly during the execution of the program.
30279
30280     On some targets the attributes also accept an integer argument to
30281     specify a priority to control the order in which constructor and
30282     destructor functions are run.  A constructor with a smaller
30283     priority number runs before a constructor with a larger priority
30284     number; the opposite relationship holds for destructors.  So, if
30285     you have a constructor that allocates a resource and a destructor
30286     that deallocates the same resource, both functions typically have
30287     the same priority.  The priorities for constructor and destructor
30288     functions are the same as those specified for namespace-scope C++
30289     objects (*note C++ Attributes::).  However, at present, the order
30290     in which constructors for C++ objects with static storage duration
30291     and functions decorated with attribute 'constructor' are invoked is
30292     unspecified.  In mixed declarations, attribute 'init_priority' can
30293     be used to impose a specific ordering.
30294
30295     Using the argument forms of the 'constructor' and 'destructor'
30296     attributes on targets where the feature is not supported is
30297     rejected with an error.
30298
30299'copy'
30300'copy (FUNCTION)'
30301     The 'copy' attribute applies the set of attributes with which
30302     FUNCTION has been declared to the declaration of the function to
30303     which the attribute is applied.  The attribute is designed for
30304     libraries that define aliases or function resolvers that are
30305     expected to specify the same set of attributes as their targets.
30306     The 'copy' attribute can be used with functions, variables, or
30307     types.  However, the kind of symbol to which the attribute is
30308     applied (either function or variable) must match the kind of symbol
30309     to which the argument refers.  The 'copy' attribute copies only
30310     syntactic and semantic attributes but not attributes that affect a
30311     symbol's linkage or visibility such as 'alias', 'visibility', or
30312     'weak'.  The 'deprecated' attribute is also not copied.  *Note
30313     Common Type Attributes::.  *Note Common Variable Attributes::.
30314
30315     For example, the STRONGALIAS macro below makes use of the 'alias'
30316     and 'copy' attributes to define an alias named ALLOC for function
30317     ALLOCATE declared with attributes ALLOC_SIZE, MALLOC, and NOTHROW.
30318     Thanks to the '__typeof__' operator the alias has the same type as
30319     the target function.  As a result of the 'copy' attribute the alias
30320     also shares the same attributes as the target.
30321
30322          #define StrongAlias(TargetFunc, AliasDecl)  \
30323            extern __typeof__ (TargetFunc) AliasDecl  \
30324              __attribute__ ((alias (#TargetFunc), copy (TargetFunc)));
30325
30326          extern __attribute__ ((alloc_size (1), malloc, nothrow))
30327            void* allocate (size_t);
30328          StrongAlias (allocate, alloc);
30329
30330'deprecated'
30331'deprecated (MSG)'
30332     The 'deprecated' attribute results in a warning if the function is
30333     used anywhere in the source file.  This is useful when identifying
30334     functions that are expected to be removed in a future version of a
30335     program.  The warning also includes the location of the declaration
30336     of the deprecated function, to enable users to easily find further
30337     information about why the function is deprecated, or what they
30338     should do instead.  Note that the warnings only occurs for uses:
30339
30340          int old_fn () __attribute__ ((deprecated));
30341          int old_fn ();
30342          int (*fn_ptr)() = old_fn;
30343
30344     results in a warning on line 3 but not line 2.  The optional MSG
30345     argument, which must be a string, is printed in the warning if
30346     present.
30347
30348     The 'deprecated' attribute can also be used for variables and types
30349     (*note Variable Attributes::, *note Type Attributes::.)
30350
30351     The message attached to the attribute is affected by the setting of
30352     the '-fmessage-length' option.
30353
30354'error ("MESSAGE")'
30355'warning ("MESSAGE")'
30356     If the 'error' or 'warning' attribute is used on a function
30357     declaration and a call to such a function is not eliminated through
30358     dead code elimination or other optimizations, an error or warning
30359     (respectively) that includes MESSAGE is diagnosed.  This is useful
30360     for compile-time checking, especially together with
30361     '__builtin_constant_p' and inline functions where checking the
30362     inline function arguments is not possible through 'extern char
30363     [(condition) ? 1 : -1];' tricks.
30364
30365     While it is possible to leave the function undefined and thus
30366     invoke a link failure (to define the function with a message in
30367     '.gnu.warning*' section), when using these attributes the problem
30368     is diagnosed earlier and with exact location of the call even in
30369     presence of inline functions or when not emitting debugging
30370     information.
30371
30372'externally_visible'
30373     This attribute, attached to a global variable or function,
30374     nullifies the effect of the '-fwhole-program' command-line option,
30375     so the object remains visible outside the current compilation unit.
30376
30377     If '-fwhole-program' is used together with '-flto' and 'gold' is
30378     used as the linker plugin, 'externally_visible' attributes are
30379     automatically added to functions (not variable yet due to a current
30380     'gold' issue) that are accessed outside of LTO objects according to
30381     resolution file produced by 'gold'.  For other linkers that cannot
30382     generate resolution file, explicit 'externally_visible' attributes
30383     are still necessary.
30384
30385'flatten'
30386     Generally, inlining into a function is limited.  For a function
30387     marked with this attribute, every call inside this function is
30388     inlined, if possible.  Functions declared with attribute 'noinline'
30389     and similar are not inlined.  Whether the function itself is
30390     considered for inlining depends on its size and the current
30391     inlining parameters.
30392
30393'format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
30394     The 'format' attribute specifies that a function takes 'printf',
30395     'scanf', 'strftime' or 'strfmon' style arguments that should be
30396     type-checked against a format string.  For example, the
30397     declaration:
30398
30399          extern int
30400          my_printf (void *my_object, const char *my_format, ...)
30401                __attribute__ ((format (printf, 2, 3)));
30402
30403     causes the compiler to check the arguments in calls to 'my_printf'
30404     for consistency with the 'printf' style format string argument
30405     'my_format'.
30406
30407     The parameter ARCHETYPE determines how the format string is
30408     interpreted, and should be 'printf', 'scanf', 'strftime',
30409     'gnu_printf', 'gnu_scanf', 'gnu_strftime' or 'strfmon'.  (You can
30410     also use '__printf__', '__scanf__', '__strftime__' or
30411     '__strfmon__'.)  On MinGW targets, 'ms_printf', 'ms_scanf', and
30412     'ms_strftime' are also present.  ARCHETYPE values such as 'printf'
30413     refer to the formats accepted by the system's C runtime library,
30414     while values prefixed with 'gnu_' always refer to the formats
30415     accepted by the GNU C Library.  On Microsoft Windows targets,
30416     values prefixed with 'ms_' refer to the formats accepted by the
30417     'msvcrt.dll' library.  The parameter STRING-INDEX specifies which
30418     argument is the format string argument (starting from 1), while
30419     FIRST-TO-CHECK is the number of the first argument to check against
30420     the format string.  For functions where the arguments are not
30421     available to be checked (such as 'vprintf'), specify the third
30422     parameter as zero.  In this case the compiler only checks the
30423     format string for consistency.  For 'strftime' formats, the third
30424     parameter is required to be zero.  Since non-static C++ methods
30425     have an implicit 'this' argument, the arguments of such methods
30426     should be counted from two, not one, when giving values for
30427     STRING-INDEX and FIRST-TO-CHECK.
30428
30429     In the example above, the format string ('my_format') is the second
30430     argument of the function 'my_print', and the arguments to check
30431     start with the third argument, so the correct parameters for the
30432     format attribute are 2 and 3.
30433
30434     The 'format' attribute allows you to identify your own functions
30435     that take format strings as arguments, so that GCC can check the
30436     calls to these functions for errors.  The compiler always (unless
30437     '-ffreestanding' or '-fno-builtin' is used) checks formats for the
30438     standard library functions 'printf', 'fprintf', 'sprintf', 'scanf',
30439     'fscanf', 'sscanf', 'strftime', 'vprintf', 'vfprintf' and
30440     'vsprintf' whenever such warnings are requested (using '-Wformat'),
30441     so there is no need to modify the header file 'stdio.h'.  In C99
30442     mode, the functions 'snprintf', 'vsnprintf', 'vscanf', 'vfscanf'
30443     and 'vsscanf' are also checked.  Except in strictly conforming C
30444     standard modes, the X/Open function 'strfmon' is also checked as
30445     are 'printf_unlocked' and 'fprintf_unlocked'.  *Note Options
30446     Controlling C Dialect: C Dialect Options.
30447
30448     For Objective-C dialects, 'NSString' (or '__NSString__') is
30449     recognized in the same context.  Declarations including these
30450     format attributes are parsed for correct syntax, however the result
30451     of checking of such format strings is not yet defined, and is not
30452     carried out by this version of the compiler.
30453
30454     The target may also provide additional types of format checks.
30455     *Note Format Checks Specific to Particular Target Machines: Target
30456     Format Checks.
30457
30458'format_arg (STRING-INDEX)'
30459     The 'format_arg' attribute specifies that a function takes one or
30460     more format strings for a 'printf', 'scanf', 'strftime' or
30461     'strfmon' style function and modifies it (for example, to translate
30462     it into another language), so the result can be passed to a
30463     'printf', 'scanf', 'strftime' or 'strfmon' style function (with the
30464     remaining arguments to the format function the same as they would
30465     have been for the unmodified string).  Multiple 'format_arg'
30466     attributes may be applied to the same function, each designating a
30467     distinct parameter as a format string.  For example, the
30468     declaration:
30469
30470          extern char *
30471          my_dgettext (char *my_domain, const char *my_format)
30472                __attribute__ ((format_arg (2)));
30473
30474     causes the compiler to check the arguments in calls to a 'printf',
30475     'scanf', 'strftime' or 'strfmon' type function, whose format string
30476     argument is a call to the 'my_dgettext' function, for consistency
30477     with the format string argument 'my_format'.  If the 'format_arg'
30478     attribute had not been specified, all the compiler could tell in
30479     such calls to format functions would be that the format string
30480     argument is not constant; this would generate a warning when
30481     '-Wformat-nonliteral' is used, but the calls could not be checked
30482     without the attribute.
30483
30484     In calls to a function declared with more than one 'format_arg'
30485     attribute, each with a distinct argument value, the corresponding
30486     actual function arguments are checked against all format strings
30487     designated by the attributes.  This capability is designed to
30488     support the GNU 'ngettext' family of functions.
30489
30490     The parameter STRING-INDEX specifies which argument is the format
30491     string argument (starting from one).  Since non-static C++ methods
30492     have an implicit 'this' argument, the arguments of such methods
30493     should be counted from two.
30494
30495     The 'format_arg' attribute allows you to identify your own
30496     functions that modify format strings, so that GCC can check the
30497     calls to 'printf', 'scanf', 'strftime' or 'strfmon' type function
30498     whose operands are a call to one of your own function.  The
30499     compiler always treats 'gettext', 'dgettext', and 'dcgettext' in
30500     this manner except when strict ISO C support is requested by
30501     '-ansi' or an appropriate '-std' option, or '-ffreestanding' or
30502     '-fno-builtin' is used.  *Note Options Controlling C Dialect: C
30503     Dialect Options.
30504
30505     For Objective-C dialects, the 'format-arg' attribute may refer to
30506     an 'NSString' reference for compatibility with the 'format'
30507     attribute above.
30508
30509     The target may also allow additional types in 'format-arg'
30510     attributes.  *Note Format Checks Specific to Particular Target
30511     Machines: Target Format Checks.
30512
30513'gnu_inline'
30514     This attribute should be used with a function that is also declared
30515     with the 'inline' keyword.  It directs GCC to treat the function as
30516     if it were defined in gnu90 mode even when compiling in C99 or
30517     gnu99 mode.
30518
30519     If the function is declared 'extern', then this definition of the
30520     function is used only for inlining.  In no case is the function
30521     compiled as a standalone function, not even if you take its address
30522     explicitly.  Such an address becomes an external reference, as if
30523     you had only declared the function, and had not defined it.  This
30524     has almost the effect of a macro.  The way to use this is to put a
30525     function definition in a header file with this attribute, and put
30526     another copy of the function, without 'extern', in a library file.
30527     The definition in the header file causes most calls to the function
30528     to be inlined.  If any uses of the function remain, they refer to
30529     the single copy in the library.  Note that the two definitions of
30530     the functions need not be precisely the same, although if they do
30531     not have the same effect your program may behave oddly.
30532
30533     In C, if the function is neither 'extern' nor 'static', then the
30534     function is compiled as a standalone function, as well as being
30535     inlined where possible.
30536
30537     This is how GCC traditionally handled functions declared 'inline'.
30538     Since ISO C99 specifies a different semantics for 'inline', this
30539     function attribute is provided as a transition measure and as a
30540     useful feature in its own right.  This attribute is available in
30541     GCC 4.1.3 and later.  It is available if either of the preprocessor
30542     macros '__GNUC_GNU_INLINE__' or '__GNUC_STDC_INLINE__' are defined.
30543     *Note An Inline Function is As Fast As a Macro: Inline.
30544
30545     In C++, this attribute does not depend on 'extern' in any way, but
30546     it still requires the 'inline' keyword to enable its special
30547     behavior.
30548
30549'hot'
30550     The 'hot' attribute on a function is used to inform the compiler
30551     that the function is a hot spot of the compiled program.  The
30552     function is optimized more aggressively and on many targets it is
30553     placed into a special subsection of the text section so all hot
30554     functions appear close together, improving locality.
30555
30556     When profile feedback is available, via '-fprofile-use', hot
30557     functions are automatically detected and this attribute is ignored.
30558
30559'ifunc ("RESOLVER")'
30560     The 'ifunc' attribute is used to mark a function as an indirect
30561     function using the STT_GNU_IFUNC symbol type extension to the ELF
30562     standard.  This allows the resolution of the symbol value to be
30563     determined dynamically at load time, and an optimized version of
30564     the routine to be selected for the particular processor or other
30565     system characteristics determined then.  To use this attribute,
30566     first define the implementation functions available, and a resolver
30567     function that returns a pointer to the selected implementation
30568     function.  The implementation functions' declarations must match
30569     the API of the function being implemented.  The resolver should be
30570     declared to be a function taking no arguments and returning a
30571     pointer to a function of the same type as the implementation.  For
30572     example:
30573
30574          void *my_memcpy (void *dst, const void *src, size_t len)
30575          {
30576            ...
30577            return dst;
30578          }
30579
30580          static void * (*resolve_memcpy (void))(void *, const void *, size_t)
30581          {
30582            return my_memcpy; // we will just always select this routine
30583          }
30584
30585     The exported header file declaring the function the user calls
30586     would contain:
30587
30588          extern void *memcpy (void *, const void *, size_t);
30589
30590     allowing the user to call 'memcpy' as a regular function, unaware
30591     of the actual implementation.  Finally, the indirect function needs
30592     to be defined in the same translation unit as the resolver
30593     function:
30594
30595          void *memcpy (void *, const void *, size_t)
30596               __attribute__ ((ifunc ("resolve_memcpy")));
30597
30598     In C++, the 'ifunc' attribute takes a string that is the mangled
30599     name of the resolver function.  A C++ resolver for a non-static
30600     member function of class 'C' should be declared to return a pointer
30601     to a non-member function taking pointer to 'C' as the first
30602     argument, followed by the same arguments as of the implementation
30603     function.  G++ checks the signatures of the two functions and
30604     issues a '-Wattribute-alias' warning for mismatches.  To suppress a
30605     warning for the necessary cast from a pointer to the implementation
30606     member function to the type of the corresponding non-member
30607     function use the '-Wno-pmf-conversions' option.  For example:
30608
30609          class S
30610          {
30611          private:
30612            int debug_impl (int);
30613            int optimized_impl (int);
30614
30615            typedef int Func (S*, int);
30616
30617            static Func* resolver ();
30618          public:
30619
30620            int interface (int);
30621          };
30622
30623          int S::debug_impl (int) { /* ... */ }
30624          int S::optimized_impl (int) { /* ... */ }
30625
30626          S::Func* S::resolver ()
30627          {
30628            int (S::*pimpl) (int)
30629              = getenv ("DEBUG") ? &S::debug_impl : &S::optimized_impl;
30630
30631            // Cast triggers -Wno-pmf-conversions.
30632            return reinterpret_cast<Func*>(pimpl);
30633          }
30634
30635          int S::interface (int) __attribute__ ((ifunc ("_ZN1S8resolverEv")));
30636
30637     Indirect functions cannot be weak.  Binutils version 2.20.1 or
30638     higher and GNU C Library version 2.11.1 are required to use this
30639     feature.
30640
30641'interrupt'
30642'interrupt_handler'
30643     Many GCC back ends support attributes to indicate that a function
30644     is an interrupt handler, which tells the compiler to generate
30645     function entry and exit sequences that differ from those from
30646     regular functions.  The exact syntax and behavior are
30647     target-specific; refer to the following subsections for details.
30648
30649'leaf'
30650     Calls to external functions with this attribute must return to the
30651     current compilation unit only by return or by exception handling.
30652     In particular, a leaf function is not allowed to invoke callback
30653     functions passed to it from the current compilation unit, directly
30654     call functions exported by the unit, or 'longjmp' into the unit.
30655     Leaf functions might still call functions from other compilation
30656     units and thus they are not necessarily leaf in the sense that they
30657     contain no function calls at all.
30658
30659     The attribute is intended for library functions to improve dataflow
30660     analysis.  The compiler takes the hint that any data not escaping
30661     the current compilation unit cannot be used or modified by the leaf
30662     function.  For example, the 'sin' function is a leaf function, but
30663     'qsort' is not.
30664
30665     Note that leaf functions might indirectly run a signal handler
30666     defined in the current compilation unit that uses static variables.
30667     Similarly, when lazy symbol resolution is in effect, leaf functions
30668     might invoke indirect functions whose resolver function or
30669     implementation function is defined in the current compilation unit
30670     and uses static variables.  There is no standard-compliant way to
30671     write such a signal handler, resolver function, or implementation
30672     function, and the best that you can do is to remove the 'leaf'
30673     attribute or mark all such static variables 'volatile'.  Lastly,
30674     for ELF-based systems that support symbol interposition, care
30675     should be taken that functions defined in the current compilation
30676     unit do not unexpectedly interpose other symbols based on the
30677     defined standards mode and defined feature test macros; otherwise
30678     an inadvertent callback would be added.
30679
30680     The attribute has no effect on functions defined within the current
30681     compilation unit.  This is to allow easy merging of multiple
30682     compilation units into one, for example, by using the link-time
30683     optimization.  For this reason the attribute is not allowed on
30684     types to annotate indirect calls.
30685
30686'malloc'
30687     This tells the compiler that a function is 'malloc'-like, i.e.,
30688     that the pointer P returned by the function cannot alias any other
30689     pointer valid when the function returns, and moreover no pointers
30690     to valid objects occur in any storage addressed by P.
30691
30692     Using this attribute can improve optimization.  Compiler predicts
30693     that a function with the attribute returns non-null in most cases.
30694     Functions like 'malloc' and 'calloc' have this property because
30695     they return a pointer to uninitialized or zeroed-out storage.
30696     However, functions like 'realloc' do not have this property, as
30697     they can return a pointer to storage containing pointers.
30698
30699'no_icf'
30700     This function attribute prevents a functions from being merged with
30701     another semantically equivalent function.
30702
30703'no_instrument_function'
30704     If any of '-finstrument-functions', '-p', or '-pg' are given,
30705     profiling function calls are generated at entry and exit of most
30706     user-compiled functions.  Functions with this attribute are not so
30707     instrumented.
30708
30709'no_profile_instrument_function'
30710     The 'no_profile_instrument_function' attribute on functions is used
30711     to inform the compiler that it should not process any profile
30712     feedback based optimization code instrumentation.
30713
30714'no_reorder'
30715     Do not reorder functions or variables marked 'no_reorder' against
30716     each other or top level assembler statements the executable.  The
30717     actual order in the program will depend on the linker command line.
30718     Static variables marked like this are also not removed.  This has a
30719     similar effect as the '-fno-toplevel-reorder' option, but only
30720     applies to the marked symbols.
30721
30722'no_sanitize ("SANITIZE_OPTION")'
30723     The 'no_sanitize' attribute on functions is used to inform the
30724     compiler that it should not do sanitization of all options
30725     mentioned in SANITIZE_OPTION.  A list of values acceptable by
30726     '-fsanitize' option can be provided.
30727
30728          void __attribute__ ((no_sanitize ("alignment", "object-size")))
30729          f () { /* Do something. */; }
30730          void __attribute__ ((no_sanitize ("alignment,object-size")))
30731          g () { /* Do something. */; }
30732
30733'no_sanitize_address'
30734'no_address_safety_analysis'
30735     The 'no_sanitize_address' attribute on functions is used to inform
30736     the compiler that it should not instrument memory accesses in the
30737     function when compiling with the '-fsanitize=address' option.  The
30738     'no_address_safety_analysis' is a deprecated alias of the
30739     'no_sanitize_address' attribute, new code should use
30740     'no_sanitize_address'.
30741
30742'no_sanitize_thread'
30743     The 'no_sanitize_thread' attribute on functions is used to inform
30744     the compiler that it should not instrument memory accesses in the
30745     function when compiling with the '-fsanitize=thread' option.
30746
30747'no_sanitize_undefined'
30748     The 'no_sanitize_undefined' attribute on functions is used to
30749     inform the compiler that it should not check for undefined behavior
30750     in the function when compiling with the '-fsanitize=undefined'
30751     option.
30752
30753'no_split_stack'
30754     If '-fsplit-stack' is given, functions have a small prologue which
30755     decides whether to split the stack.  Functions with the
30756     'no_split_stack' attribute do not have that prologue, and thus may
30757     run with only a small amount of stack space available.
30758
30759'no_stack_limit'
30760     This attribute locally overrides the '-fstack-limit-register' and
30761     '-fstack-limit-symbol' command-line options; it has the effect of
30762     disabling stack limit checking in the function it applies to.
30763
30764'noclone'
30765     This function attribute prevents a function from being considered
30766     for cloning--a mechanism that produces specialized copies of
30767     functions and which is (currently) performed by interprocedural
30768     constant propagation.
30769
30770'noinline'
30771     This function attribute prevents a function from being considered
30772     for inlining.  If the function does not have side effects, there
30773     are optimizations other than inlining that cause function calls to
30774     be optimized away, although the function call is live.  To keep
30775     such calls from being optimized away, put
30776          asm ("");
30777
30778     (*note Extended Asm::) in the called function, to serve as a
30779     special side effect.
30780
30781'noipa'
30782     Disable interprocedural optimizations between the function with
30783     this attribute and its callers, as if the body of the function is
30784     not available when optimizing callers and the callers are
30785     unavailable when optimizing the body.  This attribute implies
30786     'noinline', 'noclone' and 'no_icf' attributes.  However, this
30787     attribute is not equivalent to a combination of other attributes,
30788     because its purpose is to suppress existing and future
30789     optimizations employing interprocedural analysis, including those
30790     that do not have an attribute suitable for disabling them
30791     individually.  This attribute is supported mainly for the purpose
30792     of testing the compiler.
30793
30794'nonnull'
30795'nonnull (ARG-INDEX, ...)'
30796     The 'nonnull' attribute may be applied to a function that takes at
30797     least one argument of a pointer type.  It indicates that the
30798     referenced arguments must be non-null pointers.  For instance, the
30799     declaration:
30800
30801          extern void *
30802          my_memcpy (void *dest, const void *src, size_t len)
30803                  __attribute__((nonnull (1, 2)));
30804
30805     causes the compiler to check that, in calls to 'my_memcpy',
30806     arguments DEST and SRC are non-null.  If the compiler determines
30807     that a null pointer is passed in an argument slot marked as
30808     non-null, and the '-Wnonnull' option is enabled, a warning is
30809     issued.  *Note Warning Options::.  Unless disabled by the
30810     '-fno-delete-null-pointer-checks' option the compiler may also
30811     perform optimizations based on the knowledge that certain function
30812     arguments cannot be null.  In addition, the
30813     '-fisolate-erroneous-paths-attribute' option can be specified to
30814     have GCC transform calls with null arguments to non-null functions
30815     into traps.  *Note Optimize Options::.
30816
30817     If no ARG-INDEX is given to the 'nonnull' attribute, all pointer
30818     arguments are marked as non-null.  To illustrate, the following
30819     declaration is equivalent to the previous example:
30820
30821          extern void *
30822          my_memcpy (void *dest, const void *src, size_t len)
30823                  __attribute__((nonnull));
30824
30825'noplt'
30826     The 'noplt' attribute is the counterpart to option '-fno-plt'.
30827     Calls to functions marked with this attribute in
30828     position-independent code do not use the PLT.
30829
30830          /* Externally defined function foo.  */
30831          int foo () __attribute__ ((noplt));
30832
30833          int
30834          main (/* ... */)
30835          {
30836            /* ... */
30837            foo ();
30838            /* ... */
30839          }
30840
30841     The 'noplt' attribute on function 'foo' tells the compiler to
30842     assume that the function 'foo' is externally defined and that the
30843     call to 'foo' must avoid the PLT in position-independent code.
30844
30845     In position-dependent code, a few targets also convert calls to
30846     functions that are marked to not use the PLT to use the GOT
30847     instead.
30848
30849'noreturn'
30850     A few standard library functions, such as 'abort' and 'exit',
30851     cannot return.  GCC knows this automatically.  Some programs define
30852     their own functions that never return.  You can declare them
30853     'noreturn' to tell the compiler this fact.  For example,
30854
30855          void fatal () __attribute__ ((noreturn));
30856
30857          void
30858          fatal (/* ... */)
30859          {
30860            /* ... */ /* Print error message. */ /* ... */
30861            exit (1);
30862          }
30863
30864     The 'noreturn' keyword tells the compiler to assume that 'fatal'
30865     cannot return.  It can then optimize without regard to what would
30866     happen if 'fatal' ever did return.  This makes slightly better
30867     code.  More importantly, it helps avoid spurious warnings of
30868     uninitialized variables.
30869
30870     The 'noreturn' keyword does not affect the exceptional path when
30871     that applies: a 'noreturn'-marked function may still return to the
30872     caller by throwing an exception or calling 'longjmp'.
30873
30874     In order to preserve backtraces, GCC will never turn calls to
30875     'noreturn' functions into tail calls.
30876
30877     Do not assume that registers saved by the calling function are
30878     restored before calling the 'noreturn' function.
30879
30880     It does not make sense for a 'noreturn' function to have a return
30881     type other than 'void'.
30882
30883'nothrow'
30884     The 'nothrow' attribute is used to inform the compiler that a
30885     function cannot throw an exception.  For example, most functions in
30886     the standard C library can be guaranteed not to throw an exception
30887     with the notable exceptions of 'qsort' and 'bsearch' that take
30888     function pointer arguments.
30889
30890'optimize (LEVEL, ...)'
30891'optimize (STRING, ...)'
30892     The 'optimize' attribute is used to specify that a function is to
30893     be compiled with different optimization options than specified on
30894     the command line.  Valid arguments are constant non-negative
30895     integers and strings.  Each numeric argument specifies an
30896     optimization LEVEL.  Each STRING argument consists of one or more
30897     comma-separated substrings.  Each substring that begins with the
30898     letter 'O' refers to an optimization option such as '-O0' or '-Os'.
30899     Other substrings are taken as suffixes to the '-f' prefix jointly
30900     forming the name of an optimization option.  *Note Optimize
30901     Options::.
30902
30903     '#pragma GCC optimize' can be used to set optimization options for
30904     more than one function.  *Note Function Specific Option Pragmas::,
30905     for details about the pragma.
30906
30907     Providing multiple strings as arguments separated by commas to
30908     specify multiple options is equivalent to separating the option
30909     suffixes with a comma (',') within a single string.  Spaces are not
30910     permitted within the strings.
30911
30912     Not every optimization option that starts with the -F prefix
30913     specified by the attribute necessarily has an effect on the
30914     function.  The 'optimize' attribute should be used for debugging
30915     purposes only.  It is not suitable in production code.
30916
30917'patchable_function_entry'
30918     In case the target's text segment can be made writable at run time
30919     by any means, padding the function entry with a number of NOPs can
30920     be used to provide a universal tool for instrumentation.
30921
30922     The 'patchable_function_entry' function attribute can be used to
30923     change the number of NOPs to any desired value.  The two-value
30924     syntax is the same as for the command-line switch
30925     '-fpatchable-function-entry=N,M', generating N NOPs, with the
30926     function entry point before the Mth NOP instruction.  M defaults to
30927     0 if omitted e.g. function entry point is before the first NOP.
30928
30929     If patchable function entries are enabled globally using the
30930     command-line option '-fpatchable-function-entry=N,M', then you must
30931     disable instrumentation on all functions that are part of the
30932     instrumentation framework with the attribute
30933     'patchable_function_entry (0)' to prevent recursion.
30934
30935'pure'
30936
30937     Calls to functions that have no observable effects on the state of
30938     the program other than to return a value may lend themselves to
30939     optimizations such as common subexpression elimination.  Declaring
30940     such functions with the 'pure' attribute allows GCC to avoid
30941     emitting some calls in repeated invocations of the function with
30942     the same argument values.
30943
30944     The 'pure' attribute prohibits a function from modifying the state
30945     of the program that is observable by means other than inspecting
30946     the function's return value.  However, functions declared with the
30947     'pure' attribute can safely read any non-volatile objects, and
30948     modify the value of objects in a way that does not affect their
30949     return value or the observable state of the program.
30950
30951     For example,
30952
30953          int hash (char *) __attribute__ ((pure));
30954
30955     tells GCC that subsequent calls to the function 'hash' with the
30956     same string can be replaced by the result of the first call
30957     provided the state of the program observable by 'hash', including
30958     the contents of the array itself, does not change in between.  Even
30959     though 'hash' takes a non-const pointer argument it must not modify
30960     the array it points to, or any other object whose value the rest of
30961     the program may depend on.  However, the caller may safely change
30962     the contents of the array between successive calls to the function
30963     (doing so disables the optimization).  The restriction also applies
30964     to member objects referenced by the 'this' pointer in C++
30965     non-static member functions.
30966
30967     Some common examples of pure functions are 'strlen' or 'memcmp'.
30968     Interesting non-pure functions are functions with infinite loops or
30969     those depending on volatile memory or other system resource, that
30970     may change between consecutive calls (such as the standard C 'feof'
30971     function in a multithreading environment).
30972
30973     The 'pure' attribute imposes similar but looser restrictions on a
30974     function's definition than the 'const' attribute: 'pure' allows the
30975     function to read any non-volatile memory, even if it changes in
30976     between successive invocations of the function.  Declaring the same
30977     function with both the 'pure' and the 'const' attribute is
30978     diagnosed.  Because a pure function cannot have any observable side
30979     effects it does not make sense for such a function to return
30980     'void'.  Declaring such a function is diagnosed.
30981
30982'returns_nonnull'
30983     The 'returns_nonnull' attribute specifies that the function return
30984     value should be a non-null pointer.  For instance, the declaration:
30985
30986          extern void *
30987          mymalloc (size_t len) __attribute__((returns_nonnull));
30988
30989     lets the compiler optimize callers based on the knowledge that the
30990     return value will never be null.
30991
30992'returns_twice'
30993     The 'returns_twice' attribute tells the compiler that a function
30994     may return more than one time.  The compiler ensures that all
30995     registers are dead before calling such a function and emits a
30996     warning about the variables that may be clobbered after the second
30997     return from the function.  Examples of such functions are 'setjmp'
30998     and 'vfork'.  The 'longjmp'-like counterpart of such function, if
30999     any, might need to be marked with the 'noreturn' attribute.
31000
31001'section ("SECTION-NAME")'
31002     Normally, the compiler places the code it generates in the 'text'
31003     section.  Sometimes, however, you need additional sections, or you
31004     need certain particular functions to appear in special sections.
31005     The 'section' attribute specifies that a function lives in a
31006     particular section.  For example, the declaration:
31007
31008          extern void foobar (void) __attribute__ ((section ("bar")));
31009
31010     puts the function 'foobar' in the 'bar' section.
31011
31012     Some file formats do not support arbitrary sections so the
31013     'section' attribute is not available on all platforms.  If you need
31014     to map the entire contents of a module to a particular section,
31015     consider using the facilities of the linker instead.
31016
31017'sentinel'
31018'sentinel (POSITION)'
31019     This function attribute indicates that an argument in a call to the
31020     function is expected to be an explicit 'NULL'.  The attribute is
31021     only valid on variadic functions.  By default, the sentinel is
31022     expected to be the last argument of the function call.  If the
31023     optional POSITION argument is specified to the attribute, the
31024     sentinel must be located at POSITION counting backwards from the
31025     end of the argument list.
31026
31027          __attribute__ ((sentinel))
31028          is equivalent to
31029          __attribute__ ((sentinel(0)))
31030
31031     The attribute is automatically set with a position of 0 for the
31032     built-in functions 'execl' and 'execlp'.  The built-in function
31033     'execle' has the attribute set with a position of 1.
31034
31035     A valid 'NULL' in this context is defined as zero with any object
31036     pointer type.  If your system defines the 'NULL' macro with an
31037     integer type then you need to add an explicit cast.  During
31038     installation GCC replaces the system '<stddef.h>' header with a
31039     copy that redefines NULL appropriately.
31040
31041     The warnings for missing or incorrect sentinels are enabled with
31042     '-Wformat'.
31043
31044'simd'
31045'simd("MASK")'
31046     This attribute enables creation of one or more function versions
31047     that can process multiple arguments using SIMD instructions from a
31048     single invocation.  Specifying this attribute allows compiler to
31049     assume that such versions are available at link time (provided in
31050     the same or another translation unit).  Generated versions are
31051     target-dependent and described in the corresponding Vector ABI
31052     document.  For x86_64 target this document can be found
31053     here (https://sourceware.org/glibc/wiki/libmvec?action=AttachFile&do=view&target=VectorABI.txt).
31054
31055     The optional argument MASK may have the value 'notinbranch' or
31056     'inbranch', and instructs the compiler to generate non-masked or
31057     masked clones correspondingly.  By default, all clones are
31058     generated.
31059
31060     If the attribute is specified and '#pragma omp declare simd' is
31061     present on a declaration and the '-fopenmp' or '-fopenmp-simd'
31062     switch is specified, then the attribute is ignored.
31063
31064'stack_protect'
31065     This attribute adds stack protection code to the function if flags
31066     '-fstack-protector', '-fstack-protector-strong' or
31067     '-fstack-protector-explicit' are set.
31068
31069'target (STRING, ...)'
31070     Multiple target back ends implement the 'target' attribute to
31071     specify that a function is to be compiled with different target
31072     options than specified on the command line.  One or more strings
31073     can be provided as arguments.  Each string consists of one or more
31074     comma-separated suffixes to the '-m' prefix jointly forming the
31075     name of a machine-dependent option.  *Note Machine-Dependent
31076     Options: Submodel Options.
31077
31078     The 'target' attribute can be used for instance to have a function
31079     compiled with a different ISA (instruction set architecture) than
31080     the default.  '#pragma GCC target' can be used to specify
31081     target-specific options for more than one function.  *Note Function
31082     Specific Option Pragmas::, for details about the pragma.
31083
31084     For instance, on an x86, you could declare one function with the
31085     'target("sse4.1,arch=core2")' attribute and another with
31086     'target("sse4a,arch=amdfam10")'.  This is equivalent to compiling
31087     the first function with '-msse4.1' and '-march=core2' options, and
31088     the second function with '-msse4a' and '-march=amdfam10' options.
31089     It is up to you to make sure that a function is only invoked on a
31090     machine that supports the particular ISA it is compiled for (for
31091     example by using 'cpuid' on x86 to determine what feature bits and
31092     architecture family are used).
31093
31094          int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
31095          int sse3_func (void) __attribute__ ((__target__ ("sse3")));
31096
31097     Providing multiple strings as arguments separated by commas to
31098     specify multiple options is equivalent to separating the option
31099     suffixes with a comma (',') within a single string.  Spaces are not
31100     permitted within the strings.
31101
31102     The options supported are specific to each target; refer to *note
31103     x86 Function Attributes::, *note PowerPC Function Attributes::,
31104     *note ARM Function Attributes::, *note AArch64 Function
31105     Attributes::, *note Nios II Function Attributes::, and *note S/390
31106     Function Attributes:: for details.
31107
31108'target_clones (OPTIONS)'
31109     The 'target_clones' attribute is used to specify that a function be
31110     cloned into multiple versions compiled with different target
31111     options than specified on the command line.  The supported options
31112     and restrictions are the same as for 'target' attribute.
31113
31114     For instance, on an x86, you could compile a function with
31115     'target_clones("sse4.1,avx")'.  GCC creates two function clones,
31116     one compiled with '-msse4.1' and another with '-mavx'.
31117
31118     On a PowerPC, you can compile a function with
31119     'target_clones("cpu=power9,default")'.  GCC will create two
31120     function clones, one compiled with '-mcpu=power9' and another with
31121     the default options.  GCC must be configured to use GLIBC 2.23 or
31122     newer in order to use the 'target_clones' attribute.
31123
31124     It also creates a resolver function (see the 'ifunc' attribute
31125     above) that dynamically selects a clone suitable for current
31126     architecture.  The resolver is created only if there is a usage of
31127     a function with 'target_clones' attribute.
31128
31129'unused'
31130     This attribute, attached to a function, means that the function is
31131     meant to be possibly unused.  GCC does not produce a warning for
31132     this function.
31133
31134'used'
31135     This attribute, attached to a function, means that code must be
31136     emitted for the function even if it appears that the function is
31137     not referenced.  This is useful, for example, when the function is
31138     referenced only in inline assembly.
31139
31140     When applied to a member function of a C++ class template, the
31141     attribute also means that the function is instantiated if the class
31142     itself is instantiated.
31143
31144'visibility ("VISIBILITY_TYPE")'
31145     This attribute affects the linkage of the declaration to which it
31146     is attached.  It can be applied to variables (*note Common Variable
31147     Attributes::) and types (*note Common Type Attributes::) as well as
31148     functions.
31149
31150     There are four supported VISIBILITY_TYPE values: default, hidden,
31151     protected or internal visibility.
31152
31153          void __attribute__ ((visibility ("protected")))
31154          f () { /* Do something. */; }
31155          int i __attribute__ ((visibility ("hidden")));
31156
31157     The possible values of VISIBILITY_TYPE correspond to the visibility
31158     settings in the ELF gABI.
31159
31160     'default'
31161          Default visibility is the normal case for the object file
31162          format.  This value is available for the visibility attribute
31163          to override other options that may change the assumed
31164          visibility of entities.
31165
31166          On ELF, default visibility means that the declaration is
31167          visible to other modules and, in shared libraries, means that
31168          the declared entity may be overridden.
31169
31170          On Darwin, default visibility means that the declaration is
31171          visible to other modules.
31172
31173          Default visibility corresponds to "external linkage" in the
31174          language.
31175
31176     'hidden'
31177          Hidden visibility indicates that the entity declared has a new
31178          form of linkage, which we call "hidden linkage".  Two
31179          declarations of an object with hidden linkage refer to the
31180          same object if they are in the same shared object.
31181
31182     'internal'
31183          Internal visibility is like hidden visibility, but with
31184          additional processor specific semantics.  Unless otherwise
31185          specified by the psABI, GCC defines internal visibility to
31186          mean that a function is _never_ called from another module.
31187          Compare this with hidden functions which, while they cannot be
31188          referenced directly by other modules, can be referenced
31189          indirectly via function pointers.  By indicating that a
31190          function cannot be called from outside the module, GCC may for
31191          instance omit the load of a PIC register since it is known
31192          that the calling function loaded the correct value.
31193
31194     'protected'
31195          Protected visibility is like default visibility except that it
31196          indicates that references within the defining module bind to
31197          the definition in that module.  That is, the declared entity
31198          cannot be overridden by another module.
31199
31200     All visibilities are supported on many, but not all, ELF targets
31201     (supported when the assembler supports the '.visibility'
31202     pseudo-op).  Default visibility is supported everywhere.  Hidden
31203     visibility is supported on Darwin targets.
31204
31205     The visibility attribute should be applied only to declarations
31206     that would otherwise have external linkage.  The attribute should
31207     be applied consistently, so that the same entity should not be
31208     declared with different settings of the attribute.
31209
31210     In C++, the visibility attribute applies to types as well as
31211     functions and objects, because in C++ types have linkage.  A class
31212     must not have greater visibility than its non-static data member
31213     types and bases, and class members default to the visibility of
31214     their class.  Also, a declaration without explicit visibility is
31215     limited to the visibility of its type.
31216
31217     In C++, you can mark member functions and static member variables
31218     of a class with the visibility attribute.  This is useful if you
31219     know a particular method or static member variable should only be
31220     used from one shared object; then you can mark it hidden while the
31221     rest of the class has default visibility.  Care must be taken to
31222     avoid breaking the One Definition Rule; for example, it is usually
31223     not useful to mark an inline method as hidden without marking the
31224     whole class as hidden.
31225
31226     A C++ namespace declaration can also have the visibility attribute.
31227
31228          namespace nspace1 __attribute__ ((visibility ("protected")))
31229          { /* Do something. */; }
31230
31231     This attribute applies only to the particular namespace body, not
31232     to other definitions of the same namespace; it is equivalent to
31233     using '#pragma GCC visibility' before and after the namespace
31234     definition (*note Visibility Pragmas::).
31235
31236     In C++, if a template argument has limited visibility, this
31237     restriction is implicitly propagated to the template instantiation.
31238     Otherwise, template instantiations and specializations default to
31239     the visibility of their template.
31240
31241     If both the template and enclosing class have explicit visibility,
31242     the visibility from the template is used.
31243
31244'warn_unused_result'
31245     The 'warn_unused_result' attribute causes a warning to be emitted
31246     if a caller of the function with this attribute does not use its
31247     return value.  This is useful for functions where not checking the
31248     result is either a security problem or always a bug, such as
31249     'realloc'.
31250
31251          int fn () __attribute__ ((warn_unused_result));
31252          int foo ()
31253          {
31254            if (fn () < 0) return -1;
31255            fn ();
31256            return 0;
31257          }
31258
31259     results in warning on line 5.
31260
31261'weak'
31262     The 'weak' attribute causes the declaration to be emitted as a weak
31263     symbol rather than a global.  This is primarily useful in defining
31264     library functions that can be overridden in user code, though it
31265     can also be used with non-function declarations.  Weak symbols are
31266     supported for ELF targets, and also for a.out targets when using
31267     the GNU assembler and linker.
31268
31269'weakref'
31270'weakref ("TARGET")'
31271     The 'weakref' attribute marks a declaration as a weak reference.
31272     Without arguments, it should be accompanied by an 'alias' attribute
31273     naming the target symbol.  Optionally, the TARGET may be given as
31274     an argument to 'weakref' itself.  In either case, 'weakref'
31275     implicitly marks the declaration as 'weak'.  Without a TARGET,
31276     given as an argument to 'weakref' or to 'alias', 'weakref' is
31277     equivalent to 'weak'.
31278
31279          static int x() __attribute__ ((weakref ("y")));
31280          /* is equivalent to... */
31281          static int x() __attribute__ ((weak, weakref, alias ("y")));
31282          /* and to... */
31283          static int x() __attribute__ ((weakref));
31284          static int x() __attribute__ ((alias ("y")));
31285
31286     A weak reference is an alias that does not by itself require a
31287     definition to be given for the target symbol.  If the target symbol
31288     is only referenced through weak references, then it becomes a
31289     'weak' undefined symbol.  If it is directly referenced, however,
31290     then such strong references prevail, and a definition is required
31291     for the symbol, not necessarily in the same translation unit.
31292
31293     The effect is equivalent to moving all references to the alias to a
31294     separate translation unit, renaming the alias to the aliased
31295     symbol, declaring it as weak, compiling the two separate
31296     translation units and performing a link with relocatable output
31297     (ie: 'ld -r') on them.
31298
31299     At present, a declaration to which 'weakref' is attached can only
31300     be 'static'.
31301
31302
31303File: gcc.info,  Node: AArch64 Function Attributes,  Next: AMD GCN Function Attributes,  Prev: Common Function Attributes,  Up: Function Attributes
31304
313056.33.2 AArch64 Function Attributes
31306----------------------------------
31307
31308The following target-specific function attributes are available for the
31309AArch64 target.  For the most part, these options mirror the behavior of
31310similar command-line options (*note AArch64 Options::), but on a
31311per-function basis.
31312
31313'general-regs-only'
31314     Indicates that no floating-point or Advanced SIMD registers should
31315     be used when generating code for this function.  If the function
31316     explicitly uses floating-point code, then the compiler gives an
31317     error.  This is the same behavior as that of the command-line
31318     option '-mgeneral-regs-only'.
31319
31320'fix-cortex-a53-835769'
31321     Indicates that the workaround for the Cortex-A53 erratum 835769
31322     should be applied to this function.  To explicitly disable the
31323     workaround for this function specify the negated form:
31324     'no-fix-cortex-a53-835769'.  This corresponds to the behavior of
31325     the command line options '-mfix-cortex-a53-835769' and
31326     '-mno-fix-cortex-a53-835769'.
31327
31328'cmodel='
31329     Indicates that code should be generated for a particular code model
31330     for this function.  The behavior and permissible arguments are the
31331     same as for the command line option '-mcmodel='.
31332
31333'strict-align'
31334'no-strict-align'
31335     'strict-align' indicates that the compiler should not assume that
31336     unaligned memory references are handled by the system.  To allow
31337     the compiler to assume that aligned memory references are handled
31338     by the system, the inverse attribute 'no-strict-align' can be
31339     specified.  The behavior is same as for the command-line option
31340     '-mstrict-align' and '-mno-strict-align'.
31341
31342'omit-leaf-frame-pointer'
31343     Indicates that the frame pointer should be omitted for a leaf
31344     function call.  To keep the frame pointer, the inverse attribute
31345     'no-omit-leaf-frame-pointer' can be specified.  These attributes
31346     have the same behavior as the command-line options
31347     '-momit-leaf-frame-pointer' and '-mno-omit-leaf-frame-pointer'.
31348
31349'tls-dialect='
31350     Specifies the TLS dialect to use for this function.  The behavior
31351     and permissible arguments are the same as for the command-line
31352     option '-mtls-dialect='.
31353
31354'arch='
31355     Specifies the architecture version and architectural extensions to
31356     use for this function.  The behavior and permissible arguments are
31357     the same as for the '-march=' command-line option.
31358
31359'tune='
31360     Specifies the core for which to tune the performance of this
31361     function.  The behavior and permissible arguments are the same as
31362     for the '-mtune=' command-line option.
31363
31364'cpu='
31365     Specifies the core for which to tune the performance of this
31366     function and also whose architectural features to use.  The
31367     behavior and valid arguments are the same as for the '-mcpu='
31368     command-line option.
31369
31370'sign-return-address'
31371     Select the function scope on which return address signing will be
31372     applied.  The behavior and permissible arguments are the same as
31373     for the command-line option '-msign-return-address='.  The default
31374     value is 'none'.  This attribute is deprecated.  The
31375     'branch-protection' attribute should be used instead.
31376
31377'branch-protection'
31378     Select the function scope on which branch protection will be
31379     applied.  The behavior and permissible arguments are the same as
31380     for the command-line option '-mbranch-protection='.  The default
31381     value is 'none'.
31382
31383'outline-atomics'
31384     Enable or disable calls to out-of-line helpers to implement atomic
31385     operations.  This corresponds to the behavior of the command line
31386     options '-moutline-atomics' and '-mno-outline-atomics'.
31387
31388 The above target attributes can be specified as follows:
31389
31390     __attribute__((target("ATTR-STRING")))
31391     int
31392     f (int a)
31393     {
31394       return a + 5;
31395     }
31396
31397 where 'ATTR-STRING' is one of the attribute strings specified above.
31398
31399 Additionally, the architectural extension string may be specified on
31400its own.  This can be used to turn on and off particular architectural
31401extensions without having to specify a particular architecture version
31402or core.  Example:
31403
31404     __attribute__((target("+crc+nocrypto")))
31405     int
31406     foo (int a)
31407     {
31408       return a + 5;
31409     }
31410
31411 In this example 'target("+crc+nocrypto")' enables the 'crc' extension
31412and disables the 'crypto' extension for the function 'foo' without
31413modifying an existing '-march=' or '-mcpu' option.
31414
31415 Multiple target function attributes can be specified by separating them
31416with a comma.  For example:
31417     __attribute__((target("arch=armv8-a+crc+crypto,tune=cortex-a53")))
31418     int
31419     foo (int a)
31420     {
31421       return a + 5;
31422     }
31423
31424 is valid and compiles function 'foo' for ARMv8-A with 'crc' and
31425'crypto' extensions and tunes it for 'cortex-a53'.
31426
314276.33.2.1 Inlining rules
31428.......................
31429
31430Specifying target attributes on individual functions or performing
31431link-time optimization across translation units compiled with different
31432target options can affect function inlining rules:
31433
31434 In particular, a caller function can inline a callee function only if
31435the architectural features available to the callee are a subset of the
31436features available to the caller.  For example: A function 'foo'
31437compiled with '-march=armv8-a+crc', or tagged with the equivalent
31438'arch=armv8-a+crc' attribute, can inline a function 'bar' compiled with
31439'-march=armv8-a+nocrc' because the all the architectural features that
31440function 'bar' requires are available to function 'foo'.  Conversely,
31441function 'bar' cannot inline function 'foo'.
31442
31443 Additionally inlining a function compiled with '-mstrict-align' into a
31444function compiled without '-mstrict-align' is not allowed.  However,
31445inlining a function compiled without '-mstrict-align' into a function
31446compiled with '-mstrict-align' is allowed.
31447
31448 Note that CPU tuning options and attributes such as the '-mcpu=',
31449'-mtune=' do not inhibit inlining unless the CPU specified by the
31450'-mcpu=' option or the 'cpu=' attribute conflicts with the architectural
31451feature rules specified above.
31452
31453
31454File: gcc.info,  Node: AMD GCN Function Attributes,  Next: ARC Function Attributes,  Prev: AArch64 Function Attributes,  Up: Function Attributes
31455
314566.33.3 AMD GCN Function Attributes
31457----------------------------------
31458
31459These function attributes are supported by the AMD GCN back end:
31460
31461'amdgpu_hsa_kernel'
31462     This attribute indicates that the corresponding function should be
31463     compiled as a kernel function, that is an entry point that can be
31464     invoked from the host via the HSA runtime library.  By default
31465     functions are only callable only from other GCN functions.
31466
31467     This attribute is implicitly applied to any function named 'main',
31468     using default parameters.
31469
31470     Kernel functions may return an integer value, which will be written
31471     to a conventional place within the HSA "kernargs" region.
31472
31473     The attribute parameters configure what values are passed into the
31474     kernel function by the GPU drivers, via the initial register state.
31475     Some values are used by the compiler, and therefore forced on.
31476     Enabling other options may break assumptions in the compiler and/or
31477     run-time libraries.
31478
31479     'private_segment_buffer'
31480          Set 'enable_sgpr_private_segment_buffer' flag.  Always on
31481          (required to locate the stack).
31482
31483     'dispatch_ptr'
31484          Set 'enable_sgpr_dispatch_ptr' flag.  Always on (required to
31485          locate the launch dimensions).
31486
31487     'queue_ptr'
31488          Set 'enable_sgpr_queue_ptr' flag.  Always on (required to
31489          convert address spaces).
31490
31491     'kernarg_segment_ptr'
31492          Set 'enable_sgpr_kernarg_segment_ptr' flag.  Always on
31493          (required to locate the kernel arguments, "kernargs").
31494
31495     'dispatch_id'
31496          Set 'enable_sgpr_dispatch_id' flag.
31497
31498     'flat_scratch_init'
31499          Set 'enable_sgpr_flat_scratch_init' flag.
31500
31501     'private_segment_size'
31502          Set 'enable_sgpr_private_segment_size' flag.
31503
31504     'grid_workgroup_count_X'
31505          Set 'enable_sgpr_grid_workgroup_count_x' flag.  Always on
31506          (required to use OpenACC/OpenMP).
31507
31508     'grid_workgroup_count_Y'
31509          Set 'enable_sgpr_grid_workgroup_count_y' flag.
31510
31511     'grid_workgroup_count_Z'
31512          Set 'enable_sgpr_grid_workgroup_count_z' flag.
31513
31514     'workgroup_id_X'
31515          Set 'enable_sgpr_workgroup_id_x' flag.
31516
31517     'workgroup_id_Y'
31518          Set 'enable_sgpr_workgroup_id_y' flag.
31519
31520     'workgroup_id_Z'
31521          Set 'enable_sgpr_workgroup_id_z' flag.
31522
31523     'workgroup_info'
31524          Set 'enable_sgpr_workgroup_info' flag.
31525
31526     'private_segment_wave_offset'
31527          Set 'enable_sgpr_private_segment_wave_byte_offset' flag.
31528          Always on (required to locate the stack).
31529
31530     'work_item_id_X'
31531          Set 'enable_vgpr_workitem_id' parameter.  Always on (can't be
31532          disabled).
31533
31534     'work_item_id_Y'
31535          Set 'enable_vgpr_workitem_id' parameter.  Always on (required
31536          to enable vectorization.)
31537
31538     'work_item_id_Z'
31539          Set 'enable_vgpr_workitem_id' parameter.  Always on (required
31540          to use OpenACC/OpenMP).
31541
31542
31543File: gcc.info,  Node: ARC Function Attributes,  Next: ARM Function Attributes,  Prev: AMD GCN Function Attributes,  Up: Function Attributes
31544
315456.33.4 ARC Function Attributes
31546------------------------------
31547
31548These function attributes are supported by the ARC back end:
31549
31550'interrupt'
31551     Use this attribute to indicate that the specified function is an
31552     interrupt handler.  The compiler generates function entry and exit
31553     sequences suitable for use in an interrupt handler when this
31554     attribute is present.
31555
31556     On the ARC, you must specify the kind of interrupt to be handled in
31557     a parameter to the interrupt attribute like this:
31558
31559          void f () __attribute__ ((interrupt ("ilink1")));
31560
31561     Permissible values for this parameter are: 'ilink1' and 'ilink2'.
31562
31563'long_call'
31564'medium_call'
31565'short_call'
31566     These attributes specify how a particular function is called.
31567     These attributes override the '-mlong-calls' and '-mmedium-calls'
31568     (*note ARC Options::) command-line switches and '#pragma
31569     long_calls' settings.
31570
31571     For ARC, a function marked with the 'long_call' attribute is always
31572     called using register-indirect jump-and-link instructions, thereby
31573     enabling the called function to be placed anywhere within the
31574     32-bit address space.  A function marked with the 'medium_call'
31575     attribute will always be close enough to be called with an
31576     unconditional branch-and-link instruction, which has a 25-bit
31577     offset from the call site.  A function marked with the 'short_call'
31578     attribute will always be close enough to be called with a
31579     conditional branch-and-link instruction, which has a 21-bit offset
31580     from the call site.
31581
31582'jli_always'
31583     Forces a particular function to be called using 'jli' instruction.
31584     The 'jli' instruction makes use of a table stored into '.jlitab'
31585     section, which holds the location of the functions which are
31586     addressed using this instruction.
31587
31588'jli_fixed'
31589     Identical like the above one, but the location of the function in
31590     the 'jli' table is known and given as an attribute parameter.
31591
31592'secure_call'
31593     This attribute allows one to mark secure-code functions that are
31594     callable from normal mode.  The location of the secure call
31595     function into the 'sjli' table needs to be passed as argument.
31596
31597
31598File: gcc.info,  Node: ARM Function Attributes,  Next: AVR Function Attributes,  Prev: ARC Function Attributes,  Up: Function Attributes
31599
316006.33.5 ARM Function Attributes
31601------------------------------
31602
31603These function attributes are supported for ARM targets:
31604
31605'general-regs-only'
31606     Indicates that no floating-point or Advanced SIMD registers should
31607     be used when generating code for this function.  If the function
31608     explicitly uses floating-point code, then the compiler gives an
31609     error.  This is the same behavior as that of the command-line
31610     option '-mgeneral-regs-only'.
31611
31612'interrupt'
31613     Use this attribute to indicate that the specified function is an
31614     interrupt handler.  The compiler generates function entry and exit
31615     sequences suitable for use in an interrupt handler when this
31616     attribute is present.
31617
31618     You can specify the kind of interrupt to be handled by adding an
31619     optional parameter to the interrupt attribute like this:
31620
31621          void f () __attribute__ ((interrupt ("IRQ")));
31622
31623     Permissible values for this parameter are: 'IRQ', 'FIQ', 'SWI',
31624     'ABORT' and 'UNDEF'.
31625
31626     On ARMv7-M the interrupt type is ignored, and the attribute means
31627     the function may be called with a word-aligned stack pointer.
31628
31629'isr'
31630     Use this attribute on ARM to write Interrupt Service Routines.
31631     This is an alias to the 'interrupt' attribute above.
31632
31633'long_call'
31634'short_call'
31635     These attributes specify how a particular function is called.
31636     These attributes override the '-mlong-calls' (*note ARM Options::)
31637     command-line switch and '#pragma long_calls' settings.  For ARM,
31638     the 'long_call' attribute indicates that the function might be far
31639     away from the call site and require a different (more expensive)
31640     calling sequence.  The 'short_call' attribute always places the
31641     offset to the function from the call site into the 'BL' instruction
31642     directly.
31643
31644'naked'
31645     This attribute allows the compiler to construct the requisite
31646     function declaration, while allowing the body of the function to be
31647     assembly code.  The specified function will not have
31648     prologue/epilogue sequences generated by the compiler.  Only basic
31649     'asm' statements can safely be included in naked functions (*note
31650     Basic Asm::).  While using extended 'asm' or a mixture of basic
31651     'asm' and C code may appear to work, they cannot be depended upon
31652     to work reliably and are not supported.
31653
31654'pcs'
31655
31656     The 'pcs' attribute can be used to control the calling convention
31657     used for a function on ARM. The attribute takes an argument that
31658     specifies the calling convention to use.
31659
31660     When compiling using the AAPCS ABI (or a variant of it) then valid
31661     values for the argument are '"aapcs"' and '"aapcs-vfp"'.  In order
31662     to use a variant other than '"aapcs"' then the compiler must be
31663     permitted to use the appropriate co-processor registers (i.e., the
31664     VFP registers must be available in order to use '"aapcs-vfp"').
31665     For example,
31666
31667          /* Argument passed in r0, and result returned in r0+r1.  */
31668          double f2d (float) __attribute__((pcs("aapcs")));
31669
31670     Variadic functions always use the '"aapcs"' calling convention and
31671     the compiler rejects attempts to specify an alternative.
31672
31673'target (OPTIONS)'
31674     As discussed in *note Common Function Attributes::, this attribute
31675     allows specification of target-specific compilation options.
31676
31677     On ARM, the following options are allowed:
31678
31679     'thumb'
31680          Force code generation in the Thumb (T16/T32) ISA, depending on
31681          the architecture level.
31682
31683     'arm'
31684          Force code generation in the ARM (A32) ISA.
31685
31686          Functions from different modes can be inlined in the caller's
31687          mode.
31688
31689     'fpu='
31690          Specifies the fpu for which to tune the performance of this
31691          function.  The behavior and permissible arguments are the same
31692          as for the '-mfpu=' command-line option.
31693
31694     'arch='
31695          Specifies the architecture version and architectural
31696          extensions to use for this function.  The behavior and
31697          permissible arguments are the same as for the '-march='
31698          command-line option.
31699
31700          The above target attributes can be specified as follows:
31701
31702               __attribute__((target("arch=armv8-a+crc")))
31703               int
31704               f (int a)
31705               {
31706                 return a + 5;
31707               }
31708
31709          Additionally, the architectural extension string may be
31710          specified on its own.  This can be used to turn on and off
31711          particular architectural extensions without having to specify
31712          a particular architecture version or core.  Example:
31713
31714               __attribute__((target("+crc+nocrypto")))
31715               int
31716               foo (int a)
31717               {
31718                 return a + 5;
31719               }
31720
31721          In this example 'target("+crc+nocrypto")' enables the 'crc'
31722          extension and disables the 'crypto' extension for the function
31723          'foo' without modifying an existing '-march=' or '-mcpu'
31724          option.
31725
31726
31727File: gcc.info,  Node: AVR Function Attributes,  Next: Blackfin Function Attributes,  Prev: ARM Function Attributes,  Up: Function Attributes
31728
317296.33.6 AVR Function Attributes
31730------------------------------
31731
31732These function attributes are supported by the AVR back end:
31733
31734'interrupt'
31735     Use this attribute to indicate that the specified function is an
31736     interrupt handler.  The compiler generates function entry and exit
31737     sequences suitable for use in an interrupt handler when this
31738     attribute is present.
31739
31740     On the AVR, the hardware globally disables interrupts when an
31741     interrupt is executed.  The first instruction of an interrupt
31742     handler declared with this attribute is a 'SEI' instruction to
31743     re-enable interrupts.  See also the 'signal' function attribute
31744     that does not insert a 'SEI' instruction.  If both 'signal' and
31745     'interrupt' are specified for the same function, 'signal' is
31746     silently ignored.
31747
31748'naked'
31749     This attribute allows the compiler to construct the requisite
31750     function declaration, while allowing the body of the function to be
31751     assembly code.  The specified function will not have
31752     prologue/epilogue sequences generated by the compiler.  Only basic
31753     'asm' statements can safely be included in naked functions (*note
31754     Basic Asm::).  While using extended 'asm' or a mixture of basic
31755     'asm' and C code may appear to work, they cannot be depended upon
31756     to work reliably and are not supported.
31757
31758'no_gccisr'
31759     Do not use '__gcc_isr' pseudo instructions in a function with the
31760     'interrupt' or 'signal' attribute aka.  interrupt service routine
31761     (ISR). Use this attribute if the preamble of the ISR prologue
31762     should always read
31763          push  __zero_reg__
31764          push  __tmp_reg__
31765          in    __tmp_reg__, __SREG__
31766          push  __tmp_reg__
31767          clr   __zero_reg__
31768     and accordingly for the postamble of the epilogue -- no matter
31769     whether the mentioned registers are actually used in the ISR or
31770     not.  Situations where you might want to use this attribute
31771     include:
31772        * Code that (effectively) clobbers bits of 'SREG' other than the
31773          'I'-flag by writing to the memory location of 'SREG'.
31774        * Code that uses inline assembler to jump to a different
31775          function which expects (parts of) the prologue code as
31776          outlined above to be present.
31777     To disable '__gcc_isr' generation for the whole compilation unit,
31778     there is option '-mno-gas-isr-prologues', *note AVR Options::.
31779
31780'OS_main'
31781'OS_task'
31782     On AVR, functions with the 'OS_main' or 'OS_task' attribute do not
31783     save/restore any call-saved register in their prologue/epilogue.
31784
31785     The 'OS_main' attribute can be used when there _is guarantee_ that
31786     interrupts are disabled at the time when the function is entered.
31787     This saves resources when the stack pointer has to be changed to
31788     set up a frame for local variables.
31789
31790     The 'OS_task' attribute can be used when there is _no guarantee_
31791     that interrupts are disabled at that time when the function is
31792     entered like for, e.g.  task functions in a multi-threading
31793     operating system.  In that case, changing the stack pointer
31794     register is guarded by save/clear/restore of the global interrupt
31795     enable flag.
31796
31797     The differences to the 'naked' function attribute are:
31798        * 'naked' functions do not have a return instruction whereas
31799          'OS_main' and 'OS_task' functions have a 'RET' or 'RETI'
31800          return instruction.
31801        * 'naked' functions do not set up a frame for local variables or
31802          a frame pointer whereas 'OS_main' and 'OS_task' do this as
31803          needed.
31804
31805'signal'
31806     Use this attribute on the AVR to indicate that the specified
31807     function is an interrupt handler.  The compiler generates function
31808     entry and exit sequences suitable for use in an interrupt handler
31809     when this attribute is present.
31810
31811     See also the 'interrupt' function attribute.
31812
31813     The AVR hardware globally disables interrupts when an interrupt is
31814     executed.  Interrupt handler functions defined with the 'signal'
31815     attribute do not re-enable interrupts.  It is save to enable
31816     interrupts in a 'signal' handler.  This "save" only applies to the
31817     code generated by the compiler and not to the IRQ layout of the
31818     application which is responsibility of the application.
31819
31820     If both 'signal' and 'interrupt' are specified for the same
31821     function, 'signal' is silently ignored.
31822
31823
31824File: gcc.info,  Node: Blackfin Function Attributes,  Next: CR16 Function Attributes,  Prev: AVR Function Attributes,  Up: Function Attributes
31825
318266.33.7 Blackfin Function Attributes
31827-----------------------------------
31828
31829These function attributes are supported by the Blackfin back end:
31830
31831'exception_handler'
31832     Use this attribute on the Blackfin to indicate that the specified
31833     function is an exception handler.  The compiler generates function
31834     entry and exit sequences suitable for use in an exception handler
31835     when this attribute is present.
31836
31837'interrupt_handler'
31838     Use this attribute to indicate that the specified function is an
31839     interrupt handler.  The compiler generates function entry and exit
31840     sequences suitable for use in an interrupt handler when this
31841     attribute is present.
31842
31843'kspisusp'
31844     When used together with 'interrupt_handler', 'exception_handler' or
31845     'nmi_handler', code is generated to load the stack pointer from the
31846     USP register in the function prologue.
31847
31848'l1_text'
31849     This attribute specifies a function to be placed into L1
31850     Instruction SRAM.  The function is put into a specific section
31851     named '.l1.text'.  With '-mfdpic', function calls with a such
31852     function as the callee or caller uses inlined PLT.
31853
31854'l2'
31855     This attribute specifies a function to be placed into L2 SRAM. The
31856     function is put into a specific section named '.l2.text'.  With
31857     '-mfdpic', callers of such functions use an inlined PLT.
31858
31859'longcall'
31860'shortcall'
31861     The 'longcall' attribute indicates that the function might be far
31862     away from the call site and require a different (more expensive)
31863     calling sequence.  The 'shortcall' attribute indicates that the
31864     function is always close enough for the shorter calling sequence to
31865     be used.  These attributes override the '-mlongcall' switch.
31866
31867'nesting'
31868     Use this attribute together with 'interrupt_handler',
31869     'exception_handler' or 'nmi_handler' to indicate that the function
31870     entry code should enable nested interrupts or exceptions.
31871
31872'nmi_handler'
31873     Use this attribute on the Blackfin to indicate that the specified
31874     function is an NMI handler.  The compiler generates function entry
31875     and exit sequences suitable for use in an NMI handler when this
31876     attribute is present.
31877
31878'saveall'
31879     Use this attribute to indicate that all registers except the stack
31880     pointer should be saved in the prologue regardless of whether they
31881     are used or not.
31882
31883
31884File: gcc.info,  Node: CR16 Function Attributes,  Next: C-SKY Function Attributes,  Prev: Blackfin Function Attributes,  Up: Function Attributes
31885
318866.33.8 CR16 Function Attributes
31887-------------------------------
31888
31889These function attributes are supported by the CR16 back end:
31890
31891'interrupt'
31892     Use this attribute to indicate that the specified function is an
31893     interrupt handler.  The compiler generates function entry and exit
31894     sequences suitable for use in an interrupt handler when this
31895     attribute is present.
31896
31897
31898File: gcc.info,  Node: C-SKY Function Attributes,  Next: Epiphany Function Attributes,  Prev: CR16 Function Attributes,  Up: Function Attributes
31899
319006.33.9 C-SKY Function Attributes
31901--------------------------------
31902
31903These function attributes are supported by the C-SKY back end:
31904
31905'interrupt'
31906'isr'
31907     Use these attributes to indicate that the specified function is an
31908     interrupt handler.  The compiler generates function entry and exit
31909     sequences suitable for use in an interrupt handler when either of
31910     these attributes are present.
31911
31912     Use of these options requires the '-mistack' command-line option to
31913     enable support for the necessary interrupt stack instructions.
31914     They are ignored with a warning otherwise.  *Note C-SKY Options::.
31915
31916'naked'
31917     This attribute allows the compiler to construct the requisite
31918     function declaration, while allowing the body of the function to be
31919     assembly code.  The specified function will not have
31920     prologue/epilogue sequences generated by the compiler.  Only basic
31921     'asm' statements can safely be included in naked functions (*note
31922     Basic Asm::).  While using extended 'asm' or a mixture of basic
31923     'asm' and C code may appear to work, they cannot be depended upon
31924     to work reliably and are not supported.
31925
31926
31927File: gcc.info,  Node: Epiphany Function Attributes,  Next: H8/300 Function Attributes,  Prev: C-SKY Function Attributes,  Up: Function Attributes
31928
319296.33.10 Epiphany Function Attributes
31930------------------------------------
31931
31932These function attributes are supported by the Epiphany back end:
31933
31934'disinterrupt'
31935     This attribute causes the compiler to emit instructions to disable
31936     interrupts for the duration of the given function.
31937
31938'forwarder_section'
31939     This attribute modifies the behavior of an interrupt handler.  The
31940     interrupt handler may be in external memory which cannot be reached
31941     by a branch instruction, so generate a local memory trampoline to
31942     transfer control.  The single parameter identifies the section
31943     where the trampoline is placed.
31944
31945'interrupt'
31946     Use this attribute to indicate that the specified function is an
31947     interrupt handler.  The compiler generates function entry and exit
31948     sequences suitable for use in an interrupt handler when this
31949     attribute is present.  It may also generate a special section with
31950     code to initialize the interrupt vector table.
31951
31952     On Epiphany targets one or more optional parameters can be added
31953     like this:
31954
31955          void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
31956
31957     Permissible values for these parameters are: 'reset',
31958     'software_exception', 'page_miss', 'timer0', 'timer1', 'message',
31959     'dma0', 'dma1', 'wand' and 'swi'.  Multiple parameters indicate
31960     that multiple entries in the interrupt vector table should be
31961     initialized for this function, i.e. for each parameter NAME, a jump
31962     to the function is emitted in the section ivt_entry_NAME.  The
31963     parameter(s) may be omitted entirely, in which case no interrupt
31964     vector table entry is provided.
31965
31966     Note that interrupts are enabled inside the function unless the
31967     'disinterrupt' attribute is also specified.
31968
31969     The following examples are all valid uses of these attributes on
31970     Epiphany targets:
31971          void __attribute__ ((interrupt)) universal_handler ();
31972          void __attribute__ ((interrupt ("dma1"))) dma1_handler ();
31973          void __attribute__ ((interrupt ("dma0, dma1")))
31974            universal_dma_handler ();
31975          void __attribute__ ((interrupt ("timer0"), disinterrupt))
31976            fast_timer_handler ();
31977          void __attribute__ ((interrupt ("dma0, dma1"),
31978                               forwarder_section ("tramp")))
31979            external_dma_handler ();
31980
31981'long_call'
31982'short_call'
31983     These attributes specify how a particular function is called.
31984     These attributes override the '-mlong-calls' (*note Adapteva
31985     Epiphany Options::) command-line switch and '#pragma long_calls'
31986     settings.
31987
31988
31989File: gcc.info,  Node: H8/300 Function Attributes,  Next: IA-64 Function Attributes,  Prev: Epiphany Function Attributes,  Up: Function Attributes
31990
319916.33.11 H8/300 Function Attributes
31992----------------------------------
31993
31994These function attributes are available for H8/300 targets:
31995
31996'function_vector'
31997     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
31998     the specified function should be called through the function
31999     vector.  Calling a function through the function vector reduces
32000     code size; however, the function vector has a limited size (maximum
32001     128 entries on the H8/300 and 64 entries on the H8/300H and H8S)
32002     and shares space with the interrupt vector.
32003
32004'interrupt_handler'
32005     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
32006     the specified function is an interrupt handler.  The compiler
32007     generates function entry and exit sequences suitable for use in an
32008     interrupt handler when this attribute is present.
32009
32010'saveall'
32011     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
32012     all registers except the stack pointer should be saved in the
32013     prologue regardless of whether they are used or not.
32014
32015
32016File: gcc.info,  Node: IA-64 Function Attributes,  Next: M32C Function Attributes,  Prev: H8/300 Function Attributes,  Up: Function Attributes
32017
320186.33.12 IA-64 Function Attributes
32019---------------------------------
32020
32021These function attributes are supported on IA-64 targets:
32022
32023'syscall_linkage'
32024     This attribute is used to modify the IA-64 calling convention by
32025     marking all input registers as live at all function exits.  This
32026     makes it possible to restart a system call after an interrupt
32027     without having to save/restore the input registers.  This also
32028     prevents kernel data from leaking into application code.
32029
32030'version_id'
32031     This IA-64 HP-UX attribute, attached to a global variable or
32032     function, renames a symbol to contain a version string, thus
32033     allowing for function level versioning.  HP-UX system header files
32034     may use function level versioning for some system calls.
32035
32036          extern int foo () __attribute__((version_id ("20040821")));
32037
32038     Calls to 'foo' are mapped to calls to 'foo{20040821}'.
32039
32040
32041File: gcc.info,  Node: M32C Function Attributes,  Next: M32R/D Function Attributes,  Prev: IA-64 Function Attributes,  Up: Function Attributes
32042
320436.33.13 M32C Function Attributes
32044--------------------------------
32045
32046These function attributes are supported by the M32C back end:
32047
32048'bank_switch'
32049     When added to an interrupt handler with the M32C port, causes the
32050     prologue and epilogue to use bank switching to preserve the
32051     registers rather than saving them on the stack.
32052
32053'fast_interrupt'
32054     Use this attribute on the M32C port to indicate that the specified
32055     function is a fast interrupt handler.  This is just like the
32056     'interrupt' attribute, except that 'freit' is used to return
32057     instead of 'reit'.
32058
32059'function_vector'
32060     On M16C/M32C targets, the 'function_vector' attribute declares a
32061     special page subroutine call function.  Use of this attribute
32062     reduces the code size by 2 bytes for each call generated to the
32063     subroutine.  The argument to the attribute is the vector number
32064     entry from the special page vector table which contains the 16
32065     low-order bits of the subroutine's entry address.  Each vector
32066     table has special page number (18 to 255) that is used in 'jsrs'
32067     instructions.  Jump addresses of the routines are generated by
32068     adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
32069     M32C targets), to the 2-byte addresses set in the vector table.
32070     Therefore you need to ensure that all the special page vector
32071     routines should get mapped within the address range 0x0F0000 to
32072     0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
32073
32074     In the following example 2 bytes are saved for each call to
32075     function 'foo'.
32076
32077          void foo (void) __attribute__((function_vector(0x18)));
32078          void foo (void)
32079          {
32080          }
32081
32082          void bar (void)
32083          {
32084              foo();
32085          }
32086
32087     If functions are defined in one file and are called in another
32088     file, then be sure to write this declaration in both files.
32089
32090     This attribute is ignored for R8C target.
32091
32092'interrupt'
32093     Use this attribute to indicate that the specified function is an
32094     interrupt handler.  The compiler generates function entry and exit
32095     sequences suitable for use in an interrupt handler when this
32096     attribute is present.
32097
32098
32099File: gcc.info,  Node: M32R/D Function Attributes,  Next: m68k Function Attributes,  Prev: M32C Function Attributes,  Up: Function Attributes
32100
321016.33.14 M32R/D Function Attributes
32102----------------------------------
32103
32104These function attributes are supported by the M32R/D back end:
32105
32106'interrupt'
32107     Use this attribute to indicate that the specified function is an
32108     interrupt handler.  The compiler generates function entry and exit
32109     sequences suitable for use in an interrupt handler when this
32110     attribute is present.
32111
32112'model (MODEL-NAME)'
32113
32114     On the M32R/D, use this attribute to set the addressability of an
32115     object, and of the code generated for a function.  The identifier
32116     MODEL-NAME is one of 'small', 'medium', or 'large', representing
32117     each of the code models.
32118
32119     Small model objects live in the lower 16MB of memory (so that their
32120     addresses can be loaded with the 'ld24' instruction), and are
32121     callable with the 'bl' instruction.
32122
32123     Medium model objects may live anywhere in the 32-bit address space
32124     (the compiler generates 'seth/add3' instructions to load their
32125     addresses), and are callable with the 'bl' instruction.
32126
32127     Large model objects may live anywhere in the 32-bit address space
32128     (the compiler generates 'seth/add3' instructions to load their
32129     addresses), and may not be reachable with the 'bl' instruction (the
32130     compiler generates the much slower 'seth/add3/jl' instruction
32131     sequence).
32132
32133
32134File: gcc.info,  Node: m68k Function Attributes,  Next: MCORE Function Attributes,  Prev: M32R/D Function Attributes,  Up: Function Attributes
32135
321366.33.15 m68k Function Attributes
32137--------------------------------
32138
32139These function attributes are supported by the m68k back end:
32140
32141'interrupt'
32142'interrupt_handler'
32143     Use this attribute to indicate that the specified function is an
32144     interrupt handler.  The compiler generates function entry and exit
32145     sequences suitable for use in an interrupt handler when this
32146     attribute is present.  Either name may be used.
32147
32148'interrupt_thread'
32149     Use this attribute on fido, a subarchitecture of the m68k, to
32150     indicate that the specified function is an interrupt handler that
32151     is designed to run as a thread.  The compiler omits generate
32152     prologue/epilogue sequences and replaces the return instruction
32153     with a 'sleep' instruction.  This attribute is available only on
32154     fido.
32155
32156
32157File: gcc.info,  Node: MCORE Function Attributes,  Next: MeP Function Attributes,  Prev: m68k Function Attributes,  Up: Function Attributes
32158
321596.33.16 MCORE Function Attributes
32160---------------------------------
32161
32162These function attributes are supported by the MCORE back end:
32163
32164'naked'
32165     This attribute allows the compiler to construct the requisite
32166     function declaration, while allowing the body of the function to be
32167     assembly code.  The specified function will not have
32168     prologue/epilogue sequences generated by the compiler.  Only basic
32169     'asm' statements can safely be included in naked functions (*note
32170     Basic Asm::).  While using extended 'asm' or a mixture of basic
32171     'asm' and C code may appear to work, they cannot be depended upon
32172     to work reliably and are not supported.
32173
32174
32175File: gcc.info,  Node: MeP Function Attributes,  Next: MicroBlaze Function Attributes,  Prev: MCORE Function Attributes,  Up: Function Attributes
32176
321776.33.17 MeP Function Attributes
32178-------------------------------
32179
32180These function attributes are supported by the MeP back end:
32181
32182'disinterrupt'
32183     On MeP targets, this attribute causes the compiler to emit
32184     instructions to disable interrupts for the duration of the given
32185     function.
32186
32187'interrupt'
32188     Use this attribute to indicate that the specified function is an
32189     interrupt handler.  The compiler generates function entry and exit
32190     sequences suitable for use in an interrupt handler when this
32191     attribute is present.
32192
32193'near'
32194     This attribute causes the compiler to assume the called function is
32195     close enough to use the normal calling convention, overriding the
32196     '-mtf' command-line option.
32197
32198'far'
32199     On MeP targets this causes the compiler to use a calling convention
32200     that assumes the called function is too far away for the built-in
32201     addressing modes.
32202
32203'vliw'
32204     The 'vliw' attribute tells the compiler to emit instructions in
32205     VLIW mode instead of core mode.  Note that this attribute is not
32206     allowed unless a VLIW coprocessor has been configured and enabled
32207     through command-line options.
32208
32209
32210File: gcc.info,  Node: MicroBlaze Function Attributes,  Next: Microsoft Windows Function Attributes,  Prev: MeP Function Attributes,  Up: Function Attributes
32211
322126.33.18 MicroBlaze Function Attributes
32213--------------------------------------
32214
32215These function attributes are supported on MicroBlaze targets:
32216
32217'save_volatiles'
32218     Use this attribute to indicate that the function is an interrupt
32219     handler.  All volatile registers (in addition to non-volatile
32220     registers) are saved in the function prologue.  If the function is
32221     a leaf function, only volatiles used by the function are saved.  A
32222     normal function return is generated instead of a return from
32223     interrupt.
32224
32225'break_handler'
32226     Use this attribute to indicate that the specified function is a
32227     break handler.  The compiler generates function entry and exit
32228     sequences suitable for use in an break handler when this attribute
32229     is present.  The return from 'break_handler' is done through the
32230     'rtbd' instead of 'rtsd'.
32231
32232          void f () __attribute__ ((break_handler));
32233
32234'interrupt_handler'
32235'fast_interrupt'
32236     These attributes indicate that the specified function is an
32237     interrupt handler.  Use the 'fast_interrupt' attribute to indicate
32238     handlers used in low-latency interrupt mode, and
32239     'interrupt_handler' for interrupts that do not use low-latency
32240     handlers.  In both cases, GCC emits appropriate prologue code and
32241     generates a return from the handler using 'rtid' instead of 'rtsd'.
32242
32243
32244File: gcc.info,  Node: Microsoft Windows Function Attributes,  Next: MIPS Function Attributes,  Prev: MicroBlaze Function Attributes,  Up: Function Attributes
32245
322466.33.19 Microsoft Windows Function Attributes
32247---------------------------------------------
32248
32249The following attributes are available on Microsoft Windows and Symbian
32250OS targets.
32251
32252'dllexport'
32253     On Microsoft Windows targets and Symbian OS targets the 'dllexport'
32254     attribute causes the compiler to provide a global pointer to a
32255     pointer in a DLL, so that it can be referenced with the 'dllimport'
32256     attribute.  On Microsoft Windows targets, the pointer name is
32257     formed by combining '_imp__' and the function or variable name.
32258
32259     You can use '__declspec(dllexport)' as a synonym for '__attribute__
32260     ((dllexport))' for compatibility with other compilers.
32261
32262     On systems that support the 'visibility' attribute, this attribute
32263     also implies "default" visibility.  It is an error to explicitly
32264     specify any other visibility.
32265
32266     GCC's default behavior is to emit all inline functions with the
32267     'dllexport' attribute.  Since this can cause object file-size
32268     bloat, you can use '-fno-keep-inline-dllexport', which tells GCC to
32269     ignore the attribute for inlined functions unless the
32270     '-fkeep-inline-functions' flag is used instead.
32271
32272     The attribute is ignored for undefined symbols.
32273
32274     When applied to C++ classes, the attribute marks defined
32275     non-inlined member functions and static data members as exports.
32276     Static consts initialized in-class are not marked unless they are
32277     also defined out-of-class.
32278
32279     For Microsoft Windows targets there are alternative methods for
32280     including the symbol in the DLL's export table such as using a
32281     '.def' file with an 'EXPORTS' section or, with GNU ld, using the
32282     '--export-all' linker flag.
32283
32284'dllimport'
32285     On Microsoft Windows and Symbian OS targets, the 'dllimport'
32286     attribute causes the compiler to reference a function or variable
32287     via a global pointer to a pointer that is set up by the DLL
32288     exporting the symbol.  The attribute implies 'extern'.  On
32289     Microsoft Windows targets, the pointer name is formed by combining
32290     '_imp__' and the function or variable name.
32291
32292     You can use '__declspec(dllimport)' as a synonym for '__attribute__
32293     ((dllimport))' for compatibility with other compilers.
32294
32295     On systems that support the 'visibility' attribute, this attribute
32296     also implies "default" visibility.  It is an error to explicitly
32297     specify any other visibility.
32298
32299     Currently, the attribute is ignored for inlined functions.  If the
32300     attribute is applied to a symbol _definition_, an error is
32301     reported.  If a symbol previously declared 'dllimport' is later
32302     defined, the attribute is ignored in subsequent references, and a
32303     warning is emitted.  The attribute is also overridden by a
32304     subsequent declaration as 'dllexport'.
32305
32306     When applied to C++ classes, the attribute marks non-inlined member
32307     functions and static data members as imports.  However, the
32308     attribute is ignored for virtual methods to allow creation of
32309     vtables using thunks.
32310
32311     On the SH Symbian OS target the 'dllimport' attribute also has
32312     another affect--it can cause the vtable and run-time type
32313     information for a class to be exported.  This happens when the
32314     class has a dllimported constructor or a non-inline, non-pure
32315     virtual function and, for either of those two conditions, the class
32316     also has an inline constructor or destructor and has a key function
32317     that is defined in the current translation unit.
32318
32319     For Microsoft Windows targets the use of the 'dllimport' attribute
32320     on functions is not necessary, but provides a small performance
32321     benefit by eliminating a thunk in the DLL.  The use of the
32322     'dllimport' attribute on imported variables can be avoided by
32323     passing the '--enable-auto-import' switch to the GNU linker.  As
32324     with functions, using the attribute for a variable eliminates a
32325     thunk in the DLL.
32326
32327     One drawback to using this attribute is that a pointer to a
32328     _variable_ marked as 'dllimport' cannot be used as a constant
32329     address.  However, a pointer to a _function_ with the 'dllimport'
32330     attribute can be used as a constant initializer; in this case, the
32331     address of a stub function in the import lib is referenced.  On
32332     Microsoft Windows targets, the attribute can be disabled for
32333     functions by setting the '-mnop-fun-dllimport' flag.
32334
32335
32336File: gcc.info,  Node: MIPS Function Attributes,  Next: MSP430 Function Attributes,  Prev: Microsoft Windows Function Attributes,  Up: Function Attributes
32337
323386.33.20 MIPS Function Attributes
32339--------------------------------
32340
32341These function attributes are supported by the MIPS back end:
32342
32343'interrupt'
32344     Use this attribute to indicate that the specified function is an
32345     interrupt handler.  The compiler generates function entry and exit
32346     sequences suitable for use in an interrupt handler when this
32347     attribute is present.  An optional argument is supported for the
32348     interrupt attribute which allows the interrupt mode to be
32349     described.  By default GCC assumes the external interrupt
32350     controller (EIC) mode is in use, this can be explicitly set using
32351     'eic'.  When interrupts are non-masked then the requested Interrupt
32352     Priority Level (IPL) is copied to the current IPL which has the
32353     effect of only enabling higher priority interrupts.  To use
32354     vectored interrupt mode use the argument
32355     'vector=[sw0|sw1|hw0|hw1|hw2|hw3|hw4|hw5]', this will change the
32356     behavior of the non-masked interrupt support and GCC will arrange
32357     to mask all interrupts from sw0 up to and including the specified
32358     interrupt vector.
32359
32360     You can use the following attributes to modify the behavior of an
32361     interrupt handler:
32362     'use_shadow_register_set'
32363          Assume that the handler uses a shadow register set, instead of
32364          the main general-purpose registers.  An optional argument
32365          'intstack' is supported to indicate that the shadow register
32366          set contains a valid stack pointer.
32367
32368     'keep_interrupts_masked'
32369          Keep interrupts masked for the whole function.  Without this
32370          attribute, GCC tries to reenable interrupts for as much of the
32371          function as it can.
32372
32373     'use_debug_exception_return'
32374          Return using the 'deret' instruction.  Interrupt handlers that
32375          don't have this attribute return using 'eret' instead.
32376
32377     You can use any combination of these attributes, as shown below:
32378          void __attribute__ ((interrupt)) v0 ();
32379          void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
32380          void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
32381          void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
32382          void __attribute__ ((interrupt, use_shadow_register_set,
32383                               keep_interrupts_masked)) v4 ();
32384          void __attribute__ ((interrupt, use_shadow_register_set,
32385                               use_debug_exception_return)) v5 ();
32386          void __attribute__ ((interrupt, keep_interrupts_masked,
32387                               use_debug_exception_return)) v6 ();
32388          void __attribute__ ((interrupt, use_shadow_register_set,
32389                               keep_interrupts_masked,
32390                               use_debug_exception_return)) v7 ();
32391          void __attribute__ ((interrupt("eic"))) v8 ();
32392          void __attribute__ ((interrupt("vector=hw3"))) v9 ();
32393
32394'long_call'
32395'short_call'
32396'near'
32397'far'
32398     These attributes specify how a particular function is called on
32399     MIPS.  The attributes override the '-mlong-calls' (*note MIPS
32400     Options::) command-line switch.  The 'long_call' and 'far'
32401     attributes are synonyms, and cause the compiler to always call the
32402     function by first loading its address into a register, and then
32403     using the contents of that register.  The 'short_call' and 'near'
32404     attributes are synonyms, and have the opposite effect; they specify
32405     that non-PIC calls should be made using the more efficient 'jal'
32406     instruction.
32407
32408'mips16'
32409'nomips16'
32410
32411     On MIPS targets, you can use the 'mips16' and 'nomips16' function
32412     attributes to locally select or turn off MIPS16 code generation.  A
32413     function with the 'mips16' attribute is emitted as MIPS16 code,
32414     while MIPS16 code generation is disabled for functions with the
32415     'nomips16' attribute.  These attributes override the '-mips16' and
32416     '-mno-mips16' options on the command line (*note MIPS Options::).
32417
32418     When compiling files containing mixed MIPS16 and non-MIPS16 code,
32419     the preprocessor symbol '__mips16' reflects the setting on the
32420     command line, not that within individual functions.  Mixed MIPS16
32421     and non-MIPS16 code may interact badly with some GCC extensions
32422     such as '__builtin_apply' (*note Constructing Calls::).
32423
32424'micromips, MIPS'
32425'nomicromips, MIPS'
32426
32427     On MIPS targets, you can use the 'micromips' and 'nomicromips'
32428     function attributes to locally select or turn off microMIPS code
32429     generation.  A function with the 'micromips' attribute is emitted
32430     as microMIPS code, while microMIPS code generation is disabled for
32431     functions with the 'nomicromips' attribute.  These attributes
32432     override the '-mmicromips' and '-mno-micromips' options on the
32433     command line (*note MIPS Options::).
32434
32435     When compiling files containing mixed microMIPS and non-microMIPS
32436     code, the preprocessor symbol '__mips_micromips' reflects the
32437     setting on the command line, not that within individual functions.
32438     Mixed microMIPS and non-microMIPS code may interact badly with some
32439     GCC extensions such as '__builtin_apply' (*note Constructing
32440     Calls::).
32441
32442'nocompression'
32443     On MIPS targets, you can use the 'nocompression' function attribute
32444     to locally turn off MIPS16 and microMIPS code generation.  This
32445     attribute overrides the '-mips16' and '-mmicromips' options on the
32446     command line (*note MIPS Options::).
32447
32448
32449File: gcc.info,  Node: MSP430 Function Attributes,  Next: NDS32 Function Attributes,  Prev: MIPS Function Attributes,  Up: Function Attributes
32450
324516.33.21 MSP430 Function Attributes
32452----------------------------------
32453
32454These function attributes are supported by the MSP430 back end:
32455
32456'critical'
32457     Critical functions disable interrupts upon entry and restore the
32458     previous interrupt state upon exit.  Critical functions cannot also
32459     have the 'naked', 'reentrant' or 'interrupt' attributes.
32460
32461     The MSP430 hardware ensures that interrupts are disabled on entry
32462     to 'interrupt' functions, and restores the previous interrupt state
32463     on exit.  The 'critical' attribute is therefore redundant on
32464     'interrupt' functions.
32465
32466'interrupt'
32467     Use this attribute to indicate that the specified function is an
32468     interrupt handler.  The compiler generates function entry and exit
32469     sequences suitable for use in an interrupt handler when this
32470     attribute is present.
32471
32472     You can provide an argument to the interrupt attribute which
32473     specifies a name or number.  If the argument is a number it
32474     indicates the slot in the interrupt vector table (0 - 31) to which
32475     this handler should be assigned.  If the argument is a name it is
32476     treated as a symbolic name for the vector slot.  These names should
32477     match up with appropriate entries in the linker script.  By default
32478     the names 'watchdog' for vector 26, 'nmi' for vector 30 and 'reset'
32479     for vector 31 are recognized.
32480
32481'naked'
32482     This attribute allows the compiler to construct the requisite
32483     function declaration, while allowing the body of the function to be
32484     assembly code.  The specified function will not have
32485     prologue/epilogue sequences generated by the compiler.  Only basic
32486     'asm' statements can safely be included in naked functions (*note
32487     Basic Asm::).  While using extended 'asm' or a mixture of basic
32488     'asm' and C code may appear to work, they cannot be depended upon
32489     to work reliably and are not supported.
32490
32491'reentrant'
32492     Reentrant functions disable interrupts upon entry and enable them
32493     upon exit.  Reentrant functions cannot also have the 'naked' or
32494     'critical' attributes.  They can have the 'interrupt' attribute.
32495
32496'wakeup'
32497     This attribute only applies to interrupt functions.  It is silently
32498     ignored if applied to a non-interrupt function.  A wakeup interrupt
32499     function will rouse the processor from any low-power state that it
32500     might be in when the function exits.
32501
32502'lower'
32503'upper'
32504'either'
32505     On the MSP430 target these attributes can be used to specify
32506     whether the function or variable should be placed into low memory,
32507     high memory, or the placement should be left to the linker to
32508     decide.  The attributes are only significant if compiling for the
32509     MSP430X architecture.
32510
32511     The attributes work in conjunction with a linker script that has
32512     been augmented to specify where to place sections with a '.lower'
32513     and a '.upper' prefix.  So, for example, as well as placing the
32514     '.data' section, the script also specifies the placement of a
32515     '.lower.data' and a '.upper.data' section.  The intention is that
32516     'lower' sections are placed into a small but easier to access
32517     memory region and the upper sections are placed into a larger, but
32518     slower to access, region.
32519
32520     The 'either' attribute is special.  It tells the linker to place
32521     the object into the corresponding 'lower' section if there is room
32522     for it.  If there is insufficient room then the object is placed
32523     into the corresponding 'upper' section instead.  Note that the
32524     placement algorithm is not very sophisticated.  It does not attempt
32525     to find an optimal packing of the 'lower' sections.  It just makes
32526     one pass over the objects and does the best that it can.  Using the
32527     '-ffunction-sections' and '-fdata-sections' command-line options
32528     can help the packing, however, since they produce smaller, easier
32529     to pack regions.
32530
32531
32532File: gcc.info,  Node: NDS32 Function Attributes,  Next: Nios II Function Attributes,  Prev: MSP430 Function Attributes,  Up: Function Attributes
32533
325346.33.22 NDS32 Function Attributes
32535---------------------------------
32536
32537These function attributes are supported by the NDS32 back end:
32538
32539'exception'
32540     Use this attribute on the NDS32 target to indicate that the
32541     specified function is an exception handler.  The compiler will
32542     generate corresponding sections for use in an exception handler.
32543
32544'interrupt'
32545     On NDS32 target, this attribute indicates that the specified
32546     function is an interrupt handler.  The compiler generates
32547     corresponding sections for use in an interrupt handler.  You can
32548     use the following attributes to modify the behavior:
32549     'nested'
32550          This interrupt service routine is interruptible.
32551     'not_nested'
32552          This interrupt service routine is not interruptible.
32553     'nested_ready'
32554          This interrupt service routine is interruptible after
32555          'PSW.GIE' (global interrupt enable) is set.  This allows
32556          interrupt service routine to finish some short critical code
32557          before enabling interrupts.
32558     'save_all'
32559          The system will help save all registers into stack before
32560          entering interrupt handler.
32561     'partial_save'
32562          The system will help save caller registers into stack before
32563          entering interrupt handler.
32564
32565'naked'
32566     This attribute allows the compiler to construct the requisite
32567     function declaration, while allowing the body of the function to be
32568     assembly code.  The specified function will not have
32569     prologue/epilogue sequences generated by the compiler.  Only basic
32570     'asm' statements can safely be included in naked functions (*note
32571     Basic Asm::).  While using extended 'asm' or a mixture of basic
32572     'asm' and C code may appear to work, they cannot be depended upon
32573     to work reliably and are not supported.
32574
32575'reset'
32576     Use this attribute on the NDS32 target to indicate that the
32577     specified function is a reset handler.  The compiler will generate
32578     corresponding sections for use in a reset handler.  You can use the
32579     following attributes to provide extra exception handling:
32580     'nmi'
32581          Provide a user-defined function to handle NMI exception.
32582     'warm'
32583          Provide a user-defined function to handle warm reset
32584          exception.
32585
32586
32587File: gcc.info,  Node: Nios II Function Attributes,  Next: Nvidia PTX Function Attributes,  Prev: NDS32 Function Attributes,  Up: Function Attributes
32588
325896.33.23 Nios II Function Attributes
32590-----------------------------------
32591
32592These function attributes are supported by the Nios II back end:
32593
32594'target (OPTIONS)'
32595     As discussed in *note Common Function Attributes::, this attribute
32596     allows specification of target-specific compilation options.
32597
32598     When compiling for Nios II, the following options are allowed:
32599
32600     'custom-INSN=N'
32601     'no-custom-INSN'
32602          Each 'custom-INSN=N' attribute locally enables use of a custom
32603          instruction with encoding N when generating code that uses
32604          INSN.  Similarly, 'no-custom-INSN' locally inhibits use of the
32605          custom instruction INSN.  These target attributes correspond
32606          to the '-mcustom-INSN=N' and '-mno-custom-INSN' command-line
32607          options, and support the same set of INSN keywords.  *Note
32608          Nios II Options::, for more information.
32609
32610     'custom-fpu-cfg=NAME'
32611          This attribute corresponds to the '-mcustom-fpu-cfg=NAME'
32612          command-line option, to select a predefined set of custom
32613          instructions named NAME.  *Note Nios II Options::, for more
32614          information.
32615
32616
32617File: gcc.info,  Node: Nvidia PTX Function Attributes,  Next: PowerPC Function Attributes,  Prev: Nios II Function Attributes,  Up: Function Attributes
32618
326196.33.24 Nvidia PTX Function Attributes
32620--------------------------------------
32621
32622These function attributes are supported by the Nvidia PTX back end:
32623
32624'kernel'
32625     This attribute indicates that the corresponding function should be
32626     compiled as a kernel function, which can be invoked from the host
32627     via the CUDA RT library.  By default functions are only callable
32628     only from other PTX functions.
32629
32630     Kernel functions must have 'void' return type.
32631
32632
32633File: gcc.info,  Node: PowerPC Function Attributes,  Next: RISC-V Function Attributes,  Prev: Nvidia PTX Function Attributes,  Up: Function Attributes
32634
326356.33.25 PowerPC Function Attributes
32636-----------------------------------
32637
32638These function attributes are supported by the PowerPC back end:
32639
32640'longcall'
32641'shortcall'
32642     The 'longcall' attribute indicates that the function might be far
32643     away from the call site and require a different (more expensive)
32644     calling sequence.  The 'shortcall' attribute indicates that the
32645     function is always close enough for the shorter calling sequence to
32646     be used.  These attributes override both the '-mlongcall' switch
32647     and the '#pragma longcall' setting.
32648
32649     *Note RS/6000 and PowerPC Options::, for more information on
32650     whether long calls are necessary.
32651
32652'target (OPTIONS)'
32653     As discussed in *note Common Function Attributes::, this attribute
32654     allows specification of target-specific compilation options.
32655
32656     On the PowerPC, the following options are allowed:
32657
32658     'altivec'
32659     'no-altivec'
32660          Generate code that uses (does not use) AltiVec instructions.
32661          In 32-bit code, you cannot enable AltiVec instructions unless
32662          '-mabi=altivec' is used on the command line.
32663
32664     'cmpb'
32665     'no-cmpb'
32666          Generate code that uses (does not use) the compare bytes
32667          instruction implemented on the POWER6 processor and other
32668          processors that support the PowerPC V2.05 architecture.
32669
32670     'dlmzb'
32671     'no-dlmzb'
32672          Generate code that uses (does not use) the string-search
32673          'dlmzb' instruction on the IBM 405, 440, 464 and 476
32674          processors.  This instruction is generated by default when
32675          targeting those processors.
32676
32677     'fprnd'
32678     'no-fprnd'
32679          Generate code that uses (does not use) the FP round to integer
32680          instructions implemented on the POWER5+ processor and other
32681          processors that support the PowerPC V2.03 architecture.
32682
32683     'hard-dfp'
32684     'no-hard-dfp'
32685          Generate code that uses (does not use) the decimal
32686          floating-point instructions implemented on some POWER
32687          processors.
32688
32689     'isel'
32690     'no-isel'
32691          Generate code that uses (does not use) ISEL instruction.
32692
32693     'mfcrf'
32694     'no-mfcrf'
32695          Generate code that uses (does not use) the move from condition
32696          register field instruction implemented on the POWER4 processor
32697          and other processors that support the PowerPC V2.01
32698          architecture.
32699
32700     'mfpgpr'
32701     'no-mfpgpr'
32702          Generate code that uses (does not use) the FP move to/from
32703          general purpose register instructions implemented on the
32704          POWER6X processor and other processors that support the
32705          extended PowerPC V2.05 architecture.
32706
32707     'mulhw'
32708     'no-mulhw'
32709          Generate code that uses (does not use) the half-word multiply
32710          and multiply-accumulate instructions on the IBM 405, 440, 464
32711          and 476 processors.  These instructions are generated by
32712          default when targeting those processors.
32713
32714     'multiple'
32715     'no-multiple'
32716          Generate code that uses (does not use) the load multiple word
32717          instructions and the store multiple word instructions.
32718
32719     'update'
32720     'no-update'
32721          Generate code that uses (does not use) the load or store
32722          instructions that update the base register to the address of
32723          the calculated memory location.
32724
32725     'popcntb'
32726     'no-popcntb'
32727          Generate code that uses (does not use) the popcount and
32728          double-precision FP reciprocal estimate instruction
32729          implemented on the POWER5 processor and other processors that
32730          support the PowerPC V2.02 architecture.
32731
32732     'popcntd'
32733     'no-popcntd'
32734          Generate code that uses (does not use) the popcount
32735          instruction implemented on the POWER7 processor and other
32736          processors that support the PowerPC V2.06 architecture.
32737
32738     'powerpc-gfxopt'
32739     'no-powerpc-gfxopt'
32740          Generate code that uses (does not use) the optional PowerPC
32741          architecture instructions in the Graphics group, including
32742          floating-point select.
32743
32744     'powerpc-gpopt'
32745     'no-powerpc-gpopt'
32746          Generate code that uses (does not use) the optional PowerPC
32747          architecture instructions in the General Purpose group,
32748          including floating-point square root.
32749
32750     'recip-precision'
32751     'no-recip-precision'
32752          Assume (do not assume) that the reciprocal estimate
32753          instructions provide higher-precision estimates than is
32754          mandated by the PowerPC ABI.
32755
32756     'string'
32757     'no-string'
32758          Generate code that uses (does not use) the load string
32759          instructions and the store string word instructions to save
32760          multiple registers and do small block moves.
32761
32762     'vsx'
32763     'no-vsx'
32764          Generate code that uses (does not use) vector/scalar (VSX)
32765          instructions, and also enable the use of built-in functions
32766          that allow more direct access to the VSX instruction set.  In
32767          32-bit code, you cannot enable VSX or AltiVec instructions
32768          unless '-mabi=altivec' is used on the command line.
32769
32770     'friz'
32771     'no-friz'
32772          Generate (do not generate) the 'friz' instruction when the
32773          '-funsafe-math-optimizations' option is used to optimize
32774          rounding a floating-point value to 64-bit integer and back to
32775          floating point.  The 'friz' instruction does not return the
32776          same value if the floating-point number is too large to fit in
32777          an integer.
32778
32779     'avoid-indexed-addresses'
32780     'no-avoid-indexed-addresses'
32781          Generate code that tries to avoid (not avoid) the use of
32782          indexed load or store instructions.
32783
32784     'paired'
32785     'no-paired'
32786          Generate code that uses (does not use) the generation of
32787          PAIRED simd instructions.
32788
32789     'longcall'
32790     'no-longcall'
32791          Generate code that assumes (does not assume) that all calls
32792          are far away so that a longer more expensive calling sequence
32793          is required.
32794
32795     'cpu=CPU'
32796          Specify the architecture to generate code for when compiling
32797          the function.  If you select the 'target("cpu=power7")'
32798          attribute when generating 32-bit code, VSX and AltiVec
32799          instructions are not generated unless you use the
32800          '-mabi=altivec' option on the command line.
32801
32802     'tune=TUNE'
32803          Specify the architecture to tune for when compiling the
32804          function.  If you do not specify the 'target("tune=TUNE")'
32805          attribute and you do specify the 'target("cpu=CPU")'
32806          attribute, compilation tunes for the CPU architecture, and not
32807          the default tuning specified on the command line.
32808
32809     On the PowerPC, the inliner does not inline a function that has
32810     different target options than the caller, unless the callee has a
32811     subset of the target options of the caller.
32812
32813
32814File: gcc.info,  Node: RISC-V Function Attributes,  Next: RL78 Function Attributes,  Prev: PowerPC Function Attributes,  Up: Function Attributes
32815
328166.33.26 RISC-V Function Attributes
32817----------------------------------
32818
32819These function attributes are supported by the RISC-V back end:
32820
32821'naked'
32822     This attribute allows the compiler to construct the requisite
32823     function declaration, while allowing the body of the function to be
32824     assembly code.  The specified function will not have
32825     prologue/epilogue sequences generated by the compiler.  Only basic
32826     'asm' statements can safely be included in naked functions (*note
32827     Basic Asm::).  While using extended 'asm' or a mixture of basic
32828     'asm' and C code may appear to work, they cannot be depended upon
32829     to work reliably and are not supported.
32830
32831'interrupt'
32832     Use this attribute to indicate that the specified function is an
32833     interrupt handler.  The compiler generates function entry and exit
32834     sequences suitable for use in an interrupt handler when this
32835     attribute is present.
32836
32837     You can specify the kind of interrupt to be handled by adding an
32838     optional parameter to the interrupt attribute like this:
32839
32840          void f (void) __attribute__ ((interrupt ("user")));
32841
32842     Permissible values for this parameter are 'user', 'supervisor', and
32843     'machine'.  If there is no parameter, then it defaults to
32844     'machine'.
32845
32846
32847File: gcc.info,  Node: RL78 Function Attributes,  Next: RX Function Attributes,  Prev: RISC-V Function Attributes,  Up: Function Attributes
32848
328496.33.27 RL78 Function Attributes
32850--------------------------------
32851
32852These function attributes are supported by the RL78 back end:
32853
32854'interrupt'
32855'brk_interrupt'
32856     These attributes indicate that the specified function is an
32857     interrupt handler.  The compiler generates function entry and exit
32858     sequences suitable for use in an interrupt handler when this
32859     attribute is present.
32860
32861     Use 'brk_interrupt' instead of 'interrupt' for handlers intended to
32862     be used with the 'BRK' opcode (i.e. those that must end with 'RETB'
32863     instead of 'RETI').
32864
32865'naked'
32866     This attribute allows the compiler to construct the requisite
32867     function declaration, while allowing the body of the function to be
32868     assembly code.  The specified function will not have
32869     prologue/epilogue sequences generated by the compiler.  Only basic
32870     'asm' statements can safely be included in naked functions (*note
32871     Basic Asm::).  While using extended 'asm' or a mixture of basic
32872     'asm' and C code may appear to work, they cannot be depended upon
32873     to work reliably and are not supported.
32874
32875
32876File: gcc.info,  Node: RX Function Attributes,  Next: S/390 Function Attributes,  Prev: RL78 Function Attributes,  Up: Function Attributes
32877
328786.33.28 RX Function Attributes
32879------------------------------
32880
32881These function attributes are supported by the RX back end:
32882
32883'fast_interrupt'
32884     Use this attribute on the RX port to indicate that the specified
32885     function is a fast interrupt handler.  This is just like the
32886     'interrupt' attribute, except that 'freit' is used to return
32887     instead of 'reit'.
32888
32889'interrupt'
32890     Use this attribute to indicate that the specified function is an
32891     interrupt handler.  The compiler generates function entry and exit
32892     sequences suitable for use in an interrupt handler when this
32893     attribute is present.
32894
32895     On RX and RL78 targets, you may specify one or more vector numbers
32896     as arguments to the attribute, as well as naming an alternate table
32897     name.  Parameters are handled sequentially, so one handler can be
32898     assigned to multiple entries in multiple tables.  One may also pass
32899     the magic string '"$default"' which causes the function to be used
32900     for any unfilled slots in the current table.
32901
32902     This example shows a simple assignment of a function to one vector
32903     in the default table (note that preprocessor macros may be used for
32904     chip-specific symbolic vector names):
32905          void __attribute__ ((interrupt (5))) txd1_handler ();
32906
32907     This example assigns a function to two slots in the default table
32908     (using preprocessor macros defined elsewhere) and makes it the
32909     default for the 'dct' table:
32910          void __attribute__ ((interrupt (RXD1_VECT,RXD2_VECT,"dct","$default")))
32911          	txd1_handler ();
32912
32913'naked'
32914     This attribute allows the compiler to construct the requisite
32915     function declaration, while allowing the body of the function to be
32916     assembly code.  The specified function will not have
32917     prologue/epilogue sequences generated by the compiler.  Only basic
32918     'asm' statements can safely be included in naked functions (*note
32919     Basic Asm::).  While using extended 'asm' or a mixture of basic
32920     'asm' and C code may appear to work, they cannot be depended upon
32921     to work reliably and are not supported.
32922
32923'vector'
32924     This RX attribute is similar to the 'interrupt' attribute,
32925     including its parameters, but does not make the function an
32926     interrupt-handler type function (i.e. it retains the normal C
32927     function calling ABI). See the 'interrupt' attribute for a
32928     description of its arguments.
32929
32930
32931File: gcc.info,  Node: S/390 Function Attributes,  Next: SH Function Attributes,  Prev: RX Function Attributes,  Up: Function Attributes
32932
329336.33.29 S/390 Function Attributes
32934---------------------------------
32935
32936These function attributes are supported on the S/390:
32937
32938'hotpatch (HALFWORDS-BEFORE-FUNCTION-LABEL,HALFWORDS-AFTER-FUNCTION-LABEL)'
32939
32940     On S/390 System z targets, you can use this function attribute to
32941     make GCC generate a "hot-patching" function prologue.  If the
32942     '-mhotpatch=' command-line option is used at the same time, the
32943     'hotpatch' attribute takes precedence.  The first of the two
32944     arguments specifies the number of halfwords to be added before the
32945     function label.  A second argument can be used to specify the
32946     number of halfwords to be added after the function label.  For both
32947     arguments the maximum allowed value is 1000000.
32948
32949     If both arguments are zero, hotpatching is disabled.
32950
32951'target (OPTIONS)'
32952     As discussed in *note Common Function Attributes::, this attribute
32953     allows specification of target-specific compilation options.
32954
32955     On S/390, the following options are supported:
32956
32957     'arch='
32958     'tune='
32959     'stack-guard='
32960     'stack-size='
32961     'branch-cost='
32962     'warn-framesize='
32963     'backchain'
32964     'no-backchain'
32965     'hard-dfp'
32966     'no-hard-dfp'
32967     'hard-float'
32968     'soft-float'
32969     'htm'
32970     'no-htm'
32971     'vx'
32972     'no-vx'
32973     'packed-stack'
32974     'no-packed-stack'
32975     'small-exec'
32976     'no-small-exec'
32977     'mvcle'
32978     'no-mvcle'
32979     'warn-dynamicstack'
32980     'no-warn-dynamicstack'
32981
32982     The options work exactly like the S/390 specific command line
32983     options (without the prefix '-m') except that they do not change
32984     any feature macros.  For example,
32985
32986          target("no-vx")
32987
32988     does not undefine the '__VEC__' macro.
32989
32990
32991File: gcc.info,  Node: SH Function Attributes,  Next: SPU Function Attributes,  Prev: S/390 Function Attributes,  Up: Function Attributes
32992
329936.33.30 SH Function Attributes
32994------------------------------
32995
32996These function attributes are supported on the SH family of processors:
32997
32998'function_vector'
32999     On SH2A targets, this attribute declares a function to be called
33000     using the TBR relative addressing mode.  The argument to this
33001     attribute is the entry number of the same function in a vector
33002     table containing all the TBR relative addressable functions.  For
33003     correct operation the TBR must be setup accordingly to point to the
33004     start of the vector table before any functions with this attribute
33005     are invoked.  Usually a good place to do the initialization is the
33006     startup routine.  The TBR relative vector table can have at max 256
33007     function entries.  The jumps to these functions are generated using
33008     a SH2A specific, non delayed branch instruction JSR/N @(disp8,TBR).
33009     You must use GAS and GLD from GNU binutils version 2.7 or later for
33010     this attribute to work correctly.
33011
33012     In an application, for a function being called once, this attribute
33013     saves at least 8 bytes of code; and if other successive calls are
33014     being made to the same function, it saves 2 bytes of code per each
33015     of these calls.
33016
33017'interrupt_handler'
33018     Use this attribute to indicate that the specified function is an
33019     interrupt handler.  The compiler generates function entry and exit
33020     sequences suitable for use in an interrupt handler when this
33021     attribute is present.
33022
33023'nosave_low_regs'
33024     Use this attribute on SH targets to indicate that an
33025     'interrupt_handler' function should not save and restore registers
33026     R0..R7.  This can be used on SH3* and SH4* targets that have a
33027     second R0..R7 register bank for non-reentrant interrupt handlers.
33028
33029'renesas'
33030     On SH targets this attribute specifies that the function or struct
33031     follows the Renesas ABI.
33032
33033'resbank'
33034     On the SH2A target, this attribute enables the high-speed register
33035     saving and restoration using a register bank for
33036     'interrupt_handler' routines.  Saving to the bank is performed
33037     automatically after the CPU accepts an interrupt that uses a
33038     register bank.
33039
33040     The nineteen 32-bit registers comprising general register R0 to
33041     R14, control register GBR, and system registers MACH, MACL, and PR
33042     and the vector table address offset are saved into a register bank.
33043     Register banks are stacked in first-in last-out (FILO) sequence.
33044     Restoration from the bank is executed by issuing a RESBANK
33045     instruction.
33046
33047'sp_switch'
33048     Use this attribute on the SH to indicate an 'interrupt_handler'
33049     function should switch to an alternate stack.  It expects a string
33050     argument that names a global variable holding the address of the
33051     alternate stack.
33052
33053          void *alt_stack;
33054          void f () __attribute__ ((interrupt_handler,
33055                                    sp_switch ("alt_stack")));
33056
33057'trap_exit'
33058     Use this attribute on the SH for an 'interrupt_handler' to return
33059     using 'trapa' instead of 'rte'.  This attribute expects an integer
33060     argument specifying the trap number to be used.
33061
33062'trapa_handler'
33063     On SH targets this function attribute is similar to
33064     'interrupt_handler' but it does not save and restore all registers.
33065
33066
33067File: gcc.info,  Node: SPU Function Attributes,  Next: Symbian OS Function Attributes,  Prev: SH Function Attributes,  Up: Function Attributes
33068
330696.33.31 SPU Function Attributes
33070-------------------------------
33071
33072These function attributes are supported by the SPU back end:
33073
33074'naked'
33075     This attribute allows the compiler to construct the requisite
33076     function declaration, while allowing the body of the function to be
33077     assembly code.  The specified function will not have
33078     prologue/epilogue sequences generated by the compiler.  Only basic
33079     'asm' statements can safely be included in naked functions (*note
33080     Basic Asm::).  While using extended 'asm' or a mixture of basic
33081     'asm' and C code may appear to work, they cannot be depended upon
33082     to work reliably and are not supported.
33083
33084
33085File: gcc.info,  Node: Symbian OS Function Attributes,  Next: V850 Function Attributes,  Prev: SPU Function Attributes,  Up: Function Attributes
33086
330876.33.32 Symbian OS Function Attributes
33088--------------------------------------
33089
33090*Note Microsoft Windows Function Attributes::, for discussion of the
33091'dllexport' and 'dllimport' attributes.
33092
33093
33094File: gcc.info,  Node: V850 Function Attributes,  Next: Visium Function Attributes,  Prev: Symbian OS Function Attributes,  Up: Function Attributes
33095
330966.33.33 V850 Function Attributes
33097--------------------------------
33098
33099The V850 back end supports these function attributes:
33100
33101'interrupt'
33102'interrupt_handler'
33103     Use these attributes to indicate that the specified function is an
33104     interrupt handler.  The compiler generates function entry and exit
33105     sequences suitable for use in an interrupt handler when either
33106     attribute is present.
33107
33108
33109File: gcc.info,  Node: Visium Function Attributes,  Next: x86 Function Attributes,  Prev: V850 Function Attributes,  Up: Function Attributes
33110
331116.33.34 Visium Function Attributes
33112----------------------------------
33113
33114These function attributes are supported by the Visium back end:
33115
33116'interrupt'
33117     Use this attribute to indicate that the specified function is an
33118     interrupt handler.  The compiler generates function entry and exit
33119     sequences suitable for use in an interrupt handler when this
33120     attribute is present.
33121
33122
33123File: gcc.info,  Node: x86 Function Attributes,  Next: Xstormy16 Function Attributes,  Prev: Visium Function Attributes,  Up: Function Attributes
33124
331256.33.35 x86 Function Attributes
33126-------------------------------
33127
33128These function attributes are supported by the x86 back end:
33129
33130'cdecl'
33131     On the x86-32 targets, the 'cdecl' attribute causes the compiler to
33132     assume that the calling function pops off the stack space used to
33133     pass arguments.  This is useful to override the effects of the
33134     '-mrtd' switch.
33135
33136'fastcall'
33137     On x86-32 targets, the 'fastcall' attribute causes the compiler to
33138     pass the first argument (if of integral type) in the register ECX
33139     and the second argument (if of integral type) in the register EDX.
33140     Subsequent and other typed arguments are passed on the stack.  The
33141     called function pops the arguments off the stack.  If the number of
33142     arguments is variable all arguments are pushed on the stack.
33143
33144'thiscall'
33145     On x86-32 targets, the 'thiscall' attribute causes the compiler to
33146     pass the first argument (if of integral type) in the register ECX.
33147     Subsequent and other typed arguments are passed on the stack.  The
33148     called function pops the arguments off the stack.  If the number of
33149     arguments is variable all arguments are pushed on the stack.  The
33150     'thiscall' attribute is intended for C++ non-static member
33151     functions.  As a GCC extension, this calling convention can be used
33152     for C functions and for static member methods.
33153
33154'ms_abi'
33155'sysv_abi'
33156
33157     On 32-bit and 64-bit x86 targets, you can use an ABI attribute to
33158     indicate which calling convention should be used for a function.
33159     The 'ms_abi' attribute tells the compiler to use the Microsoft ABI,
33160     while the 'sysv_abi' attribute tells the compiler to use the ABI
33161     used on GNU/Linux and other systems.  The default is to use the
33162     Microsoft ABI when targeting Windows.  On all other systems, the
33163     default is the x86/AMD ABI.
33164
33165     Note, the 'ms_abi' attribute for Microsoft Windows 64-bit targets
33166     currently requires the '-maccumulate-outgoing-args' option.
33167
33168'callee_pop_aggregate_return (NUMBER)'
33169
33170     On x86-32 targets, you can use this attribute to control how
33171     aggregates are returned in memory.  If the caller is responsible
33172     for popping the hidden pointer together with the rest of the
33173     arguments, specify NUMBER equal to zero.  If callee is responsible
33174     for popping the hidden pointer, specify NUMBER equal to one.
33175
33176     The default x86-32 ABI assumes that the callee pops the stack for
33177     hidden pointer.  However, on x86-32 Microsoft Windows targets, the
33178     compiler assumes that the caller pops the stack for hidden pointer.
33179
33180'ms_hook_prologue'
33181
33182     On 32-bit and 64-bit x86 targets, you can use this function
33183     attribute to make GCC generate the "hot-patching" function prologue
33184     used in Win32 API functions in Microsoft Windows XP Service Pack 2
33185     and newer.
33186
33187'naked'
33188     This attribute allows the compiler to construct the requisite
33189     function declaration, while allowing the body of the function to be
33190     assembly code.  The specified function will not have
33191     prologue/epilogue sequences generated by the compiler.  Only basic
33192     'asm' statements can safely be included in naked functions (*note
33193     Basic Asm::).  While using extended 'asm' or a mixture of basic
33194     'asm' and C code may appear to work, they cannot be depended upon
33195     to work reliably and are not supported.
33196
33197'regparm (NUMBER)'
33198     On x86-32 targets, the 'regparm' attribute causes the compiler to
33199     pass arguments number one to NUMBER if they are of integral type in
33200     registers EAX, EDX, and ECX instead of on the stack.  Functions
33201     that take a variable number of arguments continue to be passed all
33202     of their arguments on the stack.
33203
33204     Beware that on some ELF systems this attribute is unsuitable for
33205     global functions in shared libraries with lazy binding (which is
33206     the default).  Lazy binding sends the first call via resolving code
33207     in the loader, which might assume EAX, EDX and ECX can be
33208     clobbered, as per the standard calling conventions.  Solaris 8 is
33209     affected by this.  Systems with the GNU C Library version 2.1 or
33210     higher and FreeBSD are believed to be safe since the loaders there
33211     save EAX, EDX and ECX. (Lazy binding can be disabled with the
33212     linker or the loader if desired, to avoid the problem.)
33213
33214'sseregparm'
33215     On x86-32 targets with SSE support, the 'sseregparm' attribute
33216     causes the compiler to pass up to 3 floating-point arguments in SSE
33217     registers instead of on the stack.  Functions that take a variable
33218     number of arguments continue to pass all of their floating-point
33219     arguments on the stack.
33220
33221'force_align_arg_pointer'
33222     On x86 targets, the 'force_align_arg_pointer' attribute may be
33223     applied to individual function definitions, generating an alternate
33224     prologue and epilogue that realigns the run-time stack if
33225     necessary.  This supports mixing legacy codes that run with a
33226     4-byte aligned stack with modern codes that keep a 16-byte stack
33227     for SSE compatibility.
33228
33229'stdcall'
33230     On x86-32 targets, the 'stdcall' attribute causes the compiler to
33231     assume that the called function pops off the stack space used to
33232     pass arguments, unless it takes a variable number of arguments.
33233
33234'no_caller_saved_registers'
33235     Use this attribute to indicate that the specified function has no
33236     caller-saved registers.  That is, all registers are callee-saved.
33237     For example, this attribute can be used for a function called from
33238     an interrupt handler.  The compiler generates proper function entry
33239     and exit sequences to save and restore any modified registers,
33240     except for the EFLAGS register.  Since GCC doesn't preserve SSE,
33241     MMX nor x87 states, the GCC option '-mgeneral-regs-only' should be
33242     used to compile functions with 'no_caller_saved_registers'
33243     attribute.
33244
33245'interrupt'
33246     Use this attribute to indicate that the specified function is an
33247     interrupt handler or an exception handler (depending on parameters
33248     passed to the function, explained further).  The compiler generates
33249     function entry and exit sequences suitable for use in an interrupt
33250     handler when this attribute is present.  The 'IRET' instruction,
33251     instead of the 'RET' instruction, is used to return from interrupt
33252     handlers.  All registers, except for the EFLAGS register which is
33253     restored by the 'IRET' instruction, are preserved by the compiler.
33254     Since GCC doesn't preserve SSE, MMX nor x87 states, the GCC option
33255     '-mgeneral-regs-only' should be used to compile interrupt and
33256     exception handlers.
33257
33258     Any interruptible-without-stack-switch code must be compiled with
33259     '-mno-red-zone' since interrupt handlers can and will, because of
33260     the hardware design, touch the red zone.
33261
33262     An interrupt handler must be declared with a mandatory pointer
33263     argument:
33264
33265          struct interrupt_frame;
33266
33267          __attribute__ ((interrupt))
33268          void
33269          f (struct interrupt_frame *frame)
33270          {
33271          }
33272
33273     and you must define 'struct interrupt_frame' as described in the
33274     processor's manual.
33275
33276     Exception handlers differ from interrupt handlers because the
33277     system pushes an error code on the stack.  An exception handler
33278     declaration is similar to that for an interrupt handler, but with a
33279     different mandatory function signature.  The compiler arranges to
33280     pop the error code off the stack before the 'IRET' instruction.
33281
33282          #ifdef __x86_64__
33283          typedef unsigned long long int uword_t;
33284          #else
33285          typedef unsigned int uword_t;
33286          #endif
33287
33288          struct interrupt_frame;
33289
33290          __attribute__ ((interrupt))
33291          void
33292          f (struct interrupt_frame *frame, uword_t error_code)
33293          {
33294            ...
33295          }
33296
33297     Exception handlers should only be used for exceptions that push an
33298     error code; you should use an interrupt handler in other cases.
33299     The system will crash if the wrong kind of handler is used.
33300
33301'target (OPTIONS)'
33302     As discussed in *note Common Function Attributes::, this attribute
33303     allows specification of target-specific compilation options.
33304
33305     On the x86, the following options are allowed:
33306     '3dnow'
33307     'no-3dnow'
33308          Enable/disable the generation of the 3DNow! instructions.
33309
33310     '3dnowa'
33311     'no-3dnowa'
33312          Enable/disable the generation of the enhanced 3DNow!
33313          instructions.
33314
33315     'abm'
33316     'no-abm'
33317          Enable/disable the generation of the advanced bit
33318          instructions.
33319
33320     'adx'
33321     'no-adx'
33322          Enable/disable the generation of the ADX instructions.
33323
33324     'aes'
33325     'no-aes'
33326          Enable/disable the generation of the AES instructions.
33327
33328     'avx'
33329     'no-avx'
33330          Enable/disable the generation of the AVX instructions.
33331
33332     'avx2'
33333     'no-avx2'
33334          Enable/disable the generation of the AVX2 instructions.
33335
33336     'avx5124fmaps'
33337     'no-avx5124fmaps'
33338          Enable/disable the generation of the AVX5124FMAPS
33339          instructions.
33340
33341     'avx5124vnniw'
33342     'no-avx5124vnniw'
33343          Enable/disable the generation of the AVX5124VNNIW
33344          instructions.
33345
33346     'avx512bitalg'
33347     'no-avx512bitalg'
33348          Enable/disable the generation of the AVX512BITALG
33349          instructions.
33350
33351     'avx512bw'
33352     'no-avx512bw'
33353          Enable/disable the generation of the AVX512BW instructions.
33354
33355     'avx512cd'
33356     'no-avx512cd'
33357          Enable/disable the generation of the AVX512CD instructions.
33358
33359     'avx512dq'
33360     'no-avx512dq'
33361          Enable/disable the generation of the AVX512DQ instructions.
33362
33363     'avx512er'
33364     'no-avx512er'
33365          Enable/disable the generation of the AVX512ER instructions.
33366
33367     'avx512f'
33368     'no-avx512f'
33369          Enable/disable the generation of the AVX512F instructions.
33370
33371     'avx512ifma'
33372     'no-avx512ifma'
33373          Enable/disable the generation of the AVX512IFMA instructions.
33374
33375     'avx512pf'
33376     'no-avx512pf'
33377          Enable/disable the generation of the AVX512PF instructions.
33378
33379     'avx512vbmi'
33380     'no-avx512vbmi'
33381          Enable/disable the generation of the AVX512VBMI instructions.
33382
33383     'avx512vbmi2'
33384     'no-avx512vbmi2'
33385          Enable/disable the generation of the AVX512VBMI2 instructions.
33386
33387     'avx512vl'
33388     'no-avx512vl'
33389          Enable/disable the generation of the AVX512VL instructions.
33390
33391     'avx512vnni'
33392     'no-avx512vnni'
33393          Enable/disable the generation of the AVX512VNNI instructions.
33394
33395     'avx512vpopcntdq'
33396     'no-avx512vpopcntdq'
33397          Enable/disable the generation of the AVX512VPOPCNTDQ
33398          instructions.
33399
33400     'bmi'
33401     'no-bmi'
33402          Enable/disable the generation of the BMI instructions.
33403
33404     'bmi2'
33405     'no-bmi2'
33406          Enable/disable the generation of the BMI2 instructions.
33407
33408     'cldemote'
33409     'no-cldemote'
33410          Enable/disable the generation of the CLDEMOTE instructions.
33411
33412     'clflushopt'
33413     'no-clflushopt'
33414          Enable/disable the generation of the CLFLUSHOPT instructions.
33415
33416     'clwb'
33417     'no-clwb'
33418          Enable/disable the generation of the CLWB instructions.
33419
33420     'clzero'
33421     'no-clzero'
33422          Enable/disable the generation of the CLZERO instructions.
33423
33424     'crc32'
33425     'no-crc32'
33426          Enable/disable the generation of the CRC32 instructions.
33427
33428     'cx16'
33429     'no-cx16'
33430          Enable/disable the generation of the CMPXCHG16B instructions.
33431
33432     'default'
33433          *Note Function Multiversioning::, where it is used to specify
33434          the default function version.
33435
33436     'f16c'
33437     'no-f16c'
33438          Enable/disable the generation of the F16C instructions.
33439
33440     'fma'
33441     'no-fma'
33442          Enable/disable the generation of the FMA instructions.
33443
33444     'fma4'
33445     'no-fma4'
33446          Enable/disable the generation of the FMA4 instructions.
33447
33448     'fsgsbase'
33449     'no-fsgsbase'
33450          Enable/disable the generation of the FSGSBASE instructions.
33451
33452     'fxsr'
33453     'no-fxsr'
33454          Enable/disable the generation of the FXSR instructions.
33455
33456     'gfni'
33457     'no-gfni'
33458          Enable/disable the generation of the GFNI instructions.
33459
33460     'hle'
33461     'no-hle'
33462          Enable/disable the generation of the HLE instruction prefixes.
33463
33464     'lwp'
33465     'no-lwp'
33466          Enable/disable the generation of the LWP instructions.
33467
33468     'lzcnt'
33469     'no-lzcnt'
33470          Enable/disable the generation of the LZCNT instructions.
33471
33472     'mmx'
33473     'no-mmx'
33474          Enable/disable the generation of the MMX instructions.
33475
33476     'movbe'
33477     'no-movbe'
33478          Enable/disable the generation of the MOVBE instructions.
33479
33480     'movdir64b'
33481     'no-movdir64b'
33482          Enable/disable the generation of the MOVDIR64B instructions.
33483
33484     'movdiri'
33485     'no-movdiri'
33486          Enable/disable the generation of the MOVDIRI instructions.
33487
33488     'mwaitx'
33489     'no-mwaitx'
33490          Enable/disable the generation of the MWAITX instructions.
33491
33492     'pclmul'
33493     'no-pclmul'
33494          Enable/disable the generation of the PCLMUL instructions.
33495
33496     'pconfig'
33497     'no-pconfig'
33498          Enable/disable the generation of the PCONFIG instructions.
33499
33500     'pku'
33501     'no-pku'
33502          Enable/disable the generation of the PKU instructions.
33503
33504     'popcnt'
33505     'no-popcnt'
33506          Enable/disable the generation of the POPCNT instruction.
33507
33508     'prefetchwt1'
33509     'no-prefetchwt1'
33510          Enable/disable the generation of the PREFETCHWT1 instructions.
33511
33512     'prfchw'
33513     'no-prfchw'
33514          Enable/disable the generation of the PREFETCHW instruction.
33515
33516     'ptwrite'
33517     'no-ptwrite'
33518          Enable/disable the generation of the PTWRITE instructions.
33519
33520     'rdpid'
33521     'no-rdpid'
33522          Enable/disable the generation of the RDPID instructions.
33523
33524     'rdrnd'
33525     'no-rdrnd'
33526          Enable/disable the generation of the RDRND instructions.
33527
33528     'rdseed'
33529     'no-rdseed'
33530          Enable/disable the generation of the RDSEED instructions.
33531
33532     'rtm'
33533     'no-rtm'
33534          Enable/disable the generation of the RTM instructions.
33535
33536     'sahf'
33537     'no-sahf'
33538          Enable/disable the generation of the SAHF instructions.
33539
33540     'sgx'
33541     'no-sgx'
33542          Enable/disable the generation of the SGX instructions.
33543
33544     'sha'
33545     'no-sha'
33546          Enable/disable the generation of the SHA instructions.
33547
33548     'shstk'
33549     'no-shstk'
33550          Enable/disable the shadow stack built-in functions from CET.
33551
33552     'sse'
33553     'no-sse'
33554          Enable/disable the generation of the SSE instructions.
33555
33556     'sse2'
33557     'no-sse2'
33558          Enable/disable the generation of the SSE2 instructions.
33559
33560     'sse3'
33561     'no-sse3'
33562          Enable/disable the generation of the SSE3 instructions.
33563
33564     'sse4'
33565     'no-sse4'
33566          Enable/disable the generation of the SSE4 instructions (both
33567          SSE4.1 and SSE4.2).
33568
33569     'sse4.1'
33570     'no-sse4.1'
33571          Enable/disable the generation of the sse4.1 instructions.
33572
33573     'sse4.2'
33574     'no-sse4.2'
33575          Enable/disable the generation of the sse4.2 instructions.
33576
33577     'sse4a'
33578     'no-sse4a'
33579          Enable/disable the generation of the SSE4A instructions.
33580
33581     'ssse3'
33582     'no-ssse3'
33583          Enable/disable the generation of the SSSE3 instructions.
33584
33585     'tbm'
33586     'no-tbm'
33587          Enable/disable the generation of the TBM instructions.
33588
33589     'vaes'
33590     'no-vaes'
33591          Enable/disable the generation of the VAES instructions.
33592
33593     'vpclmulqdq'
33594     'no-vpclmulqdq'
33595          Enable/disable the generation of the VPCLMULQDQ instructions.
33596
33597     'waitpkg'
33598     'no-waitpkg'
33599          Enable/disable the generation of the WAITPKG instructions.
33600
33601     'wbnoinvd'
33602     'no-wbnoinvd'
33603          Enable/disable the generation of the WBNOINVD instructions.
33604
33605     'xop'
33606     'no-xop'
33607          Enable/disable the generation of the XOP instructions.
33608
33609     'xsave'
33610     'no-xsave'
33611          Enable/disable the generation of the XSAVE instructions.
33612
33613     'xsavec'
33614     'no-xsavec'
33615          Enable/disable the generation of the XSAVEC instructions.
33616
33617     'xsaveopt'
33618     'no-xsaveopt'
33619          Enable/disable the generation of the XSAVEOPT instructions.
33620
33621     'xsaves'
33622     'no-xsaves'
33623          Enable/disable the generation of the XSAVES instructions.
33624
33625     'cld'
33626     'no-cld'
33627          Enable/disable the generation of the CLD before string moves.
33628
33629     'fancy-math-387'
33630     'no-fancy-math-387'
33631          Enable/disable the generation of the 'sin', 'cos', and 'sqrt'
33632          instructions on the 387 floating-point unit.
33633
33634     'ieee-fp'
33635     'no-ieee-fp'
33636          Enable/disable the generation of floating point that depends
33637          on IEEE arithmetic.
33638
33639     'inline-all-stringops'
33640     'no-inline-all-stringops'
33641          Enable/disable inlining of string operations.
33642
33643     'inline-stringops-dynamically'
33644     'no-inline-stringops-dynamically'
33645          Enable/disable the generation of the inline code to do small
33646          string operations and calling the library routines for large
33647          operations.
33648
33649     'align-stringops'
33650     'no-align-stringops'
33651          Do/do not align destination of inlined string operations.
33652
33653     'recip'
33654     'no-recip'
33655          Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
33656          RSQRTPS instructions followed an additional Newton-Raphson
33657          step instead of doing a floating-point division.
33658
33659     'arch=ARCH'
33660          Specify the architecture to generate code for in compiling the
33661          function.
33662
33663     'tune=TUNE'
33664          Specify the architecture to tune for in compiling the
33665          function.
33666
33667     'fpmath=FPMATH'
33668          Specify which floating-point unit to use.  You must specify
33669          the 'target("fpmath=sse,387")' option as
33670          'target("fpmath=sse+387")' because the comma would separate
33671          different options.
33672
33673     'indirect_branch("CHOICE")'
33674          On x86 targets, the 'indirect_branch' attribute causes the
33675          compiler to convert indirect call and jump with CHOICE.
33676          'keep' keeps indirect call and jump unmodified.  'thunk'
33677          converts indirect call and jump to call and return thunk.
33678          'thunk-inline' converts indirect call and jump to inlined call
33679          and return thunk.  'thunk-extern' converts indirect call and
33680          jump to external call and return thunk provided in a separate
33681          object file.
33682
33683     'function_return("CHOICE")'
33684          On x86 targets, the 'function_return' attribute causes the
33685          compiler to convert function return with CHOICE.  'keep' keeps
33686          function return unmodified.  'thunk' converts function return
33687          to call and return thunk.  'thunk-inline' converts function
33688          return to inlined call and return thunk.  'thunk-extern'
33689          converts function return to external call and return thunk
33690          provided in a separate object file.
33691
33692     'nocf_check'
33693          The 'nocf_check' attribute on a function is used to inform the
33694          compiler that the function's prologue should not be
33695          instrumented when compiled with the '-fcf-protection=branch'
33696          option.  The compiler assumes that the function's address is a
33697          valid target for a control-flow transfer.
33698
33699          The 'nocf_check' attribute on a type of pointer to function is
33700          used to inform the compiler that a call through the pointer
33701          should not be instrumented when compiled with the
33702          '-fcf-protection=branch' option.  The compiler assumes that
33703          the function's address from the pointer is a valid target for
33704          a control-flow transfer.  A direct function call through a
33705          function name is assumed to be a safe call thus direct calls
33706          are not instrumented by the compiler.
33707
33708          The 'nocf_check' attribute is applied to an object's type.  In
33709          case of assignment of a function address or a function pointer
33710          to another pointer, the attribute is not carried over from the
33711          right-hand object's type; the type of left-hand object stays
33712          unchanged.  The compiler checks for 'nocf_check' attribute
33713          mismatch and reports a warning in case of mismatch.
33714
33715               {
33716               int foo (void) __attribute__(nocf_check);
33717               void (*foo1)(void) __attribute__(nocf_check);
33718               void (*foo2)(void);
33719
33720               /* foo's address is assumed to be valid.  */
33721               int
33722               foo (void)
33723
33724                 /* This call site is not checked for control-flow
33725                    validity.  */
33726                 (*foo1)();
33727
33728                 /* A warning is issued about attribute mismatch.  */
33729                 foo1 = foo2;
33730
33731                 /* This call site is still not checked.  */
33732                 (*foo1)();
33733
33734                 /* This call site is checked.  */
33735                 (*foo2)();
33736
33737                 /* A warning is issued about attribute mismatch.  */
33738                 foo2 = foo1;
33739
33740                 /* This call site is still checked.  */
33741                 (*foo2)();
33742
33743                 return 0;
33744               }
33745
33746     'cf_check'
33747
33748          The 'cf_check' attribute on a function is used to inform the
33749          compiler that ENDBR instruction should be placed at the
33750          function entry when '-fcf-protection=branch' is enabled.
33751
33752     'indirect_return'
33753
33754          The 'indirect_return' attribute can be applied to a function,
33755          as well as variable or type of function pointer to inform the
33756          compiler that the function may return via indirect branch.
33757
33758     'fentry_name("NAME")'
33759          On x86 targets, the 'fentry_name' attribute sets the function
33760          to call on function entry when function instrumentation is
33761          enabled with '-pg -mfentry'.  When NAME is nop then a 5 byte
33762          nop sequence is generated.
33763
33764     'fentry_section("NAME")'
33765          On x86 targets, the 'fentry_section' attribute sets the name
33766          of the section to record function entry instrumentation calls
33767          in when enabled with '-pg -mrecord-mcount'
33768
33769     On the x86, the inliner does not inline a function that has
33770     different target options than the caller, unless the callee has a
33771     subset of the target options of the caller.  For example a function
33772     declared with 'target("sse3")' can inline a function with
33773     'target("sse2")', since '-msse3' implies '-msse2'.
33774
33775
33776File: gcc.info,  Node: Xstormy16 Function Attributes,  Prev: x86 Function Attributes,  Up: Function Attributes
33777
337786.33.36 Xstormy16 Function Attributes
33779-------------------------------------
33780
33781These function attributes are supported by the Xstormy16 back end:
33782
33783'interrupt'
33784     Use this attribute to indicate that the specified function is an
33785     interrupt handler.  The compiler generates function entry and exit
33786     sequences suitable for use in an interrupt handler when this
33787     attribute is present.
33788
33789
33790File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Function Attributes,  Up: C Extensions
33791
337926.34 Specifying Attributes of Variables
33793=======================================
33794
33795The keyword '__attribute__' allows you to specify special properties of
33796variables, function parameters, or structure, union, and, in C++, class
33797members.  This '__attribute__' keyword is followed by an attribute
33798specification enclosed in double parentheses.  Some attributes are
33799currently defined generically for variables.  Other attributes are
33800defined for variables on particular target systems.  Other attributes
33801are available for functions (*note Function Attributes::), labels (*note
33802Label Attributes::), enumerators (*note Enumerator Attributes::),
33803statements (*note Statement Attributes::), and for types (*note Type
33804Attributes::).  Other front ends might define more attributes (*note
33805Extensions to the C++ Language: C++ Extensions.).
33806
33807 *Note Attribute Syntax::, for details of the exact syntax for using
33808attributes.
33809
33810* Menu:
33811
33812* Common Variable Attributes::
33813* ARC Variable Attributes::
33814* AVR Variable Attributes::
33815* Blackfin Variable Attributes::
33816* H8/300 Variable Attributes::
33817* IA-64 Variable Attributes::
33818* M32R/D Variable Attributes::
33819* MeP Variable Attributes::
33820* Microsoft Windows Variable Attributes::
33821* MSP430 Variable Attributes::
33822* Nvidia PTX Variable Attributes::
33823* PowerPC Variable Attributes::
33824* RL78 Variable Attributes::
33825* SPU Variable Attributes::
33826* V850 Variable Attributes::
33827* x86 Variable Attributes::
33828* Xstormy16 Variable Attributes::
33829
33830
33831File: gcc.info,  Node: Common Variable Attributes,  Next: ARC Variable Attributes,  Up: Variable Attributes
33832
338336.34.1 Common Variable Attributes
33834---------------------------------
33835
33836The following attributes are supported on most targets.
33837
33838'alias ("TARGET")'
33839     The 'alias' variable attribute causes the declaration to be emitted
33840     as an alias for another symbol known as an "alias target".  Except
33841     for top-level qualifiers the alias target must have the same type
33842     as the alias.  For instance, the following
33843
33844          int var_target;
33845          extern int __attribute__ ((alias ("var_target"))) var_alias;
33846
33847     defines 'var_alias' to be an alias for the 'var_target' variable.
33848
33849     It is an error if the alias target is not defined in the same
33850     translation unit as the alias.
33851
33852     Note that in the absence of the attribute GCC assumes that distinct
33853     declarations with external linkage denote distinct objects.  Using
33854     both the alias and the alias target to access the same object is
33855     undefined in a translation unit without a declaration of the alias
33856     with the attribute.
33857
33858     This attribute requires assembler and object file support, and may
33859     not be available on all targets.
33860
33861'aligned'
33862'aligned (ALIGNMENT)'
33863     The 'aligned' attribute specifies a minimum alignment for the
33864     variable or structure field, measured in bytes.  When specified,
33865     ALIGNMENT must be an integer constant power of 2.  Specifying no
33866     ALIGNMENT argument implies the maximum alignment for the target,
33867     which is often, but by no means always, 8 or 16 bytes.
33868
33869     For example, the declaration:
33870
33871          int x __attribute__ ((aligned (16))) = 0;
33872
33873     causes the compiler to allocate the global variable 'x' on a
33874     16-byte boundary.  On a 68040, this could be used in conjunction
33875     with an 'asm' expression to access the 'move16' instruction which
33876     requires 16-byte aligned operands.
33877
33878     You can also specify the alignment of structure fields.  For
33879     example, to create a double-word aligned 'int' pair, you could
33880     write:
33881
33882          struct foo { int x[2] __attribute__ ((aligned (8))); };
33883
33884     This is an alternative to creating a union with a 'double' member,
33885     which forces the union to be double-word aligned.
33886
33887     As in the preceding examples, you can explicitly specify the
33888     alignment (in bytes) that you wish the compiler to use for a given
33889     variable or structure field.  Alternatively, you can leave out the
33890     alignment factor and just ask the compiler to align a variable or
33891     field to the default alignment for the target architecture you are
33892     compiling for.  The default alignment is sufficient for all scalar
33893     types, but may not be enough for all vector types on a target that
33894     supports vector operations.  The default alignment is fixed for a
33895     particular target ABI.
33896
33897     GCC also provides a target specific macro '__BIGGEST_ALIGNMENT__',
33898     which is the largest alignment ever used for any data type on the
33899     target machine you are compiling for.  For example, you could
33900     write:
33901
33902          short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
33903
33904     The compiler automatically sets the alignment for the declared
33905     variable or field to '__BIGGEST_ALIGNMENT__'.  Doing this can often
33906     make copy operations more efficient, because the compiler can use
33907     whatever instructions copy the biggest chunks of memory when
33908     performing copies to or from the variables or fields that you have
33909     aligned this way.  Note that the value of '__BIGGEST_ALIGNMENT__'
33910     may change depending on command-line options.
33911
33912     When used on a struct, or struct member, the 'aligned' attribute
33913     can only increase the alignment; in order to decrease it, the
33914     'packed' attribute must be specified as well.  When used as part of
33915     a typedef, the 'aligned' attribute can both increase and decrease
33916     alignment, and specifying the 'packed' attribute generates a
33917     warning.
33918
33919     Note that the effectiveness of 'aligned' attributes for static
33920     variables may be limited by inherent limitations in the system
33921     linker and/or object file format.  On some systems, the linker is
33922     only able to arrange for variables to be aligned up to a certain
33923     maximum alignment.  (For some linkers, the maximum supported
33924     alignment may be very very small.)  If your linker is only able to
33925     align variables up to a maximum of 8-byte alignment, then
33926     specifying 'aligned(16)' in an '__attribute__' still only provides
33927     you with 8-byte alignment.  See your linker documentation for
33928     further information.
33929
33930     Stack variables are not affected by linker restrictions; GCC can
33931     properly align them on any target.
33932
33933     The 'aligned' attribute can also be used for functions (*note
33934     Common Function Attributes::.)
33935
33936'warn_if_not_aligned (ALIGNMENT)'
33937     This attribute specifies a threshold for the structure field,
33938     measured in bytes.  If the structure field is aligned below the
33939     threshold, a warning will be issued.  For example, the declaration:
33940
33941          struct foo
33942          {
33943            int i1;
33944            int i2;
33945            unsigned long long x __attribute__ ((warn_if_not_aligned (16)));
33946          };
33947
33948     causes the compiler to issue an warning on 'struct foo', like
33949     'warning: alignment 8 of 'struct foo' is less than 16'.  The
33950     compiler also issues a warning, like 'warning: 'x' offset 8 in
33951     'struct foo' isn't aligned to 16', when the structure field has the
33952     misaligned offset:
33953
33954          struct __attribute__ ((aligned (16))) foo
33955          {
33956            int i1;
33957            int i2;
33958            unsigned long long x __attribute__ ((warn_if_not_aligned (16)));
33959          };
33960
33961     This warning can be disabled by '-Wno-if-not-aligned'.  The
33962     'warn_if_not_aligned' attribute can also be used for types (*note
33963     Common Type Attributes::.)
33964
33965'alloc_size (POSITION)'
33966'alloc_size (POSITION-1, POSITION-2)'
33967     The 'alloc_size' variable attribute may be applied to the
33968     declaration of a pointer to a function that returns a pointer and
33969     takes at least one argument of an integer type.  It indicates that
33970     the returned pointer points to an object whose size is given by the
33971     function argument at POSITION-1, or by the product of the arguments
33972     at POSITION-1 and POSITION-2.  Meaningful sizes are positive values
33973     less than 'PTRDIFF_MAX'.  Other sizes are disagnosed when detected.
33974     GCC uses this information to improve the results of
33975     '__builtin_object_size'.
33976
33977     For instance, the following declarations
33978
33979          typedef __attribute__ ((alloc_size (1, 2))) void*
33980            (*calloc_ptr) (size_t, size_t);
33981          typedef __attribute__ ((alloc_size (1))) void*
33982            (*malloc_ptr) (size_t);
33983
33984     specify that 'calloc_ptr' is a pointer of a function that, like the
33985     standard C function 'calloc', returns an object whose size is given
33986     by the product of arguments 1 and 2, and similarly, that
33987     'malloc_ptr', like the standard C function 'malloc', returns an
33988     object whose size is given by argument 1 to the function.
33989
33990'cleanup (CLEANUP_FUNCTION)'
33991     The 'cleanup' attribute runs a function when the variable goes out
33992     of scope.  This attribute can only be applied to auto function
33993     scope variables; it may not be applied to parameters or variables
33994     with static storage duration.  The function must take one
33995     parameter, a pointer to a type compatible with the variable.  The
33996     return value of the function (if any) is ignored.
33997
33998     If '-fexceptions' is enabled, then CLEANUP_FUNCTION is run during
33999     the stack unwinding that happens during the processing of the
34000     exception.  Note that the 'cleanup' attribute does not allow the
34001     exception to be caught, only to perform an action.  It is undefined
34002     what happens if CLEANUP_FUNCTION does not return normally.
34003
34004'common'
34005'nocommon'
34006     The 'common' attribute requests GCC to place a variable in "common"
34007     storage.  The 'nocommon' attribute requests the opposite--to
34008     allocate space for it directly.
34009
34010     These attributes override the default chosen by the '-fno-common'
34011     and '-fcommon' flags respectively.
34012
34013'copy'
34014'copy (VARIABLE)'
34015     The 'copy' attribute applies the set of attributes with which
34016     VARIABLE has been declared to the declaration of the variable to
34017     which the attribute is applied.  The attribute is designed for
34018     libraries that define aliases that are expected to specify the same
34019     set of attributes as the aliased symbols.  The 'copy' attribute can
34020     be used with variables, functions or types.  However, the kind of
34021     symbol to which the attribute is applied (either varible or
34022     function) must match the kind of symbol to which the argument
34023     refers.  The 'copy' attribute copies only syntactic and semantic
34024     attributes but not attributes that affect a symbol's linkage or
34025     visibility such as 'alias', 'visibility', or 'weak'.  The
34026     'deprecated' attribute is also not copied.  *Note Common Function
34027     Attributes::.  *Note Common Type Attributes::.
34028
34029'deprecated'
34030'deprecated (MSG)'
34031     The 'deprecated' attribute results in a warning if the variable is
34032     used anywhere in the source file.  This is useful when identifying
34033     variables that are expected to be removed in a future version of a
34034     program.  The warning also includes the location of the declaration
34035     of the deprecated variable, to enable users to easily find further
34036     information about why the variable is deprecated, or what they
34037     should do instead.  Note that the warning only occurs for uses:
34038
34039          extern int old_var __attribute__ ((deprecated));
34040          extern int old_var;
34041          int new_fn () { return old_var; }
34042
34043     results in a warning on line 3 but not line 2.  The optional MSG
34044     argument, which must be a string, is printed in the warning if
34045     present.
34046
34047     The 'deprecated' attribute can also be used for functions and types
34048     (*note Common Function Attributes::, *note Common Type
34049     Attributes::).
34050
34051     The message attached to the attribute is affected by the setting of
34052     the '-fmessage-length' option.
34053
34054'mode (MODE)'
34055     This attribute specifies the data type for the
34056     declaration--whichever type corresponds to the mode MODE.  This in
34057     effect lets you request an integer or floating-point type according
34058     to its width.
34059
34060     *Note (gccint)Machine Modes::, for a list of the possible keywords
34061     for MODE.  You may also specify a mode of 'byte' or '__byte__' to
34062     indicate the mode corresponding to a one-byte integer, 'word' or
34063     '__word__' for the mode of a one-word integer, and 'pointer' or
34064     '__pointer__' for the mode used to represent pointers.
34065
34066'nonstring'
34067     The 'nonstring' variable attribute specifies that an object or
34068     member declaration with type array of 'char', 'signed char', or
34069     'unsigned char', or pointer to such a type is intended to store
34070     character arrays that do not necessarily contain a terminating
34071     'NUL'.  This is useful in detecting uses of such arrays or pointers
34072     with functions that expect 'NUL'-terminated strings, and to avoid
34073     warnings when such an array or pointer is used as an argument to a
34074     bounded string manipulation function such as 'strncpy'.  For
34075     example, without the attribute, GCC will issue a warning for the
34076     'strncpy' call below because it may truncate the copy without
34077     appending the terminating 'NUL' character.  Using the attribute
34078     makes it possible to suppress the warning.  However, when the array
34079     is declared with the attribute the call to 'strlen' is diagnosed
34080     because when the array doesn't contain a 'NUL'-terminated string
34081     the call is undefined.  To copy, compare, of search non-string
34082     character arrays use the 'memcpy', 'memcmp', 'memchr', and other
34083     functions that operate on arrays of bytes.  In addition, calling
34084     'strnlen' and 'strndup' with such arrays is safe provided a
34085     suitable bound is specified, and not diagnosed.
34086
34087          struct Data
34088          {
34089            char name [32] __attribute__ ((nonstring));
34090          };
34091
34092          int f (struct Data *pd, const char *s)
34093          {
34094            strncpy (pd->name, s, sizeof pd->name);
34095            ...
34096            return strlen (pd->name);   // unsafe, gets a warning
34097          }
34098
34099'packed'
34100     The 'packed' attribute specifies that a structure member should
34101     have the smallest possible alignment--one bit for a bit-field and
34102     one byte otherwise, unless a larger value is specified with the
34103     'aligned' attribute.  The attribute does not apply to non-member
34104     objects.
34105
34106     For example in the structure below, the member array 'x' is packed
34107     so that it immediately follows 'a' with no intervening padding:
34108
34109          struct foo
34110          {
34111            char a;
34112            int x[2] __attribute__ ((packed));
34113          };
34114
34115     _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed'
34116     attribute on bit-fields of type 'char'.  This has been fixed in GCC
34117     4.4 but the change can lead to differences in the structure layout.
34118     See the documentation of '-Wpacked-bitfield-compat' for more
34119     information.
34120
34121'section ("SECTION-NAME")'
34122     Normally, the compiler places the objects it generates in sections
34123     like 'data' and 'bss'.  Sometimes, however, you need additional
34124     sections, or you need certain particular variables to appear in
34125     special sections, for example to map to special hardware.  The
34126     'section' attribute specifies that a variable (or function) lives
34127     in a particular section.  For example, this small program uses
34128     several specific section names:
34129
34130          struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
34131          struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
34132          char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
34133          int init_data __attribute__ ((section ("INITDATA")));
34134
34135          main()
34136          {
34137            /* Initialize stack pointer */
34138            init_sp (stack + sizeof (stack));
34139
34140            /* Initialize initialized data */
34141            memcpy (&init_data, &data, &edata - &data);
34142
34143            /* Turn on the serial ports */
34144            init_duart (&a);
34145            init_duart (&b);
34146          }
34147
34148     Use the 'section' attribute with _global_ variables and not _local_
34149     variables, as shown in the example.
34150
34151     You may use the 'section' attribute with initialized or
34152     uninitialized global variables but the linker requires each object
34153     be defined once, with the exception that uninitialized variables
34154     tentatively go in the 'common' (or 'bss') section and can be
34155     multiply "defined".  Using the 'section' attribute changes what
34156     section the variable goes into and may cause the linker to issue an
34157     error if an uninitialized variable has multiple definitions.  You
34158     can force a variable to be initialized with the '-fno-common' flag
34159     or the 'nocommon' attribute.
34160
34161     Some file formats do not support arbitrary sections so the
34162     'section' attribute is not available on all platforms.  If you need
34163     to map the entire contents of a module to a particular section,
34164     consider using the facilities of the linker instead.
34165
34166'tls_model ("TLS_MODEL")'
34167     The 'tls_model' attribute sets thread-local storage model (*note
34168     Thread-Local::) of a particular '__thread' variable, overriding
34169     '-ftls-model=' command-line switch on a per-variable basis.  The
34170     TLS_MODEL argument should be one of 'global-dynamic',
34171     'local-dynamic', 'initial-exec' or 'local-exec'.
34172
34173     Not all targets support this attribute.
34174
34175'unused'
34176     This attribute, attached to a variable, means that the variable is
34177     meant to be possibly unused.  GCC does not produce a warning for
34178     this variable.
34179
34180'used'
34181     This attribute, attached to a variable with static storage, means
34182     that the variable must be emitted even if it appears that the
34183     variable is not referenced.
34184
34185     When applied to a static data member of a C++ class template, the
34186     attribute also means that the member is instantiated if the class
34187     itself is instantiated.
34188
34189'vector_size (BYTES)'
34190     This attribute specifies the vector size for the type of the
34191     declared variable, measured in bytes.  The type to which it applies
34192     is known as the "base type".  The BYTES argument must be a positive
34193     power-of-two multiple of the base type size.  For example, the
34194     declaration:
34195
34196          int foo __attribute__ ((vector_size (16)));
34197
34198     causes the compiler to set the mode for 'foo', to be 16 bytes,
34199     divided into 'int' sized units.  Assuming a 32-bit 'int', 'foo''s
34200     type is a vector of four units of four bytes each, and the
34201     corresponding mode of 'foo' is 'V4SI'.  *Note Vector Extensions::
34202     for details of manipulating vector variables.
34203
34204     This attribute is only applicable to integral and floating scalars,
34205     although arrays, pointers, and function return values are allowed
34206     in conjunction with this construct.
34207
34208     Aggregates with this attribute are invalid, even if they are of the
34209     same size as a corresponding scalar.  For example, the declaration:
34210
34211          struct S { int a; };
34212          struct S  __attribute__ ((vector_size (16))) foo;
34213
34214     is invalid even if the size of the structure is the same as the
34215     size of the 'int'.
34216
34217'visibility ("VISIBILITY_TYPE")'
34218     This attribute affects the linkage of the declaration to which it
34219     is attached.  The 'visibility' attribute is described in *note
34220     Common Function Attributes::.
34221
34222'weak'
34223     The 'weak' attribute is described in *note Common Function
34224     Attributes::.
34225
34226
34227File: gcc.info,  Node: ARC Variable Attributes,  Next: AVR Variable Attributes,  Prev: Common Variable Attributes,  Up: Variable Attributes
34228
342296.34.2 ARC Variable Attributes
34230------------------------------
34231
34232'aux'
34233     The 'aux' attribute is used to directly access the ARC's auxiliary
34234     register space from C. The auxilirary register number is given via
34235     attribute argument.
34236
34237
34238File: gcc.info,  Node: AVR Variable Attributes,  Next: Blackfin Variable Attributes,  Prev: ARC Variable Attributes,  Up: Variable Attributes
34239
342406.34.3 AVR Variable Attributes
34241------------------------------
34242
34243'progmem'
34244     The 'progmem' attribute is used on the AVR to place read-only data
34245     in the non-volatile program memory (flash).  The 'progmem'
34246     attribute accomplishes this by putting respective variables into a
34247     section whose name starts with '.progmem'.
34248
34249     This attribute works similar to the 'section' attribute but adds
34250     additional checking.
34251
34252     *  Ordinary AVR cores with 32 general purpose registers:
34253          'progmem' affects the location of the data but not how this
34254          data is accessed.  In order to read data located with the
34255          'progmem' attribute (inline) assembler must be used.
34256               /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */
34257               #include <avr/pgmspace.h>
34258
34259               /* Locate var in flash memory */
34260               const int var[2] PROGMEM = { 1, 2 };
34261
34262               int read_var (int i)
34263               {
34264                   /* Access var[] by accessor macro from avr/pgmspace.h */
34265                   return (int) pgm_read_word (& var[i]);
34266               }
34267
34268          AVR is a Harvard architecture processor and data and read-only
34269          data normally resides in the data memory (RAM).
34270
34271          See also the *note AVR Named Address Spaces:: section for an
34272          alternate way to locate and access data in flash memory.
34273
34274     *  AVR cores with flash memory visible in the RAM address range:
34275          On such devices, there is no need for attribute 'progmem' or
34276          *note '__flash': AVR Named Address Spaces. qualifier at all.
34277          Just use standard C / C++.  The compiler will generate 'LD*'
34278          instructions.  As flash memory is visible in the RAM address
34279          range, and the default linker script does _not_ locate
34280          '.rodata' in RAM, no special features are needed in order not
34281          to waste RAM for read-only data or to read from flash.  You
34282          might even get slightly better performance by avoiding
34283          'progmem' and '__flash'.  This applies to devices from
34284          families 'avrtiny' and 'avrxmega3', see *note AVR Options::
34285          for an overview.
34286
34287     * Reduced AVR Tiny cores like ATtiny40:
34288          The compiler adds '0x4000' to the addresses of objects and
34289          declarations in 'progmem' and locates the objects in flash
34290          memory, namely in section '.progmem.data'.  The offset is
34291          needed because the flash memory is visible in the RAM address
34292          space starting at address '0x4000'.
34293
34294          Data in 'progmem' can be accessed by means of ordinary C code,
34295          no special functions or macros are needed.
34296
34297               /* var is located in flash memory */
34298               extern const int var[2] __attribute__((progmem));
34299
34300               int read_var (int i)
34301               {
34302                   return var[i];
34303               }
34304
34305          Please notice that on these devices, there is no need for
34306          'progmem' at all.
34307
34308'io'
34309'io (ADDR)'
34310     Variables with the 'io' attribute are used to address memory-mapped
34311     peripherals in the io address range.  If an address is specified,
34312     the variable is assigned that address, and the value is interpreted
34313     as an address in the data address space.  Example:
34314
34315          volatile int porta __attribute__((io (0x22)));
34316
34317     The address specified in the address in the data address range.
34318
34319     Otherwise, the variable it is not assigned an address, but the
34320     compiler will still use in/out instructions where applicable,
34321     assuming some other module assigns an address in the io address
34322     range.  Example:
34323
34324          extern volatile int porta __attribute__((io));
34325
34326'io_low'
34327'io_low (ADDR)'
34328     This is like the 'io' attribute, but additionally it informs the
34329     compiler that the object lies in the lower half of the I/O area,
34330     allowing the use of 'cbi', 'sbi', 'sbic' and 'sbis' instructions.
34331
34332'address'
34333'address (ADDR)'
34334     Variables with the 'address' attribute are used to address
34335     memory-mapped peripherals that may lie outside the io address
34336     range.
34337
34338          volatile int porta __attribute__((address (0x600)));
34339
34340'absdata'
34341     Variables in static storage and with the 'absdata' attribute can be
34342     accessed by the 'LDS' and 'STS' instructions which take absolute
34343     addresses.
34344
34345        * This attribute is only supported for the reduced AVR Tiny core
34346          like ATtiny40.
34347
34348        * You must make sure that respective data is located in the
34349          address range '0x40'...'0xbf' accessible by 'LDS' and 'STS'.
34350          One way to achieve this as an appropriate linker description
34351          file.
34352
34353        * If the location does not fit the address range of 'LDS' and
34354          'STS', there is currently (Binutils 2.26) just an unspecific
34355          warning like
34356               'module.c:(.text+0x1c): warning: internal error: out of
34357               range error'
34358
34359     See also the '-mabsdata' *note command-line option: AVR Options.
34360
34361
34362File: gcc.info,  Node: Blackfin Variable Attributes,  Next: H8/300 Variable Attributes,  Prev: AVR Variable Attributes,  Up: Variable Attributes
34363
343646.34.4 Blackfin Variable Attributes
34365-----------------------------------
34366
34367Three attributes are currently defined for the Blackfin.
34368
34369'l1_data'
34370'l1_data_A'
34371'l1_data_B'
34372     Use these attributes on the Blackfin to place the variable into L1
34373     Data SRAM. Variables with 'l1_data' attribute are put into the
34374     specific section named '.l1.data'.  Those with 'l1_data_A'
34375     attribute are put into the specific section named '.l1.data.A'.
34376     Those with 'l1_data_B' attribute are put into the specific section
34377     named '.l1.data.B'.
34378
34379'l2'
34380     Use this attribute on the Blackfin to place the variable into L2
34381     SRAM. Variables with 'l2' attribute are put into the specific
34382     section named '.l2.data'.
34383
34384
34385File: gcc.info,  Node: H8/300 Variable Attributes,  Next: IA-64 Variable Attributes,  Prev: Blackfin Variable Attributes,  Up: Variable Attributes
34386
343876.34.5 H8/300 Variable Attributes
34388---------------------------------
34389
34390These variable attributes are available for H8/300 targets:
34391
34392'eightbit_data'
34393     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
34394     the specified variable should be placed into the eight-bit data
34395     section.  The compiler generates more efficient code for certain
34396     operations on data in the eight-bit data area.  Note the eight-bit
34397     data area is limited to 256 bytes of data.
34398
34399     You must use GAS and GLD from GNU binutils version 2.7 or later for
34400     this attribute to work correctly.
34401
34402'tiny_data'
34403     Use this attribute on the H8/300H and H8S to indicate that the
34404     specified variable should be placed into the tiny data section.
34405     The compiler generates more efficient code for loads and stores on
34406     data in the tiny data section.  Note the tiny data area is limited
34407     to slightly under 32KB of data.
34408
34409
34410File: gcc.info,  Node: IA-64 Variable Attributes,  Next: M32R/D Variable Attributes,  Prev: H8/300 Variable Attributes,  Up: Variable Attributes
34411
344126.34.6 IA-64 Variable Attributes
34413--------------------------------
34414
34415The IA-64 back end supports the following variable attribute:
34416
34417'model (MODEL-NAME)'
34418
34419     On IA-64, use this attribute to set the addressability of an
34420     object.  At present, the only supported identifier for MODEL-NAME
34421     is 'small', indicating addressability via "small" (22-bit)
34422     addresses (so that their addresses can be loaded with the 'addl'
34423     instruction).  Caveat: such addressing is by definition not
34424     position independent and hence this attribute must not be used for
34425     objects defined by shared libraries.
34426
34427
34428File: gcc.info,  Node: M32R/D Variable Attributes,  Next: MeP Variable Attributes,  Prev: IA-64 Variable Attributes,  Up: Variable Attributes
34429
344306.34.7 M32R/D Variable Attributes
34431---------------------------------
34432
34433One attribute is currently defined for the M32R/D.
34434
34435'model (MODEL-NAME)'
34436     Use this attribute on the M32R/D to set the addressability of an
34437     object.  The identifier MODEL-NAME is one of 'small', 'medium', or
34438     'large', representing each of the code models.
34439
34440     Small model objects live in the lower 16MB of memory (so that their
34441     addresses can be loaded with the 'ld24' instruction).
34442
34443     Medium and large model objects may live anywhere in the 32-bit
34444     address space (the compiler generates 'seth/add3' instructions to
34445     load their addresses).
34446
34447
34448File: gcc.info,  Node: MeP Variable Attributes,  Next: Microsoft Windows Variable Attributes,  Prev: M32R/D Variable Attributes,  Up: Variable Attributes
34449
344506.34.8 MeP Variable Attributes
34451------------------------------
34452
34453The MeP target has a number of addressing modes and busses.  The 'near'
34454space spans the standard memory space's first 16 megabytes (24 bits).
34455The 'far' space spans the entire 32-bit memory space.  The 'based' space
34456is a 128-byte region in the memory space that is addressed relative to
34457the '$tp' register.  The 'tiny' space is a 65536-byte region relative to
34458the '$gp' register.  In addition to these memory regions, the MeP target
34459has a separate 16-bit control bus which is specified with 'cb'
34460attributes.
34461
34462'based'
34463     Any variable with the 'based' attribute is assigned to the '.based'
34464     section, and is accessed with relative to the '$tp' register.
34465
34466'tiny'
34467     Likewise, the 'tiny' attribute assigned variables to the '.tiny'
34468     section, relative to the '$gp' register.
34469
34470'near'
34471     Variables with the 'near' attribute are assumed to have addresses
34472     that fit in a 24-bit addressing mode.  This is the default for
34473     large variables ('-mtiny=4' is the default) but this attribute can
34474     override '-mtiny=' for small variables, or override '-ml'.
34475
34476'far'
34477     Variables with the 'far' attribute are addressed using a full
34478     32-bit address.  Since this covers the entire memory space, this
34479     allows modules to make no assumptions about where variables might
34480     be stored.
34481
34482'io'
34483'io (ADDR)'
34484     Variables with the 'io' attribute are used to address memory-mapped
34485     peripherals.  If an address is specified, the variable is assigned
34486     that address, else it is not assigned an address (it is assumed
34487     some other module assigns an address).  Example:
34488
34489          int timer_count __attribute__((io(0x123)));
34490
34491'cb'
34492'cb (ADDR)'
34493     Variables with the 'cb' attribute are used to access the control
34494     bus, using special instructions.  'addr' indicates the control bus
34495     address.  Example:
34496
34497          int cpu_clock __attribute__((cb(0x123)));
34498
34499
34500File: gcc.info,  Node: Microsoft Windows Variable Attributes,  Next: MSP430 Variable Attributes,  Prev: MeP Variable Attributes,  Up: Variable Attributes
34501
345026.34.9 Microsoft Windows Variable Attributes
34503--------------------------------------------
34504
34505You can use these attributes on Microsoft Windows targets.  *note x86
34506Variable Attributes:: for additional Windows compatibility attributes
34507available on all x86 targets.
34508
34509'dllimport'
34510'dllexport'
34511     The 'dllimport' and 'dllexport' attributes are described in *note
34512     Microsoft Windows Function Attributes::.
34513
34514'selectany'
34515     The 'selectany' attribute causes an initialized global variable to
34516     have link-once semantics.  When multiple definitions of the
34517     variable are encountered by the linker, the first is selected and
34518     the remainder are discarded.  Following usage by the Microsoft
34519     compiler, the linker is told _not_ to warn about size or content
34520     differences of the multiple definitions.
34521
34522     Although the primary usage of this attribute is for POD types, the
34523     attribute can also be applied to global C++ objects that are
34524     initialized by a constructor.  In this case, the static
34525     initialization and destruction code for the object is emitted in
34526     each translation defining the object, but the calls to the
34527     constructor and destructor are protected by a link-once guard
34528     variable.
34529
34530     The 'selectany' attribute is only available on Microsoft Windows
34531     targets.  You can use '__declspec (selectany)' as a synonym for
34532     '__attribute__ ((selectany))' for compatibility with other
34533     compilers.
34534
34535'shared'
34536     On Microsoft Windows, in addition to putting variable definitions
34537     in a named section, the section can also be shared among all
34538     running copies of an executable or DLL.  For example, this small
34539     program defines shared data by putting it in a named section
34540     'shared' and marking the section shareable:
34541
34542          int foo __attribute__((section ("shared"), shared)) = 0;
34543
34544          int
34545          main()
34546          {
34547            /* Read and write foo.  All running
34548               copies see the same value.  */
34549            return 0;
34550          }
34551
34552     You may only use the 'shared' attribute along with 'section'
34553     attribute with a fully-initialized global definition because of the
34554     way linkers work.  See 'section' attribute for more information.
34555
34556     The 'shared' attribute is only available on Microsoft Windows.
34557
34558
34559File: gcc.info,  Node: MSP430 Variable Attributes,  Next: Nvidia PTX Variable Attributes,  Prev: Microsoft Windows Variable Attributes,  Up: Variable Attributes
34560
345616.34.10 MSP430 Variable Attributes
34562----------------------------------
34563
34564'noinit'
34565     Any data with the 'noinit' attribute will not be initialised by the
34566     C runtime startup code, or the program loader.  Not initialising
34567     data in this way can reduce program startup times.
34568
34569'persistent'
34570     Any variable with the 'persistent' attribute will not be
34571     initialised by the C runtime startup code.  Instead its value will
34572     be set once, when the application is loaded, and then never
34573     initialised again, even if the processor is reset or the program
34574     restarts.  Persistent data is intended to be placed into FLASH RAM,
34575     where its value will be retained across resets.  The linker script
34576     being used to create the application should ensure that persistent
34577     data is correctly placed.
34578
34579'lower'
34580'upper'
34581'either'
34582     These attributes are the same as the MSP430 function attributes of
34583     the same name (*note MSP430 Function Attributes::).  These
34584     attributes can be applied to both functions and variables.
34585
34586
34587File: gcc.info,  Node: Nvidia PTX Variable Attributes,  Next: PowerPC Variable Attributes,  Prev: MSP430 Variable Attributes,  Up: Variable Attributes
34588
345896.34.11 Nvidia PTX Variable Attributes
34590--------------------------------------
34591
34592These variable attributes are supported by the Nvidia PTX back end:
34593
34594'shared'
34595     Use this attribute to place a variable in the '.shared' memory
34596     space.  This memory space is private to each cooperative thread
34597     array; only threads within one thread block refer to the same
34598     instance of the variable.  The runtime does not initialize
34599     variables in this memory space.
34600
34601
34602File: gcc.info,  Node: PowerPC Variable Attributes,  Next: RL78 Variable Attributes,  Prev: Nvidia PTX Variable Attributes,  Up: Variable Attributes
34603
346046.34.12 PowerPC Variable Attributes
34605-----------------------------------
34606
34607Three attributes currently are defined for PowerPC configurations:
34608'altivec', 'ms_struct' and 'gcc_struct'.
34609
34610 For full documentation of the struct attributes please see the
34611documentation in *note x86 Variable Attributes::.
34612
34613 For documentation of 'altivec' attribute please see the documentation
34614in *note PowerPC Type Attributes::.
34615
34616
34617File: gcc.info,  Node: RL78 Variable Attributes,  Next: SPU Variable Attributes,  Prev: PowerPC Variable Attributes,  Up: Variable Attributes
34618
346196.34.13 RL78 Variable Attributes
34620--------------------------------
34621
34622The RL78 back end supports the 'saddr' variable attribute.  This
34623specifies placement of the corresponding variable in the SADDR area,
34624which can be accessed more efficiently than the default memory region.
34625
34626
34627File: gcc.info,  Node: SPU Variable Attributes,  Next: V850 Variable Attributes,  Prev: RL78 Variable Attributes,  Up: Variable Attributes
34628
346296.34.14 SPU Variable Attributes
34630-------------------------------
34631
34632The SPU supports the 'spu_vector' attribute for variables.  For
34633documentation of this attribute please see the documentation in *note
34634SPU Type Attributes::.
34635
34636
34637File: gcc.info,  Node: V850 Variable Attributes,  Next: x86 Variable Attributes,  Prev: SPU Variable Attributes,  Up: Variable Attributes
34638
346396.34.15 V850 Variable Attributes
34640--------------------------------
34641
34642These variable attributes are supported by the V850 back end:
34643
34644'sda'
34645     Use this attribute to explicitly place a variable in the small data
34646     area, which can hold up to 64 kilobytes.
34647
34648'tda'
34649     Use this attribute to explicitly place a variable in the tiny data
34650     area, which can hold up to 256 bytes in total.
34651
34652'zda'
34653     Use this attribute to explicitly place a variable in the first 32
34654     kilobytes of memory.
34655
34656
34657File: gcc.info,  Node: x86 Variable Attributes,  Next: Xstormy16 Variable Attributes,  Prev: V850 Variable Attributes,  Up: Variable Attributes
34658
346596.34.16 x86 Variable Attributes
34660-------------------------------
34661
34662Two attributes are currently defined for x86 configurations: 'ms_struct'
34663and 'gcc_struct'.
34664
34665'ms_struct'
34666'gcc_struct'
34667
34668     If 'packed' is used on a structure, or if bit-fields are used, it
34669     may be that the Microsoft ABI lays out the structure differently
34670     than the way GCC normally does.  Particularly when moving packed
34671     data between functions compiled with GCC and the native Microsoft
34672     compiler (either via function call or as data in a file), it may be
34673     necessary to access either format.
34674
34675     The 'ms_struct' and 'gcc_struct' attributes correspond to the
34676     '-mms-bitfields' and '-mno-ms-bitfields' command-line options,
34677     respectively; see *note x86 Options::, for details of how structure
34678     layout is affected.  *Note x86 Type Attributes::, for information
34679     about the corresponding attributes on types.
34680
34681
34682File: gcc.info,  Node: Xstormy16 Variable Attributes,  Prev: x86 Variable Attributes,  Up: Variable Attributes
34683
346846.34.17 Xstormy16 Variable Attributes
34685-------------------------------------
34686
34687One attribute is currently defined for xstormy16 configurations:
34688'below100'.
34689
34690'below100'
34691
34692     If a variable has the 'below100' attribute ('BELOW100' is allowed
34693     also), GCC places the variable in the first 0x100 bytes of memory
34694     and use special opcodes to access it.  Such variables are placed in
34695     either the '.bss_below100' section or the '.data_below100' section.
34696
34697
34698File: gcc.info,  Node: Type Attributes,  Next: Label Attributes,  Prev: Variable Attributes,  Up: C Extensions
34699
347006.35 Specifying Attributes of Types
34701===================================
34702
34703The keyword '__attribute__' allows you to specify various special
34704properties of types.  Some type attributes apply only to structure and
34705union types, and in C++, also class types, while others can apply to any
34706type defined via a 'typedef' declaration.  Unless otherwise specified,
34707the same restrictions and effects apply to attributes regardless of
34708whether a type is a trivial structure or a C++ class with user-defined
34709constructors, destructors, or a copy assignment.
34710
34711 Other attributes are defined for functions (*note Function
34712Attributes::), labels (*note Label Attributes::), enumerators (*note
34713Enumerator Attributes::), statements (*note Statement Attributes::), and
34714for variables (*note Variable Attributes::).
34715
34716 The '__attribute__' keyword is followed by an attribute specification
34717enclosed in double parentheses.
34718
34719 You may specify type attributes in an enum, struct or union type
34720declaration or definition by placing them immediately after the
34721'struct', 'union' or 'enum' keyword.  You can also place them just past
34722the closing curly brace of the definition, but this is less preferred
34723because logically the type should be fully defined at the closing brace.
34724
34725 You can also include type attributes in a 'typedef' declaration.  *Note
34726Attribute Syntax::, for details of the exact syntax for using
34727attributes.
34728
34729* Menu:
34730
34731* Common Type Attributes::
34732* ARC Type Attributes::
34733* ARM Type Attributes::
34734* MeP Type Attributes::
34735* PowerPC Type Attributes::
34736* SPU Type Attributes::
34737* x86 Type Attributes::
34738
34739
34740File: gcc.info,  Node: Common Type Attributes,  Next: ARC Type Attributes,  Up: Type Attributes
34741
347426.35.1 Common Type Attributes
34743-----------------------------
34744
34745The following type attributes are supported on most targets.
34746
34747'aligned'
34748'aligned (ALIGNMENT)'
34749     The 'aligned' attribute specifies a minimum alignment (in bytes)
34750     for variables of the specified type.  When specified, ALIGNMENT
34751     must be a power of 2.  Specifying no ALIGNMENT argument implies the
34752     maximum alignment for the target, which is often, but by no means
34753     always, 8 or 16 bytes.  For example, the declarations:
34754
34755          struct __attribute__ ((aligned (8))) S { short f[3]; };
34756          typedef int more_aligned_int __attribute__ ((aligned (8)));
34757
34758     force the compiler to ensure (as far as it can) that each variable
34759     whose type is 'struct S' or 'more_aligned_int' is allocated and
34760     aligned _at least_ on a 8-byte boundary.  On a SPARC, having all
34761     variables of type 'struct S' aligned to 8-byte boundaries allows
34762     the compiler to use the 'ldd' and 'std' (doubleword load and store)
34763     instructions when copying one variable of type 'struct S' to
34764     another, thus improving run-time efficiency.
34765
34766     Note that the alignment of any given 'struct' or 'union' type is
34767     required by the ISO C standard to be at least a perfect multiple of
34768     the lowest common multiple of the alignments of all of the members
34769     of the 'struct' or 'union' in question.  This means that you _can_
34770     effectively adjust the alignment of a 'struct' or 'union' type by
34771     attaching an 'aligned' attribute to any one of the members of such
34772     a type, but the notation illustrated in the example above is a more
34773     obvious, intuitive, and readable way to request the compiler to
34774     adjust the alignment of an entire 'struct' or 'union' type.
34775
34776     As in the preceding example, you can explicitly specify the
34777     alignment (in bytes) that you wish the compiler to use for a given
34778     'struct' or 'union' type.  Alternatively, you can leave out the
34779     alignment factor and just ask the compiler to align a type to the
34780     maximum useful alignment for the target machine you are compiling
34781     for.  For example, you could write:
34782
34783          struct __attribute__ ((aligned)) S { short f[3]; };
34784
34785     Whenever you leave out the alignment factor in an 'aligned'
34786     attribute specification, the compiler automatically sets the
34787     alignment for the type to the largest alignment that is ever used
34788     for any data type on the target machine you are compiling for.
34789     Doing this can often make copy operations more efficient, because
34790     the compiler can use whatever instructions copy the biggest chunks
34791     of memory when performing copies to or from the variables that have
34792     types that you have aligned this way.
34793
34794     In the example above, if the size of each 'short' is 2 bytes, then
34795     the size of the entire 'struct S' type is 6 bytes.  The smallest
34796     power of two that is greater than or equal to that is 8, so the
34797     compiler sets the alignment for the entire 'struct S' type to 8
34798     bytes.
34799
34800     Note that although you can ask the compiler to select a
34801     time-efficient alignment for a given type and then declare only
34802     individual stand-alone objects of that type, the compiler's ability
34803     to select a time-efficient alignment is primarily useful only when
34804     you plan to create arrays of variables having the relevant
34805     (efficiently aligned) type.  If you declare or use arrays of
34806     variables of an efficiently-aligned type, then it is likely that
34807     your program also does pointer arithmetic (or subscripting, which
34808     amounts to the same thing) on pointers to the relevant type, and
34809     the code that the compiler generates for these pointer arithmetic
34810     operations is often more efficient for efficiently-aligned types
34811     than for other types.
34812
34813     Note that the effectiveness of 'aligned' attributes may be limited
34814     by inherent limitations in your linker.  On many systems, the
34815     linker is only able to arrange for variables to be aligned up to a
34816     certain maximum alignment.  (For some linkers, the maximum
34817     supported alignment may be very very small.)  If your linker is
34818     only able to align variables up to a maximum of 8-byte alignment,
34819     then specifying 'aligned (16)' in an '__attribute__' still only
34820     provides you with 8-byte alignment.  See your linker documentation
34821     for further information.
34822
34823     When used on a struct, or struct member, the 'aligned' attribute
34824     can only increase the alignment; in order to decrease it, the
34825     'packed' attribute must be specified as well.  When used as part of
34826     a typedef, the 'aligned' attribute can both increase and decrease
34827     alignment, and specifying the 'packed' attribute generates a
34828     warning.
34829
34830'warn_if_not_aligned (ALIGNMENT)'
34831     This attribute specifies a threshold for the structure field,
34832     measured in bytes.  If the structure field is aligned below the
34833     threshold, a warning will be issued.  For example, the declaration:
34834
34835          typedef unsigned long long __u64
34836             __attribute__((aligned (4), warn_if_not_aligned (8)));
34837
34838          struct foo
34839          {
34840            int i1;
34841            int i2;
34842            __u64 x;
34843          };
34844
34845     causes the compiler to issue an warning on 'struct foo', like
34846     'warning: alignment 4 of 'struct foo' is less than 8'.  It is used
34847     to define 'struct foo' in such a way that 'struct foo' has the same
34848     layout and the structure field 'x' has the same alignment when
34849     '__u64' is aligned at either 4 or 8 bytes.  Align 'struct foo' to 8
34850     bytes:
34851
34852          struct __attribute__ ((aligned (8))) foo
34853          {
34854            int i1;
34855            int i2;
34856            __u64 x;
34857          };
34858
34859     silences the warning.  The compiler also issues a warning, like
34860     'warning: 'x' offset 12 in 'struct foo' isn't aligned to 8', when
34861     the structure field has the misaligned offset:
34862
34863          struct __attribute__ ((aligned (8))) foo
34864          {
34865            int i1;
34866            int i2;
34867            int i3;
34868            __u64 x;
34869          };
34870
34871     This warning can be disabled by '-Wno-if-not-aligned'.
34872
34873'alloc_size (POSITION)'
34874'alloc_size (POSITION-1, POSITION-2)'
34875     The 'alloc_size' type attribute may be applied to the definition of
34876     a type of a function that returns a pointer and takes at least one
34877     argument of an integer type.  It indicates that the returned
34878     pointer points to an object whose size is given by the function
34879     argument at POSITION-1, or by the product of the arguments at
34880     POSITION-1 and POSITION-2.  Meaningful sizes are positive values
34881     less than 'PTRDIFF_MAX'.  Other sizes are disagnosed when detected.
34882     GCC uses this information to improve the results of
34883     '__builtin_object_size'.
34884
34885     For instance, the following declarations
34886
34887          typedef __attribute__ ((alloc_size (1, 2))) void*
34888            calloc_type (size_t, size_t);
34889          typedef __attribute__ ((alloc_size (1))) void*
34890            malloc_type (size_t);
34891
34892     specify that 'calloc_type' is a type of a function that, like the
34893     standard C function 'calloc', returns an object whose size is given
34894     by the product of arguments 1 and 2, and that 'malloc_type', like
34895     the standard C function 'malloc', returns an object whose size is
34896     given by argument 1 to the function.
34897
34898'copy'
34899'copy (EXPRESSION)'
34900     The 'copy' attribute applies the set of attributes with which the
34901     type of the EXPRESSION has been declared to the declaration of the
34902     type to which the attribute is applied.  The attribute is designed
34903     for libraries that define aliases that are expected to specify the
34904     same set of attributes as the aliased symbols.  The 'copy'
34905     attribute can be used with types, variables, or functions.
34906     However, the kind of symbol to which the attribute is applied
34907     (either varible or function) must match the kind of symbol to which
34908     the argument refers.  The 'copy' attribute copies only syntactic
34909     and semantic attributes but not attributes that affect a symbol's
34910     linkage or visibility such as 'alias', 'visibility', or 'weak'.
34911     The 'deprecated' attribute is also not copied.  *Note Common
34912     Function Attributes::.  *Note Common Variable Attributes::.
34913
34914     For example, suppose 'struct A' below is defined in some third
34915     party library header to have the alignment requirement 'N' and to
34916     force a warning whenever a variable of the type is not so aligned
34917     due to attribute 'packed'.  Specifying the 'copy' attribute on the
34918     definition on the unrelated 'struct B' has the effect of copying
34919     all relevant attributes from the type referenced by the pointer
34920     expression to 'struct B'.
34921
34922          struct __attribute__ ((aligned (N), warn_if_not_aligned (N)))
34923          A { /* ... */ };
34924          struct __attribute__ ((copy ( (struct A *)0)) B { /* ... */ };
34925
34926'deprecated'
34927'deprecated (MSG)'
34928     The 'deprecated' attribute results in a warning if the type is used
34929     anywhere in the source file.  This is useful when identifying types
34930     that are expected to be removed in a future version of a program.
34931     If possible, the warning also includes the location of the
34932     declaration of the deprecated type, to enable users to easily find
34933     further information about why the type is deprecated, or what they
34934     should do instead.  Note that the warnings only occur for uses and
34935     then only if the type is being applied to an identifier that itself
34936     is not being declared as deprecated.
34937
34938          typedef int T1 __attribute__ ((deprecated));
34939          T1 x;
34940          typedef T1 T2;
34941          T2 y;
34942          typedef T1 T3 __attribute__ ((deprecated));
34943          T3 z __attribute__ ((deprecated));
34944
34945     results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
34946     warning is issued for line 4 because T2 is not explicitly
34947     deprecated.  Line 5 has no warning because T3 is explicitly
34948     deprecated.  Similarly for line 6.  The optional MSG argument,
34949     which must be a string, is printed in the warning if present.
34950     Control characters in the string will be replaced with escape
34951     sequences, and if the '-fmessage-length' option is set to 0 (its
34952     default value) then any newline characters will be ignored.
34953
34954     The 'deprecated' attribute can also be used for functions and
34955     variables (*note Function Attributes::, *note Variable
34956     Attributes::.)
34957
34958     The message attached to the attribute is affected by the setting of
34959     the '-fmessage-length' option.
34960
34961'designated_init'
34962     This attribute may only be applied to structure types.  It
34963     indicates that any initialization of an object of this type must
34964     use designated initializers rather than positional initializers.
34965     The intent of this attribute is to allow the programmer to indicate
34966     that a structure's layout may change, and that therefore relying on
34967     positional initialization will result in future breakage.
34968
34969     GCC emits warnings based on this attribute by default; use
34970     '-Wno-designated-init' to suppress them.
34971
34972'may_alias'
34973     Accesses through pointers to types with this attribute are not
34974     subject to type-based alias analysis, but are instead assumed to be
34975     able to alias any other type of objects.  In the context of section
34976     6.5 paragraph 7 of the C99 standard, an lvalue expression
34977     dereferencing such a pointer is treated like having a character
34978     type.  See '-fstrict-aliasing' for more information on aliasing
34979     issues.  This extension exists to support some vector APIs, in
34980     which pointers to one vector type are permitted to alias pointers
34981     to a different vector type.
34982
34983     Note that an object of a type with this attribute does not have any
34984     special semantics.
34985
34986     Example of use:
34987
34988          typedef short __attribute__ ((__may_alias__)) short_a;
34989
34990          int
34991          main (void)
34992          {
34993            int a = 0x12345678;
34994            short_a *b = (short_a *) &a;
34995
34996            b[1] = 0;
34997
34998            if (a == 0x12345678)
34999              abort();
35000
35001            exit(0);
35002          }
35003
35004     If you replaced 'short_a' with 'short' in the variable declaration,
35005     the above program would abort when compiled with
35006     '-fstrict-aliasing', which is on by default at '-O2' or above.
35007
35008'mode (MODE)'
35009     This attribute specifies the data type for the
35010     declaration--whichever type corresponds to the mode MODE.  This in
35011     effect lets you request an integer or floating-point type according
35012     to its width.
35013
35014     *Note (gccint)Machine Modes::, for a list of the possible keywords
35015     for MODE.  You may also specify a mode of 'byte' or '__byte__' to
35016     indicate the mode corresponding to a one-byte integer, 'word' or
35017     '__word__' for the mode of a one-word integer, and 'pointer' or
35018     '__pointer__' for the mode used to represent pointers.
35019
35020'packed'
35021     This attribute, attached to a 'struct', 'union', or C++ 'class'
35022     type definition, specifies that each of its members (other than
35023     zero-width bit-fields) is placed to minimize the memory required.
35024     This is equivalent to specifying the 'packed' attribute on each of
35025     the members.
35026
35027     When attached to an 'enum' definition, the 'packed' attribute
35028     indicates that the smallest integral type should be used.
35029     Specifying the '-fshort-enums' flag on the command line is
35030     equivalent to specifying the 'packed' attribute on all 'enum'
35031     definitions.
35032
35033     In the following example 'struct my_packed_struct''s members are
35034     packed closely together, but the internal layout of its 's' member
35035     is not packed--to do that, 'struct my_unpacked_struct' needs to be
35036     packed too.
35037
35038          struct my_unpacked_struct
35039           {
35040              char c;
35041              int i;
35042           };
35043
35044          struct __attribute__ ((__packed__)) my_packed_struct
35045            {
35046               char c;
35047               int  i;
35048               struct my_unpacked_struct s;
35049            };
35050
35051     You may only specify the 'packed' attribute on the definition of an
35052     'enum', 'struct', 'union', or 'class', not on a 'typedef' that does
35053     not also define the enumerated type, structure, union, or class.
35054
35055'scalar_storage_order ("ENDIANNESS")'
35056     When attached to a 'union' or a 'struct', this attribute sets the
35057     storage order, aka endianness, of the scalar fields of the type, as
35058     well as the array fields whose component is scalar.  The supported
35059     endiannesses are 'big-endian' and 'little-endian'.  The attribute
35060     has no effects on fields which are themselves a 'union', a 'struct'
35061     or an array whose component is a 'union' or a 'struct', and it is
35062     possible for these fields to have a different scalar storage order
35063     than the enclosing type.
35064
35065     This attribute is supported only for targets that use a uniform
35066     default scalar storage order (fortunately, most of them), i.e.
35067     targets that store the scalars either all in big-endian or all in
35068     little-endian.
35069
35070     Additional restrictions are enforced for types with the reverse
35071     scalar storage order with regard to the scalar storage order of the
35072     target:
35073
35074        * Taking the address of a scalar field of a 'union' or a
35075          'struct' with reverse scalar storage order is not permitted
35076          and yields an error.
35077        * Taking the address of an array field, whose component is
35078          scalar, of a 'union' or a 'struct' with reverse scalar storage
35079          order is permitted but yields a warning, unless
35080          '-Wno-scalar-storage-order' is specified.
35081        * Taking the address of a 'union' or a 'struct' with reverse
35082          scalar storage order is permitted.
35083
35084     These restrictions exist because the storage order attribute is
35085     lost when the address of a scalar or the address of an array with
35086     scalar component is taken, so storing indirectly through this
35087     address generally does not work.  The second case is nevertheless
35088     allowed to be able to perform a block copy from or to the array.
35089
35090     Moreover, the use of type punning or aliasing to toggle the storage
35091     order is not supported; that is to say, a given scalar object
35092     cannot be accessed through distinct types that assign a different
35093     storage order to it.
35094
35095'transparent_union'
35096
35097     This attribute, attached to a 'union' type definition, indicates
35098     that any function parameter having that union type causes calls to
35099     that function to be treated in a special way.
35100
35101     First, the argument corresponding to a transparent union type can
35102     be of any type in the union; no cast is required.  Also, if the
35103     union contains a pointer type, the corresponding argument can be a
35104     null pointer constant or a void pointer expression; and if the
35105     union contains a void pointer type, the corresponding argument can
35106     be any pointer expression.  If the union member type is a pointer,
35107     qualifiers like 'const' on the referenced type must be respected,
35108     just as with normal pointer conversions.
35109
35110     Second, the argument is passed to the function using the calling
35111     conventions of the first member of the transparent union, not the
35112     calling conventions of the union itself.  All members of the union
35113     must have the same machine representation; this is necessary for
35114     this argument passing to work properly.
35115
35116     Transparent unions are designed for library functions that have
35117     multiple interfaces for compatibility reasons.  For example,
35118     suppose the 'wait' function must accept either a value of type 'int
35119     *' to comply with POSIX, or a value of type 'union wait *' to
35120     comply with the 4.1BSD interface.  If 'wait''s parameter were 'void
35121     *', 'wait' would accept both kinds of arguments, but it would also
35122     accept any other pointer type and this would make argument type
35123     checking less useful.  Instead, '<sys/wait.h>' might define the
35124     interface as follows:
35125
35126          typedef union __attribute__ ((__transparent_union__))
35127            {
35128              int *__ip;
35129              union wait *__up;
35130            } wait_status_ptr_t;
35131
35132          pid_t wait (wait_status_ptr_t);
35133
35134     This interface allows either 'int *' or 'union wait *' arguments to
35135     be passed, using the 'int *' calling convention.  The program can
35136     call 'wait' with arguments of either type:
35137
35138          int w1 () { int w; return wait (&w); }
35139          int w2 () { union wait w; return wait (&w); }
35140
35141     With this interface, 'wait''s implementation might look like this:
35142
35143          pid_t wait (wait_status_ptr_t p)
35144          {
35145            return waitpid (-1, p.__ip, 0);
35146          }
35147
35148'unused'
35149     When attached to a type (including a 'union' or a 'struct'), this
35150     attribute means that variables of that type are meant to appear
35151     possibly unused.  GCC does not produce a warning for any variables
35152     of that type, even if the variable appears to do nothing.  This is
35153     often the case with lock or thread classes, which are usually
35154     defined and then not referenced, but contain constructors and
35155     destructors that have nontrivial bookkeeping functions.
35156
35157'vector_size (BYTES)'
35158     This attribute specifies the vector size for the type, measured in
35159     bytes.  The type to which it applies is known as the "base type".
35160     The BYTES argument must be a positive power-of-two multiple of the
35161     base type size.  For example, the following declarations:
35162
35163          typedef __attribute__ ((vector_size (32))) int int_vec32_t ;
35164          typedef __attribute__ ((vector_size (32))) int* int_vec32_ptr_t;
35165          typedef __attribute__ ((vector_size (32))) int int_vec32_arr3_t[3];
35166
35167     define 'int_vec32_t' to be a 32-byte vector type composed of 'int'
35168     sized units.  With 'int' having a size of 4 bytes, the type defines
35169     a vector of eight units, four bytes each.  The mode of variables of
35170     type 'int_vec32_t' is 'V8SI'.  'int_vec32_ptr_t' is then defined to
35171     be a pointer to such a vector type, and 'int_vec32_arr3_t' to be an
35172     array of three such vectors.  *Note Vector Extensions:: for details
35173     of manipulating objects of vector types.
35174
35175     This attribute is only applicable to integral and floating scalar
35176     types.  In function declarations the attribute applies to the
35177     function return type.
35178
35179     For example, the following:
35180          __attribute__ ((vector_size (16))) float get_flt_vec16 (void);
35181     declares 'get_flt_vec16' to be a function returning a 16-byte
35182     vector with the base type 'float'.
35183
35184'visibility'
35185     In C++, attribute visibility (*note Function Attributes::) can also
35186     be applied to class, struct, union and enum types.  Unlike other
35187     type attributes, the attribute must appear between the initial
35188     keyword and the name of the type; it cannot appear after the body
35189     of the type.
35190
35191     Note that the type visibility is applied to vague linkage entities
35192     associated with the class (vtable, typeinfo node, etc.).  In
35193     particular, if a class is thrown as an exception in one shared
35194     object and caught in another, the class must have default
35195     visibility.  Otherwise the two shared objects are unable to use the
35196     same typeinfo node and exception handling will break.
35197
35198 To specify multiple attributes, separate them by commas within the
35199double parentheses: for example, '__attribute__ ((aligned (16),
35200packed))'.
35201
35202
35203File: gcc.info,  Node: ARC Type Attributes,  Next: ARM Type Attributes,  Prev: Common Type Attributes,  Up: Type Attributes
35204
352056.35.2 ARC Type Attributes
35206--------------------------
35207
35208Declaring objects with 'uncached' allows you to exclude data-cache
35209participation in load and store operations on those objects without
35210involving the additional semantic implications of 'volatile'.  The '.di'
35211instruction suffix is used for all loads and stores of data declared
35212'uncached'.
35213
35214
35215File: gcc.info,  Node: ARM Type Attributes,  Next: MeP Type Attributes,  Prev: ARC Type Attributes,  Up: Type Attributes
35216
352176.35.3 ARM Type Attributes
35218--------------------------
35219
35220On those ARM targets that support 'dllimport' (such as Symbian OS), you
35221can use the 'notshared' attribute to indicate that the virtual table and
35222other similar data for a class should not be exported from a DLL.  For
35223example:
35224
35225     class __declspec(notshared) C {
35226     public:
35227       __declspec(dllimport) C();
35228       virtual void f();
35229     }
35230
35231     __declspec(dllexport)
35232     C::C() {}
35233
35234In this code, 'C::C' is exported from the current DLL, but the virtual
35235table for 'C' is not exported.  (You can use '__attribute__' instead of
35236'__declspec' if you prefer, but most Symbian OS code uses '__declspec'.)
35237
35238
35239File: gcc.info,  Node: MeP Type Attributes,  Next: PowerPC Type Attributes,  Prev: ARM Type Attributes,  Up: Type Attributes
35240
352416.35.4 MeP Type Attributes
35242--------------------------
35243
35244Many of the MeP variable attributes may be applied to types as well.
35245Specifically, the 'based', 'tiny', 'near', and 'far' attributes may be
35246applied to either.  The 'io' and 'cb' attributes may not be applied to
35247types.
35248
35249
35250File: gcc.info,  Node: PowerPC Type Attributes,  Next: SPU Type Attributes,  Prev: MeP Type Attributes,  Up: Type Attributes
35251
352526.35.5 PowerPC Type Attributes
35253------------------------------
35254
35255Three attributes currently are defined for PowerPC configurations:
35256'altivec', 'ms_struct' and 'gcc_struct'.
35257
35258 For full documentation of the 'ms_struct' and 'gcc_struct' attributes
35259please see the documentation in *note x86 Type Attributes::.
35260
35261 The 'altivec' attribute allows one to declare AltiVec vector data types
35262supported by the AltiVec Programming Interface Manual.  The attribute
35263requires an argument to specify one of three vector types: 'vector__',
35264'pixel__' (always followed by unsigned short), and 'bool__' (always
35265followed by unsigned).
35266
35267     __attribute__((altivec(vector__)))
35268     __attribute__((altivec(pixel__))) unsigned short
35269     __attribute__((altivec(bool__))) unsigned
35270
35271 These attributes mainly are intended to support the '__vector',
35272'__pixel', and '__bool' AltiVec keywords.
35273
35274
35275File: gcc.info,  Node: SPU Type Attributes,  Next: x86 Type Attributes,  Prev: PowerPC Type Attributes,  Up: Type Attributes
35276
352776.35.6 SPU Type Attributes
35278--------------------------
35279
35280The SPU supports the 'spu_vector' attribute for types.  This attribute
35281allows one to declare vector data types supported by the
35282Sony/Toshiba/IBM SPU Language Extensions Specification.  It is intended
35283to support the '__vector' keyword.
35284
35285
35286File: gcc.info,  Node: x86 Type Attributes,  Prev: SPU Type Attributes,  Up: Type Attributes
35287
352886.35.7 x86 Type Attributes
35289--------------------------
35290
35291Two attributes are currently defined for x86 configurations: 'ms_struct'
35292and 'gcc_struct'.
35293
35294'ms_struct'
35295'gcc_struct'
35296
35297     If 'packed' is used on a structure, or if bit-fields are used it
35298     may be that the Microsoft ABI packs them differently than GCC
35299     normally packs them.  Particularly when moving packed data between
35300     functions compiled with GCC and the native Microsoft compiler
35301     (either via function call or as data in a file), it may be
35302     necessary to access either format.
35303
35304     The 'ms_struct' and 'gcc_struct' attributes correspond to the
35305     '-mms-bitfields' and '-mno-ms-bitfields' command-line options,
35306     respectively; see *note x86 Options::, for details of how structure
35307     layout is affected.  *Note x86 Variable Attributes::, for
35308     information about the corresponding attributes on variables.
35309
35310
35311File: gcc.info,  Node: Label Attributes,  Next: Enumerator Attributes,  Prev: Type Attributes,  Up: C Extensions
35312
353136.36 Label Attributes
35314=====================
35315
35316GCC allows attributes to be set on C labels.  *Note Attribute Syntax::,
35317for details of the exact syntax for using attributes.  Other attributes
35318are available for functions (*note Function Attributes::), variables
35319(*note Variable Attributes::), enumerators (*note Enumerator
35320Attributes::), statements (*note Statement Attributes::), and for types
35321(*note Type Attributes::).
35322
35323 This example uses the 'cold' label attribute to indicate the
35324'ErrorHandling' branch is unlikely to be taken and that the
35325'ErrorHandling' label is unused:
35326
35327
35328        asm goto ("some asm" : : : : NoError);
35329
35330     /* This branch (the fall-through from the asm) is less commonly used */
35331     ErrorHandling:
35332        __attribute__((cold, unused)); /* Semi-colon is required here */
35333        printf("error\n");
35334        return 0;
35335
35336     NoError:
35337        printf("no error\n");
35338        return 1;
35339
35340'unused'
35341     This feature is intended for program-generated code that may
35342     contain unused labels, but which is compiled with '-Wall'.  It is
35343     not normally appropriate to use in it human-written code, though it
35344     could be useful in cases where the code that jumps to the label is
35345     contained within an '#ifdef' conditional.
35346
35347'hot'
35348     The 'hot' attribute on a label is used to inform the compiler that
35349     the path following the label is more likely than paths that are not
35350     so annotated.  This attribute is used in cases where
35351     '__builtin_expect' cannot be used, for instance with computed goto
35352     or 'asm goto'.
35353
35354'cold'
35355     The 'cold' attribute on labels is used to inform the compiler that
35356     the path following the label is unlikely to be executed.  This
35357     attribute is used in cases where '__builtin_expect' cannot be used,
35358     for instance with computed goto or 'asm goto'.
35359
35360
35361File: gcc.info,  Node: Enumerator Attributes,  Next: Statement Attributes,  Prev: Label Attributes,  Up: C Extensions
35362
353636.37 Enumerator Attributes
35364==========================
35365
35366GCC allows attributes to be set on enumerators.  *Note Attribute
35367Syntax::, for details of the exact syntax for using attributes.  Other
35368attributes are available for functions (*note Function Attributes::),
35369variables (*note Variable Attributes::), labels (*note Label
35370Attributes::), statements (*note Statement Attributes::), and for types
35371(*note Type Attributes::).
35372
35373 This example uses the 'deprecated' enumerator attribute to indicate the
35374'oldval' enumerator is deprecated:
35375
35376     enum E {
35377       oldval __attribute__((deprecated)),
35378       newval
35379     };
35380
35381     int
35382     fn (void)
35383     {
35384       return oldval;
35385     }
35386
35387'deprecated'
35388     The 'deprecated' attribute results in a warning if the enumerator
35389     is used anywhere in the source file.  This is useful when
35390     identifying enumerators that are expected to be removed in a future
35391     version of a program.  The warning also includes the location of
35392     the declaration of the deprecated enumerator, to enable users to
35393     easily find further information about why the enumerator is
35394     deprecated, or what they should do instead.  Note that the warnings
35395     only occurs for uses.
35396
35397
35398File: gcc.info,  Node: Statement Attributes,  Next: Attribute Syntax,  Prev: Enumerator Attributes,  Up: C Extensions
35399
354006.38 Statement Attributes
35401=========================
35402
35403GCC allows attributes to be set on null statements.  *Note Attribute
35404Syntax::, for details of the exact syntax for using attributes.  Other
35405attributes are available for functions (*note Function Attributes::),
35406variables (*note Variable Attributes::), labels (*note Label
35407Attributes::), enumerators (*note Enumerator Attributes::), and for
35408types (*note Type Attributes::).
35409
35410 This example uses the 'fallthrough' statement attribute to indicate
35411that the '-Wimplicit-fallthrough' warning should not be emitted:
35412
35413     switch (cond)
35414       {
35415       case 1:
35416         bar (1);
35417         __attribute__((fallthrough));
35418       case 2:
35419         ...
35420       }
35421
35422'fallthrough'
35423     The 'fallthrough' attribute with a null statement serves as a
35424     fallthrough statement.  It hints to the compiler that a statement
35425     that falls through to another case label, or user-defined label in
35426     a switch statement is intentional and thus the
35427     '-Wimplicit-fallthrough' warning must not trigger.  The fallthrough
35428     attribute may appear at most once in each attribute list, and may
35429     not be mixed with other attributes.  It can only be used in a
35430     switch statement (the compiler will issue an error otherwise),
35431     after a preceding statement and before a logically succeeding case
35432     label, or user-defined label.
35433
35434
35435File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Statement Attributes,  Up: C Extensions
35436
354376.39 Attribute Syntax
35438=====================
35439
35440This section describes the syntax with which '__attribute__' may be
35441used, and the constructs to which attribute specifiers bind, for the C
35442language.  Some details may vary for C++ and Objective-C.  Because of
35443infelicities in the grammar for attributes, some forms described here
35444may not be successfully parsed in all cases.
35445
35446 There are some problems with the semantics of attributes in C++.  For
35447example, there are no manglings for attributes, although they may affect
35448code generation, so problems may arise when attributed types are used in
35449conjunction with templates or overloading.  Similarly, 'typeid' does not
35450distinguish between types with different attributes.  Support for
35451attributes in C++ may be restricted in future to attributes on
35452declarations only, but not on nested declarators.
35453
35454 *Note Function Attributes::, for details of the semantics of attributes
35455applying to functions.  *Note Variable Attributes::, for details of the
35456semantics of attributes applying to variables.  *Note Type Attributes::,
35457for details of the semantics of attributes applying to structure, union
35458and enumerated types.  *Note Label Attributes::, for details of the
35459semantics of attributes applying to labels.  *Note Enumerator
35460Attributes::, for details of the semantics of attributes applying to
35461enumerators.  *Note Statement Attributes::, for details of the semantics
35462of attributes applying to statements.
35463
35464 An "attribute specifier" is of the form '__attribute__
35465((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
35466comma-separated sequence of "attributes", where each attribute is one of
35467the following:
35468
35469   * Empty.  Empty attributes are ignored.
35470
35471   * An attribute name (which may be an identifier such as 'unused', or
35472     a reserved word such as 'const').
35473
35474   * An attribute name followed by a parenthesized list of parameters
35475     for the attribute.  These parameters take one of the following
35476     forms:
35477
35478        * An identifier.  For example, 'mode' attributes use this form.
35479
35480        * An identifier followed by a comma and a non-empty
35481          comma-separated list of expressions.  For example, 'format'
35482          attributes use this form.
35483
35484        * A possibly empty comma-separated list of expressions.  For
35485          example, 'format_arg' attributes use this form with the list
35486          being a single integer constant expression, and 'alias'
35487          attributes use this form with the list being a single string
35488          constant.
35489
35490 An "attribute specifier list" is a sequence of one or more attribute
35491specifiers, not separated by any other tokens.
35492
35493 You may optionally specify attribute names with '__' preceding and
35494following the name.  This allows you to use them in header files without
35495being concerned about a possible macro of the same name.  For example,
35496you may use the attribute name '__noreturn__' instead of 'noreturn'.
35497
35498Label Attributes
35499................
35500
35501In GNU C, an attribute specifier list may appear after the colon
35502following a label, other than a 'case' or 'default' label.  GNU C++ only
35503permits attributes on labels if the attribute specifier is immediately
35504followed by a semicolon (i.e., the label applies to an empty statement).
35505If the semicolon is missing, C++ label attributes are ambiguous, as it
35506is permissible for a declaration, which could begin with an attribute
35507list, to be labelled in C++.  Declarations cannot be labelled in C90 or
35508C99, so the ambiguity does not arise there.
35509
35510Enumerator Attributes
35511.....................
35512
35513In GNU C, an attribute specifier list may appear as part of an
35514enumerator.  The attribute goes after the enumeration constant, before
35515'=', if present.  The optional attribute in the enumerator appertains to
35516the enumeration constant.  It is not possible to place the attribute
35517after the constant expression, if present.
35518
35519Statement Attributes
35520....................
35521
35522In GNU C, an attribute specifier list may appear as part of a null
35523statement.  The attribute goes before the semicolon.
35524
35525Type Attributes
35526...............
35527
35528An attribute specifier list may appear as part of a 'struct', 'union' or
35529'enum' specifier.  It may go either immediately after the 'struct',
35530'union' or 'enum' keyword, or after the closing brace.  The former
35531syntax is preferred.  Where attribute specifiers follow the closing
35532brace, they are considered to relate to the structure, union or
35533enumerated type defined, not to any enclosing declaration the type
35534specifier appears in, and the type defined is not complete until after
35535the attribute specifiers.
35536
35537All other attributes
35538....................
35539
35540Otherwise, an attribute specifier appears as part of a declaration,
35541counting declarations of unnamed parameters and type names, and relates
35542to that declaration (which may be nested in another declaration, for
35543example in the case of a parameter declaration), or to a particular
35544declarator within a declaration.  Where an attribute specifier is
35545applied to a parameter declared as a function or an array, it should
35546apply to the function or array rather than the pointer to which the
35547parameter is implicitly converted, but this is not yet correctly
35548implemented.
35549
35550 Any list of specifiers and qualifiers at the start of a declaration may
35551contain attribute specifiers, whether or not such a list may in that
35552context contain storage class specifiers.  (Some attributes, however,
35553are essentially in the nature of storage class specifiers, and only make
35554sense where storage class specifiers may be used; for example,
35555'section'.)  There is one necessary limitation to this syntax: the first
35556old-style parameter declaration in a function definition cannot begin
35557with an attribute specifier, because such an attribute applies to the
35558function instead by syntax described below (which, however, is not yet
35559implemented in this case).  In some other cases, attribute specifiers
35560are permitted by this grammar but not yet supported by the compiler.
35561All attribute specifiers in this place relate to the declaration as a
35562whole.  In the obsolescent usage where a type of 'int' is implied by the
35563absence of type specifiers, such a list of specifiers and qualifiers may
35564be an attribute specifier list with no other specifiers or qualifiers.
35565
35566 At present, the first parameter in a function prototype must have some
35567type specifier that is not an attribute specifier; this resolves an
35568ambiguity in the interpretation of 'void f(int (__attribute__((foo))
35569x))', but is subject to change.  At present, if the parentheses of a
35570function declarator contain only attributes then those attributes are
35571ignored, rather than yielding an error or warning or implying a single
35572parameter of type int, but this is subject to change.
35573
35574 An attribute specifier list may appear immediately before a declarator
35575(other than the first) in a comma-separated list of declarators in a
35576declaration of more than one identifier using a single list of
35577specifiers and qualifiers.  Such attribute specifiers apply only to the
35578identifier before whose declarator they appear.  For example, in
35579
35580     __attribute__((noreturn)) void d0 (void),
35581         __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
35582          d2 (void);
35583
35584the 'noreturn' attribute applies to all the functions declared; the
35585'format' attribute only applies to 'd1'.
35586
35587 An attribute specifier list may appear immediately before the comma,
35588'=' or semicolon terminating the declaration of an identifier other than
35589a function definition.  Such attribute specifiers apply to the declared
35590object or function.  Where an assembler name for an object or function
35591is specified (*note Asm Labels::), the attribute must follow the 'asm'
35592specification.
35593
35594 An attribute specifier list may, in future, be permitted to appear
35595after the declarator in a function definition (before any old-style
35596parameter declarations or the function body).
35597
35598 Attribute specifiers may be mixed with type qualifiers appearing inside
35599the '[]' of a parameter array declarator, in the C99 construct by which
35600such qualifiers are applied to the pointer to which the array is
35601implicitly converted.  Such attribute specifiers apply to the pointer,
35602not to the array, but at present this is not implemented and they are
35603ignored.
35604
35605 An attribute specifier list may appear at the start of a nested
35606declarator.  At present, there are some limitations in this usage: the
35607attributes correctly apply to the declarator, but for most individual
35608attributes the semantics this implies are not implemented.  When
35609attribute specifiers follow the '*' of a pointer declarator, they may be
35610mixed with any type qualifiers present.  The following describes the
35611formal semantics of this syntax.  It makes the most sense if you are
35612familiar with the formal specification of declarators in the ISO C
35613standard.
35614
35615 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration 'T D1',
35616where 'T' contains declaration specifiers that specify a type TYPE (such
35617as 'int') and 'D1' is a declarator that contains an identifier IDENT.
35618The type specified for IDENT for derived declarators whose type does not
35619include an attribute specifier is as in the ISO C standard.
35620
35621 If 'D1' has the form '( ATTRIBUTE-SPECIFIER-LIST D )', and the
35622declaration 'T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST TYPE"
35623for IDENT, then 'T D1' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
35624ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
35625
35626 If 'D1' has the form '* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST D',
35627and the declaration 'T D' specifies the type
35628"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then 'T D1' specifies the
35629type "DERIVED-DECLARATOR-TYPE-LIST
35630TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.
35631
35632 For example,
35633
35634     void (__attribute__((noreturn)) ****f) (void);
35635
35636specifies the type "pointer to pointer to pointer to pointer to
35637non-returning function returning 'void'".  As another example,
35638
35639     char *__attribute__((aligned(8))) *f;
35640
35641specifies the type "pointer to 8-byte-aligned pointer to 'char'".  Note
35642again that this does not work with most attributes; for example, the
35643usage of 'aligned' and 'noreturn' attributes given above is not yet
35644supported.
35645
35646 For compatibility with existing code written for compiler versions that
35647did not implement attributes on nested declarators, some laxity is
35648allowed in the placing of attributes.  If an attribute that only applies
35649to types is applied to a declaration, it is treated as applying to the
35650type of that declaration.  If an attribute that only applies to
35651declarations is applied to the type of a declaration, it is treated as
35652applying to that declaration; and, for compatibility with code placing
35653the attributes immediately before the identifier declared, such an
35654attribute applied to a function return type is treated as applying to
35655the function type, and such an attribute applied to an array element
35656type is treated as applying to the array type.  If an attribute that
35657only applies to function types is applied to a pointer-to-function type,
35658it is treated as applying to the pointer target type; if such an
35659attribute is applied to a function return type that is not a
35660pointer-to-function type, it is treated as applying to the function
35661type.
35662
35663
35664File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
35665
356666.40 Prototypes and Old-Style Function Definitions
35667==================================================
35668
35669GNU C extends ISO C to allow a function prototype to override a later
35670old-style non-prototype definition.  Consider the following example:
35671
35672     /* Use prototypes unless the compiler is old-fashioned.  */
35673     #ifdef __STDC__
35674     #define P(x) x
35675     #else
35676     #define P(x) ()
35677     #endif
35678
35679     /* Prototype function declaration.  */
35680     int isroot P((uid_t));
35681
35682     /* Old-style function definition.  */
35683     int
35684     isroot (x)   /* ??? lossage here ??? */
35685          uid_t x;
35686     {
35687       return x == 0;
35688     }
35689
35690 Suppose the type 'uid_t' happens to be 'short'.  ISO C does not allow
35691this example, because subword arguments in old-style non-prototype
35692definitions are promoted.  Therefore in this example the function
35693definition's argument is really an 'int', which does not match the
35694prototype argument type of 'short'.
35695
35696 This restriction of ISO C makes it hard to write code that is portable
35697to traditional C compilers, because the programmer does not know whether
35698the 'uid_t' type is 'short', 'int', or 'long'.  Therefore, in cases like
35699these GNU C allows a prototype to override a later old-style definition.
35700More precisely, in GNU C, a function prototype argument type overrides
35701the argument type specified by a later old-style definition if the
35702former type is the same as the latter type before promotion.  Thus in
35703GNU C the above example is equivalent to the following:
35704
35705     int isroot (uid_t);
35706
35707     int
35708     isroot (uid_t x)
35709     {
35710       return x == 0;
35711     }
35712
35713GNU C++ does not support old-style function definitions, so this
35714extension is irrelevant.
35715
35716
35717File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
35718
357196.41 C++ Style Comments
35720=======================
35721
35722In GNU C, you may use C++ style comments, which start with '//' and
35723continue until the end of the line.  Many other C implementations allow
35724such comments, and they are included in the 1999 C standard.  However,
35725C++ style comments are not recognized if you specify an '-std' option
35726specifying a version of ISO C before C99, or '-ansi' (equivalent to
35727'-std=c90').
35728
35729
35730File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
35731
357326.42 Dollar Signs in Identifier Names
35733=====================================
35734
35735In GNU C, you may normally use dollar signs in identifier names.  This
35736is because many traditional C implementations allow such identifiers.
35737However, dollar signs in identifiers are not supported on a few target
35738machines, typically because the target assembler does not allow them.
35739
35740
35741File: gcc.info,  Node: Character Escapes,  Next: Alignment,  Prev: Dollar Signs,  Up: C Extensions
35742
357436.43 The Character <ESC> in Constants
35744=====================================
35745
35746You can use the sequence '\e' in a string or character constant to stand
35747for the ASCII character <ESC>.
35748
35749
35750File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Character Escapes,  Up: C Extensions
35751
357526.44 Determining the Alignment of Functions, Types or Variables
35753===============================================================
35754
35755The keyword '__alignof__' determines the alignment requirement of a
35756function, object, or a type, or the minimum alignment usually required
35757by a type.  Its syntax is just like 'sizeof' and C11 '_Alignof'.
35758
35759 For example, if the target machine requires a 'double' value to be
35760aligned on an 8-byte boundary, then '__alignof__ (double)' is 8.  This
35761is true on many RISC machines.  On more traditional machine designs,
35762'__alignof__ (double)' is 4 or even 2.
35763
35764 Some machines never actually require alignment; they allow references
35765to any data type even at an odd address.  For these machines,
35766'__alignof__' reports the smallest alignment that GCC gives the data
35767type, usually as mandated by the target ABI.
35768
35769 If the operand of '__alignof__' is an lvalue rather than a type, its
35770value is the required alignment for its type, taking into account any
35771minimum alignment specified by attribute 'aligned' (*note Common
35772Variable Attributes::).  For example, after this declaration:
35773
35774     struct foo { int x; char y; } foo1;
35775
35776the value of '__alignof__ (foo1.y)' is 1, even though its actual
35777alignment is probably 2 or 4, the same as '__alignof__ (int)'.  It is an
35778error to ask for the alignment of an incomplete type other than 'void'.
35779
35780 If the operand of the '__alignof__' expression is a function, the
35781expression evaluates to the alignment of the function which may be
35782specified by attribute 'aligned' (*note Common Function Attributes::).
35783
35784
35785File: gcc.info,  Node: Inline,  Next: Volatiles,  Prev: Alignment,  Up: C Extensions
35786
357876.45 An Inline Function is As Fast As a Macro
35788=============================================
35789
35790By declaring a function inline, you can direct GCC to make calls to that
35791function faster.  One way GCC can achieve this is to integrate that
35792function's code into the code for its callers.  This makes execution
35793faster by eliminating the function-call overhead; in addition, if any of
35794the actual argument values are constant, their known values may permit
35795simplifications at compile time so that not all of the inline function's
35796code needs to be included.  The effect on code size is less predictable;
35797object code may be larger or smaller with function inlining, depending
35798on the particular case.  You can also direct GCC to try to integrate all
35799"simple enough" functions into their callers with the option
35800'-finline-functions'.
35801
35802 GCC implements three different semantics of declaring a function
35803inline.  One is available with '-std=gnu89' or '-fgnu89-inline' or when
35804'gnu_inline' attribute is present on all inline declarations, another
35805when '-std=c99', '-std=gnu99' or an option for a later C version is used
35806(without '-fgnu89-inline'), and the third is used when compiling C++.
35807
35808 To declare a function inline, use the 'inline' keyword in its
35809declaration, like this:
35810
35811     static inline int
35812     inc (int *a)
35813     {
35814       return (*a)++;
35815     }
35816
35817 If you are writing a header file to be included in ISO C90 programs,
35818write '__inline__' instead of 'inline'.  *Note Alternate Keywords::.
35819
35820 The three types of inlining behave similarly in two important cases:
35821when the 'inline' keyword is used on a 'static' function, like the
35822example above, and when a function is first declared without using the
35823'inline' keyword and then is defined with 'inline', like this:
35824
35825     extern int inc (int *a);
35826     inline int
35827     inc (int *a)
35828     {
35829       return (*a)++;
35830     }
35831
35832 In both of these common cases, the program behaves the same as if you
35833had not used the 'inline' keyword, except for its speed.
35834
35835 When a function is both inline and 'static', if all calls to the
35836function are integrated into the caller, and the function's address is
35837never used, then the function's own assembler code is never referenced.
35838In this case, GCC does not actually output assembler code for the
35839function, unless you specify the option '-fkeep-inline-functions'.  If
35840there is a nonintegrated call, then the function is compiled to
35841assembler code as usual.  The function must also be compiled as usual if
35842the program refers to its address, because that cannot be inlined.
35843
35844 Note that certain usages in a function definition can make it
35845unsuitable for inline substitution.  Among these usages are: variadic
35846functions, use of 'alloca', use of computed goto (*note Labels as
35847Values::), use of nonlocal goto, use of nested functions, use of
35848'setjmp', use of '__builtin_longjmp' and use of '__builtin_return' or
35849'__builtin_apply_args'.  Using '-Winline' warns when a function marked
35850'inline' could not be substituted, and gives the reason for the failure.
35851
35852 As required by ISO C++, GCC considers member functions defined within
35853the body of a class to be marked inline even if they are not explicitly
35854declared with the 'inline' keyword.  You can override this with
35855'-fno-default-inline'; *note Options Controlling C++ Dialect: C++
35856Dialect Options.
35857
35858 GCC does not inline any functions when not optimizing unless you
35859specify the 'always_inline' attribute for the function, like this:
35860
35861     /* Prototype.  */
35862     inline void foo (const char) __attribute__((always_inline));
35863
35864 The remainder of this section is specific to GNU C90 inlining.
35865
35866 When an inline function is not 'static', then the compiler must assume
35867that there may be calls from other source files; since a global symbol
35868can be defined only once in any program, the function must not be
35869defined in the other source files, so the calls therein cannot be
35870integrated.  Therefore, a non-'static' inline function is always
35871compiled on its own in the usual fashion.
35872
35873 If you specify both 'inline' and 'extern' in the function definition,
35874then the definition is used only for inlining.  In no case is the
35875function compiled on its own, not even if you refer to its address
35876explicitly.  Such an address becomes an external reference, as if you
35877had only declared the function, and had not defined it.
35878
35879 This combination of 'inline' and 'extern' has almost the effect of a
35880macro.  The way to use it is to put a function definition in a header
35881file with these keywords, and put another copy of the definition
35882(lacking 'inline' and 'extern') in a library file.  The definition in
35883the header file causes most calls to the function to be inlined.  If any
35884uses of the function remain, they refer to the single copy in the
35885library.
35886
35887
35888File: gcc.info,  Node: Volatiles,  Next: Using Assembly Language with C,  Prev: Inline,  Up: C Extensions
35889
358906.46 When is a Volatile Object Accessed?
35891========================================
35892
35893C has the concept of volatile objects.  These are normally accessed by
35894pointers and used for accessing hardware or inter-thread communication.
35895The standard encourages compilers to refrain from optimizations
35896concerning accesses to volatile objects, but leaves it implementation
35897defined as to what constitutes a volatile access.  The minimum
35898requirement is that at a sequence point all previous accesses to
35899volatile objects have stabilized and no subsequent accesses have
35900occurred.  Thus an implementation is free to reorder and combine
35901volatile accesses that occur between sequence points, but cannot do so
35902for accesses across a sequence point.  The use of volatile does not
35903allow you to violate the restriction on updating objects multiple times
35904between two sequence points.
35905
35906 Accesses to non-volatile objects are not ordered with respect to
35907volatile accesses.  You cannot use a volatile object as a memory barrier
35908to order a sequence of writes to non-volatile memory.  For instance:
35909
35910     int *ptr = SOMETHING;
35911     volatile int vobj;
35912     *ptr = SOMETHING;
35913     vobj = 1;
35914
35915Unless *PTR and VOBJ can be aliased, it is not guaranteed that the write
35916to *PTR occurs by the time the update of VOBJ happens.  If you need this
35917guarantee, you must use a stronger memory barrier such as:
35918
35919     int *ptr = SOMETHING;
35920     volatile int vobj;
35921     *ptr = SOMETHING;
35922     asm volatile ("" : : : "memory");
35923     vobj = 1;
35924
35925 A scalar volatile object is read when it is accessed in a void context:
35926
35927     volatile int *src = SOMEVALUE;
35928     *src;
35929
35930 Such expressions are rvalues, and GCC implements this as a read of the
35931volatile object being pointed to.
35932
35933 Assignments are also expressions and have an rvalue.  However when
35934assigning to a scalar volatile, the volatile object is not reread,
35935regardless of whether the assignment expression's rvalue is used or not.
35936If the assignment's rvalue is used, the value is that assigned to the
35937volatile object.  For instance, there is no read of VOBJ in all the
35938following cases:
35939
35940     int obj;
35941     volatile int vobj;
35942     vobj = SOMETHING;
35943     obj = vobj = SOMETHING;
35944     obj ? vobj = ONETHING : vobj = ANOTHERTHING;
35945     obj = (SOMETHING, vobj = ANOTHERTHING);
35946
35947 If you need to read the volatile object after an assignment has
35948occurred, you must use a separate expression with an intervening
35949sequence point.
35950
35951 As bit-fields are not individually addressable, volatile bit-fields may
35952be implicitly read when written to, or when adjacent bit-fields are
35953accessed.  Bit-field operations may be optimized such that adjacent
35954bit-fields are only partially accessed, if they straddle a storage unit
35955boundary.  For these reasons it is unwise to use volatile bit-fields to
35956access hardware.
35957
35958
35959File: gcc.info,  Node: Using Assembly Language with C,  Next: Alternate Keywords,  Prev: Volatiles,  Up: C Extensions
35960
359616.47 How to Use Inline Assembly Language in C Code
35962==================================================
35963
35964The 'asm' keyword allows you to embed assembler instructions within C
35965code.  GCC provides two forms of inline 'asm' statements.  A "basic
35966'asm'" statement is one with no operands (*note Basic Asm::), while an
35967"extended 'asm'" statement (*note Extended Asm::) includes one or more
35968operands.  The extended form is preferred for mixing C and assembly
35969language within a function, but to include assembly language at top
35970level you must use basic 'asm'.
35971
35972 You can also use the 'asm' keyword to override the assembler name for a
35973C symbol, or to place a C variable in a specific register.
35974
35975* Menu:
35976
35977* Basic Asm::          Inline assembler without operands.
35978* Extended Asm::       Inline assembler with operands.
35979* Constraints::        Constraints for 'asm' operands
35980* Asm Labels::         Specifying the assembler name to use for a C symbol.
35981* Explicit Register Variables::  Defining variables residing in specified
35982                       registers.
35983* Size of an asm::     How GCC calculates the size of an 'asm' block.
35984
35985
35986File: gcc.info,  Node: Basic Asm,  Next: Extended Asm,  Up: Using Assembly Language with C
35987
359886.47.1 Basic Asm -- Assembler Instructions Without Operands
35989-----------------------------------------------------------
35990
35991A basic 'asm' statement has the following syntax:
35992
35993     asm ASM-QUALIFIERS ( ASSEMBLERINSTRUCTIONS )
35994
35995 The 'asm' keyword is a GNU extension.  When writing code that can be
35996compiled with '-ansi' and the various '-std' options, use '__asm__'
35997instead of 'asm' (*note Alternate Keywords::).
35998
35999Qualifiers
36000..........
36001
36002'volatile'
36003     The optional 'volatile' qualifier has no effect.  All basic 'asm'
36004     blocks are implicitly volatile.
36005
36006'inline'
36007     If you use the 'inline' qualifier, then for inlining purposes the
36008     size of the 'asm' statement is taken as the smallest size possible
36009     (*note Size of an asm::).
36010
36011Parameters
36012..........
36013
36014ASSEMBLERINSTRUCTIONS
36015     This is a literal string that specifies the assembler code.  The
36016     string can contain any instructions recognized by the assembler,
36017     including directives.  GCC does not parse the assembler
36018     instructions themselves and does not know what they mean or even
36019     whether they are valid assembler input.
36020
36021     You may place multiple assembler instructions together in a single
36022     'asm' string, separated by the characters normally used in assembly
36023     code for the system.  A combination that works in most places is a
36024     newline to break the line, plus a tab character (written as
36025     '\n\t').  Some assemblers allow semicolons as a line separator.
36026     However, note that some assembler dialects use semicolons to start
36027     a comment.
36028
36029Remarks
36030.......
36031
36032Using extended 'asm' (*note Extended Asm::) typically produces smaller,
36033safer, and more efficient code, and in most cases it is a better
36034solution than basic 'asm'.  However, there are two situations where only
36035basic 'asm' can be used:
36036
36037   * Extended 'asm' statements have to be inside a C function, so to
36038     write inline assembly language at file scope ("top-level"), outside
36039     of C functions, you must use basic 'asm'.  You can use this
36040     technique to emit assembler directives, define assembly language
36041     macros that can be invoked elsewhere in the file, or write entire
36042     functions in assembly language.  Basic 'asm' statements outside of
36043     functions may not use any qualifiers.
36044
36045   * Functions declared with the 'naked' attribute also require basic
36046     'asm' (*note Function Attributes::).
36047
36048 Safely accessing C data and calling functions from basic 'asm' is more
36049complex than it may appear.  To access C data, it is better to use
36050extended 'asm'.
36051
36052 Do not expect a sequence of 'asm' statements to remain perfectly
36053consecutive after compilation.  If certain instructions need to remain
36054consecutive in the output, put them in a single multi-instruction 'asm'
36055statement.  Note that GCC's optimizers can move 'asm' statements
36056relative to other code, including across jumps.
36057
36058 'asm' statements may not perform jumps into other 'asm' statements.
36059GCC does not know about these jumps, and therefore cannot take account
36060of them when deciding how to optimize.  Jumps from 'asm' to C labels are
36061only supported in extended 'asm'.
36062
36063 Under certain circumstances, GCC may duplicate (or remove duplicates
36064of) your assembly code when optimizing.  This can lead to unexpected
36065duplicate symbol errors during compilation if your assembly code defines
36066symbols or labels.
36067
36068 *Warning:* The C standards do not specify semantics for 'asm', making
36069it a potential source of incompatibilities between compilers.  These
36070incompatibilities may not produce compiler warnings/errors.
36071
36072 GCC does not parse basic 'asm''s ASSEMBLERINSTRUCTIONS, which means
36073there is no way to communicate to the compiler what is happening inside
36074them.  GCC has no visibility of symbols in the 'asm' and may discard
36075them as unreferenced.  It also does not know about side effects of the
36076assembler code, such as modifications to memory or registers.  Unlike
36077some compilers, GCC assumes that no changes to general purpose registers
36078occur.  This assumption may change in a future release.
36079
36080 To avoid complications from future changes to the semantics and the
36081compatibility issues between compilers, consider replacing basic 'asm'
36082with extended 'asm'.  See How to convert from basic asm to extended asm
36083(https://gcc.gnu.org/wiki/ConvertBasicAsmToExtended) for information
36084about how to perform this conversion.
36085
36086 The compiler copies the assembler instructions in a basic 'asm'
36087verbatim to the assembly language output file, without processing
36088dialects or any of the '%' operators that are available with extended
36089'asm'.  This results in minor differences between basic 'asm' strings
36090and extended 'asm' templates.  For example, to refer to registers you
36091might use '%eax' in basic 'asm' and '%%eax' in extended 'asm'.
36092
36093 On targets such as x86 that support multiple assembler dialects, all
36094basic 'asm' blocks use the assembler dialect specified by the '-masm'
36095command-line option (*note x86 Options::).  Basic 'asm' provides no
36096mechanism to provide different assembler strings for different dialects.
36097
36098 For basic 'asm' with non-empty assembler string GCC assumes the
36099assembler block does not change any general purpose registers, but it
36100may read or write any globally accessible variable.
36101
36102 Here is an example of basic 'asm' for i386:
36103
36104     /* Note that this code will not compile with -masm=intel */
36105     #define DebugBreak() asm("int $3")
36106
36107
36108File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Basic Asm,  Up: Using Assembly Language with C
36109
361106.47.2 Extended Asm - Assembler Instructions with C Expression Operands
36111-----------------------------------------------------------------------
36112
36113With extended 'asm' you can read and write C variables from assembler
36114and perform jumps from assembler code to C labels.  Extended 'asm'
36115syntax uses colons (':') to delimit the operand parameters after the
36116assembler template:
36117
36118     asm ASM-QUALIFIERS ( ASSEMBLERTEMPLATE
36119                      : OUTPUTOPERANDS
36120                      [ : INPUTOPERANDS
36121                      [ : CLOBBERS ] ])
36122
36123     asm ASM-QUALIFIERS ( ASSEMBLERTEMPLATE
36124                           :
36125                           : INPUTOPERANDS
36126                           : CLOBBERS
36127                           : GOTOLABELS)
36128 where in the last form, ASM-QUALIFIERS contains 'goto' (and in the
36129first form, not).
36130
36131 The 'asm' keyword is a GNU extension.  When writing code that can be
36132compiled with '-ansi' and the various '-std' options, use '__asm__'
36133instead of 'asm' (*note Alternate Keywords::).
36134
36135Qualifiers
36136..........
36137
36138'volatile'
36139     The typical use of extended 'asm' statements is to manipulate input
36140     values to produce output values.  However, your 'asm' statements
36141     may also produce side effects.  If so, you may need to use the
36142     'volatile' qualifier to disable certain optimizations.  *Note
36143     Volatile::.
36144
36145'inline'
36146     If you use the 'inline' qualifier, then for inlining purposes the
36147     size of the 'asm' statement is taken as the smallest size possible
36148     (*note Size of an asm::).
36149
36150'goto'
36151     This qualifier informs the compiler that the 'asm' statement may
36152     perform a jump to one of the labels listed in the GOTOLABELS.
36153     *Note GotoLabels::.
36154
36155Parameters
36156..........
36157
36158ASSEMBLERTEMPLATE
36159     This is a literal string that is the template for the assembler
36160     code.  It is a combination of fixed text and tokens that refer to
36161     the input, output, and goto parameters.  *Note AssemblerTemplate::.
36162
36163OUTPUTOPERANDS
36164     A comma-separated list of the C variables modified by the
36165     instructions in the ASSEMBLERTEMPLATE.  An empty list is permitted.
36166     *Note OutputOperands::.
36167
36168INPUTOPERANDS
36169     A comma-separated list of C expressions read by the instructions in
36170     the ASSEMBLERTEMPLATE.  An empty list is permitted.  *Note
36171     InputOperands::.
36172
36173CLOBBERS
36174     A comma-separated list of registers or other values changed by the
36175     ASSEMBLERTEMPLATE, beyond those listed as outputs.  An empty list
36176     is permitted.  *Note Clobbers and Scratch Registers::.
36177
36178GOTOLABELS
36179     When you are using the 'goto' form of 'asm', this section contains
36180     the list of all C labels to which the code in the ASSEMBLERTEMPLATE
36181     may jump.  *Note GotoLabels::.
36182
36183     'asm' statements may not perform jumps into other 'asm' statements,
36184     only to the listed GOTOLABELS.  GCC's optimizers do not know about
36185     other jumps; therefore they cannot take account of them when
36186     deciding how to optimize.
36187
36188 The total number of input + output + goto operands is limited to 30.
36189
36190Remarks
36191.......
36192
36193The 'asm' statement allows you to include assembly instructions directly
36194within C code.  This may help you to maximize performance in
36195time-sensitive code or to access assembly instructions that are not
36196readily available to C programs.
36197
36198 Note that extended 'asm' statements must be inside a function.  Only
36199basic 'asm' may be outside functions (*note Basic Asm::).  Functions
36200declared with the 'naked' attribute also require basic 'asm' (*note
36201Function Attributes::).
36202
36203 While the uses of 'asm' are many and varied, it may help to think of an
36204'asm' statement as a series of low-level instructions that convert input
36205parameters to output parameters.  So a simple (if not particularly
36206useful) example for i386 using 'asm' might look like this:
36207
36208     int src = 1;
36209     int dst;
36210
36211     asm ("mov %1, %0\n\t"
36212         "add $1, %0"
36213         : "=r" (dst)
36214         : "r" (src));
36215
36216     printf("%d\n", dst);
36217
36218 This code copies 'src' to 'dst' and add 1 to 'dst'.
36219
362206.47.2.1 Volatile
36221.................
36222
36223GCC's optimizers sometimes discard 'asm' statements if they determine
36224there is no need for the output variables.  Also, the optimizers may
36225move code out of loops if they believe that the code will always return
36226the same result (i.e. none of its input values change between calls).
36227Using the 'volatile' qualifier disables these optimizations.  'asm'
36228statements that have no output operands, including 'asm goto'
36229statements, are implicitly volatile.
36230
36231 This i386 code demonstrates a case that does not use (or require) the
36232'volatile' qualifier.  If it is performing assertion checking, this code
36233uses 'asm' to perform the validation.  Otherwise, 'dwRes' is
36234unreferenced by any code.  As a result, the optimizers can discard the
36235'asm' statement, which in turn removes the need for the entire 'DoCheck'
36236routine.  By omitting the 'volatile' qualifier when it isn't needed you
36237allow the optimizers to produce the most efficient code possible.
36238
36239     void DoCheck(uint32_t dwSomeValue)
36240     {
36241        uint32_t dwRes;
36242
36243        // Assumes dwSomeValue is not zero.
36244        asm ("bsfl %1,%0"
36245          : "=r" (dwRes)
36246          : "r" (dwSomeValue)
36247          : "cc");
36248
36249        assert(dwRes > 3);
36250     }
36251
36252 The next example shows a case where the optimizers can recognize that
36253the input ('dwSomeValue') never changes during the execution of the
36254function and can therefore move the 'asm' outside the loop to produce
36255more efficient code.  Again, using the 'volatile' qualifier disables
36256this type of optimization.
36257
36258     void do_print(uint32_t dwSomeValue)
36259     {
36260        uint32_t dwRes;
36261
36262        for (uint32_t x=0; x < 5; x++)
36263        {
36264           // Assumes dwSomeValue is not zero.
36265           asm ("bsfl %1,%0"
36266             : "=r" (dwRes)
36267             : "r" (dwSomeValue)
36268             : "cc");
36269
36270           printf("%u: %u %u\n", x, dwSomeValue, dwRes);
36271        }
36272     }
36273
36274 The following example demonstrates a case where you need to use the
36275'volatile' qualifier.  It uses the x86 'rdtsc' instruction, which reads
36276the computer's time-stamp counter.  Without the 'volatile' qualifier,
36277the optimizers might assume that the 'asm' block will always return the
36278same value and therefore optimize away the second call.
36279
36280     uint64_t msr;
36281
36282     asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
36283             "shl $32, %%rdx\n\t"  // Shift the upper bits left.
36284             "or %%rdx, %0"        // 'Or' in the lower bits.
36285             : "=a" (msr)
36286             :
36287             : "rdx");
36288
36289     printf("msr: %llx\n", msr);
36290
36291     // Do other work...
36292
36293     // Reprint the timestamp
36294     asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
36295             "shl $32, %%rdx\n\t"  // Shift the upper bits left.
36296             "or %%rdx, %0"        // 'Or' in the lower bits.
36297             : "=a" (msr)
36298             :
36299             : "rdx");
36300
36301     printf("msr: %llx\n", msr);
36302
36303 GCC's optimizers do not treat this code like the non-volatile code in
36304the earlier examples.  They do not move it out of loops or omit it on
36305the assumption that the result from a previous call is still valid.
36306
36307 Note that the compiler can move even 'volatile asm' instructions
36308relative to other code, including across jump instructions.  For
36309example, on many targets there is a system register that controls the
36310rounding mode of floating-point operations.  Setting it with a 'volatile
36311asm' statement, as in the following PowerPC example, does not work
36312reliably.
36313
36314     asm volatile("mtfsf 255, %0" : : "f" (fpenv));
36315     sum = x + y;
36316
36317 The compiler may move the addition back before the 'volatile asm'
36318statement.  To make it work as expected, add an artificial dependency to
36319the 'asm' by referencing a variable in the subsequent code, for example:
36320
36321     asm volatile ("mtfsf 255,%1" : "=X" (sum) : "f" (fpenv));
36322     sum = x + y;
36323
36324 Under certain circumstances, GCC may duplicate (or remove duplicates
36325of) your assembly code when optimizing.  This can lead to unexpected
36326duplicate symbol errors during compilation if your 'asm' code defines
36327symbols or labels.  Using '%=' (*note AssemblerTemplate::) may help
36328resolve this problem.
36329
363306.47.2.2 Assembler Template
36331...........................
36332
36333An assembler template is a literal string containing assembler
36334instructions.  The compiler replaces tokens in the template that refer
36335to inputs, outputs, and goto labels, and then outputs the resulting
36336string to the assembler.  The string can contain any instructions
36337recognized by the assembler, including directives.  GCC does not parse
36338the assembler instructions themselves and does not know what they mean
36339or even whether they are valid assembler input.  However, it does count
36340the statements (*note Size of an asm::).
36341
36342 You may place multiple assembler instructions together in a single
36343'asm' string, separated by the characters normally used in assembly code
36344for the system.  A combination that works in most places is a newline to
36345break the line, plus a tab character to move to the instruction field
36346(written as '\n\t').  Some assemblers allow semicolons as a line
36347separator.  However, note that some assembler dialects use semicolons to
36348start a comment.
36349
36350 Do not expect a sequence of 'asm' statements to remain perfectly
36351consecutive after compilation, even when you are using the 'volatile'
36352qualifier.  If certain instructions need to remain consecutive in the
36353output, put them in a single multi-instruction 'asm' statement.
36354
36355 Accessing data from C programs without using input/output operands
36356(such as by using global symbols directly from the assembler template)
36357may not work as expected.  Similarly, calling functions directly from an
36358assembler template requires a detailed understanding of the target
36359assembler and ABI.
36360
36361 Since GCC does not parse the assembler template, it has no visibility
36362of any symbols it references.  This may result in GCC discarding those
36363symbols as unreferenced unless they are also listed as input, output, or
36364goto operands.
36365
36366Special format strings
36367......................
36368
36369In addition to the tokens described by the input, output, and goto
36370operands, these tokens have special meanings in the assembler template:
36371
36372'%%'
36373     Outputs a single '%' into the assembler code.
36374
36375'%='
36376     Outputs a number that is unique to each instance of the 'asm'
36377     statement in the entire compilation.  This option is useful when
36378     creating local labels and referring to them multiple times in a
36379     single template that generates multiple assembler instructions.
36380
36381'%{'
36382'%|'
36383'%}'
36384     Outputs '{', '|', and '}' characters (respectively) into the
36385     assembler code.  When unescaped, these characters have special
36386     meaning to indicate multiple assembler dialects, as described
36387     below.
36388
36389Multiple assembler dialects in 'asm' templates
36390..............................................
36391
36392On targets such as x86, GCC supports multiple assembler dialects.  The
36393'-masm' option controls which dialect GCC uses as its default for inline
36394assembler.  The target-specific documentation for the '-masm' option
36395contains the list of supported dialects, as well as the default dialect
36396if the option is not specified.  This information may be important to
36397understand, since assembler code that works correctly when compiled
36398using one dialect will likely fail if compiled using another.  *Note x86
36399Options::.
36400
36401 If your code needs to support multiple assembler dialects (for example,
36402if you are writing public headers that need to support a variety of
36403compilation options), use constructs of this form:
36404
36405     { dialect0 | dialect1 | dialect2... }
36406
36407 This construct outputs 'dialect0' when using dialect #0 to compile the
36408code, 'dialect1' for dialect #1, etc.  If there are fewer alternatives
36409within the braces than the number of dialects the compiler supports, the
36410construct outputs nothing.
36411
36412 For example, if an x86 compiler supports two dialects ('att', 'intel'),
36413an assembler template such as this:
36414
36415     "bt{l %[Offset],%[Base] | %[Base],%[Offset]}; jc %l2"
36416
36417is equivalent to one of
36418
36419     "btl %[Offset],%[Base] ; jc %l2"   /* att dialect */
36420     "bt %[Base],%[Offset]; jc %l2"     /* intel dialect */
36421
36422 Using that same compiler, this code:
36423
36424     "xchg{l}\t{%%}ebx, %1"
36425
36426corresponds to either
36427
36428     "xchgl\t%%ebx, %1"                 /* att dialect */
36429     "xchg\tebx, %1"                    /* intel dialect */
36430
36431 There is no support for nesting dialect alternatives.
36432
364336.47.2.3 Output Operands
36434........................
36435
36436An 'asm' statement has zero or more output operands indicating the names
36437of C variables modified by the assembler code.
36438
36439 In this i386 example, 'old' (referred to in the template string as
36440'%0') and '*Base' (as '%1') are outputs and 'Offset' ('%2') is an input:
36441
36442     bool old;
36443
36444     __asm__ ("btsl %2,%1\n\t" // Turn on zero-based bit #Offset in Base.
36445              "sbb %0,%0"      // Use the CF to calculate old.
36446        : "=r" (old), "+rm" (*Base)
36447        : "Ir" (Offset)
36448        : "cc");
36449
36450     return old;
36451
36452 Operands are separated by commas.  Each operand has this format:
36453
36454     [ [ASMSYMBOLICNAME] ] CONSTRAINT (CVARIABLENAME)
36455
36456ASMSYMBOLICNAME
36457     Specifies a symbolic name for the operand.  Reference the name in
36458     the assembler template by enclosing it in square brackets (i.e.
36459     '%[Value]').  The scope of the name is the 'asm' statement that
36460     contains the definition.  Any valid C variable name is acceptable,
36461     including names already defined in the surrounding code.  No two
36462     operands within the same 'asm' statement can use the same symbolic
36463     name.
36464
36465     When not using an ASMSYMBOLICNAME, use the (zero-based) position of
36466     the operand in the list of operands in the assembler template.  For
36467     example if there are three output operands, use '%0' in the
36468     template to refer to the first, '%1' for the second, and '%2' for
36469     the third.
36470
36471CONSTRAINT
36472     A string constant specifying constraints on the placement of the
36473     operand; *Note Constraints::, for details.
36474
36475     Output constraints must begin with either '=' (a variable
36476     overwriting an existing value) or '+' (when reading and writing).
36477     When using '=', do not assume the location contains the existing
36478     value on entry to the 'asm', except when the operand is tied to an
36479     input; *note Input Operands: InputOperands.
36480
36481     After the prefix, there must be one or more additional constraints
36482     (*note Constraints::) that describe where the value resides.
36483     Common constraints include 'r' for register and 'm' for memory.
36484     When you list more than one possible location (for example,
36485     '"=rm"'), the compiler chooses the most efficient one based on the
36486     current context.  If you list as many alternates as the 'asm'
36487     statement allows, you permit the optimizers to produce the best
36488     possible code.  If you must use a specific register, but your
36489     Machine Constraints do not provide sufficient control to select the
36490     specific register you want, local register variables may provide a
36491     solution (*note Local Register Variables::).
36492
36493CVARIABLENAME
36494     Specifies a C lvalue expression to hold the output, typically a
36495     variable name.  The enclosing parentheses are a required part of
36496     the syntax.
36497
36498 When the compiler selects the registers to use to represent the output
36499operands, it does not use any of the clobbered registers (*note Clobbers
36500and Scratch Registers::).
36501
36502 Output operand expressions must be lvalues.  The compiler cannot check
36503whether the operands have data types that are reasonable for the
36504instruction being executed.  For output expressions that are not
36505directly addressable (for example a bit-field), the constraint must
36506allow a register.  In that case, GCC uses the register as the output of
36507the 'asm', and then stores that register into the output.
36508
36509 Operands using the '+' constraint modifier count as two operands (that
36510is, both as input and output) towards the total maximum of 30 operands
36511per 'asm' statement.
36512
36513 Use the '&' constraint modifier (*note Modifiers::) on all output
36514operands that must not overlap an input.  Otherwise, GCC may allocate
36515the output operand in the same register as an unrelated input operand,
36516on the assumption that the assembler code consumes its inputs before
36517producing outputs.  This assumption may be false if the assembler code
36518actually consists of more than one instruction.
36519
36520 The same problem can occur if one output parameter (A) allows a
36521register constraint and another output parameter (B) allows a memory
36522constraint.  The code generated by GCC to access the memory address in B
36523can contain registers which _might_ be shared by A, and GCC considers
36524those registers to be inputs to the asm.  As above, GCC assumes that
36525such input registers are consumed before any outputs are written.  This
36526assumption may result in incorrect behavior if the 'asm' statement
36527writes to A before using B.  Combining the '&' modifier with the
36528register constraint on A ensures that modifying A does not affect the
36529address referenced by B.  Otherwise, the location of B is undefined if A
36530is modified before using B.
36531
36532 'asm' supports operand modifiers on operands (for example '%k2' instead
36533of simply '%2').  Typically these qualifiers are hardware dependent.
36534The list of supported modifiers for x86 is found at *note x86 Operand
36535modifiers: x86Operandmodifiers.
36536
36537 If the C code that follows the 'asm' makes no use of any of the output
36538operands, use 'volatile' for the 'asm' statement to prevent the
36539optimizers from discarding the 'asm' statement as unneeded (see *note
36540Volatile::).
36541
36542 This code makes no use of the optional ASMSYMBOLICNAME.  Therefore it
36543references the first output operand as '%0' (were there a second, it
36544would be '%1', etc).  The number of the first input operand is one
36545greater than that of the last output operand.  In this i386 example,
36546that makes 'Mask' referenced as '%1':
36547
36548     uint32_t Mask = 1234;
36549     uint32_t Index;
36550
36551       asm ("bsfl %1, %0"
36552          : "=r" (Index)
36553          : "r" (Mask)
36554          : "cc");
36555
36556 That code overwrites the variable 'Index' ('='), placing the value in a
36557register ('r').  Using the generic 'r' constraint instead of a
36558constraint for a specific register allows the compiler to pick the
36559register to use, which can result in more efficient code.  This may not
36560be possible if an assembler instruction requires a specific register.
36561
36562 The following i386 example uses the ASMSYMBOLICNAME syntax.  It
36563produces the same result as the code above, but some may consider it
36564more readable or more maintainable since reordering index numbers is not
36565necessary when adding or removing operands.  The names 'aIndex' and
36566'aMask' are only used in this example to emphasize which names get used
36567where.  It is acceptable to reuse the names 'Index' and 'Mask'.
36568
36569     uint32_t Mask = 1234;
36570     uint32_t Index;
36571
36572       asm ("bsfl %[aMask], %[aIndex]"
36573          : [aIndex] "=r" (Index)
36574          : [aMask] "r" (Mask)
36575          : "cc");
36576
36577 Here are some more examples of output operands.
36578
36579     uint32_t c = 1;
36580     uint32_t d;
36581     uint32_t *e = &c;
36582
36583     asm ("mov %[e], %[d]"
36584        : [d] "=rm" (d)
36585        : [e] "rm" (*e));
36586
36587 Here, 'd' may either be in a register or in memory.  Since the compiler
36588might already have the current value of the 'uint32_t' location pointed
36589to by 'e' in a register, you can enable it to choose the best location
36590for 'd' by specifying both constraints.
36591
365926.47.2.4 Flag Output Operands
36593.............................
36594
36595Some targets have a special register that holds the "flags" for the
36596result of an operation or comparison.  Normally, the contents of that
36597register are either unmodifed by the asm, or the 'asm' statement is
36598considered to clobber the contents.
36599
36600 On some targets, a special form of output operand exists by which
36601conditions in the flags register may be outputs of the asm.  The set of
36602conditions supported are target specific, but the general rule is that
36603the output variable must be a scalar integer, and the value is boolean.
36604When supported, the target defines the preprocessor symbol
36605'__GCC_ASM_FLAG_OUTPUTS__'.
36606
36607 Because of the special nature of the flag output operands, the
36608constraint may not include alternatives.
36609
36610 Most often, the target has only one flags register, and thus is an
36611implied operand of many instructions.  In this case, the operand should
36612not be referenced within the assembler template via '%0' etc, as there's
36613no corresponding text in the assembly language.
36614
36615x86 family
36616     The flag output constraints for the x86 family are of the form
36617     '=@ccCOND' where COND is one of the standard conditions defined in
36618     the ISA manual for 'jCC' or 'setCC'.
36619
36620     'a'
36621          "above" or unsigned greater than
36622     'ae'
36623          "above or equal" or unsigned greater than or equal
36624     'b'
36625          "below" or unsigned less than
36626     'be'
36627          "below or equal" or unsigned less than or equal
36628     'c'
36629          carry flag set
36630     'e'
36631     'z'
36632          "equal" or zero flag set
36633     'g'
36634          signed greater than
36635     'ge'
36636          signed greater than or equal
36637     'l'
36638          signed less than
36639     'le'
36640          signed less than or equal
36641     'o'
36642          overflow flag set
36643     'p'
36644          parity flag set
36645     's'
36646          sign flag set
36647     'na'
36648     'nae'
36649     'nb'
36650     'nbe'
36651     'nc'
36652     'ne'
36653     'ng'
36654     'nge'
36655     'nl'
36656     'nle'
36657     'no'
36658     'np'
36659     'ns'
36660     'nz'
36661          "not" FLAG, or inverted versions of those above
36662
366636.47.2.5 Input Operands
36664.......................
36665
36666Input operands make values from C variables and expressions available to
36667the assembly code.
36668
36669 Operands are separated by commas.  Each operand has this format:
36670
36671     [ [ASMSYMBOLICNAME] ] CONSTRAINT (CEXPRESSION)
36672
36673ASMSYMBOLICNAME
36674     Specifies a symbolic name for the operand.  Reference the name in
36675     the assembler template by enclosing it in square brackets (i.e.
36676     '%[Value]').  The scope of the name is the 'asm' statement that
36677     contains the definition.  Any valid C variable name is acceptable,
36678     including names already defined in the surrounding code.  No two
36679     operands within the same 'asm' statement can use the same symbolic
36680     name.
36681
36682     When not using an ASMSYMBOLICNAME, use the (zero-based) position of
36683     the operand in the list of operands in the assembler template.  For
36684     example if there are two output operands and three inputs, use '%2'
36685     in the template to refer to the first input operand, '%3' for the
36686     second, and '%4' for the third.
36687
36688CONSTRAINT
36689     A string constant specifying constraints on the placement of the
36690     operand; *Note Constraints::, for details.
36691
36692     Input constraint strings may not begin with either '=' or '+'.
36693     When you list more than one possible location (for example,
36694     '"irm"'), the compiler chooses the most efficient one based on the
36695     current context.  If you must use a specific register, but your
36696     Machine Constraints do not provide sufficient control to select the
36697     specific register you want, local register variables may provide a
36698     solution (*note Local Register Variables::).
36699
36700     Input constraints can also be digits (for example, '"0"').  This
36701     indicates that the specified input must be in the same place as the
36702     output constraint at the (zero-based) index in the output
36703     constraint list.  When using ASMSYMBOLICNAME syntax for the output
36704     operands, you may use these names (enclosed in brackets '[]')
36705     instead of digits.
36706
36707CEXPRESSION
36708     This is the C variable or expression being passed to the 'asm'
36709     statement as input.  The enclosing parentheses are a required part
36710     of the syntax.
36711
36712 When the compiler selects the registers to use to represent the input
36713operands, it does not use any of the clobbered registers (*note Clobbers
36714and Scratch Registers::).
36715
36716 If there are no output operands but there are input operands, place two
36717consecutive colons where the output operands would go:
36718
36719     __asm__ ("some instructions"
36720        : /* No outputs. */
36721        : "r" (Offset / 8));
36722
36723 *Warning:* Do _not_ modify the contents of input-only operands (except
36724for inputs tied to outputs).  The compiler assumes that on exit from the
36725'asm' statement these operands contain the same values as they had
36726before executing the statement.  It is _not_ possible to use clobbers to
36727inform the compiler that the values in these inputs are changing.  One
36728common work-around is to tie the changing input variable to an output
36729variable that never gets used.  Note, however, that if the code that
36730follows the 'asm' statement makes no use of any of the output operands,
36731the GCC optimizers may discard the 'asm' statement as unneeded (see
36732*note Volatile::).
36733
36734 'asm' supports operand modifiers on operands (for example '%k2' instead
36735of simply '%2').  Typically these qualifiers are hardware dependent.
36736The list of supported modifiers for x86 is found at *note x86 Operand
36737modifiers: x86Operandmodifiers.
36738
36739 In this example using the fictitious 'combine' instruction, the
36740constraint '"0"' for input operand 1 says that it must occupy the same
36741location as output operand 0.  Only input operands may use numbers in
36742constraints, and they must each refer to an output operand.  Only a
36743number (or the symbolic assembler name) in the constraint can guarantee
36744that one operand is in the same place as another.  The mere fact that
36745'foo' is the value of both operands is not enough to guarantee that they
36746are in the same place in the generated assembler code.
36747
36748     asm ("combine %2, %0"
36749        : "=r" (foo)
36750        : "0" (foo), "g" (bar));
36751
36752 Here is an example using symbolic names.
36753
36754     asm ("cmoveq %1, %2, %[result]"
36755        : [result] "=r"(result)
36756        : "r" (test), "r" (new), "[result]" (old));
36757
367586.47.2.6 Clobbers and Scratch Registers
36759.......................................
36760
36761While the compiler is aware of changes to entries listed in the output
36762operands, the inline 'asm' code may modify more than just the outputs.
36763For example, calculations may require additional registers, or the
36764processor may overwrite a register as a side effect of a particular
36765assembler instruction.  In order to inform the compiler of these
36766changes, list them in the clobber list.  Clobber list items are either
36767register names or the special clobbers (listed below).  Each clobber
36768list item is a string constant enclosed in double quotes and separated
36769by commas.
36770
36771 Clobber descriptions may not in any way overlap with an input or output
36772operand.  For example, you may not have an operand describing a register
36773class with one member when listing that register in the clobber list.
36774Variables declared to live in specific registers (*note Explicit
36775Register Variables::) and used as 'asm' input or output operands must
36776have no part mentioned in the clobber description.  In particular, there
36777is no way to specify that input operands get modified without also
36778specifying them as output operands.
36779
36780 When the compiler selects which registers to use to represent input and
36781output operands, it does not use any of the clobbered registers.  As a
36782result, clobbered registers are available for any use in the assembler
36783code.
36784
36785 Another restriction is that the clobber list should not contain the
36786stack pointer register.  This is because the compiler requires the value
36787of the stack pointer to be the same after an 'asm' statement as it was
36788on entry to the statement.  However, previous versions of GCC did not
36789enforce this rule and allowed the stack pointer to appear in the list,
36790with unclear semantics.  This behavior is deprecated and listing the
36791stack pointer may become an error in future versions of GCC.
36792
36793 Here is a realistic example for the VAX showing the use of clobbered
36794registers:
36795
36796     asm volatile ("movc3 %0, %1, %2"
36797                        : /* No outputs. */
36798                        : "g" (from), "g" (to), "g" (count)
36799                        : "r0", "r1", "r2", "r3", "r4", "r5", "memory");
36800
36801 Also, there are two special clobber arguments:
36802
36803'"cc"'
36804     The '"cc"' clobber indicates that the assembler code modifies the
36805     flags register.  On some machines, GCC represents the condition
36806     codes as a specific hardware register; '"cc"' serves to name this
36807     register.  On other machines, condition code handling is different,
36808     and specifying '"cc"' has no effect.  But it is valid no matter
36809     what the target.
36810
36811'"memory"'
36812     The '"memory"' clobber tells the compiler that the assembly code
36813     performs memory reads or writes to items other than those listed in
36814     the input and output operands (for example, accessing the memory
36815     pointed to by one of the input parameters).  To ensure memory
36816     contains correct values, GCC may need to flush specific register
36817     values to memory before executing the 'asm'.  Further, the compiler
36818     does not assume that any values read from memory before an 'asm'
36819     remain unchanged after that 'asm'; it reloads them as needed.
36820     Using the '"memory"' clobber effectively forms a read/write memory
36821     barrier for the compiler.
36822
36823     Note that this clobber does not prevent the _processor_ from doing
36824     speculative reads past the 'asm' statement.  To prevent that, you
36825     need processor-specific fence instructions.
36826
36827 Flushing registers to memory has performance implications and may be an
36828issue for time-sensitive code.  You can provide better information to
36829GCC to avoid this, as shown in the following examples.  At a minimum,
36830aliasing rules allow GCC to know what memory _doesn't_ need to be
36831flushed.
36832
36833 Here is a fictitious sum of squares instruction, that takes two
36834pointers to floating point values in memory and produces a floating
36835point register output.  Notice that 'x', and 'y' both appear twice in
36836the 'asm' parameters, once to specify memory accessed, and once to
36837specify a base register used by the 'asm'.  You won't normally be
36838wasting a register by doing this as GCC can use the same register for
36839both purposes.  However, it would be foolish to use both '%1' and '%3'
36840for 'x' in this 'asm' and expect them to be the same.  In fact, '%3' may
36841well not be a register.  It might be a symbolic memory reference to the
36842object pointed to by 'x'.
36843
36844     asm ("sumsq %0, %1, %2"
36845          : "+f" (result)
36846          : "r" (x), "r" (y), "m" (*x), "m" (*y));
36847
36848 Here is a fictitious '*z++ = *x++ * *y++' instruction.  Notice that the
36849'x', 'y' and 'z' pointer registers must be specified as input/output
36850because the 'asm' modifies them.
36851
36852     asm ("vecmul %0, %1, %2"
36853          : "+r" (z), "+r" (x), "+r" (y), "=m" (*z)
36854          : "m" (*x), "m" (*y));
36855
36856 An x86 example where the string memory argument is of unknown length.
36857
36858     asm("repne scasb"
36859         : "=c" (count), "+D" (p)
36860         : "m" (*(const char (*)[]) p), "0" (-1), "a" (0));
36861
36862 If you know the above will only be reading a ten byte array then you
36863could instead use a memory input like: '"m" (*(const char (*)[10]) p)'.
36864
36865 Here is an example of a PowerPC vector scale implemented in assembly,
36866complete with vector and condition code clobbers, and some initialized
36867offset registers that are unchanged by the 'asm'.
36868
36869     void
36870     dscal (size_t n, double *x, double alpha)
36871     {
36872       asm ("/* lots of asm here */"
36873            : "+m" (*(double (*)[n]) x), "+&r" (n), "+b" (x)
36874            : "d" (alpha), "b" (32), "b" (48), "b" (64),
36875              "b" (80), "b" (96), "b" (112)
36876            : "cr0",
36877              "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
36878              "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47");
36879     }
36880
36881 Rather than allocating fixed registers via clobbers to provide scratch
36882registers for an 'asm' statement, an alternative is to define a variable
36883and make it an early-clobber output as with 'a2' and 'a3' in the example
36884below.  This gives the compiler register allocator more freedom.  You
36885can also define a variable and make it an output tied to an input as
36886with 'a0' and 'a1', tied respectively to 'ap' and 'lda'.  Of course,
36887with tied outputs your 'asm' can't use the input value after modifying
36888the output register since they are one and the same register.  What's
36889more, if you omit the early-clobber on the output, it is possible that
36890GCC might allocate the same register to another of the inputs if GCC
36891could prove they had the same value on entry to the 'asm'.  This is why
36892'a1' has an early-clobber.  Its tied input, 'lda' might conceivably be
36893known to have the value 16 and without an early-clobber share the same
36894register as '%11'.  On the other hand, 'ap' can't be the same as any of
36895the other inputs, so an early-clobber on 'a0' is not needed.  It is also
36896not desirable in this case.  An early-clobber on 'a0' would cause GCC to
36897allocate a separate register for the '"m" (*(const double (*)[]) ap)'
36898input.  Note that tying an input to an output is the way to set up an
36899initialized temporary register modified by an 'asm' statement.  An input
36900not tied to an output is assumed by GCC to be unchanged, for example
36901'"b" (16)' below sets up '%11' to 16, and GCC might use that register in
36902following code if the value 16 happened to be needed.  You can even use
36903a normal 'asm' output for a scratch if all inputs that might share the
36904same register are consumed before the scratch is used.  The VSX
36905registers clobbered by the 'asm' statement could have used this
36906technique except for GCC's limit on the number of 'asm' parameters.
36907
36908     static void
36909     dgemv_kernel_4x4 (long n, const double *ap, long lda,
36910                       const double *x, double *y, double alpha)
36911     {
36912       double *a0;
36913       double *a1;
36914       double *a2;
36915       double *a3;
36916
36917       __asm__
36918         (
36919          /* lots of asm here */
36920          "#n=%1 ap=%8=%12 lda=%13 x=%7=%10 y=%0=%2 alpha=%9 o16=%11\n"
36921          "#a0=%3 a1=%4 a2=%5 a3=%6"
36922          :
36923            "+m" (*(double (*)[n]) y),
36924            "+&r" (n),	// 1
36925            "+b" (y),	// 2
36926            "=b" (a0),	// 3
36927            "=&b" (a1),	// 4
36928            "=&b" (a2),	// 5
36929            "=&b" (a3)	// 6
36930          :
36931            "m" (*(const double (*)[n]) x),
36932            "m" (*(const double (*)[]) ap),
36933            "d" (alpha),	// 9
36934            "r" (x),		// 10
36935            "b" (16),	// 11
36936            "3" (ap),	// 12
36937            "4" (lda)	// 13
36938          :
36939            "cr0",
36940            "vs32","vs33","vs34","vs35","vs36","vs37",
36941            "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47"
36942          );
36943     }
36944
369456.47.2.7 Goto Labels
36946....................
36947
36948'asm goto' allows assembly code to jump to one or more C labels.  The
36949GOTOLABELS section in an 'asm goto' statement contains a comma-separated
36950list of all C labels to which the assembler code may jump.  GCC assumes
36951that 'asm' execution falls through to the next statement (if this is not
36952the case, consider using the '__builtin_unreachable' intrinsic after the
36953'asm' statement).  Optimization of 'asm goto' may be improved by using
36954the 'hot' and 'cold' label attributes (*note Label Attributes::).
36955
36956 An 'asm goto' statement cannot have outputs.  This is due to an
36957internal restriction of the compiler: control transfer instructions
36958cannot have outputs.  If the assembler code does modify anything, use
36959the '"memory"' clobber to force the optimizers to flush all register
36960values to memory and reload them if necessary after the 'asm' statement.
36961
36962 Also note that an 'asm goto' statement is always implicitly considered
36963volatile.
36964
36965 To reference a label in the assembler template, prefix it with '%l'
36966(lowercase 'L') followed by its (zero-based) position in GOTOLABELS plus
36967the number of input operands.  For example, if the 'asm' has three
36968inputs and references two labels, refer to the first label as '%l3' and
36969the second as '%l4').
36970
36971 Alternately, you can reference labels using the actual C label name
36972enclosed in brackets.  For example, to reference a label named 'carry',
36973you can use '%l[carry]'.  The label must still be listed in the
36974GOTOLABELS section when using this approach.
36975
36976 Here is an example of 'asm goto' for i386:
36977
36978     asm goto (
36979         "btl %1, %0\n\t"
36980         "jc %l2"
36981         : /* No outputs. */
36982         : "r" (p1), "r" (p2)
36983         : "cc"
36984         : carry);
36985
36986     return 0;
36987
36988     carry:
36989     return 1;
36990
36991 The following example shows an 'asm goto' that uses a memory clobber.
36992
36993     int frob(int x)
36994     {
36995       int y;
36996       asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
36997                 : /* No outputs. */
36998                 : "r"(x), "r"(&y)
36999                 : "r5", "memory"
37000                 : error);
37001       return y;
37002     error:
37003       return -1;
37004     }
37005
370066.47.2.8 x86 Operand Modifiers
37007..............................
37008
37009References to input, output, and goto operands in the assembler template
37010of extended 'asm' statements can use modifiers to affect the way the
37011operands are formatted in the code output to the assembler.  For
37012example, the following code uses the 'h' and 'b' modifiers for x86:
37013
37014     uint16_t  num;
37015     asm volatile ("xchg %h0, %b0" : "+a" (num) );
37016
37017These modifiers generate this assembler code:
37018
37019     xchg %ah, %al
37020
37021 The rest of this discussion uses the following code for illustrative
37022purposes.
37023
37024     int main()
37025     {
37026        int iInt = 1;
37027
37028     top:
37029
37030        asm volatile goto ("some assembler instructions here"
37031        : /* No outputs. */
37032        : "q" (iInt), "X" (sizeof(unsigned char) + 1), "i" (42)
37033        : /* No clobbers. */
37034        : top);
37035     }
37036
37037 With no modifiers, this is what the output from the operands would be
37038for the 'att' and 'intel' dialects of assembler:
37039
37040Operand   'att'  'intel'
37041-----------------------------------
37042'%0'      '%eax' 'eax'
37043'%1'      '$2'   '2'
37044'%3'      '$.L3' 'OFFSET
37045                 FLAT:.L3'
37046
37047 The table below shows the list of supported modifiers and their
37048effects.
37049
37050Modifier   Description                                  Operand   'att'   'intel'
37051------------------------------------------------------------------------------------
37052'a'        Print an absolute memory reference.          '%A0'     '*%rax' 'rax'
37053'b'        Print the QImode name of the register.       '%b0'     '%al'   'al'
37054'c'        Require a constant operand and print the     '%c1'     '2'     '2'
37055           constant expression with no punctuation.
37056'E'        Print the address in Double Integer          '%E1'     '%(rax)''[rax]'
37057           (DImode) mode (8 bytes) when the target is
37058           64-bit.  Otherwise mode is unspecified
37059           (VOIDmode).
37060'h'        Print the QImode name for a "high"           '%h0'     '%ah'   'ah'
37061           register.
37062'H'        Add 8 bytes to an offsettable memory         '%H0'     '8(%rax)''8[rax]'
37063           reference.  Useful when accessing the high
37064           8 bytes of SSE values.  For a memref in
37065           (%rax), it generates
37066'k'        Print the SImode name of the register.       '%k0'     '%eax'  'eax'
37067'l'        Print the label name with no punctuation.    '%l3'     '.L3'   '.L3'
37068'p'        Print raw symbol name (without               '%p2'     '42'    '42'
37069           syntax-specific prefixes).
37070'P'        If used for a function, print the PLT
37071           suffix and generate PIC code.  For
37072           example, emit 'foo@PLT' instead of 'foo'
37073           for the function foo().  If used for a
37074           constant, drop all syntax-specific
37075           prefixes and issue the bare constant.  See
37076           'p' above.
37077'q'        Print the DImode name of the register.       '%q0'     '%rax'  'rax'
37078'w'        Print the HImode name of the register.       '%w0'     '%ax'   'ax'
37079'z'        Print the opcode suffix for the size of      '%z0'     'l'
37080           the current integer operand (one of
37081           'b'/'w'/'l'/'q').
37082
37083 'V' is a special modifier which prints the name of the full integer
37084register without '%'.
37085
370866.47.2.9 x86 Floating-Point 'asm' Operands
37087..........................................
37088
37089On x86 targets, there are several rules on the usage of stack-like
37090registers in the operands of an 'asm'.  These rules apply only to the
37091operands that are stack-like registers:
37092
37093  1. Given a set of input registers that die in an 'asm', it is
37094     necessary to know which are implicitly popped by the 'asm', and
37095     which must be explicitly popped by GCC.
37096
37097     An input register that is implicitly popped by the 'asm' must be
37098     explicitly clobbered, unless it is constrained to match an output
37099     operand.
37100
37101  2. For any input register that is implicitly popped by an 'asm', it is
37102     necessary to know how to adjust the stack to compensate for the
37103     pop.  If any non-popped input is closer to the top of the reg-stack
37104     than the implicitly popped register, it would not be possible to
37105     know what the stack looked like--it's not clear how the rest of the
37106     stack "slides up".
37107
37108     All implicitly popped input registers must be closer to the top of
37109     the reg-stack than any input that is not implicitly popped.
37110
37111     It is possible that if an input dies in an 'asm', the compiler
37112     might use the input register for an output reload.  Consider this
37113     example:
37114
37115          asm ("foo" : "=t" (a) : "f" (b));
37116
37117     This code says that input 'b' is not popped by the 'asm', and that
37118     the 'asm' pushes a result onto the reg-stack, i.e., the stack is
37119     one deeper after the 'asm' than it was before.  But, it is possible
37120     that reload may think that it can use the same register for both
37121     the input and the output.
37122
37123     To prevent this from happening, if any input operand uses the 'f'
37124     constraint, all output register constraints must use the '&'
37125     early-clobber modifier.
37126
37127     The example above is correctly written as:
37128
37129          asm ("foo" : "=&t" (a) : "f" (b));
37130
37131  3. Some operands need to be in particular places on the stack.  All
37132     output operands fall in this category--GCC has no other way to know
37133     which registers the outputs appear in unless you indicate this in
37134     the constraints.
37135
37136     Output operands must specifically indicate which register an output
37137     appears in after an 'asm'.  '=f' is not allowed: the operand
37138     constraints must select a class with a single register.
37139
37140  4. Output operands may not be "inserted" between existing stack
37141     registers.  Since no 387 opcode uses a read/write operand, all
37142     output operands are dead before the 'asm', and are pushed by the
37143     'asm'.  It makes no sense to push anywhere but the top of the
37144     reg-stack.
37145
37146     Output operands must start at the top of the reg-stack: output
37147     operands may not "skip" a register.
37148
37149  5. Some 'asm' statements may need extra stack space for internal
37150     calculations.  This can be guaranteed by clobbering stack registers
37151     unrelated to the inputs and outputs.
37152
37153 This 'asm' takes one input, which is internally popped, and produces
37154two outputs.
37155
37156     asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
37157
37158This 'asm' takes two inputs, which are popped by the 'fyl2xp1' opcode,
37159and replaces them with one output.  The 'st(1)' clobber is necessary for
37160the compiler to know that 'fyl2xp1' pops both inputs.
37161
37162     asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
37163
37164
37165File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: Using Assembly Language with C
37166
371676.47.3 Constraints for 'asm' Operands
37168-------------------------------------
37169
37170Here are specific details on what constraint letters you can use with
37171'asm' operands.  Constraints can say whether an operand may be in a
37172register, and which kinds of register; whether the operand can be a
37173memory reference, and which kinds of address; whether the operand may be
37174an immediate constant, and which possible values it may have.
37175Constraints can also require two operands to match.  Side-effects aren't
37176allowed in operands of inline 'asm', unless '<' or '>' constraints are
37177used, because there is no guarantee that the side effects will happen
37178exactly once in an instruction that can update the addressing register.
37179
37180* Menu:
37181
37182* Simple Constraints::  Basic use of constraints.
37183* Multi-Alternative::   When an insn has two alternative constraint-patterns.
37184* Modifiers::           More precise control over effects of constraints.
37185* Machine Constraints:: Special constraints for some particular machines.
37186
37187
37188File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
37189
371906.47.3.1 Simple Constraints
37191...........................
37192
37193The simplest kind of constraint is a string full of letters, each of
37194which describes one kind of operand that is permitted.  Here are the
37195letters that are allowed:
37196
37197whitespace
37198     Whitespace characters are ignored and can be inserted at any
37199     position except the first.  This enables each alternative for
37200     different operands to be visually aligned in the machine
37201     description even if they have different number of constraints and
37202     modifiers.
37203
37204'm'
37205     A memory operand is allowed, with any kind of address that the
37206     machine supports in general.  Note that the letter used for the
37207     general memory constraint can be re-defined by a back end using the
37208     'TARGET_MEM_CONSTRAINT' macro.
37209
37210'o'
37211     A memory operand is allowed, but only if the address is
37212     "offsettable".  This means that adding a small integer (actually,
37213     the width in bytes of the operand, as determined by its machine
37214     mode) may be added to the address and the result is also a valid
37215     memory address.
37216
37217     For example, an address which is constant is offsettable; so is an
37218     address that is the sum of a register and a constant (as long as a
37219     slightly larger constant is also within the range of
37220     address-offsets supported by the machine); but an autoincrement or
37221     autodecrement address is not offsettable.  More complicated
37222     indirect/indexed addresses may or may not be offsettable depending
37223     on the other addressing modes that the machine supports.
37224
37225     Note that in an output operand which can be matched by another
37226     operand, the constraint letter 'o' is valid only when accompanied
37227     by both '<' (if the target machine has predecrement addressing) and
37228     '>' (if the target machine has preincrement addressing).
37229
37230'V'
37231     A memory operand that is not offsettable.  In other words, anything
37232     that would fit the 'm' constraint but not the 'o' constraint.
37233
37234'<'
37235     A memory operand with autodecrement addressing (either predecrement
37236     or postdecrement) is allowed.  In inline 'asm' this constraint is
37237     only allowed if the operand is used exactly once in an instruction
37238     that can handle the side effects.  Not using an operand with '<' in
37239     constraint string in the inline 'asm' pattern at all or using it in
37240     multiple instructions isn't valid, because the side effects
37241     wouldn't be performed or would be performed more than once.
37242     Furthermore, on some targets the operand with '<' in constraint
37243     string must be accompanied by special instruction suffixes like
37244     '%U0' instruction suffix on PowerPC or '%P0' on IA-64.
37245
37246'>'
37247     A memory operand with autoincrement addressing (either preincrement
37248     or postincrement) is allowed.  In inline 'asm' the same
37249     restrictions as for '<' apply.
37250
37251'r'
37252     A register operand is allowed provided that it is in a general
37253     register.
37254
37255'i'
37256     An immediate integer operand (one with constant value) is allowed.
37257     This includes symbolic constants whose values will be known only at
37258     assembly time or later.
37259
37260'n'
37261     An immediate integer operand with a known numeric value is allowed.
37262     Many systems cannot support assembly-time constants for operands
37263     less than a word wide.  Constraints for these operands should use
37264     'n' rather than 'i'.
37265
37266'I', 'J', 'K', ... 'P'
37267     Other letters in the range 'I' through 'P' may be defined in a
37268     machine-dependent fashion to permit immediate integer operands with
37269     explicit integer values in specified ranges.  For example, on the
37270     68000, 'I' is defined to stand for the range of values 1 to 8.
37271     This is the range permitted as a shift count in the shift
37272     instructions.
37273
37274'E'
37275     An immediate floating operand (expression code 'const_double') is
37276     allowed, but only if the target floating point format is the same
37277     as that of the host machine (on which the compiler is running).
37278
37279'F'
37280     An immediate floating operand (expression code 'const_double' or
37281     'const_vector') is allowed.
37282
37283'G', 'H'
37284     'G' and 'H' may be defined in a machine-dependent fashion to permit
37285     immediate floating operands in particular ranges of values.
37286
37287's'
37288     An immediate integer operand whose value is not an explicit integer
37289     is allowed.
37290
37291     This might appear strange; if an insn allows a constant operand
37292     with a value not known at compile time, it certainly must allow any
37293     known value.  So why use 's' instead of 'i'?  Sometimes it allows
37294     better code to be generated.
37295
37296     For example, on the 68000 in a fullword instruction it is possible
37297     to use an immediate operand; but if the immediate value is between
37298     -128 and 127, better code results from loading the value into a
37299     register and using the register.  This is because the load into the
37300     register can be done with a 'moveq' instruction.  We arrange for
37301     this to happen by defining the letter 'K' to mean "any integer
37302     outside the range -128 to 127", and then specifying 'Ks' in the
37303     operand constraints.
37304
37305'g'
37306     Any register, memory or immediate integer operand is allowed,
37307     except for registers that are not general registers.
37308
37309'X'
37310     Any operand whatsoever is allowed.
37311
37312'0', '1', '2', ... '9'
37313     An operand that matches the specified operand number is allowed.
37314     If a digit is used together with letters within the same
37315     alternative, the digit should come last.
37316
37317     This number is allowed to be more than a single digit.  If multiple
37318     digits are encountered consecutively, they are interpreted as a
37319     single decimal integer.  There is scant chance for ambiguity, since
37320     to-date it has never been desirable that '10' be interpreted as
37321     matching either operand 1 _or_ operand 0.  Should this be desired,
37322     one can use multiple alternatives instead.
37323
37324     This is called a "matching constraint" and what it really means is
37325     that the assembler has only a single operand that fills two roles
37326     which 'asm' distinguishes.  For example, an add instruction uses
37327     two input operands and an output operand, but on most CISC machines
37328     an add instruction really has only two operands, one of them an
37329     input-output operand:
37330
37331          addl #35,r12
37332
37333     Matching constraints are used in these circumstances.  More
37334     precisely, the two operands that match must include one input-only
37335     operand and one output-only operand.  Moreover, the digit must be a
37336     smaller number than the number of the operand that uses it in the
37337     constraint.
37338
37339'p'
37340     An operand that is a valid memory address is allowed.  This is for
37341     "load address" and "push address" instructions.
37342
37343     'p' in the constraint must be accompanied by 'address_operand' as
37344     the predicate in the 'match_operand'.  This predicate interprets
37345     the mode specified in the 'match_operand' as the mode of the memory
37346     reference for which the address would be valid.
37347
37348OTHER-LETTERS
37349     Other letters can be defined in machine-dependent fashion to stand
37350     for particular classes of registers or other arbitrary operand
37351     types.  'd', 'a' and 'f' are defined on the 68000/68020 to stand
37352     for data, address and floating point registers.
37353
37354
37355File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
37356
373576.47.3.2 Multiple Alternative Constraints
37358.........................................
37359
37360Sometimes a single instruction has multiple alternative sets of possible
37361operands.  For example, on the 68000, a logical-or instruction can
37362combine register or an immediate value into memory, or it can combine
37363any kind of operand into a register; but it cannot combine one memory
37364location into another.
37365
37366 These constraints are represented as multiple alternatives.  An
37367alternative can be described by a series of letters for each operand.
37368The overall constraint for an operand is made from the letters for this
37369operand from the first alternative, a comma, the letters for this
37370operand from the second alternative, a comma, and so on until the last
37371alternative.  All operands for a single instruction must have the same
37372number of alternatives.
37373
37374 So the first alternative for the 68000's logical-or could be written as
37375'"+m" (output) : "ir" (input)'.  The second could be '"+r" (output):
37376"irm" (input)'.  However, the fact that two memory locations cannot be
37377used in a single instruction prevents simply using '"+rm" (output) :
37378"irm" (input)'.  Using multi-alternatives, this might be written as
37379'"+m,r" (output) : "ir,irm" (input)'.  This describes all the available
37380alternatives to the compiler, allowing it to choose the most efficient
37381one for the current conditions.
37382
37383 There is no way within the template to determine which alternative was
37384chosen.  However you may be able to wrap your 'asm' statements with
37385builtins such as '__builtin_constant_p' to achieve the desired results.
37386
37387
37388File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
37389
373906.47.3.3 Constraint Modifier Characters
37391.......................................
37392
37393Here are constraint modifier characters.
37394
37395'='
37396     Means that this operand is written to by this instruction: the
37397     previous value is discarded and replaced by new data.
37398
37399'+'
37400     Means that this operand is both read and written by the
37401     instruction.
37402
37403     When the compiler fixes up the operands to satisfy the constraints,
37404     it needs to know which operands are read by the instruction and
37405     which are written by it.  '=' identifies an operand which is only
37406     written; '+' identifies an operand that is both read and written;
37407     all other operands are assumed to only be read.
37408
37409     If you specify '=' or '+' in a constraint, you put it in the first
37410     character of the constraint string.
37411
37412'&'
37413     Means (in a particular alternative) that this operand is an
37414     "earlyclobber" operand, which is written before the instruction is
37415     finished using the input operands.  Therefore, this operand may not
37416     lie in a register that is read by the instruction or as part of any
37417     memory address.
37418
37419     '&' applies only to the alternative in which it is written.  In
37420     constraints with multiple alternatives, sometimes one alternative
37421     requires '&' while others do not.  See, for example, the 'movdf'
37422     insn of the 68000.
37423
37424     A operand which is read by the instruction can be tied to an
37425     earlyclobber operand if its only use as an input occurs before the
37426     early result is written.  Adding alternatives of this form often
37427     allows GCC to produce better code when only some of the read
37428     operands can be affected by the earlyclobber.  See, for example,
37429     the 'mulsi3' insn of the ARM.
37430
37431     Furthermore, if the "earlyclobber" operand is also a read/write
37432     operand, then that operand is written only after it's used.
37433
37434     '&' does not obviate the need to write '=' or '+'.  As
37435     "earlyclobber" operands are always written, a read-only
37436     "earlyclobber" operand is ill-formed and will be rejected by the
37437     compiler.
37438
37439'%'
37440     Declares the instruction to be commutative for this operand and the
37441     following operand.  This means that the compiler may interchange
37442     the two operands if that is the cheapest way to make all operands
37443     fit the constraints.  '%' applies to all alternatives and must
37444     appear as the first character in the constraint.  Only read-only
37445     operands can use '%'.
37446
37447     GCC can only handle one commutative pair in an asm; if you use
37448     more, the compiler may fail.  Note that you need not use the
37449     modifier if the two alternatives are strictly identical; this would
37450     only waste time in the reload pass.
37451
37452
37453File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
37454
374556.47.3.4 Constraints for Particular Machines
37456............................................
37457
37458Whenever possible, you should use the general-purpose constraint letters
37459in 'asm' arguments, since they will convey meaning more readily to
37460people reading your code.  Failing that, use the constraint letters that
37461usually have very similar meanings across architectures.  The most
37462commonly used constraints are 'm' and 'r' (for memory and
37463general-purpose registers respectively; *note Simple Constraints::), and
37464'I', usually the letter indicating the most common immediate-constant
37465format.
37466
37467 Each architecture defines additional constraints.  These constraints
37468are used by the compiler itself for instruction generation, as well as
37469for 'asm' statements; therefore, some of the constraints are not
37470particularly useful for 'asm'.  Here is a summary of some of the
37471machine-dependent constraints available on some particular machines; it
37472includes both constraints that are useful for 'asm' and constraints that
37473aren't.  The compiler source file mentioned in the table heading for
37474each architecture is the definitive reference for the meanings of that
37475architecture's constraints.
37476
37477_AArch64 family--'config/aarch64/constraints.md'_
37478     'k'
37479          The stack pointer register ('SP')
37480
37481     'w'
37482          Floating point register, Advanced SIMD vector register or SVE
37483          vector register
37484
37485     'Upl'
37486          One of the low eight SVE predicate registers ('P0' to 'P7')
37487
37488     'Upa'
37489          Any of the SVE predicate registers ('P0' to 'P15')
37490
37491     'I'
37492          Integer constant that is valid as an immediate operand in an
37493          'ADD' instruction
37494
37495     'J'
37496          Integer constant that is valid as an immediate operand in a
37497          'SUB' instruction (once negated)
37498
37499     'K'
37500          Integer constant that can be used with a 32-bit logical
37501          instruction
37502
37503     'L'
37504          Integer constant that can be used with a 64-bit logical
37505          instruction
37506
37507     'M'
37508          Integer constant that is valid as an immediate operand in a
37509          32-bit 'MOV' pseudo instruction.  The 'MOV' may be assembled
37510          to one of several different machine instructions depending on
37511          the value
37512
37513     'N'
37514          Integer constant that is valid as an immediate operand in a
37515          64-bit 'MOV' pseudo instruction
37516
37517     'S'
37518          An absolute symbolic address or a label reference
37519
37520     'Y'
37521          Floating point constant zero
37522
37523     'Z'
37524          Integer constant zero
37525
37526     'Ush'
37527          The high part (bits 12 and upwards) of the pc-relative address
37528          of a symbol within 4GB of the instruction
37529
37530     'Q'
37531          A memory address which uses a single base register with no
37532          offset
37533
37534     'Ump'
37535          A memory address suitable for a load/store pair instruction in
37536          SI, DI, SF and DF modes
37537
37538_AMD GCN --'config/gcn/constraints.md'_
37539     'I'
37540          Immediate integer in the range -16 to 64
37541
37542     'J'
37543          Immediate 16-bit signed integer
37544
37545     'Kf'
37546          Immediate constant -1
37547
37548     'L'
37549          Immediate 15-bit unsigned integer
37550
37551     'A'
37552          Immediate constant that can be inlined in an instruction
37553          encoding: integer -16..64, or float 0.0, +/-0.5, +/-1.0,
37554          +/-2.0, +/-4.0, 1.0/(2.0*PI)
37555
37556     'B'
37557          Immediate 32-bit signed integer that can be attached to an
37558          instruction encoding
37559
37560     'C'
37561          Immediate 32-bit integer in range -16..4294967295 (i.e.
37562          32-bit unsigned integer or 'A' constraint)
37563
37564     'DA'
37565          Immediate 64-bit constant that can be split into two 'A'
37566          constants
37567
37568     'DB'
37569          Immediate 64-bit constant that can be split into two 'B'
37570          constants
37571
37572     'U'
37573          Any 'unspec'
37574
37575     'Y'
37576          Any 'symbol_ref' or 'label_ref'
37577
37578     'v'
37579          VGPR register
37580
37581     'Sg'
37582          SGPR register
37583
37584     'SD'
37585          SGPR registers valid for instruction destinations, including
37586          VCC, M0 and EXEC
37587
37588     'SS'
37589          SGPR registers valid for instruction sources, including VCC,
37590          M0, EXEC and SCC
37591
37592     'Sm'
37593          SGPR registers valid as a source for scalar memory
37594          instructions (excludes M0 and EXEC)
37595
37596     'Sv'
37597          SGPR registers valid as a source or destination for vector
37598          instructions (excludes EXEC)
37599
37600     'ca'
37601          All condition registers: SCC, VCCZ, EXECZ
37602
37603     'cs'
37604          Scalar condition register: SCC
37605
37606     'cV'
37607          Vector condition register: VCC, VCC_LO, VCC_HI
37608
37609     'e'
37610          EXEC register (EXEC_LO and EXEC_HI)
37611
37612     'RB'
37613          Memory operand with address space suitable for 'buffer_*'
37614          instructions
37615
37616     'RF'
37617          Memory operand with address space suitable for 'flat_*'
37618          instructions
37619
37620     'RS'
37621          Memory operand with address space suitable for 's_*'
37622          instructions
37623
37624     'RL'
37625          Memory operand with address space suitable for 'ds_*' LDS
37626          instructions
37627
37628     'RG'
37629          Memory operand with address space suitable for 'ds_*' GDS
37630          instructions
37631
37632     'RD'
37633          Memory operand with address space suitable for any 'ds_*'
37634          instructions
37635
37636     'RM'
37637          Memory operand with address space suitable for 'global_*'
37638          instructions
37639
37640_ARC --'config/arc/constraints.md'_
37641     'q'
37642          Registers usable in ARCompact 16-bit instructions: 'r0'-'r3',
37643          'r12'-'r15'.  This constraint can only match when the '-mq'
37644          option is in effect.
37645
37646     'e'
37647          Registers usable as base-regs of memory addresses in ARCompact
37648          16-bit memory instructions: 'r0'-'r3', 'r12'-'r15', 'sp'.
37649          This constraint can only match when the '-mq' option is in
37650          effect.
37651     'D'
37652          ARC FPX (dpfp) 64-bit registers.  'D0', 'D1'.
37653
37654     'I'
37655          A signed 12-bit integer constant.
37656
37657     'Cal'
37658          constant for arithmetic/logical operations.  This might be any
37659          constant that can be put into a long immediate by the assmbler
37660          or linker without involving a PIC relocation.
37661
37662     'K'
37663          A 3-bit unsigned integer constant.
37664
37665     'L'
37666          A 6-bit unsigned integer constant.
37667
37668     'CnL'
37669          One's complement of a 6-bit unsigned integer constant.
37670
37671     'CmL'
37672          Two's complement of a 6-bit unsigned integer constant.
37673
37674     'M'
37675          A 5-bit unsigned integer constant.
37676
37677     'O'
37678          A 7-bit unsigned integer constant.
37679
37680     'P'
37681          A 8-bit unsigned integer constant.
37682
37683     'H'
37684          Any const_double value.
37685
37686_ARM family--'config/arm/constraints.md'_
37687
37688     'h'
37689          In Thumb state, the core registers 'r8'-'r15'.
37690
37691     'k'
37692          The stack pointer register.
37693
37694     'l'
37695          In Thumb State the core registers 'r0'-'r7'.  In ARM state
37696          this is an alias for the 'r' constraint.
37697
37698     't'
37699          VFP floating-point registers 's0'-'s31'.  Used for 32 bit
37700          values.
37701
37702     'w'
37703          VFP floating-point registers 'd0'-'d31' and the appropriate
37704          subset 'd0'-'d15' based on command line options.  Used for 64
37705          bit values only.  Not valid for Thumb1.
37706
37707     'y'
37708          The iWMMX co-processor registers.
37709
37710     'z'
37711          The iWMMX GR registers.
37712
37713     'G'
37714          The floating-point constant 0.0
37715
37716     'I'
37717          Integer that is valid as an immediate operand in a data
37718          processing instruction.  That is, an integer in the range 0 to
37719          255 rotated by a multiple of 2
37720
37721     'J'
37722          Integer in the range -4095 to 4095
37723
37724     'K'
37725          Integer that satisfies constraint 'I' when inverted (ones
37726          complement)
37727
37728     'L'
37729          Integer that satisfies constraint 'I' when negated (twos
37730          complement)
37731
37732     'M'
37733          Integer in the range 0 to 32
37734
37735     'Q'
37736          A memory reference where the exact address is in a single
37737          register (''m'' is preferable for 'asm' statements)
37738
37739     'R'
37740          An item in the constant pool
37741
37742     'S'
37743          A symbol in the text segment of the current file
37744
37745     'Uv'
37746          A memory reference suitable for VFP load/store insns
37747          (reg+constant offset)
37748
37749     'Uy'
37750          A memory reference suitable for iWMMXt load/store
37751          instructions.
37752
37753     'Uq'
37754          A memory reference suitable for the ARMv4 ldrsb instruction.
37755
37756_AVR family--'config/avr/constraints.md'_
37757     'l'
37758          Registers from r0 to r15
37759
37760     'a'
37761          Registers from r16 to r23
37762
37763     'd'
37764          Registers from r16 to r31
37765
37766     'w'
37767          Registers from r24 to r31.  These registers can be used in
37768          'adiw' command
37769
37770     'e'
37771          Pointer register (r26-r31)
37772
37773     'b'
37774          Base pointer register (r28-r31)
37775
37776     'q'
37777          Stack pointer register (SPH:SPL)
37778
37779     't'
37780          Temporary register r0
37781
37782     'x'
37783          Register pair X (r27:r26)
37784
37785     'y'
37786          Register pair Y (r29:r28)
37787
37788     'z'
37789          Register pair Z (r31:r30)
37790
37791     'I'
37792          Constant greater than -1, less than 64
37793
37794     'J'
37795          Constant greater than -64, less than 1
37796
37797     'K'
37798          Constant integer 2
37799
37800     'L'
37801          Constant integer 0
37802
37803     'M'
37804          Constant that fits in 8 bits
37805
37806     'N'
37807          Constant integer -1
37808
37809     'O'
37810          Constant integer 8, 16, or 24
37811
37812     'P'
37813          Constant integer 1
37814
37815     'G'
37816          A floating point constant 0.0
37817
37818     'Q'
37819          A memory address based on Y or Z pointer with displacement.
37820
37821_Blackfin family--'config/bfin/constraints.md'_
37822     'a'
37823          P register
37824
37825     'd'
37826          D register
37827
37828     'z'
37829          A call clobbered P register.
37830
37831     'qN'
37832          A single register.  If N is in the range 0 to 7, the
37833          corresponding D register.  If it is 'A', then the register P0.
37834
37835     'D'
37836          Even-numbered D register
37837
37838     'W'
37839          Odd-numbered D register
37840
37841     'e'
37842          Accumulator register.
37843
37844     'A'
37845          Even-numbered accumulator register.
37846
37847     'B'
37848          Odd-numbered accumulator register.
37849
37850     'b'
37851          I register
37852
37853     'v'
37854          B register
37855
37856     'f'
37857          M register
37858
37859     'c'
37860          Registers used for circular buffering, i.e. I, B, or L
37861          registers.
37862
37863     'C'
37864          The CC register.
37865
37866     't'
37867          LT0 or LT1.
37868
37869     'k'
37870          LC0 or LC1.
37871
37872     'u'
37873          LB0 or LB1.
37874
37875     'x'
37876          Any D, P, B, M, I or L register.
37877
37878     'y'
37879          Additional registers typically used only in prologues and
37880          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
37881          USP.
37882
37883     'w'
37884          Any register except accumulators or CC.
37885
37886     'Ksh'
37887          Signed 16 bit integer (in the range -32768 to 32767)
37888
37889     'Kuh'
37890          Unsigned 16 bit integer (in the range 0 to 65535)
37891
37892     'Ks7'
37893          Signed 7 bit integer (in the range -64 to 63)
37894
37895     'Ku7'
37896          Unsigned 7 bit integer (in the range 0 to 127)
37897
37898     'Ku5'
37899          Unsigned 5 bit integer (in the range 0 to 31)
37900
37901     'Ks4'
37902          Signed 4 bit integer (in the range -8 to 7)
37903
37904     'Ks3'
37905          Signed 3 bit integer (in the range -3 to 4)
37906
37907     'Ku3'
37908          Unsigned 3 bit integer (in the range 0 to 7)
37909
37910     'PN'
37911          Constant N, where N is a single-digit constant in the range 0
37912          to 4.
37913
37914     'PA'
37915          An integer equal to one of the MACFLAG_XXX constants that is
37916          suitable for use with either accumulator.
37917
37918     'PB'
37919          An integer equal to one of the MACFLAG_XXX constants that is
37920          suitable for use only with accumulator A1.
37921
37922     'M1'
37923          Constant 255.
37924
37925     'M2'
37926          Constant 65535.
37927
37928     'J'
37929          An integer constant with exactly a single bit set.
37930
37931     'L'
37932          An integer constant with all bits set except exactly one.
37933
37934     'H'
37935
37936     'Q'
37937          Any SYMBOL_REF.
37938
37939_CR16 Architecture--'config/cr16/cr16.h'_
37940
37941     'b'
37942          Registers from r0 to r14 (registers without stack pointer)
37943
37944     't'
37945          Register from r0 to r11 (all 16-bit registers)
37946
37947     'p'
37948          Register from r12 to r15 (all 32-bit registers)
37949
37950     'I'
37951          Signed constant that fits in 4 bits
37952
37953     'J'
37954          Signed constant that fits in 5 bits
37955
37956     'K'
37957          Signed constant that fits in 6 bits
37958
37959     'L'
37960          Unsigned constant that fits in 4 bits
37961
37962     'M'
37963          Signed constant that fits in 32 bits
37964
37965     'N'
37966          Check for 64 bits wide constants for add/sub instructions
37967
37968     'G'
37969          Floating point constant that is legal for store immediate
37970
37971_C-SKY--'config/csky/constraints.md'_
37972
37973     'a'
37974          The mini registers r0 - r7.
37975
37976     'b'
37977          The low registers r0 - r15.
37978
37979     'c'
37980          C register.
37981
37982     'y'
37983          HI and LO registers.
37984
37985     'l'
37986          LO register.
37987
37988     'h'
37989          HI register.
37990
37991     'v'
37992          Vector registers.
37993
37994     'z'
37995          Stack pointer register (SP).
37996
37997_Epiphany--'config/epiphany/constraints.md'_
37998     'U16'
37999          An unsigned 16-bit constant.
38000
38001     'K'
38002          An unsigned 5-bit constant.
38003
38004     'L'
38005          A signed 11-bit constant.
38006
38007     'Cm1'
38008          A signed 11-bit constant added to -1.  Can only match when the
38009          '-m1reg-REG' option is active.
38010
38011     'Cl1'
38012          Left-shift of -1, i.e., a bit mask with a block of leading
38013          ones, the rest being a block of trailing zeroes.  Can only
38014          match when the '-m1reg-REG' option is active.
38015
38016     'Cr1'
38017          Right-shift of -1, i.e., a bit mask with a trailing block of
38018          ones, the rest being zeroes.  Or to put it another way, one
38019          less than a power of two.  Can only match when the
38020          '-m1reg-REG' option is active.
38021
38022     'Cal'
38023          Constant for arithmetic/logical operations.  This is like 'i',
38024          except that for position independent code, no symbols /
38025          expressions needing relocations are allowed.
38026
38027     'Csy'
38028          Symbolic constant for call/jump instruction.
38029
38030     'Rcs'
38031          The register class usable in short insns.  This is a register
38032          class constraint, and can thus drive register allocation.
38033          This constraint won't match unless '-mprefer-short-insn-regs'
38034          is in effect.
38035
38036     'Rsc'
38037          The the register class of registers that can be used to hold a
38038          sibcall call address.  I.e., a caller-saved register.
38039
38040     'Rct'
38041          Core control register class.
38042
38043     'Rgs'
38044          The register group usable in short insns.  This constraint
38045          does not use a register class, so that it only passively
38046          matches suitable registers, and doesn't drive register
38047          allocation.
38048
38049     'Rra'
38050          Matches the return address if it can be replaced with the link
38051          register.
38052
38053     'Rcc'
38054          Matches the integer condition code register.
38055
38056     'Sra'
38057          Matches the return address if it is in a stack slot.
38058
38059     'Cfm'
38060          Matches control register values to switch fp mode, which are
38061          encapsulated in 'UNSPEC_FP_MODE'.
38062
38063_FRV--'config/frv/frv.h'_
38064     'a'
38065          Register in the class 'ACC_REGS' ('acc0' to 'acc7').
38066
38067     'b'
38068          Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7').
38069
38070     'c'
38071          Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0'
38072          to 'icc3').
38073
38074     'd'
38075          Register in the class 'GPR_REGS' ('gr0' to 'gr63').
38076
38077     'e'
38078          Register in the class 'EVEN_REGS' ('gr0' to 'gr63').  Odd
38079          registers are excluded not in the class but through the use of
38080          a machine mode larger than 4 bytes.
38081
38082     'f'
38083          Register in the class 'FPR_REGS' ('fr0' to 'fr63').
38084
38085     'h'
38086          Register in the class 'FEVEN_REGS' ('fr0' to 'fr63').  Odd
38087          registers are excluded not in the class but through the use of
38088          a machine mode larger than 4 bytes.
38089
38090     'l'
38091          Register in the class 'LR_REG' (the 'lr' register).
38092
38093     'q'
38094          Register in the class 'QUAD_REGS' ('gr2' to 'gr63').  Register
38095          numbers not divisible by 4 are excluded not in the class but
38096          through the use of a machine mode larger than 8 bytes.
38097
38098     't'
38099          Register in the class 'ICC_REGS' ('icc0' to 'icc3').
38100
38101     'u'
38102          Register in the class 'FCC_REGS' ('fcc0' to 'fcc3').
38103
38104     'v'
38105          Register in the class 'ICR_REGS' ('cc4' to 'cc7').
38106
38107     'w'
38108          Register in the class 'FCR_REGS' ('cc0' to 'cc3').
38109
38110     'x'
38111          Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63').
38112          Register numbers not divisible by 4 are excluded not in the
38113          class but through the use of a machine mode larger than 8
38114          bytes.
38115
38116     'z'
38117          Register in the class 'SPR_REGS' ('lcr' and 'lr').
38118
38119     'A'
38120          Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7').
38121
38122     'B'
38123          Register in the class 'ACCG_REGS' ('accg0' to 'accg7').
38124
38125     'C'
38126          Register in the class 'CR_REGS' ('cc0' to 'cc7').
38127
38128     'G'
38129          Floating point constant zero
38130
38131     'I'
38132          6-bit signed integer constant
38133
38134     'J'
38135          10-bit signed integer constant
38136
38137     'L'
38138          16-bit signed integer constant
38139
38140     'M'
38141          16-bit unsigned integer constant
38142
38143     'N'
38144          12-bit signed integer constant that is negative--i.e. in the
38145          range of -2048 to -1
38146
38147     'O'
38148          Constant zero
38149
38150     'P'
38151          12-bit signed integer constant that is greater than zero--i.e.
38152          in the range of 1 to 2047.
38153
38154_FT32--'config/ft32/constraints.md'_
38155     'A'
38156          An absolute address
38157
38158     'B'
38159          An offset address
38160
38161     'W'
38162          A register indirect memory operand
38163
38164     'e'
38165          An offset address.
38166
38167     'f'
38168          An offset address.
38169
38170     'O'
38171          The constant zero or one
38172
38173     'I'
38174          A 16-bit signed constant (-32768 ... 32767)
38175
38176     'w'
38177          A bitfield mask suitable for bext or bins
38178
38179     'x'
38180          An inverted bitfield mask suitable for bext or bins
38181
38182     'L'
38183          A 16-bit unsigned constant, multiple of 4 (0 ... 65532)
38184
38185     'S'
38186          A 20-bit signed constant (-524288 ... 524287)
38187
38188     'b'
38189          A constant for a bitfield width (1 ... 16)
38190
38191     'KA'
38192          A 10-bit signed constant (-512 ... 511)
38193
38194_Hewlett-Packard PA-RISC--'config/pa/pa.h'_
38195     'a'
38196          General register 1
38197
38198     'f'
38199          Floating point register
38200
38201     'q'
38202          Shift amount register
38203
38204     'x'
38205          Floating point register (deprecated)
38206
38207     'y'
38208          Upper floating point register (32-bit), floating point
38209          register (64-bit)
38210
38211     'Z'
38212          Any register
38213
38214     'I'
38215          Signed 11-bit integer constant
38216
38217     'J'
38218          Signed 14-bit integer constant
38219
38220     'K'
38221          Integer constant that can be deposited with a 'zdepi'
38222          instruction
38223
38224     'L'
38225          Signed 5-bit integer constant
38226
38227     'M'
38228          Integer constant 0
38229
38230     'N'
38231          Integer constant that can be loaded with a 'ldil' instruction
38232
38233     'O'
38234          Integer constant whose value plus one is a power of 2
38235
38236     'P'
38237          Integer constant that can be used for 'and' operations in
38238          'depi' and 'extru' instructions
38239
38240     'S'
38241          Integer constant 31
38242
38243     'U'
38244          Integer constant 63
38245
38246     'G'
38247          Floating-point constant 0.0
38248
38249     'A'
38250          A 'lo_sum' data-linkage-table memory operand
38251
38252     'Q'
38253          A memory operand that can be used as the destination operand
38254          of an integer store instruction
38255
38256     'R'
38257          A scaled or unscaled indexed memory operand
38258
38259     'T'
38260          A memory operand for floating-point loads and stores
38261
38262     'W'
38263          A register indirect memory operand
38264
38265_Intel IA-64--'config/ia64/ia64.h'_
38266     'a'
38267          General register 'r0' to 'r3' for 'addl' instruction
38268
38269     'b'
38270          Branch register
38271
38272     'c'
38273          Predicate register ('c' as in "conditional")
38274
38275     'd'
38276          Application register residing in M-unit
38277
38278     'e'
38279          Application register residing in I-unit
38280
38281     'f'
38282          Floating-point register
38283
38284     'm'
38285          Memory operand.  If used together with '<' or '>', the operand
38286          can have postincrement and postdecrement which require
38287          printing with '%Pn' on IA-64.
38288
38289     'G'
38290          Floating-point constant 0.0 or 1.0
38291
38292     'I'
38293          14-bit signed integer constant
38294
38295     'J'
38296          22-bit signed integer constant
38297
38298     'K'
38299          8-bit signed integer constant for logical instructions
38300
38301     'L'
38302          8-bit adjusted signed integer constant for compare pseudo-ops
38303
38304     'M'
38305          6-bit unsigned integer constant for shift counts
38306
38307     'N'
38308          9-bit signed integer constant for load and store
38309          postincrements
38310
38311     'O'
38312          The constant zero
38313
38314     'P'
38315          0 or -1 for 'dep' instruction
38316
38317     'Q'
38318          Non-volatile memory for floating-point loads and stores
38319
38320     'R'
38321          Integer constant in the range 1 to 4 for 'shladd' instruction
38322
38323     'S'
38324          Memory operand except postincrement and postdecrement.  This
38325          is now roughly the same as 'm' when not used together with '<'
38326          or '>'.
38327
38328_M32C--'config/m32c/m32c.c'_
38329     'Rsp'
38330     'Rfb'
38331     'Rsb'
38332          '$sp', '$fb', '$sb'.
38333
38334     'Rcr'
38335          Any control register, when they're 16 bits wide (nothing if
38336          control registers are 24 bits wide)
38337
38338     'Rcl'
38339          Any control register, when they're 24 bits wide.
38340
38341     'R0w'
38342     'R1w'
38343     'R2w'
38344     'R3w'
38345          $r0, $r1, $r2, $r3.
38346
38347     'R02'
38348          $r0 or $r2, or $r2r0 for 32 bit values.
38349
38350     'R13'
38351          $r1 or $r3, or $r3r1 for 32 bit values.
38352
38353     'Rdi'
38354          A register that can hold a 64 bit value.
38355
38356     'Rhl'
38357          $r0 or $r1 (registers with addressable high/low bytes)
38358
38359     'R23'
38360          $r2 or $r3
38361
38362     'Raa'
38363          Address registers
38364
38365     'Raw'
38366          Address registers when they're 16 bits wide.
38367
38368     'Ral'
38369          Address registers when they're 24 bits wide.
38370
38371     'Rqi'
38372          Registers that can hold QI values.
38373
38374     'Rad'
38375          Registers that can be used with displacements ($a0, $a1, $sb).
38376
38377     'Rsi'
38378          Registers that can hold 32 bit values.
38379
38380     'Rhi'
38381          Registers that can hold 16 bit values.
38382
38383     'Rhc'
38384          Registers chat can hold 16 bit values, including all control
38385          registers.
38386
38387     'Rra'
38388          $r0 through R1, plus $a0 and $a1.
38389
38390     'Rfl'
38391          The flags register.
38392
38393     'Rmm'
38394          The memory-based pseudo-registers $mem0 through $mem15.
38395
38396     'Rpi'
38397          Registers that can hold pointers (16 bit registers for r8c,
38398          m16c; 24 bit registers for m32cm, m32c).
38399
38400     'Rpa'
38401          Matches multiple registers in a PARALLEL to form a larger
38402          register.  Used to match function return values.
38403
38404     'Is3'
38405          -8 ... 7
38406
38407     'IS1'
38408          -128 ... 127
38409
38410     'IS2'
38411          -32768 ... 32767
38412
38413     'IU2'
38414          0 ... 65535
38415
38416     'In4'
38417          -8 ... -1 or 1 ... 8
38418
38419     'In5'
38420          -16 ... -1 or 1 ... 16
38421
38422     'In6'
38423          -32 ... -1 or 1 ... 32
38424
38425     'IM2'
38426          -65536 ... -1
38427
38428     'Ilb'
38429          An 8 bit value with exactly one bit set.
38430
38431     'Ilw'
38432          A 16 bit value with exactly one bit set.
38433
38434     'Sd'
38435          The common src/dest memory addressing modes.
38436
38437     'Sa'
38438          Memory addressed using $a0 or $a1.
38439
38440     'Si'
38441          Memory addressed with immediate addresses.
38442
38443     'Ss'
38444          Memory addressed using the stack pointer ($sp).
38445
38446     'Sf'
38447          Memory addressed using the frame base register ($fb).
38448
38449     'Ss'
38450          Memory addressed using the small base register ($sb).
38451
38452     'S1'
38453          $r1h
38454
38455_MicroBlaze--'config/microblaze/constraints.md'_
38456     'd'
38457          A general register ('r0' to 'r31').
38458
38459     'z'
38460          A status register ('rmsr', '$fcc1' to '$fcc7').
38461
38462_MIPS--'config/mips/constraints.md'_
38463     'd'
38464          A general-purpose register.  This is equivalent to 'r' unless
38465          generating MIPS16 code, in which case the MIPS16 register set
38466          is used.
38467
38468     'f'
38469          A floating-point register (if available).
38470
38471     'h'
38472          Formerly the 'hi' register.  This constraint is no longer
38473          supported.
38474
38475     'l'
38476          The 'lo' register.  Use this register to store values that are
38477          no bigger than a word.
38478
38479     'x'
38480          The concatenated 'hi' and 'lo' registers.  Use this register
38481          to store doubleword values.
38482
38483     'c'
38484          A register suitable for use in an indirect jump.  This will
38485          always be '$25' for '-mabicalls'.
38486
38487     'v'
38488          Register '$3'.  Do not use this constraint in new code; it is
38489          retained only for compatibility with glibc.
38490
38491     'y'
38492          Equivalent to 'r'; retained for backwards compatibility.
38493
38494     'z'
38495          A floating-point condition code register.
38496
38497     'I'
38498          A signed 16-bit constant (for arithmetic instructions).
38499
38500     'J'
38501          Integer zero.
38502
38503     'K'
38504          An unsigned 16-bit constant (for logic instructions).
38505
38506     'L'
38507          A signed 32-bit constant in which the lower 16 bits are zero.
38508          Such constants can be loaded using 'lui'.
38509
38510     'M'
38511          A constant that cannot be loaded using 'lui', 'addiu' or
38512          'ori'.
38513
38514     'N'
38515          A constant in the range -65535 to -1 (inclusive).
38516
38517     'O'
38518          A signed 15-bit constant.
38519
38520     'P'
38521          A constant in the range 1 to 65535 (inclusive).
38522
38523     'G'
38524          Floating-point zero.
38525
38526     'R'
38527          An address that can be used in a non-macro load or store.
38528
38529     'ZC'
38530          A memory operand whose address is formed by a base register
38531          and offset that is suitable for use in instructions with the
38532          same addressing mode as 'll' and 'sc'.
38533
38534     'ZD'
38535          An address suitable for a 'prefetch' instruction, or for any
38536          other instruction with the same addressing mode as 'prefetch'.
38537
38538_Motorola 680x0--'config/m68k/constraints.md'_
38539     'a'
38540          Address register
38541
38542     'd'
38543          Data register
38544
38545     'f'
38546          68881 floating-point register, if available
38547
38548     'I'
38549          Integer in the range 1 to 8
38550
38551     'J'
38552          16-bit signed number
38553
38554     'K'
38555          Signed number whose magnitude is greater than 0x80
38556
38557     'L'
38558          Integer in the range -8 to -1
38559
38560     'M'
38561          Signed number whose magnitude is greater than 0x100
38562
38563     'N'
38564          Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
38565
38566     'O'
38567          16 (for rotate using swap)
38568
38569     'P'
38570          Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
38571
38572     'R'
38573          Numbers that mov3q can handle
38574
38575     'G'
38576          Floating point constant that is not a 68881 constant
38577
38578     'S'
38579          Operands that satisfy 'm' when -mpcrel is in effect
38580
38581     'T'
38582          Operands that satisfy 's' when -mpcrel is not in effect
38583
38584     'Q'
38585          Address register indirect addressing mode
38586
38587     'U'
38588          Register offset addressing
38589
38590     'W'
38591          const_call_operand
38592
38593     'Cs'
38594          symbol_ref or const
38595
38596     'Ci'
38597          const_int
38598
38599     'C0'
38600          const_int 0
38601
38602     'Cj'
38603          Range of signed numbers that don't fit in 16 bits
38604
38605     'Cmvq'
38606          Integers valid for mvq
38607
38608     'Capsw'
38609          Integers valid for a moveq followed by a swap
38610
38611     'Cmvz'
38612          Integers valid for mvz
38613
38614     'Cmvs'
38615          Integers valid for mvs
38616
38617     'Ap'
38618          push_operand
38619
38620     'Ac'
38621          Non-register operands allowed in clr
38622
38623_Moxie--'config/moxie/constraints.md'_
38624     'A'
38625          An absolute address
38626
38627     'B'
38628          An offset address
38629
38630     'W'
38631          A register indirect memory operand
38632
38633     'I'
38634          A constant in the range of 0 to 255.
38635
38636     'N'
38637          A constant in the range of 0 to -255.
38638
38639_MSP430-'config/msp430/constraints.md'_
38640
38641     'R12'
38642          Register R12.
38643
38644     'R13'
38645          Register R13.
38646
38647     'K'
38648          Integer constant 1.
38649
38650     'L'
38651          Integer constant -1^20..1^19.
38652
38653     'M'
38654          Integer constant 1-4.
38655
38656     'Ya'
38657          Memory references which do not require an extended MOVX
38658          instruction.
38659
38660     'Yl'
38661          Memory reference, labels only.
38662
38663     'Ys'
38664          Memory reference, stack only.
38665
38666_NDS32--'config/nds32/constraints.md'_
38667     'w'
38668          LOW register class $r0 to $r7 constraint for V3/V3M ISA.
38669     'l'
38670          LOW register class $r0 to $r7.
38671     'd'
38672          MIDDLE register class $r0 to $r11, $r16 to $r19.
38673     'h'
38674          HIGH register class $r12 to $r14, $r20 to $r31.
38675     't'
38676          Temporary assist register $ta (i.e. $r15).
38677     'k'
38678          Stack register $sp.
38679     'Iu03'
38680          Unsigned immediate 3-bit value.
38681     'In03'
38682          Negative immediate 3-bit value in the range of -7-0.
38683     'Iu04'
38684          Unsigned immediate 4-bit value.
38685     'Is05'
38686          Signed immediate 5-bit value.
38687     'Iu05'
38688          Unsigned immediate 5-bit value.
38689     'In05'
38690          Negative immediate 5-bit value in the range of -31-0.
38691     'Ip05'
38692          Unsigned immediate 5-bit value for movpi45 instruction with
38693          range 16-47.
38694     'Iu06'
38695          Unsigned immediate 6-bit value constraint for addri36.sp
38696          instruction.
38697     'Iu08'
38698          Unsigned immediate 8-bit value.
38699     'Iu09'
38700          Unsigned immediate 9-bit value.
38701     'Is10'
38702          Signed immediate 10-bit value.
38703     'Is11'
38704          Signed immediate 11-bit value.
38705     'Is15'
38706          Signed immediate 15-bit value.
38707     'Iu15'
38708          Unsigned immediate 15-bit value.
38709     'Ic15'
38710          A constant which is not in the range of imm15u but ok for bclr
38711          instruction.
38712     'Ie15'
38713          A constant which is not in the range of imm15u but ok for bset
38714          instruction.
38715     'It15'
38716          A constant which is not in the range of imm15u but ok for btgl
38717          instruction.
38718     'Ii15'
38719          A constant whose compliment value is in the range of imm15u
38720          and ok for bitci instruction.
38721     'Is16'
38722          Signed immediate 16-bit value.
38723     'Is17'
38724          Signed immediate 17-bit value.
38725     'Is19'
38726          Signed immediate 19-bit value.
38727     'Is20'
38728          Signed immediate 20-bit value.
38729     'Ihig'
38730          The immediate value that can be simply set high 20-bit.
38731     'Izeb'
38732          The immediate value 0xff.
38733     'Izeh'
38734          The immediate value 0xffff.
38735     'Ixls'
38736          The immediate value 0x01.
38737     'Ix11'
38738          The immediate value 0x7ff.
38739     'Ibms'
38740          The immediate value with power of 2.
38741     'Ifex'
38742          The immediate value with power of 2 minus 1.
38743     'U33'
38744          Memory constraint for 333 format.
38745     'U45'
38746          Memory constraint for 45 format.
38747     'U37'
38748          Memory constraint for 37 format.
38749
38750_Nios II family--'config/nios2/constraints.md'_
38751
38752     'I'
38753          Integer that is valid as an immediate operand in an
38754          instruction taking a signed 16-bit number.  Range -32768 to
38755          32767.
38756
38757     'J'
38758          Integer that is valid as an immediate operand in an
38759          instruction taking an unsigned 16-bit number.  Range 0 to
38760          65535.
38761
38762     'K'
38763          Integer that is valid as an immediate operand in an
38764          instruction taking only the upper 16-bits of a 32-bit number.
38765          Range 32-bit numbers with the lower 16-bits being 0.
38766
38767     'L'
38768          Integer that is valid as an immediate operand for a shift
38769          instruction.  Range 0 to 31.
38770
38771     'M'
38772          Integer that is valid as an immediate operand for only the
38773          value 0.  Can be used in conjunction with the format modifier
38774          'z' to use 'r0' instead of '0' in the assembly output.
38775
38776     'N'
38777          Integer that is valid as an immediate operand for a custom
38778          instruction opcode.  Range 0 to 255.
38779
38780     'P'
38781          An immediate operand for R2 andchi/andci instructions.
38782
38783     'S'
38784          Matches immediates which are addresses in the small data
38785          section and therefore can be added to 'gp' as a 16-bit
38786          immediate to re-create their 32-bit value.
38787
38788     'U'
38789          Matches constants suitable as an operand for the rdprs and
38790          cache instructions.
38791
38792     'v'
38793          A memory operand suitable for Nios II R2 load/store exclusive
38794          instructions.
38795
38796     'w'
38797          A memory operand suitable for load/store IO and cache
38798          instructions.
38799
38800_OpenRISC--'config/or1k/constraints.md'_
38801     'I'
38802          Integer that is valid as an immediate operand in an
38803          instruction taking a signed 16-bit number.  Range -32768 to
38804          32767.
38805
38806     'K'
38807          Integer that is valid as an immediate operand in an
38808          instruction taking an unsigned 16-bit number.  Range 0 to
38809          65535.
38810
38811     'M'
38812          Signed 16-bit constant shifted left 16 bits.  (Used with
38813          'l.movhi')
38814
38815     'O'
38816          Zero
38817
38818_PDP-11--'config/pdp11/constraints.md'_
38819     'a'
38820          Floating point registers AC0 through AC3.  These can be loaded
38821          from/to memory with a single instruction.
38822
38823     'd'
38824          Odd numbered general registers (R1, R3, R5).  These are used
38825          for 16-bit multiply operations.
38826
38827     'D'
38828          A memory reference that is encoded within the opcode, but not
38829          auto-increment or auto-decrement.
38830
38831     'f'
38832          Any of the floating point registers (AC0 through AC5).
38833
38834     'G'
38835          Floating point constant 0.
38836
38837     'h'
38838          Floating point registers AC4 and AC5.  These cannot be loaded
38839          from/to memory with a single instruction.
38840
38841     'I'
38842          An integer constant that fits in 16 bits.
38843
38844     'J'
38845          An integer constant whose low order 16 bits are zero.
38846
38847     'K'
38848          An integer constant that does not meet the constraints for
38849          codes 'I' or 'J'.
38850
38851     'L'
38852          The integer constant 1.
38853
38854     'M'
38855          The integer constant -1.
38856
38857     'N'
38858          The integer constant 0.
38859
38860     'O'
38861          Integer constants 0 through 3; shifts by these amounts are
38862          handled as multiple single-bit shifts rather than a single
38863          variable-length shift.
38864
38865     'Q'
38866          A memory reference which requires an additional word (address
38867          or offset) after the opcode.
38868
38869     'R'
38870          A memory reference that is encoded within the opcode.
38871
38872_PowerPC and IBM RS6000--'config/rs6000/constraints.md'_
38873     'b'
38874          Address base register
38875
38876     'd'
38877          Floating point register (containing 64-bit value)
38878
38879     'f'
38880          Floating point register (containing 32-bit value)
38881
38882     'v'
38883          Altivec vector register
38884
38885     'wa'
38886          Any VSX register if the '-mvsx' option was used or NO_REGS.
38887
38888          When using any of the register constraints ('wa', 'wd', 'wf',
38889          'wg', 'wh', 'wi', 'wj', 'wk', 'wl', 'wm', 'wo', 'wp', 'wq',
38890          'ws', 'wt', 'wu', 'wv', 'ww', or 'wy') that take VSX
38891          registers, you must use '%x<n>' in the template so that the
38892          correct register is used.  Otherwise the register number
38893          output in the assembly file will be incorrect if an Altivec
38894          register is an operand of a VSX instruction that expects VSX
38895          register numbering.
38896
38897               asm ("xvadddp %x0,%x1,%x2"
38898                    : "=wa" (v1)
38899                    : "wa" (v2), "wa" (v3));
38900
38901          is correct, but:
38902
38903               asm ("xvadddp %0,%1,%2"
38904                    : "=wa" (v1)
38905                    : "wa" (v2), "wa" (v3));
38906
38907          is not correct.
38908
38909          If an instruction only takes Altivec registers, you do not
38910          want to use '%x<n>'.
38911
38912               asm ("xsaddqp %0,%1,%2"
38913                    : "=v" (v1)
38914                    : "v" (v2), "v" (v3));
38915
38916          is correct because the 'xsaddqp' instruction only takes
38917          Altivec registers, while:
38918
38919               asm ("xsaddqp %x0,%x1,%x2"
38920                    : "=v" (v1)
38921                    : "v" (v2), "v" (v3));
38922
38923          is incorrect.
38924
38925     'wb'
38926          Altivec register if '-mcpu=power9' is used or NO_REGS.
38927
38928     'wd'
38929          VSX vector register to hold vector double data or NO_REGS.
38930
38931     'we'
38932          VSX register if the '-mcpu=power9' and '-m64' options were
38933          used or NO_REGS.
38934
38935     'wf'
38936          VSX vector register to hold vector float data or NO_REGS.
38937
38938     'wg'
38939          If '-mmfpgpr' was used, a floating point register or NO_REGS.
38940
38941     'wh'
38942          Floating point register if direct moves are available, or
38943          NO_REGS.
38944
38945     'wi'
38946          FP or VSX register to hold 64-bit integers for VSX insns or
38947          NO_REGS.
38948
38949     'wj'
38950          FP or VSX register to hold 64-bit integers for direct moves or
38951          NO_REGS.
38952
38953     'wk'
38954          FP or VSX register to hold 64-bit doubles for direct moves or
38955          NO_REGS.
38956
38957     'wl'
38958          Floating point register if the LFIWAX instruction is enabled
38959          or NO_REGS.
38960
38961     'wm'
38962          VSX register if direct move instructions are enabled, or
38963          NO_REGS.
38964
38965     'wn'
38966          No register (NO_REGS).
38967
38968     'wo'
38969          VSX register to use for ISA 3.0 vector instructions, or
38970          NO_REGS.
38971
38972     'wp'
38973          VSX register to use for IEEE 128-bit floating point TFmode, or
38974          NO_REGS.
38975
38976     'wq'
38977          VSX register to use for IEEE 128-bit floating point, or
38978          NO_REGS.
38979
38980     'wr'
38981          General purpose register if 64-bit instructions are enabled or
38982          NO_REGS.
38983
38984     'ws'
38985          VSX vector register to hold scalar double values or NO_REGS.
38986
38987     'wt'
38988          VSX vector register to hold 128 bit integer or NO_REGS.
38989
38990     'wu'
38991          Altivec register to use for float/32-bit int loads/stores or
38992          NO_REGS.
38993
38994     'wv'
38995          Altivec register to use for double loads/stores or NO_REGS.
38996
38997     'ww'
38998          FP or VSX register to perform float operations under '-mvsx'
38999          or NO_REGS.
39000
39001     'wx'
39002          Floating point register if the STFIWX instruction is enabled
39003          or NO_REGS.
39004
39005     'wy'
39006          FP or VSX register to perform ISA 2.07 float ops or NO_REGS.
39007
39008     'wz'
39009          Floating point register if the LFIWZX instruction is enabled
39010          or NO_REGS.
39011
39012     'wA'
39013          Address base register if 64-bit instructions are enabled or
39014          NO_REGS.
39015
39016     'wB'
39017          Signed 5-bit constant integer that can be loaded into an
39018          altivec register.
39019
39020     'wD'
39021          Int constant that is the element number of the 64-bit scalar
39022          in a vector.
39023
39024     'wE'
39025          Vector constant that can be loaded with the XXSPLTIB
39026          instruction.
39027
39028     'wF'
39029          Memory operand suitable for power8 GPR load fusion
39030
39031     'wG'
39032          Memory operand suitable for TOC fusion memory references.
39033
39034     'wH'
39035          Altivec register if '-mvsx-small-integer'.
39036
39037     'wI'
39038          Floating point register if '-mvsx-small-integer'.
39039
39040     'wJ'
39041          FP register if '-mvsx-small-integer' and '-mpower9-vector'.
39042
39043     'wK'
39044          Altivec register if '-mvsx-small-integer' and
39045          '-mpower9-vector'.
39046
39047     'wL'
39048          Int constant that is the element number that the MFVSRLD
39049          instruction.  targets.
39050
39051     'wM'
39052          Match vector constant with all 1's if the XXLORC instruction
39053          is available.
39054
39055     'wO'
39056          A memory operand suitable for the ISA 3.0 vector d-form
39057          instructions.
39058
39059     'wQ'
39060          A memory address that will work with the 'lq' and 'stq'
39061          instructions.
39062
39063     'wS'
39064          Vector constant that can be loaded with XXSPLTIB & sign
39065          extension.
39066
39067     'h'
39068          'VRSAVE', 'CTR', or 'LINK' register
39069
39070     'c'
39071          'CTR' register
39072
39073     'l'
39074          'LINK' register
39075
39076     'x'
39077          'CR' register (condition register) number 0
39078
39079     'y'
39080          'CR' register (condition register)
39081
39082     'z'
39083          'XER[CA]' carry bit (part of the XER register)
39084
39085     'I'
39086          Signed 16-bit constant
39087
39088     'J'
39089          Unsigned 16-bit constant shifted left 16 bits (use 'L' instead
39090          for 'SImode' constants)
39091
39092     'K'
39093          Unsigned 16-bit constant
39094
39095     'L'
39096          Signed 16-bit constant shifted left 16 bits
39097
39098     'M'
39099          Constant larger than 31
39100
39101     'N'
39102          Exact power of 2
39103
39104     'O'
39105          Zero
39106
39107     'P'
39108          Constant whose negation is a signed 16-bit constant
39109
39110     'G'
39111          Floating point constant that can be loaded into a register
39112          with one instruction per word
39113
39114     'H'
39115          Integer/Floating point constant that can be loaded into a
39116          register using three instructions
39117
39118     'm'
39119          Memory operand.  Normally, 'm' does not allow addresses that
39120          update the base register.  If '<' or '>' constraint is also
39121          used, they are allowed and therefore on PowerPC targets in
39122          that case it is only safe to use 'm<>' in an 'asm' statement
39123          if that 'asm' statement accesses the operand exactly once.
39124          The 'asm' statement must also use '%U<OPNO>' as a placeholder
39125          for the "update" flag in the corresponding load or store
39126          instruction.  For example:
39127
39128               asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
39129
39130          is correct but:
39131
39132               asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
39133
39134          is not.
39135
39136     'es'
39137          A "stable" memory operand; that is, one which does not include
39138          any automodification of the base register.  This used to be
39139          useful when 'm' allowed automodification of the base register,
39140          but as those are now only allowed when '<' or '>' is used,
39141          'es' is basically the same as 'm' without '<' and '>'.
39142
39143     'Q'
39144          Memory operand that is an offset from a register (it is
39145          usually better to use 'm' or 'es' in 'asm' statements)
39146
39147     'Z'
39148          Memory operand that is an indexed or indirect from a register
39149          (it is usually better to use 'm' or 'es' in 'asm' statements)
39150
39151     'R'
39152          AIX TOC entry
39153
39154     'a'
39155          Address operand that is an indexed or indirect from a register
39156          ('p' is preferable for 'asm' statements)
39157
39158     'U'
39159          System V Release 4 small data area reference
39160
39161     'W'
39162          Vector constant that does not require memory
39163
39164     'j'
39165          Vector constant that is all zeros.
39166
39167_RL78--'config/rl78/constraints.md'_
39168
39169     'Int3'
39170          An integer constant in the range 1 ... 7.
39171     'Int8'
39172          An integer constant in the range 0 ... 255.
39173     'J'
39174          An integer constant in the range -255 ... 0
39175     'K'
39176          The integer constant 1.
39177     'L'
39178          The integer constant -1.
39179     'M'
39180          The integer constant 0.
39181     'N'
39182          The integer constant 2.
39183     'O'
39184          The integer constant -2.
39185     'P'
39186          An integer constant in the range 1 ... 15.
39187     'Qbi'
39188          The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
39189     'Qsc'
39190          The synthetic compare types-gt, lt, ge, and le.
39191     'Wab'
39192          A memory reference with an absolute address.
39193     'Wbc'
39194          A memory reference using 'BC' as a base register, with an
39195          optional offset.
39196     'Wca'
39197          A memory reference using 'AX', 'BC', 'DE', or 'HL' for the
39198          address, for calls.
39199     'Wcv'
39200          A memory reference using any 16-bit register pair for the
39201          address, for calls.
39202     'Wd2'
39203          A memory reference using 'DE' as a base register, with an
39204          optional offset.
39205     'Wde'
39206          A memory reference using 'DE' as a base register, without any
39207          offset.
39208     'Wfr'
39209          Any memory reference to an address in the far address space.
39210     'Wh1'
39211          A memory reference using 'HL' as a base register, with an
39212          optional one-byte offset.
39213     'Whb'
39214          A memory reference using 'HL' as a base register, with 'B' or
39215          'C' as the index register.
39216     'Whl'
39217          A memory reference using 'HL' as a base register, without any
39218          offset.
39219     'Ws1'
39220          A memory reference using 'SP' as a base register, with an
39221          optional one-byte offset.
39222     'Y'
39223          Any memory reference to an address in the near address space.
39224     'A'
39225          The 'AX' register.
39226     'B'
39227          The 'BC' register.
39228     'D'
39229          The 'DE' register.
39230     'R'
39231          'A' through 'L' registers.
39232     'S'
39233          The 'SP' register.
39234     'T'
39235          The 'HL' register.
39236     'Z08W'
39237          The 16-bit 'R8' register.
39238     'Z10W'
39239          The 16-bit 'R10' register.
39240     'Zint'
39241          The registers reserved for interrupts ('R24' to 'R31').
39242     'a'
39243          The 'A' register.
39244     'b'
39245          The 'B' register.
39246     'c'
39247          The 'C' register.
39248     'd'
39249          The 'D' register.
39250     'e'
39251          The 'E' register.
39252     'h'
39253          The 'H' register.
39254     'l'
39255          The 'L' register.
39256     'v'
39257          The virtual registers.
39258     'w'
39259          The 'PSW' register.
39260     'x'
39261          The 'X' register.
39262
39263_RISC-V--'config/riscv/constraints.md'_
39264
39265     'f'
39266          A floating-point register (if available).
39267
39268     'I'
39269          An I-type 12-bit signed immediate.
39270
39271     'J'
39272          Integer zero.
39273
39274     'K'
39275          A 5-bit unsigned immediate for CSR access instructions.
39276
39277     'A'
39278          An address that is held in a general-purpose register.
39279
39280_RX--'config/rx/constraints.md'_
39281     'Q'
39282          An address which does not involve register indirect addressing
39283          or pre/post increment/decrement addressing.
39284
39285     'Symbol'
39286          A symbol reference.
39287
39288     'Int08'
39289          A constant in the range -256 to 255, inclusive.
39290
39291     'Sint08'
39292          A constant in the range -128 to 127, inclusive.
39293
39294     'Sint16'
39295          A constant in the range -32768 to 32767, inclusive.
39296
39297     'Sint24'
39298          A constant in the range -8388608 to 8388607, inclusive.
39299
39300     'Uint04'
39301          A constant in the range 0 to 15, inclusive.
39302
39303_S/390 and zSeries--'config/s390/s390.h'_
39304     'a'
39305          Address register (general purpose register except r0)
39306
39307     'c'
39308          Condition code register
39309
39310     'd'
39311          Data register (arbitrary general purpose register)
39312
39313     'f'
39314          Floating-point register
39315
39316     'I'
39317          Unsigned 8-bit constant (0-255)
39318
39319     'J'
39320          Unsigned 12-bit constant (0-4095)
39321
39322     'K'
39323          Signed 16-bit constant (-32768-32767)
39324
39325     'L'
39326          Value appropriate as displacement.
39327          '(0..4095)'
39328               for short displacement
39329          '(-524288..524287)'
39330               for long displacement
39331
39332     'M'
39333          Constant integer with a value of 0x7fffffff.
39334
39335     'N'
39336          Multiple letter constraint followed by 4 parameter letters.
39337          '0..9:'
39338               number of the part counting from most to least
39339               significant
39340          'H,Q:'
39341               mode of the part
39342          'D,S,H:'
39343               mode of the containing operand
39344          '0,F:'
39345               value of the other parts (F--all bits set)
39346          The constraint matches if the specified part of a constant has
39347          a value different from its other parts.
39348
39349     'Q'
39350          Memory reference without index register and with short
39351          displacement.
39352
39353     'R'
39354          Memory reference with index register and short displacement.
39355
39356     'S'
39357          Memory reference without index register but with long
39358          displacement.
39359
39360     'T'
39361          Memory reference with index register and long displacement.
39362
39363     'U'
39364          Pointer with short displacement.
39365
39366     'W'
39367          Pointer with long displacement.
39368
39369     'Y'
39370          Shift count operand.
39371
39372_SPARC--'config/sparc/sparc.h'_
39373     'f'
39374          Floating-point register on the SPARC-V8 architecture and lower
39375          floating-point register on the SPARC-V9 architecture.
39376
39377     'e'
39378          Floating-point register.  It is equivalent to 'f' on the
39379          SPARC-V8 architecture and contains both lower and upper
39380          floating-point registers on the SPARC-V9 architecture.
39381
39382     'c'
39383          Floating-point condition code register.
39384
39385     'd'
39386          Lower floating-point register.  It is only valid on the
39387          SPARC-V9 architecture when the Visual Instruction Set is
39388          available.
39389
39390     'b'
39391          Floating-point register.  It is only valid on the SPARC-V9
39392          architecture when the Visual Instruction Set is available.
39393
39394     'h'
39395          64-bit global or out register for the SPARC-V8+ architecture.
39396
39397     'C'
39398          The constant all-ones, for floating-point.
39399
39400     'A'
39401          Signed 5-bit constant
39402
39403     'D'
39404          A vector constant
39405
39406     'I'
39407          Signed 13-bit constant
39408
39409     'J'
39410          Zero
39411
39412     'K'
39413          32-bit constant with the low 12 bits clear (a constant that
39414          can be loaded with the 'sethi' instruction)
39415
39416     'L'
39417          A constant in the range supported by 'movcc' instructions
39418          (11-bit signed immediate)
39419
39420     'M'
39421          A constant in the range supported by 'movrcc' instructions
39422          (10-bit signed immediate)
39423
39424     'N'
39425          Same as 'K', except that it verifies that bits that are not in
39426          the lower 32-bit range are all zero.  Must be used instead of
39427          'K' for modes wider than 'SImode'
39428
39429     'O'
39430          The constant 4096
39431
39432     'G'
39433          Floating-point zero
39434
39435     'H'
39436          Signed 13-bit constant, sign-extended to 32 or 64 bits
39437
39438     'P'
39439          The constant -1
39440
39441     'Q'
39442          Floating-point constant whose integral representation can be
39443          moved into an integer register using a single sethi
39444          instruction
39445
39446     'R'
39447          Floating-point constant whose integral representation can be
39448          moved into an integer register using a single mov instruction
39449
39450     'S'
39451          Floating-point constant whose integral representation can be
39452          moved into an integer register using a high/lo_sum instruction
39453          sequence
39454
39455     'T'
39456          Memory address aligned to an 8-byte boundary
39457
39458     'U'
39459          Even register
39460
39461     'W'
39462          Memory address for 'e' constraint registers
39463
39464     'w'
39465          Memory address with only a base register
39466
39467     'Y'
39468          Vector zero
39469
39470_SPU--'config/spu/spu.h'_
39471     'a'
39472          An immediate which can be loaded with the il/ila/ilh/ilhu
39473          instructions.  const_int is treated as a 64 bit value.
39474
39475     'c'
39476          An immediate for and/xor/or instructions.  const_int is
39477          treated as a 64 bit value.
39478
39479     'd'
39480          An immediate for the 'iohl' instruction.  const_int is treated
39481          as a 64 bit value.
39482
39483     'f'
39484          An immediate which can be loaded with 'fsmbi'.
39485
39486     'A'
39487          An immediate which can be loaded with the il/ila/ilh/ilhu
39488          instructions.  const_int is treated as a 32 bit value.
39489
39490     'B'
39491          An immediate for most arithmetic instructions.  const_int is
39492          treated as a 32 bit value.
39493
39494     'C'
39495          An immediate for and/xor/or instructions.  const_int is
39496          treated as a 32 bit value.
39497
39498     'D'
39499          An immediate for the 'iohl' instruction.  const_int is treated
39500          as a 32 bit value.
39501
39502     'I'
39503          A constant in the range [-64, 63] for shift/rotate
39504          instructions.
39505
39506     'J'
39507          An unsigned 7-bit constant for conversion/nop/channel
39508          instructions.
39509
39510     'K'
39511          A signed 10-bit constant for most arithmetic instructions.
39512
39513     'M'
39514          A signed 16 bit immediate for 'stop'.
39515
39516     'N'
39517          An unsigned 16-bit constant for 'iohl' and 'fsmbi'.
39518
39519     'O'
39520          An unsigned 7-bit constant whose 3 least significant bits are
39521          0.
39522
39523     'P'
39524          An unsigned 3-bit constant for 16-byte rotates and shifts
39525
39526     'R'
39527          Call operand, reg, for indirect calls
39528
39529     'S'
39530          Call operand, symbol, for relative calls.
39531
39532     'T'
39533          Call operand, const_int, for absolute calls.
39534
39535     'U'
39536          An immediate which can be loaded with the il/ila/ilh/ilhu
39537          instructions.  const_int is sign extended to 128 bit.
39538
39539     'W'
39540          An immediate for shift and rotate instructions.  const_int is
39541          treated as a 32 bit value.
39542
39543     'Y'
39544          An immediate for and/xor/or instructions.  const_int is sign
39545          extended as a 128 bit.
39546
39547     'Z'
39548          An immediate for the 'iohl' instruction.  const_int is sign
39549          extended to 128 bit.
39550
39551_TI C6X family--'config/c6x/constraints.md'_
39552     'a'
39553          Register file A (A0-A31).
39554
39555     'b'
39556          Register file B (B0-B31).
39557
39558     'A'
39559          Predicate registers in register file A (A0-A2 on C64X and
39560          higher, A1 and A2 otherwise).
39561
39562     'B'
39563          Predicate registers in register file B (B0-B2).
39564
39565     'C'
39566          A call-used register in register file B (B0-B9, B16-B31).
39567
39568     'Da'
39569          Register file A, excluding predicate registers (A3-A31, plus
39570          A0 if not C64X or higher).
39571
39572     'Db'
39573          Register file B, excluding predicate registers (B3-B31).
39574
39575     'Iu4'
39576          Integer constant in the range 0 ... 15.
39577
39578     'Iu5'
39579          Integer constant in the range 0 ... 31.
39580
39581     'In5'
39582          Integer constant in the range -31 ... 0.
39583
39584     'Is5'
39585          Integer constant in the range -16 ... 15.
39586
39587     'I5x'
39588          Integer constant that can be the operand of an ADDA or a SUBA
39589          insn.
39590
39591     'IuB'
39592          Integer constant in the range 0 ... 65535.
39593
39594     'IsB'
39595          Integer constant in the range -32768 ... 32767.
39596
39597     'IsC'
39598          Integer constant in the range -2^{20} ... 2^{20} - 1.
39599
39600     'Jc'
39601          Integer constant that is a valid mask for the clr instruction.
39602
39603     'Js'
39604          Integer constant that is a valid mask for the set instruction.
39605
39606     'Q'
39607          Memory location with A base register.
39608
39609     'R'
39610          Memory location with B base register.
39611
39612     'Z'
39613          Register B14 (aka DP).
39614
39615_TILE-Gx--'config/tilegx/constraints.md'_
39616     'R00'
39617     'R01'
39618     'R02'
39619     'R03'
39620     'R04'
39621     'R05'
39622     'R06'
39623     'R07'
39624     'R08'
39625     'R09'
39626     'R10'
39627          Each of these represents a register constraint for an
39628          individual register, from r0 to r10.
39629
39630     'I'
39631          Signed 8-bit integer constant.
39632
39633     'J'
39634          Signed 16-bit integer constant.
39635
39636     'K'
39637          Unsigned 16-bit integer constant.
39638
39639     'L'
39640          Integer constant that fits in one signed byte when incremented
39641          by one (-129 ... 126).
39642
39643     'm'
39644          Memory operand.  If used together with '<' or '>', the operand
39645          can have postincrement which requires printing with '%In' and
39646          '%in' on TILE-Gx.  For example:
39647
39648               asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
39649
39650     'M'
39651          A bit mask suitable for the BFINS instruction.
39652
39653     'N'
39654          Integer constant that is a byte tiled out eight times.
39655
39656     'O'
39657          The integer zero constant.
39658
39659     'P'
39660          Integer constant that is a sign-extended byte tiled out as
39661          four shorts.
39662
39663     'Q'
39664          Integer constant that fits in one signed byte when incremented
39665          (-129 ... 126), but excluding -1.
39666
39667     'S'
39668          Integer constant that has all 1 bits consecutive and starting
39669          at bit 0.
39670
39671     'T'
39672          A 16-bit fragment of a got, tls, or pc-relative reference.
39673
39674     'U'
39675          Memory operand except postincrement.  This is roughly the same
39676          as 'm' when not used together with '<' or '>'.
39677
39678     'W'
39679          An 8-element vector constant with identical elements.
39680
39681     'Y'
39682          A 4-element vector constant with identical elements.
39683
39684     'Z0'
39685          The integer constant 0xffffffff.
39686
39687     'Z1'
39688          The integer constant 0xffffffff00000000.
39689
39690_TILEPro--'config/tilepro/constraints.md'_
39691     'R00'
39692     'R01'
39693     'R02'
39694     'R03'
39695     'R04'
39696     'R05'
39697     'R06'
39698     'R07'
39699     'R08'
39700     'R09'
39701     'R10'
39702          Each of these represents a register constraint for an
39703          individual register, from r0 to r10.
39704
39705     'I'
39706          Signed 8-bit integer constant.
39707
39708     'J'
39709          Signed 16-bit integer constant.
39710
39711     'K'
39712          Nonzero integer constant with low 16 bits zero.
39713
39714     'L'
39715          Integer constant that fits in one signed byte when incremented
39716          by one (-129 ... 126).
39717
39718     'm'
39719          Memory operand.  If used together with '<' or '>', the operand
39720          can have postincrement which requires printing with '%In' and
39721          '%in' on TILEPro.  For example:
39722
39723               asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
39724
39725     'M'
39726          A bit mask suitable for the MM instruction.
39727
39728     'N'
39729          Integer constant that is a byte tiled out four times.
39730
39731     'O'
39732          The integer zero constant.
39733
39734     'P'
39735          Integer constant that is a sign-extended byte tiled out as two
39736          shorts.
39737
39738     'Q'
39739          Integer constant that fits in one signed byte when incremented
39740          (-129 ... 126), but excluding -1.
39741
39742     'T'
39743          A symbolic operand, or a 16-bit fragment of a got, tls, or
39744          pc-relative reference.
39745
39746     'U'
39747          Memory operand except postincrement.  This is roughly the same
39748          as 'm' when not used together with '<' or '>'.
39749
39750     'W'
39751          A 4-element vector constant with identical elements.
39752
39753     'Y'
39754          A 2-element vector constant with identical elements.
39755
39756_Visium--'config/visium/constraints.md'_
39757     'b'
39758          EAM register 'mdb'
39759
39760     'c'
39761          EAM register 'mdc'
39762
39763     'f'
39764          Floating point register
39765
39766     'l'
39767          General register, but not 'r29', 'r30' and 'r31'
39768
39769     't'
39770          Register 'r1'
39771
39772     'u'
39773          Register 'r2'
39774
39775     'v'
39776          Register 'r3'
39777
39778     'G'
39779          Floating-point constant 0.0
39780
39781     'J'
39782          Integer constant in the range 0 ..  65535 (16-bit immediate)
39783
39784     'K'
39785          Integer constant in the range 1 ..  31 (5-bit immediate)
39786
39787     'L'
39788          Integer constant in the range -65535 ..  -1 (16-bit negative
39789          immediate)
39790
39791     'M'
39792          Integer constant -1
39793
39794     'O'
39795          Integer constant 0
39796
39797     'P'
39798          Integer constant 32
39799
39800_x86 family--'config/i386/constraints.md'_
39801     'R'
39802          Legacy register--the eight integer registers available on all
39803          i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp').
39804
39805     'q'
39806          Any register accessible as 'Rl'.  In 32-bit mode, 'a', 'b',
39807          'c', and 'd'; in 64-bit mode, any integer register.
39808
39809     'Q'
39810          Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'.
39811
39812     'a'
39813          The 'a' register.
39814
39815     'b'
39816          The 'b' register.
39817
39818     'c'
39819          The 'c' register.
39820
39821     'd'
39822          The 'd' register.
39823
39824     'S'
39825          The 'si' register.
39826
39827     'D'
39828          The 'di' register.
39829
39830     'A'
39831          The 'a' and 'd' registers.  This class is used for
39832          instructions that return double word results in the 'ax:dx'
39833          register pair.  Single word values will be allocated either in
39834          'ax' or 'dx'.  For example on i386 the following implements
39835          'rdtsc':
39836
39837               unsigned long long rdtsc (void)
39838               {
39839                 unsigned long long tick;
39840                 __asm__ __volatile__("rdtsc":"=A"(tick));
39841                 return tick;
39842               }
39843
39844          This is not correct on x86-64 as it would allocate tick in
39845          either 'ax' or 'dx'.  You have to use the following variant
39846          instead:
39847
39848               unsigned long long rdtsc (void)
39849               {
39850                 unsigned int tickl, tickh;
39851                 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
39852                 return ((unsigned long long)tickh << 32)|tickl;
39853               }
39854
39855     'U'
39856          The call-clobbered integer registers.
39857
39858     'f'
39859          Any 80387 floating-point (stack) register.
39860
39861     't'
39862          Top of 80387 floating-point stack ('%st(0)').
39863
39864     'u'
39865          Second from top of 80387 floating-point stack ('%st(1)').
39866
39867     'y'
39868          Any MMX register.
39869
39870     'x'
39871          Any SSE register.
39872
39873     'v'
39874          Any EVEX encodable SSE register ('%xmm0-%xmm31').
39875
39876     'Yz'
39877          First SSE register ('%xmm0').
39878
39879     'I'
39880          Integer constant in the range 0 ... 31, for 32-bit shifts.
39881
39882     'J'
39883          Integer constant in the range 0 ... 63, for 64-bit shifts.
39884
39885     'K'
39886          Signed 8-bit integer constant.
39887
39888     'L'
39889          '0xFF' or '0xFFFF', for andsi as a zero-extending move.
39890
39891     'M'
39892          0, 1, 2, or 3 (shifts for the 'lea' instruction).
39893
39894     'N'
39895          Unsigned 8-bit integer constant (for 'in' and 'out'
39896          instructions).
39897
39898     'G'
39899          Standard 80387 floating point constant.
39900
39901     'C'
39902          SSE constant zero operand.
39903
39904     'e'
39905          32-bit signed integer constant, or a symbolic reference known
39906          to fit that range (for immediate operands in sign-extending
39907          x86-64 instructions).
39908
39909     'We'
39910          32-bit signed integer constant, or a symbolic reference known
39911          to fit that range (for sign-extending conversion operations
39912          that require non-'VOIDmode' immediate operands).
39913
39914     'Wz'
39915          32-bit unsigned integer constant, or a symbolic reference
39916          known to fit that range (for zero-extending conversion
39917          operations that require non-'VOIDmode' immediate operands).
39918
39919     'Wd'
39920          128-bit integer constant where both the high and low 64-bit
39921          word satisfy the 'e' constraint.
39922
39923     'Z'
39924          32-bit unsigned integer constant, or a symbolic reference
39925          known to fit that range (for immediate operands in
39926          zero-extending x86-64 instructions).
39927
39928     'Tv'
39929          VSIB address operand.
39930
39931     'Ts'
39932          Address operand without segment register.
39933
39934_Xstormy16--'config/stormy16/stormy16.h'_
39935     'a'
39936          Register r0.
39937
39938     'b'
39939          Register r1.
39940
39941     'c'
39942          Register r2.
39943
39944     'd'
39945          Register r8.
39946
39947     'e'
39948          Registers r0 through r7.
39949
39950     't'
39951          Registers r0 and r1.
39952
39953     'y'
39954          The carry register.
39955
39956     'z'
39957          Registers r8 and r9.
39958
39959     'I'
39960          A constant between 0 and 3 inclusive.
39961
39962     'J'
39963          A constant that has exactly one bit set.
39964
39965     'K'
39966          A constant that has exactly one bit clear.
39967
39968     'L'
39969          A constant between 0 and 255 inclusive.
39970
39971     'M'
39972          A constant between -255 and 0 inclusive.
39973
39974     'N'
39975          A constant between -3 and 0 inclusive.
39976
39977     'O'
39978          A constant between 1 and 4 inclusive.
39979
39980     'P'
39981          A constant between -4 and -1 inclusive.
39982
39983     'Q'
39984          A memory reference that is a stack push.
39985
39986     'R'
39987          A memory reference that is a stack pop.
39988
39989     'S'
39990          A memory reference that refers to a constant address of known
39991          value.
39992
39993     'T'
39994          The register indicated by Rx (not implemented yet).
39995
39996     'U'
39997          A constant that is not between 2 and 15 inclusive.
39998
39999     'Z'
40000          The constant 0.
40001
40002_Xtensa--'config/xtensa/constraints.md'_
40003     'a'
40004          General-purpose 32-bit register
40005
40006     'b'
40007          One-bit boolean register
40008
40009     'A'
40010          MAC16 40-bit accumulator register
40011
40012     'I'
40013          Signed 12-bit integer constant, for use in MOVI instructions
40014
40015     'J'
40016          Signed 8-bit integer constant, for use in ADDI instructions
40017
40018     'K'
40019          Integer constant valid for BccI instructions
40020
40021     'L'
40022          Unsigned constant valid for BccUI instructions
40023
40024
40025File: gcc.info,  Node: Asm Labels,  Next: Explicit Register Variables,  Prev: Constraints,  Up: Using Assembly Language with C
40026
400276.47.4 Controlling Names Used in Assembler Code
40028-----------------------------------------------
40029
40030You can specify the name to be used in the assembler code for a C
40031function or variable by writing the 'asm' (or '__asm__') keyword after
40032the declarator.  It is up to you to make sure that the assembler names
40033you choose do not conflict with any other assembler symbols, or
40034reference registers.
40035
40036Assembler names for data:
40037.........................
40038
40039This sample shows how to specify the assembler name for data:
40040
40041     int foo asm ("myfoo") = 2;
40042
40043This specifies that the name to be used for the variable 'foo' in the
40044assembler code should be 'myfoo' rather than the usual '_foo'.
40045
40046 On systems where an underscore is normally prepended to the name of a C
40047variable, this feature allows you to define names for the linker that do
40048not start with an underscore.
40049
40050 GCC does not support using this feature with a non-static local
40051variable since such variables do not have assembler names.  If you are
40052trying to put the variable in a particular register, see *note Explicit
40053Register Variables::.
40054
40055Assembler names for functions:
40056..............................
40057
40058To specify the assembler name for functions, write a declaration for the
40059function before its definition and put 'asm' there, like this:
40060
40061     int func (int x, int y) asm ("MYFUNC");
40062
40063     int func (int x, int y)
40064     {
40065        /* ... */
40066
40067This specifies that the name to be used for the function 'func' in the
40068assembler code should be 'MYFUNC'.
40069
40070
40071File: gcc.info,  Node: Explicit Register Variables,  Next: Size of an asm,  Prev: Asm Labels,  Up: Using Assembly Language with C
40072
400736.47.5 Variables in Specified Registers
40074---------------------------------------
40075
40076GNU C allows you to associate specific hardware registers with C
40077variables.  In almost all cases, allowing the compiler to assign
40078registers produces the best code.  However under certain unusual
40079circumstances, more precise control over the variable storage is
40080required.
40081
40082 Both global and local variables can be associated with a register.  The
40083consequences of performing this association are very different between
40084the two, as explained in the sections below.
40085
40086* Menu:
40087
40088* Global Register Variables::   Variables declared at global scope.
40089* Local Register Variables::    Variables declared within a function.
40090
40091
40092File: gcc.info,  Node: Global Register Variables,  Next: Local Register Variables,  Up: Explicit Register Variables
40093
400946.47.5.1 Defining Global Register Variables
40095...........................................
40096
40097You can define a global register variable and associate it with a
40098specified register like this:
40099
40100     register int *foo asm ("r12");
40101
40102Here 'r12' is the name of the register that should be used.  Note that
40103this is the same syntax used for defining local register variables, but
40104for a global variable the declaration appears outside a function.  The
40105'register' keyword is required, and cannot be combined with 'static'.
40106The register name must be a valid register name for the target platform.
40107
40108 Do not use type qualifiers such as 'const' and 'volatile', as the
40109outcome may be contrary to expectations.  In particular, using the
40110'volatile' qualifier does not fully prevent the compiler from optimizing
40111accesses to the register.
40112
40113 Registers are a scarce resource on most systems and allowing the
40114compiler to manage their usage usually results in the best code.
40115However, under special circumstances it can make sense to reserve some
40116globally.  For example this may be useful in programs such as
40117programming language interpreters that have a couple of global variables
40118that are accessed very often.
40119
40120 After defining a global register variable, for the current compilation
40121unit:
40122
40123   * If the register is a call-saved register, call ABI is affected: the
40124     register will not be restored in function epilogue sequences after
40125     the variable has been assigned.  Therefore, functions cannot safely
40126     return to callers that assume standard ABI.
40127   * Conversely, if the register is a call-clobbered register, making
40128     calls to functions that use standard ABI may lose contents of the
40129     variable.  Such calls may be created by the compiler even if none
40130     are evident in the original program, for example when libgcc
40131     functions are used to make up for unavailable instructions.
40132   * Accesses to the variable may be optimized as usual and the register
40133     remains available for allocation and use in any computations,
40134     provided that observable values of the variable are not affected.
40135   * If the variable is referenced in inline assembly, the type of
40136     access must be provided to the compiler via constraints (*note
40137     Constraints::).  Accesses from basic asms are not supported.
40138
40139 Note that these points _only_ apply to code that is compiled with the
40140definition.  The behavior of code that is merely linked in (for example
40141code from libraries) is not affected.
40142
40143 If you want to recompile source files that do not actually use your
40144global register variable so they do not use the specified register for
40145any other purpose, you need not actually add the global register
40146declaration to their source code.  It suffices to specify the compiler
40147option '-ffixed-REG' (*note Code Gen Options::) to reserve the register.
40148
40149Declaring the variable
40150......................
40151
40152Global register variables cannot have initial values, because an
40153executable file has no means to supply initial contents for a register.
40154
40155 When selecting a register, choose one that is normally saved and
40156restored by function calls on your machine.  This ensures that code
40157which is unaware of this reservation (such as library routines) will
40158restore it before returning.
40159
40160 On machines with register windows, be sure to choose a global register
40161that is not affected magically by the function call mechanism.
40162
40163Using the variable
40164..................
40165
40166When calling routines that are not aware of the reservation, be cautious
40167if those routines call back into code which uses them.  As an example,
40168if you call the system library version of 'qsort', it may clobber your
40169registers during execution, but (if you have selected appropriate
40170registers) it will restore them before returning.  However it will _not_
40171restore them before calling 'qsort''s comparison function.  As a result,
40172global values will not reliably be available to the comparison function
40173unless the 'qsort' function itself is rebuilt.
40174
40175 Similarly, it is not safe to access the global register variables from
40176signal handlers or from more than one thread of control.  Unless you
40177recompile them specially for the task at hand, the system library
40178routines may temporarily use the register for other things.
40179Furthermore, since the register is not reserved exclusively for the
40180variable, accessing it from handlers of asynchronous signals may observe
40181unrelated temporary values residing in the register.
40182
40183 On most machines, 'longjmp' restores to each global register variable
40184the value it had at the time of the 'setjmp'.  On some machines,
40185however, 'longjmp' does not change the value of global register
40186variables.  To be portable, the function that called 'setjmp' should
40187make other arrangements to save the values of the global register
40188variables, and to restore them in a 'longjmp'.  This way, the same thing
40189happens regardless of what 'longjmp' does.
40190
40191
40192File: gcc.info,  Node: Local Register Variables,  Prev: Global Register Variables,  Up: Explicit Register Variables
40193
401946.47.5.2 Specifying Registers for Local Variables
40195.................................................
40196
40197You can define a local register variable and associate it with a
40198specified register like this:
40199
40200     register int *foo asm ("r12");
40201
40202Here 'r12' is the name of the register that should be used.  Note that
40203this is the same syntax used for defining global register variables, but
40204for a local variable the declaration appears within a function.  The
40205'register' keyword is required, and cannot be combined with 'static'.
40206The register name must be a valid register name for the target platform.
40207
40208 Do not use type qualifiers such as 'const' and 'volatile', as the
40209outcome may be contrary to expectations.  In particular, when the
40210'const' qualifier is used, the compiler may substitute the variable with
40211its initializer in 'asm' statements, which may cause the corresponding
40212operand to appear in a different register.
40213
40214 As with global register variables, it is recommended that you choose a
40215register that is normally saved and restored by function calls on your
40216machine, so that calls to library routines will not clobber it.
40217
40218 The only supported use for this feature is to specify registers for
40219input and output operands when calling Extended 'asm' (*note Extended
40220Asm::).  This may be necessary if the constraints for a particular
40221machine don't provide sufficient control to select the desired register.
40222To force an operand into a register, create a local variable and specify
40223the register name after the variable's declaration.  Then use the local
40224variable for the 'asm' operand and specify any constraint letter that
40225matches the register:
40226
40227     register int *p1 asm ("r0") = ...;
40228     register int *p2 asm ("r1") = ...;
40229     register int *result asm ("r0");
40230     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
40231
40232 _Warning:_ In the above example, be aware that a register (for example
40233'r0') can be call-clobbered by subsequent code, including function calls
40234and library calls for arithmetic operators on other variables (for
40235example the initialization of 'p2').  In this case, use temporary
40236variables for expressions between the register assignments:
40237
40238     int t1 = ...;
40239     register int *p1 asm ("r0") = ...;
40240     register int *p2 asm ("r1") = t1;
40241     register int *result asm ("r0");
40242     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
40243
40244 Defining a register variable does not reserve the register.  Other than
40245when invoking the Extended 'asm', the contents of the specified register
40246are not guaranteed.  For this reason, the following uses are explicitly
40247_not_ supported.  If they appear to work, it is only happenstance, and
40248may stop working as intended due to (seemingly) unrelated changes in
40249surrounding code, or even minor changes in the optimization of a future
40250version of gcc:
40251
40252   * Passing parameters to or from Basic 'asm'
40253   * Passing parameters to or from Extended 'asm' without using input or
40254     output operands.
40255   * Passing parameters to or from routines written in assembler (or
40256     other languages) using non-standard calling conventions.
40257
40258 Some developers use Local Register Variables in an attempt to improve
40259gcc's allocation of registers, especially in large functions.  In this
40260case the register name is essentially a hint to the register allocator.
40261While in some instances this can generate better code, improvements are
40262subject to the whims of the allocator/optimizers.  Since there are no
40263guarantees that your improvements won't be lost, this usage of Local
40264Register Variables is discouraged.
40265
40266 On the MIPS platform, there is related use for local register variables
40267with slightly different characteristics (*note Defining coprocessor
40268specifics for MIPS targets: (gccint)MIPS Coprocessors.).
40269
40270
40271File: gcc.info,  Node: Size of an asm,  Prev: Explicit Register Variables,  Up: Using Assembly Language with C
40272
402736.47.6 Size of an 'asm'
40274-----------------------
40275
40276Some targets require that GCC track the size of each instruction used in
40277order to generate correct code.  Because the final length of the code
40278produced by an 'asm' statement is only known by the assembler, GCC must
40279make an estimate as to how big it will be.  It does this by counting the
40280number of instructions in the pattern of the 'asm' and multiplying that
40281by the length of the longest instruction supported by that processor.
40282(When working out the number of instructions, it assumes that any
40283occurrence of a newline or of whatever statement separator character is
40284supported by the assembler -- typically ';' -- indicates the end of an
40285instruction.)
40286
40287 Normally, GCC's estimate is adequate to ensure that correct code is
40288generated, but it is possible to confuse the compiler if you use pseudo
40289instructions or assembler macros that expand into multiple real
40290instructions, or if you use assembler directives that expand to more
40291space in the object file than is needed for a single instruction.  If
40292this happens then the assembler may produce a diagnostic saying that a
40293label is unreachable.
40294
40295 This size is also used for inlining decisions.  If you use 'asm inline'
40296instead of just 'asm', then for inlining purposes the size of the asm is
40297taken as the minimum size, ignoring how many instructions GCC thinks it
40298is.
40299
40300
40301File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Using Assembly Language with C,  Up: C Extensions
40302
403036.48 Alternate Keywords
40304=======================
40305
40306'-ansi' and the various '-std' options disable certain keywords.  This
40307causes trouble when you want to use GNU C extensions, or a
40308general-purpose header file that should be usable by all programs,
40309including ISO C programs.  The keywords 'asm', 'typeof' and 'inline' are
40310not available in programs compiled with '-ansi' or '-std' (although
40311'inline' can be used in a program compiled with '-std=c99' or
40312'-std=c11').  The ISO C99 keyword 'restrict' is only available when
40313'-std=gnu99' (which will eventually be the default) or '-std=c99' (or
40314the equivalent '-std=iso9899:1999'), or an option for a later standard
40315version, is used.
40316
40317 The way to solve these problems is to put '__' at the beginning and end
40318of each problematical keyword.  For example, use '__asm__' instead of
40319'asm', and '__inline__' instead of 'inline'.
40320
40321 Other C compilers won't accept these alternative keywords; if you want
40322to compile with another compiler, you can define the alternate keywords
40323as macros to replace them with the customary keywords.  It looks like
40324this:
40325
40326     #ifndef __GNUC__
40327     #define __asm__ asm
40328     #endif
40329
40330 '-pedantic' and other options cause warnings for many GNU C extensions.
40331You can prevent such warnings within one expression by writing
40332'__extension__' before the expression.  '__extension__' has no effect
40333aside from this.
40334
40335
40336File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
40337
403386.49 Incomplete 'enum' Types
40339============================
40340
40341You can define an 'enum' tag without specifying its possible values.
40342This results in an incomplete type, much like what you get if you write
40343'struct foo' without describing the elements.  A later declaration that
40344does specify the possible values completes the type.
40345
40346 You cannot allocate variables or storage using the type while it is
40347incomplete.  However, you can work with pointers to that type.
40348
40349 This extension may not be very useful, but it makes the handling of
40350'enum' more consistent with the way 'struct' and 'union' are handled.
40351
40352 This extension is not supported by GNU C++.
40353
40354
40355File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
40356
403576.50 Function Names as Strings
40358==============================
40359
40360GCC provides three magic constants that hold the name of the current
40361function as a string.  In C++11 and later modes, all three are treated
40362as constant expressions and can be used in 'constexpr' constexts.  The
40363first of these constants is '__func__', which is part of the C99
40364standard:
40365
40366 The identifier '__func__' is implicitly declared by the translator as
40367if, immediately following the opening brace of each function definition,
40368the declaration
40369
40370     static const char __func__[] = "function-name";
40371
40372appeared, where function-name is the name of the lexically-enclosing
40373function.  This name is the unadorned name of the function.  As an
40374extension, at file (or, in C++, namespace scope), '__func__' evaluates
40375to the empty string.
40376
40377 '__FUNCTION__' is another name for '__func__', provided for backward
40378compatibility with old versions of GCC.
40379
40380 In C, '__PRETTY_FUNCTION__' is yet another name for '__func__', except
40381that at file (or, in C++, namespace scope), it evaluates to the string
40382'"top level"'.  In addition, in C++, '__PRETTY_FUNCTION__' contains the
40383signature of the function as well as its bare name.  For example, this
40384program:
40385
40386     extern "C" int printf (const char *, ...);
40387
40388     class a {
40389      public:
40390       void sub (int i)
40391         {
40392           printf ("__FUNCTION__ = %s\n", __FUNCTION__);
40393           printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
40394         }
40395     };
40396
40397     int
40398     main (void)
40399     {
40400       a ax;
40401       ax.sub (0);
40402       return 0;
40403     }
40404
40405gives this output:
40406
40407     __FUNCTION__ = sub
40408     __PRETTY_FUNCTION__ = void a::sub(int)
40409
40410 These identifiers are variables, not preprocessor macros, and may not
40411be used to initialize 'char' arrays or be concatenated with string
40412literals.
40413
40414
40415File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
40416
404176.51 Getting the Return or Frame Address of a Function
40418======================================================
40419
40420These functions may be used to get information about the callers of a
40421function.
40422
40423 -- Built-in Function: void * __builtin_return_address (unsigned int
40424          LEVEL)
40425     This function returns the return address of the current function,
40426     or of one of its callers.  The LEVEL argument is number of frames
40427     to scan up the call stack.  A value of '0' yields the return
40428     address of the current function, a value of '1' yields the return
40429     address of the caller of the current function, and so forth.  When
40430     inlining the expected behavior is that the function returns the
40431     address of the function that is returned to.  To work around this
40432     behavior use the 'noinline' function attribute.
40433
40434     The LEVEL argument must be a constant integer.
40435
40436     On some machines it may be impossible to determine the return
40437     address of any function other than the current one; in such cases,
40438     or when the top of the stack has been reached, this function
40439     returns an unspecified value.  In addition,
40440     '__builtin_frame_address' may be used to determine if the top of
40441     the stack has been reached.
40442
40443     Additional post-processing of the returned value may be needed, see
40444     '__builtin_extract_return_addr'.
40445
40446     The stored representation of the return address in memory may be
40447     different from the address returned by '__builtin_return_address'.
40448     For example, on AArch64 the stored address may be mangled with
40449     return address signing whereas the address returned by
40450     '__builtin_return_address' is not.
40451
40452     Calling this function with a nonzero argument can have
40453     unpredictable effects, including crashing the calling program.  As
40454     a result, calls that are considered unsafe are diagnosed when the
40455     '-Wframe-address' option is in effect.  Such calls should only be
40456     made in debugging situations.
40457
40458     On targets where code addresses are representable as 'void *',
40459          void *addr = __builtin_extract_return_addr (__builtin_return_address (0));
40460     gives the code address where the current function would return.
40461     For example, such an address may be used with 'dladdr' or other
40462     interfaces that work with code addresses.
40463
40464 -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR)
40465     The address as returned by '__builtin_return_address' may have to
40466     be fed through this function to get the actual encoded address.
40467     For example, on the 31-bit S/390 platform the highest bit has to be
40468     masked out, or on SPARC platforms an offset has to be added for the
40469     true next instruction to be executed.
40470
40471     If no fixup is needed, this function simply passes through ADDR.
40472
40473 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR)
40474     This function does the reverse of '__builtin_extract_return_addr'.
40475
40476 -- Built-in Function: void * __builtin_frame_address (unsigned int
40477          LEVEL)
40478     This function is similar to '__builtin_return_address', but it
40479     returns the address of the function frame rather than the return
40480     address of the function.  Calling '__builtin_frame_address' with a
40481     value of '0' yields the frame address of the current function, a
40482     value of '1' yields the frame address of the caller of the current
40483     function, and so forth.
40484
40485     The frame is the area on the stack that holds local variables and
40486     saved registers.  The frame address is normally the address of the
40487     first word pushed on to the stack by the function.  However, the
40488     exact definition depends upon the processor and the calling
40489     convention.  If the processor has a dedicated frame pointer
40490     register, and the function has a frame, then
40491     '__builtin_frame_address' returns the value of the frame pointer
40492     register.
40493
40494     On some machines it may be impossible to determine the frame
40495     address of any function other than the current one; in such cases,
40496     or when the top of the stack has been reached, this function
40497     returns '0' if the first frame pointer is properly initialized by
40498     the startup code.
40499
40500     Calling this function with a nonzero argument can have
40501     unpredictable effects, including crashing the calling program.  As
40502     a result, calls that are considered unsafe are diagnosed when the
40503     '-Wframe-address' option is in effect.  Such calls should only be
40504     made in debugging situations.
40505
40506
40507File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
40508
405096.52 Using Vector Instructions through Built-in Functions
40510=========================================================
40511
40512On some targets, the instruction set contains SIMD vector instructions
40513which operate on multiple values contained in one large register at the
40514same time.  For example, on the x86 the MMX, 3DNow! and SSE extensions
40515can be used this way.
40516
40517 The first step in using these extensions is to provide the necessary
40518data types.  This should be done using an appropriate 'typedef':
40519
40520     typedef int v4si __attribute__ ((vector_size (16)));
40521
40522The 'int' type specifies the "base type", while the attribute specifies
40523the vector size for the variable, measured in bytes.  For example, the
40524declaration above causes the compiler to set the mode for the 'v4si'
40525type to be 16 bytes wide and divided into 'int' sized units.  For a
4052632-bit 'int' this means a vector of 4 units of 4 bytes, and the
40527corresponding mode of 'foo' is V4SI.
40528
40529 The 'vector_size' attribute is only applicable to integral and floating
40530scalars, although arrays, pointers, and function return values are
40531allowed in conjunction with this construct.  Only sizes that are
40532positive power-of-two multiples of the base type size are currently
40533allowed.
40534
40535 All the basic integer types can be used as base types, both as signed
40536and as unsigned: 'char', 'short', 'int', 'long', 'long long'.  In
40537addition, 'float' and 'double' can be used to build floating-point
40538vector types.
40539
40540 Specifying a combination that is not valid for the current architecture
40541causes GCC to synthesize the instructions using a narrower mode.  For
40542example, if you specify a variable of type 'V4SI' and your architecture
40543does not allow for this specific SIMD type, GCC produces code that uses
405444 'SIs'.
40545
40546 The types defined in this manner can be used with a subset of normal C
40547operations.  Currently, GCC allows using the following operators on
40548these types: '+, -, *, /, unary minus, ^, |, &, ~, %'.
40549
40550 The operations behave like C++ 'valarrays'.  Addition is defined as the
40551addition of the corresponding elements of the operands.  For example, in
40552the code below, each of the 4 elements in A is added to the
40553corresponding 4 elements in B and the resulting vector is stored in C.
40554
40555     typedef int v4si __attribute__ ((vector_size (16)));
40556
40557     v4si a, b, c;
40558
40559     c = a + b;
40560
40561 Subtraction, multiplication, division, and the logical operations
40562operate in a similar manner.  Likewise, the result of using the unary
40563minus or complement operators on a vector type is a vector whose
40564elements are the negative or complemented values of the corresponding
40565elements in the operand.
40566
40567 It is possible to use shifting operators '<<', '>>' on integer-type
40568vectors.  The operation is defined as following: '{a0, a1, ..., an} >>
40569{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'.  Vector
40570operands must have the same number of elements.
40571
40572 For convenience, it is allowed to use a binary vector operation where
40573one operand is a scalar.  In that case the compiler transforms the
40574scalar operand into a vector where each element is the scalar from the
40575operation.  The transformation happens only if the scalar could be
40576safely converted to the vector-element type.  Consider the following
40577code.
40578
40579     typedef int v4si __attribute__ ((vector_size (16)));
40580
40581     v4si a, b, c;
40582     long l;
40583
40584     a = b + 1;    /* a = b + {1,1,1,1}; */
40585     a = 2 * b;    /* a = {2,2,2,2} * b; */
40586
40587     a = l + a;    /* Error, cannot convert long to int. */
40588
40589 Vectors can be subscripted as if the vector were an array with the same
40590number of elements and base type.  Out of bound accesses invoke
40591undefined behavior at run time.  Warnings for out of bound accesses for
40592vector subscription can be enabled with '-Warray-bounds'.
40593
40594 Vector comparison is supported with standard comparison operators: '==,
40595!=, <, <=, >, >='.  Comparison operands can be vector expressions of
40596integer-type or real-type.  Comparison between integer-type vectors and
40597real-type vectors are not supported.  The result of the comparison is a
40598vector of the same width and number of elements as the comparison
40599operands with a signed integral element type.
40600
40601 Vectors are compared element-wise producing 0 when comparison is false
40602and -1 (constant of the appropriate type where all bits are set)
40603otherwise.  Consider the following example.
40604
40605     typedef int v4si __attribute__ ((vector_size (16)));
40606
40607     v4si a = {1,2,3,4};
40608     v4si b = {3,2,1,4};
40609     v4si c;
40610
40611     c = a >  b;     /* The result would be {0, 0,-1, 0}  */
40612     c = a == b;     /* The result would be {0,-1, 0,-1}  */
40613
40614 In C++, the ternary operator '?:' is available.  'a?b:c', where 'b' and
40615'c' are vectors of the same type and 'a' is an integer vector with the
40616same number of elements of the same size as 'b' and 'c', computes all
40617three arguments and creates a vector '{a[0]?b[0]:c[0], a[1]?b[1]:c[1],
40618...}'.  Note that unlike in OpenCL, 'a' is thus interpreted as 'a != 0'
40619and not 'a < 0'.  As in the case of binary operations, this syntax is
40620also accepted when one of 'b' or 'c' is a scalar that is then
40621transformed into a vector.  If both 'b' and 'c' are scalars and the type
40622of 'true?b:c' has the same size as the element type of 'a', then 'b' and
40623'c' are converted to a vector type whose elements have this type and
40624with the same number of elements as 'a'.
40625
40626 In C++, the logic operators '!, &&, ||' are available for vectors.
40627'!v' is equivalent to 'v == 0', 'a && b' is equivalent to 'a!=0 & b!=0'
40628and 'a || b' is equivalent to 'a!=0 | b!=0'.  For mixed operations
40629between a scalar 's' and a vector 'v', 's && v' is equivalent to
40630's?v!=0:0' (the evaluation is short-circuit) and 'v && s' is equivalent
40631to 'v!=0 & (s?-1:0)'.
40632
40633 Vector shuffling is available using functions '__builtin_shuffle (vec,
40634mask)' and '__builtin_shuffle (vec0, vec1, mask)'.  Both functions
40635construct a permutation of elements from one or two vectors and return a
40636vector of the same type as the input vector(s).  The MASK is an integral
40637vector with the same width (W) and element count (N) as the output
40638vector.
40639
40640 The elements of the input vectors are numbered in memory ordering of
40641VEC0 beginning at 0 and VEC1 beginning at N.  The elements of MASK are
40642considered modulo N in the single-operand case and modulo 2*N in the
40643two-operand case.
40644
40645 Consider the following example,
40646
40647     typedef int v4si __attribute__ ((vector_size (16)));
40648
40649     v4si a = {1,2,3,4};
40650     v4si b = {5,6,7,8};
40651     v4si mask1 = {0,1,1,3};
40652     v4si mask2 = {0,4,2,5};
40653     v4si res;
40654
40655     res = __builtin_shuffle (a, mask1);       /* res is {1,2,2,4}  */
40656     res = __builtin_shuffle (a, b, mask2);    /* res is {1,5,3,6}  */
40657
40658 Note that '__builtin_shuffle' is intentionally semantically compatible
40659with the OpenCL 'shuffle' and 'shuffle2' functions.
40660
40661 You can declare variables and use them in function calls and returns,
40662as well as in assignments and some casts.  You can specify a vector type
40663as a return type for a function.  Vector types can also be used as
40664function arguments.  It is possible to cast from one vector type to
40665another, provided they are of the same size (in fact, you can also cast
40666vectors to and from other datatypes of the same size).
40667
40668 You cannot operate between vectors of different lengths or different
40669signedness without a cast.
40670
40671 Vector conversion is available using the '__builtin_convertvector (vec,
40672vectype)' function.  VEC must be an expression with integral or floating
40673vector type and VECTYPE an integral or floating vector type with the
40674same number of elements.  The result has VECTYPE type and value of a C
40675cast of every element of VEC to the element type of VECTYPE.
40676
40677 Consider the following example,
40678     typedef int v4si __attribute__ ((vector_size (16)));
40679     typedef float v4sf __attribute__ ((vector_size (16)));
40680     typedef double v4df __attribute__ ((vector_size (32)));
40681     typedef unsigned long long v4di __attribute__ ((vector_size (32)));
40682
40683     v4si a = {1,-2,3,-4};
40684     v4sf b = {1.5f,-2.5f,3.f,7.f};
40685     v4di c = {1ULL,5ULL,0ULL,10ULL};
40686     v4sf d = __builtin_convertvector (a, v4sf); /* d is {1.f,-2.f,3.f,-4.f} */
40687     /* Equivalent of:
40688        v4sf d = { (float)a[0], (float)a[1], (float)a[2], (float)a[3] }; */
40689     v4df e = __builtin_convertvector (a, v4df); /* e is {1.,-2.,3.,-4.} */
40690     v4df f = __builtin_convertvector (b, v4df); /* f is {1.5,-2.5,3.,7.} */
40691     v4si g = __builtin_convertvector (f, v4si); /* g is {1,-2,3,7} */
40692     v4si h = __builtin_convertvector (c, v4si); /* h is {1,5,0,10} */
40693
40694 Sometimes it is desirable to write code using a mix of generic vector
40695operations (for clarity) and machine-specific vector intrinsics (to
40696access vector instructions that are not exposed via generic built-ins).
40697On x86, intrinsic functions for integer vectors typically use the same
40698vector type '__m128i' irrespective of how they interpret the vector,
40699making it necessary to cast their arguments and return values from/to
40700other vector types.  In C, you can make use of a 'union' type:
40701     #include <immintrin.h>
40702
40703     typedef unsigned char u8x16 __attribute__ ((vector_size (16)));
40704     typedef unsigned int  u32x4 __attribute__ ((vector_size (16)));
40705
40706     typedef union {
40707             __m128i mm;
40708             u8x16   u8;
40709             u32x4   u32;
40710     } v128;
40711
40712for variables that can be used with both built-in operators and x86
40713intrinsics:
40714
40715     v128 x, y = { 0 };
40716     memcpy (&x, ptr, sizeof x);
40717     y.u8  += 0x80;
40718     x.mm  = _mm_adds_epu8 (x.mm, y.mm);
40719     x.u32 &= 0xffffff;
40720
40721     /* Instead of a variable, a compound literal may be used to pass the
40722        return value of an intrinsic call to a function expecting the union: */
40723     v128 foo (v128);
40724     x = foo ((v128) {_mm_adds_epu8 (x.mm, y.mm)});
40725
40726
40727File: gcc.info,  Node: Offsetof,  Next: __sync Builtins,  Prev: Vector Extensions,  Up: C Extensions
40728
407296.53 Support for 'offsetof'
40730===========================
40731
40732GCC implements for both C and C++ a syntactic extension to implement the
40733'offsetof' macro.
40734
40735     primary:
40736             "__builtin_offsetof" "(" typename "," offsetof_member_designator ")"
40737
40738     offsetof_member_designator:
40739               identifier
40740             | offsetof_member_designator "." identifier
40741             | offsetof_member_designator "[" expr "]"
40742
40743 This extension is sufficient such that
40744
40745     #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
40746
40747is a suitable definition of the 'offsetof' macro.  In C++, TYPE may be
40748dependent.  In either case, MEMBER may consist of a single identifier,
40749or a sequence of member accesses and array references.
40750
40751
40752File: gcc.info,  Node: __sync Builtins,  Next: __atomic Builtins,  Prev: Offsetof,  Up: C Extensions
40753
407546.54 Legacy '__sync' Built-in Functions for Atomic Memory Access
40755================================================================
40756
40757The following built-in functions are intended to be compatible with
40758those described in the 'Intel Itanium Processor-specific Application
40759Binary Interface', section 7.4.  As such, they depart from normal GCC
40760practice by not using the '__builtin_' prefix and also by being
40761overloaded so that they work on multiple types.
40762
40763 The definition given in the Intel documentation allows only for the use
40764of the types 'int', 'long', 'long long' or their unsigned counterparts.
40765GCC allows any scalar type that is 1, 2, 4 or 8 bytes in size other than
40766the C type '_Bool' or the C++ type 'bool'.  Operations on pointer
40767arguments are performed as if the operands were of the 'uintptr_t' type.
40768That is, they are not scaled by the size of the type to which the
40769pointer points.
40770
40771 These functions are implemented in terms of the '__atomic' builtins
40772(*note __atomic Builtins::).  They should not be used for new code which
40773should use the '__atomic' builtins instead.
40774
40775 Not all operations are supported by all target processors.  If a
40776particular operation cannot be implemented on the target processor, a
40777warning is generated and a call to an external function is generated.
40778The external function carries the same name as the built-in version,
40779with an additional suffix '_N' where N is the size of the data type.
40780
40781 In most cases, these built-in functions are considered a "full
40782barrier".  That is, no memory operand is moved across the operation,
40783either forward or backward.  Further, instructions are issued as
40784necessary to prevent the processor from speculating loads across the
40785operation and from queuing stores after the operation.
40786
40787 All of the routines are described in the Intel documentation to take
40788"an optional list of variables protected by the memory barrier".  It's
40789not clear what is meant by that; it could mean that _only_ the listed
40790variables are protected, or it could mean a list of additional variables
40791to be protected.  The list is ignored by GCC which treats it as empty.
40792GCC interprets an empty list as meaning that all globally accessible
40793variables should be protected.
40794
40795'TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
40796'TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
40797'TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
40798'TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
40799'TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
40800'TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
40801     These built-in functions perform the operation suggested by the
40802     name, and returns the value that had previously been in memory.
40803     That is, operations on integer operands have the following
40804     semantics.  Operations on pointer arguments are performed as if the
40805     operands were of the 'uintptr_t' type.  That is, they are not
40806     scaled by the size of the type to which the pointer points.
40807
40808          { tmp = *ptr; *ptr OP= value; return tmp; }
40809          { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand
40810
40811     The object pointed to by the first argument must be of integer or
40812     pointer type.  It must not be a boolean type.
40813
40814     _Note:_ GCC 4.4 and later implement '__sync_fetch_and_nand' as
40815     '*ptr = ~(tmp & value)' instead of '*ptr = ~tmp & value'.
40816
40817'TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
40818'TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
40819'TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
40820'TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
40821'TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
40822'TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
40823     These built-in functions perform the operation suggested by the
40824     name, and return the new value.  That is, operations on integer
40825     operands have the following semantics.  Operations on pointer
40826     operands are performed as if the operand's type were 'uintptr_t'.
40827
40828          { *ptr OP= value; return *ptr; }
40829          { *ptr = ~(*ptr & value); return *ptr; }   // nand
40830
40831     The same constraints on arguments apply as for the corresponding
40832     '__sync_op_and_fetch' built-in functions.
40833
40834     _Note:_ GCC 4.4 and later implement '__sync_nand_and_fetch' as
40835     '*ptr = ~(*ptr & value)' instead of '*ptr = ~*ptr & value'.
40836
40837'bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
40838'TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
40839     These built-in functions perform an atomic compare and swap.  That
40840     is, if the current value of '*PTR' is OLDVAL, then write NEWVAL
40841     into '*PTR'.
40842
40843     The "bool" version returns 'true' if the comparison is successful
40844     and NEWVAL is written.  The "val" version returns the contents of
40845     '*PTR' before the operation.
40846
40847'__sync_synchronize (...)'
40848     This built-in function issues a full memory barrier.
40849
40850'TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
40851     This built-in function, as described by Intel, is not a traditional
40852     test-and-set operation, but rather an atomic exchange operation.
40853     It writes VALUE into '*PTR', and returns the previous contents of
40854     '*PTR'.
40855
40856     Many targets have only minimal support for such locks, and do not
40857     support a full exchange operation.  In this case, a target may
40858     support reduced functionality here by which the _only_ valid value
40859     to store is the immediate constant 1.  The exact value actually
40860     stored in '*PTR' is implementation defined.
40861
40862     This built-in function is not a full barrier, but rather an
40863     "acquire barrier".  This means that references after the operation
40864     cannot move to (or be speculated to) before the operation, but
40865     previous memory stores may not be globally visible yet, and
40866     previous memory loads may not yet be satisfied.
40867
40868'void __sync_lock_release (TYPE *ptr, ...)'
40869     This built-in function releases the lock acquired by
40870     '__sync_lock_test_and_set'.  Normally this means writing the
40871     constant 0 to '*PTR'.
40872
40873     This built-in function is not a full barrier, but rather a "release
40874     barrier".  This means that all previous memory stores are globally
40875     visible, and all previous memory loads have been satisfied, but
40876     following memory reads are not prevented from being speculated to
40877     before the barrier.
40878
40879
40880File: gcc.info,  Node: __atomic Builtins,  Next: Integer Overflow Builtins,  Prev: __sync Builtins,  Up: C Extensions
40881
408826.55 Built-in Functions for Memory Model Aware Atomic Operations
40883================================================================
40884
40885The following built-in functions approximately match the requirements
40886for the C++11 memory model.  They are all identified by being prefixed
40887with '__atomic' and most are overloaded so that they work with multiple
40888types.
40889
40890 These functions are intended to replace the legacy '__sync' builtins.
40891The main difference is that the memory order that is requested is a
40892parameter to the functions.  New code should always use the '__atomic'
40893builtins rather than the '__sync' builtins.
40894
40895 Note that the '__atomic' builtins assume that programs will conform to
40896the C++11 memory model.  In particular, they assume that programs are
40897free of data races.  See the C++11 standard for detailed requirements.
40898
40899 The '__atomic' builtins can be used with any integral scalar or pointer
40900type that is 1, 2, 4, or 8 bytes in length.  16-byte integral types are
40901also allowed if '__int128' (*note __int128::) is supported by the
40902architecture.
40903
40904 The four non-arithmetic functions (load, store, exchange, and
40905compare_exchange) all have a generic version as well.  This generic
40906version works on any data type.  It uses the lock-free built-in function
40907if the specific data type size makes that possible; otherwise, an
40908external call is left to be resolved at run time.  This external call is
40909the same format with the addition of a 'size_t' parameter inserted as
40910the first parameter indicating the size of the object being pointed to.
40911All objects must be the same size.
40912
40913 There are 6 different memory orders that can be specified.  These map
40914to the C++11 memory orders with the same names, see the C++11 standard
40915or the GCC wiki on atomic synchronization
40916(http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for detailed
40917definitions.  Individual targets may also support additional memory
40918orders for use on specific architectures.  Refer to the target
40919documentation for details of these.
40920
40921 An atomic operation can both constrain code motion and be mapped to
40922hardware instructions for synchronization between threads (e.g., a
40923fence).  To which extent this happens is controlled by the memory
40924orders, which are listed here in approximately ascending order of
40925strength.  The description of each memory order is only meant to roughly
40926illustrate the effects and is not a specification; see the C++11 memory
40927model for precise semantics.
40928
40929'__ATOMIC_RELAXED'
40930     Implies no inter-thread ordering constraints.
40931'__ATOMIC_CONSUME'
40932     This is currently implemented using the stronger '__ATOMIC_ACQUIRE'
40933     memory order because of a deficiency in C++11's semantics for
40934     'memory_order_consume'.
40935'__ATOMIC_ACQUIRE'
40936     Creates an inter-thread happens-before constraint from the release
40937     (or stronger) semantic store to this acquire load.  Can prevent
40938     hoisting of code to before the operation.
40939'__ATOMIC_RELEASE'
40940     Creates an inter-thread happens-before constraint to acquire (or
40941     stronger) semantic loads that read from this release store.  Can
40942     prevent sinking of code to after the operation.
40943'__ATOMIC_ACQ_REL'
40944     Combines the effects of both '__ATOMIC_ACQUIRE' and
40945     '__ATOMIC_RELEASE'.
40946'__ATOMIC_SEQ_CST'
40947     Enforces total ordering with all other '__ATOMIC_SEQ_CST'
40948     operations.
40949
40950 Note that in the C++11 memory model, _fences_ (e.g.,
40951'__atomic_thread_fence') take effect in combination with other atomic
40952operations on specific memory locations (e.g., atomic loads); operations
40953on specific memory locations do not necessarily affect other operations
40954in the same way.
40955
40956 Target architectures are encouraged to provide their own patterns for
40957each of the atomic built-in functions.  If no target is provided, the
40958original non-memory model set of '__sync' atomic built-in functions are
40959used, along with any required synchronization fences surrounding it in
40960order to achieve the proper behavior.  Execution in this case is subject
40961to the same restrictions as those built-in functions.
40962
40963 If there is no pattern or mechanism to provide a lock-free instruction
40964sequence, a call is made to an external routine with the same parameters
40965to be resolved at run time.
40966
40967 When implementing patterns for these built-in functions, the memory
40968order parameter can be ignored as long as the pattern implements the
40969most restrictive '__ATOMIC_SEQ_CST' memory order.  Any of the other
40970memory orders execute correctly with this memory order but they may not
40971execute as efficiently as they could with a more appropriate
40972implementation of the relaxed requirements.
40973
40974 Note that the C++11 standard allows for the memory order parameter to
40975be determined at run time rather than at compile time.  These built-in
40976functions map any run-time value to '__ATOMIC_SEQ_CST' rather than
40977invoke a runtime library call or inline a switch statement.  This is
40978standard compliant, safe, and the simplest approach for now.
40979
40980 The memory order parameter is a signed int, but only the lower 16 bits
40981are reserved for the memory order.  The remainder of the signed int is
40982reserved for target use and should be 0.  Use of the predefined atomic
40983values ensures proper usage.
40984
40985 -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memorder)
40986     This built-in function implements an atomic load operation.  It
40987     returns the contents of '*PTR'.
40988
40989     The valid memory order variants are '__ATOMIC_RELAXED',
40990     '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', and '__ATOMIC_CONSUME'.
40991
40992 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int
40993          memorder)
40994     This is the generic version of an atomic load.  It returns the
40995     contents of '*PTR' in '*RET'.
40996
40997 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int
40998          memorder)
40999     This built-in function implements an atomic store operation.  It
41000     writes 'VAL' into '*PTR'.
41001
41002     The valid memory order variants are '__ATOMIC_RELAXED',
41003     '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
41004
41005 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int
41006          memorder)
41007     This is the generic version of an atomic store.  It stores the
41008     value of '*VAL' into '*PTR'.
41009
41010 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val,
41011          int memorder)
41012     This built-in function implements an atomic exchange operation.  It
41013     writes VAL into '*PTR', and returns the previous contents of
41014     '*PTR'.
41015
41016     The valid memory order variants are '__ATOMIC_RELAXED',
41017     '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', '__ATOMIC_RELEASE', and
41018     '__ATOMIC_ACQ_REL'.
41019
41020 -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val,
41021          TYPE *ret, int memorder)
41022     This is the generic version of an atomic exchange.  It stores the
41023     contents of '*VAL' into '*PTR'.  The original value of '*PTR' is
41024     copied into '*RET'.
41025
41026 -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr, TYPE
41027          *expected, TYPE desired, bool weak, int success_memorder, int
41028          failure_memorder)
41029     This built-in function implements an atomic compare and exchange
41030     operation.  This compares the contents of '*PTR' with the contents
41031     of '*EXPECTED'.  If equal, the operation is a _read-modify-write_
41032     operation that writes DESIRED into '*PTR'.  If they are not equal,
41033     the operation is a _read_ and the current contents of '*PTR' are
41034     written into '*EXPECTED'.  WEAK is 'true' for weak
41035     compare_exchange, which may fail spuriously, and 'false' for the
41036     strong variation, which never fails spuriously.  Many targets only
41037     offer the strong variation and ignore the parameter.  When in
41038     doubt, use the strong variation.
41039
41040     If DESIRED is written into '*PTR' then 'true' is returned and
41041     memory is affected according to the memory order specified by
41042     SUCCESS_MEMORDER.  There are no restrictions on what memory order
41043     can be used here.
41044
41045     Otherwise, 'false' is returned and memory is affected according to
41046     FAILURE_MEMORDER.  This memory order cannot be '__ATOMIC_RELEASE'
41047     nor '__ATOMIC_ACQ_REL'.  It also cannot be a stronger order than
41048     that specified by SUCCESS_MEMORDER.
41049
41050 -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE
41051          *expected, TYPE *desired, bool weak, int success_memorder, int
41052          failure_memorder)
41053     This built-in function implements the generic version of
41054     '__atomic_compare_exchange'.  The function is virtually identical
41055     to '__atomic_compare_exchange_n', except the desired value is also
41056     a pointer.
41057
41058 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val, int
41059          memorder)
41060 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val, int
41061          memorder)
41062 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val, int
41063          memorder)
41064 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val, int
41065          memorder)
41066 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int
41067          memorder)
41068 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val,
41069          int memorder)
41070     These built-in functions perform the operation suggested by the
41071     name, and return the result of the operation.  Operations on
41072     pointer arguments are performed as if the operands were of the
41073     'uintptr_t' type.  That is, they are not scaled by the size of the
41074     type to which the pointer points.
41075
41076          { *ptr OP= val; return *ptr; }
41077          { *ptr = ~(*ptr & val); return *ptr; } // nand
41078
41079     The object pointed to by the first argument must be of integer or
41080     pointer type.  It must not be a boolean type.  All memory orders
41081     are valid.
41082
41083 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val, int
41084          memorder)
41085 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val, int
41086          memorder)
41087 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val, int
41088          memorder)
41089 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val, int
41090          memorder)
41091 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int
41092          memorder)
41093 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val,
41094          int memorder)
41095     These built-in functions perform the operation suggested by the
41096     name, and return the value that had previously been in '*PTR'.
41097     Operations on pointer arguments are performed as if the operands
41098     were of the 'uintptr_t' type.  That is, they are not scaled by the
41099     size of the type to which the pointer points.
41100
41101          { tmp = *ptr; *ptr OP= val; return tmp; }
41102          { tmp = *ptr; *ptr = ~(*ptr & val); return tmp; } // nand
41103
41104     The same constraints on arguments apply as for the corresponding
41105     '__atomic_op_fetch' built-in functions.  All memory orders are
41106     valid.
41107
41108 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int
41109          memorder)
41110
41111     This built-in function performs an atomic test-and-set operation on
41112     the byte at '*PTR'.  The byte is set to some implementation defined
41113     nonzero "set" value and the return value is 'true' if and only if
41114     the previous contents were "set".  It should be only used for
41115     operands of type 'bool' or 'char'.  For other types only part of
41116     the value may be set.
41117
41118     All memory orders are valid.
41119
41120 -- Built-in Function: void __atomic_clear (bool *ptr, int memorder)
41121
41122     This built-in function performs an atomic clear operation on
41123     '*PTR'.  After the operation, '*PTR' contains 0.  It should be only
41124     used for operands of type 'bool' or 'char' and in conjunction with
41125     '__atomic_test_and_set'.  For other types it may only clear
41126     partially.  If the type is not 'bool' prefer using
41127     '__atomic_store'.
41128
41129     The valid memory order variants are '__ATOMIC_RELAXED',
41130     '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
41131
41132 -- Built-in Function: void __atomic_thread_fence (int memorder)
41133
41134     This built-in function acts as a synchronization fence between
41135     threads based on the specified memory order.
41136
41137     All memory orders are valid.
41138
41139 -- Built-in Function: void __atomic_signal_fence (int memorder)
41140
41141     This built-in function acts as a synchronization fence between a
41142     thread and signal handlers based in the same thread.
41143
41144     All memory orders are valid.
41145
41146 -- Built-in Function: bool __atomic_always_lock_free (size_t size, void
41147          *ptr)
41148
41149     This built-in function returns 'true' if objects of SIZE bytes
41150     always generate lock-free atomic instructions for the target
41151     architecture.  SIZE must resolve to a compile-time constant and the
41152     result also resolves to a compile-time constant.
41153
41154     PTR is an optional pointer to the object that may be used to
41155     determine alignment.  A value of 0 indicates typical alignment
41156     should be used.  The compiler may also ignore this parameter.
41157
41158          if (__atomic_always_lock_free (sizeof (long long), 0))
41159
41160 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void
41161          *ptr)
41162
41163     This built-in function returns 'true' if objects of SIZE bytes
41164     always generate lock-free atomic instructions for the target
41165     architecture.  If the built-in function is not known to be
41166     lock-free, a call is made to a runtime routine named
41167     '__atomic_is_lock_free'.
41168
41169     PTR is an optional pointer to the object that may be used to
41170     determine alignment.  A value of 0 indicates typical alignment
41171     should be used.  The compiler may also ignore this parameter.
41172
41173
41174File: gcc.info,  Node: Integer Overflow Builtins,  Next: x86 specific memory model extensions for transactional memory,  Prev: __atomic Builtins,  Up: C Extensions
41175
411766.56 Built-in Functions to Perform Arithmetic with Overflow Checking
41177====================================================================
41178
41179The following built-in functions allow performing simple arithmetic
41180operations together with checking whether the operations overflowed.
41181
41182 -- Built-in Function: bool __builtin_add_overflow (TYPE1 a, TYPE2 b,
41183          TYPE3 *res)
41184 -- Built-in Function: bool __builtin_sadd_overflow (int a, int b, int
41185          *res)
41186 -- Built-in Function: bool __builtin_saddl_overflow (long int a, long
41187          int b, long int *res)
41188 -- Built-in Function: bool __builtin_saddll_overflow (long long int a,
41189          long long int b, long long int *res)
41190 -- Built-in Function: bool __builtin_uadd_overflow (unsigned int a,
41191          unsigned int b, unsigned int *res)
41192 -- Built-in Function: bool __builtin_uaddl_overflow (unsigned long int
41193          a, unsigned long int b, unsigned long int *res)
41194 -- Built-in Function: bool __builtin_uaddll_overflow (unsigned long
41195          long int a, unsigned long long int b, unsigned long long int
41196          *res)
41197
41198     These built-in functions promote the first two operands into
41199     infinite precision signed type and perform addition on those
41200     promoted operands.  The result is then cast to the type the third
41201     pointer argument points to and stored there.  If the stored result
41202     is equal to the infinite precision result, the built-in functions
41203     return 'false', otherwise they return 'true'.  As the addition is
41204     performed in infinite signed precision, these built-in functions
41205     have fully defined behavior for all argument values.
41206
41207     The first built-in function allows arbitrary integral types for
41208     operands and the result type must be pointer to some integral type
41209     other than enumerated or boolean type, the rest of the built-in
41210     functions have explicit integer types.
41211
41212     The compiler will attempt to use hardware instructions to implement
41213     these built-in functions where possible, like conditional jump on
41214     overflow after addition, conditional jump on carry etc.
41215
41216 -- Built-in Function: bool __builtin_sub_overflow (TYPE1 a, TYPE2 b,
41217          TYPE3 *res)
41218 -- Built-in Function: bool __builtin_ssub_overflow (int a, int b, int
41219          *res)
41220 -- Built-in Function: bool __builtin_ssubl_overflow (long int a, long
41221          int b, long int *res)
41222 -- Built-in Function: bool __builtin_ssubll_overflow (long long int a,
41223          long long int b, long long int *res)
41224 -- Built-in Function: bool __builtin_usub_overflow (unsigned int a,
41225          unsigned int b, unsigned int *res)
41226 -- Built-in Function: bool __builtin_usubl_overflow (unsigned long int
41227          a, unsigned long int b, unsigned long int *res)
41228 -- Built-in Function: bool __builtin_usubll_overflow (unsigned long
41229          long int a, unsigned long long int b, unsigned long long int
41230          *res)
41231
41232     These built-in functions are similar to the add overflow checking
41233     built-in functions above, except they perform subtraction, subtract
41234     the second argument from the first one, instead of addition.
41235
41236 -- Built-in Function: bool __builtin_mul_overflow (TYPE1 a, TYPE2 b,
41237          TYPE3 *res)
41238 -- Built-in Function: bool __builtin_smul_overflow (int a, int b, int
41239          *res)
41240 -- Built-in Function: bool __builtin_smull_overflow (long int a, long
41241          int b, long int *res)
41242 -- Built-in Function: bool __builtin_smulll_overflow (long long int a,
41243          long long int b, long long int *res)
41244 -- Built-in Function: bool __builtin_umul_overflow (unsigned int a,
41245          unsigned int b, unsigned int *res)
41246 -- Built-in Function: bool __builtin_umull_overflow (unsigned long int
41247          a, unsigned long int b, unsigned long int *res)
41248 -- Built-in Function: bool __builtin_umulll_overflow (unsigned long
41249          long int a, unsigned long long int b, unsigned long long int
41250          *res)
41251
41252     These built-in functions are similar to the add overflow checking
41253     built-in functions above, except they perform multiplication,
41254     instead of addition.
41255
41256 The following built-in functions allow checking if simple arithmetic
41257operation would overflow.
41258
41259 -- Built-in Function: bool __builtin_add_overflow_p (TYPE1 a, TYPE2 b,
41260          TYPE3 c)
41261 -- Built-in Function: bool __builtin_sub_overflow_p (TYPE1 a, TYPE2 b,
41262          TYPE3 c)
41263 -- Built-in Function: bool __builtin_mul_overflow_p (TYPE1 a, TYPE2 b,
41264          TYPE3 c)
41265
41266     These built-in functions are similar to '__builtin_add_overflow',
41267     '__builtin_sub_overflow', or '__builtin_mul_overflow', except that
41268     they don't store the result of the arithmetic operation anywhere
41269     and the last argument is not a pointer, but some expression with
41270     integral type other than enumerated or boolean type.
41271
41272     The built-in functions promote the first two operands into infinite
41273     precision signed type and perform addition on those promoted
41274     operands.  The result is then cast to the type of the third
41275     argument.  If the cast result is equal to the infinite precision
41276     result, the built-in functions return 'false', otherwise they
41277     return 'true'.  The value of the third argument is ignored, just
41278     the side effects in the third argument are evaluated, and no
41279     integral argument promotions are performed on the last argument.
41280     If the third argument is a bit-field, the type used for the result
41281     cast has the precision and signedness of the given bit-field,
41282     rather than precision and signedness of the underlying type.
41283
41284     For example, the following macro can be used to portably check, at
41285     compile-time, whether or not adding two constant integers will
41286     overflow, and perform the addition only when it is known to be safe
41287     and not to trigger a '-Woverflow' warning.
41288
41289          #define INT_ADD_OVERFLOW_P(a, b) \
41290             __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0)
41291
41292          enum {
41293              A = INT_MAX, B = 3,
41294              C = INT_ADD_OVERFLOW_P (A, B) ? 0 : A + B,
41295              D = __builtin_add_overflow_p (1, SCHAR_MAX, (signed char) 0)
41296          };
41297
41298     The compiler will attempt to use hardware instructions to implement
41299     these built-in functions where possible, like conditional jump on
41300     overflow after addition, conditional jump on carry etc.
41301
41302
41303File: gcc.info,  Node: x86 specific memory model extensions for transactional memory,  Next: Object Size Checking,  Prev: Integer Overflow Builtins,  Up: C Extensions
41304
413056.57 x86-Specific Memory Model Extensions for Transactional Memory
41306==================================================================
41307
41308The x86 architecture supports additional memory ordering flags to mark
41309critical sections for hardware lock elision.  These must be specified in
41310addition to an existing memory order to atomic intrinsics.
41311
41312'__ATOMIC_HLE_ACQUIRE'
41313     Start lock elision on a lock variable.  Memory order must be
41314     '__ATOMIC_ACQUIRE' or stronger.
41315'__ATOMIC_HLE_RELEASE'
41316     End lock elision on a lock variable.  Memory order must be
41317     '__ATOMIC_RELEASE' or stronger.
41318
41319 When a lock acquire fails, it is required for good performance to abort
41320the transaction quickly.  This can be done with a '_mm_pause'.
41321
41322     #include <immintrin.h> // For _mm_pause
41323
41324     int lockvar;
41325
41326     /* Acquire lock with lock elision */
41327     while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
41328         _mm_pause(); /* Abort failed transaction */
41329     ...
41330     /* Free lock with lock elision */
41331     __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
41332
41333
41334File: gcc.info,  Node: Object Size Checking,  Next: Other Builtins,  Prev: x86 specific memory model extensions for transactional memory,  Up: C Extensions
41335
413366.58 Object Size Checking Built-in Functions
41337============================================
41338
41339GCC implements a limited buffer overflow protection mechanism that can
41340prevent some buffer overflow attacks by determining the sizes of objects
41341into which data is about to be written and preventing the writes when
41342the size isn't sufficient.  The built-in functions described below yield
41343the best results when used together and when optimization is enabled.
41344For example, to detect object sizes across function boundaries or to
41345follow pointer assignments through non-trivial control flow they rely on
41346various optimization passes enabled with '-O2'.  However, to a limited
41347extent, they can be used without optimization as well.
41348
41349 -- Built-in Function: size_t __builtin_object_size (const void * PTR,
41350          int TYPE)
41351     is a built-in construct that returns a constant number of bytes
41352     from PTR to the end of the object PTR pointer points to (if known
41353     at compile time).  To determine the sizes of dynamically allocated
41354     objects the function relies on the allocation functions called to
41355     obtain the storage to be declared with the 'alloc_size' attribute
41356     (*note Common Function Attributes::).  '__builtin_object_size'
41357     never evaluates its arguments for side effects.  If there are any
41358     side effects in them, it returns '(size_t) -1' for TYPE 0 or 1 and
41359     '(size_t) 0' for TYPE 2 or 3.  If there are multiple objects PTR
41360     can point to and all of them are known at compile time, the
41361     returned number is the maximum of remaining byte counts in those
41362     objects if TYPE & 2 is 0 and minimum if nonzero.  If it is not
41363     possible to determine which objects PTR points to at compile time,
41364     '__builtin_object_size' should return '(size_t) -1' for TYPE 0 or 1
41365     and '(size_t) 0' for TYPE 2 or 3.
41366
41367     TYPE is an integer constant from 0 to 3.  If the least significant
41368     bit is clear, objects are whole variables, if it is set, a closest
41369     surrounding subobject is considered the object a pointer points to.
41370     The second bit determines if maximum or minimum of remaining bytes
41371     is computed.
41372
41373          struct V { char buf1[10]; int b; char buf2[10]; } var;
41374          char *p = &var.buf1[1], *q = &var.b;
41375
41376          /* Here the object p points to is var.  */
41377          assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
41378          /* The subobject p points to is var.buf1.  */
41379          assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
41380          /* The object q points to is var.  */
41381          assert (__builtin_object_size (q, 0)
41382                  == (char *) (&var + 1) - (char *) &var.b);
41383          /* The subobject q points to is var.b.  */
41384          assert (__builtin_object_size (q, 1) == sizeof (var.b));
41385
41386 There are built-in functions added for many common string operation
41387functions, e.g., for 'memcpy' '__builtin___memcpy_chk' built-in is
41388provided.  This built-in has an additional last argument, which is the
41389number of bytes remaining in the object the DEST argument points to or
41390'(size_t) -1' if the size is not known.
41391
41392 The built-in functions are optimized into the normal string functions
41393like 'memcpy' if the last argument is '(size_t) -1' or if it is known at
41394compile time that the destination object will not be overflowed.  If the
41395compiler can determine at compile time that the object will always be
41396overflowed, it issues a warning.
41397
41398 The intended use can be e.g.
41399
41400     #undef memcpy
41401     #define bos0(dest) __builtin_object_size (dest, 0)
41402     #define memcpy(dest, src, n) \
41403       __builtin___memcpy_chk (dest, src, n, bos0 (dest))
41404
41405     char *volatile p;
41406     char buf[10];
41407     /* It is unknown what object p points to, so this is optimized
41408        into plain memcpy - no checking is possible.  */
41409     memcpy (p, "abcde", n);
41410     /* Destination is known and length too.  It is known at compile
41411        time there will be no overflow.  */
41412     memcpy (&buf[5], "abcde", 5);
41413     /* Destination is known, but the length is not known at compile time.
41414        This will result in __memcpy_chk call that can check for overflow
41415        at run time.  */
41416     memcpy (&buf[5], "abcde", n);
41417     /* Destination is known and it is known at compile time there will
41418        be overflow.  There will be a warning and __memcpy_chk call that
41419        will abort the program at run time.  */
41420     memcpy (&buf[6], "abcde", 5);
41421
41422 Such built-in functions are provided for 'memcpy', 'mempcpy',
41423'memmove', 'memset', 'strcpy', 'stpcpy', 'strncpy', 'strcat' and
41424'strncat'.
41425
41426 There are also checking built-in functions for formatted output
41427functions.
41428     int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
41429     int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
41430                                   const char *fmt, ...);
41431     int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
41432                                   va_list ap);
41433     int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
41434                                    const char *fmt, va_list ap);
41435
41436 The added FLAG argument is passed unchanged to '__sprintf_chk' etc.
41437functions and can contain implementation specific flags on what
41438additional security measures the checking function might take, such as
41439handling '%n' differently.
41440
41441 The OS argument is the object size S points to, like in the other
41442built-in functions.  There is a small difference in the behavior though,
41443if OS is '(size_t) -1', the built-in functions are optimized into the
41444non-checking functions only if FLAG is 0, otherwise the checking
41445function is called with OS argument set to '(size_t) -1'.
41446
41447 In addition to this, there are checking built-in functions
41448'__builtin___printf_chk', '__builtin___vprintf_chk',
41449'__builtin___fprintf_chk' and '__builtin___vfprintf_chk'.  These have
41450just one additional argument, FLAG, right before format string FMT.  If
41451the compiler is able to optimize them to 'fputc' etc. functions, it
41452does, otherwise the checking function is called and the FLAG argument
41453passed to it.
41454
41455
41456File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Object Size Checking,  Up: C Extensions
41457
414586.59 Other Built-in Functions Provided by GCC
41459=============================================
41460
41461GCC provides a large number of built-in functions other than the ones
41462mentioned above.  Some of these are for internal use in the processing
41463of exceptions or variable-length argument lists and are not documented
41464here because they may change from time to time; we do not recommend
41465general use of these functions.
41466
41467 The remaining functions are provided for optimization purposes.
41468
41469 With the exception of built-ins that have library equivalents such as
41470the standard C library functions discussed below, or that expand to
41471library calls, GCC built-in functions are always expanded inline and
41472thus do not have corresponding entry points and their address cannot be
41473obtained.  Attempting to use them in an expression other than a function
41474call results in a compile-time error.
41475
41476 GCC includes built-in versions of many of the functions in the standard
41477C library.  These functions come in two forms: one whose names start
41478with the '__builtin_' prefix, and the other without.  Both forms have
41479the same type (including prototype), the same address (when their
41480address is taken), and the same meaning as the C library functions even
41481if you specify the '-fno-builtin' option *note C Dialect Options::).
41482Many of these functions are only optimized in certain cases; if they are
41483not optimized in a particular case, a call to the library function is
41484emitted.
41485
41486 Outside strict ISO C mode ('-ansi', '-std=c90', '-std=c99' or
41487'-std=c11'), the functions '_exit', 'alloca', 'bcmp', 'bzero',
41488'dcgettext', 'dgettext', 'dremf', 'dreml', 'drem', 'exp10f', 'exp10l',
41489'exp10', 'ffsll', 'ffsl', 'ffs', 'fprintf_unlocked', 'fputs_unlocked',
41490'gammaf', 'gammal', 'gamma', 'gammaf_r', 'gammal_r', 'gamma_r',
41491'gettext', 'index', 'isascii', 'j0f', 'j0l', 'j0', 'j1f', 'j1l', 'j1',
41492'jnf', 'jnl', 'jn', 'lgammaf_r', 'lgammal_r', 'lgamma_r', 'mempcpy',
41493'pow10f', 'pow10l', 'pow10', 'printf_unlocked', 'rindex', 'scalbf',
41494'scalbl', 'scalb', 'signbit', 'signbitf', 'signbitl', 'signbitd32',
41495'signbitd64', 'signbitd128', 'significandf', 'significandl',
41496'significand', 'sincosf', 'sincosl', 'sincos', 'stpcpy', 'stpncpy',
41497'strcasecmp', 'strdup', 'strfmon', 'strncasecmp', 'strndup', 'strnlen',
41498'toascii', 'y0f', 'y0l', 'y0', 'y1f', 'y1l', 'y1', 'ynf', 'ynl' and 'yn'
41499may be handled as built-in functions.  All these functions have
41500corresponding versions prefixed with '__builtin_', which may be used
41501even in strict C90 mode.
41502
41503 The ISO C99 functions '_Exit', 'acoshf', 'acoshl', 'acosh', 'asinhf',
41504'asinhl', 'asinh', 'atanhf', 'atanhl', 'atanh', 'cabsf', 'cabsl',
41505'cabs', 'cacosf', 'cacoshf', 'cacoshl', 'cacosh', 'cacosl', 'cacos',
41506'cargf', 'cargl', 'carg', 'casinf', 'casinhf', 'casinhl', 'casinh',
41507'casinl', 'casin', 'catanf', 'catanhf', 'catanhl', 'catanh', 'catanl',
41508'catan', 'cbrtf', 'cbrtl', 'cbrt', 'ccosf', 'ccoshf', 'ccoshl', 'ccosh',
41509'ccosl', 'ccos', 'cexpf', 'cexpl', 'cexp', 'cimagf', 'cimagl', 'cimag',
41510'clogf', 'clogl', 'clog', 'conjf', 'conjl', 'conj', 'copysignf',
41511'copysignl', 'copysign', 'cpowf', 'cpowl', 'cpow', 'cprojf', 'cprojl',
41512'cproj', 'crealf', 'creall', 'creal', 'csinf', 'csinhf', 'csinhl',
41513'csinh', 'csinl', 'csin', 'csqrtf', 'csqrtl', 'csqrt', 'ctanf',
41514'ctanhf', 'ctanhl', 'ctanh', 'ctanl', 'ctan', 'erfcf', 'erfcl', 'erfc',
41515'erff', 'erfl', 'erf', 'exp2f', 'exp2l', 'exp2', 'expm1f', 'expm1l',
41516'expm1', 'fdimf', 'fdiml', 'fdim', 'fmaf', 'fmal', 'fmaxf', 'fmaxl',
41517'fmax', 'fma', 'fminf', 'fminl', 'fmin', 'hypotf', 'hypotl', 'hypot',
41518'ilogbf', 'ilogbl', 'ilogb', 'imaxabs', 'isblank', 'iswblank',
41519'lgammaf', 'lgammal', 'lgamma', 'llabs', 'llrintf', 'llrintl', 'llrint',
41520'llroundf', 'llroundl', 'llround', 'log1pf', 'log1pl', 'log1p', 'log2f',
41521'log2l', 'log2', 'logbf', 'logbl', 'logb', 'lrintf', 'lrintl', 'lrint',
41522'lroundf', 'lroundl', 'lround', 'nearbyintf', 'nearbyintl', 'nearbyint',
41523'nextafterf', 'nextafterl', 'nextafter', 'nexttowardf', 'nexttowardl',
41524'nexttoward', 'remainderf', 'remainderl', 'remainder', 'remquof',
41525'remquol', 'remquo', 'rintf', 'rintl', 'rint', 'roundf', 'roundl',
41526'round', 'scalblnf', 'scalblnl', 'scalbln', 'scalbnf', 'scalbnl',
41527'scalbn', 'snprintf', 'tgammaf', 'tgammal', 'tgamma', 'truncf',
41528'truncl', 'trunc', 'vfscanf', 'vscanf', 'vsnprintf' and 'vsscanf' are
41529handled as built-in functions except in strict ISO C90 mode ('-ansi' or
41530'-std=c90').
41531
41532 There are also built-in versions of the ISO C99 functions 'acosf',
41533'acosl', 'asinf', 'asinl', 'atan2f', 'atan2l', 'atanf', 'atanl',
41534'ceilf', 'ceill', 'cosf', 'coshf', 'coshl', 'cosl', 'expf', 'expl',
41535'fabsf', 'fabsl', 'floorf', 'floorl', 'fmodf', 'fmodl', 'frexpf',
41536'frexpl', 'ldexpf', 'ldexpl', 'log10f', 'log10l', 'logf', 'logl',
41537'modfl', 'modf', 'powf', 'powl', 'sinf', 'sinhf', 'sinhl', 'sinl',
41538'sqrtf', 'sqrtl', 'tanf', 'tanhf', 'tanhl' and 'tanl' that are
41539recognized in any mode since ISO C90 reserves these names for the
41540purpose to which ISO C99 puts them.  All these functions have
41541corresponding versions prefixed with '__builtin_'.
41542
41543 There are also built-in functions '__builtin_fabsfN',
41544'__builtin_fabsfNx', '__builtin_copysignfN' and '__builtin_copysignfNx',
41545corresponding to the TS 18661-3 functions 'fabsfN', 'fabsfNx',
41546'copysignfN' and 'copysignfNx', for supported types '_FloatN' and
41547'_FloatNx'.
41548
41549 There are also GNU extension functions 'clog10', 'clog10f' and
41550'clog10l' which names are reserved by ISO C99 for future use.  All these
41551functions have versions prefixed with '__builtin_'.
41552
41553 The ISO C94 functions 'iswalnum', 'iswalpha', 'iswcntrl', 'iswdigit',
41554'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace', 'iswupper',
41555'iswxdigit', 'towlower' and 'towupper' are handled as built-in functions
41556except in strict ISO C90 mode ('-ansi' or '-std=c90').
41557
41558 The ISO C90 functions 'abort', 'abs', 'acos', 'asin', 'atan2', 'atan',
41559'calloc', 'ceil', 'cosh', 'cos', 'exit', 'exp', 'fabs', 'floor', 'fmod',
41560'fprintf', 'fputs', 'frexp', 'fscanf', 'isalnum', 'isalpha', 'iscntrl',
41561'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct', 'isspace',
41562'isupper', 'isxdigit', 'tolower', 'toupper', 'labs', 'ldexp', 'log10',
41563'log', 'malloc', 'memchr', 'memcmp', 'memcpy', 'memset', 'modf', 'pow',
41564'printf', 'putchar', 'puts', 'scanf', 'sinh', 'sin', 'snprintf',
41565'sprintf', 'sqrt', 'sscanf', 'strcat', 'strchr', 'strcmp', 'strcpy',
41566'strcspn', 'strlen', 'strncat', 'strncmp', 'strncpy', 'strpbrk',
41567'strrchr', 'strspn', 'strstr', 'tanh', 'tan', 'vfprintf', 'vprintf' and
41568'vsprintf' are all recognized as built-in functions unless
41569'-fno-builtin' is specified (or '-fno-builtin-FUNCTION' is specified for
41570an individual function).  All of these functions have corresponding
41571versions prefixed with '__builtin_'.
41572
41573 GCC provides built-in versions of the ISO C99 floating-point comparison
41574macros that avoid raising exceptions for unordered operands.  They have
41575the same names as the standard macros ( 'isgreater', 'isgreaterequal',
41576'isless', 'islessequal', 'islessgreater', and 'isunordered') , with
41577'__builtin_' prefixed.  We intend for a library implementor to be able
41578to simply '#define' each standard macro to its built-in equivalent.  In
41579the same fashion, GCC provides 'fpclassify', 'isfinite', 'isinf_sign',
41580'isnormal' and 'signbit' built-ins used with '__builtin_' prefixed.  The
41581'isinf' and 'isnan' built-in functions appear both with and without the
41582'__builtin_' prefix.
41583
41584 -- Built-in Function: void *__builtin_alloca (size_t size)
41585     The '__builtin_alloca' function must be called at block scope.  The
41586     function allocates an object SIZE bytes large on the stack of the
41587     calling function.  The object is aligned on the default stack
41588     alignment boundary for the target determined by the
41589     '__BIGGEST_ALIGNMENT__' macro.  The '__builtin_alloca' function
41590     returns a pointer to the first byte of the allocated object.  The
41591     lifetime of the allocated object ends just before the calling
41592     function returns to its caller.  This is so even when
41593     '__builtin_alloca' is called within a nested block.
41594
41595     For example, the following function allocates eight objects of 'n'
41596     bytes each on the stack, storing a pointer to each in consecutive
41597     elements of the array 'a'.  It then passes the array to function
41598     'g' which can safely use the storage pointed to by each of the
41599     array elements.
41600
41601          void f (unsigned n)
41602          {
41603            void *a [8];
41604            for (int i = 0; i != 8; ++i)
41605              a [i] = __builtin_alloca (n);
41606
41607            g (a, n);   // safe
41608          }
41609
41610     Since the '__builtin_alloca' function doesn't validate its argument
41611     it is the responsibility of its caller to make sure the argument
41612     doesn't cause it to exceed the stack size limit.  The
41613     '__builtin_alloca' function is provided to make it possible to
41614     allocate on the stack arrays of bytes with an upper bound that may
41615     be computed at run time.  Since C99 Variable Length Arrays offer
41616     similar functionality under a portable, more convenient, and safer
41617     interface they are recommended instead, in both C99 and C++
41618     programs where GCC provides them as an extension.  *Note Variable
41619     Length::, for details.
41620
41621 -- Built-in Function: void *__builtin_alloca_with_align (size_t size,
41622          size_t alignment)
41623     The '__builtin_alloca_with_align' function must be called at block
41624     scope.  The function allocates an object SIZE bytes large on the
41625     stack of the calling function.  The allocated object is aligned on
41626     the boundary specified by the argument ALIGNMENT whose unit is
41627     given in bits (not bytes).  The SIZE argument must be positive and
41628     not exceed the stack size limit.  The ALIGNMENT argument must be a
41629     constant integer expression that evaluates to a power of 2 greater
41630     than or equal to 'CHAR_BIT' and less than some unspecified maximum.
41631     Invocations with other values are rejected with an error indicating
41632     the valid bounds.  The function returns a pointer to the first byte
41633     of the allocated object.  The lifetime of the allocated object ends
41634     at the end of the block in which the function was called.  The
41635     allocated storage is released no later than just before the calling
41636     function returns to its caller, but may be released at the end of
41637     the block in which the function was called.
41638
41639     For example, in the following function the call to 'g' is unsafe
41640     because when 'overalign' is non-zero, the space allocated by
41641     '__builtin_alloca_with_align' may have been released at the end of
41642     the 'if' statement in which it was called.
41643
41644          void f (unsigned n, bool overalign)
41645          {
41646            void *p;
41647            if (overalign)
41648              p = __builtin_alloca_with_align (n, 64 /* bits */);
41649            else
41650              p = __builtin_alloc (n);
41651
41652            g (p, n);   // unsafe
41653          }
41654
41655     Since the '__builtin_alloca_with_align' function doesn't validate
41656     its SIZE argument it is the responsibility of its caller to make
41657     sure the argument doesn't cause it to exceed the stack size limit.
41658     The '__builtin_alloca_with_align' function is provided to make it
41659     possible to allocate on the stack overaligned arrays of bytes with
41660     an upper bound that may be computed at run time.  Since C99
41661     Variable Length Arrays offer the same functionality under a
41662     portable, more convenient, and safer interface they are recommended
41663     instead, in both C99 and C++ programs where GCC provides them as an
41664     extension.  *Note Variable Length::, for details.
41665
41666 -- Built-in Function: void *__builtin_alloca_with_align_and_max (size_t
41667          size, size_t alignment, size_t max_size)
41668     Similar to '__builtin_alloca_with_align' but takes an extra
41669     argument specifying an upper bound for SIZE in case its value
41670     cannot be computed at compile time, for use by '-fstack-usage',
41671     '-Wstack-usage' and '-Walloca-larger-than'.  MAX_SIZE must be a
41672     constant integer expression, it has no effect on code generation
41673     and no attempt is made to check its compatibility with SIZE.
41674
41675 -- Built-in Function: bool __builtin_has_attribute (TYPE-OR-EXPRESSION,
41676          ATTRIBUTE)
41677     The '__builtin_has_attribute' function evaluates to an integer
41678     constant expression equal to 'true' if the symbol or type
41679     referenced by the TYPE-OR-EXPRESSION argument has been declared
41680     with the ATTRIBUTE referenced by the second argument.  For an
41681     TYPE-OR-EXPRESSION argument that does not reference a symbol, since
41682     attributes do not apply to expressions the built-in consider the
41683     type of the argument.  Neither argument is evaluated.  The
41684     TYPE-OR-EXPRESSION argument is subject to the same restrictions as
41685     the argument to 'typeof' (*note Typeof::).  The ATTRIBUTE argument
41686     is an attribute name optionally followed by a comma-separated list
41687     of arguments enclosed in parentheses.  Both forms of attribute
41688     names--with and without double leading and trailing
41689     underscores--are recognized.  *Note Attribute Syntax::, for
41690     details.  When no attribute arguments are specified for an
41691     attribute that expects one or more arguments the function returns
41692     'true' if TYPE-OR-EXPRESSION has been declared with the attribute
41693     regardless of the attribute argument values.  Arguments provided
41694     for an attribute that expects some are validated and matched up to
41695     the provided number.  The function returns 'true' if all provided
41696     arguments match.  For example, the first call to the function below
41697     evaluates to 'true' because 'x' is declared with the 'aligned'
41698     attribute but the second call evaluates to 'false' because 'x' is
41699     declared 'aligned (8)' and not 'aligned (4)'.
41700
41701          __attribute__ ((aligned (8))) int x;
41702          _Static_assert (__builtin_has_attribute (x, aligned), "aligned");
41703          _Static_assert (!__builtin_has_attribute (x, aligned (4)), "aligned (4)");
41704
41705     Due to a limitation the '__builtin_has_attribute' function returns
41706     'false' for the 'mode' attribute even if the type or variable
41707     referenced by the TYPE-OR-EXPRESSION argument was declared with
41708     one.  The function is also not supported with labels, and in C with
41709     enumerators.
41710
41711     Note that unlike the '__has_attribute' preprocessor operator which
41712     is suitable for use in '#if' preprocessing directives
41713     '__builtin_has_attribute' is an intrinsic function that is not
41714     recognized in such contexts.
41715
41716 -- Built-in Function: TYPE __builtin_speculation_safe_value (TYPE val,
41717          TYPE failval)
41718
41719     This built-in function can be used to help mitigate against unsafe
41720     speculative execution.  TYPE may be any integral type or any
41721     pointer type.
41722
41723       1. If the CPU is not speculatively executing the code, then VAL
41724          is returned.
41725       2. If the CPU is executing speculatively then either:
41726             * The function may cause execution to pause until it is
41727               known that the code is no-longer being executed
41728               speculatively (in which case VAL can be returned, as
41729               above); or
41730             * The function may use target-dependent speculation
41731               tracking state to cause FAILVAL to be returned when it is
41732               known that speculative execution has incorrectly
41733               predicted a conditional branch operation.
41734
41735     The second argument, FAILVAL, is optional and defaults to zero if
41736     omitted.
41737
41738     GCC defines the preprocessor macro
41739     '__HAVE_BUILTIN_SPECULATION_SAFE_VALUE' for targets that have been
41740     updated to support this builtin.
41741
41742     The built-in function can be used where a variable appears to be
41743     used in a safe way, but the CPU, due to speculative execution may
41744     temporarily ignore the bounds checks.  Consider, for example, the
41745     following function:
41746
41747          int array[500];
41748          int f (unsigned untrusted_index)
41749          {
41750            if (untrusted_index < 500)
41751              return array[untrusted_index];
41752            return 0;
41753          }
41754
41755     If the function is called repeatedly with 'untrusted_index' less
41756     than the limit of 500, then a branch predictor will learn that the
41757     block of code that returns a value stored in 'array' will be
41758     executed.  If the function is subsequently called with an
41759     out-of-range value it will still try to execute that block of code
41760     first until the CPU determines that the prediction was incorrect
41761     (the CPU will unwind any incorrect operations at that point).
41762     However, depending on how the result of the function is used, it
41763     might be possible to leave traces in the cache that can reveal what
41764     was stored at the out-of-bounds location.  The built-in function
41765     can be used to provide some protection against leaking data in this
41766     way by changing the code to:
41767
41768          int array[500];
41769          int f (unsigned untrusted_index)
41770          {
41771            if (untrusted_index < 500)
41772              return array[__builtin_speculation_safe_value (untrusted_index)];
41773            return 0;
41774          }
41775
41776     The built-in function will either cause execution to stall until
41777     the conditional branch has been fully resolved, or it may permit
41778     speculative execution to continue, but using 0 instead of
41779     'untrusted_value' if that exceeds the limit.
41780
41781     If accessing any memory location is potentially unsafe when
41782     speculative execution is incorrect, then the code can be rewritten
41783     as
41784
41785          int array[500];
41786          int f (unsigned untrusted_index)
41787          {
41788            if (untrusted_index < 500)
41789              return *__builtin_speculation_safe_value (&array[untrusted_index], NULL);
41790            return 0;
41791          }
41792
41793     which will cause a 'NULL' pointer to be used for the unsafe case.
41794
41795 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
41796
41797     You can use the built-in function '__builtin_types_compatible_p' to
41798     determine whether two types are the same.
41799
41800     This built-in function returns 1 if the unqualified versions of the
41801     types TYPE1 and TYPE2 (which are types, not expressions) are
41802     compatible, 0 otherwise.  The result of this built-in function can
41803     be used in integer constant expressions.
41804
41805     This built-in function ignores top level qualifiers (e.g., 'const',
41806     'volatile').  For example, 'int' is equivalent to 'const int'.
41807
41808     The type 'int[]' and 'int[5]' are compatible.  On the other hand,
41809     'int' and 'char *' are not compatible, even if the size of their
41810     types, on the particular architecture are the same.  Also, the
41811     amount of pointer indirection is taken into account when
41812     determining similarity.  Consequently, 'short *' is not similar to
41813     'short **'.  Furthermore, two types that are typedefed are
41814     considered compatible if their underlying types are compatible.
41815
41816     An 'enum' type is not considered to be compatible with another
41817     'enum' type even if both are compatible with the same integer type;
41818     this is what the C standard specifies.  For example, 'enum {foo,
41819     bar}' is not similar to 'enum {hot, dog}'.
41820
41821     You typically use this function in code whose execution varies
41822     depending on the arguments' types.  For example:
41823
41824          #define foo(x)                                                  \
41825            ({                                                           \
41826              typeof (x) tmp = (x);                                       \
41827              if (__builtin_types_compatible_p (typeof (x), long double)) \
41828                tmp = foo_long_double (tmp);                              \
41829              else if (__builtin_types_compatible_p (typeof (x), double)) \
41830                tmp = foo_double (tmp);                                   \
41831              else if (__builtin_types_compatible_p (typeof (x), float))  \
41832                tmp = foo_float (tmp);                                    \
41833              else                                                        \
41834                abort ();                                                 \
41835              tmp;                                                        \
41836            })
41837
41838     _Note:_ This construct is only available for C.
41839
41840 -- Built-in Function: TYPE __builtin_call_with_static_chain (CALL_EXP,
41841          POINTER_EXP)
41842
41843     The CALL_EXP expression must be a function call, and the
41844     POINTER_EXP expression must be a pointer.  The POINTER_EXP is
41845     passed to the function call in the target's static chain location.
41846     The result of builtin is the result of the function call.
41847
41848     _Note:_ This builtin is only available for C.  This builtin can be
41849     used to call Go closures from C.
41850
41851 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
41852          EXP2)
41853
41854     You can use the built-in function '__builtin_choose_expr' to
41855     evaluate code depending on the value of a constant expression.
41856     This built-in function returns EXP1 if CONST_EXP, which is an
41857     integer constant expression, is nonzero.  Otherwise it returns
41858     EXP2.
41859
41860     This built-in function is analogous to the '? :' operator in C,
41861     except that the expression returned has its type unaltered by
41862     promotion rules.  Also, the built-in function does not evaluate the
41863     expression that is not chosen.  For example, if CONST_EXP evaluates
41864     to 'true', EXP2 is not evaluated even if it has side effects.
41865
41866     This built-in function can return an lvalue if the chosen argument
41867     is an lvalue.
41868
41869     If EXP1 is returned, the return type is the same as EXP1's type.
41870     Similarly, if EXP2 is returned, its return type is the same as
41871     EXP2.
41872
41873     Example:
41874
41875          #define foo(x)                                                    \
41876            __builtin_choose_expr (                                         \
41877              __builtin_types_compatible_p (typeof (x), double),            \
41878              foo_double (x),                                               \
41879              __builtin_choose_expr (                                       \
41880                __builtin_types_compatible_p (typeof (x), float),           \
41881                foo_float (x),                                              \
41882                /* The void expression results in a compile-time error  \
41883                   when assigning the result to something.  */          \
41884                (void)0))
41885
41886     _Note:_ This construct is only available for C.  Furthermore, the
41887     unused expression (EXP1 or EXP2 depending on the value of
41888     CONST_EXP) may still generate syntax errors.  This may change in
41889     future revisions.
41890
41891 -- Built-in Function: TYPE __builtin_tgmath (FUNCTIONS, ARGUMENTS)
41892
41893     The built-in function '__builtin_tgmath', available only for C and
41894     Objective-C, calls a function determined according to the rules of
41895     '<tgmath.h>' macros.  It is intended to be used in implementations
41896     of that header, so that expansions of macros from that header only
41897     expand each of their arguments once, to avoid problems when calls
41898     to such macros are nested inside the arguments of other calls to
41899     such macros; in addition, it results in better diagnostics for
41900     invalid calls to '<tgmath.h>' macros than implementations using
41901     other GNU C language features.  For example, the 'pow' type-generic
41902     macro might be defined as:
41903
41904          #define pow(a, b) __builtin_tgmath (powf, pow, powl, \
41905                                              cpowf, cpow, cpowl, a, b)
41906
41907     The arguments to '__builtin_tgmath' are at least two pointers to
41908     functions, followed by the arguments to the type-generic macro
41909     (which will be passed as arguments to the selected function).  All
41910     the pointers to functions must be pointers to prototyped functions,
41911     none of which may have variable arguments, and all of which must
41912     have the same number of parameters; the number of parameters of the
41913     first function determines how many arguments to '__builtin_tgmath'
41914     are interpreted as function pointers, and how many as the arguments
41915     to the called function.
41916
41917     The types of the specified functions must all be different, but
41918     related to each other in the same way as a set of functions that
41919     may be selected between by a macro in '<tgmath.h>'.  This means
41920     that the functions are parameterized by a floating-point type T,
41921     different for each such function.  The function return types may
41922     all be the same type, or they may be T for each function, or they
41923     may be the real type corresponding to T for each function (if some
41924     of the types T are complex).  Likewise, for each parameter
41925     position, the type of the parameter in that position may always be
41926     the same type, or may be T for each function (this case must apply
41927     for at least one parameter position), or may be the real type
41928     corresponding to T for each function.
41929
41930     The standard rules for '<tgmath.h>' macros are used to find a
41931     common type U from the types of the arguments for parameters whose
41932     types vary between the functions; complex integer types (a GNU
41933     extension) are treated like '_Complex double' for this purpose (or
41934     '_Complex _Float64' if all the function return types are the same
41935     '_FloatN' or '_FloatNx' type).  If the function return types vary,
41936     or are all the same integer type, the function called is the one
41937     for which T is U, and it is an error if there is no such function.
41938     If the function return types are all the same floating-point type,
41939     the type-generic macro is taken to be one of those from TS 18661
41940     that rounds the result to a narrower type; if there is a function
41941     for which T is U, it is called, and otherwise the first function,
41942     if any, for which T has at least the range and precision of U is
41943     called, and it is an error if there is no such function.
41944
41945 -- Built-in Function: TYPE __builtin_complex (REAL, IMAG)
41946
41947     The built-in function '__builtin_complex' is provided for use in
41948     implementing the ISO C11 macros 'CMPLXF', 'CMPLX' and 'CMPLXL'.
41949     REAL and IMAG must have the same type, a real binary floating-point
41950     type, and the result has the corresponding complex type with real
41951     and imaginary parts REAL and IMAG.  Unlike 'REAL + I * IMAG', this
41952     works even when infinities, NaNs and negative zeros are involved.
41953
41954 -- Built-in Function: int __builtin_constant_p (EXP)
41955     You can use the built-in function '__builtin_constant_p' to
41956     determine if a value is known to be constant at compile time and
41957     hence that GCC can perform constant-folding on expressions
41958     involving that value.  The argument of the function is the value to
41959     test.  The function returns the integer 1 if the argument is known
41960     to be a compile-time constant and 0 if it is not known to be a
41961     compile-time constant.  A return of 0 does not indicate that the
41962     value is _not_ a constant, but merely that GCC cannot prove it is a
41963     constant with the specified value of the '-O' option.
41964
41965     You typically use this function in an embedded application where
41966     memory is a critical resource.  If you have some complex
41967     calculation, you may want it to be folded if it involves constants,
41968     but need to call a function if it does not.  For example:
41969
41970          #define Scale_Value(X)      \
41971            (__builtin_constant_p (X) \
41972            ? ((X) * SCALE + OFFSET) : Scale (X))
41973
41974     You may use this built-in function in either a macro or an inline
41975     function.  However, if you use it in an inlined function and pass
41976     an argument of the function as the argument to the built-in, GCC
41977     never returns 1 when you call the inline function with a string
41978     constant or compound literal (*note Compound Literals::) and does
41979     not return 1 when you pass a constant numeric value to the inline
41980     function unless you specify the '-O' option.
41981
41982     You may also use '__builtin_constant_p' in initializers for static
41983     data.  For instance, you can write
41984
41985          static const int table[] = {
41986             __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
41987             /* ... */
41988          };
41989
41990     This is an acceptable initializer even if EXPRESSION is not a
41991     constant expression, including the case where
41992     '__builtin_constant_p' returns 1 because EXPRESSION can be folded
41993     to a constant but EXPRESSION contains operands that are not
41994     otherwise permitted in a static initializer (for example, '0 && foo
41995     ()').  GCC must be more conservative about evaluating the built-in
41996     in this case, because it has no opportunity to perform
41997     optimization.
41998
41999 -- Built-in Function: bool __builtin_is_constant_evaluated (void)
42000     The '__builtin_is_constant_evaluated' function is available only in
42001     C++.  The built-in is intended to be used by implementations of the
42002     'std::is_constant_evaluated' C++ function.  Programs should make
42003     use of the latter function rather than invoking the built-in
42004     directly.
42005
42006     The main use case of the built-in is to determine whether a
42007     'constexpr' function is being called in a 'constexpr' context.  A
42008     call to the function evaluates to a core constant expression with
42009     the value 'true' if and only if it occurs within the evaluation of
42010     an expression or conversion that is manifestly constant-evaluated
42011     as defined in the C++ standard.  Manifestly constant-evaluated
42012     contexts include constant-expressions, the conditions of 'constexpr
42013     if' statements, constraint-expressions, and initializers of
42014     variables usable in constant expressions.  For more details refer
42015     to the latest revision of the C++ standard.
42016
42017 -- Built-in Function: long __builtin_expect (long EXP, long C)
42018     You may use '__builtin_expect' to provide the compiler with branch
42019     prediction information.  In general, you should prefer to use
42020     actual profile feedback for this ('-fprofile-arcs'), as programmers
42021     are notoriously bad at predicting how their programs actually
42022     perform.  However, there are applications in which this data is
42023     hard to collect.
42024
42025     The return value is the value of EXP, which should be an integral
42026     expression.  The semantics of the built-in are that it is expected
42027     that EXP == C.  For example:
42028
42029          if (__builtin_expect (x, 0))
42030            foo ();
42031
42032     indicates that we do not expect to call 'foo', since we expect 'x'
42033     to be zero.  Since you are limited to integral expressions for EXP,
42034     you should use constructions such as
42035
42036          if (__builtin_expect (ptr != NULL, 1))
42037            foo (*ptr);
42038
42039     when testing pointer or floating-point values.
42040
42041     For the purposes of branch prediction optimizations, the
42042     probability that a '__builtin_expect' expression is 'true' is
42043     controlled by GCC's 'builtin-expect-probability' parameter, which
42044     defaults to 90%.  You can also use
42045     '__builtin_expect_with_probability' to explicitly assign a
42046     probability value to individual expressions.
42047
42048 -- Built-in Function: long __builtin_expect_with_probability
42049     (long EXP, long C, double PROBABILITY)
42050
42051     This function has the same semantics as '__builtin_expect', but the
42052     caller provides the expected probability that EXP == C.  The last
42053     argument, PROBABILITY, is a floating-point value in the range 0.0
42054     to 1.0, inclusive.  The PROBABILITY argument must be constant
42055     floating-point expression.
42056
42057 -- Built-in Function: void __builtin_trap (void)
42058     This function causes the program to exit abnormally.  GCC
42059     implements this function by using a target-dependent mechanism
42060     (such as intentionally executing an illegal instruction) or by
42061     calling 'abort'.  The mechanism used may vary from release to
42062     release so you should not rely on any particular implementation.
42063
42064 -- Built-in Function: void __builtin_unreachable (void)
42065     If control flow reaches the point of the '__builtin_unreachable',
42066     the program is undefined.  It is useful in situations where the
42067     compiler cannot deduce the unreachability of the code.
42068
42069     One such case is immediately following an 'asm' statement that
42070     either never terminates, or one that transfers control elsewhere
42071     and never returns.  In this example, without the
42072     '__builtin_unreachable', GCC issues a warning that control reaches
42073     the end of a non-void function.  It also generates code to return
42074     after the 'asm'.
42075
42076          int f (int c, int v)
42077          {
42078            if (c)
42079              {
42080                return v;
42081              }
42082            else
42083              {
42084                asm("jmp error_handler");
42085                __builtin_unreachable ();
42086              }
42087          }
42088
42089     Because the 'asm' statement unconditionally transfers control out
42090     of the function, control never reaches the end of the function
42091     body.  The '__builtin_unreachable' is in fact unreachable and
42092     communicates this fact to the compiler.
42093
42094     Another use for '__builtin_unreachable' is following a call a
42095     function that never returns but that is not declared
42096     '__attribute__((noreturn))', as in this example:
42097
42098          void function_that_never_returns (void);
42099
42100          int g (int c)
42101          {
42102            if (c)
42103              {
42104                return 1;
42105              }
42106            else
42107              {
42108                function_that_never_returns ();
42109                __builtin_unreachable ();
42110              }
42111          }
42112
42113 -- Built-in Function: void * __builtin_assume_aligned (const void *EXP,
42114          size_t ALIGN, ...)
42115     This function returns its first argument, and allows the compiler
42116     to assume that the returned pointer is at least ALIGN bytes
42117     aligned.  This built-in can have either two or three arguments, if
42118     it has three, the third argument should have integer type, and if
42119     it is nonzero means misalignment offset.  For example:
42120
42121          void *x = __builtin_assume_aligned (arg, 16);
42122
42123     means that the compiler can assume 'x', set to 'arg', is at least
42124     16-byte aligned, while:
42125
42126          void *x = __builtin_assume_aligned (arg, 32, 8);
42127
42128     means that the compiler can assume for 'x', set to 'arg', that
42129     '(char *) x - 8' is 32-byte aligned.
42130
42131 -- Built-in Function: int __builtin_LINE ()
42132     This function is the equivalent of the preprocessor '__LINE__'
42133     macro and returns a constant integer expression that evaluates to
42134     the line number of the invocation of the built-in.  When used as a
42135     C++ default argument for a function F, it returns the line number
42136     of the call to F.
42137
42138 -- Built-in Function: const char * __builtin_FUNCTION ()
42139     This function is the equivalent of the '__FUNCTION__' symbol and
42140     returns an address constant pointing to the name of the function
42141     from which the built-in was invoked, or the empty string if the
42142     invocation is not at function scope.  When used as a C++ default
42143     argument for a function F, it returns the name of F's caller or the
42144     empty string if the call was not made at function scope.
42145
42146 -- Built-in Function: const char * __builtin_FILE ()
42147     This function is the equivalent of the preprocessor '__FILE__'
42148     macro and returns an address constant pointing to the file name
42149     containing the invocation of the built-in, or the empty string if
42150     the invocation is not at function scope.  When used as a C++
42151     default argument for a function F, it returns the file name of the
42152     call to F or the empty string if the call was not made at function
42153     scope.
42154
42155     For example, in the following, each call to function 'foo' will
42156     print a line similar to '"file.c:123: foo: message"' with the name
42157     of the file and the line number of the 'printf' call, the name of
42158     the function 'foo', followed by the word 'message'.
42159
42160          const char*
42161          function (const char *func = __builtin_FUNCTION ())
42162          {
42163            return func;
42164          }
42165
42166          void foo (void)
42167          {
42168            printf ("%s:%i: %s: message\n", file (), line (), function ());
42169          }
42170
42171 -- Built-in Function: void __builtin___clear_cache (void *BEGIN, void
42172          *END)
42173     This function is used to flush the processor's instruction cache
42174     for the region of memory between BEGIN inclusive and END exclusive.
42175     Some targets require that the instruction cache be flushed, after
42176     modifying memory containing code, in order to obtain deterministic
42177     behavior.
42178
42179     If the target does not require instruction cache flushes,
42180     '__builtin___clear_cache' has no effect.  Otherwise either
42181     instructions are emitted in-line to clear the instruction cache or
42182     a call to the '__clear_cache' function in libgcc is made.
42183
42184 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
42185     This function is used to minimize cache-miss latency by moving data
42186     into a cache before it is accessed.  You can insert calls to
42187     '__builtin_prefetch' into code for which you know addresses of data
42188     in memory that is likely to be accessed soon.  If the target
42189     supports them, data prefetch instructions are generated.  If the
42190     prefetch is done early enough before the access then the data will
42191     be in the cache by the time it is accessed.
42192
42193     The value of ADDR is the address of the memory to prefetch.  There
42194     are two optional arguments, RW and LOCALITY.  The value of RW is a
42195     compile-time constant one or zero; one means that the prefetch is
42196     preparing for a write to the memory address and zero, the default,
42197     means that the prefetch is preparing for a read.  The value
42198     LOCALITY must be a compile-time constant integer between zero and
42199     three.  A value of zero means that the data has no temporal
42200     locality, so it need not be left in the cache after the access.  A
42201     value of three means that the data has a high degree of temporal
42202     locality and should be left in all levels of cache possible.
42203     Values of one and two mean, respectively, a low or moderate degree
42204     of temporal locality.  The default is three.
42205
42206          for (i = 0; i < n; i++)
42207            {
42208              a[i] = a[i] + b[i];
42209              __builtin_prefetch (&a[i+j], 1, 1);
42210              __builtin_prefetch (&b[i+j], 0, 1);
42211              /* ... */
42212            }
42213
42214     Data prefetch does not generate faults if ADDR is invalid, but the
42215     address expression itself must be valid.  For example, a prefetch
42216     of 'p->next' does not fault if 'p->next' is not a valid address,
42217     but evaluation faults if 'p' is not a valid address.
42218
42219     If the target does not support data prefetch, the address
42220     expression is evaluated if it includes side effects but no other
42221     code is generated and GCC does not issue a warning.
42222
42223 -- Built-in Function: size_t __builtin_object_size (const void * PTR,
42224          int TYPE)
42225     Returns the size of an object pointed to by PTR.  *Note Object Size
42226     Checking::, for a detailed description of the function.
42227
42228 -- Built-in Function: double __builtin_huge_val (void)
42229     Returns a positive infinity, if supported by the floating-point
42230     format, else 'DBL_MAX'.  This function is suitable for implementing
42231     the ISO C macro 'HUGE_VAL'.
42232
42233 -- Built-in Function: float __builtin_huge_valf (void)
42234     Similar to '__builtin_huge_val', except the return type is 'float'.
42235
42236 -- Built-in Function: long double __builtin_huge_vall (void)
42237     Similar to '__builtin_huge_val', except the return type is 'long
42238     double'.
42239
42240 -- Built-in Function: _FloatN __builtin_huge_valfN (void)
42241     Similar to '__builtin_huge_val', except the return type is
42242     '_FloatN'.
42243
42244 -- Built-in Function: _FloatNx __builtin_huge_valfNx (void)
42245     Similar to '__builtin_huge_val', except the return type is
42246     '_FloatNx'.
42247
42248 -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
42249          int, ...)
42250     This built-in implements the C99 fpclassify functionality.  The
42251     first five int arguments should be the target library's notion of
42252     the possible FP classes and are used for return values.  They must
42253     be constant values and they must appear in this order: 'FP_NAN',
42254     'FP_INFINITE', 'FP_NORMAL', 'FP_SUBNORMAL' and 'FP_ZERO'.  The
42255     ellipsis is for exactly one floating-point value to classify.  GCC
42256     treats the last argument as type-generic, which means it does not
42257     do default promotion from float to double.
42258
42259 -- Built-in Function: double __builtin_inf (void)
42260     Similar to '__builtin_huge_val', except a warning is generated if
42261     the target floating-point format does not support infinities.
42262
42263 -- Built-in Function: _Decimal32 __builtin_infd32 (void)
42264     Similar to '__builtin_inf', except the return type is '_Decimal32'.
42265
42266 -- Built-in Function: _Decimal64 __builtin_infd64 (void)
42267     Similar to '__builtin_inf', except the return type is '_Decimal64'.
42268
42269 -- Built-in Function: _Decimal128 __builtin_infd128 (void)
42270     Similar to '__builtin_inf', except the return type is
42271     '_Decimal128'.
42272
42273 -- Built-in Function: float __builtin_inff (void)
42274     Similar to '__builtin_inf', except the return type is 'float'.
42275     This function is suitable for implementing the ISO C99 macro
42276     'INFINITY'.
42277
42278 -- Built-in Function: long double __builtin_infl (void)
42279     Similar to '__builtin_inf', except the return type is 'long
42280     double'.
42281
42282 -- Built-in Function: _FloatN __builtin_inffN (void)
42283     Similar to '__builtin_inf', except the return type is '_FloatN'.
42284
42285 -- Built-in Function: _FloatN __builtin_inffNx (void)
42286     Similar to '__builtin_inf', except the return type is '_FloatNx'.
42287
42288 -- Built-in Function: int __builtin_isinf_sign (...)
42289     Similar to 'isinf', except the return value is -1 for an argument
42290     of '-Inf' and 1 for an argument of '+Inf'.  Note while the
42291     parameter list is an ellipsis, this function only accepts exactly
42292     one floating-point argument.  GCC treats this parameter as
42293     type-generic, which means it does not do default promotion from
42294     float to double.
42295
42296 -- Built-in Function: double __builtin_nan (const char *str)
42297     This is an implementation of the ISO C99 function 'nan'.
42298
42299     Since ISO C99 defines this function in terms of 'strtod', which we
42300     do not implement, a description of the parsing is in order.  The
42301     string is parsed as by 'strtol'; that is, the base is recognized by
42302     leading '0' or '0x' prefixes.  The number parsed is placed in the
42303     significand such that the least significant bit of the number is at
42304     the least significant bit of the significand.  The number is
42305     truncated to fit the significand field provided.  The significand
42306     is forced to be a quiet NaN.
42307
42308     This function, if given a string literal all of which would have
42309     been consumed by 'strtol', is evaluated early enough that it is
42310     considered a compile-time constant.
42311
42312 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
42313     Similar to '__builtin_nan', except the return type is '_Decimal32'.
42314
42315 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
42316     Similar to '__builtin_nan', except the return type is '_Decimal64'.
42317
42318 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
42319     Similar to '__builtin_nan', except the return type is
42320     '_Decimal128'.
42321
42322 -- Built-in Function: float __builtin_nanf (const char *str)
42323     Similar to '__builtin_nan', except the return type is 'float'.
42324
42325 -- Built-in Function: long double __builtin_nanl (const char *str)
42326     Similar to '__builtin_nan', except the return type is 'long
42327     double'.
42328
42329 -- Built-in Function: _FloatN __builtin_nanfN (const char *str)
42330     Similar to '__builtin_nan', except the return type is '_FloatN'.
42331
42332 -- Built-in Function: _FloatNx __builtin_nanfNx (const char *str)
42333     Similar to '__builtin_nan', except the return type is '_FloatNx'.
42334
42335 -- Built-in Function: double __builtin_nans (const char *str)
42336     Similar to '__builtin_nan', except the significand is forced to be
42337     a signaling NaN.  The 'nans' function is proposed by WG14 N965.
42338
42339 -- Built-in Function: float __builtin_nansf (const char *str)
42340     Similar to '__builtin_nans', except the return type is 'float'.
42341
42342 -- Built-in Function: long double __builtin_nansl (const char *str)
42343     Similar to '__builtin_nans', except the return type is 'long
42344     double'.
42345
42346 -- Built-in Function: _FloatN __builtin_nansfN (const char *str)
42347     Similar to '__builtin_nans', except the return type is '_FloatN'.
42348
42349 -- Built-in Function: _FloatNx __builtin_nansfNx (const char *str)
42350     Similar to '__builtin_nans', except the return type is '_FloatNx'.
42351
42352 -- Built-in Function: int __builtin_ffs (int x)
42353     Returns one plus the index of the least significant 1-bit of X, or
42354     if X is zero, returns zero.
42355
42356 -- Built-in Function: int __builtin_clz (unsigned int x)
42357     Returns the number of leading 0-bits in X, starting at the most
42358     significant bit position.  If X is 0, the result is undefined.
42359
42360 -- Built-in Function: int __builtin_ctz (unsigned int x)
42361     Returns the number of trailing 0-bits in X, starting at the least
42362     significant bit position.  If X is 0, the result is undefined.
42363
42364 -- Built-in Function: int __builtin_clrsb (int x)
42365     Returns the number of leading redundant sign bits in X, i.e. the
42366     number of bits following the most significant bit that are
42367     identical to it.  There are no special cases for 0 or other values.
42368
42369 -- Built-in Function: int __builtin_popcount (unsigned int x)
42370     Returns the number of 1-bits in X.
42371
42372 -- Built-in Function: int __builtin_parity (unsigned int x)
42373     Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
42374
42375 -- Built-in Function: int __builtin_ffsl (long)
42376     Similar to '__builtin_ffs', except the argument type is 'long'.
42377
42378 -- Built-in Function: int __builtin_clzl (unsigned long)
42379     Similar to '__builtin_clz', except the argument type is 'unsigned
42380     long'.
42381
42382 -- Built-in Function: int __builtin_ctzl (unsigned long)
42383     Similar to '__builtin_ctz', except the argument type is 'unsigned
42384     long'.
42385
42386 -- Built-in Function: int __builtin_clrsbl (long)
42387     Similar to '__builtin_clrsb', except the argument type is 'long'.
42388
42389 -- Built-in Function: int __builtin_popcountl (unsigned long)
42390     Similar to '__builtin_popcount', except the argument type is
42391     'unsigned long'.
42392
42393 -- Built-in Function: int __builtin_parityl (unsigned long)
42394     Similar to '__builtin_parity', except the argument type is
42395     'unsigned long'.
42396
42397 -- Built-in Function: int __builtin_ffsll (long long)
42398     Similar to '__builtin_ffs', except the argument type is 'long
42399     long'.
42400
42401 -- Built-in Function: int __builtin_clzll (unsigned long long)
42402     Similar to '__builtin_clz', except the argument type is 'unsigned
42403     long long'.
42404
42405 -- Built-in Function: int __builtin_ctzll (unsigned long long)
42406     Similar to '__builtin_ctz', except the argument type is 'unsigned
42407     long long'.
42408
42409 -- Built-in Function: int __builtin_clrsbll (long long)
42410     Similar to '__builtin_clrsb', except the argument type is 'long
42411     long'.
42412
42413 -- Built-in Function: int __builtin_popcountll (unsigned long long)
42414     Similar to '__builtin_popcount', except the argument type is
42415     'unsigned long long'.
42416
42417 -- Built-in Function: int __builtin_parityll (unsigned long long)
42418     Similar to '__builtin_parity', except the argument type is
42419     'unsigned long long'.
42420
42421 -- Built-in Function: double __builtin_powi (double, int)
42422     Returns the first argument raised to the power of the second.
42423     Unlike the 'pow' function no guarantees about precision and
42424     rounding are made.
42425
42426 -- Built-in Function: float __builtin_powif (float, int)
42427     Similar to '__builtin_powi', except the argument and return types
42428     are 'float'.
42429
42430 -- Built-in Function: long double __builtin_powil (long double, int)
42431     Similar to '__builtin_powi', except the argument and return types
42432     are 'long double'.
42433
42434 -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x)
42435     Returns X with the order of the bytes reversed; for example,
42436     '0xaabb' becomes '0xbbaa'.  Byte here always means exactly 8 bits.
42437
42438 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x)
42439     Similar to '__builtin_bswap16', except the argument and return
42440     types are 32 bit.
42441
42442 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x)
42443     Similar to '__builtin_bswap32', except the argument and return
42444     types are 64 bit.
42445
42446 -- Built-in Function: Pmode __builtin_extend_pointer (void * x)
42447     On targets where the user visible pointer size is smaller than the
42448     size of an actual hardware address this function returns the
42449     extended user pointer.  Targets where this is true included ILP32
42450     mode on x86_64 or Aarch64.  This function is mainly useful when
42451     writing inline assembly code.
42452
42453 -- Built-in Function: int __builtin_goacc_parlevel_id (int x)
42454     Returns the openacc gang, worker or vector id depending on whether
42455     X is 0, 1 or 2.
42456
42457 -- Built-in Function: int __builtin_goacc_parlevel_size (int x)
42458     Returns the openacc gang, worker or vector size depending on
42459     whether X is 0, 1 or 2.
42460
42461
42462File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
42463
424646.60 Built-in Functions Specific to Particular Target Machines
42465==============================================================
42466
42467On some target machines, GCC supports many built-in functions specific
42468to those machines.  Generally these generate calls to specific machine
42469instructions, but allow the compiler to schedule those calls.
42470
42471* Menu:
42472
42473* AArch64 Built-in Functions::
42474* Alpha Built-in Functions::
42475* Altera Nios II Built-in Functions::
42476* ARC Built-in Functions::
42477* ARC SIMD Built-in Functions::
42478* ARM iWMMXt Built-in Functions::
42479* ARM C Language Extensions (ACLE)::
42480* ARM Floating Point Status and Control Intrinsics::
42481* ARM ARMv8-M Security Extensions::
42482* AVR Built-in Functions::
42483* Blackfin Built-in Functions::
42484* FR-V Built-in Functions::
42485* MIPS DSP Built-in Functions::
42486* MIPS Paired-Single Support::
42487* MIPS Loongson Built-in Functions::
42488* MIPS SIMD Architecture (MSA) Support::
42489* Other MIPS Built-in Functions::
42490* MSP430 Built-in Functions::
42491* NDS32 Built-in Functions::
42492* picoChip Built-in Functions::
42493* Basic PowerPC Built-in Functions::
42494* PowerPC AltiVec/VSX Built-in Functions::
42495* PowerPC Hardware Transactional Memory Built-in Functions::
42496* PowerPC Atomic Memory Operation Functions::
42497* RX Built-in Functions::
42498* S/390 System z Built-in Functions::
42499* SH Built-in Functions::
42500* SPARC VIS Built-in Functions::
42501* SPU Built-in Functions::
42502* TI C6X Built-in Functions::
42503* TILE-Gx Built-in Functions::
42504* TILEPro Built-in Functions::
42505* x86 Built-in Functions::
42506* x86 transactional memory intrinsics::
42507* x86 control-flow protection intrinsics::
42508
42509
42510File: gcc.info,  Node: AArch64 Built-in Functions,  Next: Alpha Built-in Functions,  Up: Target Builtins
42511
425126.60.1 AArch64 Built-in Functions
42513---------------------------------
42514
42515These built-in functions are available for the AArch64 family of
42516processors.
42517     unsigned int __builtin_aarch64_get_fpcr ()
42518     void __builtin_aarch64_set_fpcr (unsigned int)
42519     unsigned int __builtin_aarch64_get_fpsr ()
42520     void __builtin_aarch64_set_fpsr (unsigned int)
42521
42522
42523File: gcc.info,  Node: Alpha Built-in Functions,  Next: Altera Nios II Built-in Functions,  Prev: AArch64 Built-in Functions,  Up: Target Builtins
42524
425256.60.2 Alpha Built-in Functions
42526-------------------------------
42527
42528These built-in functions are available for the Alpha family of
42529processors, depending on the command-line switches used.
42530
42531 The following built-in functions are always available.  They all
42532generate the machine instruction that is part of the name.
42533
42534     long __builtin_alpha_implver (void)
42535     long __builtin_alpha_rpcc (void)
42536     long __builtin_alpha_amask (long)
42537     long __builtin_alpha_cmpbge (long, long)
42538     long __builtin_alpha_extbl (long, long)
42539     long __builtin_alpha_extwl (long, long)
42540     long __builtin_alpha_extll (long, long)
42541     long __builtin_alpha_extql (long, long)
42542     long __builtin_alpha_extwh (long, long)
42543     long __builtin_alpha_extlh (long, long)
42544     long __builtin_alpha_extqh (long, long)
42545     long __builtin_alpha_insbl (long, long)
42546     long __builtin_alpha_inswl (long, long)
42547     long __builtin_alpha_insll (long, long)
42548     long __builtin_alpha_insql (long, long)
42549     long __builtin_alpha_inswh (long, long)
42550     long __builtin_alpha_inslh (long, long)
42551     long __builtin_alpha_insqh (long, long)
42552     long __builtin_alpha_mskbl (long, long)
42553     long __builtin_alpha_mskwl (long, long)
42554     long __builtin_alpha_mskll (long, long)
42555     long __builtin_alpha_mskql (long, long)
42556     long __builtin_alpha_mskwh (long, long)
42557     long __builtin_alpha_msklh (long, long)
42558     long __builtin_alpha_mskqh (long, long)
42559     long __builtin_alpha_umulh (long, long)
42560     long __builtin_alpha_zap (long, long)
42561     long __builtin_alpha_zapnot (long, long)
42562
42563 The following built-in functions are always with '-mmax' or '-mcpu=CPU'
42564where CPU is 'pca56' or later.  They all generate the machine
42565instruction that is part of the name.
42566
42567     long __builtin_alpha_pklb (long)
42568     long __builtin_alpha_pkwb (long)
42569     long __builtin_alpha_unpkbl (long)
42570     long __builtin_alpha_unpkbw (long)
42571     long __builtin_alpha_minub8 (long, long)
42572     long __builtin_alpha_minsb8 (long, long)
42573     long __builtin_alpha_minuw4 (long, long)
42574     long __builtin_alpha_minsw4 (long, long)
42575     long __builtin_alpha_maxub8 (long, long)
42576     long __builtin_alpha_maxsb8 (long, long)
42577     long __builtin_alpha_maxuw4 (long, long)
42578     long __builtin_alpha_maxsw4 (long, long)
42579     long __builtin_alpha_perr (long, long)
42580
42581 The following built-in functions are always with '-mcix' or '-mcpu=CPU'
42582where CPU is 'ev67' or later.  They all generate the machine instruction
42583that is part of the name.
42584
42585     long __builtin_alpha_cttz (long)
42586     long __builtin_alpha_ctlz (long)
42587     long __builtin_alpha_ctpop (long)
42588
42589 The following built-in functions are available on systems that use the
42590OSF/1 PALcode.  Normally they invoke the 'rduniq' and 'wruniq' PAL
42591calls, but when invoked with '-mtls-kernel', they invoke 'rdval' and
42592'wrval'.
42593
42594     void *__builtin_thread_pointer (void)
42595     void __builtin_set_thread_pointer (void *)
42596
42597
42598File: gcc.info,  Node: Altera Nios II Built-in Functions,  Next: ARC Built-in Functions,  Prev: Alpha Built-in Functions,  Up: Target Builtins
42599
426006.60.3 Altera Nios II Built-in Functions
42601----------------------------------------
42602
42603These built-in functions are available for the Altera Nios II family of
42604processors.
42605
42606 The following built-in functions are always available.  They all
42607generate the machine instruction that is part of the name.
42608
42609     int __builtin_ldbio (volatile const void *)
42610     int __builtin_ldbuio (volatile const void *)
42611     int __builtin_ldhio (volatile const void *)
42612     int __builtin_ldhuio (volatile const void *)
42613     int __builtin_ldwio (volatile const void *)
42614     void __builtin_stbio (volatile void *, int)
42615     void __builtin_sthio (volatile void *, int)
42616     void __builtin_stwio (volatile void *, int)
42617     void __builtin_sync (void)
42618     int __builtin_rdctl (int)
42619     int __builtin_rdprs (int, int)
42620     void __builtin_wrctl (int, int)
42621     void __builtin_flushd (volatile void *)
42622     void __builtin_flushda (volatile void *)
42623     int __builtin_wrpie (int);
42624     void __builtin_eni (int);
42625     int __builtin_ldex (volatile const void *)
42626     int __builtin_stex (volatile void *, int)
42627     int __builtin_ldsex (volatile const void *)
42628     int __builtin_stsex (volatile void *, int)
42629
42630 The following built-in functions are always available.  They all
42631generate a Nios II Custom Instruction.  The name of the function
42632represents the types that the function takes and returns.  The letter
42633before the 'n' is the return type or void if absent.  The 'n' represents
42634the first parameter to all the custom instructions, the custom
42635instruction number.  The two letters after the 'n' represent the up to
42636two parameters to the function.
42637
42638 The letters represent the following data types:
42639'<no letter>'
42640     'void' for return type and no parameter for parameter types.
42641
42642'i'
42643     'int' for return type and parameter type
42644
42645'f'
42646     'float' for return type and parameter type
42647
42648'p'
42649     'void *' for return type and parameter type
42650
42651 And the function names are:
42652     void __builtin_custom_n (void)
42653     void __builtin_custom_ni (int)
42654     void __builtin_custom_nf (float)
42655     void __builtin_custom_np (void *)
42656     void __builtin_custom_nii (int, int)
42657     void __builtin_custom_nif (int, float)
42658     void __builtin_custom_nip (int, void *)
42659     void __builtin_custom_nfi (float, int)
42660     void __builtin_custom_nff (float, float)
42661     void __builtin_custom_nfp (float, void *)
42662     void __builtin_custom_npi (void *, int)
42663     void __builtin_custom_npf (void *, float)
42664     void __builtin_custom_npp (void *, void *)
42665     int __builtin_custom_in (void)
42666     int __builtin_custom_ini (int)
42667     int __builtin_custom_inf (float)
42668     int __builtin_custom_inp (void *)
42669     int __builtin_custom_inii (int, int)
42670     int __builtin_custom_inif (int, float)
42671     int __builtin_custom_inip (int, void *)
42672     int __builtin_custom_infi (float, int)
42673     int __builtin_custom_inff (float, float)
42674     int __builtin_custom_infp (float, void *)
42675     int __builtin_custom_inpi (void *, int)
42676     int __builtin_custom_inpf (void *, float)
42677     int __builtin_custom_inpp (void *, void *)
42678     float __builtin_custom_fn (void)
42679     float __builtin_custom_fni (int)
42680     float __builtin_custom_fnf (float)
42681     float __builtin_custom_fnp (void *)
42682     float __builtin_custom_fnii (int, int)
42683     float __builtin_custom_fnif (int, float)
42684     float __builtin_custom_fnip (int, void *)
42685     float __builtin_custom_fnfi (float, int)
42686     float __builtin_custom_fnff (float, float)
42687     float __builtin_custom_fnfp (float, void *)
42688     float __builtin_custom_fnpi (void *, int)
42689     float __builtin_custom_fnpf (void *, float)
42690     float __builtin_custom_fnpp (void *, void *)
42691     void * __builtin_custom_pn (void)
42692     void * __builtin_custom_pni (int)
42693     void * __builtin_custom_pnf (float)
42694     void * __builtin_custom_pnp (void *)
42695     void * __builtin_custom_pnii (int, int)
42696     void * __builtin_custom_pnif (int, float)
42697     void * __builtin_custom_pnip (int, void *)
42698     void * __builtin_custom_pnfi (float, int)
42699     void * __builtin_custom_pnff (float, float)
42700     void * __builtin_custom_pnfp (float, void *)
42701     void * __builtin_custom_pnpi (void *, int)
42702     void * __builtin_custom_pnpf (void *, float)
42703     void * __builtin_custom_pnpp (void *, void *)
42704
42705
42706File: gcc.info,  Node: ARC Built-in Functions,  Next: ARC SIMD Built-in Functions,  Prev: Altera Nios II Built-in Functions,  Up: Target Builtins
42707
427086.60.4 ARC Built-in Functions
42709-----------------------------
42710
42711The following built-in functions are provided for ARC targets.  The
42712built-ins generate the corresponding assembly instructions.  In the
42713examples given below, the generated code often requires an operand or
42714result to be in a register.  Where necessary further code will be
42715generated to ensure this is true, but for brevity this is not described
42716in each case.
42717
42718 _Note:_ Using a built-in to generate an instruction not supported by a
42719target may cause problems.  At present the compiler is not guaranteed to
42720detect such misuse, and as a result an internal compiler error may be
42721generated.
42722
42723 -- Built-in Function: int __builtin_arc_aligned (void *VAL, int
42724          ALIGNVAL)
42725     Return 1 if VAL is known to have the byte alignment given by
42726     ALIGNVAL, otherwise return 0.  Note that this is different from
42727          __alignof__(*(char *)VAL) >= alignval
42728     because __alignof__ sees only the type of the dereference, whereas
42729     __builtin_arc_align uses alignment information from the pointer as
42730     well as from the pointed-to type.  The information available will
42731     depend on optimization level.
42732
42733 -- Built-in Function: void __builtin_arc_brk (void)
42734     Generates
42735          brk
42736
42737 -- Built-in Function: unsigned int __builtin_arc_core_read (unsigned
42738          int REGNO)
42739     The operand is the number of a register to be read.  Generates:
42740          mov  DEST, rREGNO
42741     where the value in DEST will be the result returned from the
42742     built-in.
42743
42744 -- Built-in Function: void __builtin_arc_core_write (unsigned int
42745          REGNO, unsigned int VAL)
42746     The first operand is the number of a register to be written, the
42747     second operand is a compile time constant to write into that
42748     register.  Generates:
42749          mov  rREGNO, VAL
42750
42751 -- Built-in Function: int __builtin_arc_divaw (int A, int B)
42752     Only available if either '-mcpu=ARC700' or '-meA' is set.
42753     Generates:
42754          divaw  DEST, A, B
42755     where the value in DEST will be the result returned from the
42756     built-in.
42757
42758 -- Built-in Function: void __builtin_arc_flag (unsigned int A)
42759     Generates
42760          flag  A
42761
42762 -- Built-in Function: unsigned int __builtin_arc_lr (unsigned int AUXR)
42763     The operand, AUXV, is the address of an auxiliary register and must
42764     be a compile time constant.  Generates:
42765          lr  DEST, [AUXR]
42766     Where the value in DEST will be the result returned from the
42767     built-in.
42768
42769 -- Built-in Function: void __builtin_arc_mul64 (int A, int B)
42770     Only available with '-mmul64'.  Generates:
42771          mul64  A, B
42772
42773 -- Built-in Function: void __builtin_arc_mulu64 (unsigned int A,
42774          unsigned int B)
42775     Only available with '-mmul64'.  Generates:
42776          mulu64  A, B
42777
42778 -- Built-in Function: void __builtin_arc_nop (void)
42779     Generates:
42780          nop
42781
42782 -- Built-in Function: int __builtin_arc_norm (int SRC)
42783     Only valid if the 'norm' instruction is available through the
42784     '-mnorm' option or by default with '-mcpu=ARC700'.  Generates:
42785          norm  DEST, SRC
42786     Where the value in DEST will be the result returned from the
42787     built-in.
42788
42789 -- Built-in Function: short int __builtin_arc_normw (short int SRC)
42790     Only valid if the 'normw' instruction is available through the
42791     '-mnorm' option or by default with '-mcpu=ARC700'.  Generates:
42792          normw  DEST, SRC
42793     Where the value in DEST will be the result returned from the
42794     built-in.
42795
42796 -- Built-in Function: void __builtin_arc_rtie (void)
42797     Generates:
42798          rtie
42799
42800 -- Built-in Function: void __builtin_arc_sleep (int A
42801     Generates:
42802          sleep  A
42803
42804 -- Built-in Function: void __builtin_arc_sr (unsigned int AUXR,
42805          unsigned int VAL)
42806     The first argument, AUXV, is the address of an auxiliary register,
42807     the second argument, VAL, is a compile time constant to be written
42808     to the register.  Generates:
42809          sr  AUXR, [VAL]
42810
42811 -- Built-in Function: int __builtin_arc_swap (int SRC)
42812     Only valid with '-mswap'.  Generates:
42813          swap  DEST, SRC
42814     Where the value in DEST will be the result returned from the
42815     built-in.
42816
42817 -- Built-in Function: void __builtin_arc_swi (void)
42818     Generates:
42819          swi
42820
42821 -- Built-in Function: void __builtin_arc_sync (void)
42822     Only available with '-mcpu=ARC700'.  Generates:
42823          sync
42824
42825 -- Built-in Function: void __builtin_arc_trap_s (unsigned int C)
42826     Only available with '-mcpu=ARC700'.  Generates:
42827          trap_s  C
42828
42829 -- Built-in Function: void __builtin_arc_unimp_s (void)
42830     Only available with '-mcpu=ARC700'.  Generates:
42831          unimp_s
42832
42833 The instructions generated by the following builtins are not considered
42834as candidates for scheduling.  They are not moved around by the compiler
42835during scheduling, and thus can be expected to appear where they are put
42836in the C code:
42837     __builtin_arc_brk()
42838     __builtin_arc_core_read()
42839     __builtin_arc_core_write()
42840     __builtin_arc_flag()
42841     __builtin_arc_lr()
42842     __builtin_arc_sleep()
42843     __builtin_arc_sr()
42844     __builtin_arc_swi()
42845
42846
42847File: gcc.info,  Node: ARC SIMD Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Prev: ARC Built-in Functions,  Up: Target Builtins
42848
428496.60.5 ARC SIMD Built-in Functions
42850----------------------------------
42851
42852SIMD builtins provided by the compiler can be used to generate the
42853vector instructions.  This section describes the available builtins and
42854their usage in programs.  With the '-msimd' option, the compiler
42855provides 128-bit vector types, which can be specified using the
42856'vector_size' attribute.  The header file 'arc-simd.h' can be included
42857to use the following predefined types:
42858     typedef int __v4si   __attribute__((vector_size(16)));
42859     typedef short __v8hi __attribute__((vector_size(16)));
42860
42861 These types can be used to define 128-bit variables.  The built-in
42862functions listed in the following section can be used on these variables
42863to generate the vector operations.
42864
42865 For all builtins, '__builtin_arc_SOMEINSN', the header file
42866'arc-simd.h' also provides equivalent macros called '_SOMEINSN' that can
42867be used for programming ease and improved readability.  The following
42868macros for DMA control are also provided:
42869     #define _setup_dma_in_channel_reg _vdiwr
42870     #define _setup_dma_out_channel_reg _vdowr
42871
42872 The following is a complete list of all the SIMD built-ins provided for
42873ARC, grouped by calling signature.
42874
42875 The following take two '__v8hi' arguments and return a '__v8hi' result:
42876     __v8hi __builtin_arc_vaddaw (__v8hi, __v8hi)
42877     __v8hi __builtin_arc_vaddw (__v8hi, __v8hi)
42878     __v8hi __builtin_arc_vand (__v8hi, __v8hi)
42879     __v8hi __builtin_arc_vandaw (__v8hi, __v8hi)
42880     __v8hi __builtin_arc_vavb (__v8hi, __v8hi)
42881     __v8hi __builtin_arc_vavrb (__v8hi, __v8hi)
42882     __v8hi __builtin_arc_vbic (__v8hi, __v8hi)
42883     __v8hi __builtin_arc_vbicaw (__v8hi, __v8hi)
42884     __v8hi __builtin_arc_vdifaw (__v8hi, __v8hi)
42885     __v8hi __builtin_arc_vdifw (__v8hi, __v8hi)
42886     __v8hi __builtin_arc_veqw (__v8hi, __v8hi)
42887     __v8hi __builtin_arc_vh264f (__v8hi, __v8hi)
42888     __v8hi __builtin_arc_vh264ft (__v8hi, __v8hi)
42889     __v8hi __builtin_arc_vh264fw (__v8hi, __v8hi)
42890     __v8hi __builtin_arc_vlew (__v8hi, __v8hi)
42891     __v8hi __builtin_arc_vltw (__v8hi, __v8hi)
42892     __v8hi __builtin_arc_vmaxaw (__v8hi, __v8hi)
42893     __v8hi __builtin_arc_vmaxw (__v8hi, __v8hi)
42894     __v8hi __builtin_arc_vminaw (__v8hi, __v8hi)
42895     __v8hi __builtin_arc_vminw (__v8hi, __v8hi)
42896     __v8hi __builtin_arc_vmr1aw (__v8hi, __v8hi)
42897     __v8hi __builtin_arc_vmr1w (__v8hi, __v8hi)
42898     __v8hi __builtin_arc_vmr2aw (__v8hi, __v8hi)
42899     __v8hi __builtin_arc_vmr2w (__v8hi, __v8hi)
42900     __v8hi __builtin_arc_vmr3aw (__v8hi, __v8hi)
42901     __v8hi __builtin_arc_vmr3w (__v8hi, __v8hi)
42902     __v8hi __builtin_arc_vmr4aw (__v8hi, __v8hi)
42903     __v8hi __builtin_arc_vmr4w (__v8hi, __v8hi)
42904     __v8hi __builtin_arc_vmr5aw (__v8hi, __v8hi)
42905     __v8hi __builtin_arc_vmr5w (__v8hi, __v8hi)
42906     __v8hi __builtin_arc_vmr6aw (__v8hi, __v8hi)
42907     __v8hi __builtin_arc_vmr6w (__v8hi, __v8hi)
42908     __v8hi __builtin_arc_vmr7aw (__v8hi, __v8hi)
42909     __v8hi __builtin_arc_vmr7w (__v8hi, __v8hi)
42910     __v8hi __builtin_arc_vmrb (__v8hi, __v8hi)
42911     __v8hi __builtin_arc_vmulaw (__v8hi, __v8hi)
42912     __v8hi __builtin_arc_vmulfaw (__v8hi, __v8hi)
42913     __v8hi __builtin_arc_vmulfw (__v8hi, __v8hi)
42914     __v8hi __builtin_arc_vmulw (__v8hi, __v8hi)
42915     __v8hi __builtin_arc_vnew (__v8hi, __v8hi)
42916     __v8hi __builtin_arc_vor (__v8hi, __v8hi)
42917     __v8hi __builtin_arc_vsubaw (__v8hi, __v8hi)
42918     __v8hi __builtin_arc_vsubw (__v8hi, __v8hi)
42919     __v8hi __builtin_arc_vsummw (__v8hi, __v8hi)
42920     __v8hi __builtin_arc_vvc1f (__v8hi, __v8hi)
42921     __v8hi __builtin_arc_vvc1ft (__v8hi, __v8hi)
42922     __v8hi __builtin_arc_vxor (__v8hi, __v8hi)
42923     __v8hi __builtin_arc_vxoraw (__v8hi, __v8hi)
42924
42925 The following take one '__v8hi' and one 'int' argument and return a
42926'__v8hi' result:
42927
42928     __v8hi __builtin_arc_vbaddw (__v8hi, int)
42929     __v8hi __builtin_arc_vbmaxw (__v8hi, int)
42930     __v8hi __builtin_arc_vbminw (__v8hi, int)
42931     __v8hi __builtin_arc_vbmulaw (__v8hi, int)
42932     __v8hi __builtin_arc_vbmulfw (__v8hi, int)
42933     __v8hi __builtin_arc_vbmulw (__v8hi, int)
42934     __v8hi __builtin_arc_vbrsubw (__v8hi, int)
42935     __v8hi __builtin_arc_vbsubw (__v8hi, int)
42936
42937 The following take one '__v8hi' argument and one 'int' argument which
42938must be a 3-bit compile time constant indicating a register number
42939I0-I7.  They return a '__v8hi' result.
42940     __v8hi __builtin_arc_vasrw (__v8hi, const int)
42941     __v8hi __builtin_arc_vsr8 (__v8hi, const int)
42942     __v8hi __builtin_arc_vsr8aw (__v8hi, const int)
42943
42944 The following take one '__v8hi' argument and one 'int' argument which
42945must be a 6-bit compile time constant.  They return a '__v8hi' result.
42946     __v8hi __builtin_arc_vasrpwbi (__v8hi, const int)
42947     __v8hi __builtin_arc_vasrrpwbi (__v8hi, const int)
42948     __v8hi __builtin_arc_vasrrwi (__v8hi, const int)
42949     __v8hi __builtin_arc_vasrsrwi (__v8hi, const int)
42950     __v8hi __builtin_arc_vasrwi (__v8hi, const int)
42951     __v8hi __builtin_arc_vsr8awi (__v8hi, const int)
42952     __v8hi __builtin_arc_vsr8i (__v8hi, const int)
42953
42954 The following take one '__v8hi' argument and one 'int' argument which
42955must be a 8-bit compile time constant.  They return a '__v8hi' result.
42956     __v8hi __builtin_arc_vd6tapf (__v8hi, const int)
42957     __v8hi __builtin_arc_vmvaw (__v8hi, const int)
42958     __v8hi __builtin_arc_vmvw (__v8hi, const int)
42959     __v8hi __builtin_arc_vmvzw (__v8hi, const int)
42960
42961 The following take two 'int' arguments, the second of which which must
42962be a 8-bit compile time constant.  They return a '__v8hi' result:
42963     __v8hi __builtin_arc_vmovaw (int, const int)
42964     __v8hi __builtin_arc_vmovw (int, const int)
42965     __v8hi __builtin_arc_vmovzw (int, const int)
42966
42967 The following take a single '__v8hi' argument and return a '__v8hi'
42968result:
42969     __v8hi __builtin_arc_vabsaw (__v8hi)
42970     __v8hi __builtin_arc_vabsw (__v8hi)
42971     __v8hi __builtin_arc_vaddsuw (__v8hi)
42972     __v8hi __builtin_arc_vexch1 (__v8hi)
42973     __v8hi __builtin_arc_vexch2 (__v8hi)
42974     __v8hi __builtin_arc_vexch4 (__v8hi)
42975     __v8hi __builtin_arc_vsignw (__v8hi)
42976     __v8hi __builtin_arc_vupbaw (__v8hi)
42977     __v8hi __builtin_arc_vupbw (__v8hi)
42978     __v8hi __builtin_arc_vupsbaw (__v8hi)
42979     __v8hi __builtin_arc_vupsbw (__v8hi)
42980
42981 The following take two 'int' arguments and return no result:
42982     void __builtin_arc_vdirun (int, int)
42983     void __builtin_arc_vdorun (int, int)
42984
42985 The following take two 'int' arguments and return no result.  The first
42986argument must a 3-bit compile time constant indicating one of the
42987DR0-DR7 DMA setup channels:
42988     void __builtin_arc_vdiwr (const int, int)
42989     void __builtin_arc_vdowr (const int, int)
42990
42991 The following take an 'int' argument and return no result:
42992     void __builtin_arc_vendrec (int)
42993     void __builtin_arc_vrec (int)
42994     void __builtin_arc_vrecrun (int)
42995     void __builtin_arc_vrun (int)
42996
42997 The following take a '__v8hi' argument and two 'int' arguments and
42998return a '__v8hi' result.  The second argument must be a 3-bit compile
42999time constants, indicating one the registers I0-I7, and the third
43000argument must be an 8-bit compile time constant.
43001
43002 _Note:_ Although the equivalent hardware instructions do not take an
43003SIMD register as an operand, these builtins overwrite the relevant bits
43004of the '__v8hi' register provided as the first argument with the value
43005loaded from the '[Ib, u8]' location in the SDM.
43006
43007     __v8hi __builtin_arc_vld32 (__v8hi, const int, const int)
43008     __v8hi __builtin_arc_vld32wh (__v8hi, const int, const int)
43009     __v8hi __builtin_arc_vld32wl (__v8hi, const int, const int)
43010     __v8hi __builtin_arc_vld64 (__v8hi, const int, const int)
43011
43012 The following take two 'int' arguments and return a '__v8hi' result.
43013The first argument must be a 3-bit compile time constants, indicating
43014one the registers I0-I7, and the second argument must be an 8-bit
43015compile time constant.
43016
43017     __v8hi __builtin_arc_vld128 (const int, const int)
43018     __v8hi __builtin_arc_vld64w (const int, const int)
43019
43020 The following take a '__v8hi' argument and two 'int' arguments and
43021return no result.  The second argument must be a 3-bit compile time
43022constants, indicating one the registers I0-I7, and the third argument
43023must be an 8-bit compile time constant.
43024
43025     void __builtin_arc_vst128 (__v8hi, const int, const int)
43026     void __builtin_arc_vst64 (__v8hi, const int, const int)
43027
43028 The following take a '__v8hi' argument and three 'int' arguments and
43029return no result.  The second argument must be a 3-bit compile-time
43030constant, identifying the 16-bit sub-register to be stored, the third
43031argument must be a 3-bit compile time constants, indicating one the
43032registers I0-I7, and the fourth argument must be an 8-bit compile time
43033constant.
43034
43035     void __builtin_arc_vst16_n (__v8hi, const int, const int, const int)
43036     void __builtin_arc_vst32_n (__v8hi, const int, const int, const int)
43037
43038
43039File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM C Language Extensions (ACLE),  Prev: ARC SIMD Built-in Functions,  Up: Target Builtins
43040
430416.60.6 ARM iWMMXt Built-in Functions
43042------------------------------------
43043
43044These built-in functions are available for the ARM family of processors
43045when the '-mcpu=iwmmxt' switch is used:
43046
43047     typedef int v2si __attribute__ ((vector_size (8)));
43048     typedef short v4hi __attribute__ ((vector_size (8)));
43049     typedef char v8qi __attribute__ ((vector_size (8)));
43050
43051     int __builtin_arm_getwcgr0 (void)
43052     void __builtin_arm_setwcgr0 (int)
43053     int __builtin_arm_getwcgr1 (void)
43054     void __builtin_arm_setwcgr1 (int)
43055     int __builtin_arm_getwcgr2 (void)
43056     void __builtin_arm_setwcgr2 (int)
43057     int __builtin_arm_getwcgr3 (void)
43058     void __builtin_arm_setwcgr3 (int)
43059     int __builtin_arm_textrmsb (v8qi, int)
43060     int __builtin_arm_textrmsh (v4hi, int)
43061     int __builtin_arm_textrmsw (v2si, int)
43062     int __builtin_arm_textrmub (v8qi, int)
43063     int __builtin_arm_textrmuh (v4hi, int)
43064     int __builtin_arm_textrmuw (v2si, int)
43065     v8qi __builtin_arm_tinsrb (v8qi, int, int)
43066     v4hi __builtin_arm_tinsrh (v4hi, int, int)
43067     v2si __builtin_arm_tinsrw (v2si, int, int)
43068     long long __builtin_arm_tmia (long long, int, int)
43069     long long __builtin_arm_tmiabb (long long, int, int)
43070     long long __builtin_arm_tmiabt (long long, int, int)
43071     long long __builtin_arm_tmiaph (long long, int, int)
43072     long long __builtin_arm_tmiatb (long long, int, int)
43073     long long __builtin_arm_tmiatt (long long, int, int)
43074     int __builtin_arm_tmovmskb (v8qi)
43075     int __builtin_arm_tmovmskh (v4hi)
43076     int __builtin_arm_tmovmskw (v2si)
43077     long long __builtin_arm_waccb (v8qi)
43078     long long __builtin_arm_wacch (v4hi)
43079     long long __builtin_arm_waccw (v2si)
43080     v8qi __builtin_arm_waddb (v8qi, v8qi)
43081     v8qi __builtin_arm_waddbss (v8qi, v8qi)
43082     v8qi __builtin_arm_waddbus (v8qi, v8qi)
43083     v4hi __builtin_arm_waddh (v4hi, v4hi)
43084     v4hi __builtin_arm_waddhss (v4hi, v4hi)
43085     v4hi __builtin_arm_waddhus (v4hi, v4hi)
43086     v2si __builtin_arm_waddw (v2si, v2si)
43087     v2si __builtin_arm_waddwss (v2si, v2si)
43088     v2si __builtin_arm_waddwus (v2si, v2si)
43089     v8qi __builtin_arm_walign (v8qi, v8qi, int)
43090     long long __builtin_arm_wand(long long, long long)
43091     long long __builtin_arm_wandn (long long, long long)
43092     v8qi __builtin_arm_wavg2b (v8qi, v8qi)
43093     v8qi __builtin_arm_wavg2br (v8qi, v8qi)
43094     v4hi __builtin_arm_wavg2h (v4hi, v4hi)
43095     v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
43096     v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
43097     v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
43098     v2si __builtin_arm_wcmpeqw (v2si, v2si)
43099     v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
43100     v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
43101     v2si __builtin_arm_wcmpgtsw (v2si, v2si)
43102     v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
43103     v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
43104     v2si __builtin_arm_wcmpgtuw (v2si, v2si)
43105     long long __builtin_arm_wmacs (long long, v4hi, v4hi)
43106     long long __builtin_arm_wmacsz (v4hi, v4hi)
43107     long long __builtin_arm_wmacu (long long, v4hi, v4hi)
43108     long long __builtin_arm_wmacuz (v4hi, v4hi)
43109     v4hi __builtin_arm_wmadds (v4hi, v4hi)
43110     v4hi __builtin_arm_wmaddu (v4hi, v4hi)
43111     v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
43112     v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
43113     v2si __builtin_arm_wmaxsw (v2si, v2si)
43114     v8qi __builtin_arm_wmaxub (v8qi, v8qi)
43115     v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
43116     v2si __builtin_arm_wmaxuw (v2si, v2si)
43117     v8qi __builtin_arm_wminsb (v8qi, v8qi)
43118     v4hi __builtin_arm_wminsh (v4hi, v4hi)
43119     v2si __builtin_arm_wminsw (v2si, v2si)
43120     v8qi __builtin_arm_wminub (v8qi, v8qi)
43121     v4hi __builtin_arm_wminuh (v4hi, v4hi)
43122     v2si __builtin_arm_wminuw (v2si, v2si)
43123     v4hi __builtin_arm_wmulsm (v4hi, v4hi)
43124     v4hi __builtin_arm_wmulul (v4hi, v4hi)
43125     v4hi __builtin_arm_wmulum (v4hi, v4hi)
43126     long long __builtin_arm_wor (long long, long long)
43127     v2si __builtin_arm_wpackdss (long long, long long)
43128     v2si __builtin_arm_wpackdus (long long, long long)
43129     v8qi __builtin_arm_wpackhss (v4hi, v4hi)
43130     v8qi __builtin_arm_wpackhus (v4hi, v4hi)
43131     v4hi __builtin_arm_wpackwss (v2si, v2si)
43132     v4hi __builtin_arm_wpackwus (v2si, v2si)
43133     long long __builtin_arm_wrord (long long, long long)
43134     long long __builtin_arm_wrordi (long long, int)
43135     v4hi __builtin_arm_wrorh (v4hi, long long)
43136     v4hi __builtin_arm_wrorhi (v4hi, int)
43137     v2si __builtin_arm_wrorw (v2si, long long)
43138     v2si __builtin_arm_wrorwi (v2si, int)
43139     v2si __builtin_arm_wsadb (v2si, v8qi, v8qi)
43140     v2si __builtin_arm_wsadbz (v8qi, v8qi)
43141     v2si __builtin_arm_wsadh (v2si, v4hi, v4hi)
43142     v2si __builtin_arm_wsadhz (v4hi, v4hi)
43143     v4hi __builtin_arm_wshufh (v4hi, int)
43144     long long __builtin_arm_wslld (long long, long long)
43145     long long __builtin_arm_wslldi (long long, int)
43146     v4hi __builtin_arm_wsllh (v4hi, long long)
43147     v4hi __builtin_arm_wsllhi (v4hi, int)
43148     v2si __builtin_arm_wsllw (v2si, long long)
43149     v2si __builtin_arm_wsllwi (v2si, int)
43150     long long __builtin_arm_wsrad (long long, long long)
43151     long long __builtin_arm_wsradi (long long, int)
43152     v4hi __builtin_arm_wsrah (v4hi, long long)
43153     v4hi __builtin_arm_wsrahi (v4hi, int)
43154     v2si __builtin_arm_wsraw (v2si, long long)
43155     v2si __builtin_arm_wsrawi (v2si, int)
43156     long long __builtin_arm_wsrld (long long, long long)
43157     long long __builtin_arm_wsrldi (long long, int)
43158     v4hi __builtin_arm_wsrlh (v4hi, long long)
43159     v4hi __builtin_arm_wsrlhi (v4hi, int)
43160     v2si __builtin_arm_wsrlw (v2si, long long)
43161     v2si __builtin_arm_wsrlwi (v2si, int)
43162     v8qi __builtin_arm_wsubb (v8qi, v8qi)
43163     v8qi __builtin_arm_wsubbss (v8qi, v8qi)
43164     v8qi __builtin_arm_wsubbus (v8qi, v8qi)
43165     v4hi __builtin_arm_wsubh (v4hi, v4hi)
43166     v4hi __builtin_arm_wsubhss (v4hi, v4hi)
43167     v4hi __builtin_arm_wsubhus (v4hi, v4hi)
43168     v2si __builtin_arm_wsubw (v2si, v2si)
43169     v2si __builtin_arm_wsubwss (v2si, v2si)
43170     v2si __builtin_arm_wsubwus (v2si, v2si)
43171     v4hi __builtin_arm_wunpckehsb (v8qi)
43172     v2si __builtin_arm_wunpckehsh (v4hi)
43173     long long __builtin_arm_wunpckehsw (v2si)
43174     v4hi __builtin_arm_wunpckehub (v8qi)
43175     v2si __builtin_arm_wunpckehuh (v4hi)
43176     long long __builtin_arm_wunpckehuw (v2si)
43177     v4hi __builtin_arm_wunpckelsb (v8qi)
43178     v2si __builtin_arm_wunpckelsh (v4hi)
43179     long long __builtin_arm_wunpckelsw (v2si)
43180     v4hi __builtin_arm_wunpckelub (v8qi)
43181     v2si __builtin_arm_wunpckeluh (v4hi)
43182     long long __builtin_arm_wunpckeluw (v2si)
43183     v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
43184     v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
43185     v2si __builtin_arm_wunpckihw (v2si, v2si)
43186     v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
43187     v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
43188     v2si __builtin_arm_wunpckilw (v2si, v2si)
43189     long long __builtin_arm_wxor (long long, long long)
43190     long long __builtin_arm_wzero ()
43191
43192
43193File: 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
43194
431956.60.7 ARM C Language Extensions (ACLE)
43196---------------------------------------
43197
43198GCC implements extensions for C as described in the ARM C Language
43199Extensions (ACLE) specification, which can be found at
43200<https://developer.arm.com/documentation/ihi0053/latest/>.
43201
43202 As a part of ACLE, GCC implements extensions for Advanced SIMD as
43203described in the ARM C Language Extensions Specification.  The complete
43204list of Advanced SIMD intrinsics can be found at
43205<https://developer.arm.com/documentation/ihi0073/latest/>.  The built-in
43206intrinsics for the Advanced SIMD extension are available when NEON is
43207enabled.
43208
43209 Currently, ARM and AArch64 back ends do not support ACLE 2.0 fully.
43210Both back ends support CRC32 intrinsics and the ARM back end supports
43211the Coprocessor intrinsics, all from 'arm_acle.h'.  The ARM back end's
4321216-bit floating-point Advanced SIMD intrinsics currently comply to ACLE
43213v1.1.  AArch64's back end does not have support for 16-bit floating
43214point Advanced SIMD intrinsics yet.
43215
43216 See *note ARM Options:: and *note AArch64 Options:: for more
43217information on the availability of extensions.
43218
43219
43220File: 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
43221
432226.60.8 ARM Floating Point Status and Control Intrinsics
43223-------------------------------------------------------
43224
43225These built-in functions are available for the ARM family of processors
43226with floating-point unit.
43227
43228     unsigned int __builtin_arm_get_fpscr ()
43229     void __builtin_arm_set_fpscr (unsigned int)
43230
43231
43232File: gcc.info,  Node: ARM ARMv8-M Security Extensions,  Next: AVR Built-in Functions,  Prev: ARM Floating Point Status and Control Intrinsics,  Up: Target Builtins
43233
432346.60.9 ARM ARMv8-M Security Extensions
43235--------------------------------------
43236
43237GCC implements the ARMv8-M Security Extensions as described in the
43238ARMv8-M Security Extensions: Requirements on Development Tools
43239Engineering Specification, which can be found at
43240<https://developer.arm.com/documentation/ecm0359818/latest/>.
43241
43242 As part of the Security Extensions GCC implements two new function
43243attributes: 'cmse_nonsecure_entry' and 'cmse_nonsecure_call'.
43244
43245 As part of the Security Extensions GCC implements the intrinsics below.
43246FPTR is used here to mean any function pointer type.
43247
43248     cmse_address_info_t cmse_TT (void *)
43249     cmse_address_info_t cmse_TT_fptr (FPTR)
43250     cmse_address_info_t cmse_TTT (void *)
43251     cmse_address_info_t cmse_TTT_fptr (FPTR)
43252     cmse_address_info_t cmse_TTA (void *)
43253     cmse_address_info_t cmse_TTA_fptr (FPTR)
43254     cmse_address_info_t cmse_TTAT (void *)
43255     cmse_address_info_t cmse_TTAT_fptr (FPTR)
43256     void * cmse_check_address_range (void *, size_t, int)
43257     typeof(p) cmse_nsfptr_create (FPTR p)
43258     intptr_t cmse_is_nsfptr (FPTR)
43259     int cmse_nonsecure_caller (void)
43260
43261
43262File: gcc.info,  Node: AVR Built-in Functions,  Next: Blackfin Built-in Functions,  Prev: ARM ARMv8-M Security Extensions,  Up: Target Builtins
43263
432646.60.10 AVR Built-in Functions
43265------------------------------
43266
43267For each built-in function for AVR, there is an equally named, uppercase
43268built-in macro defined.  That way users can easily query if or if not a
43269specific built-in is implemented or not.  For example, if
43270'__builtin_avr_nop' is available the macro '__BUILTIN_AVR_NOP' is
43271defined to '1' and undefined otherwise.
43272
43273'void __builtin_avr_nop (void)'
43274'void __builtin_avr_sei (void)'
43275'void __builtin_avr_cli (void)'
43276'void __builtin_avr_sleep (void)'
43277'void __builtin_avr_wdr (void)'
43278'unsigned char __builtin_avr_swap (unsigned char)'
43279'unsigned int __builtin_avr_fmul (unsigned char, unsigned char)'
43280'int __builtin_avr_fmuls (char, char)'
43281'int __builtin_avr_fmulsu (char, unsigned char)'
43282     These built-in functions map to the respective machine instruction,
43283     i.e. 'nop', 'sei', 'cli', 'sleep', 'wdr', 'swap', 'fmul', 'fmuls'
43284     resp.  'fmulsu'.  The three 'fmul*' built-ins are implemented as
43285     library call if no hardware multiplier is available.
43286
43287'void __builtin_avr_delay_cycles (unsigned long ticks)'
43288     Delay execution for TICKS cycles.  Note that this built-in does not
43289     take into account the effect of interrupts that might increase
43290     delay time.  TICKS must be a compile-time integer constant; delays
43291     with a variable number of cycles are not supported.
43292
43293'char __builtin_avr_flash_segment (const __memx void*)'
43294     This built-in takes a byte address to the 24-bit *note address
43295     space: AVR Named Address Spaces. '__memx' and returns the number of
43296     the flash segment (the 64 KiB chunk) where the address points to.
43297     Counting starts at '0'.  If the address does not point to flash
43298     memory, return '-1'.
43299
43300'uint8_t __builtin_avr_insert_bits (uint32_t map, uint8_t bits, uint8_t val)'
43301     Insert bits from BITS into VAL and return the resulting value.  The
43302     nibbles of MAP determine how the insertion is performed: Let X be
43303     the N-th nibble of MAP
43304       1. If X is '0xf', then the N-th bit of VAL is returned unaltered.
43305
43306       2. If X is in the range 0...7, then the N-th result bit is set to
43307          the X-th bit of BITS
43308
43309       3. If X is in the range 8...'0xe', then the N-th result bit is
43310          undefined.
43311
43312     One typical use case for this built-in is adjusting input and
43313     output values to non-contiguous port layouts.  Some examples:
43314
43315          // same as val, bits is unused
43316          __builtin_avr_insert_bits (0xffffffff, bits, val)
43317
43318          // same as bits, val is unused
43319          __builtin_avr_insert_bits (0x76543210, bits, val)
43320
43321          // same as rotating bits by 4
43322          __builtin_avr_insert_bits (0x32107654, bits, 0)
43323
43324          // high nibble of result is the high nibble of val
43325          // low nibble of result is the low nibble of bits
43326          __builtin_avr_insert_bits (0xffff3210, bits, val)
43327
43328          // reverse the bit order of bits
43329          __builtin_avr_insert_bits (0x01234567, bits, 0)
43330
43331'void __builtin_avr_nops (unsigned count)'
43332     Insert COUNT 'NOP' instructions.  The number of instructions must
43333     be a compile-time integer constant.
43334
43335There are many more AVR-specific built-in functions that are used to
43336implement the ISO/IEC TR 18037 "Embedded C" fixed-point functions of
43337section 7.18a.6.  You don't need to use these built-ins directly.
43338Instead, use the declarations as supplied by the 'stdfix.h' header with
43339GNU-C99:
43340
43341     #include <stdfix.h>
43342
43343     // Re-interpret the bit representation of unsigned 16-bit
43344     // integer UVAL as Q-format 0.16 value.
43345     unsigned fract get_bits (uint_ur_t uval)
43346     {
43347         return urbits (uval);
43348     }
43349
43350
43351File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: AVR Built-in Functions,  Up: Target Builtins
43352
433536.60.11 Blackfin Built-in Functions
43354-----------------------------------
43355
43356Currently, there are two Blackfin-specific built-in functions.  These
43357are used for generating 'CSYNC' and 'SSYNC' machine insns without using
43358inline assembly; by using these built-in functions the compiler can
43359automatically add workarounds for hardware errata involving these
43360instructions.  These functions are named as follows:
43361
43362     void __builtin_bfin_csync (void)
43363     void __builtin_bfin_ssync (void)
43364
43365
43366File: gcc.info,  Node: FR-V Built-in Functions,  Next: MIPS DSP Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
43367
433686.60.12 FR-V Built-in Functions
43369-------------------------------
43370
43371GCC provides many FR-V-specific built-in functions.  In general, these
43372functions are intended to be compatible with those described by 'FR-V
43373Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.  The
43374two exceptions are '__MDUNPACKH' and '__MBTOHE', the GCC forms of which
43375pass 128-bit values by pointer rather than by value.
43376
43377 Most of the functions are named after specific FR-V instructions.  Such
43378functions are said to be "directly mapped" and are summarized here in
43379tabular form.
43380
43381* Menu:
43382
43383* Argument Types::
43384* Directly-mapped Integer Functions::
43385* Directly-mapped Media Functions::
43386* Raw read/write Functions::
43387* Other Built-in Functions::
43388
43389
43390File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
43391
433926.60.12.1 Argument Types
43393........................
43394
43395The arguments to the built-in functions can be divided into three
43396groups: register numbers, compile-time constants and run-time values.
43397In order to make this classification clear at a glance, the arguments
43398and return values are given the following pseudo types:
43399
43400Pseudo type    Real C type            Constant?   Description
43401'uh'           'unsigned short'       No          an unsigned halfword
43402'uw1'          'unsigned int'         No          an unsigned word
43403'sw1'          'int'                  No          a signed word
43404'uw2'          'unsigned long long'   No          an unsigned doubleword
43405'sw2'          'long long'            No          a signed doubleword
43406'const'        'int'                  Yes         an integer constant
43407'acc'          'int'                  Yes         an ACC register number
43408'iacc'         'int'                  Yes         an IACC register number
43409
43410 These pseudo types are not defined by GCC, they are simply a notational
43411convenience used in this manual.
43412
43413 Arguments of type 'uh', 'uw1', 'sw1', 'uw2' and 'sw2' are evaluated at
43414run time.  They correspond to register operands in the underlying FR-V
43415instructions.
43416
43417 'const' arguments represent immediate operands in the underlying FR-V
43418instructions.  They must be compile-time constants.
43419
43420 'acc' arguments are evaluated at compile time and specify the number of
43421an accumulator register.  For example, an 'acc' argument of 2 selects
43422the ACC2 register.
43423
43424 'iacc' arguments are similar to 'acc' arguments but specify the number
43425of an IACC register.  See *note Other Built-in Functions:: for more
43426details.
43427
43428
43429File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
43430
434316.60.12.2 Directly-Mapped Integer Functions
43432...........................................
43433
43434The functions listed below map directly to FR-V I-type instructions.
43435
43436Function prototype               Example usage           Assembly output
43437'sw1 __ADDSS (sw1, sw1)'         'C = __ADDSS (A, B)'    'ADDSS A,B,C'
43438'sw1 __SCAN (sw1, sw1)'          'C = __SCAN (A, B)'     'SCAN A,B,C'
43439'sw1 __SCUTSS (sw1)'             'B = __SCUTSS (A)'      'SCUTSS A,B'
43440'sw1 __SLASS (sw1, sw1)'         'C = __SLASS (A, B)'    'SLASS A,B,C'
43441'void __SMASS (sw1, sw1)'        '__SMASS (A, B)'        'SMASS A,B'
43442'void __SMSSS (sw1, sw1)'        '__SMSSS (A, B)'        'SMSSS A,B'
43443'void __SMU (sw1, sw1)'          '__SMU (A, B)'          'SMU A,B'
43444'sw2 __SMUL (sw1, sw1)'          'C = __SMUL (A, B)'     'SMUL A,B,C'
43445'sw1 __SUBSS (sw1, sw1)'         'C = __SUBSS (A, B)'    'SUBSS A,B,C'
43446'uw2 __UMUL (uw1, uw1)'          'C = __UMUL (A, B)'     'UMUL A,B,C'
43447
43448
43449File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
43450
434516.60.12.3 Directly-Mapped Media Functions
43452.........................................
43453
43454The functions listed below map directly to FR-V M-type instructions.
43455
43456Function prototype               Example usage           Assembly output
43457'uw1 __MABSHS (sw1)'             'B = __MABSHS (A)'      'MABSHS A,B'
43458'void __MADDACCS (acc, acc)'     '__MADDACCS (B, A)'     'MADDACCS A,B'
43459'sw1 __MADDHSS (sw1, sw1)'       'C = __MADDHSS (A,      'MADDHSS A,B,C'
43460                                 B)'
43461'uw1 __MADDHUS (uw1, uw1)'       'C = __MADDHUS (A,      'MADDHUS A,B,C'
43462                                 B)'
43463'uw1 __MAND (uw1, uw1)'          'C = __MAND (A, B)'     'MAND A,B,C'
43464'void __MASACCS (acc, acc)'      '__MASACCS (B, A)'      'MASACCS A,B'
43465'uw1 __MAVEH (uw1, uw1)'         'C = __MAVEH (A, B)'    'MAVEH A,B,C'
43466'uw2 __MBTOH (uw1)'              'B = __MBTOH (A)'       'MBTOH A,B'
43467'void __MBTOHE (uw1 *, uw1)'     '__MBTOHE (&B, A)'      'MBTOHE A,B'
43468'void __MCLRACC (acc)'           '__MCLRACC (A)'         'MCLRACC A'
43469'void __MCLRACCA (void)'         '__MCLRACCA ()'         'MCLRACCA'
43470'uw1 __Mcop1 (uw1, uw1)'         'C = __Mcop1 (A, B)'    'Mcop1 A,B,C'
43471'uw1 __Mcop2 (uw1, uw1)'         'C = __Mcop2 (A, B)'    'Mcop2 A,B,C'
43472'uw1 __MCPLHI (uw2, const)'      'C = __MCPLHI (A, B)'   'MCPLHI A,#B,C'
43473'uw1 __MCPLI (uw2, const)'       'C = __MCPLI (A, B)'    'MCPLI A,#B,C'
43474'void __MCPXIS (acc, sw1,        '__MCPXIS (C, A, B)'    'MCPXIS A,B,C'
43475sw1)'
43476'void __MCPXIU (acc, uw1,        '__MCPXIU (C, A, B)'    'MCPXIU A,B,C'
43477uw1)'
43478'void __MCPXRS (acc, sw1,        '__MCPXRS (C, A, B)'    'MCPXRS A,B,C'
43479sw1)'
43480'void __MCPXRU (acc, uw1,        '__MCPXRU (C, A, B)'    'MCPXRU A,B,C'
43481uw1)'
43482'uw1 __MCUT (acc, uw1)'          'C = __MCUT (A, B)'     'MCUT A,B,C'
43483'uw1 __MCUTSS (acc, sw1)'        'C = __MCUTSS (A, B)'   'MCUTSS A,B,C'
43484'void __MDADDACCS (acc, acc)'    '__MDADDACCS (B, A)'    'MDADDACCS A,B'
43485'void __MDASACCS (acc, acc)'     '__MDASACCS (B, A)'     'MDASACCS A,B'
43486'uw2 __MDCUTSSI (acc, const)'    'C = __MDCUTSSI (A,     'MDCUTSSI
43487                                 B)'                     A,#B,C'
43488'uw2 __MDPACKH (uw2, uw2)'       'C = __MDPACKH (A,      'MDPACKH A,B,C'
43489                                 B)'
43490'uw2 __MDROTLI (uw2, const)'     'C = __MDROTLI (A,      'MDROTLI
43491                                 B)'                     A,#B,C'
43492'void __MDSUBACCS (acc, acc)'    '__MDSUBACCS (B, A)'    'MDSUBACCS A,B'
43493'void __MDUNPACKH (uw1 *,        '__MDUNPACKH (&B, A)'   'MDUNPACKH A,B'
43494uw2)'
43495'uw2 __MEXPDHD (uw1, const)'     'C = __MEXPDHD (A,      'MEXPDHD
43496                                 B)'                     A,#B,C'
43497'uw1 __MEXPDHW (uw1, const)'     'C = __MEXPDHW (A,      'MEXPDHW
43498                                 B)'                     A,#B,C'
43499'uw1 __MHDSETH (uw1, const)'     'C = __MHDSETH (A,      'MHDSETH
43500                                 B)'                     A,#B,C'
43501'sw1 __MHDSETS (const)'          'B = __MHDSETS (A)'     'MHDSETS #A,B'
43502'uw1 __MHSETHIH (uw1, const)'    'B = __MHSETHIH (B,     'MHSETHIH #A,B'
43503                                 A)'
43504'sw1 __MHSETHIS (sw1, const)'    'B = __MHSETHIS (B,     'MHSETHIS #A,B'
43505                                 A)'
43506'uw1 __MHSETLOH (uw1, const)'    'B = __MHSETLOH (B,     'MHSETLOH #A,B'
43507                                 A)'
43508'sw1 __MHSETLOS (sw1, const)'    'B = __MHSETLOS (B,     'MHSETLOS #A,B'
43509                                 A)'
43510'uw1 __MHTOB (uw2)'              'B = __MHTOB (A)'       'MHTOB A,B'
43511'void __MMACHS (acc, sw1,        '__MMACHS (C, A, B)'    'MMACHS A,B,C'
43512sw1)'
43513'void __MMACHU (acc, uw1,        '__MMACHU (C, A, B)'    'MMACHU A,B,C'
43514uw1)'
43515'void __MMRDHS (acc, sw1,        '__MMRDHS (C, A, B)'    'MMRDHS A,B,C'
43516sw1)'
43517'void __MMRDHU (acc, uw1,        '__MMRDHU (C, A, B)'    'MMRDHU A,B,C'
43518uw1)'
43519'void __MMULHS (acc, sw1,        '__MMULHS (C, A, B)'    'MMULHS A,B,C'
43520sw1)'
43521'void __MMULHU (acc, uw1,        '__MMULHU (C, A, B)'    'MMULHU A,B,C'
43522uw1)'
43523'void __MMULXHS (acc, sw1,       '__MMULXHS (C, A, B)'   'MMULXHS A,B,C'
43524sw1)'
43525'void __MMULXHU (acc, uw1,       '__MMULXHU (C, A, B)'   'MMULXHU A,B,C'
43526uw1)'
43527'uw1 __MNOT (uw1)'               'B = __MNOT (A)'        'MNOT A,B'
43528'uw1 __MOR (uw1, uw1)'           'C = __MOR (A, B)'      'MOR A,B,C'
43529'uw1 __MPACKH (uh, uh)'          'C = __MPACKH (A, B)'   'MPACKH A,B,C'
43530'sw2 __MQADDHSS (sw2, sw2)'      'C = __MQADDHSS (A,     'MQADDHSS
43531                                 B)'                     A,B,C'
43532'uw2 __MQADDHUS (uw2, uw2)'      'C = __MQADDHUS (A,     'MQADDHUS
43533                                 B)'                     A,B,C'
43534'void __MQCPXIS (acc, sw2,       '__MQCPXIS (C, A, B)'   'MQCPXIS A,B,C'
43535sw2)'
43536'void __MQCPXIU (acc, uw2,       '__MQCPXIU (C, A, B)'   'MQCPXIU A,B,C'
43537uw2)'
43538'void __MQCPXRS (acc, sw2,       '__MQCPXRS (C, A, B)'   'MQCPXRS A,B,C'
43539sw2)'
43540'void __MQCPXRU (acc, uw2,       '__MQCPXRU (C, A, B)'   'MQCPXRU A,B,C'
43541uw2)'
43542'sw2 __MQLCLRHS (sw2, sw2)'      'C = __MQLCLRHS (A,     'MQLCLRHS
43543                                 B)'                     A,B,C'
43544'sw2 __MQLMTHS (sw2, sw2)'       'C = __MQLMTHS (A,      'MQLMTHS A,B,C'
43545                                 B)'
43546'void __MQMACHS (acc, sw2,       '__MQMACHS (C, A, B)'   'MQMACHS A,B,C'
43547sw2)'
43548'void __MQMACHU (acc, uw2,       '__MQMACHU (C, A, B)'   'MQMACHU A,B,C'
43549uw2)'
43550'void __MQMACXHS (acc, sw2,      '__MQMACXHS (C, A,      'MQMACXHS
43551sw2)'                            B)'                     A,B,C'
43552'void __MQMULHS (acc, sw2,       '__MQMULHS (C, A, B)'   'MQMULHS A,B,C'
43553sw2)'
43554'void __MQMULHU (acc, uw2,       '__MQMULHU (C, A, B)'   'MQMULHU A,B,C'
43555uw2)'
43556'void __MQMULXHS (acc, sw2,      '__MQMULXHS (C, A,      'MQMULXHS
43557sw2)'                            B)'                     A,B,C'
43558'void __MQMULXHU (acc, uw2,      '__MQMULXHU (C, A,      'MQMULXHU
43559uw2)'                            B)'                     A,B,C'
43560'sw2 __MQSATHS (sw2, sw2)'       'C = __MQSATHS (A,      'MQSATHS A,B,C'
43561                                 B)'
43562'uw2 __MQSLLHI (uw2, int)'       'C = __MQSLLHI (A,      'MQSLLHI A,B,C'
43563                                 B)'
43564'sw2 __MQSRAHI (sw2, int)'       'C = __MQSRAHI (A,      'MQSRAHI A,B,C'
43565                                 B)'
43566'sw2 __MQSUBHSS (sw2, sw2)'      'C = __MQSUBHSS (A,     'MQSUBHSS
43567                                 B)'                     A,B,C'
43568'uw2 __MQSUBHUS (uw2, uw2)'      'C = __MQSUBHUS (A,     'MQSUBHUS
43569                                 B)'                     A,B,C'
43570'void __MQXMACHS (acc, sw2,      '__MQXMACHS (C, A,      'MQXMACHS
43571sw2)'                            B)'                     A,B,C'
43572'void __MQXMACXHS (acc, sw2,     '__MQXMACXHS (C, A,     'MQXMACXHS
43573sw2)'                            B)'                     A,B,C'
43574'uw1 __MRDACC (acc)'             'B = __MRDACC (A)'      'MRDACC A,B'
43575'uw1 __MRDACCG (acc)'            'B = __MRDACCG (A)'     'MRDACCG A,B'
43576'uw1 __MROTLI (uw1, const)'      'C = __MROTLI (A, B)'   'MROTLI A,#B,C'
43577'uw1 __MROTRI (uw1, const)'      'C = __MROTRI (A, B)'   'MROTRI A,#B,C'
43578'sw1 __MSATHS (sw1, sw1)'        'C = __MSATHS (A, B)'   'MSATHS A,B,C'
43579'uw1 __MSATHU (uw1, uw1)'        'C = __MSATHU (A, B)'   'MSATHU A,B,C'
43580'uw1 __MSLLHI (uw1, const)'      'C = __MSLLHI (A, B)'   'MSLLHI A,#B,C'
43581'sw1 __MSRAHI (sw1, const)'      'C = __MSRAHI (A, B)'   'MSRAHI A,#B,C'
43582'uw1 __MSRLHI (uw1, const)'      'C = __MSRLHI (A, B)'   'MSRLHI A,#B,C'
43583'void __MSUBACCS (acc, acc)'     '__MSUBACCS (B, A)'     'MSUBACCS A,B'
43584'sw1 __MSUBHSS (sw1, sw1)'       'C = __MSUBHSS (A,      'MSUBHSS A,B,C'
43585                                 B)'
43586'uw1 __MSUBHUS (uw1, uw1)'       'C = __MSUBHUS (A,      'MSUBHUS A,B,C'
43587                                 B)'
43588'void __MTRAP (void)'            '__MTRAP ()'            'MTRAP'
43589'uw2 __MUNPACKH (uw1)'           'B = __MUNPACKH (A)'    'MUNPACKH A,B'
43590'uw1 __MWCUT (uw2, uw1)'         'C = __MWCUT (A, B)'    'MWCUT A,B,C'
43591'void __MWTACC (acc, uw1)'       '__MWTACC (B, A)'       'MWTACC A,B'
43592'void __MWTACCG (acc, uw1)'      '__MWTACCG (B, A)'      'MWTACCG A,B'
43593'uw1 __MXOR (uw1, uw1)'          'C = __MXOR (A, B)'     'MXOR A,B,C'
43594
43595
43596File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
43597
435986.60.12.4 Raw Read/Write Functions
43599..................................
43600
43601This sections describes built-in functions related to read and write
43602instructions to access memory.  These functions generate 'membar'
43603instructions to flush the I/O load and stores where appropriate, as
43604described in Fujitsu's manual described above.
43605
43606'unsigned char __builtin_read8 (void *DATA)'
43607'unsigned short __builtin_read16 (void *DATA)'
43608'unsigned long __builtin_read32 (void *DATA)'
43609'unsigned long long __builtin_read64 (void *DATA)'
43610
43611'void __builtin_write8 (void *DATA, unsigned char DATUM)'
43612'void __builtin_write16 (void *DATA, unsigned short DATUM)'
43613'void __builtin_write32 (void *DATA, unsigned long DATUM)'
43614'void __builtin_write64 (void *DATA, unsigned long long DATUM)'
43615
43616
43617File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
43618
436196.60.12.5 Other Built-in Functions
43620..................................
43621
43622This section describes built-in functions that are not named after a
43623specific FR-V instruction.
43624
43625'sw2 __IACCreadll (iacc REG)'
43626     Return the full 64-bit value of IACC0.  The REG argument is
43627     reserved for future expansion and must be 0.
43628
43629'sw1 __IACCreadl (iacc REG)'
43630     Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
43631     Other values of REG are rejected as invalid.
43632
43633'void __IACCsetll (iacc REG, sw2 X)'
43634     Set the full 64-bit value of IACC0 to X.  The REG argument is
43635     reserved for future expansion and must be 0.
43636
43637'void __IACCsetl (iacc REG, sw1 X)'
43638     Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
43639     values of REG are rejected as invalid.
43640
43641'void __data_prefetch0 (const void *X)'
43642     Use the 'dcpl' instruction to load the contents of address X into
43643     the data cache.
43644
43645'void __data_prefetch (const void *X)'
43646     Use the 'nldub' instruction to load the contents of address X into
43647     the data cache.  The instruction is issued in slot I1.
43648
43649
43650File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: FR-V Built-in Functions,  Up: Target Builtins
43651
436526.60.13 MIPS DSP Built-in Functions
43653-----------------------------------
43654
43655The MIPS DSP Application-Specific Extension (ASE) includes new
43656instructions that are designed to improve the performance of DSP and
43657media applications.  It provides instructions that operate on packed
436588-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
43659
43660 GCC supports MIPS DSP operations using both the generic vector
43661extensions (*note Vector Extensions::) and a collection of MIPS-specific
43662built-in functions.  Both kinds of support are enabled by the '-mdsp'
43663command-line option.
43664
43665 Revision 2 of the ASE was introduced in the second half of 2006.  This
43666revision adds extra instructions to the original ASE, but is otherwise
43667backwards-compatible with it.  You can select revision 2 using the
43668command-line option '-mdspr2'; this option implies '-mdsp'.
43669
43670 The SCOUNT and POS bits of the DSP control register are global.  The
43671WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and POS
43672bits.  During optimization, the compiler does not delete these
43673instructions and it does not delete calls to functions containing these
43674instructions.
43675
43676 At present, GCC only provides support for operations on 32-bit vectors.
43677The vector type associated with 8-bit integer data is usually called
43678'v4i8', the vector type associated with Q7 is usually called 'v4q7', the
43679vector type associated with 16-bit integer data is usually called
43680'v2i16', and the vector type associated with Q15 is usually called
43681'v2q15'.  They can be defined in C as follows:
43682
43683     typedef signed char v4i8 __attribute__ ((vector_size(4)));
43684     typedef signed char v4q7 __attribute__ ((vector_size(4)));
43685     typedef short v2i16 __attribute__ ((vector_size(4)));
43686     typedef short v2q15 __attribute__ ((vector_size(4)));
43687
43688 'v4i8', 'v4q7', 'v2i16' and 'v2q15' values are initialized in the same
43689way as aggregates.  For example:
43690
43691     v4i8 a = {1, 2, 3, 4};
43692     v4i8 b;
43693     b = (v4i8) {5, 6, 7, 8};
43694
43695     v2q15 c = {0x0fcb, 0x3a75};
43696     v2q15 d;
43697     d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
43698
43699 _Note:_ The CPU's endianness determines the order in which values are
43700packed.  On little-endian targets, the first value is the least
43701significant and the last value is the most significant.  The opposite
43702order applies to big-endian targets.  For example, the code above sets
43703the lowest byte of 'a' to '1' on little-endian targets and '4' on
43704big-endian targets.
43705
43706 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
43707representation.  As shown in this example, the integer representation of
43708a Q7 value can be obtained by multiplying the fractional value by
43709'0x1.0p7'.  The equivalent for Q15 values is to multiply by '0x1.0p15'.
43710The equivalent for Q31 values is to multiply by '0x1.0p31'.
43711
43712 The table below lists the 'v4i8' and 'v2q15' operations for which
43713hardware support exists.  'a' and 'b' are 'v4i8' values, and 'c' and 'd'
43714are 'v2q15' values.
43715
43716C code                               MIPS instruction
43717'a + b'                              'addu.qb'
43718'c + d'                              'addq.ph'
43719'a - b'                              'subu.qb'
43720'c - d'                              'subq.ph'
43721
43722 The table below lists the 'v2i16' operation for which hardware support
43723exists for the DSP ASE REV 2.  'e' and 'f' are 'v2i16' values.
43724
43725C code                               MIPS instruction
43726'e * f'                              'mul.ph'
43727
43728 It is easier to describe the DSP built-in functions if we first define
43729the following types:
43730
43731     typedef int q31;
43732     typedef int i32;
43733     typedef unsigned int ui32;
43734     typedef long long a64;
43735
43736 'q31' and 'i32' are actually the same as 'int', but we use 'q31' to
43737indicate a Q31 fractional value and 'i32' to indicate a 32-bit integer
43738value.  Similarly, 'a64' is the same as 'long long', but we use 'a64' to
43739indicate values that are placed in one of the four DSP accumulators
43740('$ac0', '$ac1', '$ac2' or '$ac3').
43741
43742 Also, some built-in functions prefer or require immediate numbers as
43743parameters, because the corresponding DSP instructions accept both
43744immediate numbers and register operands, or accept immediate numbers
43745only.  The immediate parameters are listed as follows.
43746
43747     imm0_3: 0 to 3.
43748     imm0_7: 0 to 7.
43749     imm0_15: 0 to 15.
43750     imm0_31: 0 to 31.
43751     imm0_63: 0 to 63.
43752     imm0_255: 0 to 255.
43753     imm_n32_31: -32 to 31.
43754     imm_n512_511: -512 to 511.
43755
43756 The following built-in functions map directly to a particular MIPS DSP
43757instruction.  Please refer to the architecture specification for details
43758on what each instruction does.
43759
43760     v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
43761     v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
43762     q31 __builtin_mips_addq_s_w (q31, q31)
43763     v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
43764     v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
43765     v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
43766     v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
43767     q31 __builtin_mips_subq_s_w (q31, q31)
43768     v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
43769     v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
43770     i32 __builtin_mips_addsc (i32, i32)
43771     i32 __builtin_mips_addwc (i32, i32)
43772     i32 __builtin_mips_modsub (i32, i32)
43773     i32 __builtin_mips_raddu_w_qb (v4i8)
43774     v2q15 __builtin_mips_absq_s_ph (v2q15)
43775     q31 __builtin_mips_absq_s_w (q31)
43776     v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
43777     v2q15 __builtin_mips_precrq_ph_w (q31, q31)
43778     v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
43779     v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
43780     q31 __builtin_mips_preceq_w_phl (v2q15)
43781     q31 __builtin_mips_preceq_w_phr (v2q15)
43782     v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
43783     v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
43784     v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
43785     v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
43786     v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
43787     v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
43788     v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
43789     v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
43790     v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
43791     v4i8 __builtin_mips_shll_qb (v4i8, i32)
43792     v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
43793     v2q15 __builtin_mips_shll_ph (v2q15, i32)
43794     v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
43795     v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
43796     q31 __builtin_mips_shll_s_w (q31, imm0_31)
43797     q31 __builtin_mips_shll_s_w (q31, i32)
43798     v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
43799     v4i8 __builtin_mips_shrl_qb (v4i8, i32)
43800     v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
43801     v2q15 __builtin_mips_shra_ph (v2q15, i32)
43802     v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
43803     v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
43804     q31 __builtin_mips_shra_r_w (q31, imm0_31)
43805     q31 __builtin_mips_shra_r_w (q31, i32)
43806     v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
43807     v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
43808     v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
43809     q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
43810     q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
43811     a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
43812     a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
43813     a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
43814     a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
43815     a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
43816     a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
43817     a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
43818     a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
43819     a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
43820     a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
43821     a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
43822     a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
43823     a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
43824     i32 __builtin_mips_bitrev (i32)
43825     i32 __builtin_mips_insv (i32, i32)
43826     v4i8 __builtin_mips_repl_qb (imm0_255)
43827     v4i8 __builtin_mips_repl_qb (i32)
43828     v2q15 __builtin_mips_repl_ph (imm_n512_511)
43829     v2q15 __builtin_mips_repl_ph (i32)
43830     void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
43831     void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
43832     void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
43833     i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
43834     i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
43835     i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
43836     void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
43837     void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
43838     void __builtin_mips_cmp_le_ph (v2q15, v2q15)
43839     v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
43840     v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
43841     v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
43842     i32 __builtin_mips_extr_w (a64, imm0_31)
43843     i32 __builtin_mips_extr_w (a64, i32)
43844     i32 __builtin_mips_extr_r_w (a64, imm0_31)
43845     i32 __builtin_mips_extr_s_h (a64, i32)
43846     i32 __builtin_mips_extr_rs_w (a64, imm0_31)
43847     i32 __builtin_mips_extr_rs_w (a64, i32)
43848     i32 __builtin_mips_extr_s_h (a64, imm0_31)
43849     i32 __builtin_mips_extr_r_w (a64, i32)
43850     i32 __builtin_mips_extp (a64, imm0_31)
43851     i32 __builtin_mips_extp (a64, i32)
43852     i32 __builtin_mips_extpdp (a64, imm0_31)
43853     i32 __builtin_mips_extpdp (a64, i32)
43854     a64 __builtin_mips_shilo (a64, imm_n32_31)
43855     a64 __builtin_mips_shilo (a64, i32)
43856     a64 __builtin_mips_mthlip (a64, i32)
43857     void __builtin_mips_wrdsp (i32, imm0_63)
43858     i32 __builtin_mips_rddsp (imm0_63)
43859     i32 __builtin_mips_lbux (void *, i32)
43860     i32 __builtin_mips_lhx (void *, i32)
43861     i32 __builtin_mips_lwx (void *, i32)
43862     a64 __builtin_mips_ldx (void *, i32) [MIPS64 only]
43863     i32 __builtin_mips_bposge32 (void)
43864     a64 __builtin_mips_madd (a64, i32, i32);
43865     a64 __builtin_mips_maddu (a64, ui32, ui32);
43866     a64 __builtin_mips_msub (a64, i32, i32);
43867     a64 __builtin_mips_msubu (a64, ui32, ui32);
43868     a64 __builtin_mips_mult (i32, i32);
43869     a64 __builtin_mips_multu (ui32, ui32);
43870
43871 The following built-in functions map directly to a particular MIPS DSP
43872REV 2 instruction.  Please refer to the architecture specification for
43873details on what each instruction does.
43874
43875     v4q7 __builtin_mips_absq_s_qb (v4q7);
43876     v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
43877     v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
43878     v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
43879     v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
43880     i32 __builtin_mips_append (i32, i32, imm0_31);
43881     i32 __builtin_mips_balign (i32, i32, imm0_3);
43882     i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
43883     i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
43884     i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
43885     a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
43886     a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
43887     v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
43888     v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
43889     q31 __builtin_mips_mulq_rs_w (q31, q31);
43890     v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
43891     q31 __builtin_mips_mulq_s_w (q31, q31);
43892     a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
43893     v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
43894     v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
43895     v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
43896     i32 __builtin_mips_prepend (i32, i32, imm0_31);
43897     v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
43898     v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
43899     v4i8 __builtin_mips_shra_qb (v4i8, i32);
43900     v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
43901     v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
43902     v2i16 __builtin_mips_shrl_ph (v2i16, i32);
43903     v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
43904     v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
43905     v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
43906     v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
43907     v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
43908     v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
43909     q31 __builtin_mips_addqh_w (q31, q31);
43910     q31 __builtin_mips_addqh_r_w (q31, q31);
43911     v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
43912     v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
43913     q31 __builtin_mips_subqh_w (q31, q31);
43914     q31 __builtin_mips_subqh_r_w (q31, q31);
43915     a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
43916     a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
43917     a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
43918     a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
43919     a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
43920     a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
43921
43922
43923File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
43924
439256.60.14 MIPS Paired-Single Support
43926----------------------------------
43927
43928The MIPS64 architecture includes a number of instructions that operate
43929on pairs of single-precision floating-point values.  Each pair is packed
43930into a 64-bit floating-point register, with one element being designated
43931the "upper half" and the other being designated the "lower half".
43932
43933 GCC supports paired-single operations using both the generic vector
43934extensions (*note Vector Extensions::) and a collection of MIPS-specific
43935built-in functions.  Both kinds of support are enabled by the
43936'-mpaired-single' command-line option.
43937
43938 The vector type associated with paired-single values is usually called
43939'v2sf'.  It can be defined in C as follows:
43940
43941     typedef float v2sf __attribute__ ((vector_size (8)));
43942
43943 'v2sf' values are initialized in the same way as aggregates.  For
43944example:
43945
43946     v2sf a = {1.5, 9.1};
43947     v2sf b;
43948     float e, f;
43949     b = (v2sf) {e, f};
43950
43951 _Note:_ The CPU's endianness determines which value is stored in the
43952upper half of a register and which value is stored in the lower half.
43953On little-endian targets, the first value is the lower one and the
43954second value is the upper one.  The opposite order applies to big-endian
43955targets.  For example, the code above sets the lower half of 'a' to
43956'1.5' on little-endian targets and '9.1' on big-endian targets.
43957
43958
43959File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: MIPS SIMD Architecture (MSA) Support,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
43960
439616.60.15 MIPS Loongson Built-in Functions
43962----------------------------------------
43963
43964GCC provides intrinsics to access the SIMD instructions provided by the
43965ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
43966available after inclusion of the 'loongson.h' header file, operate on
43967the following 64-bit vector types:
43968
43969   * 'uint8x8_t', a vector of eight unsigned 8-bit integers;
43970   * 'uint16x4_t', a vector of four unsigned 16-bit integers;
43971   * 'uint32x2_t', a vector of two unsigned 32-bit integers;
43972   * 'int8x8_t', a vector of eight signed 8-bit integers;
43973   * 'int16x4_t', a vector of four signed 16-bit integers;
43974   * 'int32x2_t', a vector of two signed 32-bit integers.
43975
43976 The intrinsics provided are listed below; each is named after the
43977machine instruction to which it corresponds, with suffixes added as
43978appropriate to distinguish intrinsics that expand to the same machine
43979instruction yet have different argument types.  Refer to the
43980architecture documentation for a description of the functionality of
43981each instruction.
43982
43983     int16x4_t packsswh (int32x2_t s, int32x2_t t);
43984     int8x8_t packsshb (int16x4_t s, int16x4_t t);
43985     uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
43986     uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
43987     uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
43988     uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
43989     int32x2_t paddw_s (int32x2_t s, int32x2_t t);
43990     int16x4_t paddh_s (int16x4_t s, int16x4_t t);
43991     int8x8_t paddb_s (int8x8_t s, int8x8_t t);
43992     uint64_t paddd_u (uint64_t s, uint64_t t);
43993     int64_t paddd_s (int64_t s, int64_t t);
43994     int16x4_t paddsh (int16x4_t s, int16x4_t t);
43995     int8x8_t paddsb (int8x8_t s, int8x8_t t);
43996     uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
43997     uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
43998     uint64_t pandn_ud (uint64_t s, uint64_t t);
43999     uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
44000     uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
44001     uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
44002     int64_t pandn_sd (int64_t s, int64_t t);
44003     int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
44004     int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
44005     int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
44006     uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
44007     uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
44008     uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
44009     uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
44010     uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
44011     int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
44012     int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
44013     int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
44014     uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
44015     uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
44016     uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
44017     int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
44018     int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
44019     int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
44020     uint16x4_t pextrh_u (uint16x4_t s, int field);
44021     int16x4_t pextrh_s (int16x4_t s, int field);
44022     uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
44023     uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
44024     uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
44025     uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
44026     int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
44027     int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
44028     int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
44029     int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
44030     int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
44031     int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
44032     uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
44033     int16x4_t pminsh (int16x4_t s, int16x4_t t);
44034     uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
44035     uint8x8_t pmovmskb_u (uint8x8_t s);
44036     int8x8_t pmovmskb_s (int8x8_t s);
44037     uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
44038     int16x4_t pmulhh (int16x4_t s, int16x4_t t);
44039     int16x4_t pmullh (int16x4_t s, int16x4_t t);
44040     int64_t pmuluw (uint32x2_t s, uint32x2_t t);
44041     uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
44042     uint16x4_t biadd (uint8x8_t s);
44043     uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
44044     uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
44045     int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
44046     uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
44047     int16x4_t psllh_s (int16x4_t s, uint8_t amount);
44048     uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
44049     int32x2_t psllw_s (int32x2_t s, uint8_t amount);
44050     uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
44051     int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
44052     uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
44053     int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
44054     uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
44055     int16x4_t psrah_s (int16x4_t s, uint8_t amount);
44056     uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
44057     int32x2_t psraw_s (int32x2_t s, uint8_t amount);
44058     uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
44059     uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
44060     uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
44061     int32x2_t psubw_s (int32x2_t s, int32x2_t t);
44062     int16x4_t psubh_s (int16x4_t s, int16x4_t t);
44063     int8x8_t psubb_s (int8x8_t s, int8x8_t t);
44064     uint64_t psubd_u (uint64_t s, uint64_t t);
44065     int64_t psubd_s (int64_t s, int64_t t);
44066     int16x4_t psubsh (int16x4_t s, int16x4_t t);
44067     int8x8_t psubsb (int8x8_t s, int8x8_t t);
44068     uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
44069     uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
44070     uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
44071     uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
44072     uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
44073     int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
44074     int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
44075     int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
44076     uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
44077     uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
44078     uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
44079     int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
44080     int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
44081     int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
44082
44083* Menu:
44084
44085* Paired-Single Arithmetic::
44086* Paired-Single Built-in Functions::
44087* MIPS-3D Built-in Functions::
44088
44089
44090File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
44091
440926.60.15.1 Paired-Single Arithmetic
44093..................................
44094
44095The table below lists the 'v2sf' operations for which hardware support
44096exists.  'a', 'b' and 'c' are 'v2sf' values and 'x' is an integral
44097value.
44098
44099C code                               MIPS instruction
44100'a + b'                              'add.ps'
44101'a - b'                              'sub.ps'
44102'-a'                                 'neg.ps'
44103'a * b'                              'mul.ps'
44104'a * b + c'                          'madd.ps'
44105'a * b - c'                          'msub.ps'
44106'-(a * b + c)'                       'nmadd.ps'
44107'-(a * b - c)'                       'nmsub.ps'
44108'x ? a : b'                          'movn.ps'/'movz.ps'
44109
44110 Note that the multiply-accumulate instructions can be disabled using
44111the command-line option '-mno-fused-madd'.
44112
44113
44114File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Loongson Built-in Functions
44115
441166.60.15.2 Paired-Single Built-in Functions
44117..........................................
44118
44119The following paired-single functions map directly to a particular MIPS
44120instruction.  Please refer to the architecture specification for details
44121on what each instruction does.
44122
44123'v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
44124     Pair lower lower ('pll.ps').
44125
44126'v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
44127     Pair upper lower ('pul.ps').
44128
44129'v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
44130     Pair lower upper ('plu.ps').
44131
44132'v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
44133     Pair upper upper ('puu.ps').
44134
44135'v2sf __builtin_mips_cvt_ps_s (float, float)'
44136     Convert pair to paired single ('cvt.ps.s').
44137
44138'float __builtin_mips_cvt_s_pl (v2sf)'
44139     Convert pair lower to single ('cvt.s.pl').
44140
44141'float __builtin_mips_cvt_s_pu (v2sf)'
44142     Convert pair upper to single ('cvt.s.pu').
44143
44144'v2sf __builtin_mips_abs_ps (v2sf)'
44145     Absolute value ('abs.ps').
44146
44147'v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
44148     Align variable ('alnv.ps').
44149
44150     _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
44151     otherwise the result is unpredictable.  Please read the instruction
44152     description for details.
44153
44154 The following multi-instruction functions are also available.  In each
44155case, COND can be any of the 16 floating-point conditions: 'f', 'un',
44156'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
44157'lt', 'nge', 'le' or 'ngt'.
44158
44159'v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
44160'v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
44161     Conditional move based on floating-point comparison ('c.COND.ps',
44162     'movt.ps'/'movf.ps').
44163
44164     The 'movt' functions return the value X computed by:
44165
44166          c.COND.ps CC,A,B
44167          mov.ps X,C
44168          movt.ps X,D,CC
44169
44170     The 'movf' functions are similar but use 'movf.ps' instead of
44171     'movt.ps'.
44172
44173'int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
44174'int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
44175     Comparison of two paired-single values ('c.COND.ps',
44176     'bc1t'/'bc1f').
44177
44178     These functions compare A and B using 'c.COND.ps' and return either
44179     the upper or lower half of the result.  For example:
44180
44181          v2sf a, b;
44182          if (__builtin_mips_upper_c_eq_ps (a, b))
44183            upper_halves_are_equal ();
44184          else
44185            upper_halves_are_unequal ();
44186
44187          if (__builtin_mips_lower_c_eq_ps (a, b))
44188            lower_halves_are_equal ();
44189          else
44190            lower_halves_are_unequal ();
44191
44192
44193File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
44194
441956.60.15.3 MIPS-3D Built-in Functions
44196....................................
44197
44198The MIPS-3D Application-Specific Extension (ASE) includes additional
44199paired-single instructions that are designed to improve the performance
44200of 3D graphics operations.  Support for these instructions is controlled
44201by the '-mips3d' command-line option.
44202
44203 The functions listed below map directly to a particular MIPS-3D
44204instruction.  Please refer to the architecture specification for more
44205details on what each instruction does.
44206
44207'v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
44208     Reduction add ('addr.ps').
44209
44210'v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
44211     Reduction multiply ('mulr.ps').
44212
44213'v2sf __builtin_mips_cvt_pw_ps (v2sf)'
44214     Convert paired single to paired word ('cvt.pw.ps').
44215
44216'v2sf __builtin_mips_cvt_ps_pw (v2sf)'
44217     Convert paired word to paired single ('cvt.ps.pw').
44218
44219'float __builtin_mips_recip1_s (float)'
44220'double __builtin_mips_recip1_d (double)'
44221'v2sf __builtin_mips_recip1_ps (v2sf)'
44222     Reduced-precision reciprocal (sequence step 1) ('recip1.FMT').
44223
44224'float __builtin_mips_recip2_s (float, float)'
44225'double __builtin_mips_recip2_d (double, double)'
44226'v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
44227     Reduced-precision reciprocal (sequence step 2) ('recip2.FMT').
44228
44229'float __builtin_mips_rsqrt1_s (float)'
44230'double __builtin_mips_rsqrt1_d (double)'
44231'v2sf __builtin_mips_rsqrt1_ps (v2sf)'
44232     Reduced-precision reciprocal square root (sequence step 1)
44233     ('rsqrt1.FMT').
44234
44235'float __builtin_mips_rsqrt2_s (float, float)'
44236'double __builtin_mips_rsqrt2_d (double, double)'
44237'v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
44238     Reduced-precision reciprocal square root (sequence step 2)
44239     ('rsqrt2.FMT').
44240
44241 The following multi-instruction functions are also available.  In each
44242case, COND can be any of the 16 floating-point conditions: 'f', 'un',
44243'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
44244'lt', 'nge', 'le' or 'ngt'.
44245
44246'int __builtin_mips_cabs_COND_s (float A, float B)'
44247'int __builtin_mips_cabs_COND_d (double A, double B)'
44248     Absolute comparison of two scalar values ('cabs.COND.FMT',
44249     'bc1t'/'bc1f').
44250
44251     These functions compare A and B using 'cabs.COND.s' or
44252     'cabs.COND.d' and return the result as a boolean value.  For
44253     example:
44254
44255          float a, b;
44256          if (__builtin_mips_cabs_eq_s (a, b))
44257            true ();
44258          else
44259            false ();
44260
44261'int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
44262'int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
44263     Absolute comparison of two paired-single values ('cabs.COND.ps',
44264     'bc1t'/'bc1f').
44265
44266     These functions compare A and B using 'cabs.COND.ps' and return
44267     either the upper or lower half of the result.  For example:
44268
44269          v2sf a, b;
44270          if (__builtin_mips_upper_cabs_eq_ps (a, b))
44271            upper_halves_are_equal ();
44272          else
44273            upper_halves_are_unequal ();
44274
44275          if (__builtin_mips_lower_cabs_eq_ps (a, b))
44276            lower_halves_are_equal ();
44277          else
44278            lower_halves_are_unequal ();
44279
44280'v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
44281'v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
44282     Conditional move based on absolute comparison ('cabs.COND.ps',
44283     'movt.ps'/'movf.ps').
44284
44285     The 'movt' functions return the value X computed by:
44286
44287          cabs.COND.ps CC,A,B
44288          mov.ps X,C
44289          movt.ps X,D,CC
44290
44291     The 'movf' functions are similar but use 'movf.ps' instead of
44292     'movt.ps'.
44293
44294'int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
44295'int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
44296'int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
44297'int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
44298     Comparison of two paired-single values ('c.COND.ps'/'cabs.COND.ps',
44299     'bc1any2t'/'bc1any2f').
44300
44301     These functions compare A and B using 'c.COND.ps' or
44302     'cabs.COND.ps'.  The 'any' forms return 'true' if either result is
44303     'true' and the 'all' forms return 'true' if both results are
44304     'true'.  For example:
44305
44306          v2sf a, b;
44307          if (__builtin_mips_any_c_eq_ps (a, b))
44308            one_is_true ();
44309          else
44310            both_are_false ();
44311
44312          if (__builtin_mips_all_c_eq_ps (a, b))
44313            both_are_true ();
44314          else
44315            one_is_false ();
44316
44317'int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
44318'int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
44319'int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
44320'int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
44321     Comparison of four paired-single values
44322     ('c.COND.ps'/'cabs.COND.ps', 'bc1any4t'/'bc1any4f').
44323
44324     These functions use 'c.COND.ps' or 'cabs.COND.ps' to compare A with
44325     B and to compare C with D.  The 'any' forms return 'true' if any of
44326     the four results are 'true' and the 'all' forms return 'true' if
44327     all four results are 'true'.  For example:
44328
44329          v2sf a, b, c, d;
44330          if (__builtin_mips_any_c_eq_4s (a, b, c, d))
44331            some_are_true ();
44332          else
44333            all_are_false ();
44334
44335          if (__builtin_mips_all_c_eq_4s (a, b, c, d))
44336            all_are_true ();
44337          else
44338            some_are_false ();
44339
44340
44341File: gcc.info,  Node: MIPS SIMD Architecture (MSA) Support,  Next: Other MIPS Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins
44342
443436.60.16 MIPS SIMD Architecture (MSA) Support
44344--------------------------------------------
44345
44346* Menu:
44347
44348* MIPS SIMD Architecture Built-in Functions::
44349
44350GCC provides intrinsics to access the SIMD instructions provided by the
44351MSA MIPS SIMD Architecture.  The interface is made available by
44352including '<msa.h>' and using '-mmsa -mhard-float -mfp64 -mnan=2008'.
44353For each '__builtin_msa_*', there is a shortened name of the intrinsic,
44354'__msa_*'.
44355
44356 MSA implements 128-bit wide vector registers, operating on 8-, 16-, 32-
44357and 64-bit integer, 16- and 32-bit fixed-point, or 32- and 64-bit
44358floating point data elements.  The following vectors typedefs are
44359included in 'msa.h':
44360   * 'v16i8', a vector of sixteen signed 8-bit integers;
44361   * 'v16u8', a vector of sixteen unsigned 8-bit integers;
44362   * 'v8i16', a vector of eight signed 16-bit integers;
44363   * 'v8u16', a vector of eight unsigned 16-bit integers;
44364   * 'v4i32', a vector of four signed 32-bit integers;
44365   * 'v4u32', a vector of four unsigned 32-bit integers;
44366   * 'v2i64', a vector of two signed 64-bit integers;
44367   * 'v2u64', a vector of two unsigned 64-bit integers;
44368   * 'v4f32', a vector of four 32-bit floats;
44369   * 'v2f64', a vector of two 64-bit doubles.
44370
44371 Instructions and corresponding built-ins may have additional
44372restrictions and/or input/output values manipulated:
44373   * 'imm0_1', an integer literal in range 0 to 1;
44374   * 'imm0_3', an integer literal in range 0 to 3;
44375   * 'imm0_7', an integer literal in range 0 to 7;
44376   * 'imm0_15', an integer literal in range 0 to 15;
44377   * 'imm0_31', an integer literal in range 0 to 31;
44378   * 'imm0_63', an integer literal in range 0 to 63;
44379   * 'imm0_255', an integer literal in range 0 to 255;
44380   * 'imm_n16_15', an integer literal in range -16 to 15;
44381   * 'imm_n512_511', an integer literal in range -512 to 511;
44382   * 'imm_n1024_1022', an integer literal in range -512 to 511 left
44383     shifted by 1 bit, i.e., -1024, -1022, ..., 1020, 1022;
44384   * 'imm_n2048_2044', an integer literal in range -512 to 511 left
44385     shifted by 2 bits, i.e., -2048, -2044, ..., 2040, 2044;
44386   * 'imm_n4096_4088', an integer literal in range -512 to 511 left
44387     shifted by 3 bits, i.e., -4096, -4088, ..., 4080, 4088;
44388   * 'imm1_4', an integer literal in range 1 to 4;
44389   * 'i32, i64, u32, u64, f32, f64', defined as follows:
44390
44391     {
44392     typedef int i32;
44393     #if __LONG_MAX__ == __LONG_LONG_MAX__
44394     typedef long i64;
44395     #else
44396     typedef long long i64;
44397     #endif
44398
44399     typedef unsigned int u32;
44400     #if __LONG_MAX__ == __LONG_LONG_MAX__
44401     typedef unsigned long u64;
44402     #else
44403     typedef unsigned long long u64;
44404     #endif
44405
44406     typedef double f64;
44407     typedef float f32;
44408     }
44409
44410
44411File: gcc.info,  Node: MIPS SIMD Architecture Built-in Functions,  Up: MIPS SIMD Architecture (MSA) Support
44412
444136.60.16.1 MIPS SIMD Architecture Built-in Functions
44414...................................................
44415
44416The intrinsics provided are listed below; each is named after the
44417machine instruction.
44418
44419     v16i8 __builtin_msa_add_a_b (v16i8, v16i8);
44420     v8i16 __builtin_msa_add_a_h (v8i16, v8i16);
44421     v4i32 __builtin_msa_add_a_w (v4i32, v4i32);
44422     v2i64 __builtin_msa_add_a_d (v2i64, v2i64);
44423
44424     v16i8 __builtin_msa_adds_a_b (v16i8, v16i8);
44425     v8i16 __builtin_msa_adds_a_h (v8i16, v8i16);
44426     v4i32 __builtin_msa_adds_a_w (v4i32, v4i32);
44427     v2i64 __builtin_msa_adds_a_d (v2i64, v2i64);
44428
44429     v16i8 __builtin_msa_adds_s_b (v16i8, v16i8);
44430     v8i16 __builtin_msa_adds_s_h (v8i16, v8i16);
44431     v4i32 __builtin_msa_adds_s_w (v4i32, v4i32);
44432     v2i64 __builtin_msa_adds_s_d (v2i64, v2i64);
44433
44434     v16u8 __builtin_msa_adds_u_b (v16u8, v16u8);
44435     v8u16 __builtin_msa_adds_u_h (v8u16, v8u16);
44436     v4u32 __builtin_msa_adds_u_w (v4u32, v4u32);
44437     v2u64 __builtin_msa_adds_u_d (v2u64, v2u64);
44438
44439     v16i8 __builtin_msa_addv_b (v16i8, v16i8);
44440     v8i16 __builtin_msa_addv_h (v8i16, v8i16);
44441     v4i32 __builtin_msa_addv_w (v4i32, v4i32);
44442     v2i64 __builtin_msa_addv_d (v2i64, v2i64);
44443
44444     v16i8 __builtin_msa_addvi_b (v16i8, imm0_31);
44445     v8i16 __builtin_msa_addvi_h (v8i16, imm0_31);
44446     v4i32 __builtin_msa_addvi_w (v4i32, imm0_31);
44447     v2i64 __builtin_msa_addvi_d (v2i64, imm0_31);
44448
44449     v16u8 __builtin_msa_and_v (v16u8, v16u8);
44450
44451     v16u8 __builtin_msa_andi_b (v16u8, imm0_255);
44452
44453     v16i8 __builtin_msa_asub_s_b (v16i8, v16i8);
44454     v8i16 __builtin_msa_asub_s_h (v8i16, v8i16);
44455     v4i32 __builtin_msa_asub_s_w (v4i32, v4i32);
44456     v2i64 __builtin_msa_asub_s_d (v2i64, v2i64);
44457
44458     v16u8 __builtin_msa_asub_u_b (v16u8, v16u8);
44459     v8u16 __builtin_msa_asub_u_h (v8u16, v8u16);
44460     v4u32 __builtin_msa_asub_u_w (v4u32, v4u32);
44461     v2u64 __builtin_msa_asub_u_d (v2u64, v2u64);
44462
44463     v16i8 __builtin_msa_ave_s_b (v16i8, v16i8);
44464     v8i16 __builtin_msa_ave_s_h (v8i16, v8i16);
44465     v4i32 __builtin_msa_ave_s_w (v4i32, v4i32);
44466     v2i64 __builtin_msa_ave_s_d (v2i64, v2i64);
44467
44468     v16u8 __builtin_msa_ave_u_b (v16u8, v16u8);
44469     v8u16 __builtin_msa_ave_u_h (v8u16, v8u16);
44470     v4u32 __builtin_msa_ave_u_w (v4u32, v4u32);
44471     v2u64 __builtin_msa_ave_u_d (v2u64, v2u64);
44472
44473     v16i8 __builtin_msa_aver_s_b (v16i8, v16i8);
44474     v8i16 __builtin_msa_aver_s_h (v8i16, v8i16);
44475     v4i32 __builtin_msa_aver_s_w (v4i32, v4i32);
44476     v2i64 __builtin_msa_aver_s_d (v2i64, v2i64);
44477
44478     v16u8 __builtin_msa_aver_u_b (v16u8, v16u8);
44479     v8u16 __builtin_msa_aver_u_h (v8u16, v8u16);
44480     v4u32 __builtin_msa_aver_u_w (v4u32, v4u32);
44481     v2u64 __builtin_msa_aver_u_d (v2u64, v2u64);
44482
44483     v16u8 __builtin_msa_bclr_b (v16u8, v16u8);
44484     v8u16 __builtin_msa_bclr_h (v8u16, v8u16);
44485     v4u32 __builtin_msa_bclr_w (v4u32, v4u32);
44486     v2u64 __builtin_msa_bclr_d (v2u64, v2u64);
44487
44488     v16u8 __builtin_msa_bclri_b (v16u8, imm0_7);
44489     v8u16 __builtin_msa_bclri_h (v8u16, imm0_15);
44490     v4u32 __builtin_msa_bclri_w (v4u32, imm0_31);
44491     v2u64 __builtin_msa_bclri_d (v2u64, imm0_63);
44492
44493     v16u8 __builtin_msa_binsl_b (v16u8, v16u8, v16u8);
44494     v8u16 __builtin_msa_binsl_h (v8u16, v8u16, v8u16);
44495     v4u32 __builtin_msa_binsl_w (v4u32, v4u32, v4u32);
44496     v2u64 __builtin_msa_binsl_d (v2u64, v2u64, v2u64);
44497
44498     v16u8 __builtin_msa_binsli_b (v16u8, v16u8, imm0_7);
44499     v8u16 __builtin_msa_binsli_h (v8u16, v8u16, imm0_15);
44500     v4u32 __builtin_msa_binsli_w (v4u32, v4u32, imm0_31);
44501     v2u64 __builtin_msa_binsli_d (v2u64, v2u64, imm0_63);
44502
44503     v16u8 __builtin_msa_binsr_b (v16u8, v16u8, v16u8);
44504     v8u16 __builtin_msa_binsr_h (v8u16, v8u16, v8u16);
44505     v4u32 __builtin_msa_binsr_w (v4u32, v4u32, v4u32);
44506     v2u64 __builtin_msa_binsr_d (v2u64, v2u64, v2u64);
44507
44508     v16u8 __builtin_msa_binsri_b (v16u8, v16u8, imm0_7);
44509     v8u16 __builtin_msa_binsri_h (v8u16, v8u16, imm0_15);
44510     v4u32 __builtin_msa_binsri_w (v4u32, v4u32, imm0_31);
44511     v2u64 __builtin_msa_binsri_d (v2u64, v2u64, imm0_63);
44512
44513     v16u8 __builtin_msa_bmnz_v (v16u8, v16u8, v16u8);
44514
44515     v16u8 __builtin_msa_bmnzi_b (v16u8, v16u8, imm0_255);
44516
44517     v16u8 __builtin_msa_bmz_v (v16u8, v16u8, v16u8);
44518
44519     v16u8 __builtin_msa_bmzi_b (v16u8, v16u8, imm0_255);
44520
44521     v16u8 __builtin_msa_bneg_b (v16u8, v16u8);
44522     v8u16 __builtin_msa_bneg_h (v8u16, v8u16);
44523     v4u32 __builtin_msa_bneg_w (v4u32, v4u32);
44524     v2u64 __builtin_msa_bneg_d (v2u64, v2u64);
44525
44526     v16u8 __builtin_msa_bnegi_b (v16u8, imm0_7);
44527     v8u16 __builtin_msa_bnegi_h (v8u16, imm0_15);
44528     v4u32 __builtin_msa_bnegi_w (v4u32, imm0_31);
44529     v2u64 __builtin_msa_bnegi_d (v2u64, imm0_63);
44530
44531     i32 __builtin_msa_bnz_b (v16u8);
44532     i32 __builtin_msa_bnz_h (v8u16);
44533     i32 __builtin_msa_bnz_w (v4u32);
44534     i32 __builtin_msa_bnz_d (v2u64);
44535
44536     i32 __builtin_msa_bnz_v (v16u8);
44537
44538     v16u8 __builtin_msa_bsel_v (v16u8, v16u8, v16u8);
44539
44540     v16u8 __builtin_msa_bseli_b (v16u8, v16u8, imm0_255);
44541
44542     v16u8 __builtin_msa_bset_b (v16u8, v16u8);
44543     v8u16 __builtin_msa_bset_h (v8u16, v8u16);
44544     v4u32 __builtin_msa_bset_w (v4u32, v4u32);
44545     v2u64 __builtin_msa_bset_d (v2u64, v2u64);
44546
44547     v16u8 __builtin_msa_bseti_b (v16u8, imm0_7);
44548     v8u16 __builtin_msa_bseti_h (v8u16, imm0_15);
44549     v4u32 __builtin_msa_bseti_w (v4u32, imm0_31);
44550     v2u64 __builtin_msa_bseti_d (v2u64, imm0_63);
44551
44552     i32 __builtin_msa_bz_b (v16u8);
44553     i32 __builtin_msa_bz_h (v8u16);
44554     i32 __builtin_msa_bz_w (v4u32);
44555     i32 __builtin_msa_bz_d (v2u64);
44556
44557     i32 __builtin_msa_bz_v (v16u8);
44558
44559     v16i8 __builtin_msa_ceq_b (v16i8, v16i8);
44560     v8i16 __builtin_msa_ceq_h (v8i16, v8i16);
44561     v4i32 __builtin_msa_ceq_w (v4i32, v4i32);
44562     v2i64 __builtin_msa_ceq_d (v2i64, v2i64);
44563
44564     v16i8 __builtin_msa_ceqi_b (v16i8, imm_n16_15);
44565     v8i16 __builtin_msa_ceqi_h (v8i16, imm_n16_15);
44566     v4i32 __builtin_msa_ceqi_w (v4i32, imm_n16_15);
44567     v2i64 __builtin_msa_ceqi_d (v2i64, imm_n16_15);
44568
44569     i32 __builtin_msa_cfcmsa (imm0_31);
44570
44571     v16i8 __builtin_msa_cle_s_b (v16i8, v16i8);
44572     v8i16 __builtin_msa_cle_s_h (v8i16, v8i16);
44573     v4i32 __builtin_msa_cle_s_w (v4i32, v4i32);
44574     v2i64 __builtin_msa_cle_s_d (v2i64, v2i64);
44575
44576     v16i8 __builtin_msa_cle_u_b (v16u8, v16u8);
44577     v8i16 __builtin_msa_cle_u_h (v8u16, v8u16);
44578     v4i32 __builtin_msa_cle_u_w (v4u32, v4u32);
44579     v2i64 __builtin_msa_cle_u_d (v2u64, v2u64);
44580
44581     v16i8 __builtin_msa_clei_s_b (v16i8, imm_n16_15);
44582     v8i16 __builtin_msa_clei_s_h (v8i16, imm_n16_15);
44583     v4i32 __builtin_msa_clei_s_w (v4i32, imm_n16_15);
44584     v2i64 __builtin_msa_clei_s_d (v2i64, imm_n16_15);
44585
44586     v16i8 __builtin_msa_clei_u_b (v16u8, imm0_31);
44587     v8i16 __builtin_msa_clei_u_h (v8u16, imm0_31);
44588     v4i32 __builtin_msa_clei_u_w (v4u32, imm0_31);
44589     v2i64 __builtin_msa_clei_u_d (v2u64, imm0_31);
44590
44591     v16i8 __builtin_msa_clt_s_b (v16i8, v16i8);
44592     v8i16 __builtin_msa_clt_s_h (v8i16, v8i16);
44593     v4i32 __builtin_msa_clt_s_w (v4i32, v4i32);
44594     v2i64 __builtin_msa_clt_s_d (v2i64, v2i64);
44595
44596     v16i8 __builtin_msa_clt_u_b (v16u8, v16u8);
44597     v8i16 __builtin_msa_clt_u_h (v8u16, v8u16);
44598     v4i32 __builtin_msa_clt_u_w (v4u32, v4u32);
44599     v2i64 __builtin_msa_clt_u_d (v2u64, v2u64);
44600
44601     v16i8 __builtin_msa_clti_s_b (v16i8, imm_n16_15);
44602     v8i16 __builtin_msa_clti_s_h (v8i16, imm_n16_15);
44603     v4i32 __builtin_msa_clti_s_w (v4i32, imm_n16_15);
44604     v2i64 __builtin_msa_clti_s_d (v2i64, imm_n16_15);
44605
44606     v16i8 __builtin_msa_clti_u_b (v16u8, imm0_31);
44607     v8i16 __builtin_msa_clti_u_h (v8u16, imm0_31);
44608     v4i32 __builtin_msa_clti_u_w (v4u32, imm0_31);
44609     v2i64 __builtin_msa_clti_u_d (v2u64, imm0_31);
44610
44611     i32 __builtin_msa_copy_s_b (v16i8, imm0_15);
44612     i32 __builtin_msa_copy_s_h (v8i16, imm0_7);
44613     i32 __builtin_msa_copy_s_w (v4i32, imm0_3);
44614     i64 __builtin_msa_copy_s_d (v2i64, imm0_1);
44615
44616     u32 __builtin_msa_copy_u_b (v16i8, imm0_15);
44617     u32 __builtin_msa_copy_u_h (v8i16, imm0_7);
44618     u32 __builtin_msa_copy_u_w (v4i32, imm0_3);
44619     u64 __builtin_msa_copy_u_d (v2i64, imm0_1);
44620
44621     void __builtin_msa_ctcmsa (imm0_31, i32);
44622
44623     v16i8 __builtin_msa_div_s_b (v16i8, v16i8);
44624     v8i16 __builtin_msa_div_s_h (v8i16, v8i16);
44625     v4i32 __builtin_msa_div_s_w (v4i32, v4i32);
44626     v2i64 __builtin_msa_div_s_d (v2i64, v2i64);
44627
44628     v16u8 __builtin_msa_div_u_b (v16u8, v16u8);
44629     v8u16 __builtin_msa_div_u_h (v8u16, v8u16);
44630     v4u32 __builtin_msa_div_u_w (v4u32, v4u32);
44631     v2u64 __builtin_msa_div_u_d (v2u64, v2u64);
44632
44633     v8i16 __builtin_msa_dotp_s_h (v16i8, v16i8);
44634     v4i32 __builtin_msa_dotp_s_w (v8i16, v8i16);
44635     v2i64 __builtin_msa_dotp_s_d (v4i32, v4i32);
44636
44637     v8u16 __builtin_msa_dotp_u_h (v16u8, v16u8);
44638     v4u32 __builtin_msa_dotp_u_w (v8u16, v8u16);
44639     v2u64 __builtin_msa_dotp_u_d (v4u32, v4u32);
44640
44641     v8i16 __builtin_msa_dpadd_s_h (v8i16, v16i8, v16i8);
44642     v4i32 __builtin_msa_dpadd_s_w (v4i32, v8i16, v8i16);
44643     v2i64 __builtin_msa_dpadd_s_d (v2i64, v4i32, v4i32);
44644
44645     v8u16 __builtin_msa_dpadd_u_h (v8u16, v16u8, v16u8);
44646     v4u32 __builtin_msa_dpadd_u_w (v4u32, v8u16, v8u16);
44647     v2u64 __builtin_msa_dpadd_u_d (v2u64, v4u32, v4u32);
44648
44649     v8i16 __builtin_msa_dpsub_s_h (v8i16, v16i8, v16i8);
44650     v4i32 __builtin_msa_dpsub_s_w (v4i32, v8i16, v8i16);
44651     v2i64 __builtin_msa_dpsub_s_d (v2i64, v4i32, v4i32);
44652
44653     v8i16 __builtin_msa_dpsub_u_h (v8i16, v16u8, v16u8);
44654     v4i32 __builtin_msa_dpsub_u_w (v4i32, v8u16, v8u16);
44655     v2i64 __builtin_msa_dpsub_u_d (v2i64, v4u32, v4u32);
44656
44657     v4f32 __builtin_msa_fadd_w (v4f32, v4f32);
44658     v2f64 __builtin_msa_fadd_d (v2f64, v2f64);
44659
44660     v4i32 __builtin_msa_fcaf_w (v4f32, v4f32);
44661     v2i64 __builtin_msa_fcaf_d (v2f64, v2f64);
44662
44663     v4i32 __builtin_msa_fceq_w (v4f32, v4f32);
44664     v2i64 __builtin_msa_fceq_d (v2f64, v2f64);
44665
44666     v4i32 __builtin_msa_fclass_w (v4f32);
44667     v2i64 __builtin_msa_fclass_d (v2f64);
44668
44669     v4i32 __builtin_msa_fcle_w (v4f32, v4f32);
44670     v2i64 __builtin_msa_fcle_d (v2f64, v2f64);
44671
44672     v4i32 __builtin_msa_fclt_w (v4f32, v4f32);
44673     v2i64 __builtin_msa_fclt_d (v2f64, v2f64);
44674
44675     v4i32 __builtin_msa_fcne_w (v4f32, v4f32);
44676     v2i64 __builtin_msa_fcne_d (v2f64, v2f64);
44677
44678     v4i32 __builtin_msa_fcor_w (v4f32, v4f32);
44679     v2i64 __builtin_msa_fcor_d (v2f64, v2f64);
44680
44681     v4i32 __builtin_msa_fcueq_w (v4f32, v4f32);
44682     v2i64 __builtin_msa_fcueq_d (v2f64, v2f64);
44683
44684     v4i32 __builtin_msa_fcule_w (v4f32, v4f32);
44685     v2i64 __builtin_msa_fcule_d (v2f64, v2f64);
44686
44687     v4i32 __builtin_msa_fcult_w (v4f32, v4f32);
44688     v2i64 __builtin_msa_fcult_d (v2f64, v2f64);
44689
44690     v4i32 __builtin_msa_fcun_w (v4f32, v4f32);
44691     v2i64 __builtin_msa_fcun_d (v2f64, v2f64);
44692
44693     v4i32 __builtin_msa_fcune_w (v4f32, v4f32);
44694     v2i64 __builtin_msa_fcune_d (v2f64, v2f64);
44695
44696     v4f32 __builtin_msa_fdiv_w (v4f32, v4f32);
44697     v2f64 __builtin_msa_fdiv_d (v2f64, v2f64);
44698
44699     v8i16 __builtin_msa_fexdo_h (v4f32, v4f32);
44700     v4f32 __builtin_msa_fexdo_w (v2f64, v2f64);
44701
44702     v4f32 __builtin_msa_fexp2_w (v4f32, v4i32);
44703     v2f64 __builtin_msa_fexp2_d (v2f64, v2i64);
44704
44705     v4f32 __builtin_msa_fexupl_w (v8i16);
44706     v2f64 __builtin_msa_fexupl_d (v4f32);
44707
44708     v4f32 __builtin_msa_fexupr_w (v8i16);
44709     v2f64 __builtin_msa_fexupr_d (v4f32);
44710
44711     v4f32 __builtin_msa_ffint_s_w (v4i32);
44712     v2f64 __builtin_msa_ffint_s_d (v2i64);
44713
44714     v4f32 __builtin_msa_ffint_u_w (v4u32);
44715     v2f64 __builtin_msa_ffint_u_d (v2u64);
44716
44717     v4f32 __builtin_msa_ffql_w (v8i16);
44718     v2f64 __builtin_msa_ffql_d (v4i32);
44719
44720     v4f32 __builtin_msa_ffqr_w (v8i16);
44721     v2f64 __builtin_msa_ffqr_d (v4i32);
44722
44723     v16i8 __builtin_msa_fill_b (i32);
44724     v8i16 __builtin_msa_fill_h (i32);
44725     v4i32 __builtin_msa_fill_w (i32);
44726     v2i64 __builtin_msa_fill_d (i64);
44727
44728     v4f32 __builtin_msa_flog2_w (v4f32);
44729     v2f64 __builtin_msa_flog2_d (v2f64);
44730
44731     v4f32 __builtin_msa_fmadd_w (v4f32, v4f32, v4f32);
44732     v2f64 __builtin_msa_fmadd_d (v2f64, v2f64, v2f64);
44733
44734     v4f32 __builtin_msa_fmax_w (v4f32, v4f32);
44735     v2f64 __builtin_msa_fmax_d (v2f64, v2f64);
44736
44737     v4f32 __builtin_msa_fmax_a_w (v4f32, v4f32);
44738     v2f64 __builtin_msa_fmax_a_d (v2f64, v2f64);
44739
44740     v4f32 __builtin_msa_fmin_w (v4f32, v4f32);
44741     v2f64 __builtin_msa_fmin_d (v2f64, v2f64);
44742
44743     v4f32 __builtin_msa_fmin_a_w (v4f32, v4f32);
44744     v2f64 __builtin_msa_fmin_a_d (v2f64, v2f64);
44745
44746     v4f32 __builtin_msa_fmsub_w (v4f32, v4f32, v4f32);
44747     v2f64 __builtin_msa_fmsub_d (v2f64, v2f64, v2f64);
44748
44749     v4f32 __builtin_msa_fmul_w (v4f32, v4f32);
44750     v2f64 __builtin_msa_fmul_d (v2f64, v2f64);
44751
44752     v4f32 __builtin_msa_frint_w (v4f32);
44753     v2f64 __builtin_msa_frint_d (v2f64);
44754
44755     v4f32 __builtin_msa_frcp_w (v4f32);
44756     v2f64 __builtin_msa_frcp_d (v2f64);
44757
44758     v4f32 __builtin_msa_frsqrt_w (v4f32);
44759     v2f64 __builtin_msa_frsqrt_d (v2f64);
44760
44761     v4i32 __builtin_msa_fsaf_w (v4f32, v4f32);
44762     v2i64 __builtin_msa_fsaf_d (v2f64, v2f64);
44763
44764     v4i32 __builtin_msa_fseq_w (v4f32, v4f32);
44765     v2i64 __builtin_msa_fseq_d (v2f64, v2f64);
44766
44767     v4i32 __builtin_msa_fsle_w (v4f32, v4f32);
44768     v2i64 __builtin_msa_fsle_d (v2f64, v2f64);
44769
44770     v4i32 __builtin_msa_fslt_w (v4f32, v4f32);
44771     v2i64 __builtin_msa_fslt_d (v2f64, v2f64);
44772
44773     v4i32 __builtin_msa_fsne_w (v4f32, v4f32);
44774     v2i64 __builtin_msa_fsne_d (v2f64, v2f64);
44775
44776     v4i32 __builtin_msa_fsor_w (v4f32, v4f32);
44777     v2i64 __builtin_msa_fsor_d (v2f64, v2f64);
44778
44779     v4f32 __builtin_msa_fsqrt_w (v4f32);
44780     v2f64 __builtin_msa_fsqrt_d (v2f64);
44781
44782     v4f32 __builtin_msa_fsub_w (v4f32, v4f32);
44783     v2f64 __builtin_msa_fsub_d (v2f64, v2f64);
44784
44785     v4i32 __builtin_msa_fsueq_w (v4f32, v4f32);
44786     v2i64 __builtin_msa_fsueq_d (v2f64, v2f64);
44787
44788     v4i32 __builtin_msa_fsule_w (v4f32, v4f32);
44789     v2i64 __builtin_msa_fsule_d (v2f64, v2f64);
44790
44791     v4i32 __builtin_msa_fsult_w (v4f32, v4f32);
44792     v2i64 __builtin_msa_fsult_d (v2f64, v2f64);
44793
44794     v4i32 __builtin_msa_fsun_w (v4f32, v4f32);
44795     v2i64 __builtin_msa_fsun_d (v2f64, v2f64);
44796
44797     v4i32 __builtin_msa_fsune_w (v4f32, v4f32);
44798     v2i64 __builtin_msa_fsune_d (v2f64, v2f64);
44799
44800     v4i32 __builtin_msa_ftint_s_w (v4f32);
44801     v2i64 __builtin_msa_ftint_s_d (v2f64);
44802
44803     v4u32 __builtin_msa_ftint_u_w (v4f32);
44804     v2u64 __builtin_msa_ftint_u_d (v2f64);
44805
44806     v8i16 __builtin_msa_ftq_h (v4f32, v4f32);
44807     v4i32 __builtin_msa_ftq_w (v2f64, v2f64);
44808
44809     v4i32 __builtin_msa_ftrunc_s_w (v4f32);
44810     v2i64 __builtin_msa_ftrunc_s_d (v2f64);
44811
44812     v4u32 __builtin_msa_ftrunc_u_w (v4f32);
44813     v2u64 __builtin_msa_ftrunc_u_d (v2f64);
44814
44815     v8i16 __builtin_msa_hadd_s_h (v16i8, v16i8);
44816     v4i32 __builtin_msa_hadd_s_w (v8i16, v8i16);
44817     v2i64 __builtin_msa_hadd_s_d (v4i32, v4i32);
44818
44819     v8u16 __builtin_msa_hadd_u_h (v16u8, v16u8);
44820     v4u32 __builtin_msa_hadd_u_w (v8u16, v8u16);
44821     v2u64 __builtin_msa_hadd_u_d (v4u32, v4u32);
44822
44823     v8i16 __builtin_msa_hsub_s_h (v16i8, v16i8);
44824     v4i32 __builtin_msa_hsub_s_w (v8i16, v8i16);
44825     v2i64 __builtin_msa_hsub_s_d (v4i32, v4i32);
44826
44827     v8i16 __builtin_msa_hsub_u_h (v16u8, v16u8);
44828     v4i32 __builtin_msa_hsub_u_w (v8u16, v8u16);
44829     v2i64 __builtin_msa_hsub_u_d (v4u32, v4u32);
44830
44831     v16i8 __builtin_msa_ilvev_b (v16i8, v16i8);
44832     v8i16 __builtin_msa_ilvev_h (v8i16, v8i16);
44833     v4i32 __builtin_msa_ilvev_w (v4i32, v4i32);
44834     v2i64 __builtin_msa_ilvev_d (v2i64, v2i64);
44835
44836     v16i8 __builtin_msa_ilvl_b (v16i8, v16i8);
44837     v8i16 __builtin_msa_ilvl_h (v8i16, v8i16);
44838     v4i32 __builtin_msa_ilvl_w (v4i32, v4i32);
44839     v2i64 __builtin_msa_ilvl_d (v2i64, v2i64);
44840
44841     v16i8 __builtin_msa_ilvod_b (v16i8, v16i8);
44842     v8i16 __builtin_msa_ilvod_h (v8i16, v8i16);
44843     v4i32 __builtin_msa_ilvod_w (v4i32, v4i32);
44844     v2i64 __builtin_msa_ilvod_d (v2i64, v2i64);
44845
44846     v16i8 __builtin_msa_ilvr_b (v16i8, v16i8);
44847     v8i16 __builtin_msa_ilvr_h (v8i16, v8i16);
44848     v4i32 __builtin_msa_ilvr_w (v4i32, v4i32);
44849     v2i64 __builtin_msa_ilvr_d (v2i64, v2i64);
44850
44851     v16i8 __builtin_msa_insert_b (v16i8, imm0_15, i32);
44852     v8i16 __builtin_msa_insert_h (v8i16, imm0_7, i32);
44853     v4i32 __builtin_msa_insert_w (v4i32, imm0_3, i32);
44854     v2i64 __builtin_msa_insert_d (v2i64, imm0_1, i64);
44855
44856     v16i8 __builtin_msa_insve_b (v16i8, imm0_15, v16i8);
44857     v8i16 __builtin_msa_insve_h (v8i16, imm0_7, v8i16);
44858     v4i32 __builtin_msa_insve_w (v4i32, imm0_3, v4i32);
44859     v2i64 __builtin_msa_insve_d (v2i64, imm0_1, v2i64);
44860
44861     v16i8 __builtin_msa_ld_b (void *, imm_n512_511);
44862     v8i16 __builtin_msa_ld_h (void *, imm_n1024_1022);
44863     v4i32 __builtin_msa_ld_w (void *, imm_n2048_2044);
44864     v2i64 __builtin_msa_ld_d (void *, imm_n4096_4088);
44865
44866     v16i8 __builtin_msa_ldi_b (imm_n512_511);
44867     v8i16 __builtin_msa_ldi_h (imm_n512_511);
44868     v4i32 __builtin_msa_ldi_w (imm_n512_511);
44869     v2i64 __builtin_msa_ldi_d (imm_n512_511);
44870
44871     v8i16 __builtin_msa_madd_q_h (v8i16, v8i16, v8i16);
44872     v4i32 __builtin_msa_madd_q_w (v4i32, v4i32, v4i32);
44873
44874     v8i16 __builtin_msa_maddr_q_h (v8i16, v8i16, v8i16);
44875     v4i32 __builtin_msa_maddr_q_w (v4i32, v4i32, v4i32);
44876
44877     v16i8 __builtin_msa_maddv_b (v16i8, v16i8, v16i8);
44878     v8i16 __builtin_msa_maddv_h (v8i16, v8i16, v8i16);
44879     v4i32 __builtin_msa_maddv_w (v4i32, v4i32, v4i32);
44880     v2i64 __builtin_msa_maddv_d (v2i64, v2i64, v2i64);
44881
44882     v16i8 __builtin_msa_max_a_b (v16i8, v16i8);
44883     v8i16 __builtin_msa_max_a_h (v8i16, v8i16);
44884     v4i32 __builtin_msa_max_a_w (v4i32, v4i32);
44885     v2i64 __builtin_msa_max_a_d (v2i64, v2i64);
44886
44887     v16i8 __builtin_msa_max_s_b (v16i8, v16i8);
44888     v8i16 __builtin_msa_max_s_h (v8i16, v8i16);
44889     v4i32 __builtin_msa_max_s_w (v4i32, v4i32);
44890     v2i64 __builtin_msa_max_s_d (v2i64, v2i64);
44891
44892     v16u8 __builtin_msa_max_u_b (v16u8, v16u8);
44893     v8u16 __builtin_msa_max_u_h (v8u16, v8u16);
44894     v4u32 __builtin_msa_max_u_w (v4u32, v4u32);
44895     v2u64 __builtin_msa_max_u_d (v2u64, v2u64);
44896
44897     v16i8 __builtin_msa_maxi_s_b (v16i8, imm_n16_15);
44898     v8i16 __builtin_msa_maxi_s_h (v8i16, imm_n16_15);
44899     v4i32 __builtin_msa_maxi_s_w (v4i32, imm_n16_15);
44900     v2i64 __builtin_msa_maxi_s_d (v2i64, imm_n16_15);
44901
44902     v16u8 __builtin_msa_maxi_u_b (v16u8, imm0_31);
44903     v8u16 __builtin_msa_maxi_u_h (v8u16, imm0_31);
44904     v4u32 __builtin_msa_maxi_u_w (v4u32, imm0_31);
44905     v2u64 __builtin_msa_maxi_u_d (v2u64, imm0_31);
44906
44907     v16i8 __builtin_msa_min_a_b (v16i8, v16i8);
44908     v8i16 __builtin_msa_min_a_h (v8i16, v8i16);
44909     v4i32 __builtin_msa_min_a_w (v4i32, v4i32);
44910     v2i64 __builtin_msa_min_a_d (v2i64, v2i64);
44911
44912     v16i8 __builtin_msa_min_s_b (v16i8, v16i8);
44913     v8i16 __builtin_msa_min_s_h (v8i16, v8i16);
44914     v4i32 __builtin_msa_min_s_w (v4i32, v4i32);
44915     v2i64 __builtin_msa_min_s_d (v2i64, v2i64);
44916
44917     v16u8 __builtin_msa_min_u_b (v16u8, v16u8);
44918     v8u16 __builtin_msa_min_u_h (v8u16, v8u16);
44919     v4u32 __builtin_msa_min_u_w (v4u32, v4u32);
44920     v2u64 __builtin_msa_min_u_d (v2u64, v2u64);
44921
44922     v16i8 __builtin_msa_mini_s_b (v16i8, imm_n16_15);
44923     v8i16 __builtin_msa_mini_s_h (v8i16, imm_n16_15);
44924     v4i32 __builtin_msa_mini_s_w (v4i32, imm_n16_15);
44925     v2i64 __builtin_msa_mini_s_d (v2i64, imm_n16_15);
44926
44927     v16u8 __builtin_msa_mini_u_b (v16u8, imm0_31);
44928     v8u16 __builtin_msa_mini_u_h (v8u16, imm0_31);
44929     v4u32 __builtin_msa_mini_u_w (v4u32, imm0_31);
44930     v2u64 __builtin_msa_mini_u_d (v2u64, imm0_31);
44931
44932     v16i8 __builtin_msa_mod_s_b (v16i8, v16i8);
44933     v8i16 __builtin_msa_mod_s_h (v8i16, v8i16);
44934     v4i32 __builtin_msa_mod_s_w (v4i32, v4i32);
44935     v2i64 __builtin_msa_mod_s_d (v2i64, v2i64);
44936
44937     v16u8 __builtin_msa_mod_u_b (v16u8, v16u8);
44938     v8u16 __builtin_msa_mod_u_h (v8u16, v8u16);
44939     v4u32 __builtin_msa_mod_u_w (v4u32, v4u32);
44940     v2u64 __builtin_msa_mod_u_d (v2u64, v2u64);
44941
44942     v16i8 __builtin_msa_move_v (v16i8);
44943
44944     v8i16 __builtin_msa_msub_q_h (v8i16, v8i16, v8i16);
44945     v4i32 __builtin_msa_msub_q_w (v4i32, v4i32, v4i32);
44946
44947     v8i16 __builtin_msa_msubr_q_h (v8i16, v8i16, v8i16);
44948     v4i32 __builtin_msa_msubr_q_w (v4i32, v4i32, v4i32);
44949
44950     v16i8 __builtin_msa_msubv_b (v16i8, v16i8, v16i8);
44951     v8i16 __builtin_msa_msubv_h (v8i16, v8i16, v8i16);
44952     v4i32 __builtin_msa_msubv_w (v4i32, v4i32, v4i32);
44953     v2i64 __builtin_msa_msubv_d (v2i64, v2i64, v2i64);
44954
44955     v8i16 __builtin_msa_mul_q_h (v8i16, v8i16);
44956     v4i32 __builtin_msa_mul_q_w (v4i32, v4i32);
44957
44958     v8i16 __builtin_msa_mulr_q_h (v8i16, v8i16);
44959     v4i32 __builtin_msa_mulr_q_w (v4i32, v4i32);
44960
44961     v16i8 __builtin_msa_mulv_b (v16i8, v16i8);
44962     v8i16 __builtin_msa_mulv_h (v8i16, v8i16);
44963     v4i32 __builtin_msa_mulv_w (v4i32, v4i32);
44964     v2i64 __builtin_msa_mulv_d (v2i64, v2i64);
44965
44966     v16i8 __builtin_msa_nloc_b (v16i8);
44967     v8i16 __builtin_msa_nloc_h (v8i16);
44968     v4i32 __builtin_msa_nloc_w (v4i32);
44969     v2i64 __builtin_msa_nloc_d (v2i64);
44970
44971     v16i8 __builtin_msa_nlzc_b (v16i8);
44972     v8i16 __builtin_msa_nlzc_h (v8i16);
44973     v4i32 __builtin_msa_nlzc_w (v4i32);
44974     v2i64 __builtin_msa_nlzc_d (v2i64);
44975
44976     v16u8 __builtin_msa_nor_v (v16u8, v16u8);
44977
44978     v16u8 __builtin_msa_nori_b (v16u8, imm0_255);
44979
44980     v16u8 __builtin_msa_or_v (v16u8, v16u8);
44981
44982     v16u8 __builtin_msa_ori_b (v16u8, imm0_255);
44983
44984     v16i8 __builtin_msa_pckev_b (v16i8, v16i8);
44985     v8i16 __builtin_msa_pckev_h (v8i16, v8i16);
44986     v4i32 __builtin_msa_pckev_w (v4i32, v4i32);
44987     v2i64 __builtin_msa_pckev_d (v2i64, v2i64);
44988
44989     v16i8 __builtin_msa_pckod_b (v16i8, v16i8);
44990     v8i16 __builtin_msa_pckod_h (v8i16, v8i16);
44991     v4i32 __builtin_msa_pckod_w (v4i32, v4i32);
44992     v2i64 __builtin_msa_pckod_d (v2i64, v2i64);
44993
44994     v16i8 __builtin_msa_pcnt_b (v16i8);
44995     v8i16 __builtin_msa_pcnt_h (v8i16);
44996     v4i32 __builtin_msa_pcnt_w (v4i32);
44997     v2i64 __builtin_msa_pcnt_d (v2i64);
44998
44999     v16i8 __builtin_msa_sat_s_b (v16i8, imm0_7);
45000     v8i16 __builtin_msa_sat_s_h (v8i16, imm0_15);
45001     v4i32 __builtin_msa_sat_s_w (v4i32, imm0_31);
45002     v2i64 __builtin_msa_sat_s_d (v2i64, imm0_63);
45003
45004     v16u8 __builtin_msa_sat_u_b (v16u8, imm0_7);
45005     v8u16 __builtin_msa_sat_u_h (v8u16, imm0_15);
45006     v4u32 __builtin_msa_sat_u_w (v4u32, imm0_31);
45007     v2u64 __builtin_msa_sat_u_d (v2u64, imm0_63);
45008
45009     v16i8 __builtin_msa_shf_b (v16i8, imm0_255);
45010     v8i16 __builtin_msa_shf_h (v8i16, imm0_255);
45011     v4i32 __builtin_msa_shf_w (v4i32, imm0_255);
45012
45013     v16i8 __builtin_msa_sld_b (v16i8, v16i8, i32);
45014     v8i16 __builtin_msa_sld_h (v8i16, v8i16, i32);
45015     v4i32 __builtin_msa_sld_w (v4i32, v4i32, i32);
45016     v2i64 __builtin_msa_sld_d (v2i64, v2i64, i32);
45017
45018     v16i8 __builtin_msa_sldi_b (v16i8, v16i8, imm0_15);
45019     v8i16 __builtin_msa_sldi_h (v8i16, v8i16, imm0_7);
45020     v4i32 __builtin_msa_sldi_w (v4i32, v4i32, imm0_3);
45021     v2i64 __builtin_msa_sldi_d (v2i64, v2i64, imm0_1);
45022
45023     v16i8 __builtin_msa_sll_b (v16i8, v16i8);
45024     v8i16 __builtin_msa_sll_h (v8i16, v8i16);
45025     v4i32 __builtin_msa_sll_w (v4i32, v4i32);
45026     v2i64 __builtin_msa_sll_d (v2i64, v2i64);
45027
45028     v16i8 __builtin_msa_slli_b (v16i8, imm0_7);
45029     v8i16 __builtin_msa_slli_h (v8i16, imm0_15);
45030     v4i32 __builtin_msa_slli_w (v4i32, imm0_31);
45031     v2i64 __builtin_msa_slli_d (v2i64, imm0_63);
45032
45033     v16i8 __builtin_msa_splat_b (v16i8, i32);
45034     v8i16 __builtin_msa_splat_h (v8i16, i32);
45035     v4i32 __builtin_msa_splat_w (v4i32, i32);
45036     v2i64 __builtin_msa_splat_d (v2i64, i32);
45037
45038     v16i8 __builtin_msa_splati_b (v16i8, imm0_15);
45039     v8i16 __builtin_msa_splati_h (v8i16, imm0_7);
45040     v4i32 __builtin_msa_splati_w (v4i32, imm0_3);
45041     v2i64 __builtin_msa_splati_d (v2i64, imm0_1);
45042
45043     v16i8 __builtin_msa_sra_b (v16i8, v16i8);
45044     v8i16 __builtin_msa_sra_h (v8i16, v8i16);
45045     v4i32 __builtin_msa_sra_w (v4i32, v4i32);
45046     v2i64 __builtin_msa_sra_d (v2i64, v2i64);
45047
45048     v16i8 __builtin_msa_srai_b (v16i8, imm0_7);
45049     v8i16 __builtin_msa_srai_h (v8i16, imm0_15);
45050     v4i32 __builtin_msa_srai_w (v4i32, imm0_31);
45051     v2i64 __builtin_msa_srai_d (v2i64, imm0_63);
45052
45053     v16i8 __builtin_msa_srar_b (v16i8, v16i8);
45054     v8i16 __builtin_msa_srar_h (v8i16, v8i16);
45055     v4i32 __builtin_msa_srar_w (v4i32, v4i32);
45056     v2i64 __builtin_msa_srar_d (v2i64, v2i64);
45057
45058     v16i8 __builtin_msa_srari_b (v16i8, imm0_7);
45059     v8i16 __builtin_msa_srari_h (v8i16, imm0_15);
45060     v4i32 __builtin_msa_srari_w (v4i32, imm0_31);
45061     v2i64 __builtin_msa_srari_d (v2i64, imm0_63);
45062
45063     v16i8 __builtin_msa_srl_b (v16i8, v16i8);
45064     v8i16 __builtin_msa_srl_h (v8i16, v8i16);
45065     v4i32 __builtin_msa_srl_w (v4i32, v4i32);
45066     v2i64 __builtin_msa_srl_d (v2i64, v2i64);
45067
45068     v16i8 __builtin_msa_srli_b (v16i8, imm0_7);
45069     v8i16 __builtin_msa_srli_h (v8i16, imm0_15);
45070     v4i32 __builtin_msa_srli_w (v4i32, imm0_31);
45071     v2i64 __builtin_msa_srli_d (v2i64, imm0_63);
45072
45073     v16i8 __builtin_msa_srlr_b (v16i8, v16i8);
45074     v8i16 __builtin_msa_srlr_h (v8i16, v8i16);
45075     v4i32 __builtin_msa_srlr_w (v4i32, v4i32);
45076     v2i64 __builtin_msa_srlr_d (v2i64, v2i64);
45077
45078     v16i8 __builtin_msa_srlri_b (v16i8, imm0_7);
45079     v8i16 __builtin_msa_srlri_h (v8i16, imm0_15);
45080     v4i32 __builtin_msa_srlri_w (v4i32, imm0_31);
45081     v2i64 __builtin_msa_srlri_d (v2i64, imm0_63);
45082
45083     void __builtin_msa_st_b (v16i8, void *, imm_n512_511);
45084     void __builtin_msa_st_h (v8i16, void *, imm_n1024_1022);
45085     void __builtin_msa_st_w (v4i32, void *, imm_n2048_2044);
45086     void __builtin_msa_st_d (v2i64, void *, imm_n4096_4088);
45087
45088     v16i8 __builtin_msa_subs_s_b (v16i8, v16i8);
45089     v8i16 __builtin_msa_subs_s_h (v8i16, v8i16);
45090     v4i32 __builtin_msa_subs_s_w (v4i32, v4i32);
45091     v2i64 __builtin_msa_subs_s_d (v2i64, v2i64);
45092
45093     v16u8 __builtin_msa_subs_u_b (v16u8, v16u8);
45094     v8u16 __builtin_msa_subs_u_h (v8u16, v8u16);
45095     v4u32 __builtin_msa_subs_u_w (v4u32, v4u32);
45096     v2u64 __builtin_msa_subs_u_d (v2u64, v2u64);
45097
45098     v16u8 __builtin_msa_subsus_u_b (v16u8, v16i8);
45099     v8u16 __builtin_msa_subsus_u_h (v8u16, v8i16);
45100     v4u32 __builtin_msa_subsus_u_w (v4u32, v4i32);
45101     v2u64 __builtin_msa_subsus_u_d (v2u64, v2i64);
45102
45103     v16i8 __builtin_msa_subsuu_s_b (v16u8, v16u8);
45104     v8i16 __builtin_msa_subsuu_s_h (v8u16, v8u16);
45105     v4i32 __builtin_msa_subsuu_s_w (v4u32, v4u32);
45106     v2i64 __builtin_msa_subsuu_s_d (v2u64, v2u64);
45107
45108     v16i8 __builtin_msa_subv_b (v16i8, v16i8);
45109     v8i16 __builtin_msa_subv_h (v8i16, v8i16);
45110     v4i32 __builtin_msa_subv_w (v4i32, v4i32);
45111     v2i64 __builtin_msa_subv_d (v2i64, v2i64);
45112
45113     v16i8 __builtin_msa_subvi_b (v16i8, imm0_31);
45114     v8i16 __builtin_msa_subvi_h (v8i16, imm0_31);
45115     v4i32 __builtin_msa_subvi_w (v4i32, imm0_31);
45116     v2i64 __builtin_msa_subvi_d (v2i64, imm0_31);
45117
45118     v16i8 __builtin_msa_vshf_b (v16i8, v16i8, v16i8);
45119     v8i16 __builtin_msa_vshf_h (v8i16, v8i16, v8i16);
45120     v4i32 __builtin_msa_vshf_w (v4i32, v4i32, v4i32);
45121     v2i64 __builtin_msa_vshf_d (v2i64, v2i64, v2i64);
45122
45123     v16u8 __builtin_msa_xor_v (v16u8, v16u8);
45124
45125     v16u8 __builtin_msa_xori_b (v16u8, imm0_255);
45126
45127
45128File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: MSP430 Built-in Functions,  Prev: MIPS SIMD Architecture (MSA) Support,  Up: Target Builtins
45129
451306.60.17 Other MIPS Built-in Functions
45131-------------------------------------
45132
45133GCC provides other MIPS-specific built-in functions:
45134
45135'void __builtin_mips_cache (int OP, const volatile void *ADDR)'
45136     Insert a 'cache' instruction with operands OP and ADDR.  GCC
45137     defines the preprocessor macro '___GCC_HAVE_BUILTIN_MIPS_CACHE'
45138     when this function is available.
45139
45140'unsigned int __builtin_mips_get_fcsr (void)'
45141'void __builtin_mips_set_fcsr (unsigned int VALUE)'
45142     Get and set the contents of the floating-point control and status
45143     register (FPU control register 31).  These functions are only
45144     available in hard-float code but can be called in both MIPS16 and
45145     non-MIPS16 contexts.
45146
45147     '__builtin_mips_set_fcsr' can be used to change any bit of the
45148     register except the condition codes, which GCC assumes are
45149     preserved.
45150
45151
45152File: gcc.info,  Node: MSP430 Built-in Functions,  Next: NDS32 Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins
45153
451546.60.18 MSP430 Built-in Functions
45155---------------------------------
45156
45157GCC provides a couple of special builtin functions to aid in the writing
45158of interrupt handlers in C.
45159
45160'__bic_SR_register_on_exit (int MASK)'
45161     This clears the indicated bits in the saved copy of the status
45162     register currently residing on the stack.  This only works inside
45163     interrupt handlers and the changes to the status register will only
45164     take affect once the handler returns.
45165
45166'__bis_SR_register_on_exit (int MASK)'
45167     This sets the indicated bits in the saved copy of the status
45168     register currently residing on the stack.  This only works inside
45169     interrupt handlers and the changes to the status register will only
45170     take affect once the handler returns.
45171
45172'__delay_cycles (long long CYCLES)'
45173     This inserts an instruction sequence that takes exactly CYCLES
45174     cycles (between 0 and about 17E9) to complete.  The inserted
45175     sequence may use jumps, loops, or no-ops, and does not interfere
45176     with any other instructions.  Note that CYCLES must be a
45177     compile-time constant integer - that is, you must pass a number,
45178     not a variable that may be optimized to a constant later.  The
45179     number of cycles delayed by this builtin is exact.
45180
45181
45182File: gcc.info,  Node: NDS32 Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MSP430 Built-in Functions,  Up: Target Builtins
45183
451846.60.19 NDS32 Built-in Functions
45185--------------------------------
45186
45187These built-in functions are available for the NDS32 target:
45188
45189 -- Built-in Function: void __builtin_nds32_isync (int *ADDR)
45190     Insert an ISYNC instruction into the instruction stream where ADDR
45191     is an instruction address for serialization.
45192
45193 -- Built-in Function: void __builtin_nds32_isb (void)
45194     Insert an ISB instruction into the instruction stream.
45195
45196 -- Built-in Function: int __builtin_nds32_mfsr (int SR)
45197     Return the content of a system register which is mapped by SR.
45198
45199 -- Built-in Function: int __builtin_nds32_mfusr (int USR)
45200     Return the content of a user space register which is mapped by USR.
45201
45202 -- Built-in Function: void __builtin_nds32_mtsr (int VALUE, int SR)
45203     Move the VALUE to a system register which is mapped by SR.
45204
45205 -- Built-in Function: void __builtin_nds32_mtusr (int VALUE, int USR)
45206     Move the VALUE to a user space register which is mapped by USR.
45207
45208 -- Built-in Function: void __builtin_nds32_setgie_en (void)
45209     Enable global interrupt.
45210
45211 -- Built-in Function: void __builtin_nds32_setgie_dis (void)
45212     Disable global interrupt.
45213
45214
45215File: gcc.info,  Node: picoChip Built-in Functions,  Next: Basic PowerPC Built-in Functions,  Prev: NDS32 Built-in Functions,  Up: Target Builtins
45216
452176.60.20 picoChip Built-in Functions
45218-----------------------------------
45219
45220GCC provides an interface to selected machine instructions from the
45221picoChip instruction set.
45222
45223'int __builtin_sbc (int VALUE)'
45224     Sign bit count.  Return the number of consecutive bits in VALUE
45225     that have the same value as the sign bit.  The result is the number
45226     of leading sign bits minus one, giving the number of redundant sign
45227     bits in VALUE.
45228
45229'int __builtin_byteswap (int VALUE)'
45230     Byte swap.  Return the result of swapping the upper and lower bytes
45231     of VALUE.
45232
45233'int __builtin_brev (int VALUE)'
45234     Bit reversal.  Return the result of reversing the bits in VALUE.
45235     Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
45236     on.
45237
45238'int __builtin_adds (int X, int Y)'
45239     Saturating addition.  Return the result of adding X and Y, storing
45240     the value 32767 if the result overflows.
45241
45242'int __builtin_subs (int X, int Y)'
45243     Saturating subtraction.  Return the result of subtracting Y from X,
45244     storing the value -32768 if the result overflows.
45245
45246'void __builtin_halt (void)'
45247     Halt.  The processor stops execution.  This built-in is useful for
45248     implementing assertions.
45249
45250
45251File: gcc.info,  Node: Basic PowerPC Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins
45252
452536.60.21 Basic PowerPC Built-in Functions
45254----------------------------------------
45255
45256* Menu:
45257
45258* Basic PowerPC Built-in Functions Available on all Configurations::
45259* Basic PowerPC Built-in Functions Available on ISA 2.05::
45260* Basic PowerPC Built-in Functions Available on ISA 2.06::
45261* Basic PowerPC Built-in Functions Available on ISA 2.07::
45262* Basic PowerPC Built-in Functions Available on ISA 3.0::
45263
45264This section describes PowerPC built-in functions that do not require
45265the inclusion of any special header files to declare prototypes or
45266provide macro definitions.  The sections that follow describe additional
45267PowerPC built-in functions.
45268
45269
45270File: 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
45271
452726.60.21.1 Basic PowerPC Built-in Functions Available on all Configurations
45273..........................................................................
45274
45275 -- Built-in Function: void __builtin_cpu_init (void)
45276     This function is a 'nop' on the PowerPC platform and is included
45277     solely to maintain API compatibility with the x86 builtins.
45278
45279 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
45280     This function returns a value of '1' if the run-time CPU is of type
45281     CPUNAME and returns '0' otherwise
45282
45283     The '__builtin_cpu_is' function requires GLIBC 2.23 or newer which
45284     exports the hardware capability bits.  GCC defines the macro
45285     '__BUILTIN_CPU_SUPPORTS__' if the '__builtin_cpu_supports' built-in
45286     function is fully supported.
45287
45288     If GCC was configured to use a GLIBC before 2.23, the built-in
45289     function '__builtin_cpu_is' always returns a 0 and the compiler
45290     issues a warning.
45291
45292     The following CPU names can be detected:
45293
45294     'power9'
45295          IBM POWER9 Server CPU.
45296     'power8'
45297          IBM POWER8 Server CPU.
45298     'power7'
45299          IBM POWER7 Server CPU.
45300     'power6x'
45301          IBM POWER6 Server CPU (RAW mode).
45302     'power6'
45303          IBM POWER6 Server CPU (Architected mode).
45304     'power5+'
45305          IBM POWER5+ Server CPU.
45306     'power5'
45307          IBM POWER5 Server CPU.
45308     'ppc970'
45309          IBM 970 Server CPU (ie, Apple G5).
45310     'power4'
45311          IBM POWER4 Server CPU.
45312     'ppca2'
45313          IBM A2 64-bit Embedded CPU
45314     'ppc476'
45315          IBM PowerPC 476FP 32-bit Embedded CPU.
45316     'ppc464'
45317          IBM PowerPC 464 32-bit Embedded CPU.
45318     'ppc440'
45319          PowerPC 440 32-bit Embedded CPU.
45320     'ppc405'
45321          PowerPC 405 32-bit Embedded CPU.
45322     'ppc-cell-be'
45323          IBM PowerPC Cell Broadband Engine Architecture CPU.
45324
45325     Here is an example:
45326          #ifdef __BUILTIN_CPU_SUPPORTS__
45327            if (__builtin_cpu_is ("power8"))
45328              {
45329                 do_power8 (); // POWER8 specific implementation.
45330              }
45331            else
45332          #endif
45333              {
45334                 do_generic (); // Generic implementation.
45335              }
45336
45337 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
45338     This function returns a value of '1' if the run-time CPU supports
45339     the HWCAP feature FEATURE and returns '0' otherwise.
45340
45341     The '__builtin_cpu_supports' function requires GLIBC 2.23 or newer
45342     which exports the hardware capability bits.  GCC defines the macro
45343     '__BUILTIN_CPU_SUPPORTS__' if the '__builtin_cpu_supports' built-in
45344     function is fully supported.
45345
45346     If GCC was configured to use a GLIBC before 2.23, the built-in
45347     function '__builtin_cpu_suports' always returns a 0 and the
45348     compiler issues a warning.
45349
45350     The following features can be detected:
45351
45352     '4xxmac'
45353          4xx CPU has a Multiply Accumulator.
45354     'altivec'
45355          CPU has a SIMD/Vector Unit.
45356     'arch_2_05'
45357          CPU supports ISA 2.05 (eg, POWER6)
45358     'arch_2_06'
45359          CPU supports ISA 2.06 (eg, POWER7)
45360     'arch_2_07'
45361          CPU supports ISA 2.07 (eg, POWER8)
45362     'arch_3_00'
45363          CPU supports ISA 3.0 (eg, POWER9)
45364     'archpmu'
45365          CPU supports the set of compatible performance monitoring
45366          events.
45367     'booke'
45368          CPU supports the Embedded ISA category.
45369     'cellbe'
45370          CPU has a CELL broadband engine.
45371     'darn'
45372          CPU supports the 'darn' (deliver a random number) instruction.
45373     'dfp'
45374          CPU has a decimal floating point unit.
45375     'dscr'
45376          CPU supports the data stream control register.
45377     'ebb'
45378          CPU supports event base branching.
45379     'efpdouble'
45380          CPU has a SPE double precision floating point unit.
45381     'efpsingle'
45382          CPU has a SPE single precision floating point unit.
45383     'fpu'
45384          CPU has a floating point unit.
45385     'htm'
45386          CPU has hardware transaction memory instructions.
45387     'htm-nosc'
45388          Kernel aborts hardware transactions when a syscall is made.
45389     'htm-no-suspend'
45390          CPU supports hardware transaction memory but does not support
45391          the 'tsuspend.' instruction.
45392     'ic_snoop'
45393          CPU supports icache snooping capabilities.
45394     'ieee128'
45395          CPU supports 128-bit IEEE binary floating point instructions.
45396     'isel'
45397          CPU supports the integer select instruction.
45398     'mmu'
45399          CPU has a memory management unit.
45400     'notb'
45401          CPU does not have a timebase (eg, 601 and 403gx).
45402     'pa6t'
45403          CPU supports the PA Semi 6T CORE ISA.
45404     'power4'
45405          CPU supports ISA 2.00 (eg, POWER4)
45406     'power5'
45407          CPU supports ISA 2.02 (eg, POWER5)
45408     'power5+'
45409          CPU supports ISA 2.03 (eg, POWER5+)
45410     'power6x'
45411          CPU supports ISA 2.05 (eg, POWER6) extended opcodes mffgpr and
45412          mftgpr.
45413     'ppc32'
45414          CPU supports 32-bit mode execution.
45415     'ppc601'
45416          CPU supports the old POWER ISA (eg, 601)
45417     'ppc64'
45418          CPU supports 64-bit mode execution.
45419     'ppcle'
45420          CPU supports a little-endian mode that uses address swizzling.
45421     'scv'
45422          Kernel supports system call vectored.
45423     'smt'
45424          CPU support simultaneous multi-threading.
45425     'spe'
45426          CPU has a signal processing extension unit.
45427     'tar'
45428          CPU supports the target address register.
45429     'true_le'
45430          CPU supports true little-endian mode.
45431     'ucache'
45432          CPU has unified I/D cache.
45433     'vcrypto'
45434          CPU supports the vector cryptography instructions.
45435     'vsx'
45436          CPU supports the vector-scalar extension.
45437
45438     Here is an example:
45439          #ifdef __BUILTIN_CPU_SUPPORTS__
45440            if (__builtin_cpu_supports ("fpu"))
45441              {
45442                 asm("fadd %0,%1,%2" : "=d"(dst) : "d"(src1), "d"(src2));
45443              }
45444            else
45445          #endif
45446              {
45447                 dst = __fadd (src1, src2); // Software FP addition function.
45448              }
45449
45450 The following built-in functions are also available on all PowerPC
45451processors:
45452     uint64_t __builtin_ppc_get_timebase ();
45453     unsigned long __builtin_ppc_mftb ();
45454     double __builtin_unpack_ibm128 (__ibm128, int);
45455     __ibm128 __builtin_pack_ibm128 (double, double);
45456     double __builtin_mffs (void);
45457     void __builtin_mtfsb0 (const int);
45458     void __builtin_mtfsb1 (const int);
45459     void __builtin_set_fpscr_rn (int);
45460
45461 The '__builtin_ppc_get_timebase' and '__builtin_ppc_mftb' functions
45462generate instructions to read the Time Base Register.  The
45463'__builtin_ppc_get_timebase' function may generate multiple instructions
45464and always returns the 64 bits of the Time Base Register.  The
45465'__builtin_ppc_mftb' function always generates one instruction and
45466returns the Time Base Register value as an unsigned long, throwing away
45467the most significant word on 32-bit environments.  The '__builtin_mffs'
45468return the value of the FPSCR register.  Note, ISA 3.0 supports the
45469'__builtin_mffsl()' which permits software to read the control and
45470non-sticky status bits in the FSPCR without the higher latency
45471associated with accessing the sticky status bits.  The
45472'__builtin_mtfsb0' and '__builtin_mtfsb1' take the bit to change as an
45473argument.  The valid bit range is between 0 and 31.  The builtins map to
45474the 'mtfsb0' and 'mtfsb1' instructions which take the argument and add
4547532.  Hence these instructions only modify the FPSCR[32:63] bits by
45476changing the specified bit to a zero or one respectively.  The
45477'__builtin_set_fpscr_rn' builtin allows changing both of the floating
45478point rounding mode bits.  The argument is a 2-bit value.  The argument
45479can either be a 'const int' or stored in a variable.  The builtin uses
45480the ISA 3.0 instruction 'mffscrn' if available, otherwise it reads the
45481FPSCR, masks the current rounding mode bits out and OR's in the new
45482value.
45483
45484
45485File: 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
45486
454876.60.21.2 Basic PowerPC Built-in Functions Available on ISA 2.05
45488................................................................
45489
45490The basic built-in functions described in this section are available on
45491the PowerPC family of processors starting with ISA 2.05 or later.
45492Unless specific options are explicitly disabled on the command line,
45493specifying option '-mcpu=power6' has the effect of enabling the
45494'-mpowerpc64', '-mpowerpc-gpopt', '-mpowerpc-gfxopt', '-mmfcrf',
45495'-mpopcntb', '-mfprnd', '-mcmpb', '-mhard-dfp', and '-mrecip-precision'
45496options.  Specify the '-maltivec' and '-mfpgpr' options explicitly in
45497combination with the above options if they are desired.
45498
45499 The following functions require option '-mcmpb'.
45500     unsigned long long __builtin_cmpb (unsigned long long int, unsigned long long int);
45501     unsigned int __builtin_cmpb (unsigned int, unsigned int);
45502
45503 The '__builtin_cmpb' function performs a byte-wise compare on the
45504contents of its two arguments, returning the result of the byte-wise
45505comparison as the returned value.  For each byte comparison, the
45506corresponding byte of the return value holds 0xff if the input bytes are
45507equal and 0 if the input bytes are not equal.  If either of the
45508arguments to this built-in function is wider than 32 bits, the function
45509call expands into the form that expects 'unsigned long long int'
45510arguments which is only available on 64-bit targets.
45511
45512 The following built-in functions are available when hardware decimal
45513floating point ('-mhard-dfp') is available:
45514     void __builtin_set_fpscr_drn(int);
45515     _Decimal64 __builtin_ddedpd (int, _Decimal64);
45516     _Decimal128 __builtin_ddedpdq (int, _Decimal128);
45517     _Decimal64 __builtin_denbcd (int, _Decimal64);
45518     _Decimal128 __builtin_denbcdq (int, _Decimal128);
45519     _Decimal64 __builtin_diex (long long, _Decimal64);
45520     _Decimal128 _builtin_diexq (long long, _Decimal128);
45521     _Decimal64 __builtin_dscli (_Decimal64, int);
45522     _Decimal128 __builtin_dscliq (_Decimal128, int);
45523     _Decimal64 __builtin_dscri (_Decimal64, int);
45524     _Decimal128 __builtin_dscriq (_Decimal128, int);
45525     long long __builtin_dxex (_Decimal64);
45526     long long __builtin_dxexq (_Decimal128);
45527     _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
45528     unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
45529
45530     The __builtin_set_fpscr_drn builtin allows changing the three decimal
45531     floating point rounding mode bits.  The argument is a 3-bit value.  The
45532     argument can either be a const int or the value can be stored in
45533     a variable.
45534     The builtin uses the ISA 3.0 instruction mffscdrn if available.
45535     Otherwise the builtin reads the FPSCR, masks the current decimal rounding
45536     mode bits out and OR's in the new value.
45537
45538
45539 The following functions require '-mhard-float', '-mpowerpc-gfxopt', and
45540'-mpopcntb' options.
45541
45542     double __builtin_recipdiv (double, double);
45543     float __builtin_recipdivf (float, float);
45544     double __builtin_rsqrt (double);
45545     float __builtin_rsqrtf (float);
45546
45547 The 'vec_rsqrt', '__builtin_rsqrt', and '__builtin_rsqrtf' functions
45548generate multiple instructions to implement the reciprocal sqrt
45549functionality using reciprocal sqrt estimate instructions.
45550
45551 The '__builtin_recipdiv', and '__builtin_recipdivf' functions generate
45552multiple instructions to implement division using the reciprocal
45553estimate instructions.
45554
45555 The following functions require '-mhard-float' and '-mmultiple'
45556options.
45557
45558 The '__builtin_unpack_longdouble' function takes a 'long double'
45559argument and a compile time constant of 0 or 1.  If the constant is 0,
45560the first 'double' within the 'long double' is returned, otherwise the
45561second 'double' is returned.  The '__builtin_unpack_longdouble' function
45562is only available if 'long double' uses the IBM extended double
45563representation.
45564
45565 The '__builtin_pack_longdouble' function takes two 'double' arguments
45566and returns a 'long double' value that combines the two arguments.  The
45567'__builtin_pack_longdouble' function is only available if 'long double'
45568uses the IBM extended double representation.
45569
45570 The '__builtin_unpack_ibm128' function takes a '__ibm128' argument and
45571a compile time constant of 0 or 1.  If the constant is 0, the first
45572'double' within the '__ibm128' is returned, otherwise the second
45573'double' is returned.
45574
45575 The '__builtin_pack_ibm128' function takes two 'double' arguments and
45576returns a '__ibm128' value that combines the two arguments.
45577
45578 Additional built-in functions are available for the 64-bit PowerPC
45579family of processors, for efficient use of 128-bit floating point
45580('__float128') values.
45581
45582
45583File: 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
45584
455856.60.21.3 Basic PowerPC Built-in Functions Available on ISA 2.06
45586................................................................
45587
45588The basic built-in functions described in this section are available on
45589the PowerPC family of processors starting with ISA 2.05 or later.
45590Unless specific options are explicitly disabled on the command line,
45591specifying option '-mcpu=power7' has the effect of enabling all the same
45592options as for '-mcpu=power6' in addition to the '-maltivec',
45593'-mpopcntd', and '-mvsx' options.
45594
45595 The following basic built-in functions require '-mpopcntd':
45596     unsigned int __builtin_addg6s (unsigned int, unsigned int);
45597     long long __builtin_bpermd (long long, long long);
45598     unsigned int __builtin_cbcdtd (unsigned int);
45599     unsigned int __builtin_cdtbcd (unsigned int);
45600     long long __builtin_divde (long long, long long);
45601     unsigned long long __builtin_divdeu (unsigned long long, unsigned long long);
45602     int __builtin_divwe (int, int);
45603     unsigned int __builtin_divweu (unsigned int, unsigned int);
45604     vector __int128 __builtin_pack_vector_int128 (long long, long long);
45605     void __builtin_rs6000_speculation_barrier (void);
45606     long long __builtin_unpack_vector_int128 (vector __int128, signed char);
45607
45608 Of these, the '__builtin_divde' and '__builtin_divdeu' functions
45609require a 64-bit environment.
45610
45611 The following basic built-in functions, which are also supported on x86
45612targets, require '-mfloat128'.
45613     __float128 __builtin_fabsq (__float128);
45614     __float128 __builtin_copysignq (__float128, __float128);
45615     __float128 __builtin_infq (void);
45616     __float128 __builtin_huge_valq (void);
45617     __float128 __builtin_nanq (void);
45618     __float128 __builtin_nansq (void);
45619
45620     __float128 __builtin_sqrtf128 (__float128);
45621     __float128 __builtin_fmaf128 (__float128, __float128, __float128);
45622
45623
45624File: 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
45625
456266.60.21.4 Basic PowerPC Built-in Functions Available on ISA 2.07
45627................................................................
45628
45629The basic built-in functions described in this section are available on
45630the PowerPC family of processors starting with ISA 2.07 or later.
45631Unless specific options are explicitly disabled on the command line,
45632specifying option '-mcpu=power8' has the effect of enabling all the same
45633options as for '-mcpu=power7' in addition to the '-mpower8-fusion',
45634'-mpower8-vector', '-mcrypto', '-mhtm', '-mquad-memory', and
45635'-mquad-memory-atomic' options.
45636
45637 This section intentionally empty.
45638
45639
45640File: gcc.info,  Node: Basic PowerPC Built-in Functions Available on ISA 3.0,  Prev: Basic PowerPC Built-in Functions Available on ISA 2.07,  Up: Basic PowerPC Built-in Functions
45641
456426.60.21.5 Basic PowerPC Built-in Functions Available on ISA 3.0
45643...............................................................
45644
45645The basic built-in functions described in this section are available on
45646the PowerPC family of processors starting with ISA 3.0 or later.  Unless
45647specific options are explicitly disabled on the command line, specifying
45648option '-mcpu=power9' has the effect of enabling all the same options as
45649for '-mcpu=power8' in addition to the '-misel' option.
45650
45651 The following built-in functions are available on Linux 64-bit systems
45652that use the ISA 3.0 instruction set ('-mcpu=power9'):
45653
45654'__float128 __builtin_addf128_round_to_odd (__float128, __float128)'
45655     Perform a 128-bit IEEE floating point add using round to odd as the
45656     rounding mode.
45657
45658'__float128 __builtin_subf128_round_to_odd (__float128, __float128)'
45659     Perform a 128-bit IEEE floating point subtract using round to odd
45660     as the rounding mode.
45661
45662'__float128 __builtin_mulf128_round_to_odd (__float128, __float128)'
45663     Perform a 128-bit IEEE floating point multiply using round to odd
45664     as the rounding mode.
45665
45666'__float128 __builtin_divf128_round_to_odd (__float128, __float128)'
45667     Perform a 128-bit IEEE floating point divide using round to odd as
45668     the rounding mode.
45669
45670'__float128 __builtin_sqrtf128_round_to_odd (__float128)'
45671     Perform a 128-bit IEEE floating point square root using round to
45672     odd as the rounding mode.
45673
45674'__float128 __builtin_fmaf128_round_to_odd (__float128, __float128, __float128)'
45675     Perform a 128-bit IEEE floating point fused multiply and add
45676     operation using round to odd as the rounding mode.
45677
45678'double __builtin_truncf128_round_to_odd (__float128)'
45679     Convert a 128-bit IEEE floating point value to 'double' using round
45680     to odd as the rounding mode.
45681
45682 The following additional built-in functions are also available for the
45683PowerPC family of processors, starting with ISA 3.0 or later:
45684     long long __builtin_darn (void);
45685     long long __builtin_darn_raw (void);
45686     int __builtin_darn_32 (void);
45687
45688 The '__builtin_darn' and '__builtin_darn_raw' functions require a
4568964-bit environment supporting ISA 3.0 or later.  The '__builtin_darn'
45690function provides a 64-bit conditioned random number.  The
45691'__builtin_darn_raw' function provides a 64-bit raw random number.  The
45692'__builtin_darn_32' function provides a 32-bit conditioned random
45693number.
45694
45695 The following additional built-in functions are also available for the
45696PowerPC family of processors, starting with ISA 3.0 or later:
45697
45698     int __builtin_byte_in_set (unsigned char u, unsigned long long set);
45699     int __builtin_byte_in_range (unsigned char u, unsigned int range);
45700     int __builtin_byte_in_either_range (unsigned char u, unsigned int ranges);
45701
45702     int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal64 value);
45703     int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal128 value);
45704     int __builtin_dfp_dtstsfi_lt_dd (unsigned int comparison, _Decimal64 value);
45705     int __builtin_dfp_dtstsfi_lt_td (unsigned int comparison, _Decimal128 value);
45706
45707     int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal64 value);
45708     int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal128 value);
45709     int __builtin_dfp_dtstsfi_gt_dd (unsigned int comparison, _Decimal64 value);
45710     int __builtin_dfp_dtstsfi_gt_td (unsigned int comparison, _Decimal128 value);
45711
45712     int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal64 value);
45713     int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal128 value);
45714     int __builtin_dfp_dtstsfi_eq_dd (unsigned int comparison, _Decimal64 value);
45715     int __builtin_dfp_dtstsfi_eq_td (unsigned int comparison, _Decimal128 value);
45716
45717     int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal64 value);
45718     int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal128 value);
45719     int __builtin_dfp_dtstsfi_ov_dd (unsigned int comparison, _Decimal64 value);
45720     int __builtin_dfp_dtstsfi_ov_td (unsigned int comparison, _Decimal128 value);
45721
45722     double __builtin_mffsl(void);
45723
45724 The '__builtin_byte_in_set' function requires a 64-bit environment
45725supporting ISA 3.0 or later.  This function returns a non-zero value if
45726and only if its 'u' argument exactly equals one of the eight bytes
45727contained within its 64-bit 'set' argument.
45728
45729 The '__builtin_byte_in_range' and '__builtin_byte_in_either_range'
45730require an environment supporting ISA 3.0 or later.  For these two
45731functions, the 'range' argument is encoded as 4 bytes, organized as
45732'hi_1:lo_1:hi_2:lo_2'.  The '__builtin_byte_in_range' function returns a
45733non-zero value if and only if its 'u' argument is within the range
45734bounded between 'lo_2' and 'hi_2' inclusive.  The
45735'__builtin_byte_in_either_range' function returns non-zero if and only
45736if its 'u' argument is within either the range bounded between 'lo_1'
45737and 'hi_1' inclusive or the range bounded between 'lo_2' and 'hi_2'
45738inclusive.
45739
45740 The '__builtin_dfp_dtstsfi_lt' function returns a non-zero value if and
45741only if the number of signficant digits of its 'value' argument is less
45742than its 'comparison' argument.  The '__builtin_dfp_dtstsfi_lt_dd' and
45743'__builtin_dfp_dtstsfi_lt_td' functions behave similarly, but require
45744that the type of the 'value' argument be '__Decimal64' and
45745'__Decimal128' respectively.
45746
45747 The '__builtin_dfp_dtstsfi_gt' function returns a non-zero value if and
45748only if the number of signficant digits of its 'value' argument is
45749greater than its 'comparison' argument.  The
45750'__builtin_dfp_dtstsfi_gt_dd' and '__builtin_dfp_dtstsfi_gt_td'
45751functions behave similarly, but require that the type of the 'value'
45752argument be '__Decimal64' and '__Decimal128' respectively.
45753
45754 The '__builtin_dfp_dtstsfi_eq' function returns a non-zero value if and
45755only if the number of signficant digits of its 'value' argument equals
45756its 'comparison' argument.  The '__builtin_dfp_dtstsfi_eq_dd' and
45757'__builtin_dfp_dtstsfi_eq_td' functions behave similarly, but require
45758that the type of the 'value' argument be '__Decimal64' and
45759'__Decimal128' respectively.
45760
45761 The '__builtin_dfp_dtstsfi_ov' function returns a non-zero value if and
45762only if its 'value' argument has an undefined number of significant
45763digits, such as when 'value' is an encoding of 'NaN'.  The
45764'__builtin_dfp_dtstsfi_ov_dd' and '__builtin_dfp_dtstsfi_ov_td'
45765functions behave similarly, but require that the type of the 'value'
45766argument be '__Decimal64' and '__Decimal128' respectively.
45767
45768 The '__builtin_mffsl' uses the ISA 3.0 'mffsl' instruction to read the
45769FPSCR. The instruction is a lower latency version of the 'mffs'
45770instruction.  If the 'mffsl' instruction is not available, then the
45771builtin uses the older 'mffs' instruction to read the FPSCR.
45772
45773
45774File: 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
45775
457766.60.22 PowerPC AltiVec/VSX Built-in Functions
45777----------------------------------------------
45778
45779GCC provides an interface for the PowerPC family of processors to access
45780the AltiVec operations described in Motorola's AltiVec Programming
45781Interface Manual.  The interface is made available by including
45782'<altivec.h>' and using '-maltivec' and '-mabi=altivec'.  The interface
45783supports the following vector types.
45784
45785     vector unsigned char
45786     vector signed char
45787     vector bool char
45788
45789     vector unsigned short
45790     vector signed short
45791     vector bool short
45792     vector pixel
45793
45794     vector unsigned int
45795     vector signed int
45796     vector bool int
45797     vector float
45798
45799 GCC's implementation of the high-level language interface available
45800from C and C++ code differs from Motorola's documentation in several
45801ways.
45802
45803   * A vector constant is a list of constant expressions within curly
45804     braces.
45805
45806   * A vector initializer requires no cast if the vector constant is of
45807     the same type as the variable it is initializing.
45808
45809   * If 'signed' or 'unsigned' is omitted, the signedness of the vector
45810     type is the default signedness of the base type.  The default
45811     varies depending on the operating system, so a portable program
45812     should always specify the signedness.
45813
45814   * Compiling with '-maltivec' adds keywords '__vector', 'vector',
45815     '__pixel', 'pixel', '__bool' and 'bool'.  When compiling ISO C, the
45816     context-sensitive substitution of the keywords 'vector', 'pixel'
45817     and 'bool' is disabled.  To use them, you must include
45818     '<altivec.h>' instead.
45819
45820   * GCC allows using a 'typedef' name as the type specifier for a
45821     vector type, but only under the following circumstances:
45822
45823        * When using '__vector' instead of 'vector'; for example,
45824
45825               typedef signed short int16;
45826               __vector int16 data;
45827
45828        * When using 'vector' in keyword-and-predefine mode; for
45829          example,
45830
45831               typedef signed short int16;
45832               vector int16 data;
45833
45834          Note that keyword-and-predefine mode is enabled by disabling
45835          GNU extensions (e.g., by using '-std=c11') and including
45836          '<altivec.h>'.
45837
45838   * For C, overloaded functions are implemented with macros so the
45839     following does not work:
45840
45841            vec_add ((vector signed int){1, 2, 3, 4}, foo);
45842
45843     Since 'vec_add' is a macro, the vector constant in the example is
45844     treated as four separate arguments.  Wrap the entire argument in
45845     parentheses for this to work.
45846
45847 _Note:_ Only the '<altivec.h>' interface is supported.  Internally, GCC
45848uses built-in functions to achieve the functionality in the
45849aforementioned header file, but they are not supported and are subject
45850to change without notice.
45851
45852 GCC complies with the OpenPOWER 64-Bit ELF V2 ABI Specification, which
45853may be found at
45854<http://openpowerfoundation.org/wp-content/uploads/resources/leabi-prd/content/index.html>.
45855Appendix A of this document lists the vector API interfaces that must be
45856provided by compliant compilers.  Programmers should preferentially use
45857the interfaces described therein.  However, historically GCC has
45858provided additional interfaces for access to vector instructions.  These
45859are briefly described below.
45860
45861* Menu:
45862
45863* PowerPC AltiVec Built-in Functions on ISA 2.05::
45864* PowerPC AltiVec Built-in Functions Available on ISA 2.06::
45865* PowerPC AltiVec Built-in Functions Available on ISA 2.07::
45866* PowerPC AltiVec Built-in Functions Available on ISA 3.0::
45867
45868
45869File: 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
45870
458716.60.22.1 PowerPC AltiVec Built-in Functions on ISA 2.05
45872........................................................
45873
45874The following interfaces are supported for the generic and specific
45875AltiVec operations and the AltiVec predicates.  In cases where there is
45876a direct mapping between generic and specific operations, only the
45877generic names are shown here, although the specific operations can also
45878be used.
45879
45880 Arguments that are documented as 'const int' require literal integral
45881values within the range required for that operation.
45882
45883     vector signed char vec_abs (vector signed char);
45884     vector signed short vec_abs (vector signed short);
45885     vector signed int vec_abs (vector signed int);
45886     vector float vec_abs (vector float);
45887
45888     vector signed char vec_abss (vector signed char);
45889     vector signed short vec_abss (vector signed short);
45890     vector signed int vec_abss (vector signed int);
45891
45892     vector signed char vec_add (vector bool char, vector signed char);
45893     vector signed char vec_add (vector signed char, vector bool char);
45894     vector signed char vec_add (vector signed char, vector signed char);
45895     vector unsigned char vec_add (vector bool char, vector unsigned char);
45896     vector unsigned char vec_add (vector unsigned char, vector bool char);
45897     vector unsigned char vec_add (vector unsigned char, vector unsigned char);
45898     vector signed short vec_add (vector bool short, vector signed short);
45899     vector signed short vec_add (vector signed short, vector bool short);
45900     vector signed short vec_add (vector signed short, vector signed short);
45901     vector unsigned short vec_add (vector bool short, vector unsigned short);
45902     vector unsigned short vec_add (vector unsigned short, vector bool short);
45903     vector unsigned short vec_add (vector unsigned short, vector unsigned short);
45904     vector signed int vec_add (vector bool int, vector signed int);
45905     vector signed int vec_add (vector signed int, vector bool int);
45906     vector signed int vec_add (vector signed int, vector signed int);
45907     vector unsigned int vec_add (vector bool int, vector unsigned int);
45908     vector unsigned int vec_add (vector unsigned int, vector bool int);
45909     vector unsigned int vec_add (vector unsigned int, vector unsigned int);
45910     vector float vec_add (vector float, vector float);
45911
45912     vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
45913
45914     vector unsigned char vec_adds (vector bool char, vector unsigned char);
45915     vector unsigned char vec_adds (vector unsigned char, vector bool char);
45916     vector unsigned char vec_adds (vector unsigned char, vector unsigned char);
45917     vector signed char vec_adds (vector bool char, vector signed char);
45918     vector signed char vec_adds (vector signed char, vector bool char);
45919     vector signed char vec_adds (vector signed char, vector signed char);
45920     vector unsigned short vec_adds (vector bool short, vector unsigned short);
45921     vector unsigned short vec_adds (vector unsigned short, vector bool short);
45922     vector unsigned short vec_adds (vector unsigned short, vector unsigned short);
45923     vector signed short vec_adds (vector bool short, vector signed short);
45924     vector signed short vec_adds (vector signed short, vector bool short);
45925     vector signed short vec_adds (vector signed short, vector signed short);
45926     vector unsigned int vec_adds (vector bool int, vector unsigned int);
45927     vector unsigned int vec_adds (vector unsigned int, vector bool int);
45928     vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
45929     vector signed int vec_adds (vector bool int, vector signed int);
45930     vector signed int vec_adds (vector signed int, vector bool int);
45931     vector signed int vec_adds (vector signed int, vector signed int);
45932
45933     int vec_all_eq (vector signed char, vector bool char);
45934     int vec_all_eq (vector signed char, vector signed char);
45935     int vec_all_eq (vector unsigned char, vector bool char);
45936     int vec_all_eq (vector unsigned char, vector unsigned char);
45937     int vec_all_eq (vector bool char, vector bool char);
45938     int vec_all_eq (vector bool char, vector unsigned char);
45939     int vec_all_eq (vector bool char, vector signed char);
45940     int vec_all_eq (vector signed short, vector bool short);
45941     int vec_all_eq (vector signed short, vector signed short);
45942     int vec_all_eq (vector unsigned short, vector bool short);
45943     int vec_all_eq (vector unsigned short, vector unsigned short);
45944     int vec_all_eq (vector bool short, vector bool short);
45945     int vec_all_eq (vector bool short, vector unsigned short);
45946     int vec_all_eq (vector bool short, vector signed short);
45947     int vec_all_eq (vector pixel, vector pixel);
45948     int vec_all_eq (vector signed int, vector bool int);
45949     int vec_all_eq (vector signed int, vector signed int);
45950     int vec_all_eq (vector unsigned int, vector bool int);
45951     int vec_all_eq (vector unsigned int, vector unsigned int);
45952     int vec_all_eq (vector bool int, vector bool int);
45953     int vec_all_eq (vector bool int, vector unsigned int);
45954     int vec_all_eq (vector bool int, vector signed int);
45955     int vec_all_eq (vector float, vector float);
45956
45957     int vec_all_ge (vector bool char, vector unsigned char);
45958     int vec_all_ge (vector unsigned char, vector bool char);
45959     int vec_all_ge (vector unsigned char, vector unsigned char);
45960     int vec_all_ge (vector bool char, vector signed char);
45961     int vec_all_ge (vector signed char, vector bool char);
45962     int vec_all_ge (vector signed char, vector signed char);
45963     int vec_all_ge (vector bool short, vector unsigned short);
45964     int vec_all_ge (vector unsigned short, vector bool short);
45965     int vec_all_ge (vector unsigned short, vector unsigned short);
45966     int vec_all_ge (vector signed short, vector signed short);
45967     int vec_all_ge (vector bool short, vector signed short);
45968     int vec_all_ge (vector signed short, vector bool short);
45969     int vec_all_ge (vector bool int, vector unsigned int);
45970     int vec_all_ge (vector unsigned int, vector bool int);
45971     int vec_all_ge (vector unsigned int, vector unsigned int);
45972     int vec_all_ge (vector bool int, vector signed int);
45973     int vec_all_ge (vector signed int, vector bool int);
45974     int vec_all_ge (vector signed int, vector signed int);
45975     int vec_all_ge (vector float, vector float);
45976
45977     int vec_all_gt (vector bool char, vector unsigned char);
45978     int vec_all_gt (vector unsigned char, vector bool char);
45979     int vec_all_gt (vector unsigned char, vector unsigned char);
45980     int vec_all_gt (vector bool char, vector signed char);
45981     int vec_all_gt (vector signed char, vector bool char);
45982     int vec_all_gt (vector signed char, vector signed char);
45983     int vec_all_gt (vector bool short, vector unsigned short);
45984     int vec_all_gt (vector unsigned short, vector bool short);
45985     int vec_all_gt (vector unsigned short, vector unsigned short);
45986     int vec_all_gt (vector bool short, vector signed short);
45987     int vec_all_gt (vector signed short, vector bool short);
45988     int vec_all_gt (vector signed short, vector signed short);
45989     int vec_all_gt (vector bool int, vector unsigned int);
45990     int vec_all_gt (vector unsigned int, vector bool int);
45991     int vec_all_gt (vector unsigned int, vector unsigned int);
45992     int vec_all_gt (vector bool int, vector signed int);
45993     int vec_all_gt (vector signed int, vector bool int);
45994     int vec_all_gt (vector signed int, vector signed int);
45995     int vec_all_gt (vector float, vector float);
45996
45997     int vec_all_in (vector float, vector float);
45998
45999     int vec_all_le (vector bool char, vector unsigned char);
46000     int vec_all_le (vector unsigned char, vector bool char);
46001     int vec_all_le (vector unsigned char, vector unsigned char);
46002     int vec_all_le (vector bool char, vector signed char);
46003     int vec_all_le (vector signed char, vector bool char);
46004     int vec_all_le (vector signed char, vector signed char);
46005     int vec_all_le (vector bool short, vector unsigned short);
46006     int vec_all_le (vector unsigned short, vector bool short);
46007     int vec_all_le (vector unsigned short, vector unsigned short);
46008     int vec_all_le (vector bool short, vector signed short);
46009     int vec_all_le (vector signed short, vector bool short);
46010     int vec_all_le (vector signed short, vector signed short);
46011     int vec_all_le (vector bool int, vector unsigned int);
46012     int vec_all_le (vector unsigned int, vector bool int);
46013     int vec_all_le (vector unsigned int, vector unsigned int);
46014     int vec_all_le (vector bool int, vector signed int);
46015     int vec_all_le (vector signed int, vector bool int);
46016     int vec_all_le (vector signed int, vector signed int);
46017     int vec_all_le (vector float, vector float);
46018
46019     int vec_all_lt (vector bool char, vector unsigned char);
46020     int vec_all_lt (vector unsigned char, vector bool char);
46021     int vec_all_lt (vector unsigned char, vector unsigned char);
46022     int vec_all_lt (vector bool char, vector signed char);
46023     int vec_all_lt (vector signed char, vector bool char);
46024     int vec_all_lt (vector signed char, vector signed char);
46025     int vec_all_lt (vector bool short, vector unsigned short);
46026     int vec_all_lt (vector unsigned short, vector bool short);
46027     int vec_all_lt (vector unsigned short, vector unsigned short);
46028     int vec_all_lt (vector bool short, vector signed short);
46029     int vec_all_lt (vector signed short, vector bool short);
46030     int vec_all_lt (vector signed short, vector signed short);
46031     int vec_all_lt (vector bool int, vector unsigned int);
46032     int vec_all_lt (vector unsigned int, vector bool int);
46033     int vec_all_lt (vector unsigned int, vector unsigned int);
46034     int vec_all_lt (vector bool int, vector signed int);
46035     int vec_all_lt (vector signed int, vector bool int);
46036     int vec_all_lt (vector signed int, vector signed int);
46037     int vec_all_lt (vector float, vector float);
46038
46039     int vec_all_nan (vector float);
46040
46041     int vec_all_ne (vector signed char, vector bool char);
46042     int vec_all_ne (vector signed char, vector signed char);
46043     int vec_all_ne (vector unsigned char, vector bool char);
46044     int vec_all_ne (vector unsigned char, vector unsigned char);
46045     int vec_all_ne (vector bool char, vector bool char);
46046     int vec_all_ne (vector bool char, vector unsigned char);
46047     int vec_all_ne (vector bool char, vector signed char);
46048     int vec_all_ne (vector signed short, vector bool short);
46049     int vec_all_ne (vector signed short, vector signed short);
46050     int vec_all_ne (vector unsigned short, vector bool short);
46051     int vec_all_ne (vector unsigned short, vector unsigned short);
46052     int vec_all_ne (vector bool short, vector bool short);
46053     int vec_all_ne (vector bool short, vector unsigned short);
46054     int vec_all_ne (vector bool short, vector signed short);
46055     int vec_all_ne (vector pixel, vector pixel);
46056     int vec_all_ne (vector signed int, vector bool int);
46057     int vec_all_ne (vector signed int, vector signed int);
46058     int vec_all_ne (vector unsigned int, vector bool int);
46059     int vec_all_ne (vector unsigned int, vector unsigned int);
46060     int vec_all_ne (vector bool int, vector bool int);
46061     int vec_all_ne (vector bool int, vector unsigned int);
46062     int vec_all_ne (vector bool int, vector signed int);
46063     int vec_all_ne (vector float, vector float);
46064
46065     int vec_all_nge (vector float, vector float);
46066
46067     int vec_all_ngt (vector float, vector float);
46068
46069     int vec_all_nle (vector float, vector float);
46070
46071     int vec_all_nlt (vector float, vector float);
46072
46073     int vec_all_numeric (vector float);
46074
46075     vector float vec_and (vector float, vector float);
46076     vector float vec_and (vector float, vector bool int);
46077     vector float vec_and (vector bool int, vector float);
46078     vector bool int vec_and (vector bool int, vector bool int);
46079     vector signed int vec_and (vector bool int, vector signed int);
46080     vector signed int vec_and (vector signed int, vector bool int);
46081     vector signed int vec_and (vector signed int, vector signed int);
46082     vector unsigned int vec_and (vector bool int, vector unsigned int);
46083     vector unsigned int vec_and (vector unsigned int, vector bool int);
46084     vector unsigned int vec_and (vector unsigned int, vector unsigned int);
46085     vector bool short vec_and (vector bool short, vector bool short);
46086     vector signed short vec_and (vector bool short, vector signed short);
46087     vector signed short vec_and (vector signed short, vector bool short);
46088     vector signed short vec_and (vector signed short, vector signed short);
46089     vector unsigned short vec_and (vector bool short, vector unsigned short);
46090     vector unsigned short vec_and (vector unsigned short, vector bool short);
46091     vector unsigned short vec_and (vector unsigned short, vector unsigned short);
46092     vector signed char vec_and (vector bool char, vector signed char);
46093     vector bool char vec_and (vector bool char, vector bool char);
46094     vector signed char vec_and (vector signed char, vector bool char);
46095     vector signed char vec_and (vector signed char, vector signed char);
46096     vector unsigned char vec_and (vector bool char, vector unsigned char);
46097     vector unsigned char vec_and (vector unsigned char, vector bool char);
46098     vector unsigned char vec_and (vector unsigned char, vector unsigned char);
46099
46100     vector float vec_andc (vector float, vector float);
46101     vector float vec_andc (vector float, vector bool int);
46102     vector float vec_andc (vector bool int, vector float);
46103     vector bool int vec_andc (vector bool int, vector bool int);
46104     vector signed int vec_andc (vector bool int, vector signed int);
46105     vector signed int vec_andc (vector signed int, vector bool int);
46106     vector signed int vec_andc (vector signed int, vector signed int);
46107     vector unsigned int vec_andc (vector bool int, vector unsigned int);
46108     vector unsigned int vec_andc (vector unsigned int, vector bool int);
46109     vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
46110     vector bool short vec_andc (vector bool short, vector bool short);
46111     vector signed short vec_andc (vector bool short, vector signed short);
46112     vector signed short vec_andc (vector signed short, vector bool short);
46113     vector signed short vec_andc (vector signed short, vector signed short);
46114     vector unsigned short vec_andc (vector bool short, vector unsigned short);
46115     vector unsigned short vec_andc (vector unsigned short, vector bool short);
46116     vector unsigned short vec_andc (vector unsigned short, vector unsigned short);
46117     vector signed char vec_andc (vector bool char, vector signed char);
46118     vector bool char vec_andc (vector bool char, vector bool char);
46119     vector signed char vec_andc (vector signed char, vector bool char);
46120     vector signed char vec_andc (vector signed char, vector signed char);
46121     vector unsigned char vec_andc (vector bool char, vector unsigned char);
46122     vector unsigned char vec_andc (vector unsigned char, vector bool char);
46123     vector unsigned char vec_andc (vector unsigned char, vector unsigned char);
46124
46125     int vec_any_eq (vector signed char, vector bool char);
46126     int vec_any_eq (vector signed char, vector signed char);
46127     int vec_any_eq (vector unsigned char, vector bool char);
46128     int vec_any_eq (vector unsigned char, vector unsigned char);
46129     int vec_any_eq (vector bool char, vector bool char);
46130     int vec_any_eq (vector bool char, vector unsigned char);
46131     int vec_any_eq (vector bool char, vector signed char);
46132     int vec_any_eq (vector signed short, vector bool short);
46133     int vec_any_eq (vector signed short, vector signed short);
46134     int vec_any_eq (vector unsigned short, vector bool short);
46135     int vec_any_eq (vector unsigned short, vector unsigned short);
46136     int vec_any_eq (vector bool short, vector bool short);
46137     int vec_any_eq (vector bool short, vector unsigned short);
46138     int vec_any_eq (vector bool short, vector signed short);
46139     int vec_any_eq (vector pixel, vector pixel);
46140     int vec_any_eq (vector signed int, vector bool int);
46141     int vec_any_eq (vector signed int, vector signed int);
46142     int vec_any_eq (vector unsigned int, vector bool int);
46143     int vec_any_eq (vector unsigned int, vector unsigned int);
46144     int vec_any_eq (vector bool int, vector bool int);
46145     int vec_any_eq (vector bool int, vector unsigned int);
46146     int vec_any_eq (vector bool int, vector signed int);
46147     int vec_any_eq (vector float, vector float);
46148
46149     int vec_any_ge (vector signed char, vector bool char);
46150     int vec_any_ge (vector unsigned char, vector bool char);
46151     int vec_any_ge (vector unsigned char, vector unsigned char);
46152     int vec_any_ge (vector signed char, vector signed char);
46153     int vec_any_ge (vector bool char, vector unsigned char);
46154     int vec_any_ge (vector bool char, vector signed char);
46155     int vec_any_ge (vector unsigned short, vector bool short);
46156     int vec_any_ge (vector unsigned short, vector unsigned short);
46157     int vec_any_ge (vector signed short, vector signed short);
46158     int vec_any_ge (vector signed short, vector bool short);
46159     int vec_any_ge (vector bool short, vector unsigned short);
46160     int vec_any_ge (vector bool short, vector signed short);
46161     int vec_any_ge (vector signed int, vector bool int);
46162     int vec_any_ge (vector unsigned int, vector bool int);
46163     int vec_any_ge (vector unsigned int, vector unsigned int);
46164     int vec_any_ge (vector signed int, vector signed int);
46165     int vec_any_ge (vector bool int, vector unsigned int);
46166     int vec_any_ge (vector bool int, vector signed int);
46167     int vec_any_ge (vector float, vector float);
46168
46169     int vec_any_gt (vector bool char, vector unsigned char);
46170     int vec_any_gt (vector unsigned char, vector bool char);
46171     int vec_any_gt (vector unsigned char, vector unsigned char);
46172     int vec_any_gt (vector bool char, vector signed char);
46173     int vec_any_gt (vector signed char, vector bool char);
46174     int vec_any_gt (vector signed char, vector signed char);
46175     int vec_any_gt (vector bool short, vector unsigned short);
46176     int vec_any_gt (vector unsigned short, vector bool short);
46177     int vec_any_gt (vector unsigned short, vector unsigned short);
46178     int vec_any_gt (vector bool short, vector signed short);
46179     int vec_any_gt (vector signed short, vector bool short);
46180     int vec_any_gt (vector signed short, vector signed short);
46181     int vec_any_gt (vector bool int, vector unsigned int);
46182     int vec_any_gt (vector unsigned int, vector bool int);
46183     int vec_any_gt (vector unsigned int, vector unsigned int);
46184     int vec_any_gt (vector bool int, vector signed int);
46185     int vec_any_gt (vector signed int, vector bool int);
46186     int vec_any_gt (vector signed int, vector signed int);
46187     int vec_any_gt (vector float, vector float);
46188
46189     int vec_any_le (vector bool char, vector unsigned char);
46190     int vec_any_le (vector unsigned char, vector bool char);
46191     int vec_any_le (vector unsigned char, vector unsigned char);
46192     int vec_any_le (vector bool char, vector signed char);
46193     int vec_any_le (vector signed char, vector bool char);
46194     int vec_any_le (vector signed char, vector signed char);
46195     int vec_any_le (vector bool short, vector unsigned short);
46196     int vec_any_le (vector unsigned short, vector bool short);
46197     int vec_any_le (vector unsigned short, vector unsigned short);
46198     int vec_any_le (vector bool short, vector signed short);
46199     int vec_any_le (vector signed short, vector bool short);
46200     int vec_any_le (vector signed short, vector signed short);
46201     int vec_any_le (vector bool int, vector unsigned int);
46202     int vec_any_le (vector unsigned int, vector bool int);
46203     int vec_any_le (vector unsigned int, vector unsigned int);
46204     int vec_any_le (vector bool int, vector signed int);
46205     int vec_any_le (vector signed int, vector bool int);
46206     int vec_any_le (vector signed int, vector signed int);
46207     int vec_any_le (vector float, vector float);
46208
46209     int vec_any_lt (vector bool char, vector unsigned char);
46210     int vec_any_lt (vector unsigned char, vector bool char);
46211     int vec_any_lt (vector unsigned char, vector unsigned char);
46212     int vec_any_lt (vector bool char, vector signed char);
46213     int vec_any_lt (vector signed char, vector bool char);
46214     int vec_any_lt (vector signed char, vector signed char);
46215     int vec_any_lt (vector bool short, vector unsigned short);
46216     int vec_any_lt (vector unsigned short, vector bool short);
46217     int vec_any_lt (vector unsigned short, vector unsigned short);
46218     int vec_any_lt (vector bool short, vector signed short);
46219     int vec_any_lt (vector signed short, vector bool short);
46220     int vec_any_lt (vector signed short, vector signed short);
46221     int vec_any_lt (vector bool int, vector unsigned int);
46222     int vec_any_lt (vector unsigned int, vector bool int);
46223     int vec_any_lt (vector unsigned int, vector unsigned int);
46224     int vec_any_lt (vector bool int, vector signed int);
46225     int vec_any_lt (vector signed int, vector bool int);
46226     int vec_any_lt (vector signed int, vector signed int);
46227     int vec_any_lt (vector float, vector float);
46228
46229     int vec_any_nan (vector float);
46230
46231     int vec_any_ne (vector signed char, vector bool char);
46232     int vec_any_ne (vector signed char, vector signed char);
46233     int vec_any_ne (vector unsigned char, vector bool char);
46234     int vec_any_ne (vector unsigned char, vector unsigned char);
46235     int vec_any_ne (vector bool char, vector bool char);
46236     int vec_any_ne (vector bool char, vector unsigned char);
46237     int vec_any_ne (vector bool char, vector signed char);
46238     int vec_any_ne (vector signed short, vector bool short);
46239     int vec_any_ne (vector signed short, vector signed short);
46240     int vec_any_ne (vector unsigned short, vector bool short);
46241     int vec_any_ne (vector unsigned short, vector unsigned short);
46242     int vec_any_ne (vector bool short, vector bool short);
46243     int vec_any_ne (vector bool short, vector unsigned short);
46244     int vec_any_ne (vector bool short, vector signed short);
46245     int vec_any_ne (vector pixel, vector pixel);
46246     int vec_any_ne (vector signed int, vector bool int);
46247     int vec_any_ne (vector signed int, vector signed int);
46248     int vec_any_ne (vector unsigned int, vector bool int);
46249     int vec_any_ne (vector unsigned int, vector unsigned int);
46250     int vec_any_ne (vector bool int, vector bool int);
46251     int vec_any_ne (vector bool int, vector unsigned int);
46252     int vec_any_ne (vector bool int, vector signed int);
46253     int vec_any_ne (vector float, vector float);
46254
46255     int vec_any_nge (vector float, vector float);
46256
46257     int vec_any_ngt (vector float, vector float);
46258
46259     int vec_any_nle (vector float, vector float);
46260
46261     int vec_any_nlt (vector float, vector float);
46262
46263     int vec_any_numeric (vector float);
46264
46265     int vec_any_out (vector float, vector float);
46266
46267     vector unsigned char vec_avg (vector unsigned char, vector unsigned char);
46268     vector signed char vec_avg (vector signed char, vector signed char);
46269     vector unsigned short vec_avg (vector unsigned short, vector unsigned short);
46270     vector signed short vec_avg (vector signed short, vector signed short);
46271     vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
46272     vector signed int vec_avg (vector signed int, vector signed int);
46273
46274     vector float vec_ceil (vector float);
46275
46276     vector signed int vec_cmpb (vector float, vector float);
46277
46278     vector bool char vec_cmpeq (vector bool char, vector bool char);
46279     vector bool short vec_cmpeq (vector bool short, vector bool short);
46280     vector bool int vec_cmpeq (vector bool int, vector bool int);
46281     vector bool char vec_cmpeq (vector signed char, vector signed char);
46282     vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
46283     vector bool short vec_cmpeq (vector signed short, vector signed short);
46284     vector bool short vec_cmpeq (vector unsigned short, vector unsigned short);
46285     vector bool int vec_cmpeq (vector signed int, vector signed int);
46286     vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
46287     vector bool int vec_cmpeq (vector float, vector float);
46288
46289     vector bool int vec_cmpge (vector float, vector float);
46290
46291     vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
46292     vector bool char vec_cmpgt (vector signed char, vector signed char);
46293     vector bool short vec_cmpgt (vector unsigned short, vector unsigned short);
46294     vector bool short vec_cmpgt (vector signed short, vector signed short);
46295     vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
46296     vector bool int vec_cmpgt (vector signed int, vector signed int);
46297     vector bool int vec_cmpgt (vector float, vector float);
46298
46299     vector bool int vec_cmple (vector float, vector float);
46300
46301     vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
46302     vector bool char vec_cmplt (vector signed char, vector signed char);
46303     vector bool short vec_cmplt (vector unsigned short, vector unsigned short);
46304     vector bool short vec_cmplt (vector signed short, vector signed short);
46305     vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
46306     vector bool int vec_cmplt (vector signed int, vector signed int);
46307     vector bool int vec_cmplt (vector float, vector float);
46308
46309     vector float vec_cpsgn (vector float, vector float);
46310
46311     vector float vec_ctf (vector unsigned int, const int);
46312     vector float vec_ctf (vector signed int, const int);
46313
46314     vector signed int vec_cts (vector float, const int);
46315
46316     vector unsigned int vec_ctu (vector float, const int);
46317
46318     void vec_dss (const int);
46319
46320     void vec_dssall (void);
46321
46322     void vec_dst (const vector unsigned char *, int, const int);
46323     void vec_dst (const vector signed char *, int, const int);
46324     void vec_dst (const vector bool char *, int, const int);
46325     void vec_dst (const vector unsigned short *, int, const int);
46326     void vec_dst (const vector signed short *, int, const int);
46327     void vec_dst (const vector bool short *, int, const int);
46328     void vec_dst (const vector pixel *, int, const int);
46329     void vec_dst (const vector unsigned int *, int, const int);
46330     void vec_dst (const vector signed int *, int, const int);
46331     void vec_dst (const vector bool int *, int, const int);
46332     void vec_dst (const vector float *, int, const int);
46333     void vec_dst (const unsigned char *, int, const int);
46334     void vec_dst (const signed char *, int, const int);
46335     void vec_dst (const unsigned short *, int, const int);
46336     void vec_dst (const short *, int, const int);
46337     void vec_dst (const unsigned int *, int, const int);
46338     void vec_dst (const int *, int, const int);
46339     void vec_dst (const float *, int, const int);
46340
46341     void vec_dstst (const vector unsigned char *, int, const int);
46342     void vec_dstst (const vector signed char *, int, const int);
46343     void vec_dstst (const vector bool char *, int, const int);
46344     void vec_dstst (const vector unsigned short *, int, const int);
46345     void vec_dstst (const vector signed short *, int, const int);
46346     void vec_dstst (const vector bool short *, int, const int);
46347     void vec_dstst (const vector pixel *, int, const int);
46348     void vec_dstst (const vector unsigned int *, int, const int);
46349     void vec_dstst (const vector signed int *, int, const int);
46350     void vec_dstst (const vector bool int *, int, const int);
46351     void vec_dstst (const vector float *, int, const int);
46352     void vec_dstst (const unsigned char *, int, const int);
46353     void vec_dstst (const signed char *, int, const int);
46354     void vec_dstst (const unsigned short *, int, const int);
46355     void vec_dstst (const short *, int, const int);
46356     void vec_dstst (const unsigned int *, int, const int);
46357     void vec_dstst (const int *, int, const int);
46358     void vec_dstst (const unsigned long *, int, const int);
46359     void vec_dstst (const long *, int, const int);
46360     void vec_dstst (const float *, int, const int);
46361
46362     void vec_dststt (const vector unsigned char *, int, const int);
46363     void vec_dststt (const vector signed char *, int, const int);
46364     void vec_dststt (const vector bool char *, int, const int);
46365     void vec_dststt (const vector unsigned short *, int, const int);
46366     void vec_dststt (const vector signed short *, int, const int);
46367     void vec_dststt (const vector bool short *, int, const int);
46368     void vec_dststt (const vector pixel *, int, const int);
46369     void vec_dststt (const vector unsigned int *, int, const int);
46370     void vec_dststt (const vector signed int *, int, const int);
46371     void vec_dststt (const vector bool int *, int, const int);
46372     void vec_dststt (const vector float *, int, const int);
46373     void vec_dststt (const unsigned char *, int, const int);
46374     void vec_dststt (const signed char *, int, const int);
46375     void vec_dststt (const unsigned short *, int, const int);
46376     void vec_dststt (const short *, int, const int);
46377     void vec_dststt (const unsigned int *, int, const int);
46378     void vec_dststt (const int *, int, const int);
46379     void vec_dststt (const float *, int, const int);
46380
46381     void vec_dstt (const vector unsigned char *, int, const int);
46382     void vec_dstt (const vector signed char *, int, const int);
46383     void vec_dstt (const vector bool char *, int, const int);
46384     void vec_dstt (const vector unsigned short *, int, const int);
46385     void vec_dstt (const vector signed short *, int, const int);
46386     void vec_dstt (const vector bool short *, int, const int);
46387     void vec_dstt (const vector pixel *, int, const int);
46388     void vec_dstt (const vector unsigned int *, int, const int);
46389     void vec_dstt (const vector signed int *, int, const int);
46390     void vec_dstt (const vector bool int *, int, const int);
46391     void vec_dstt (const vector float *, int, const int);
46392     void vec_dstt (const unsigned char *, int, const int);
46393     void vec_dstt (const signed char *, int, const int);
46394     void vec_dstt (const unsigned short *, int, const int);
46395     void vec_dstt (const short *, int, const int);
46396     void vec_dstt (const unsigned int *, int, const int);
46397     void vec_dstt (const int *, int, const int);
46398     void vec_dstt (const float *, int, const int);
46399
46400     vector float vec_expte (vector float);
46401
46402     vector float vec_floor (vector float);
46403
46404     vector float vec_ld (int, const vector float *);
46405     vector float vec_ld (int, const float *);
46406     vector bool int vec_ld (int, const vector bool int *);
46407     vector signed int vec_ld (int, const vector signed int *);
46408     vector signed int vec_ld (int, const int *);
46409     vector unsigned int vec_ld (int, const vector unsigned int *);
46410     vector unsigned int vec_ld (int, const unsigned int *);
46411     vector bool short vec_ld (int, const vector bool short *);
46412     vector pixel vec_ld (int, const vector pixel *);
46413     vector signed short vec_ld (int, const vector signed short *);
46414     vector signed short vec_ld (int, const short *);
46415     vector unsigned short vec_ld (int, const vector unsigned short *);
46416     vector unsigned short vec_ld (int, const unsigned short *);
46417     vector bool char vec_ld (int, const vector bool char *);
46418     vector signed char vec_ld (int, const vector signed char *);
46419     vector signed char vec_ld (int, const signed char *);
46420     vector unsigned char vec_ld (int, const vector unsigned char *);
46421     vector unsigned char vec_ld (int, const unsigned char *);
46422
46423     vector signed char vec_lde (int, const signed char *);
46424     vector unsigned char vec_lde (int, const unsigned char *);
46425     vector signed short vec_lde (int, const short *);
46426     vector unsigned short vec_lde (int, const unsigned short *);
46427     vector float vec_lde (int, const float *);
46428     vector signed int vec_lde (int, const int *);
46429     vector unsigned int vec_lde (int, const unsigned int *);
46430
46431     vector float vec_ldl (int, const vector float *);
46432     vector float vec_ldl (int, const float *);
46433     vector bool int vec_ldl (int, const vector bool int *);
46434     vector signed int vec_ldl (int, const vector signed int *);
46435     vector signed int vec_ldl (int, const int *);
46436     vector unsigned int vec_ldl (int, const vector unsigned int *);
46437     vector unsigned int vec_ldl (int, const unsigned int *);
46438     vector bool short vec_ldl (int, const vector bool short *);
46439     vector pixel vec_ldl (int, const vector pixel *);
46440     vector signed short vec_ldl (int, const vector signed short *);
46441     vector signed short vec_ldl (int, const short *);
46442     vector unsigned short vec_ldl (int, const vector unsigned short *);
46443     vector unsigned short vec_ldl (int, const unsigned short *);
46444     vector bool char vec_ldl (int, const vector bool char *);
46445     vector signed char vec_ldl (int, const vector signed char *);
46446     vector signed char vec_ldl (int, const signed char *);
46447     vector unsigned char vec_ldl (int, const vector unsigned char *);
46448     vector unsigned char vec_ldl (int, const unsigned char *);
46449
46450     vector float vec_loge (vector float);
46451
46452     vector signed char vec_lvebx (int, char *);
46453     vector unsigned char vec_lvebx (int, unsigned char *);
46454
46455     vector signed short vec_lvehx (int, short *);
46456     vector unsigned short vec_lvehx (int, unsigned short *);
46457
46458     vector float vec_lvewx (int, float *);
46459     vector signed int vec_lvewx (int, int *);
46460     vector unsigned int vec_lvewx (int, unsigned int *);
46461
46462     vector unsigned char vec_lvsl (int, const unsigned char *);
46463     vector unsigned char vec_lvsl (int, const signed char *);
46464     vector unsigned char vec_lvsl (int, const unsigned short *);
46465     vector unsigned char vec_lvsl (int, const short *);
46466     vector unsigned char vec_lvsl (int, const unsigned int *);
46467     vector unsigned char vec_lvsl (int, const int *);
46468     vector unsigned char vec_lvsl (int, const float *);
46469
46470     vector unsigned char vec_lvsr (int, const unsigned char *);
46471     vector unsigned char vec_lvsr (int, const signed char *);
46472     vector unsigned char vec_lvsr (int, const unsigned short *);
46473     vector unsigned char vec_lvsr (int, const short *);
46474     vector unsigned char vec_lvsr (int, const unsigned int *);
46475     vector unsigned char vec_lvsr (int, const int *);
46476     vector unsigned char vec_lvsr (int, const float *);
46477
46478     vector float vec_madd (vector float, vector float, vector float);
46479
46480     vector signed short vec_madds (vector signed short, vector signed short,
46481                                    vector signed short);
46482
46483     vector unsigned char vec_max (vector bool char, vector unsigned char);
46484     vector unsigned char vec_max (vector unsigned char, vector bool char);
46485     vector unsigned char vec_max (vector unsigned char, vector unsigned char);
46486     vector signed char vec_max (vector bool char, vector signed char);
46487     vector signed char vec_max (vector signed char, vector bool char);
46488     vector signed char vec_max (vector signed char, vector signed char);
46489     vector unsigned short vec_max (vector bool short, vector unsigned short);
46490     vector unsigned short vec_max (vector unsigned short, vector bool short);
46491     vector unsigned short vec_max (vector unsigned short, vector unsigned short);
46492     vector signed short vec_max (vector bool short, vector signed short);
46493     vector signed short vec_max (vector signed short, vector bool short);
46494     vector signed short vec_max (vector signed short, vector signed short);
46495     vector unsigned int vec_max (vector bool int, vector unsigned int);
46496     vector unsigned int vec_max (vector unsigned int, vector bool int);
46497     vector unsigned int vec_max (vector unsigned int, vector unsigned int);
46498     vector signed int vec_max (vector bool int, vector signed int);
46499     vector signed int vec_max (vector signed int, vector bool int);
46500     vector signed int vec_max (vector signed int, vector signed int);
46501     vector float vec_max (vector float, vector float);
46502
46503     vector bool char vec_mergeh (vector bool char, vector bool char);
46504     vector signed char vec_mergeh (vector signed char, vector signed char);
46505     vector unsigned char vec_mergeh (vector unsigned char, vector unsigned char);
46506     vector bool short vec_mergeh (vector bool short, vector bool short);
46507     vector pixel vec_mergeh (vector pixel, vector pixel);
46508     vector signed short vec_mergeh (vector signed short, vector signed short);
46509     vector unsigned short vec_mergeh (vector unsigned short, vector unsigned short);
46510     vector float vec_mergeh (vector float, vector float);
46511     vector bool int vec_mergeh (vector bool int, vector bool int);
46512     vector signed int vec_mergeh (vector signed int, vector signed int);
46513     vector unsigned int vec_mergeh (vector unsigned int, vector unsigned int);
46514
46515     vector bool char vec_mergel (vector bool char, vector bool char);
46516     vector signed char vec_mergel (vector signed char, vector signed char);
46517     vector unsigned char vec_mergel (vector unsigned char, vector unsigned char);
46518     vector bool short vec_mergel (vector bool short, vector bool short);
46519     vector pixel vec_mergel (vector pixel, vector pixel);
46520     vector signed short vec_mergel (vector signed short, vector signed short);
46521     vector unsigned short vec_mergel (vector unsigned short, vector unsigned short);
46522     vector float vec_mergel (vector float, vector float);
46523     vector bool int vec_mergel (vector bool int, vector bool int);
46524     vector signed int vec_mergel (vector signed int, vector signed int);
46525     vector unsigned int vec_mergel (vector unsigned int, vector unsigned int);
46526
46527     vector unsigned short vec_mfvscr (void);
46528
46529     vector unsigned char vec_min (vector bool char, vector unsigned char);
46530     vector unsigned char vec_min (vector unsigned char, vector bool char);
46531     vector unsigned char vec_min (vector unsigned char, vector unsigned char);
46532     vector signed char vec_min (vector bool char, vector signed char);
46533     vector signed char vec_min (vector signed char, vector bool char);
46534     vector signed char vec_min (vector signed char, vector signed char);
46535     vector unsigned short vec_min (vector bool short, vector unsigned short);
46536     vector unsigned short vec_min (vector unsigned short, vector bool short);
46537     vector unsigned short vec_min (vector unsigned short, vector unsigned short);
46538     vector signed short vec_min (vector bool short, vector signed short);
46539     vector signed short vec_min (vector signed short, vector bool short);
46540     vector signed short vec_min (vector signed short, vector signed short);
46541     vector unsigned int vec_min (vector bool int, vector unsigned int);
46542     vector unsigned int vec_min (vector unsigned int, vector bool int);
46543     vector unsigned int vec_min (vector unsigned int, vector unsigned int);
46544     vector signed int vec_min (vector bool int, vector signed int);
46545     vector signed int vec_min (vector signed int, vector bool int);
46546     vector signed int vec_min (vector signed int, vector signed int);
46547     vector float vec_min (vector float, vector float);
46548
46549     vector signed short vec_mladd (vector signed short, vector signed short,
46550                                    vector signed short);
46551     vector signed short vec_mladd (vector signed short, vector unsigned short,
46552                                    vector unsigned short);
46553     vector signed short vec_mladd (vector unsigned short, vector signed short,
46554                                    vector signed short);
46555     vector unsigned short vec_mladd (vector unsigned short, vector unsigned short,
46556                                      vector unsigned short);
46557
46558     vector signed short vec_mradds (vector signed short, vector signed short,
46559                                     vector signed short);
46560
46561     vector unsigned int vec_msum (vector unsigned char, vector unsigned char,
46562                                   vector unsigned int);
46563     vector signed int vec_msum (vector signed char, vector unsigned char,
46564                                 vector signed int);
46565     vector unsigned int vec_msum (vector unsigned short, vector unsigned short,
46566                                   vector unsigned int);
46567     vector signed int vec_msum (vector signed short, vector signed short,
46568                                 vector signed int);
46569
46570     vector unsigned int vec_msums (vector unsigned short, vector unsigned short,
46571                                    vector unsigned int);
46572     vector signed int vec_msums (vector signed short, vector signed short,
46573                                  vector signed int);
46574
46575     void vec_mtvscr (vector signed int);
46576     void vec_mtvscr (vector unsigned int);
46577     void vec_mtvscr (vector bool int);
46578     void vec_mtvscr (vector signed short);
46579     void vec_mtvscr (vector unsigned short);
46580     void vec_mtvscr (vector bool short);
46581     void vec_mtvscr (vector pixel);
46582     void vec_mtvscr (vector signed char);
46583     void vec_mtvscr (vector unsigned char);
46584     void vec_mtvscr (vector bool char);
46585
46586     vector float vec_mul (vector float, vector float);
46587
46588     vector unsigned short vec_mule (vector unsigned char, vector unsigned char);
46589     vector signed short vec_mule (vector signed char, vector signed char);
46590     vector unsigned int vec_mule (vector unsigned short, vector unsigned short);
46591     vector signed int vec_mule (vector signed short, vector signed short);
46592
46593     vector unsigned short vec_mulo (vector unsigned char, vector unsigned char);
46594     vector signed short vec_mulo (vector signed char, vector signed char);
46595     vector unsigned int vec_mulo (vector unsigned short, vector unsigned short);
46596     vector signed int vec_mulo (vector signed short, vector signed short);
46597
46598     vector signed char vec_nabs (vector signed char);
46599     vector signed short vec_nabs (vector signed short);
46600     vector signed int vec_nabs (vector signed int);
46601     vector float vec_nabs (vector float);
46602
46603     vector float vec_nmsub (vector float, vector float, vector float);
46604
46605     vector float vec_nor (vector float, vector float);
46606     vector signed int vec_nor (vector signed int, vector signed int);
46607     vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
46608     vector bool int vec_nor (vector bool int, vector bool int);
46609     vector signed short vec_nor (vector signed short, vector signed short);
46610     vector unsigned short vec_nor (vector unsigned short, vector unsigned short);
46611     vector bool short vec_nor (vector bool short, vector bool short);
46612     vector signed char vec_nor (vector signed char, vector signed char);
46613     vector unsigned char vec_nor (vector unsigned char, vector unsigned char);
46614     vector bool char vec_nor (vector bool char, vector bool char);
46615
46616     vector float vec_or (vector float, vector float);
46617     vector float vec_or (vector float, vector bool int);
46618     vector float vec_or (vector bool int, vector float);
46619     vector bool int vec_or (vector bool int, vector bool int);
46620     vector signed int vec_or (vector bool int, vector signed int);
46621     vector signed int vec_or (vector signed int, vector bool int);
46622     vector signed int vec_or (vector signed int, vector signed int);
46623     vector unsigned int vec_or (vector bool int, vector unsigned int);
46624     vector unsigned int vec_or (vector unsigned int, vector bool int);
46625     vector unsigned int vec_or (vector unsigned int, vector unsigned int);
46626     vector bool short vec_or (vector bool short, vector bool short);
46627     vector signed short vec_or (vector bool short, vector signed short);
46628     vector signed short vec_or (vector signed short, vector bool short);
46629     vector signed short vec_or (vector signed short, vector signed short);
46630     vector unsigned short vec_or (vector bool short, vector unsigned short);
46631     vector unsigned short vec_or (vector unsigned short, vector bool short);
46632     vector unsigned short vec_or (vector unsigned short, vector unsigned short);
46633     vector signed char vec_or (vector bool char, vector signed char);
46634     vector bool char vec_or (vector bool char, vector bool char);
46635     vector signed char vec_or (vector signed char, vector bool char);
46636     vector signed char vec_or (vector signed char, vector signed char);
46637     vector unsigned char vec_or (vector bool char, vector unsigned char);
46638     vector unsigned char vec_or (vector unsigned char, vector bool char);
46639     vector unsigned char vec_or (vector unsigned char, vector unsigned char);
46640
46641     vector signed char vec_pack (vector signed short, vector signed short);
46642     vector unsigned char vec_pack (vector unsigned short, vector unsigned short);
46643     vector bool char vec_pack (vector bool short, vector bool short);
46644     vector signed short vec_pack (vector signed int, vector signed int);
46645     vector unsigned short vec_pack (vector unsigned int, vector unsigned int);
46646     vector bool short vec_pack (vector bool int, vector bool int);
46647
46648     vector pixel vec_packpx (vector unsigned int, vector unsigned int);
46649
46650     vector unsigned char vec_packs (vector unsigned short, vector unsigned short);
46651     vector signed char vec_packs (vector signed short, vector signed short);
46652     vector unsigned short vec_packs (vector unsigned int, vector unsigned int);
46653     vector signed short vec_packs (vector signed int, vector signed int);
46654
46655     vector unsigned char vec_packsu (vector unsigned short, vector unsigned short);
46656     vector unsigned char vec_packsu (vector signed short, vector signed short);
46657     vector unsigned short vec_packsu (vector unsigned int, vector unsigned int);
46658     vector unsigned short vec_packsu (vector signed int, vector signed int);
46659
46660     vector float vec_perm (vector float, vector float, vector unsigned char);
46661     vector signed int vec_perm (vector signed int, vector signed int, vector unsigned char);
46662     vector unsigned int vec_perm (vector unsigned int, vector unsigned int,
46663                                   vector unsigned char);
46664     vector bool int vec_perm (vector bool int, vector bool int, vector unsigned char);
46665     vector signed short vec_perm (vector signed short, vector signed short,
46666                                   vector unsigned char);
46667     vector unsigned short vec_perm (vector unsigned short, vector unsigned short,
46668                                     vector unsigned char);
46669     vector bool short vec_perm (vector bool short, vector bool short, vector unsigned char);
46670     vector pixel vec_perm (vector pixel, vector pixel, vector unsigned char);
46671     vector signed char vec_perm (vector signed char, vector signed char,
46672                                  vector unsigned char);
46673     vector unsigned char vec_perm (vector unsigned char, vector unsigned char,
46674                                    vector unsigned char);
46675     vector bool char vec_perm (vector bool char, vector bool char, vector unsigned char);
46676
46677     vector float vec_re (vector float);
46678
46679     vector bool char vec_reve (vector bool char);
46680     vector signed char vec_reve (vector signed char);
46681     vector unsigned char vec_reve (vector unsigned char);
46682     vector bool int vec_reve (vector bool int);
46683     vector signed int vec_reve (vector signed int);
46684     vector unsigned int vec_reve (vector unsigned int);
46685     vector bool short vec_reve (vector bool short);
46686     vector signed short vec_reve (vector signed short);
46687     vector unsigned short vec_reve (vector unsigned short);
46688
46689     vector signed char vec_rl (vector signed char, vector unsigned char);
46690     vector unsigned char vec_rl (vector unsigned char, vector unsigned char);
46691     vector signed short vec_rl (vector signed short, vector unsigned short);
46692     vector unsigned short vec_rl (vector unsigned short, vector unsigned short);
46693     vector signed int vec_rl (vector signed int, vector unsigned int);
46694     vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
46695
46696     vector float vec_round (vector float);
46697
46698     vector float vec_rsqrt (vector float);
46699
46700     vector float vec_rsqrte (vector float);
46701
46702     vector float vec_sel (vector float, vector float, vector bool int);
46703     vector float vec_sel (vector float, vector float, vector unsigned int);
46704     vector signed int vec_sel (vector signed int, vector signed int, vector bool int);
46705     vector signed int vec_sel (vector signed int, vector signed int, vector unsigned int);
46706     vector unsigned int vec_sel (vector unsigned int, vector unsigned int, vector bool int);
46707     vector unsigned int vec_sel (vector unsigned int, vector unsigned int,
46708                                  vector unsigned int);
46709     vector bool int vec_sel (vector bool int, vector bool int, vector bool int);
46710     vector bool int vec_sel (vector bool int, vector bool int, vector unsigned int);
46711     vector signed short vec_sel (vector signed short, vector signed short,
46712                                  vector bool short);
46713     vector signed short vec_sel (vector signed short, vector signed short,
46714                                  vector unsigned short);
46715     vector unsigned short vec_sel (vector unsigned short, vector unsigned short,
46716                                    vector bool short);
46717     vector unsigned short vec_sel (vector unsigned short, vector unsigned short,
46718                                    vector unsigned short);
46719     vector bool short vec_sel (vector bool short, vector bool short, vector bool short);
46720     vector bool short vec_sel (vector bool short, vector bool short, vector unsigned short);
46721     vector signed char vec_sel (vector signed char, vector signed char, vector bool char);
46722     vector signed char vec_sel (vector signed char, vector signed char,
46723                                 vector unsigned char);
46724     vector unsigned char vec_sel (vector unsigned char, vector unsigned char,
46725                                   vector bool char);
46726     vector unsigned char vec_sel (vector unsigned char, vector unsigned char,
46727                                   vector unsigned char);
46728     vector bool char vec_sel (vector bool char, vector bool char, vector bool char);
46729     vector bool char vec_sel (vector bool char, vector bool char, vector unsigned char);
46730
46731     vector signed char vec_sl (vector signed char, vector unsigned char);
46732     vector unsigned char vec_sl (vector unsigned char, vector unsigned char);
46733     vector signed short vec_sl (vector signed short, vector unsigned short);
46734     vector unsigned short vec_sl (vector unsigned short, vector unsigned short);
46735     vector signed int vec_sl (vector signed int, vector unsigned int);
46736     vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
46737
46738     vector float vec_sld (vector float, vector float, const int);
46739     vector signed int vec_sld (vector signed int, vector signed int, const int);
46740     vector unsigned int vec_sld (vector unsigned int, vector unsigned int, const int);
46741     vector bool int vec_sld (vector bool int, vector bool int, const int);
46742     vector signed short vec_sld (vector signed short, vector signed short, const int);
46743     vector unsigned short vec_sld (vector unsigned short, vector unsigned short, const int);
46744     vector bool short vec_sld (vector bool short, vector bool short, const int);
46745     vector pixel vec_sld (vector pixel, vector pixel, const int);
46746     vector signed char vec_sld (vector signed char, vector signed char, const int);
46747     vector unsigned char vec_sld (vector unsigned char, vector unsigned char, const int);
46748     vector bool char vec_sld (vector bool char, vector bool char, const int);
46749
46750     vector signed int vec_sll (vector signed int, vector unsigned int);
46751     vector signed int vec_sll (vector signed int, vector unsigned short);
46752     vector signed int vec_sll (vector signed int, vector unsigned char);
46753     vector unsigned int vec_sll (vector unsigned int, vector unsigned int);
46754     vector unsigned int vec_sll (vector unsigned int, vector unsigned short);
46755     vector unsigned int vec_sll (vector unsigned int, vector unsigned char);
46756     vector bool int vec_sll (vector bool int, vector unsigned int);
46757     vector bool int vec_sll (vector bool int, vector unsigned short);
46758     vector bool int vec_sll (vector bool int, vector unsigned char);
46759     vector signed short vec_sll (vector signed short, vector unsigned int);
46760     vector signed short vec_sll (vector signed short, vector unsigned short);
46761     vector signed short vec_sll (vector signed short, vector unsigned char);
46762     vector unsigned short vec_sll (vector unsigned short, vector unsigned int);
46763     vector unsigned short vec_sll (vector unsigned short, vector unsigned short);
46764     vector unsigned short vec_sll (vector unsigned short, vector unsigned char);
46765     vector bool short vec_sll (vector bool short, vector unsigned int);
46766     vector bool short vec_sll (vector bool short, vector unsigned short);
46767     vector bool short vec_sll (vector bool short, vector unsigned char);
46768     vector pixel vec_sll (vector pixel, vector unsigned int);
46769     vector pixel vec_sll (vector pixel, vector unsigned short);
46770     vector pixel vec_sll (vector pixel, vector unsigned char);
46771     vector signed char vec_sll (vector signed char, vector unsigned int);
46772     vector signed char vec_sll (vector signed char, vector unsigned short);
46773     vector signed char vec_sll (vector signed char, vector unsigned char);
46774     vector unsigned char vec_sll (vector unsigned char, vector unsigned int);
46775     vector unsigned char vec_sll (vector unsigned char, vector unsigned short);
46776     vector unsigned char vec_sll (vector unsigned char, vector unsigned char);
46777     vector bool char vec_sll (vector bool char, vector unsigned int);
46778     vector bool char vec_sll (vector bool char, vector unsigned short);
46779     vector bool char vec_sll (vector bool char, vector unsigned char);
46780
46781     vector float vec_slo (vector float, vector signed char);
46782     vector float vec_slo (vector float, vector unsigned char);
46783     vector signed int vec_slo (vector signed int, vector signed char);
46784     vector signed int vec_slo (vector signed int, vector unsigned char);
46785     vector unsigned int vec_slo (vector unsigned int, vector signed char);
46786     vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
46787     vector signed short vec_slo (vector signed short, vector signed char);
46788     vector signed short vec_slo (vector signed short, vector unsigned char);
46789     vector unsigned short vec_slo (vector unsigned short, vector signed char);
46790     vector unsigned short vec_slo (vector unsigned short, vector unsigned char);
46791     vector pixel vec_slo (vector pixel, vector signed char);
46792     vector pixel vec_slo (vector pixel, vector unsigned char);
46793     vector signed char vec_slo (vector signed char, vector signed char);
46794     vector signed char vec_slo (vector signed char, vector unsigned char);
46795     vector unsigned char vec_slo (vector unsigned char, vector signed char);
46796     vector unsigned char vec_slo (vector unsigned char, vector unsigned char);
46797
46798     vector signed char vec_splat (vector signed char, const int);
46799     vector unsigned char vec_splat (vector unsigned char, const int);
46800     vector bool char vec_splat (vector bool char, const int);
46801     vector signed short vec_splat (vector signed short, const int);
46802     vector unsigned short vec_splat (vector unsigned short, const int);
46803     vector bool short vec_splat (vector bool short, const int);
46804     vector pixel vec_splat (vector pixel, const int);
46805     vector float vec_splat (vector float, const int);
46806     vector signed int vec_splat (vector signed int, const int);
46807     vector unsigned int vec_splat (vector unsigned int, const int);
46808     vector bool int vec_splat (vector bool int, const int);
46809
46810     vector signed short vec_splat_s16 (const int);
46811
46812     vector signed int vec_splat_s32 (const int);
46813
46814     vector signed char vec_splat_s8 (const int);
46815
46816     vector unsigned short vec_splat_u16 (const int);
46817
46818     vector unsigned int vec_splat_u32 (const int);
46819
46820     vector unsigned char vec_splat_u8 (const int);
46821
46822     vector signed char vec_splats (signed char);
46823     vector unsigned char vec_splats (unsigned char);
46824     vector signed short vec_splats (signed short);
46825     vector unsigned short vec_splats (unsigned short);
46826     vector signed int vec_splats (signed int);
46827     vector unsigned int vec_splats (unsigned int);
46828     vector float vec_splats (float);
46829
46830     vector signed char vec_sr (vector signed char, vector unsigned char);
46831     vector unsigned char vec_sr (vector unsigned char, vector unsigned char);
46832     vector signed short vec_sr (vector signed short, vector unsigned short);
46833     vector unsigned short vec_sr (vector unsigned short, vector unsigned short);
46834     vector signed int vec_sr (vector signed int, vector unsigned int);
46835     vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
46836
46837     vector signed char vec_sra (vector signed char, vector unsigned char);
46838     vector unsigned char vec_sra (vector unsigned char, vector unsigned char);
46839     vector signed short vec_sra (vector signed short, vector unsigned short);
46840     vector unsigned short vec_sra (vector unsigned short, vector unsigned short);
46841     vector signed int vec_sra (vector signed int, vector unsigned int);
46842     vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
46843
46844     vector signed int vec_srl (vector signed int, vector unsigned int);
46845     vector signed int vec_srl (vector signed int, vector unsigned short);
46846     vector signed int vec_srl (vector signed int, vector unsigned char);
46847     vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
46848     vector unsigned int vec_srl (vector unsigned int, vector unsigned short);
46849     vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
46850     vector bool int vec_srl (vector bool int, vector unsigned int);
46851     vector bool int vec_srl (vector bool int, vector unsigned short);
46852     vector bool int vec_srl (vector bool int, vector unsigned char);
46853     vector signed short vec_srl (vector signed short, vector unsigned int);
46854     vector signed short vec_srl (vector signed short, vector unsigned short);
46855     vector signed short vec_srl (vector signed short, vector unsigned char);
46856     vector unsigned short vec_srl (vector unsigned short, vector unsigned int);
46857     vector unsigned short vec_srl (vector unsigned short, vector unsigned short);
46858     vector unsigned short vec_srl (vector unsigned short, vector unsigned char);
46859     vector bool short vec_srl (vector bool short, vector unsigned int);
46860     vector bool short vec_srl (vector bool short, vector unsigned short);
46861     vector bool short vec_srl (vector bool short, vector unsigned char);
46862     vector pixel vec_srl (vector pixel, vector unsigned int);
46863     vector pixel vec_srl (vector pixel, vector unsigned short);
46864     vector pixel vec_srl (vector pixel, vector unsigned char);
46865     vector signed char vec_srl (vector signed char, vector unsigned int);
46866     vector signed char vec_srl (vector signed char, vector unsigned short);
46867     vector signed char vec_srl (vector signed char, vector unsigned char);
46868     vector unsigned char vec_srl (vector unsigned char, vector unsigned int);
46869     vector unsigned char vec_srl (vector unsigned char, vector unsigned short);
46870     vector unsigned char vec_srl (vector unsigned char, vector unsigned char);
46871     vector bool char vec_srl (vector bool char, vector unsigned int);
46872     vector bool char vec_srl (vector bool char, vector unsigned short);
46873     vector bool char vec_srl (vector bool char, vector unsigned char);
46874
46875     vector float vec_sro (vector float, vector signed char);
46876     vector float vec_sro (vector float, vector unsigned char);
46877     vector signed int vec_sro (vector signed int, vector signed char);
46878     vector signed int vec_sro (vector signed int, vector unsigned char);
46879     vector unsigned int vec_sro (vector unsigned int, vector signed char);
46880     vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
46881     vector signed short vec_sro (vector signed short, vector signed char);
46882     vector signed short vec_sro (vector signed short, vector unsigned char);
46883     vector unsigned short vec_sro (vector unsigned short, vector signed char);
46884     vector unsigned short vec_sro (vector unsigned short, vector unsigned char);
46885     vector pixel vec_sro (vector pixel, vector signed char);
46886     vector pixel vec_sro (vector pixel, vector unsigned char);
46887     vector signed char vec_sro (vector signed char, vector signed char);
46888     vector signed char vec_sro (vector signed char, vector unsigned char);
46889     vector unsigned char vec_sro (vector unsigned char, vector signed char);
46890     vector unsigned char vec_sro (vector unsigned char, vector unsigned char);
46891
46892     void vec_st (vector float, int, vector float *);
46893     void vec_st (vector float, int, float *);
46894     void vec_st (vector signed int, int, vector signed int *);
46895     void vec_st (vector signed int, int, int *);
46896     void vec_st (vector unsigned int, int, vector unsigned int *);
46897     void vec_st (vector unsigned int, int, unsigned int *);
46898     void vec_st (vector bool int, int, vector bool int *);
46899     void vec_st (vector bool int, int, unsigned int *);
46900     void vec_st (vector bool int, int, int *);
46901     void vec_st (vector signed short, int, vector signed short *);
46902     void vec_st (vector signed short, int, short *);
46903     void vec_st (vector unsigned short, int, vector unsigned short *);
46904     void vec_st (vector unsigned short, int, unsigned short *);
46905     void vec_st (vector bool short, int, vector bool short *);
46906     void vec_st (vector bool short, int, unsigned short *);
46907     void vec_st (vector pixel, int, vector pixel *);
46908     void vec_st (vector bool short, int, short *);
46909     void vec_st (vector signed char, int, vector signed char *);
46910     void vec_st (vector signed char, int, signed char *);
46911     void vec_st (vector unsigned char, int, vector unsigned char *);
46912     void vec_st (vector unsigned char, int, unsigned char *);
46913     void vec_st (vector bool char, int, vector bool char *);
46914     void vec_st (vector bool char, int, unsigned char *);
46915     void vec_st (vector bool char, int, signed char *);
46916
46917     void vec_ste (vector signed char, int, signed char *);
46918     void vec_ste (vector unsigned char, int, unsigned char *);
46919     void vec_ste (vector bool char, int, signed char *);
46920     void vec_ste (vector bool char, int, unsigned char *);
46921     void vec_ste (vector signed short, int, short *);
46922     void vec_ste (vector unsigned short, int, unsigned short *);
46923     void vec_ste (vector bool short, int, short *);
46924     void vec_ste (vector bool short, int, unsigned short *);
46925     void vec_ste (vector pixel, int, short *);
46926     void vec_ste (vector pixel, int, unsigned short *);
46927     void vec_ste (vector float, int, float *);
46928     void vec_ste (vector signed int, int, int *);
46929     void vec_ste (vector unsigned int, int, unsigned int *);
46930     void vec_ste (vector bool int, int, int *);
46931     void vec_ste (vector bool int, int, unsigned int *);
46932
46933     void vec_stl (vector float, int, vector float *);
46934     void vec_stl (vector float, int, float *);
46935     void vec_stl (vector signed int, int, vector signed int *);
46936     void vec_stl (vector signed int, int, int *);
46937     void vec_stl (vector unsigned int, int, vector unsigned int *);
46938     void vec_stl (vector unsigned int, int, unsigned int *);
46939     void vec_stl (vector bool int, int, vector bool int *);
46940     void vec_stl (vector bool int, int, unsigned int *);
46941     void vec_stl (vector bool int, int, int *);
46942     void vec_stl (vector signed short, int, vector signed short *);
46943     void vec_stl (vector signed short, int, short *);
46944     void vec_stl (vector unsigned short, int, vector unsigned short *);
46945     void vec_stl (vector unsigned short, int, unsigned short *);
46946     void vec_stl (vector bool short, int, vector bool short *);
46947     void vec_stl (vector bool short, int, unsigned short *);
46948     void vec_stl (vector bool short, int, short *);
46949     void vec_stl (vector pixel, int, vector pixel *);
46950     void vec_stl (vector signed char, int, vector signed char *);
46951     void vec_stl (vector signed char, int, signed char *);
46952     void vec_stl (vector unsigned char, int, vector unsigned char *);
46953     void vec_stl (vector unsigned char, int, unsigned char *);
46954     void vec_stl (vector bool char, int, vector bool char *);
46955     void vec_stl (vector bool char, int, unsigned char *);
46956     void vec_stl (vector bool char, int, signed char *);
46957
46958     void vec_stvebx (vector signed char, int, signed char *);
46959     void vec_stvebx (vector unsigned char, int, unsigned char *);
46960     void vec_stvebx (vector bool char, int, signed char *);
46961     void vec_stvebx (vector bool char, int, unsigned char *);
46962
46963     void vec_stvehx (vector signed short, int, short *);
46964     void vec_stvehx (vector unsigned short, int, unsigned short *);
46965     void vec_stvehx (vector bool short, int, short *);
46966     void vec_stvehx (vector bool short, int, unsigned short *);
46967
46968     void vec_stvewx (vector float, int, float *);
46969     void vec_stvewx (vector signed int, int, int *);
46970     void vec_stvewx (vector unsigned int, int, unsigned int *);
46971     void vec_stvewx (vector bool int, int, int *);
46972     void vec_stvewx (vector bool int, int, unsigned int *);
46973
46974     vector signed char vec_sub (vector bool char, vector signed char);
46975     vector signed char vec_sub (vector signed char, vector bool char);
46976     vector signed char vec_sub (vector signed char, vector signed char);
46977     vector unsigned char vec_sub (vector bool char, vector unsigned char);
46978     vector unsigned char vec_sub (vector unsigned char, vector bool char);
46979     vector unsigned char vec_sub (vector unsigned char, vector unsigned char);
46980     vector signed short vec_sub (vector bool short, vector signed short);
46981     vector signed short vec_sub (vector signed short, vector bool short);
46982     vector signed short vec_sub (vector signed short, vector signed short);
46983     vector unsigned short vec_sub (vector bool short, vector unsigned short);
46984     vector unsigned short vec_sub (vector unsigned short, vector bool short);
46985     vector unsigned short vec_sub (vector unsigned short, vector unsigned short);
46986     vector signed int vec_sub (vector bool int, vector signed int);
46987     vector signed int vec_sub (vector signed int, vector bool int);
46988     vector signed int vec_sub (vector signed int, vector signed int);
46989     vector unsigned int vec_sub (vector bool int, vector unsigned int);
46990     vector unsigned int vec_sub (vector unsigned int, vector bool int);
46991     vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
46992     vector float vec_sub (vector float, vector float);
46993
46994     vector signed int vec_subc (vector signed int, vector signed int);
46995     vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
46996
46997     vector signed int vec_sube (vector signed int, vector signed int,
46998                                 vector signed int);
46999     vector unsigned int vec_sube (vector unsigned int, vector unsigned int,
47000                                   vector unsigned int);
47001
47002     vector signed int vec_subec (vector signed int, vector signed int,
47003                                  vector signed int);
47004     vector unsigned int vec_subec (vector unsigned int, vector unsigned int,
47005                                    vector unsigned int);
47006
47007     vector unsigned char vec_subs (vector bool char, vector unsigned char);
47008     vector unsigned char vec_subs (vector unsigned char, vector bool char);
47009     vector unsigned char vec_subs (vector unsigned char, vector unsigned char);
47010     vector signed char vec_subs (vector bool char, vector signed char);
47011     vector signed char vec_subs (vector signed char, vector bool char);
47012     vector signed char vec_subs (vector signed char, vector signed char);
47013     vector unsigned short vec_subs (vector bool short, vector unsigned short);
47014     vector unsigned short vec_subs (vector unsigned short, vector bool short);
47015     vector unsigned short vec_subs (vector unsigned short, vector unsigned short);
47016     vector signed short vec_subs (vector bool short, vector signed short);
47017     vector signed short vec_subs (vector signed short, vector bool short);
47018     vector signed short vec_subs (vector signed short, vector signed short);
47019     vector unsigned int vec_subs (vector bool int, vector unsigned int);
47020     vector unsigned int vec_subs (vector unsigned int, vector bool int);
47021     vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
47022     vector signed int vec_subs (vector bool int, vector signed int);
47023     vector signed int vec_subs (vector signed int, vector bool int);
47024     vector signed int vec_subs (vector signed int, vector signed int);
47025
47026     vector signed int vec_sum2s (vector signed int, vector signed int);
47027
47028     vector unsigned int vec_sum4s (vector unsigned char, vector unsigned int);
47029     vector signed int vec_sum4s (vector signed char, vector signed int);
47030     vector signed int vec_sum4s (vector signed short, vector signed int);
47031
47032     vector signed int vec_sums (vector signed int, vector signed int);
47033
47034     vector float vec_trunc (vector float);
47035
47036     vector signed short vec_unpackh (vector signed char);
47037     vector bool short vec_unpackh (vector bool char);
47038     vector signed int vec_unpackh (vector signed short);
47039     vector bool int vec_unpackh (vector bool short);
47040     vector unsigned int vec_unpackh (vector pixel);
47041
47042     vector signed short vec_unpackl (vector signed char);
47043     vector bool short vec_unpackl (vector bool char);
47044     vector unsigned int vec_unpackl (vector pixel);
47045     vector signed int vec_unpackl (vector signed short);
47046     vector bool int vec_unpackl (vector bool short);
47047
47048     vector float vec_vaddfp (vector float, vector float);
47049
47050     vector signed char vec_vaddsbs (vector bool char, vector signed char);
47051     vector signed char vec_vaddsbs (vector signed char, vector bool char);
47052     vector signed char vec_vaddsbs (vector signed char, vector signed char);
47053
47054     vector signed short vec_vaddshs (vector bool short, vector signed short);
47055     vector signed short vec_vaddshs (vector signed short, vector bool short);
47056     vector signed short vec_vaddshs (vector signed short, vector signed short);
47057
47058     vector signed int vec_vaddsws (vector bool int, vector signed int);
47059     vector signed int vec_vaddsws (vector signed int, vector bool int);
47060     vector signed int vec_vaddsws (vector signed int, vector signed int);
47061
47062     vector signed char vec_vaddubm (vector bool char, vector signed char);
47063     vector signed char vec_vaddubm (vector signed char, vector bool char);
47064     vector signed char vec_vaddubm (vector signed char, vector signed char);
47065     vector unsigned char vec_vaddubm (vector bool char, vector unsigned char);
47066     vector unsigned char vec_vaddubm (vector unsigned char, vector bool char);
47067     vector unsigned char vec_vaddubm (vector unsigned char, vector unsigned char);
47068
47069     vector unsigned char vec_vaddubs (vector bool char, vector unsigned char);
47070     vector unsigned char vec_vaddubs (vector unsigned char, vector bool char);
47071     vector unsigned char vec_vaddubs (vector unsigned char, vector unsigned char);
47072
47073     vector signed short vec_vadduhm (vector bool short, vector signed short);
47074     vector signed short vec_vadduhm (vector signed short, vector bool short);
47075     vector signed short vec_vadduhm (vector signed short, vector signed short);
47076     vector unsigned short vec_vadduhm (vector bool short, vector unsigned short);
47077     vector unsigned short vec_vadduhm (vector unsigned short, vector bool short);
47078     vector unsigned short vec_vadduhm (vector unsigned short, vector unsigned short);
47079
47080     vector unsigned short vec_vadduhs (vector bool short, vector unsigned short);
47081     vector unsigned short vec_vadduhs (vector unsigned short, vector bool short);
47082     vector unsigned short vec_vadduhs (vector unsigned short, vector unsigned short);
47083
47084     vector signed int vec_vadduwm (vector bool int, vector signed int);
47085     vector signed int vec_vadduwm (vector signed int, vector bool int);
47086     vector signed int vec_vadduwm (vector signed int, vector signed int);
47087     vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
47088     vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
47089     vector unsigned int vec_vadduwm (vector unsigned int, vector unsigned int);
47090
47091     vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
47092     vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
47093     vector unsigned int vec_vadduws (vector unsigned int, vector unsigned int);
47094
47095     vector signed char vec_vavgsb (vector signed char, vector signed char);
47096
47097     vector signed short vec_vavgsh (vector signed short, vector signed short);
47098
47099     vector signed int vec_vavgsw (vector signed int, vector signed int);
47100
47101     vector unsigned char vec_vavgub (vector unsigned char, vector unsigned char);
47102
47103     vector unsigned short vec_vavguh (vector unsigned short, vector unsigned short);
47104
47105     vector unsigned int vec_vavguw (vector unsigned int, vector unsigned int);
47106
47107     vector float vec_vcfsx (vector signed int, const int);
47108
47109     vector float vec_vcfux (vector unsigned int, const int);
47110
47111     vector bool int vec_vcmpeqfp (vector float, vector float);
47112
47113     vector bool char vec_vcmpequb (vector signed char, vector signed char);
47114     vector bool char vec_vcmpequb (vector unsigned char, vector unsigned char);
47115
47116     vector bool short vec_vcmpequh (vector signed short, vector signed short);
47117     vector bool short vec_vcmpequh (vector unsigned short, vector unsigned short);
47118
47119     vector bool int vec_vcmpequw (vector signed int, vector signed int);
47120     vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
47121
47122     vector bool int vec_vcmpgtfp (vector float, vector float);
47123
47124     vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
47125
47126     vector bool short vec_vcmpgtsh (vector signed short, vector signed short);
47127
47128     vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
47129
47130     vector bool char vec_vcmpgtub (vector unsigned char, vector unsigned char);
47131
47132     vector bool short vec_vcmpgtuh (vector unsigned short, vector unsigned short);
47133
47134     vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
47135
47136     vector float vec_vmaxfp (vector float, vector float);
47137
47138     vector signed char vec_vmaxsb (vector bool char, vector signed char);
47139     vector signed char vec_vmaxsb (vector signed char, vector bool char);
47140     vector signed char vec_vmaxsb (vector signed char, vector signed char);
47141
47142     vector signed short vec_vmaxsh (vector bool short, vector signed short);
47143     vector signed short vec_vmaxsh (vector signed short, vector bool short);
47144     vector signed short vec_vmaxsh (vector signed short, vector signed short);
47145
47146     vector signed int vec_vmaxsw (vector bool int, vector signed int);
47147     vector signed int vec_vmaxsw (vector signed int, vector bool int);
47148     vector signed int vec_vmaxsw (vector signed int, vector signed int);
47149
47150     vector unsigned char vec_vmaxub (vector bool char, vector unsigned char);
47151     vector unsigned char vec_vmaxub (vector unsigned char, vector bool char);
47152     vector unsigned char vec_vmaxub (vector unsigned char, vector unsigned char);
47153
47154     vector unsigned short vec_vmaxuh (vector bool short, vector unsigned short);
47155     vector unsigned short vec_vmaxuh (vector unsigned short, vector bool short);
47156     vector unsigned short vec_vmaxuh (vector unsigned short, vector unsigned short);
47157
47158     vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
47159     vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
47160     vector unsigned int vec_vmaxuw (vector unsigned int, vector unsigned int);
47161
47162     vector float vec_vminfp (vector float, vector float);
47163
47164     vector signed char vec_vminsb (vector bool char, vector signed char);
47165     vector signed char vec_vminsb (vector signed char, vector bool char);
47166     vector signed char vec_vminsb (vector signed char, vector signed char);
47167
47168     vector signed short vec_vminsh (vector bool short, vector signed short);
47169     vector signed short vec_vminsh (vector signed short, vector bool short);
47170     vector signed short vec_vminsh (vector signed short, vector signed short);
47171
47172     vector signed int vec_vminsw (vector bool int, vector signed int);
47173     vector signed int vec_vminsw (vector signed int, vector bool int);
47174     vector signed int vec_vminsw (vector signed int, vector signed int);
47175
47176     vector unsigned char vec_vminub (vector bool char, vector unsigned char);
47177     vector unsigned char vec_vminub (vector unsigned char, vector bool char);
47178     vector unsigned char vec_vminub (vector unsigned char, vector unsigned char);
47179
47180     vector unsigned short vec_vminuh (vector bool short, vector unsigned short);
47181     vector unsigned short vec_vminuh (vector unsigned short, vector bool short);
47182     vector unsigned short vec_vminuh (vector unsigned short, vector unsigned short);
47183
47184     vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
47185     vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
47186     vector unsigned int vec_vminuw (vector unsigned int, vector unsigned int);
47187
47188     vector bool char vec_vmrghb (vector bool char, vector bool char);
47189     vector signed char vec_vmrghb (vector signed char, vector signed char);
47190     vector unsigned char vec_vmrghb (vector unsigned char, vector unsigned char);
47191
47192     vector bool short vec_vmrghh (vector bool short, vector bool short);
47193     vector signed short vec_vmrghh (vector signed short, vector signed short);
47194     vector unsigned short vec_vmrghh (vector unsigned short, vector unsigned short);
47195     vector pixel vec_vmrghh (vector pixel, vector pixel);
47196
47197     vector float vec_vmrghw (vector float, vector float);
47198     vector bool int vec_vmrghw (vector bool int, vector bool int);
47199     vector signed int vec_vmrghw (vector signed int, vector signed int);
47200     vector unsigned int vec_vmrghw (vector unsigned int, vector unsigned int);
47201
47202     vector bool char vec_vmrglb (vector bool char, vector bool char);
47203     vector signed char vec_vmrglb (vector signed char, vector signed char);
47204     vector unsigned char vec_vmrglb (vector unsigned char, vector unsigned char);
47205
47206     vector bool short vec_vmrglh (vector bool short, vector bool short);
47207     vector signed short vec_vmrglh (vector signed short, vector signed short);
47208     vector unsigned short vec_vmrglh (vector unsigned short, vector unsigned short);
47209     vector pixel vec_vmrglh (vector pixel, vector pixel);
47210
47211     vector float vec_vmrglw (vector float, vector float);
47212     vector signed int vec_vmrglw (vector signed int, vector signed int);
47213     vector unsigned int vec_vmrglw (vector unsigned int, vector unsigned int);
47214     vector bool int vec_vmrglw (vector bool int, vector bool int);
47215
47216     vector signed int vec_vmsummbm (vector signed char, vector unsigned char,
47217                                     vector signed int);
47218
47219     vector signed int vec_vmsumshm (vector signed short, vector signed short,
47220                                     vector signed int);
47221
47222     vector signed int vec_vmsumshs (vector signed short, vector signed short,
47223                                     vector signed int);
47224
47225     vector unsigned int vec_vmsumubm (vector unsigned char, vector unsigned char,
47226                                       vector unsigned int);
47227
47228     vector unsigned int vec_vmsumuhm (vector unsigned short, vector unsigned short,
47229                                       vector unsigned int);
47230
47231     vector unsigned int vec_vmsumuhs (vector unsigned short, vector unsigned short,
47232                                       vector unsigned int);
47233
47234     vector signed short vec_vmulesb (vector signed char, vector signed char);
47235
47236     vector signed int vec_vmulesh (vector signed short, vector signed short);
47237
47238     vector unsigned short vec_vmuleub (vector unsigned char, vector unsigned char);
47239
47240     vector unsigned int vec_vmuleuh (vector unsigned short, vector unsigned short);
47241
47242     vector signed short vec_vmulosb (vector signed char, vector signed char);
47243
47244     vector signed int vec_vmulosh (vector signed short, vector signed short);
47245
47246     vector unsigned short vec_vmuloub (vector unsigned char, vector unsigned char);
47247
47248     vector unsigned int vec_vmulouh (vector unsigned short, vector unsigned short);
47249
47250     vector signed char vec_vpkshss (vector signed short, vector signed short);
47251
47252     vector unsigned char vec_vpkshus (vector signed short, vector signed short);
47253
47254     vector signed short vec_vpkswss (vector signed int, vector signed int);
47255
47256     vector unsigned short vec_vpkswus (vector signed int, vector signed int);
47257
47258     vector bool char vec_vpkuhum (vector bool short, vector bool short);
47259     vector signed char vec_vpkuhum (vector signed short, vector signed short);
47260     vector unsigned char vec_vpkuhum (vector unsigned short, vector unsigned short);
47261
47262     vector unsigned char vec_vpkuhus (vector unsigned short, vector unsigned short);
47263
47264     vector bool short vec_vpkuwum (vector bool int, vector bool int);
47265     vector signed short vec_vpkuwum (vector signed int, vector signed int);
47266     vector unsigned short vec_vpkuwum (vector unsigned int, vector unsigned int);
47267
47268     vector unsigned short vec_vpkuwus (vector unsigned int, vector unsigned int);
47269
47270     vector signed char vec_vrlb (vector signed char, vector unsigned char);
47271     vector unsigned char vec_vrlb (vector unsigned char, vector unsigned char);
47272
47273     vector signed short vec_vrlh (vector signed short, vector unsigned short);
47274     vector unsigned short vec_vrlh (vector unsigned short, vector unsigned short);
47275
47276     vector signed int vec_vrlw (vector signed int, vector unsigned int);
47277     vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
47278
47279     vector signed char vec_vslb (vector signed char, vector unsigned char);
47280     vector unsigned char vec_vslb (vector unsigned char, vector unsigned char);
47281
47282     vector signed short vec_vslh (vector signed short, vector unsigned short);
47283     vector unsigned short vec_vslh (vector unsigned short, vector unsigned short);
47284
47285     vector signed int vec_vslw (vector signed int, vector unsigned int);
47286     vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
47287
47288     vector signed char vec_vspltb (vector signed char, const int);
47289     vector unsigned char vec_vspltb (vector unsigned char, const int);
47290     vector bool char vec_vspltb (vector bool char, const int);
47291
47292     vector bool short vec_vsplth (vector bool short, const int);
47293     vector signed short vec_vsplth (vector signed short, const int);
47294     vector unsigned short vec_vsplth (vector unsigned short, const int);
47295     vector pixel vec_vsplth (vector pixel, const int);
47296
47297     vector float vec_vspltw (vector float, const int);
47298     vector signed int vec_vspltw (vector signed int, const int);
47299     vector unsigned int vec_vspltw (vector unsigned int, const int);
47300     vector bool int vec_vspltw (vector bool int, const int);
47301
47302     vector signed char vec_vsrab (vector signed char, vector unsigned char);
47303     vector unsigned char vec_vsrab (vector unsigned char, vector unsigned char);
47304
47305     vector signed short vec_vsrah (vector signed short, vector unsigned short);
47306     vector unsigned short vec_vsrah (vector unsigned short, vector unsigned short);
47307
47308     vector signed int vec_vsraw (vector signed int, vector unsigned int);
47309     vector unsigned int vec_vsraw (vector unsigned int, vector unsigned int);
47310
47311     vector signed char vec_vsrb (vector signed char, vector unsigned char);
47312     vector unsigned char vec_vsrb (vector unsigned char, vector unsigned char);
47313
47314     vector signed short vec_vsrh (vector signed short, vector unsigned short);
47315     vector unsigned short vec_vsrh (vector unsigned short, vector unsigned short);
47316
47317     vector signed int vec_vsrw (vector signed int, vector unsigned int);
47318     vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
47319
47320     vector float vec_vsubfp (vector float, vector float);
47321
47322     vector signed char vec_vsubsbs (vector bool char, vector signed char);
47323     vector signed char vec_vsubsbs (vector signed char, vector bool char);
47324     vector signed char vec_vsubsbs (vector signed char, vector signed char);
47325
47326     vector signed short vec_vsubshs (vector bool short, vector signed short);
47327     vector signed short vec_vsubshs (vector signed short, vector bool short);
47328     vector signed short vec_vsubshs (vector signed short, vector signed short);
47329
47330     vector signed int vec_vsubsws (vector bool int, vector signed int);
47331     vector signed int vec_vsubsws (vector signed int, vector bool int);
47332     vector signed int vec_vsubsws (vector signed int, vector signed int);
47333
47334     vector signed char vec_vsububm (vector bool char, vector signed char);
47335     vector signed char vec_vsububm (vector signed char, vector bool char);
47336     vector signed char vec_vsububm (vector signed char, vector signed char);
47337     vector unsigned char vec_vsububm (vector bool char, vector unsigned char);
47338     vector unsigned char vec_vsububm (vector unsigned char, vector bool char);
47339     vector unsigned char vec_vsububm (vector unsigned char, vector unsigned char);
47340
47341     vector unsigned char vec_vsububs (vector bool char, vector unsigned char);
47342     vector unsigned char vec_vsububs (vector unsigned char, vector bool char);
47343     vector unsigned char vec_vsububs (vector unsigned char, vector unsigned char);
47344
47345     vector signed short vec_vsubuhm (vector bool short, vector signed short);
47346     vector signed short vec_vsubuhm (vector signed short, vector bool short);
47347     vector signed short vec_vsubuhm (vector signed short, vector signed short);
47348     vector unsigned short vec_vsubuhm (vector bool short, vector unsigned short);
47349     vector unsigned short vec_vsubuhm (vector unsigned short, vector bool short);
47350     vector unsigned short vec_vsubuhm (vector unsigned short, vector unsigned short);
47351
47352     vector unsigned short vec_vsubuhs (vector bool short, vector unsigned short);
47353     vector unsigned short vec_vsubuhs (vector unsigned short, vector bool short);
47354     vector unsigned short vec_vsubuhs (vector unsigned short, vector unsigned short);
47355
47356     vector signed int vec_vsubuwm (vector bool int, vector signed int);
47357     vector signed int vec_vsubuwm (vector signed int, vector bool int);
47358     vector signed int vec_vsubuwm (vector signed int, vector signed int);
47359     vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
47360     vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
47361     vector unsigned int vec_vsubuwm (vector unsigned int, vector unsigned int);
47362
47363     vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
47364     vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
47365     vector unsigned int vec_vsubuws (vector unsigned int, vector unsigned int);
47366
47367     vector signed int vec_vsum4sbs (vector signed char, vector signed int);
47368
47369     vector signed int vec_vsum4shs (vector signed short, vector signed int);
47370
47371     vector unsigned int vec_vsum4ubs (vector unsigned char, vector unsigned int);
47372
47373     vector unsigned int vec_vupkhpx (vector pixel);
47374
47375     vector bool short vec_vupkhsb (vector bool char);
47376     vector signed short vec_vupkhsb (vector signed char);
47377
47378     vector bool int vec_vupkhsh (vector bool short);
47379     vector signed int vec_vupkhsh (vector signed short);
47380
47381     vector unsigned int vec_vupklpx (vector pixel);
47382
47383     vector bool short vec_vupklsb (vector bool char);
47384     vector signed short vec_vupklsb (vector signed char);
47385
47386     vector bool int vec_vupklsh (vector bool short);
47387     vector signed int vec_vupklsh (vector signed short);
47388
47389     vector float vec_xor (vector float, vector float);
47390     vector float vec_xor (vector float, vector bool int);
47391     vector float vec_xor (vector bool int, vector float);
47392     vector bool int vec_xor (vector bool int, vector bool int);
47393     vector signed int vec_xor (vector bool int, vector signed int);
47394     vector signed int vec_xor (vector signed int, vector bool int);
47395     vector signed int vec_xor (vector signed int, vector signed int);
47396     vector unsigned int vec_xor (vector bool int, vector unsigned int);
47397     vector unsigned int vec_xor (vector unsigned int, vector bool int);
47398     vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
47399     vector bool short vec_xor (vector bool short, vector bool short);
47400     vector signed short vec_xor (vector bool short, vector signed short);
47401     vector signed short vec_xor (vector signed short, vector bool short);
47402     vector signed short vec_xor (vector signed short, vector signed short);
47403     vector unsigned short vec_xor (vector bool short, vector unsigned short);
47404     vector unsigned short vec_xor (vector unsigned short, vector bool short);
47405     vector unsigned short vec_xor (vector unsigned short, vector unsigned short);
47406     vector signed char vec_xor (vector bool char, vector signed char);
47407     vector bool char vec_xor (vector bool char, vector bool char);
47408     vector signed char vec_xor (vector signed char, vector bool char);
47409     vector signed char vec_xor (vector signed char, vector signed char);
47410     vector unsigned char vec_xor (vector bool char, vector unsigned char);
47411     vector unsigned char vec_xor (vector unsigned char, vector bool char);
47412     vector unsigned char vec_xor (vector unsigned char, vector unsigned char);
47413
47414
47415File: 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
47416
474176.60.22.2 PowerPC AltiVec Built-in Functions Available on ISA 2.06
47418..................................................................
47419
47420The AltiVec built-in functions described in this section are available
47421on the PowerPC family of processors starting with ISA 2.06 or later.
47422These are normally enabled by adding '-mvsx' to the command line.
47423
47424 When '-mvsx' is used, the following additional vector types are
47425implemented.
47426
47427     vector unsigned __int128
47428     vector signed __int128
47429     vector unsigned long long int
47430     vector signed long long int
47431     vector double
47432
47433 The long long types are only implemented for 64-bit code generation.
47434
47435
47436     vector bool long long vec_and (vector bool long long int, vector bool long long);
47437
47438     vector double vec_ctf (vector unsigned long, const int);
47439     vector double vec_ctf (vector signed long, const int);
47440
47441     vector signed long vec_cts (vector double, const int);
47442
47443     vector unsigned long vec_ctu (vector double, const int);
47444
47445     void vec_dst (const unsigned long *, int, const int);
47446     void vec_dst (const long *, int, const int);
47447
47448     void vec_dststt (const unsigned long *, int, const int);
47449     void vec_dststt (const long *, int, const int);
47450
47451     void vec_dstt (const unsigned long *, int, const int);
47452     void vec_dstt (const long *, int, const int);
47453
47454     vector unsigned char vec_lvsl (int, const unsigned long *);
47455     vector unsigned char vec_lvsl (int, const long *);
47456
47457     vector unsigned char vec_lvsr (int, const unsigned long *);
47458     vector unsigned char vec_lvsr (int, const long *);
47459
47460     vector double vec_mul (vector double, vector double);
47461     vector long vec_mul (vector long, vector long);
47462     vector unsigned long vec_mul (vector unsigned long, vector unsigned long);
47463
47464     vector unsigned long long vec_mule (vector unsigned int, vector unsigned int);
47465     vector signed long long vec_mule (vector signed int, vector signed int);
47466
47467     vector unsigned long long vec_mulo (vector unsigned int, vector unsigned int);
47468     vector signed long long vec_mulo (vector signed int, vector signed int);
47469
47470     vector double vec_nabs (vector double);
47471
47472     vector bool long long vec_reve (vector bool long long);
47473     vector signed long long vec_reve (vector signed long long);
47474     vector unsigned long long vec_reve (vector unsigned long long);
47475     vector double vec_sld (vector double, vector double, const int);
47476
47477     vector bool long long int vec_sld (vector bool long long int,
47478                                        vector bool long long int, const int);
47479     vector long long int vec_sld (vector long long int, vector  long long int, const int);
47480     vector unsigned long long int vec_sld (vector unsigned long long int,
47481                                            vector unsigned long long int, const int);
47482
47483     vector long long int vec_sll (vector long long int, vector unsigned char);
47484     vector unsigned long long int vec_sll (vector unsigned long long int,
47485                                            vector unsigned char);
47486
47487     vector signed long long vec_slo (vector signed long long, vector signed char);
47488     vector signed long long vec_slo (vector signed long long, vector unsigned char);
47489     vector unsigned long long vec_slo (vector unsigned long long, vector signed char);
47490     vector unsigned long long vec_slo (vector unsigned long long, vector unsigned char);
47491
47492     vector signed long vec_splat (vector signed long, const int);
47493     vector unsigned long vec_splat (vector unsigned long, const int);
47494
47495     vector long long int vec_srl (vector long long int, vector unsigned char);
47496     vector unsigned long long int vec_srl (vector unsigned long long int,
47497                                            vector unsigned char);
47498
47499     vector long long int vec_sro (vector long long int, vector char);
47500     vector long long int vec_sro (vector long long int, vector unsigned char);
47501     vector unsigned long long int vec_sro (vector unsigned long long int, vector char);
47502     vector unsigned long long int vec_sro (vector unsigned long long int,
47503                                            vector unsigned char);
47504
47505     vector signed __int128 vec_subc (vector signed __int128, vector signed __int128);
47506     vector unsigned __int128 vec_subc (vector unsigned __int128, vector unsigned __int128);
47507
47508     vector signed __int128 vec_sube (vector signed __int128, vector signed __int128,
47509                                      vector signed __int128);
47510     vector unsigned __int128 vec_sube (vector unsigned __int128, vector unsigned __int128,
47511                                        vector unsigned __int128);
47512
47513     vector signed __int128 vec_subec (vector signed __int128, vector signed __int128,
47514                                       vector signed __int128);
47515     vector unsigned __int128 vec_subec (vector unsigned __int128, vector unsigned __int128,
47516                                         vector unsigned __int128);
47517
47518     vector double vec_unpackh (vector float);
47519
47520     vector double vec_unpackl (vector float);
47521
47522     vector double vec_doublee (vector float);
47523     vector double vec_doublee (vector signed int);
47524     vector double vec_doublee (vector unsigned int);
47525
47526     vector double vec_doubleo (vector float);
47527     vector double vec_doubleo (vector signed int);
47528     vector double vec_doubleo (vector unsigned int);
47529
47530     vector double vec_doubleh (vector float);
47531     vector double vec_doubleh (vector signed int);
47532     vector double vec_doubleh (vector unsigned int);
47533
47534     vector double vec_doublel (vector float);
47535     vector double vec_doublel (vector signed int);
47536     vector double vec_doublel (vector unsigned int);
47537
47538     vector float vec_float (vector signed int);
47539     vector float vec_float (vector unsigned int);
47540
47541     vector float vec_float2 (vector signed long long, vector signed long long);
47542     vector float vec_float2 (vector unsigned long long, vector signed long long);
47543
47544     vector float vec_floate (vector double);
47545     vector float vec_floate (vector signed long long);
47546     vector float vec_floate (vector unsigned long long);
47547
47548     vector float vec_floato (vector double);
47549     vector float vec_floato (vector signed long long);
47550     vector float vec_floato (vector unsigned long long);
47551
47552     vector signed long long vec_signed (vector double);
47553     vector signed int vec_signed (vector float);
47554
47555     vector signed int vec_signede (vector double);
47556
47557     vector signed int vec_signedo (vector double);
47558
47559     vector signed char vec_sldw (vector signed char, vector signed char, const int);
47560     vector unsigned char vec_sldw (vector unsigned char, vector unsigned char, const int);
47561     vector signed short vec_sldw (vector signed short, vector signed short, const int);
47562     vector unsigned short vec_sldw (vector unsigned short,
47563                                     vector unsigned short, const int);
47564     vector signed int vec_sldw (vector signed int, vector signed int, const int);
47565     vector unsigned int vec_sldw (vector unsigned int, vector unsigned int, const int);
47566     vector signed long long vec_sldw (vector signed long long,
47567                                       vector signed long long, const int);
47568     vector unsigned long long vec_sldw (vector unsigned long long,
47569                                         vector unsigned long long, const int);
47570
47571     vector signed long long vec_unsigned (vector double);
47572     vector signed int vec_unsigned (vector float);
47573
47574     vector signed int vec_unsignede (vector double);
47575
47576     vector signed int vec_unsignedo (vector double);
47577
47578     vector double vec_abs (vector double);
47579     vector double vec_add (vector double, vector double);
47580     vector double vec_and (vector double, vector double);
47581     vector double vec_and (vector double, vector bool long);
47582     vector double vec_and (vector bool long, vector double);
47583     vector long vec_and (vector long, vector long);
47584     vector long vec_and (vector long, vector bool long);
47585     vector long vec_and (vector bool long, vector long);
47586     vector unsigned long vec_and (vector unsigned long, vector unsigned long);
47587     vector unsigned long vec_and (vector unsigned long, vector bool long);
47588     vector unsigned long vec_and (vector bool long, vector unsigned long);
47589     vector double vec_andc (vector double, vector double);
47590     vector double vec_andc (vector double, vector bool long);
47591     vector double vec_andc (vector bool long, vector double);
47592     vector long vec_andc (vector long, vector long);
47593     vector long vec_andc (vector long, vector bool long);
47594     vector long vec_andc (vector bool long, vector long);
47595     vector unsigned long vec_andc (vector unsigned long, vector unsigned long);
47596     vector unsigned long vec_andc (vector unsigned long, vector bool long);
47597     vector unsigned long vec_andc (vector bool long, vector unsigned long);
47598     vector double vec_ceil (vector double);
47599     vector bool long vec_cmpeq (vector double, vector double);
47600     vector bool long vec_cmpge (vector double, vector double);
47601     vector bool long vec_cmpgt (vector double, vector double);
47602     vector bool long vec_cmple (vector double, vector double);
47603     vector bool long vec_cmplt (vector double, vector double);
47604     vector double vec_cpsgn (vector double, vector double);
47605     vector float vec_div (vector float, vector float);
47606     vector double vec_div (vector double, vector double);
47607     vector long vec_div (vector long, vector long);
47608     vector unsigned long vec_div (vector unsigned long, vector unsigned long);
47609     vector double vec_floor (vector double);
47610     vector signed long long vec_ld (int, const vector signed long long *);
47611     vector signed long long vec_ld (int, const signed long long *);
47612     vector unsigned long long vec_ld (int, const vector unsigned long long *);
47613     vector unsigned long long vec_ld (int, const unsigned long long *);
47614     vector __int128 vec_ld (int, const vector __int128 *);
47615     vector unsigned __int128 vec_ld (int, const vector unsigned __int128 *);
47616     vector __int128 vec_ld (int, const __int128 *);
47617     vector unsigned __int128 vec_ld (int, const unsigned __int128 *);
47618     vector double vec_ld (int, const vector double *);
47619     vector double vec_ld (int, const double *);
47620     vector double vec_ldl (int, const vector double *);
47621     vector double vec_ldl (int, const double *);
47622     vector unsigned char vec_lvsl (int, const double *);
47623     vector unsigned char vec_lvsr (int, const double *);
47624     vector double vec_madd (vector double, vector double, vector double);
47625     vector double vec_max (vector double, vector double);
47626     vector signed long vec_mergeh (vector signed long, vector signed long);
47627     vector signed long vec_mergeh (vector signed long, vector bool long);
47628     vector signed long vec_mergeh (vector bool long, vector signed long);
47629     vector unsigned long vec_mergeh (vector unsigned long, vector unsigned long);
47630     vector unsigned long vec_mergeh (vector unsigned long, vector bool long);
47631     vector unsigned long vec_mergeh (vector bool long, vector unsigned long);
47632     vector signed long vec_mergel (vector signed long, vector signed long);
47633     vector signed long vec_mergel (vector signed long, vector bool long);
47634     vector signed long vec_mergel (vector bool long, vector signed long);
47635     vector unsigned long vec_mergel (vector unsigned long, vector unsigned long);
47636     vector unsigned long vec_mergel (vector unsigned long, vector bool long);
47637     vector unsigned long vec_mergel (vector bool long, vector unsigned long);
47638     vector double vec_min (vector double, vector double);
47639     vector float vec_msub (vector float, vector float, vector float);
47640     vector double vec_msub (vector double, vector double, vector double);
47641     vector float vec_nearbyint (vector float);
47642     vector double vec_nearbyint (vector double);
47643     vector float vec_nmadd (vector float, vector float, vector float);
47644     vector double vec_nmadd (vector double, vector double, vector double);
47645     vector double vec_nmsub (vector double, vector double, vector double);
47646     vector double vec_nor (vector double, vector double);
47647     vector long vec_nor (vector long, vector long);
47648     vector long vec_nor (vector long, vector bool long);
47649     vector long vec_nor (vector bool long, vector long);
47650     vector unsigned long vec_nor (vector unsigned long, vector unsigned long);
47651     vector unsigned long vec_nor (vector unsigned long, vector bool long);
47652     vector unsigned long vec_nor (vector bool long, vector unsigned long);
47653     vector double vec_or (vector double, vector double);
47654     vector double vec_or (vector double, vector bool long);
47655     vector double vec_or (vector bool long, vector double);
47656     vector long vec_or (vector long, vector long);
47657     vector long vec_or (vector long, vector bool long);
47658     vector long vec_or (vector bool long, vector long);
47659     vector unsigned long vec_or (vector unsigned long, vector unsigned long);
47660     vector unsigned long vec_or (vector unsigned long, vector bool long);
47661     vector unsigned long vec_or (vector bool long, vector unsigned long);
47662     vector double vec_perm (vector double, vector double, vector unsigned char);
47663     vector long vec_perm (vector long, vector long, vector unsigned char);
47664     vector unsigned long vec_perm (vector unsigned long, vector unsigned long,
47665                                    vector unsigned char);
47666     vector bool char vec_permxor (vector bool char, vector bool char,
47667                                   vector bool char);
47668     vector unsigned char vec_permxor (vector signed char, vector signed char,
47669                                       vector signed char);
47670     vector unsigned char vec_permxor (vector unsigned char, vector unsigned char,
47671                                       vector unsigned char);
47672     vector double vec_rint (vector double);
47673     vector double vec_recip (vector double, vector double);
47674     vector double vec_rsqrt (vector double);
47675     vector double vec_rsqrte (vector double);
47676     vector double vec_sel (vector double, vector double, vector bool long);
47677     vector double vec_sel (vector double, vector double, vector unsigned long);
47678     vector long vec_sel (vector long, vector long, vector long);
47679     vector long vec_sel (vector long, vector long, vector unsigned long);
47680     vector long vec_sel (vector long, vector long, vector bool long);
47681     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
47682                                   vector long);
47683     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
47684                                   vector unsigned long);
47685     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
47686                                   vector bool long);
47687     vector double vec_splats (double);
47688     vector signed long vec_splats (signed long);
47689     vector unsigned long vec_splats (unsigned long);
47690     vector float vec_sqrt (vector float);
47691     vector double vec_sqrt (vector double);
47692     void vec_st (vector signed long long, int, vector signed long long *);
47693     void vec_st (vector signed long long, int, signed long long *);
47694     void vec_st (vector unsigned long long, int, vector unsigned long long *);
47695     void vec_st (vector unsigned long long, int, unsigned long long *);
47696     void vec_st (vector bool long long, int, vector bool long long *);
47697     void vec_st (vector bool long long, int, signed long long *);
47698     void vec_st (vector bool long long, int, unsigned long long *);
47699     void vec_st (vector double, int, vector double *);
47700     void vec_st (vector double, int, double *);
47701     vector double vec_sub (vector double, vector double);
47702     vector double vec_trunc (vector double);
47703     vector double vec_xl (int, vector double *);
47704     vector double vec_xl (int, double *);
47705     vector long long vec_xl (int, vector long long *);
47706     vector long long vec_xl (int, long long *);
47707     vector unsigned long long vec_xl (int, vector unsigned long long *);
47708     vector unsigned long long vec_xl (int, unsigned long long *);
47709     vector float vec_xl (int, vector float *);
47710     vector float vec_xl (int, float *);
47711     vector int vec_xl (int, vector int *);
47712     vector int vec_xl (int, int *);
47713     vector unsigned int vec_xl (int, vector unsigned int *);
47714     vector unsigned int vec_xl (int, unsigned int *);
47715     vector double vec_xor (vector double, vector double);
47716     vector double vec_xor (vector double, vector bool long);
47717     vector double vec_xor (vector bool long, vector double);
47718     vector long vec_xor (vector long, vector long);
47719     vector long vec_xor (vector long, vector bool long);
47720     vector long vec_xor (vector bool long, vector long);
47721     vector unsigned long vec_xor (vector unsigned long, vector unsigned long);
47722     vector unsigned long vec_xor (vector unsigned long, vector bool long);
47723     vector unsigned long vec_xor (vector bool long, vector unsigned long);
47724     void vec_xst (vector double, int, vector double *);
47725     void vec_xst (vector double, int, double *);
47726     void vec_xst (vector long long, int, vector long long *);
47727     void vec_xst (vector long long, int, long long *);
47728     void vec_xst (vector unsigned long long, int, vector unsigned long long *);
47729     void vec_xst (vector unsigned long long, int, unsigned long long *);
47730     void vec_xst (vector float, int, vector float *);
47731     void vec_xst (vector float, int, float *);
47732     void vec_xst (vector int, int, vector int *);
47733     void vec_xst (vector int, int, int *);
47734     void vec_xst (vector unsigned int, int, vector unsigned int *);
47735     void vec_xst (vector unsigned int, int, unsigned int *);
47736     int vec_all_eq (vector double, vector double);
47737     int vec_all_ge (vector double, vector double);
47738     int vec_all_gt (vector double, vector double);
47739     int vec_all_le (vector double, vector double);
47740     int vec_all_lt (vector double, vector double);
47741     int vec_all_nan (vector double);
47742     int vec_all_ne (vector double, vector double);
47743     int vec_all_nge (vector double, vector double);
47744     int vec_all_ngt (vector double, vector double);
47745     int vec_all_nle (vector double, vector double);
47746     int vec_all_nlt (vector double, vector double);
47747     int vec_all_numeric (vector double);
47748     int vec_any_eq (vector double, vector double);
47749     int vec_any_ge (vector double, vector double);
47750     int vec_any_gt (vector double, vector double);
47751     int vec_any_le (vector double, vector double);
47752     int vec_any_lt (vector double, vector double);
47753     int vec_any_nan (vector double);
47754     int vec_any_ne (vector double, vector double);
47755     int vec_any_nge (vector double, vector double);
47756     int vec_any_ngt (vector double, vector double);
47757     int vec_any_nle (vector double, vector double);
47758     int vec_any_nlt (vector double, vector double);
47759     int vec_any_numeric (vector double);
47760
47761     vector double vec_vsx_ld (int, const vector double *);
47762     vector double vec_vsx_ld (int, const double *);
47763     vector float vec_vsx_ld (int, const vector float *);
47764     vector float vec_vsx_ld (int, const float *);
47765     vector bool int vec_vsx_ld (int, const vector bool int *);
47766     vector signed int vec_vsx_ld (int, const vector signed int *);
47767     vector signed int vec_vsx_ld (int, const int *);
47768     vector signed int vec_vsx_ld (int, const long *);
47769     vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
47770     vector unsigned int vec_vsx_ld (int, const unsigned int *);
47771     vector unsigned int vec_vsx_ld (int, const unsigned long *);
47772     vector bool short vec_vsx_ld (int, const vector bool short *);
47773     vector pixel vec_vsx_ld (int, const vector pixel *);
47774     vector signed short vec_vsx_ld (int, const vector signed short *);
47775     vector signed short vec_vsx_ld (int, const short *);
47776     vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
47777     vector unsigned short vec_vsx_ld (int, const unsigned short *);
47778     vector bool char vec_vsx_ld (int, const vector bool char *);
47779     vector signed char vec_vsx_ld (int, const vector signed char *);
47780     vector signed char vec_vsx_ld (int, const signed char *);
47781     vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
47782     vector unsigned char vec_vsx_ld (int, const unsigned char *);
47783
47784     void vec_vsx_st (vector double, int, vector double *);
47785     void vec_vsx_st (vector double, int, double *);
47786     void vec_vsx_st (vector float, int, vector float *);
47787     void vec_vsx_st (vector float, int, float *);
47788     void vec_vsx_st (vector signed int, int, vector signed int *);
47789     void vec_vsx_st (vector signed int, int, int *);
47790     void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
47791     void vec_vsx_st (vector unsigned int, int, unsigned int *);
47792     void vec_vsx_st (vector bool int, int, vector bool int *);
47793     void vec_vsx_st (vector bool int, int, unsigned int *);
47794     void vec_vsx_st (vector bool int, int, int *);
47795     void vec_vsx_st (vector signed short, int, vector signed short *);
47796     void vec_vsx_st (vector signed short, int, short *);
47797     void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
47798     void vec_vsx_st (vector unsigned short, int, unsigned short *);
47799     void vec_vsx_st (vector bool short, int, vector bool short *);
47800     void vec_vsx_st (vector bool short, int, unsigned short *);
47801     void vec_vsx_st (vector pixel, int, vector pixel *);
47802     void vec_vsx_st (vector pixel, int, unsigned short *);
47803     void vec_vsx_st (vector pixel, int, short *);
47804     void vec_vsx_st (vector bool short, int, short *);
47805     void vec_vsx_st (vector signed char, int, vector signed char *);
47806     void vec_vsx_st (vector signed char, int, signed char *);
47807     void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
47808     void vec_vsx_st (vector unsigned char, int, unsigned char *);
47809     void vec_vsx_st (vector bool char, int, vector bool char *);
47810     void vec_vsx_st (vector bool char, int, unsigned char *);
47811     void vec_vsx_st (vector bool char, int, signed char *);
47812
47813     vector double vec_xxpermdi (vector double, vector double, const int);
47814     vector float vec_xxpermdi (vector float, vector float, const int);
47815     vector long long vec_xxpermdi (vector long long, vector long long, const int);
47816     vector unsigned long long vec_xxpermdi (vector unsigned long long,
47817                                             vector unsigned long long, const int);
47818     vector int vec_xxpermdi (vector int, vector int, const int);
47819     vector unsigned int vec_xxpermdi (vector unsigned int,
47820                                       vector unsigned int, const int);
47821     vector short vec_xxpermdi (vector short, vector short, const int);
47822     vector unsigned short vec_xxpermdi (vector unsigned short,
47823                                         vector unsigned short, const int);
47824     vector signed char vec_xxpermdi (vector signed char, vector signed char,
47825                                      const int);
47826     vector unsigned char vec_xxpermdi (vector unsigned char,
47827                                        vector unsigned char, const int);
47828
47829     vector double vec_xxsldi (vector double, vector double, int);
47830     vector float vec_xxsldi (vector float, vector float, int);
47831     vector long long vec_xxsldi (vector long long, vector long long, int);
47832     vector unsigned long long vec_xxsldi (vector unsigned long long,
47833                                           vector unsigned long long, int);
47834     vector int vec_xxsldi (vector int, vector int, int);
47835     vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int);
47836     vector short vec_xxsldi (vector short, vector short, int);
47837     vector unsigned short vec_xxsldi (vector unsigned short,
47838                                       vector unsigned short, int);
47839     vector signed char vec_xxsldi (vector signed char, vector signed char, int);
47840     vector unsigned char vec_xxsldi (vector unsigned char,
47841                                      vector unsigned char, int);
47842
47843 Note that the 'vec_ld' and 'vec_st' built-in functions always generate
47844the AltiVec 'LVX' and 'STVX' instructions even if the VSX instruction
47845set is available.  The 'vec_vsx_ld' and 'vec_vsx_st' built-in functions
47846always generate the VSX 'LXVD2X', 'LXVW4X', 'STXVD2X', and 'STXVW4X'
47847instructions.
47848
47849
47850File: 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
47851
478526.60.22.3 PowerPC AltiVec Built-in Functions Available on ISA 2.07
47853..................................................................
47854
47855If the ISA 2.07 additions to the vector/scalar (power8-vector)
47856instruction set are available, the following additional functions are
47857available for both 32-bit and 64-bit targets.  For 64-bit targets, you
47858can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG
47859instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of
47860VECTOR UNSIGNED LONG LONG.
47861
47862     vector signed char vec_neg (vector signed char);
47863     vector signed short vec_neg (vector signed short);
47864     vector signed int vec_neg (vector signed int);
47865     vector signed long long vec_neg (vector signed long long);
47866     vector float  char vec_neg (vector float);
47867     vector double vec_neg (vector double);
47868
47869     vector signed int vec_signed2 (vector double, vector double);
47870
47871     vector signed int vec_unsigned2 (vector double, vector double);
47872
47873     vector long long vec_abs (vector long long);
47874
47875     vector long long vec_add (vector long long, vector long long);
47876     vector unsigned long long vec_add (vector unsigned long long,
47877                                        vector unsigned long long);
47878
47879     int vec_all_eq (vector long long, vector long long);
47880     int vec_all_eq (vector unsigned long long, vector unsigned long long);
47881     int vec_all_ge (vector long long, vector long long);
47882     int vec_all_ge (vector unsigned long long, vector unsigned long long);
47883     int vec_all_gt (vector long long, vector long long);
47884     int vec_all_gt (vector unsigned long long, vector unsigned long long);
47885     int vec_all_le (vector long long, vector long long);
47886     int vec_all_le (vector unsigned long long, vector unsigned long long);
47887     int vec_all_lt (vector long long, vector long long);
47888     int vec_all_lt (vector unsigned long long, vector unsigned long long);
47889     int vec_all_ne (vector long long, vector long long);
47890     int vec_all_ne (vector unsigned long long, vector unsigned long long);
47891
47892     int vec_any_eq (vector long long, vector long long);
47893     int vec_any_eq (vector unsigned long long, vector unsigned long long);
47894     int vec_any_ge (vector long long, vector long long);
47895     int vec_any_ge (vector unsigned long long, vector unsigned long long);
47896     int vec_any_gt (vector long long, vector long long);
47897     int vec_any_gt (vector unsigned long long, vector unsigned long long);
47898     int vec_any_le (vector long long, vector long long);
47899     int vec_any_le (vector unsigned long long, vector unsigned long long);
47900     int vec_any_lt (vector long long, vector long long);
47901     int vec_any_lt (vector unsigned long long, vector unsigned long long);
47902     int vec_any_ne (vector long long, vector long long);
47903     int vec_any_ne (vector unsigned long long, vector unsigned long long);
47904
47905     vector bool long long vec_cmpeq (vector bool long long, vector bool long long);
47906
47907     vector long long vec_eqv (vector long long, vector long long);
47908     vector long long vec_eqv (vector bool long long, vector long long);
47909     vector long long vec_eqv (vector long long, vector bool long long);
47910     vector unsigned long long vec_eqv (vector unsigned long long, vector unsigned long long);
47911     vector unsigned long long vec_eqv (vector bool long long, vector unsigned long long);
47912     vector unsigned long long vec_eqv (vector unsigned long long,
47913                                        vector bool long long);
47914     vector int vec_eqv (vector int, vector int);
47915     vector int vec_eqv (vector bool int, vector int);
47916     vector int vec_eqv (vector int, vector bool int);
47917     vector unsigned int vec_eqv (vector unsigned int, vector unsigned int);
47918     vector unsigned int vec_eqv (vector bool unsigned int, vector unsigned int);
47919     vector unsigned int vec_eqv (vector unsigned int, vector bool unsigned int);
47920     vector short vec_eqv (vector short, vector short);
47921     vector short vec_eqv (vector bool short, vector short);
47922     vector short vec_eqv (vector short, vector bool short);
47923     vector unsigned short vec_eqv (vector unsigned short, vector unsigned short);
47924     vector unsigned short vec_eqv (vector bool unsigned short, vector unsigned short);
47925     vector unsigned short vec_eqv (vector unsigned short, vector bool unsigned short);
47926     vector signed char vec_eqv (vector signed char, vector signed char);
47927     vector signed char vec_eqv (vector bool signed char, vector signed char);
47928     vector signed char vec_eqv (vector signed char, vector bool signed char);
47929     vector unsigned char vec_eqv (vector unsigned char, vector unsigned char);
47930     vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char);
47931     vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char);
47932
47933     vector long long vec_max (vector long long, vector long long);
47934     vector unsigned long long vec_max (vector unsigned long long,
47935                                        vector unsigned long long);
47936
47937     vector signed int vec_mergee (vector signed int, vector signed int);
47938     vector unsigned int vec_mergee (vector unsigned int, vector unsigned int);
47939     vector bool int vec_mergee (vector bool int, vector bool int);
47940
47941     vector signed int vec_mergeo (vector signed int, vector signed int);
47942     vector unsigned int vec_mergeo (vector unsigned int, vector unsigned int);
47943     vector bool int vec_mergeo (vector bool int, vector bool int);
47944
47945     vector long long vec_min (vector long long, vector long long);
47946     vector unsigned long long vec_min (vector unsigned long long,
47947                                        vector unsigned long long);
47948
47949     vector signed long long vec_nabs (vector signed long long);
47950
47951     vector long long vec_nand (vector long long, vector long long);
47952     vector long long vec_nand (vector bool long long, vector long long);
47953     vector long long vec_nand (vector long long, vector bool long long);
47954     vector unsigned long long vec_nand (vector unsigned long long,
47955                                         vector unsigned long long);
47956     vector unsigned long long vec_nand (vector bool long long, vector unsigned long long);
47957     vector unsigned long long vec_nand (vector unsigned long long, vector bool long long);
47958     vector int vec_nand (vector int, vector int);
47959     vector int vec_nand (vector bool int, vector int);
47960     vector int vec_nand (vector int, vector bool int);
47961     vector unsigned int vec_nand (vector unsigned int, vector unsigned int);
47962     vector unsigned int vec_nand (vector bool unsigned int, vector unsigned int);
47963     vector unsigned int vec_nand (vector unsigned int, vector bool unsigned int);
47964     vector short vec_nand (vector short, vector short);
47965     vector short vec_nand (vector bool short, vector short);
47966     vector short vec_nand (vector short, vector bool short);
47967     vector unsigned short vec_nand (vector unsigned short, vector unsigned short);
47968     vector unsigned short vec_nand (vector bool unsigned short, vector unsigned short);
47969     vector unsigned short vec_nand (vector unsigned short, vector bool unsigned short);
47970     vector signed char vec_nand (vector signed char, vector signed char);
47971     vector signed char vec_nand (vector bool signed char, vector signed char);
47972     vector signed char vec_nand (vector signed char, vector bool signed char);
47973     vector unsigned char vec_nand (vector unsigned char, vector unsigned char);
47974     vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char);
47975     vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char);
47976
47977     vector long long vec_orc (vector long long, vector long long);
47978     vector long long vec_orc (vector bool long long, vector long long);
47979     vector long long vec_orc (vector long long, vector bool long long);
47980     vector unsigned long long vec_orc (vector unsigned long long,
47981                                        vector unsigned long long);
47982     vector unsigned long long vec_orc (vector bool long long, vector unsigned long long);
47983     vector unsigned long long vec_orc (vector unsigned long long, vector bool long long);
47984     vector int vec_orc (vector int, vector int);
47985     vector int vec_orc (vector bool int, vector int);
47986     vector int vec_orc (vector int, vector bool int);
47987     vector unsigned int vec_orc (vector unsigned int, vector unsigned int);
47988     vector unsigned int vec_orc (vector bool unsigned int, vector unsigned int);
47989     vector unsigned int vec_orc (vector unsigned int, vector bool unsigned int);
47990     vector short vec_orc (vector short, vector short);
47991     vector short vec_orc (vector bool short, vector short);
47992     vector short vec_orc (vector short, vector bool short);
47993     vector unsigned short vec_orc (vector unsigned short, vector unsigned short);
47994     vector unsigned short vec_orc (vector bool unsigned short, vector unsigned short);
47995     vector unsigned short vec_orc (vector unsigned short, vector bool unsigned short);
47996     vector signed char vec_orc (vector signed char, vector signed char);
47997     vector signed char vec_orc (vector bool signed char, vector signed char);
47998     vector signed char vec_orc (vector signed char, vector bool signed char);
47999     vector unsigned char vec_orc (vector unsigned char, vector unsigned char);
48000     vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char);
48001     vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char);
48002
48003     vector int vec_pack (vector long long, vector long long);
48004     vector unsigned int vec_pack (vector unsigned long long, vector unsigned long long);
48005     vector bool int vec_pack (vector bool long long, vector bool long long);
48006     vector float vec_pack (vector double, vector double);
48007
48008     vector int vec_packs (vector long long, vector long long);
48009     vector unsigned int vec_packs (vector unsigned long long, vector unsigned long long);
48010
48011     vector unsigned char vec_packsu (vector signed short, vector signed short)
48012     vector unsigned char vec_packsu (vector unsigned short, vector unsigned short)
48013     vector unsigned short int vec_packsu (vector signed int, vector signed int);
48014     vector unsigned short int vec_packsu (vector unsigned int, vector unsigned int);
48015     vector unsigned int vec_packsu (vector long long, vector long long);
48016     vector unsigned int vec_packsu (vector unsigned long long, vector unsigned long long);
48017     vector unsigned int vec_packsu (vector signed long long, vector signed long long);
48018
48019     vector unsigned char vec_popcnt (vector signed char);
48020     vector unsigned char vec_popcnt (vector unsigned char);
48021     vector unsigned short vec_popcnt (vector signed short);
48022     vector unsigned short vec_popcnt (vector unsigned short);
48023     vector unsigned int vec_popcnt (vector signed int);
48024     vector unsigned int vec_popcnt (vector unsigned int);
48025     vector unsigned long long vec_popcnt (vector signed long long);
48026     vector unsigned long long vec_popcnt (vector unsigned long long);
48027
48028     vector long long vec_rl (vector long long, vector unsigned long long);
48029     vector long long vec_rl (vector unsigned long long, vector unsigned long long);
48030
48031     vector long long vec_sl (vector long long, vector unsigned long long);
48032     vector long long vec_sl (vector unsigned long long, vector unsigned long long);
48033
48034     vector long long vec_sr (vector long long, vector unsigned long long);
48035     vector unsigned long long char vec_sr (vector unsigned long long,
48036                                            vector unsigned long long);
48037
48038     vector long long vec_sra (vector long long, vector unsigned long long);
48039     vector unsigned long long vec_sra (vector unsigned long long,
48040                                        vector unsigned long long);
48041
48042     vector long long vec_sub (vector long long, vector long long);
48043     vector unsigned long long vec_sub (vector unsigned long long,
48044                                        vector unsigned long long);
48045
48046     vector long long vec_unpackh (vector int);
48047     vector unsigned long long vec_unpackh (vector unsigned int);
48048
48049     vector long long vec_unpackl (vector int);
48050     vector unsigned long long vec_unpackl (vector unsigned int);
48051
48052     vector long long vec_vaddudm (vector long long, vector long long);
48053     vector long long vec_vaddudm (vector bool long long, vector long long);
48054     vector long long vec_vaddudm (vector long long, vector bool long long);
48055     vector unsigned long long vec_vaddudm (vector unsigned long long,
48056                                            vector unsigned long long);
48057     vector unsigned long long vec_vaddudm (vector bool unsigned long long,
48058                                            vector unsigned long long);
48059     vector unsigned long long vec_vaddudm (vector unsigned long long,
48060                                            vector bool unsigned long long);
48061
48062     vector long long vec_vbpermq (vector signed char, vector signed char);
48063     vector long long vec_vbpermq (vector unsigned char, vector unsigned char);
48064
48065     vector unsigned char vec_bperm (vector unsigned char, vector unsigned char);
48066     vector unsigned char vec_bperm (vector unsigned long long, vector unsigned char);
48067     vector unsigned long long vec_bperm (vector unsigned __int128, vector unsigned char);
48068
48069     vector long long vec_cntlz (vector long long);
48070     vector unsigned long long vec_cntlz (vector unsigned long long);
48071     vector int vec_cntlz (vector int);
48072     vector unsigned int vec_cntlz (vector int);
48073     vector short vec_cntlz (vector short);
48074     vector unsigned short vec_cntlz (vector unsigned short);
48075     vector signed char vec_cntlz (vector signed char);
48076     vector unsigned char vec_cntlz (vector unsigned char);
48077
48078     vector long long vec_vclz (vector long long);
48079     vector unsigned long long vec_vclz (vector unsigned long long);
48080     vector int vec_vclz (vector int);
48081     vector unsigned int vec_vclz (vector int);
48082     vector short vec_vclz (vector short);
48083     vector unsigned short vec_vclz (vector unsigned short);
48084     vector signed char vec_vclz (vector signed char);
48085     vector unsigned char vec_vclz (vector unsigned char);
48086
48087     vector signed char vec_vclzb (vector signed char);
48088     vector unsigned char vec_vclzb (vector unsigned char);
48089
48090     vector long long vec_vclzd (vector long long);
48091     vector unsigned long long vec_vclzd (vector unsigned long long);
48092
48093     vector short vec_vclzh (vector short);
48094     vector unsigned short vec_vclzh (vector unsigned short);
48095
48096     vector int vec_vclzw (vector int);
48097     vector unsigned int vec_vclzw (vector int);
48098
48099     vector signed char vec_vgbbd (vector signed char);
48100     vector unsigned char vec_vgbbd (vector unsigned char);
48101
48102     vector long long vec_vmaxsd (vector long long, vector long long);
48103
48104     vector unsigned long long vec_vmaxud (vector unsigned long long,
48105                                           unsigned vector long long);
48106
48107     vector long long vec_vminsd (vector long long, vector long long);
48108
48109     vector unsigned long long vec_vminud (vector long long, vector long long);
48110
48111     vector int vec_vpksdss (vector long long, vector long long);
48112     vector unsigned int vec_vpksdss (vector long long, vector long long);
48113
48114     vector unsigned int vec_vpkudus (vector unsigned long long,
48115                                      vector unsigned long long);
48116
48117     vector int vec_vpkudum (vector long long, vector long long);
48118     vector unsigned int vec_vpkudum (vector unsigned long long,
48119                                      vector unsigned long long);
48120     vector bool int vec_vpkudum (vector bool long long, vector bool long long);
48121
48122     vector long long vec_vpopcnt (vector long long);
48123     vector unsigned long long vec_vpopcnt (vector unsigned long long);
48124     vector int vec_vpopcnt (vector int);
48125     vector unsigned int vec_vpopcnt (vector int);
48126     vector short vec_vpopcnt (vector short);
48127     vector unsigned short vec_vpopcnt (vector unsigned short);
48128     vector signed char vec_vpopcnt (vector signed char);
48129     vector unsigned char vec_vpopcnt (vector unsigned char);
48130
48131     vector signed char vec_vpopcntb (vector signed char);
48132     vector unsigned char vec_vpopcntb (vector unsigned char);
48133
48134     vector long long vec_vpopcntd (vector long long);
48135     vector unsigned long long vec_vpopcntd (vector unsigned long long);
48136
48137     vector short vec_vpopcnth (vector short);
48138     vector unsigned short vec_vpopcnth (vector unsigned short);
48139
48140     vector int vec_vpopcntw (vector int);
48141     vector unsigned int vec_vpopcntw (vector int);
48142
48143     vector long long vec_vrld (vector long long, vector unsigned long long);
48144     vector unsigned long long vec_vrld (vector unsigned long long,
48145                                         vector unsigned long long);
48146
48147     vector long long vec_vsld (vector long long, vector unsigned long long);
48148     vector long long vec_vsld (vector unsigned long long,
48149                                vector unsigned long long);
48150
48151     vector long long vec_vsrad (vector long long, vector unsigned long long);
48152     vector unsigned long long vec_vsrad (vector unsigned long long,
48153                                          vector unsigned long long);
48154
48155     vector long long vec_vsrd (vector long long, vector unsigned long long);
48156     vector unsigned long long char vec_vsrd (vector unsigned long long,
48157                                              vector unsigned long long);
48158
48159     vector long long vec_vsubudm (vector long long, vector long long);
48160     vector long long vec_vsubudm (vector bool long long, vector long long);
48161     vector long long vec_vsubudm (vector long long, vector bool long long);
48162     vector unsigned long long vec_vsubudm (vector unsigned long long,
48163                                            vector unsigned long long);
48164     vector unsigned long long vec_vsubudm (vector bool long long,
48165                                            vector unsigned long long);
48166     vector unsigned long long vec_vsubudm (vector unsigned long long,
48167                                            vector bool long long);
48168
48169     vector long long vec_vupkhsw (vector int);
48170     vector unsigned long long vec_vupkhsw (vector unsigned int);
48171
48172     vector long long vec_vupklsw (vector int);
48173     vector unsigned long long vec_vupklsw (vector int);
48174
48175 If the ISA 2.07 additions to the vector/scalar (power8-vector)
48176instruction set are available, the following additional functions are
48177available for 64-bit targets.  New vector types (VECTOR __INT128 and
48178VECTOR __UINT128) are available to hold the __INT128 and __UINT128 types
48179to use these builtins.
48180
48181 The normal vector extract, and set operations work on VECTOR __INT128
48182and VECTOR __UINT128 types, but the index value must be 0.
48183
48184     vector __int128 vec_vaddcuq (vector __int128, vector __int128);
48185     vector __uint128 vec_vaddcuq (vector __uint128, vector __uint128);
48186
48187     vector __int128 vec_vadduqm (vector __int128, vector __int128);
48188     vector __uint128 vec_vadduqm (vector __uint128, vector __uint128);
48189
48190     vector __int128 vec_vaddecuq (vector __int128, vector __int128,
48191                                     vector __int128);
48192     vector __uint128 vec_vaddecuq (vector __uint128, vector __uint128,
48193                                      vector __uint128);
48194
48195     vector __int128 vec_vaddeuqm (vector __int128, vector __int128,
48196                                     vector __int128);
48197     vector __uint128 vec_vaddeuqm (vector __uint128, vector __uint128,
48198                                      vector __uint128);
48199
48200     vector __int128 vec_vsubecuq (vector __int128, vector __int128,
48201                                     vector __int128);
48202     vector __uint128 vec_vsubecuq (vector __uint128, vector __uint128,
48203                                      vector __uint128);
48204
48205     vector __int128 vec_vsubeuqm (vector __int128, vector __int128,
48206                                     vector __int128);
48207     vector __uint128 vec_vsubeuqm (vector __uint128, vector __uint128,
48208                                      vector __uint128);
48209
48210     vector __int128 vec_vsubcuq (vector __int128, vector __int128);
48211     vector __uint128 vec_vsubcuq (vector __uint128, vector __uint128);
48212
48213     __int128 vec_vsubuqm (__int128, __int128);
48214     __uint128 vec_vsubuqm (__uint128, __uint128);
48215
48216     vector __int128 __builtin_bcdadd (vector __int128, vector __int128, const int);
48217     int __builtin_bcdadd_lt (vector __int128, vector __int128, const int);
48218     int __builtin_bcdadd_eq (vector __int128, vector __int128, const int);
48219     int __builtin_bcdadd_gt (vector __int128, vector __int128, const int);
48220     int __builtin_bcdadd_ov (vector __int128, vector __int128, const int);
48221     vector __int128 __builtin_bcdsub (vector __int128, vector __int128, const int);
48222     int __builtin_bcdsub_lt (vector __int128, vector __int128, const int);
48223     int __builtin_bcdsub_eq (vector __int128, vector __int128, const int);
48224     int __builtin_bcdsub_gt (vector __int128, vector __int128, const int);
48225     int __builtin_bcdsub_ov (vector __int128, vector __int128, const int);
48226
48227
48228File: gcc.info,  Node: PowerPC AltiVec Built-in Functions Available on ISA 3.0,  Prev: PowerPC AltiVec Built-in Functions Available on ISA 2.07,  Up: PowerPC AltiVec/VSX Built-in Functions
48229
482306.60.22.4 PowerPC AltiVec Built-in Functions Available on ISA 3.0
48231.................................................................
48232
48233The following additional built-in functions are also available for the
48234PowerPC family of processors, starting with ISA 3.0 ('-mcpu=power9') or
48235later:
48236     unsigned int scalar_extract_exp (double source);
48237     unsigned long long int scalar_extract_exp (__ieee128 source);
48238
48239     unsigned long long int scalar_extract_sig (double source);
48240     unsigned __int128 scalar_extract_sig (__ieee128 source);
48241
48242     double scalar_insert_exp (unsigned long long int significand,
48243                               unsigned long long int exponent);
48244     double scalar_insert_exp (double significand, unsigned long long int exponent);
48245
48246     ieee_128 scalar_insert_exp (unsigned __int128 significand,
48247                                 unsigned long long int exponent);
48248     ieee_128 scalar_insert_exp (ieee_128 significand, unsigned long long int exponent);
48249
48250     int scalar_cmp_exp_gt (double arg1, double arg2);
48251     int scalar_cmp_exp_lt (double arg1, double arg2);
48252     int scalar_cmp_exp_eq (double arg1, double arg2);
48253     int scalar_cmp_exp_unordered (double arg1, double arg2);
48254
48255     bool scalar_test_data_class (float source, const int condition);
48256     bool scalar_test_data_class (double source, const int condition);
48257     bool scalar_test_data_class (__ieee128 source, const int condition);
48258
48259     bool scalar_test_neg (float source);
48260     bool scalar_test_neg (double source);
48261     bool scalar_test_neg (__ieee128 source);
48262
48263     vector _uint128_t vec_msum (vector unsigned long long,
48264     			    vector unsigned long long,
48265     			    vector _uint128_t);
48266     vector _int128_t vec_msum (vector signed long long,
48267     			   vector signed long long,
48268     			   vector _int128_t);
48269
48270 The 'scalar_extract_exp' and 'scalar_extract_sig' functions require a
4827164-bit environment supporting ISA 3.0 or later.  The
48272'scalar_extract_exp' and 'scalar_extract_sig' built-in functions return
48273the significand and the biased exponent value respectively of their
48274'source' arguments.  When supplied with a 64-bit 'source' argument, the
48275result returned by 'scalar_extract_sig' has the '0x0010000000000000' bit
48276set if the function's 'source' argument is in normalized form.
48277Otherwise, this bit is set to 0.  When supplied with a 128-bit 'source'
48278argument, the '0x00010000000000000000000000000000' bit of the result is
48279treated similarly.  Note that the sign of the significand is not
48280represented in the result returned from the 'scalar_extract_sig'
48281function.  Use the 'scalar_test_neg' function to test the sign of its
48282'double' argument.  The 'vec_msum' functions perform a vector
48283multiply-sum, returning the result of arg1*arg2+arg3.  ISA 3.0 adds
48284support for vec_msum returning a vector int128 result.
48285
48286 The 'scalar_insert_exp' functions require a 64-bit environment
48287supporting ISA 3.0 or later.  When supplied with a 64-bit first
48288argument, the 'scalar_insert_exp' built-in function returns a
48289double-precision floating point value that is constructed by assembling
48290the values of its 'significand' and 'exponent' arguments.  The sign of
48291the result is copied from the most significant bit of the 'significand'
48292argument.  The significand and exponent components of the result are
48293composed of the least significant 11 bits of the 'exponent' argument and
48294the least significant 52 bits of the 'significand' argument
48295respectively.
48296
48297 When supplied with a 128-bit first argument, the 'scalar_insert_exp'
48298built-in function returns a quad-precision ieee floating point value.
48299The sign bit of the result is copied from the most significant bit of
48300the 'significand' argument.  The significand and exponent components of
48301the result are composed of the least significant 15 bits of the
48302'exponent' argument and the least significant 112 bits of the
48303'significand' argument respectively.
48304
48305 The 'scalar_cmp_exp_gt', 'scalar_cmp_exp_lt', 'scalar_cmp_exp_eq', and
48306'scalar_cmp_exp_unordered' built-in functions return a non-zero value if
48307'arg1' is greater than, less than, equal to, or not comparable to 'arg2'
48308respectively.  The arguments are not comparable if one or the other
48309equals NaN (not a number).
48310
48311 The 'scalar_test_data_class' built-in function returns 1 if any of the
48312condition tests enabled by the value of the 'condition' variable are
48313true, and 0 otherwise.  The 'condition' argument must be a compile-time
48314constant integer with value not exceeding 127.  The 'condition' argument
48315is encoded as a bitmask with each bit enabling the testing of a
48316different condition, as characterized by the following:
48317     0x40    Test for NaN
48318     0x20    Test for +Infinity
48319     0x10    Test for -Infinity
48320     0x08    Test for +Zero
48321     0x04    Test for -Zero
48322     0x02    Test for +Denormal
48323     0x01    Test for -Denormal
48324
48325 The 'scalar_test_neg' built-in function returns 1 if its 'source'
48326argument holds a negative value, 0 otherwise.
48327
48328 The following built-in functions are also available for the PowerPC
48329family of processors, starting with ISA 3.0 or later ('-mcpu=power9').
48330These string functions are described separately in order to group the
48331descriptions closer to the function prototypes:
48332     int vec_all_nez (vector signed char, vector signed char);
48333     int vec_all_nez (vector unsigned char, vector unsigned char);
48334     int vec_all_nez (vector signed short, vector signed short);
48335     int vec_all_nez (vector unsigned short, vector unsigned short);
48336     int vec_all_nez (vector signed int, vector signed int);
48337     int vec_all_nez (vector unsigned int, vector unsigned int);
48338
48339     int vec_any_eqz (vector signed char, vector signed char);
48340     int vec_any_eqz (vector unsigned char, vector unsigned char);
48341     int vec_any_eqz (vector signed short, vector signed short);
48342     int vec_any_eqz (vector unsigned short, vector unsigned short);
48343     int vec_any_eqz (vector signed int, vector signed int);
48344     int vec_any_eqz (vector unsigned int, vector unsigned int);
48345
48346     vector bool char vec_cmpnez (vector signed char arg1, vector signed char arg2);
48347     vector bool char vec_cmpnez (vector unsigned char arg1, vector unsigned char arg2);
48348     vector bool short vec_cmpnez (vector signed short arg1, vector signed short arg2);
48349     vector bool short vec_cmpnez (vector unsigned short arg1, vector unsigned short arg2);
48350     vector bool int vec_cmpnez (vector signed int arg1, vector signed int arg2);
48351     vector bool int vec_cmpnez (vector unsigned int, vector unsigned int);
48352
48353     vector signed char vec_cnttz (vector signed char);
48354     vector unsigned char vec_cnttz (vector unsigned char);
48355     vector signed short vec_cnttz (vector signed short);
48356     vector unsigned short vec_cnttz (vector unsigned short);
48357     vector signed int vec_cnttz (vector signed int);
48358     vector unsigned int vec_cnttz (vector unsigned int);
48359     vector signed long long vec_cnttz (vector signed long long);
48360     vector unsigned long long vec_cnttz (vector unsigned long long);
48361
48362     signed int vec_cntlz_lsbb (vector signed char);
48363     signed int vec_cntlz_lsbb (vector unsigned char);
48364
48365     signed int vec_cnttz_lsbb (vector signed char);
48366     signed int vec_cnttz_lsbb (vector unsigned char);
48367
48368     unsigned int vec_first_match_index (vector signed char, vector signed char);
48369     unsigned int vec_first_match_index (vector unsigned char, vector unsigned char);
48370     unsigned int vec_first_match_index (vector signed int, vector signed int);
48371     unsigned int vec_first_match_index (vector unsigned int, vector unsigned int);
48372     unsigned int vec_first_match_index (vector signed short, vector signed short);
48373     unsigned int vec_first_match_index (vector unsigned short, vector unsigned short);
48374     unsigned int vec_first_match_or_eos_index (vector signed char, vector signed char);
48375     unsigned int vec_first_match_or_eos_index (vector unsigned char, vector unsigned char);
48376     unsigned int vec_first_match_or_eos_index (vector signed int, vector signed int);
48377     unsigned int vec_first_match_or_eos_index (vector unsigned int, vector unsigned int);
48378     unsigned int vec_first_match_or_eos_index (vector signed short, vector signed short);
48379     unsigned int vec_first_match_or_eos_index (vector unsigned short,
48380                                                vector unsigned short);
48381     unsigned int vec_first_mismatch_index (vector signed char, vector signed char);
48382     unsigned int vec_first_mismatch_index (vector unsigned char, vector unsigned char);
48383     unsigned int vec_first_mismatch_index (vector signed int, vector signed int);
48384     unsigned int vec_first_mismatch_index (vector unsigned int, vector unsigned int);
48385     unsigned int vec_first_mismatch_index (vector signed short, vector signed short);
48386     unsigned int vec_first_mismatch_index (vector unsigned short, vector unsigned short);
48387     unsigned int vec_first_mismatch_or_eos_index (vector signed char, vector signed char);
48388     unsigned int vec_first_mismatch_or_eos_index (vector unsigned char,
48389                                                   vector unsigned char);
48390     unsigned int vec_first_mismatch_or_eos_index (vector signed int, vector signed int);
48391     unsigned int vec_first_mismatch_or_eos_index (vector unsigned int, vector unsigned int);
48392     unsigned int vec_first_mismatch_or_eos_index (vector signed short, vector signed short);
48393     unsigned int vec_first_mismatch_or_eos_index (vector unsigned short,
48394                                                   vector unsigned short);
48395
48396     vector unsigned short vec_pack_to_short_fp32 (vector float, vector float);
48397
48398     vector signed char vec_xl_be (signed long long, signed char *);
48399     vector unsigned char vec_xl_be (signed long long, unsigned char *);
48400     vector signed int vec_xl_be (signed long long, signed int *);
48401     vector unsigned int vec_xl_be (signed long long, unsigned int *);
48402     vector signed __int128 vec_xl_be (signed long long, signed __int128 *);
48403     vector unsigned __int128 vec_xl_be (signed long long, unsigned __int128 *);
48404     vector signed long long vec_xl_be (signed long long, signed long long *);
48405     vector unsigned long long vec_xl_be (signed long long, unsigned long long *);
48406     vector signed short vec_xl_be (signed long long, signed short *);
48407     vector unsigned short vec_xl_be (signed long long, unsigned short *);
48408     vector double vec_xl_be (signed long long, double *);
48409     vector float vec_xl_be (signed long long, float *);
48410
48411     vector signed char vec_xl_len (signed char *addr, size_t len);
48412     vector unsigned char vec_xl_len (unsigned char *addr, size_t len);
48413     vector signed int vec_xl_len (signed int *addr, size_t len);
48414     vector unsigned int vec_xl_len (unsigned int *addr, size_t len);
48415     vector signed __int128 vec_xl_len (signed __int128 *addr, size_t len);
48416     vector unsigned __int128 vec_xl_len (unsigned __int128 *addr, size_t len);
48417     vector signed long long vec_xl_len (signed long long *addr, size_t len);
48418     vector unsigned long long vec_xl_len (unsigned long long *addr, size_t len);
48419     vector signed short vec_xl_len (signed short *addr, size_t len);
48420     vector unsigned short vec_xl_len (unsigned short *addr, size_t len);
48421     vector double vec_xl_len (double *addr, size_t len);
48422     vector float vec_xl_len (float *addr, size_t len);
48423
48424     vector unsigned char vec_xl_len_r (unsigned char *addr, size_t len);
48425
48426     void vec_xst_len (vector signed char data, signed char *addr, size_t len);
48427     void vec_xst_len (vector unsigned char data, unsigned char *addr, size_t len);
48428     void vec_xst_len (vector signed int data, signed int *addr, size_t len);
48429     void vec_xst_len (vector unsigned int data, unsigned int *addr, size_t len);
48430     void vec_xst_len (vector unsigned __int128 data, unsigned __int128 *addr, size_t len);
48431     void vec_xst_len (vector signed long long data, signed long long *addr, size_t len);
48432     void vec_xst_len (vector unsigned long long data, unsigned long long *addr, size_t len);
48433     void vec_xst_len (vector signed short data, signed short *addr, size_t len);
48434     void vec_xst_len (vector unsigned short data, unsigned short *addr, size_t len);
48435     void vec_xst_len (vector signed __int128 data, signed __int128 *addr, size_t len);
48436     void vec_xst_len (vector double data, double *addr, size_t len);
48437     void vec_xst_len (vector float data, float *addr, size_t len);
48438
48439     void vec_xst_len_r (vector unsigned char data, unsigned char *addr, size_t len);
48440
48441     signed char vec_xlx (unsigned int index, vector signed char data);
48442     unsigned char vec_xlx (unsigned int index, vector unsigned char data);
48443     signed short vec_xlx (unsigned int index, vector signed short data);
48444     unsigned short vec_xlx (unsigned int index, vector unsigned short data);
48445     signed int vec_xlx (unsigned int index, vector signed int data);
48446     unsigned int vec_xlx (unsigned int index, vector unsigned int data);
48447     float vec_xlx (unsigned int index, vector float data);
48448
48449     signed char vec_xrx (unsigned int index, vector signed char data);
48450     unsigned char vec_xrx (unsigned int index, vector unsigned char data);
48451     signed short vec_xrx (unsigned int index, vector signed short data);
48452     unsigned short vec_xrx (unsigned int index, vector unsigned short data);
48453     signed int vec_xrx (unsigned int index, vector signed int data);
48454     unsigned int vec_xrx (unsigned int index, vector unsigned int data);
48455     float vec_xrx (unsigned int index, vector float data);
48456
48457 The 'vec_all_nez', 'vec_any_eqz', and 'vec_cmpnez' perform pairwise
48458comparisons between the elements at the same positions within their two
48459vector arguments.  The 'vec_all_nez' function returns a non-zero value
48460if and only if all pairwise comparisons are not equal and no element of
48461either vector argument contains a zero.  The 'vec_any_eqz' function
48462returns a non-zero value if and only if at least one pairwise comparison
48463is equal or if at least one element of either vector argument contains a
48464zero.  The 'vec_cmpnez' function returns a vector of the same type as
48465its two arguments, within which each element consists of all ones to
48466denote that either the corresponding elements of the incoming arguments
48467are not equal or that at least one of the corresponding elements
48468contains zero.  Otherwise, the element of the returned vector contains
48469all zeros.
48470
48471 The 'vec_cntlz_lsbb' function returns the count of the number of
48472consecutive leading byte elements (starting from position 0 within the
48473supplied vector argument) for which the least-significant bit equals
48474zero.  The 'vec_cnttz_lsbb' function returns the count of the number of
48475consecutive trailing byte elements (starting from position 15 and
48476counting backwards within the supplied vector argument) for which the
48477least-significant bit equals zero.
48478
48479 The 'vec_xl_len' and 'vec_xst_len' functions require a 64-bit
48480environment supporting ISA 3.0 or later.  The 'vec_xl_len' function
48481loads a variable length vector from memory.  The 'vec_xst_len' function
48482stores a variable length vector to memory.  With both the 'vec_xl_len'
48483and 'vec_xst_len' functions, the 'addr' argument represents the memory
48484address to or from which data will be transferred, and the 'len'
48485argument represents the number of bytes to be transferred, as computed
48486by the C expression 'min((len & 0xff), 16)'.  If this expression's value
48487is not a multiple of the vector element's size, the behavior of this
48488function is undefined.  In the case that the underlying computer is
48489configured to run in big-endian mode, the data transfer moves bytes 0 to
48490'(len - 1)' of the corresponding vector.  In little-endian mode, the
48491data transfer moves bytes '(16 - len)' to '15' of the corresponding
48492vector.  For the load function, any bytes of the result vector that are
48493not loaded from memory are set to zero.  The value of the 'addr'
48494argument need not be aligned on a multiple of the vector's element size.
48495
48496 The 'vec_xlx' and 'vec_xrx' functions extract the single element
48497selected by the 'index' argument from the vector represented by the
48498'data' argument.  The 'index' argument always specifies a byte offset,
48499regardless of the size of the vector element.  With 'vec_xlx', 'index'
48500is the offset of the first byte of the element to be extracted.  With
48501'vec_xrx', 'index' represents the last byte of the element to be
48502extracted, measured from the right end of the vector.  In other words,
48503the last byte of the element to be extracted is found at position '(15 -
48504index)'.  There is no requirement that 'index' be a multiple of the
48505vector element size.  However, if the size of the vector element added
48506to 'index' is greater than 15, the content of the returned value is
48507undefined.
48508
48509 If the ISA 3.0 instruction set additions ('-mcpu=power9') are
48510available:
48511
48512     vector unsigned long long vec_bperm (vector unsigned long long, vector unsigned char);
48513
48514     vector bool char vec_cmpne (vector bool char, vector bool char);
48515     vector bool char vec_cmpne (vector signed char, vector signed char);
48516     vector bool char vec_cmpne (vector unsigned char, vector unsigned char);
48517     vector bool int vec_cmpne (vector bool int, vector bool int);
48518     vector bool int vec_cmpne (vector signed int, vector signed int);
48519     vector bool int vec_cmpne (vector unsigned int, vector unsigned int);
48520     vector bool long long vec_cmpne (vector bool long long, vector bool long long);
48521     vector bool long long vec_cmpne (vector signed long long, vector signed long long);
48522     vector bool long long vec_cmpne (vector unsigned long long, vector unsigned long long);
48523     vector bool short vec_cmpne (vector bool short, vector bool short);
48524     vector bool short vec_cmpne (vector signed short, vector signed short);
48525     vector bool short vec_cmpne (vector unsigned short, vector unsigned short);
48526     vector bool long long vec_cmpne (vector double, vector double);
48527     vector bool int vec_cmpne (vector float, vector float);
48528
48529     vector float vec_extract_fp32_from_shorth (vector unsigned short);
48530     vector float vec_extract_fp32_from_shortl (vector unsigned short);
48531
48532     vector long long vec_vctz (vector long long);
48533     vector unsigned long long vec_vctz (vector unsigned long long);
48534     vector int vec_vctz (vector int);
48535     vector unsigned int vec_vctz (vector int);
48536     vector short vec_vctz (vector short);
48537     vector unsigned short vec_vctz (vector unsigned short);
48538     vector signed char vec_vctz (vector signed char);
48539     vector unsigned char vec_vctz (vector unsigned char);
48540
48541     vector signed char vec_vctzb (vector signed char);
48542     vector unsigned char vec_vctzb (vector unsigned char);
48543
48544     vector long long vec_vctzd (vector long long);
48545     vector unsigned long long vec_vctzd (vector unsigned long long);
48546
48547     vector short vec_vctzh (vector short);
48548     vector unsigned short vec_vctzh (vector unsigned short);
48549
48550     vector int vec_vctzw (vector int);
48551     vector unsigned int vec_vctzw (vector int);
48552
48553     vector unsigned long long vec_extract4b (vector unsigned char, const int);
48554
48555     vector unsigned char vec_insert4b (vector signed int, vector unsigned char,
48556                                        const int);
48557     vector unsigned char vec_insert4b (vector unsigned int, vector unsigned char,
48558                                        const int);
48559
48560     vector unsigned int vec_parity_lsbb (vector signed int);
48561     vector unsigned int vec_parity_lsbb (vector unsigned int);
48562     vector unsigned __int128 vec_parity_lsbb (vector signed __int128);
48563     vector unsigned __int128 vec_parity_lsbb (vector unsigned __int128);
48564     vector unsigned long long vec_parity_lsbb (vector signed long long);
48565     vector unsigned long long vec_parity_lsbb (vector unsigned long long);
48566
48567     vector int vec_vprtyb (vector int);
48568     vector unsigned int vec_vprtyb (vector unsigned int);
48569     vector long long vec_vprtyb (vector long long);
48570     vector unsigned long long vec_vprtyb (vector unsigned long long);
48571
48572     vector int vec_vprtybw (vector int);
48573     vector unsigned int vec_vprtybw (vector unsigned int);
48574
48575     vector long long vec_vprtybd (vector long long);
48576     vector unsigned long long vec_vprtybd (vector unsigned long long);
48577
48578 On 64-bit targets, if the ISA 3.0 additions ('-mcpu=power9') are
48579available:
48580
48581     vector long vec_vprtyb (vector long);
48582     vector unsigned long vec_vprtyb (vector unsigned long);
48583     vector __int128 vec_vprtyb (vector __int128);
48584     vector __uint128 vec_vprtyb (vector __uint128);
48585
48586     vector long vec_vprtybd (vector long);
48587     vector unsigned long vec_vprtybd (vector unsigned long);
48588
48589     vector __int128 vec_vprtybq (vector __int128);
48590     vector __uint128 vec_vprtybd (vector __uint128);
48591
48592 The following built-in vector functions are available for the PowerPC
48593family of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
48594     __vector unsigned char
48595     vec_slv (__vector unsigned char src, __vector unsigned char shift_distance);
48596     __vector unsigned char
48597     vec_srv (__vector unsigned char src, __vector unsigned char shift_distance);
48598
48599 The 'vec_slv' and 'vec_srv' functions operate on all of the bytes of
48600their 'src' and 'shift_distance' arguments in parallel.  The behavior of
48601the 'vec_slv' is as if there existed a temporary array of 17 unsigned
48602characters 'slv_array' within which elements 0 through 15 are the same
48603as the entries in the 'src' array and element 16 equals 0.  The result
48604returned from the 'vec_slv' function is a '__vector' of 16 unsigned
48605characters within which element 'i' is computed using the C expression
48606'0xff & (*((unsigned short *)(slv_array + i)) << (0x07 &
48607shift_distance[i]))', with this resulting value coerced to the 'unsigned
48608char' type.  The behavior of the 'vec_srv' is as if there existed a
48609temporary array of 17 unsigned characters 'srv_array' within which
48610element 0 equals zero and elements 1 through 16 equal the elements 0
48611through 15 of the 'src' array.  The result returned from the 'vec_srv'
48612function is a '__vector' of 16 unsigned characters within which element
48613'i' is computed using the C expression '0xff & (*((unsigned short
48614*)(srv_array + i)) >> (0x07 & shift_distance[i]))', with this resulting
48615value coerced to the 'unsigned char' type.
48616
48617 The following built-in functions are available for the PowerPC family
48618of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
48619     __vector unsigned char
48620     vec_absd (__vector unsigned char arg1, __vector unsigned char arg2);
48621     __vector unsigned short
48622     vec_absd (__vector unsigned short arg1, __vector unsigned short arg2);
48623     __vector unsigned int
48624     vec_absd (__vector unsigned int arg1, __vector unsigned int arg2);
48625
48626     __vector unsigned char
48627     vec_absdb (__vector unsigned char arg1, __vector unsigned char arg2);
48628     __vector unsigned short
48629     vec_absdh (__vector unsigned short arg1, __vector unsigned short arg2);
48630     __vector unsigned int
48631     vec_absdw (__vector unsigned int arg1, __vector unsigned int arg2);
48632
48633 The 'vec_absd', 'vec_absdb', 'vec_absdh', and 'vec_absdw' built-in
48634functions each computes the absolute differences of the pairs of vector
48635elements supplied in its two vector arguments, placing the absolute
48636differences into the corresponding elements of the vector result.
48637
48638 The following built-in functions are available for the PowerPC family
48639of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
48640     __vector unsigned int vec_extract_exp (__vector float source);
48641     __vector unsigned long long int vec_extract_exp (__vector double source);
48642
48643     __vector unsigned int vec_extract_sig (__vector float source);
48644     __vector unsigned long long int vec_extract_sig (__vector double source);
48645
48646     __vector float vec_insert_exp (__vector unsigned int significands,
48647                                    __vector unsigned int exponents);
48648     __vector float vec_insert_exp (__vector unsigned float significands,
48649                                    __vector unsigned int exponents);
48650     __vector double vec_insert_exp (__vector unsigned long long int significands,
48651                                     __vector unsigned long long int exponents);
48652     __vector double vec_insert_exp (__vector unsigned double significands,
48653                                     __vector unsigned long long int exponents);
48654
48655     __vector bool int vec_test_data_class (__vector float source, const int condition);
48656     __vector bool long long int vec_test_data_class (__vector double source,
48657                                                      const int condition);
48658
48659 The 'vec_extract_sig' and 'vec_extract_exp' built-in functions return
48660vectors representing the significands and biased exponent values of
48661their 'source' arguments respectively.  Within the result vector
48662returned by 'vec_extract_sig', the '0x800000' bit of each vector element
48663returned when the function's 'source' argument is of type 'float' is set
48664to 1 if the corresponding floating point value is in normalized form.
48665Otherwise, this bit is set to 0.  When the 'source' argument is of type
48666'double', the '0x10000000000000' bit within each of the result vector's
48667elements is set according to the same rules.  Note that the sign of the
48668significand is not represented in the result returned from the
48669'vec_extract_sig' function.  To extract the sign bits, use the
48670'vec_cpsgn' function, which returns a new vector within which all of the
48671sign bits of its second argument vector are overwritten with the sign
48672bits copied from the coresponding elements of its first argument vector,
48673and all other (non-sign) bits of the second argument vector are copied
48674unchanged into the result vector.
48675
48676 The 'vec_insert_exp' built-in functions return a vector of single- or
48677double-precision floating point values constructed by assembling the
48678values of their 'significands' and 'exponents' arguments into the
48679corresponding elements of the returned vector.  The sign of each element
48680of the result is copied from the most significant bit of the
48681corresponding entry within the 'significands' argument.  Note that the
48682relevant bits of the 'significands' argument are the same, for both
48683integer and floating point types.  The significand and exponent
48684components of each element of the result are composed of the least
48685significant bits of the corresponding 'significands' element and the
48686least significant bits of the corresponding 'exponents' element.
48687
48688 The 'vec_test_data_class' built-in function returns a vector
48689representing the results of testing the 'source' vector for the
48690condition selected by the 'condition' argument.  The 'condition'
48691argument must be a compile-time constant integer with value not
48692exceeding 127.  The 'condition' argument is encoded as a bitmask with
48693each bit enabling the testing of a different condition, as characterized
48694by the following:
48695     0x40    Test for NaN
48696     0x20    Test for +Infinity
48697     0x10    Test for -Infinity
48698     0x08    Test for +Zero
48699     0x04    Test for -Zero
48700     0x02    Test for +Denormal
48701     0x01    Test for -Denormal
48702
48703 If any of the enabled test conditions is true, the corresponding entry
48704in the result vector is -1.  Otherwise (all of the enabled test
48705conditions are false), the corresponding entry of the result vector is
487060.
48707
48708 The following built-in functions are available for the PowerPC family
48709of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
48710     vector unsigned int vec_rlmi (vector unsigned int, vector unsigned int,
48711                                   vector unsigned int);
48712     vector unsigned long long vec_rlmi (vector unsigned long long,
48713                                         vector unsigned long long,
48714                                         vector unsigned long long);
48715     vector unsigned int vec_rlnm (vector unsigned int, vector unsigned int,
48716                                   vector unsigned int);
48717     vector unsigned long long vec_rlnm (vector unsigned long long,
48718                                         vector unsigned long long,
48719                                         vector unsigned long long);
48720     vector unsigned int vec_vrlnm (vector unsigned int, vector unsigned int);
48721     vector unsigned long long vec_vrlnm (vector unsigned long long,
48722                                          vector unsigned long long);
48723
48724 The result of 'vec_rlmi' is obtained by rotating each element of the
48725first argument vector left and inserting it under mask into the second
48726argument vector.  The third argument vector contains the mask beginning
48727in bits 11:15, the mask end in bits 19:23, and the shift count in bits
4872827:31, of each element.
48729
48730 The result of 'vec_rlnm' is obtained by rotating each element of the
48731first argument vector left and ANDing it with a mask specified by the
48732second and third argument vectors.  The second argument vector contains
48733the shift count for each element in the low-order byte.  The third
48734argument vector contains the mask end for each element in the low-order
48735byte, with the mask begin in the next higher byte.
48736
48737 The result of 'vec_vrlnm' is obtained by rotating each element of the
48738first argument vector left and ANDing it with a mask.  The second
48739argument vector contains the mask beginning in bits 11:15, the mask end
48740in bits 19:23, and the shift count in bits 27:31, of each element.
48741
48742 If the ISA 3.0 instruction set additions ('-mcpu=power9') are
48743available:
48744     vector signed bool char vec_revb (vector signed char);
48745     vector signed char vec_revb (vector signed char);
48746     vector unsigned char vec_revb (vector unsigned char);
48747     vector bool short vec_revb (vector bool short);
48748     vector short vec_revb (vector short);
48749     vector unsigned short vec_revb (vector unsigned short);
48750     vector bool int vec_revb (vector bool int);
48751     vector int vec_revb (vector int);
48752     vector unsigned int vec_revb (vector unsigned int);
48753     vector float vec_revb (vector float);
48754     vector bool long long vec_revb (vector bool long long);
48755     vector long long vec_revb (vector long long);
48756     vector unsigned long long vec_revb (vector unsigned long long);
48757     vector double vec_revb (vector double);
48758
48759 On 64-bit targets, if the ISA 3.0 additions ('-mcpu=power9') are
48760available:
48761     vector long vec_revb (vector long);
48762     vector unsigned long vec_revb (vector unsigned long);
48763     vector __int128 vec_revb (vector __int128);
48764     vector __uint128 vec_revb (vector __uint128);
48765
48766 The 'vec_revb' built-in function reverses the bytes on an element by
48767element basis.  A vector of 'vector unsigned char' or 'vector signed
48768char' reverses the bytes in the whole word.
48769
48770 If the cryptographic instructions are enabled ('-mcrypto' or
48771'-mcpu=power8'), the following builtins are enabled.
48772
48773     vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long);
48774
48775     vector unsigned char vec_sbox_be (vector unsigned char);
48776
48777     vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long,
48778                                                         vector unsigned long long);
48779
48780     vector unsigned char vec_cipher_be (vector unsigned char, vector unsigned char);
48781
48782     vector unsigned long long __builtin_crypto_vcipherlast
48783                                          (vector unsigned long long,
48784                                           vector unsigned long long);
48785
48786     vector unsigned char vec_cipherlast_be (vector unsigned char,
48787                                             vector unsigned char);
48788
48789     vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
48790                                                          vector unsigned long long);
48791
48792     vector unsigned char vec_ncipher_be (vector unsigned char,
48793                                          vector unsigned char);
48794
48795     vector unsigned long long __builtin_crypto_vncipherlast (vector unsigned long long,
48796                                                              vector unsigned long long);
48797
48798     vector unsigned char vec_ncipherlast_be (vector unsigned char,
48799                                              vector unsigned char);
48800
48801     vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
48802                                                     vector unsigned char,
48803                                                     vector unsigned char);
48804
48805     vector unsigned short __builtin_crypto_vpermxor (vector unsigned short,
48806                                                      vector unsigned short,
48807                                                      vector unsigned short);
48808
48809     vector unsigned int __builtin_crypto_vpermxor (vector unsigned int,
48810                                                    vector unsigned int,
48811                                                    vector unsigned int);
48812
48813     vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long,
48814                                                          vector unsigned long long,
48815                                                          vector unsigned long long);
48816
48817     vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char,
48818                                                    vector unsigned char);
48819
48820     vector unsigned short __builtin_crypto_vpmsumh (vector unsigned short,
48821                                                     vector unsigned short);
48822
48823     vector unsigned int __builtin_crypto_vpmsumw (vector unsigned int,
48824                                                   vector unsigned int);
48825
48826     vector unsigned long long __builtin_crypto_vpmsumd (vector unsigned long long,
48827                                                         vector unsigned long long);
48828
48829     vector unsigned long long __builtin_crypto_vshasigmad (vector unsigned long long,
48830                                                            int, int);
48831
48832     vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int, int, int);
48833
48834 The second argument to __BUILTIN_CRYPTO_VSHASIGMAD and
48835__BUILTIN_CRYPTO_VSHASIGMAW must be a constant integer that is 0 or 1.
48836The third argument to these built-in functions must be a constant
48837integer in the range of 0 to 15.
48838
48839 If the ISA 3.0 instruction set additions are enabled ('-mcpu=power9'),
48840the following additional functions are available for both 32-bit and
4884164-bit targets.
48842     vector short vec_xl (int, vector short *);
48843     vector short vec_xl (int, short *);
48844     vector unsigned short vec_xl (int, vector unsigned short *);
48845     vector unsigned short vec_xl (int, unsigned short *);
48846     vector char vec_xl (int, vector char *);
48847     vector char vec_xl (int, char *);
48848     vector unsigned char vec_xl (int, vector unsigned char *);
48849     vector unsigned char vec_xl (int, unsigned char *);
48850
48851     void vec_xst (vector short, int, vector short *);
48852     void vec_xst (vector short, int, short *);
48853     void vec_xst (vector unsigned short, int, vector unsigned short *);
48854     void vec_xst (vector unsigned short, int, unsigned short *);
48855     void vec_xst (vector char, int, vector char *);
48856     void vec_xst (vector char, int, char *);
48857     void vec_xst (vector unsigned char, int, vector unsigned char *);
48858     void vec_xst (vector unsigned char, int, unsigned char *);
48859
48860
48861File: 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
48862
488636.60.23 PowerPC Hardware Transactional Memory Built-in Functions
48864----------------------------------------------------------------
48865
48866GCC provides two interfaces for accessing the Hardware Transactional
48867Memory (HTM) instructions available on some of the PowerPC family of
48868processors (eg, POWER8).  The two interfaces come in a low level
48869interface, consisting of built-in functions specific to PowerPC and a
48870higher level interface consisting of inline functions that are common
48871between PowerPC and S/390.
48872
488736.60.23.1 PowerPC HTM Low Level Built-in Functions
48874..................................................
48875
48876The following low level built-in functions are available with '-mhtm' or
48877'-mcpu=CPU' where CPU is 'power8' or later.  They all generate the
48878machine instruction that is part of the name.
48879
48880 The HTM builtins (with the exception of '__builtin_tbegin') return the
48881full 4-bit condition register value set by their associated hardware
48882instruction.  The header file 'htmintrin.h' defines some macros that can
48883be used to decipher the return value.  The '__builtin_tbegin' builtin
48884returns a simple 'true' or 'false' value depending on whether a
48885transaction was successfully started or not.  The arguments of the
48886builtins match exactly the type and order of the associated hardware
48887instruction's operands, except for the '__builtin_tcheck' builtin, which
48888does not take any input arguments.  Refer to the ISA manual for a
48889description of each instruction's operands.
48890
48891     unsigned int __builtin_tbegin (unsigned int)
48892     unsigned int __builtin_tend (unsigned int)
48893
48894     unsigned int __builtin_tabort (unsigned int)
48895     unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int)
48896     unsigned int __builtin_tabortdci (unsigned int, unsigned int, int)
48897     unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
48898     unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)
48899
48900     unsigned int __builtin_tcheck (void)
48901     unsigned int __builtin_treclaim (unsigned int)
48902     unsigned int __builtin_trechkpt (void)
48903     unsigned int __builtin_tsr (unsigned int)
48904
48905 In addition to the above HTM built-ins, we have added built-ins for
48906some common extended mnemonics of the HTM instructions:
48907
48908     unsigned int __builtin_tendall (void)
48909     unsigned int __builtin_tresume (void)
48910     unsigned int __builtin_tsuspend (void)
48911
48912 Note that the semantics of the above HTM builtins are required to mimic
48913the locking semantics used for critical sections.  Builtins that are
48914used to create a new transaction or restart a suspended transaction must
48915have lock acquisition like semantics while those builtins that end or
48916suspend a transaction must have lock release like semantics.
48917Specifically, this must mimic lock semantics as specified by C++11, for
48918example: Lock acquisition is as-if an execution of
48919__atomic_exchange_n(&globallock,1,__ATOMIC_ACQUIRE) that returns 0, and
48920lock release is as-if an execution of
48921__atomic_store(&globallock,0,__ATOMIC_RELEASE), with globallock being an
48922implicit implementation-defined lock used for all transactions.  The HTM
48923instructions associated with with the builtins inherently provide the
48924correct acquisition and release hardware barriers required.  However,
48925the compiler must also be prohibited from moving loads and stores across
48926the builtins in a way that would violate their semantics.  This has been
48927accomplished by adding memory barriers to the associated HTM
48928instructions (which is a conservative approach to provide acquire and
48929release semantics).  Earlier versions of the compiler did not treat the
48930HTM instructions as memory barriers.  A '__TM_FENCE__' macro has been
48931added, which can be used to determine whether the current compiler
48932treats HTM instructions as memory barriers or not.  This allows the user
48933to explicitly add memory barriers to their code when using an older
48934version of the compiler.
48935
48936 The following set of built-in functions are available to gain access to
48937the HTM specific special purpose registers.
48938
48939     unsigned long __builtin_get_texasr (void)
48940     unsigned long __builtin_get_texasru (void)
48941     unsigned long __builtin_get_tfhar (void)
48942     unsigned long __builtin_get_tfiar (void)
48943
48944     void __builtin_set_texasr (unsigned long);
48945     void __builtin_set_texasru (unsigned long);
48946     void __builtin_set_tfhar (unsigned long);
48947     void __builtin_set_tfiar (unsigned long);
48948
48949 Example usage of these low level built-in functions may look like:
48950
48951     #include <htmintrin.h>
48952
48953     int num_retries = 10;
48954
48955     while (1)
48956       {
48957         if (__builtin_tbegin (0))
48958           {
48959             /* Transaction State Initiated.  */
48960             if (is_locked (lock))
48961               __builtin_tabort (0);
48962             ... transaction code...
48963             __builtin_tend (0);
48964             break;
48965           }
48966         else
48967           {
48968             /* Transaction State Failed.  Use locks if the transaction
48969                failure is "persistent" or we've tried too many times.  */
48970             if (num_retries-- <= 0
48971                 || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
48972               {
48973                 acquire_lock (lock);
48974                 ... non transactional fallback path...
48975                 release_lock (lock);
48976                 break;
48977               }
48978           }
48979       }
48980
48981 One final built-in function has been added that returns the value of
48982the 2-bit Transaction State field of the Machine Status Register (MSR)
48983as stored in 'CR0'.
48984
48985     unsigned long __builtin_ttest (void)
48986
48987 This built-in can be used to determine the current transaction state
48988using the following code example:
48989
48990     #include <htmintrin.h>
48991
48992     unsigned char tx_state = _HTM_STATE (__builtin_ttest ());
48993
48994     if (tx_state == _HTM_TRANSACTIONAL)
48995       {
48996         /* Code to use in transactional state.  */
48997       }
48998     else if (tx_state == _HTM_NONTRANSACTIONAL)
48999       {
49000         /* Code to use in non-transactional state.  */
49001       }
49002     else if (tx_state == _HTM_SUSPENDED)
49003       {
49004         /* Code to use in transaction suspended state.  */
49005       }
49006
490076.60.23.2 PowerPC HTM High Level Inline Functions
49008.................................................
49009
49010The following high level HTM interface is made available by including
49011'<htmxlintrin.h>' and using '-mhtm' or '-mcpu=CPU' where CPU is 'power8'
49012or later.  This interface is common between PowerPC and S/390, allowing
49013users to write one HTM source implementation that can be compiled and
49014executed on either system.
49015
49016     long __TM_simple_begin (void)
49017     long __TM_begin (void* const TM_buff)
49018     long __TM_end (void)
49019     void __TM_abort (void)
49020     void __TM_named_abort (unsigned char const code)
49021     void __TM_resume (void)
49022     void __TM_suspend (void)
49023
49024     long __TM_is_user_abort (void* const TM_buff)
49025     long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code)
49026     long __TM_is_illegal (void* const TM_buff)
49027     long __TM_is_footprint_exceeded (void* const TM_buff)
49028     long __TM_nesting_depth (void* const TM_buff)
49029     long __TM_is_nested_too_deep(void* const TM_buff)
49030     long __TM_is_conflict(void* const TM_buff)
49031     long __TM_is_failure_persistent(void* const TM_buff)
49032     long __TM_failure_address(void* const TM_buff)
49033     long long __TM_failure_code(void* const TM_buff)
49034
49035 Using these common set of HTM inline functions, we can create a more
49036portable version of the HTM example in the previous section that will
49037work on either PowerPC or S/390:
49038
49039     #include <htmxlintrin.h>
49040
49041     int num_retries = 10;
49042     TM_buff_type TM_buff;
49043
49044     while (1)
49045       {
49046         if (__TM_begin (TM_buff) == _HTM_TBEGIN_STARTED)
49047           {
49048             /* Transaction State Initiated.  */
49049             if (is_locked (lock))
49050               __TM_abort ();
49051             ... transaction code...
49052             __TM_end ();
49053             break;
49054           }
49055         else
49056           {
49057             /* Transaction State Failed.  Use locks if the transaction
49058                failure is "persistent" or we've tried too many times.  */
49059             if (num_retries-- <= 0
49060                 || __TM_is_failure_persistent (TM_buff))
49061               {
49062                 acquire_lock (lock);
49063                 ... non transactional fallback path...
49064                 release_lock (lock);
49065                 break;
49066               }
49067           }
49068       }
49069
49070
49071File: gcc.info,  Node: PowerPC Atomic Memory Operation Functions,  Next: RX Built-in Functions,  Prev: PowerPC Hardware Transactional Memory Built-in Functions,  Up: Target Builtins
49072
490736.60.24 PowerPC Atomic Memory Operation Functions
49074-------------------------------------------------
49075
49076ISA 3.0 of the PowerPC added new atomic memory operation (amo)
49077instructions.  GCC provides support for these instructions in 64-bit
49078environments.  All of the functions are declared in the include file
49079'amo.h'.
49080
49081 The functions supported are:
49082
49083     #include <amo.h>
49084
49085     uint32_t amo_lwat_add (uint32_t *, uint32_t);
49086     uint32_t amo_lwat_xor (uint32_t *, uint32_t);
49087     uint32_t amo_lwat_ior (uint32_t *, uint32_t);
49088     uint32_t amo_lwat_and (uint32_t *, uint32_t);
49089     uint32_t amo_lwat_umax (uint32_t *, uint32_t);
49090     uint32_t amo_lwat_umin (uint32_t *, uint32_t);
49091     uint32_t amo_lwat_swap (uint32_t *, uint32_t);
49092
49093     int32_t amo_lwat_sadd (int32_t *, int32_t);
49094     int32_t amo_lwat_smax (int32_t *, int32_t);
49095     int32_t amo_lwat_smin (int32_t *, int32_t);
49096     int32_t amo_lwat_sswap (int32_t *, int32_t);
49097
49098     uint64_t amo_ldat_add (uint64_t *, uint64_t);
49099     uint64_t amo_ldat_xor (uint64_t *, uint64_t);
49100     uint64_t amo_ldat_ior (uint64_t *, uint64_t);
49101     uint64_t amo_ldat_and (uint64_t *, uint64_t);
49102     uint64_t amo_ldat_umax (uint64_t *, uint64_t);
49103     uint64_t amo_ldat_umin (uint64_t *, uint64_t);
49104     uint64_t amo_ldat_swap (uint64_t *, uint64_t);
49105
49106     int64_t amo_ldat_sadd (int64_t *, int64_t);
49107     int64_t amo_ldat_smax (int64_t *, int64_t);
49108     int64_t amo_ldat_smin (int64_t *, int64_t);
49109     int64_t amo_ldat_sswap (int64_t *, int64_t);
49110
49111     void amo_stwat_add (uint32_t *, uint32_t);
49112     void amo_stwat_xor (uint32_t *, uint32_t);
49113     void amo_stwat_ior (uint32_t *, uint32_t);
49114     void amo_stwat_and (uint32_t *, uint32_t);
49115     void amo_stwat_umax (uint32_t *, uint32_t);
49116     void amo_stwat_umin (uint32_t *, uint32_t);
49117
49118     void amo_stwat_sadd (int32_t *, int32_t);
49119     void amo_stwat_smax (int32_t *, int32_t);
49120     void amo_stwat_smin (int32_t *, int32_t);
49121
49122     void amo_stdat_add (uint64_t *, uint64_t);
49123     void amo_stdat_xor (uint64_t *, uint64_t);
49124     void amo_stdat_ior (uint64_t *, uint64_t);
49125     void amo_stdat_and (uint64_t *, uint64_t);
49126     void amo_stdat_umax (uint64_t *, uint64_t);
49127     void amo_stdat_umin (uint64_t *, uint64_t);
49128
49129     void amo_stdat_sadd (int64_t *, int64_t);
49130     void amo_stdat_smax (int64_t *, int64_t);
49131     void amo_stdat_smin (int64_t *, int64_t);
49132
49133
49134File: gcc.info,  Node: RX Built-in Functions,  Next: S/390 System z Built-in Functions,  Prev: PowerPC Atomic Memory Operation Functions,  Up: Target Builtins
49135
491366.60.25 RX Built-in Functions
49137-----------------------------
49138
49139GCC supports some of the RX instructions which cannot be expressed in
49140the C programming language via the use of built-in functions.  The
49141following functions are supported:
49142
49143 -- Built-in Function: void __builtin_rx_brk (void)
49144     Generates the 'brk' machine instruction.
49145
49146 -- Built-in Function: void __builtin_rx_clrpsw (int)
49147     Generates the 'clrpsw' machine instruction to clear the specified
49148     bit in the processor status word.
49149
49150 -- Built-in Function: void __builtin_rx_int (int)
49151     Generates the 'int' machine instruction to generate an interrupt
49152     with the specified value.
49153
49154 -- Built-in Function: void __builtin_rx_machi (int, int)
49155     Generates the 'machi' machine instruction to add the result of
49156     multiplying the top 16 bits of the two arguments into the
49157     accumulator.
49158
49159 -- Built-in Function: void __builtin_rx_maclo (int, int)
49160     Generates the 'maclo' machine instruction to add the result of
49161     multiplying the bottom 16 bits of the two arguments into the
49162     accumulator.
49163
49164 -- Built-in Function: void __builtin_rx_mulhi (int, int)
49165     Generates the 'mulhi' machine instruction to place the result of
49166     multiplying the top 16 bits of the two arguments into the
49167     accumulator.
49168
49169 -- Built-in Function: void __builtin_rx_mullo (int, int)
49170     Generates the 'mullo' machine instruction to place the result of
49171     multiplying the bottom 16 bits of the two arguments into the
49172     accumulator.
49173
49174 -- Built-in Function: int __builtin_rx_mvfachi (void)
49175     Generates the 'mvfachi' machine instruction to read the top 32 bits
49176     of the accumulator.
49177
49178 -- Built-in Function: int __builtin_rx_mvfacmi (void)
49179     Generates the 'mvfacmi' machine instruction to read the middle 32
49180     bits of the accumulator.
49181
49182 -- Built-in Function: int __builtin_rx_mvfc (int)
49183     Generates the 'mvfc' machine instruction which reads the control
49184     register specified in its argument and returns its value.
49185
49186 -- Built-in Function: void __builtin_rx_mvtachi (int)
49187     Generates the 'mvtachi' machine instruction to set the top 32 bits
49188     of the accumulator.
49189
49190 -- Built-in Function: void __builtin_rx_mvtaclo (int)
49191     Generates the 'mvtaclo' machine instruction to set the bottom 32
49192     bits of the accumulator.
49193
49194 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val)
49195     Generates the 'mvtc' machine instruction which sets control
49196     register number 'reg' to 'val'.
49197
49198 -- Built-in Function: void __builtin_rx_mvtipl (int)
49199     Generates the 'mvtipl' machine instruction set the interrupt
49200     priority level.
49201
49202 -- Built-in Function: void __builtin_rx_racw (int)
49203     Generates the 'racw' machine instruction to round the accumulator
49204     according to the specified mode.
49205
49206 -- Built-in Function: int __builtin_rx_revw (int)
49207     Generates the 'revw' machine instruction which swaps the bytes in
49208     the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
49209     and also bits 16-23 occupy bits 24-31 and vice versa.
49210
49211 -- Built-in Function: void __builtin_rx_rmpa (void)
49212     Generates the 'rmpa' machine instruction which initiates a repeated
49213     multiply and accumulate sequence.
49214
49215 -- Built-in Function: void __builtin_rx_round (float)
49216     Generates the 'round' machine instruction which returns the
49217     floating-point argument rounded according to the current rounding
49218     mode set in the floating-point status word register.
49219
49220 -- Built-in Function: int __builtin_rx_sat (int)
49221     Generates the 'sat' machine instruction which returns the saturated
49222     value of the argument.
49223
49224 -- Built-in Function: void __builtin_rx_setpsw (int)
49225     Generates the 'setpsw' machine instruction to set the specified bit
49226     in the processor status word.
49227
49228 -- Built-in Function: void __builtin_rx_wait (void)
49229     Generates the 'wait' machine instruction.
49230
49231
49232File: gcc.info,  Node: S/390 System z Built-in Functions,  Next: SH Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
49233
492346.60.26 S/390 System z Built-in Functions
49235-----------------------------------------
49236
49237 -- Built-in Function: int __builtin_tbegin (void*)
49238     Generates the 'tbegin' machine instruction starting a
49239     non-constrained hardware transaction.  If the parameter is non-NULL
49240     the memory area is used to store the transaction diagnostic buffer
49241     and will be passed as first operand to 'tbegin'.  This buffer can
49242     be defined using the 'struct __htm_tdb' C struct defined in
49243     'htmintrin.h' and must reside on a double-word boundary.  The
49244     second tbegin operand is set to '0xff0c'.  This enables
49245     save/restore of all GPRs and disables aborts for FPR and AR
49246     manipulations inside the transaction body.  The condition code set
49247     by the tbegin instruction is returned as integer value.  The tbegin
49248     instruction by definition overwrites the content of all FPRs.  The
49249     compiler will generate code which saves and restores the FPRs.  For
49250     soft-float code it is recommended to used the '*_nofloat' variant.
49251     In order to prevent a TDB from being written it is required to pass
49252     a constant zero value as parameter.  Passing a zero value through a
49253     variable is not sufficient.  Although modifications of access
49254     registers inside the transaction will not trigger an transaction
49255     abort it is not supported to actually modify them.  Access
49256     registers do not get saved when entering a transaction.  They will
49257     have undefined state when reaching the abort code.
49258
49259 Macros for the possible return codes of tbegin are defined in the
49260'htmintrin.h' header file:
49261
49262'_HTM_TBEGIN_STARTED'
49263     'tbegin' has been executed as part of normal processing.  The
49264     transaction body is supposed to be executed.
49265'_HTM_TBEGIN_INDETERMINATE'
49266     The transaction was aborted due to an indeterminate condition which
49267     might be persistent.
49268'_HTM_TBEGIN_TRANSIENT'
49269     The transaction aborted due to a transient failure.  The
49270     transaction should be re-executed in that case.
49271'_HTM_TBEGIN_PERSISTENT'
49272     The transaction aborted due to a persistent failure.  Re-execution
49273     under same circumstances will not be productive.
49274
49275 -- Macro: _HTM_FIRST_USER_ABORT_CODE
49276     The '_HTM_FIRST_USER_ABORT_CODE' defined in 'htmintrin.h' specifies
49277     the first abort code which can be used for '__builtin_tabort'.
49278     Values below this threshold are reserved for machine use.
49279
49280 -- Data type: struct __htm_tdb
49281     The 'struct __htm_tdb' defined in 'htmintrin.h' describes the
49282     structure of the transaction diagnostic block as specified in the
49283     Principles of Operation manual chapter 5-91.
49284
49285 -- Built-in Function: int __builtin_tbegin_nofloat (void*)
49286     Same as '__builtin_tbegin' but without FPR saves and restores.
49287     Using this variant in code making use of FPRs will leave the FPRs
49288     in undefined state when entering the transaction abort handler
49289     code.
49290
49291 -- Built-in Function: int __builtin_tbegin_retry (void*, int)
49292     In addition to '__builtin_tbegin' a loop for transient failures is
49293     generated.  If tbegin returns a condition code of 2 the transaction
49294     will be retried as often as specified in the second argument.  The
49295     perform processor assist instruction is used to tell the CPU about
49296     the number of fails so far.
49297
49298 -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int)
49299     Same as '__builtin_tbegin_retry' but without FPR saves and
49300     restores.  Using this variant in code making use of FPRs will leave
49301     the FPRs in undefined state when entering the transaction abort
49302     handler code.
49303
49304 -- Built-in Function: void __builtin_tbeginc (void)
49305     Generates the 'tbeginc' machine instruction starting a constrained
49306     hardware transaction.  The second operand is set to '0xff08'.
49307
49308 -- Built-in Function: int __builtin_tend (void)
49309     Generates the 'tend' machine instruction finishing a transaction
49310     and making the changes visible to other threads.  The condition
49311     code generated by tend is returned as integer value.
49312
49313 -- Built-in Function: void __builtin_tabort (int)
49314     Generates the 'tabort' machine instruction with the specified abort
49315     code.  Abort codes from 0 through 255 are reserved and will result
49316     in an error message.
49317
49318 -- Built-in Function: void __builtin_tx_assist (int)
49319     Generates the 'ppa rX,rY,1' machine instruction.  Where the integer
49320     parameter is loaded into rX and a value of zero is loaded into rY.
49321     The integer parameter specifies the number of times the transaction
49322     repeatedly aborted.
49323
49324 -- Built-in Function: int __builtin_tx_nesting_depth (void)
49325     Generates the 'etnd' machine instruction.  The current nesting
49326     depth is returned as integer value.  For a nesting depth of 0 the
49327     code is not executed as part of an transaction.
49328
49329 -- Built-in Function: void __builtin_non_tx_store (uint64_t *,
49330          uint64_t)
49331
49332     Generates the 'ntstg' machine instruction.  The second argument is
49333     written to the first arguments location.  The store operation will
49334     not be rolled-back in case of an transaction abort.
49335
49336
49337File: gcc.info,  Node: SH Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: S/390 System z Built-in Functions,  Up: Target Builtins
49338
493396.60.27 SH Built-in Functions
49340-----------------------------
49341
49342The following built-in functions are supported on the SH1, SH2, SH3 and
49343SH4 families of processors:
49344
49345 -- Built-in Function: void __builtin_set_thread_pointer (void *PTR)
49346     Sets the 'GBR' register to the specified value PTR.  This is
49347     usually used by system code that manages threads and execution
49348     contexts.  The compiler normally does not generate code that
49349     modifies the contents of 'GBR' and thus the value is preserved
49350     across function calls.  Changing the 'GBR' value in user code must
49351     be done with caution, since the compiler might use 'GBR' in order
49352     to access thread local variables.
49353
49354 -- Built-in Function: void * __builtin_thread_pointer (void)
49355     Returns the value that is currently set in the 'GBR' register.
49356     Memory loads and stores that use the thread pointer as a base
49357     address are turned into 'GBR' based displacement loads and stores,
49358     if possible.  For example:
49359          struct my_tcb
49360          {
49361             int a, b, c, d, e;
49362          };
49363
49364          int get_tcb_value (void)
49365          {
49366            // Generate 'mov.l @(8,gbr),r0' instruction
49367            return ((my_tcb*)__builtin_thread_pointer ())->c;
49368          }
49369
49370
49371 -- Built-in Function: unsigned int __builtin_sh_get_fpscr (void)
49372     Returns the value that is currently set in the 'FPSCR' register.
49373
49374 -- Built-in Function: void __builtin_sh_set_fpscr (unsigned int VAL)
49375     Sets the 'FPSCR' register to the specified value VAL, while
49376     preserving the current values of the FR, SZ and PR bits.
49377
49378
49379File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: SPU Built-in Functions,  Prev: SH Built-in Functions,  Up: Target Builtins
49380
493816.60.28 SPARC VIS Built-in Functions
49382------------------------------------
49383
49384GCC supports SIMD operations on the SPARC using both the generic vector
49385extensions (*note Vector Extensions::) as well as built-in functions for
49386the SPARC Visual Instruction Set (VIS). When you use the '-mvis' switch,
49387the VIS extension is exposed as the following built-in functions:
49388
49389     typedef int v1si __attribute__ ((vector_size (4)));
49390     typedef int v2si __attribute__ ((vector_size (8)));
49391     typedef short v4hi __attribute__ ((vector_size (8)));
49392     typedef short v2hi __attribute__ ((vector_size (4)));
49393     typedef unsigned char v8qi __attribute__ ((vector_size (8)));
49394     typedef unsigned char v4qi __attribute__ ((vector_size (4)));
49395
49396     void __builtin_vis_write_gsr (int64_t);
49397     int64_t __builtin_vis_read_gsr (void);
49398
49399     void * __builtin_vis_alignaddr (void *, long);
49400     void * __builtin_vis_alignaddrl (void *, long);
49401     int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
49402     v2si __builtin_vis_faligndatav2si (v2si, v2si);
49403     v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
49404     v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
49405
49406     v4hi __builtin_vis_fexpand (v4qi);
49407
49408     v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
49409     v4hi __builtin_vis_fmul8x16au (v4qi, v2hi);
49410     v4hi __builtin_vis_fmul8x16al (v4qi, v2hi);
49411     v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
49412     v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
49413     v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
49414     v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
49415
49416     v4qi __builtin_vis_fpack16 (v4hi);
49417     v8qi __builtin_vis_fpack32 (v2si, v8qi);
49418     v2hi __builtin_vis_fpackfix (v2si);
49419     v8qi __builtin_vis_fpmerge (v4qi, v4qi);
49420
49421     int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
49422
49423     long __builtin_vis_edge8 (void *, void *);
49424     long __builtin_vis_edge8l (void *, void *);
49425     long __builtin_vis_edge16 (void *, void *);
49426     long __builtin_vis_edge16l (void *, void *);
49427     long __builtin_vis_edge32 (void *, void *);
49428     long __builtin_vis_edge32l (void *, void *);
49429
49430     long __builtin_vis_fcmple16 (v4hi, v4hi);
49431     long __builtin_vis_fcmple32 (v2si, v2si);
49432     long __builtin_vis_fcmpne16 (v4hi, v4hi);
49433     long __builtin_vis_fcmpne32 (v2si, v2si);
49434     long __builtin_vis_fcmpgt16 (v4hi, v4hi);
49435     long __builtin_vis_fcmpgt32 (v2si, v2si);
49436     long __builtin_vis_fcmpeq16 (v4hi, v4hi);
49437     long __builtin_vis_fcmpeq32 (v2si, v2si);
49438
49439     v4hi __builtin_vis_fpadd16 (v4hi, v4hi);
49440     v2hi __builtin_vis_fpadd16s (v2hi, v2hi);
49441     v2si __builtin_vis_fpadd32 (v2si, v2si);
49442     v1si __builtin_vis_fpadd32s (v1si, v1si);
49443     v4hi __builtin_vis_fpsub16 (v4hi, v4hi);
49444     v2hi __builtin_vis_fpsub16s (v2hi, v2hi);
49445     v2si __builtin_vis_fpsub32 (v2si, v2si);
49446     v1si __builtin_vis_fpsub32s (v1si, v1si);
49447
49448     long __builtin_vis_array8 (long, long);
49449     long __builtin_vis_array16 (long, long);
49450     long __builtin_vis_array32 (long, long);
49451
49452 When you use the '-mvis2' switch, the VIS version 2.0 built-in
49453functions also become available:
49454
49455     long __builtin_vis_bmask (long, long);
49456     int64_t __builtin_vis_bshuffledi (int64_t, int64_t);
49457     v2si __builtin_vis_bshufflev2si (v2si, v2si);
49458     v4hi __builtin_vis_bshufflev2si (v4hi, v4hi);
49459     v8qi __builtin_vis_bshufflev2si (v8qi, v8qi);
49460
49461     long __builtin_vis_edge8n (void *, void *);
49462     long __builtin_vis_edge8ln (void *, void *);
49463     long __builtin_vis_edge16n (void *, void *);
49464     long __builtin_vis_edge16ln (void *, void *);
49465     long __builtin_vis_edge32n (void *, void *);
49466     long __builtin_vis_edge32ln (void *, void *);
49467
49468 When you use the '-mvis3' switch, the VIS version 3.0 built-in
49469functions also become available:
49470
49471     void __builtin_vis_cmask8 (long);
49472     void __builtin_vis_cmask16 (long);
49473     void __builtin_vis_cmask32 (long);
49474
49475     v4hi __builtin_vis_fchksm16 (v4hi, v4hi);
49476
49477     v4hi __builtin_vis_fsll16 (v4hi, v4hi);
49478     v4hi __builtin_vis_fslas16 (v4hi, v4hi);
49479     v4hi __builtin_vis_fsrl16 (v4hi, v4hi);
49480     v4hi __builtin_vis_fsra16 (v4hi, v4hi);
49481     v2si __builtin_vis_fsll16 (v2si, v2si);
49482     v2si __builtin_vis_fslas16 (v2si, v2si);
49483     v2si __builtin_vis_fsrl16 (v2si, v2si);
49484     v2si __builtin_vis_fsra16 (v2si, v2si);
49485
49486     long __builtin_vis_pdistn (v8qi, v8qi);
49487
49488     v4hi __builtin_vis_fmean16 (v4hi, v4hi);
49489
49490     int64_t __builtin_vis_fpadd64 (int64_t, int64_t);
49491     int64_t __builtin_vis_fpsub64 (int64_t, int64_t);
49492
49493     v4hi __builtin_vis_fpadds16 (v4hi, v4hi);
49494     v2hi __builtin_vis_fpadds16s (v2hi, v2hi);
49495     v4hi __builtin_vis_fpsubs16 (v4hi, v4hi);
49496     v2hi __builtin_vis_fpsubs16s (v2hi, v2hi);
49497     v2si __builtin_vis_fpadds32 (v2si, v2si);
49498     v1si __builtin_vis_fpadds32s (v1si, v1si);
49499     v2si __builtin_vis_fpsubs32 (v2si, v2si);
49500     v1si __builtin_vis_fpsubs32s (v1si, v1si);
49501
49502     long __builtin_vis_fucmple8 (v8qi, v8qi);
49503     long __builtin_vis_fucmpne8 (v8qi, v8qi);
49504     long __builtin_vis_fucmpgt8 (v8qi, v8qi);
49505     long __builtin_vis_fucmpeq8 (v8qi, v8qi);
49506
49507     float __builtin_vis_fhadds (float, float);
49508     double __builtin_vis_fhaddd (double, double);
49509     float __builtin_vis_fhsubs (float, float);
49510     double __builtin_vis_fhsubd (double, double);
49511     float __builtin_vis_fnhadds (float, float);
49512     double __builtin_vis_fnhaddd (double, double);
49513
49514     int64_t __builtin_vis_umulxhi (int64_t, int64_t);
49515     int64_t __builtin_vis_xmulx (int64_t, int64_t);
49516     int64_t __builtin_vis_xmulxhi (int64_t, int64_t);
49517
49518 When you use the '-mvis4' switch, the VIS version 4.0 built-in
49519functions also become available:
49520
49521     v8qi __builtin_vis_fpadd8 (v8qi, v8qi);
49522     v8qi __builtin_vis_fpadds8 (v8qi, v8qi);
49523     v8qi __builtin_vis_fpaddus8 (v8qi, v8qi);
49524     v4hi __builtin_vis_fpaddus16 (v4hi, v4hi);
49525
49526     v8qi __builtin_vis_fpsub8 (v8qi, v8qi);
49527     v8qi __builtin_vis_fpsubs8 (v8qi, v8qi);
49528     v8qi __builtin_vis_fpsubus8 (v8qi, v8qi);
49529     v4hi __builtin_vis_fpsubus16 (v4hi, v4hi);
49530
49531     long __builtin_vis_fpcmple8 (v8qi, v8qi);
49532     long __builtin_vis_fpcmpgt8 (v8qi, v8qi);
49533     long __builtin_vis_fpcmpule16 (v4hi, v4hi);
49534     long __builtin_vis_fpcmpugt16 (v4hi, v4hi);
49535     long __builtin_vis_fpcmpule32 (v2si, v2si);
49536     long __builtin_vis_fpcmpugt32 (v2si, v2si);
49537
49538     v8qi __builtin_vis_fpmax8 (v8qi, v8qi);
49539     v4hi __builtin_vis_fpmax16 (v4hi, v4hi);
49540     v2si __builtin_vis_fpmax32 (v2si, v2si);
49541
49542     v8qi __builtin_vis_fpmaxu8 (v8qi, v8qi);
49543     v4hi __builtin_vis_fpmaxu16 (v4hi, v4hi);
49544     v2si __builtin_vis_fpmaxu32 (v2si, v2si);
49545
49546
49547     v8qi __builtin_vis_fpmin8 (v8qi, v8qi);
49548     v4hi __builtin_vis_fpmin16 (v4hi, v4hi);
49549     v2si __builtin_vis_fpmin32 (v2si, v2si);
49550
49551     v8qi __builtin_vis_fpminu8 (v8qi, v8qi);
49552     v4hi __builtin_vis_fpminu16 (v4hi, v4hi);
49553     v2si __builtin_vis_fpminu32 (v2si, v2si);
49554
49555 When you use the '-mvis4b' switch, the VIS version 4.0B built-in
49556functions also become available:
49557
49558     v8qi __builtin_vis_dictunpack8 (double, int);
49559     v4hi __builtin_vis_dictunpack16 (double, int);
49560     v2si __builtin_vis_dictunpack32 (double, int);
49561
49562     long __builtin_vis_fpcmple8shl (v8qi, v8qi, int);
49563     long __builtin_vis_fpcmpgt8shl (v8qi, v8qi, int);
49564     long __builtin_vis_fpcmpeq8shl (v8qi, v8qi, int);
49565     long __builtin_vis_fpcmpne8shl (v8qi, v8qi, int);
49566
49567     long __builtin_vis_fpcmple16shl (v4hi, v4hi, int);
49568     long __builtin_vis_fpcmpgt16shl (v4hi, v4hi, int);
49569     long __builtin_vis_fpcmpeq16shl (v4hi, v4hi, int);
49570     long __builtin_vis_fpcmpne16shl (v4hi, v4hi, int);
49571
49572     long __builtin_vis_fpcmple32shl (v2si, v2si, int);
49573     long __builtin_vis_fpcmpgt32shl (v2si, v2si, int);
49574     long __builtin_vis_fpcmpeq32shl (v2si, v2si, int);
49575     long __builtin_vis_fpcmpne32shl (v2si, v2si, int);
49576
49577     long __builtin_vis_fpcmpule8shl (v8qi, v8qi, int);
49578     long __builtin_vis_fpcmpugt8shl (v8qi, v8qi, int);
49579     long __builtin_vis_fpcmpule16shl (v4hi, v4hi, int);
49580     long __builtin_vis_fpcmpugt16shl (v4hi, v4hi, int);
49581     long __builtin_vis_fpcmpule32shl (v2si, v2si, int);
49582     long __builtin_vis_fpcmpugt32shl (v2si, v2si, int);
49583
49584     long __builtin_vis_fpcmpde8shl (v8qi, v8qi, int);
49585     long __builtin_vis_fpcmpde16shl (v4hi, v4hi, int);
49586     long __builtin_vis_fpcmpde32shl (v2si, v2si, int);
49587
49588     long __builtin_vis_fpcmpur8shl (v8qi, v8qi, int);
49589     long __builtin_vis_fpcmpur16shl (v4hi, v4hi, int);
49590     long __builtin_vis_fpcmpur32shl (v2si, v2si, int);
49591
49592
49593File: gcc.info,  Node: SPU Built-in Functions,  Next: TI C6X Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
49594
495956.60.29 SPU Built-in Functions
49596------------------------------
49597
49598GCC provides extensions for the SPU processor as described in the
49599Sony/Toshiba/IBM SPU Language Extensions Specification.  GCC's
49600implementation differs in several ways.
49601
49602   * The optional extension of specifying vector constants in
49603     parentheses is not supported.
49604
49605   * A vector initializer requires no cast if the vector constant is of
49606     the same type as the variable it is initializing.
49607
49608   * If 'signed' or 'unsigned' is omitted, the signedness of the vector
49609     type is the default signedness of the base type.  The default
49610     varies depending on the operating system, so a portable program
49611     should always specify the signedness.
49612
49613   * By default, the keyword '__vector' is added.  The macro 'vector' is
49614     defined in '<spu_intrinsics.h>' and can be undefined.
49615
49616   * GCC allows using a 'typedef' name as the type specifier for a
49617     vector type.
49618
49619   * For C, overloaded functions are implemented with macros so the
49620     following does not work:
49621
49622            spu_add ((vector signed int){1, 2, 3, 4}, foo);
49623
49624     Since 'spu_add' is a macro, the vector constant in the example is
49625     treated as four separate arguments.  Wrap the entire argument in
49626     parentheses for this to work.
49627
49628   * The extended version of '__builtin_expect' is not supported.
49629
49630 _Note:_ Only the interface described in the aforementioned
49631specification is supported.  Internally, GCC uses built-in functions to
49632implement the required functionality, but these are not supported and
49633are subject to change without notice.
49634
49635
49636File: gcc.info,  Node: TI C6X Built-in Functions,  Next: TILE-Gx Built-in Functions,  Prev: SPU Built-in Functions,  Up: Target Builtins
49637
496386.60.30 TI C6X Built-in Functions
49639---------------------------------
49640
49641GCC provides intrinsics to access certain instructions of the TI C6X
49642processors.  These intrinsics, listed below, are available after
49643inclusion of the 'c6x_intrinsics.h' header file.  They map directly to
49644C6X instructions.
49645
49646
49647     int _sadd (int, int)
49648     int _ssub (int, int)
49649     int _sadd2 (int, int)
49650     int _ssub2 (int, int)
49651     long long _mpy2 (int, int)
49652     long long _smpy2 (int, int)
49653     int _add4 (int, int)
49654     int _sub4 (int, int)
49655     int _saddu4 (int, int)
49656
49657     int _smpy (int, int)
49658     int _smpyh (int, int)
49659     int _smpyhl (int, int)
49660     int _smpylh (int, int)
49661
49662     int _sshl (int, int)
49663     int _subc (int, int)
49664
49665     int _avg2 (int, int)
49666     int _avgu4 (int, int)
49667
49668     int _clrr (int, int)
49669     int _extr (int, int)
49670     int _extru (int, int)
49671     int _abs (int)
49672     int _abs2 (int)
49673
49674
49675
49676File: gcc.info,  Node: TILE-Gx Built-in Functions,  Next: TILEPro Built-in Functions,  Prev: TI C6X Built-in Functions,  Up: Target Builtins
49677
496786.60.31 TILE-Gx Built-in Functions
49679----------------------------------
49680
49681GCC provides intrinsics to access every instruction of the TILE-Gx
49682processor.  The intrinsics are of the form:
49683
49684
49685     unsigned long long __insn_OP (...)
49686
49687
49688 Where OP is the name of the instruction.  Refer to the ISA manual for
49689the complete list of instructions.
49690
49691 GCC also provides intrinsics to directly access the network registers.
49692The intrinsics are:
49693
49694
49695     unsigned long long __tile_idn0_receive (void)
49696     unsigned long long __tile_idn1_receive (void)
49697     unsigned long long __tile_udn0_receive (void)
49698     unsigned long long __tile_udn1_receive (void)
49699     unsigned long long __tile_udn2_receive (void)
49700     unsigned long long __tile_udn3_receive (void)
49701     void __tile_idn_send (unsigned long long)
49702     void __tile_udn_send (unsigned long long)
49703
49704
49705 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
49706that no network operations before it are reordered with those after it.
49707
49708
49709File: gcc.info,  Node: TILEPro Built-in Functions,  Next: x86 Built-in Functions,  Prev: TILE-Gx Built-in Functions,  Up: Target Builtins
49710
497116.60.32 TILEPro Built-in Functions
49712----------------------------------
49713
49714GCC provides intrinsics to access every instruction of the TILEPro
49715processor.  The intrinsics are of the form:
49716
49717
49718     unsigned __insn_OP (...)
49719
49720
49721where OP is the name of the instruction.  Refer to the ISA manual for
49722the complete list of instructions.
49723
49724 GCC also provides intrinsics to directly access the network registers.
49725The intrinsics are:
49726
49727
49728     unsigned __tile_idn0_receive (void)
49729     unsigned __tile_idn1_receive (void)
49730     unsigned __tile_sn_receive (void)
49731     unsigned __tile_udn0_receive (void)
49732     unsigned __tile_udn1_receive (void)
49733     unsigned __tile_udn2_receive (void)
49734     unsigned __tile_udn3_receive (void)
49735     void __tile_idn_send (unsigned)
49736     void __tile_sn_send (unsigned)
49737     void __tile_udn_send (unsigned)
49738
49739
49740 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
49741that no network operations before it are reordered with those after it.
49742
49743
49744File: gcc.info,  Node: x86 Built-in Functions,  Next: x86 transactional memory intrinsics,  Prev: TILEPro Built-in Functions,  Up: Target Builtins
49745
497466.60.33 x86 Built-in Functions
49747------------------------------
49748
49749These built-in functions are available for the x86-32 and x86-64 family
49750of computers, depending on the command-line switches used.
49751
49752 If you specify command-line switches such as '-msse', the compiler
49753could use the extended instruction sets even if the built-ins are not
49754used explicitly in the program.  For this reason, applications that
49755perform run-time CPU detection must compile separate files for each
49756supported architecture, using the appropriate flags.  In particular, the
49757file containing the CPU detection code should be compiled without these
49758options.
49759
49760 The following machine modes are available for use with MMX built-in
49761functions (*note Vector Extensions::): 'V2SI' for a vector of two 32-bit
49762integers, 'V4HI' for a vector of four 16-bit integers, and 'V8QI' for a
49763vector of eight 8-bit integers.  Some of the built-in functions operate
49764on MMX registers as a whole 64-bit entity, these use 'V1DI' as their
49765mode.
49766
49767 If 3DNow! extensions are enabled, 'V2SF' is used as a mode for a vector
49768of two 32-bit floating-point values.
49769
49770 If SSE extensions are enabled, 'V4SF' is used for a vector of four
4977132-bit floating-point values.  Some instructions use a vector of four
4977232-bit integers, these use 'V4SI'.  Finally, some instructions operate
49773on an entire vector register, interpreting it as a 128-bit integer,
49774these use mode 'TI'.
49775
49776 The x86-32 and x86-64 family of processors use additional built-in
49777functions for efficient use of 'TF' ('__float128') 128-bit floating
49778point and 'TC' 128-bit complex floating-point values.
49779
49780 The following floating-point built-in functions are always available.
49781All of them implement the function that is part of the name.
49782
49783     __float128 __builtin_fabsq (__float128)
49784     __float128 __builtin_copysignq (__float128, __float128)
49785
49786 The following built-in functions are always available.
49787
49788'__float128 __builtin_infq (void)'
49789     Similar to '__builtin_inf', except the return type is '__float128'.
49790
49791'__float128 __builtin_huge_valq (void)'
49792     Similar to '__builtin_huge_val', except the return type is
49793     '__float128'.
49794
49795'__float128 __builtin_nanq (void)'
49796     Similar to '__builtin_nan', except the return type is '__float128'.
49797
49798'__float128 __builtin_nansq (void)'
49799     Similar to '__builtin_nans', except the return type is
49800     '__float128'.
49801
49802 The following built-in function is always available.
49803
49804'void __builtin_ia32_pause (void)'
49805     Generates the 'pause' machine instruction with a compiler memory
49806     barrier.
49807
49808 The following built-in functions are always available and can be used
49809to check the target platform type.
49810
49811 -- Built-in Function: void __builtin_cpu_init (void)
49812     This function runs the CPU detection code to check the type of CPU
49813     and the features supported.  This built-in function needs to be
49814     invoked along with the built-in functions to check CPU type and
49815     features, '__builtin_cpu_is' and '__builtin_cpu_supports', only
49816     when used in a function that is executed before any constructors
49817     are called.  The CPU detection code is automatically executed in a
49818     very high priority constructor.
49819
49820     For example, this function has to be used in 'ifunc' resolvers that
49821     check for CPU type using the built-in functions '__builtin_cpu_is'
49822     and '__builtin_cpu_supports', or in constructors on targets that
49823     don't support constructor priority.
49824
49825          static void (*resolve_memcpy (void)) (void)
49826          {
49827            // ifunc resolvers fire before constructors, explicitly call the init
49828            // function.
49829            __builtin_cpu_init ();
49830            if (__builtin_cpu_supports ("ssse3"))
49831              return ssse3_memcpy; // super fast memcpy with ssse3 instructions.
49832            else
49833              return default_memcpy;
49834          }
49835
49836          void *memcpy (void *, const void *, size_t)
49837               __attribute__ ((ifunc ("resolve_memcpy")));
49838
49839 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
49840     This function returns a positive integer if the run-time CPU is of
49841     type CPUNAME and returns '0' otherwise.  The following CPU names
49842     can be detected:
49843
49844     'amd'
49845          AMD CPU.
49846
49847     'intel'
49848          Intel CPU.
49849
49850     'atom'
49851          Intel Atom CPU.
49852
49853     'slm'
49854          Intel Silvermont CPU.
49855
49856     'core2'
49857          Intel Core 2 CPU.
49858
49859     'corei7'
49860          Intel Core i7 CPU.
49861
49862     'nehalem'
49863          Intel Core i7 Nehalem CPU.
49864
49865     'westmere'
49866          Intel Core i7 Westmere CPU.
49867
49868     'sandybridge'
49869          Intel Core i7 Sandy Bridge CPU.
49870
49871     'ivybridge'
49872          Intel Core i7 Ivy Bridge CPU.
49873
49874     'haswell'
49875          Intel Core i7 Haswell CPU.
49876
49877     'broadwell'
49878          Intel Core i7 Broadwell CPU.
49879
49880     'skylake'
49881          Intel Core i7 Skylake CPU.
49882
49883     'skylake-avx512'
49884          Intel Core i7 Skylake AVX512 CPU.
49885
49886     'cannonlake'
49887          Intel Core i7 Cannon Lake CPU.
49888
49889     'icelake-client'
49890          Intel Core i7 Ice Lake Client CPU.
49891
49892     'icelake-server'
49893          Intel Core i7 Ice Lake Server CPU.
49894
49895     'cascadelake'
49896          Intel Core i7 Cascadelake CPU.
49897
49898     'tigerlake'
49899          Intel Core i7 Tigerlake CPU.
49900
49901     'bonnell'
49902          Intel Atom Bonnell CPU.
49903
49904     'silvermont'
49905          Intel Atom Silvermont CPU.
49906
49907     'goldmont'
49908          Intel Atom Goldmont CPU.
49909
49910     'goldmont-plus'
49911          Intel Atom Goldmont Plus CPU.
49912
49913     'tremont'
49914          Intel Atom Tremont CPU.
49915
49916     'knl'
49917          Intel Knights Landing CPU.
49918
49919     'knm'
49920          Intel Knights Mill CPU.
49921
49922     'amdfam10h'
49923          AMD Family 10h CPU.
49924
49925     'barcelona'
49926          AMD Family 10h Barcelona CPU.
49927
49928     'shanghai'
49929          AMD Family 10h Shanghai CPU.
49930
49931     'istanbul'
49932          AMD Family 10h Istanbul CPU.
49933
49934     'btver1'
49935          AMD Family 14h CPU.
49936
49937     'amdfam15h'
49938          AMD Family 15h CPU.
49939
49940     'bdver1'
49941          AMD Family 15h Bulldozer version 1.
49942
49943     'bdver2'
49944          AMD Family 15h Bulldozer version 2.
49945
49946     'bdver3'
49947          AMD Family 15h Bulldozer version 3.
49948
49949     'bdver4'
49950          AMD Family 15h Bulldozer version 4.
49951
49952     'btver2'
49953          AMD Family 16h CPU.
49954
49955     'amdfam17h'
49956          AMD Family 17h CPU.
49957
49958     'znver1'
49959          AMD Family 17h Zen version 1.
49960
49961     'znver2'
49962          AMD Family 17h Zen version 2.
49963
49964     Here is an example:
49965          if (__builtin_cpu_is ("corei7"))
49966            {
49967               do_corei7 (); // Core i7 specific implementation.
49968            }
49969          else
49970            {
49971               do_generic (); // Generic implementation.
49972            }
49973
49974 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
49975     This function returns a positive integer if the run-time CPU
49976     supports FEATURE and returns '0' otherwise.  The following features
49977     can be detected:
49978
49979     'cmov'
49980          CMOV instruction.
49981     'mmx'
49982          MMX instructions.
49983     'popcnt'
49984          POPCNT instruction.
49985     'sse'
49986          SSE instructions.
49987     'sse2'
49988          SSE2 instructions.
49989     'sse3'
49990          SSE3 instructions.
49991     'ssse3'
49992          SSSE3 instructions.
49993     'sse4.1'
49994          SSE4.1 instructions.
49995     'sse4.2'
49996          SSE4.2 instructions.
49997     'avx'
49998          AVX instructions.
49999     'avx2'
50000          AVX2 instructions.
50001     'sse4a'
50002          SSE4A instructions.
50003     'fma4'
50004          FMA4 instructions.
50005     'xop'
50006          XOP instructions.
50007     'fma'
50008          FMA instructions.
50009     'avx512f'
50010          AVX512F instructions.
50011     'bmi'
50012          BMI instructions.
50013     'bmi2'
50014          BMI2 instructions.
50015     'aes'
50016          AES instructions.
50017     'pclmul'
50018          PCLMUL instructions.
50019     'avx512vl'
50020          AVX512VL instructions.
50021     'avx512bw'
50022          AVX512BW instructions.
50023     'avx512dq'
50024          AVX512DQ instructions.
50025     'avx512cd'
50026          AVX512CD instructions.
50027     'avx512er'
50028          AVX512ER instructions.
50029     'avx512pf'
50030          AVX512PF instructions.
50031     'avx512vbmi'
50032          AVX512VBMI instructions.
50033     'avx512ifma'
50034          AVX512IFMA instructions.
50035     'avx5124vnniw'
50036          AVX5124VNNIW instructions.
50037     'avx5124fmaps'
50038          AVX5124FMAPS instructions.
50039     'avx512vpopcntdq'
50040          AVX512VPOPCNTDQ instructions.
50041     'avx512vbmi2'
50042          AVX512VBMI2 instructions.
50043     'gfni'
50044          GFNI instructions.
50045     'vpclmulqdq'
50046          VPCLMULQDQ instructions.
50047     'avx512vnni'
50048          AVX512VNNI instructions.
50049     'avx512bitalg'
50050          AVX512BITALG instructions.
50051
50052     Here is an example:
50053          if (__builtin_cpu_supports ("popcnt"))
50054            {
50055               asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc");
50056            }
50057          else
50058            {
50059               count = generic_countbits (n); //generic implementation.
50060            }
50061
50062 The following built-in functions are made available by '-mmmx'.  All of
50063them generate the machine instruction that is part of the name.
50064
50065     v8qi __builtin_ia32_paddb (v8qi, v8qi)
50066     v4hi __builtin_ia32_paddw (v4hi, v4hi)
50067     v2si __builtin_ia32_paddd (v2si, v2si)
50068     v8qi __builtin_ia32_psubb (v8qi, v8qi)
50069     v4hi __builtin_ia32_psubw (v4hi, v4hi)
50070     v2si __builtin_ia32_psubd (v2si, v2si)
50071     v8qi __builtin_ia32_paddsb (v8qi, v8qi)
50072     v4hi __builtin_ia32_paddsw (v4hi, v4hi)
50073     v8qi __builtin_ia32_psubsb (v8qi, v8qi)
50074     v4hi __builtin_ia32_psubsw (v4hi, v4hi)
50075     v8qi __builtin_ia32_paddusb (v8qi, v8qi)
50076     v4hi __builtin_ia32_paddusw (v4hi, v4hi)
50077     v8qi __builtin_ia32_psubusb (v8qi, v8qi)
50078     v4hi __builtin_ia32_psubusw (v4hi, v4hi)
50079     v4hi __builtin_ia32_pmullw (v4hi, v4hi)
50080     v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
50081     di __builtin_ia32_pand (di, di)
50082     di __builtin_ia32_pandn (di,di)
50083     di __builtin_ia32_por (di, di)
50084     di __builtin_ia32_pxor (di, di)
50085     v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
50086     v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
50087     v2si __builtin_ia32_pcmpeqd (v2si, v2si)
50088     v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
50089     v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
50090     v2si __builtin_ia32_pcmpgtd (v2si, v2si)
50091     v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
50092     v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
50093     v2si __builtin_ia32_punpckhdq (v2si, v2si)
50094     v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
50095     v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
50096     v2si __builtin_ia32_punpckldq (v2si, v2si)
50097     v8qi __builtin_ia32_packsswb (v4hi, v4hi)
50098     v4hi __builtin_ia32_packssdw (v2si, v2si)
50099     v8qi __builtin_ia32_packuswb (v4hi, v4hi)
50100
50101     v4hi __builtin_ia32_psllw (v4hi, v4hi)
50102     v2si __builtin_ia32_pslld (v2si, v2si)
50103     v1di __builtin_ia32_psllq (v1di, v1di)
50104     v4hi __builtin_ia32_psrlw (v4hi, v4hi)
50105     v2si __builtin_ia32_psrld (v2si, v2si)
50106     v1di __builtin_ia32_psrlq (v1di, v1di)
50107     v4hi __builtin_ia32_psraw (v4hi, v4hi)
50108     v2si __builtin_ia32_psrad (v2si, v2si)
50109     v4hi __builtin_ia32_psllwi (v4hi, int)
50110     v2si __builtin_ia32_pslldi (v2si, int)
50111     v1di __builtin_ia32_psllqi (v1di, int)
50112     v4hi __builtin_ia32_psrlwi (v4hi, int)
50113     v2si __builtin_ia32_psrldi (v2si, int)
50114     v1di __builtin_ia32_psrlqi (v1di, int)
50115     v4hi __builtin_ia32_psrawi (v4hi, int)
50116     v2si __builtin_ia32_psradi (v2si, int)
50117
50118
50119 The following built-in functions are made available either with
50120'-msse', or with '-m3dnowa'.  All of them generate the machine
50121instruction that is part of the name.
50122
50123     v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
50124     v8qi __builtin_ia32_pavgb (v8qi, v8qi)
50125     v4hi __builtin_ia32_pavgw (v4hi, v4hi)
50126     v1di __builtin_ia32_psadbw (v8qi, v8qi)
50127     v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
50128     v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
50129     v8qi __builtin_ia32_pminub (v8qi, v8qi)
50130     v4hi __builtin_ia32_pminsw (v4hi, v4hi)
50131     int __builtin_ia32_pmovmskb (v8qi)
50132     void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
50133     void __builtin_ia32_movntq (di *, di)
50134     void __builtin_ia32_sfence (void)
50135
50136 The following built-in functions are available when '-msse' is used.
50137All of them generate the machine instruction that is part of the name.
50138
50139     int __builtin_ia32_comieq (v4sf, v4sf)
50140     int __builtin_ia32_comineq (v4sf, v4sf)
50141     int __builtin_ia32_comilt (v4sf, v4sf)
50142     int __builtin_ia32_comile (v4sf, v4sf)
50143     int __builtin_ia32_comigt (v4sf, v4sf)
50144     int __builtin_ia32_comige (v4sf, v4sf)
50145     int __builtin_ia32_ucomieq (v4sf, v4sf)
50146     int __builtin_ia32_ucomineq (v4sf, v4sf)
50147     int __builtin_ia32_ucomilt (v4sf, v4sf)
50148     int __builtin_ia32_ucomile (v4sf, v4sf)
50149     int __builtin_ia32_ucomigt (v4sf, v4sf)
50150     int __builtin_ia32_ucomige (v4sf, v4sf)
50151     v4sf __builtin_ia32_addps (v4sf, v4sf)
50152     v4sf __builtin_ia32_subps (v4sf, v4sf)
50153     v4sf __builtin_ia32_mulps (v4sf, v4sf)
50154     v4sf __builtin_ia32_divps (v4sf, v4sf)
50155     v4sf __builtin_ia32_addss (v4sf, v4sf)
50156     v4sf __builtin_ia32_subss (v4sf, v4sf)
50157     v4sf __builtin_ia32_mulss (v4sf, v4sf)
50158     v4sf __builtin_ia32_divss (v4sf, v4sf)
50159     v4sf __builtin_ia32_cmpeqps (v4sf, v4sf)
50160     v4sf __builtin_ia32_cmpltps (v4sf, v4sf)
50161     v4sf __builtin_ia32_cmpleps (v4sf, v4sf)
50162     v4sf __builtin_ia32_cmpgtps (v4sf, v4sf)
50163     v4sf __builtin_ia32_cmpgeps (v4sf, v4sf)
50164     v4sf __builtin_ia32_cmpunordps (v4sf, v4sf)
50165     v4sf __builtin_ia32_cmpneqps (v4sf, v4sf)
50166     v4sf __builtin_ia32_cmpnltps (v4sf, v4sf)
50167     v4sf __builtin_ia32_cmpnleps (v4sf, v4sf)
50168     v4sf __builtin_ia32_cmpngtps (v4sf, v4sf)
50169     v4sf __builtin_ia32_cmpngeps (v4sf, v4sf)
50170     v4sf __builtin_ia32_cmpordps (v4sf, v4sf)
50171     v4sf __builtin_ia32_cmpeqss (v4sf, v4sf)
50172     v4sf __builtin_ia32_cmpltss (v4sf, v4sf)
50173     v4sf __builtin_ia32_cmpless (v4sf, v4sf)
50174     v4sf __builtin_ia32_cmpunordss (v4sf, v4sf)
50175     v4sf __builtin_ia32_cmpneqss (v4sf, v4sf)
50176     v4sf __builtin_ia32_cmpnltss (v4sf, v4sf)
50177     v4sf __builtin_ia32_cmpnless (v4sf, v4sf)
50178     v4sf __builtin_ia32_cmpordss (v4sf, v4sf)
50179     v4sf __builtin_ia32_maxps (v4sf, v4sf)
50180     v4sf __builtin_ia32_maxss (v4sf, v4sf)
50181     v4sf __builtin_ia32_minps (v4sf, v4sf)
50182     v4sf __builtin_ia32_minss (v4sf, v4sf)
50183     v4sf __builtin_ia32_andps (v4sf, v4sf)
50184     v4sf __builtin_ia32_andnps (v4sf, v4sf)
50185     v4sf __builtin_ia32_orps (v4sf, v4sf)
50186     v4sf __builtin_ia32_xorps (v4sf, v4sf)
50187     v4sf __builtin_ia32_movss (v4sf, v4sf)
50188     v4sf __builtin_ia32_movhlps (v4sf, v4sf)
50189     v4sf __builtin_ia32_movlhps (v4sf, v4sf)
50190     v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
50191     v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
50192     v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
50193     v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
50194     v2si __builtin_ia32_cvtps2pi (v4sf)
50195     int __builtin_ia32_cvtss2si (v4sf)
50196     v2si __builtin_ia32_cvttps2pi (v4sf)
50197     int __builtin_ia32_cvttss2si (v4sf)
50198     v4sf __builtin_ia32_rcpps (v4sf)
50199     v4sf __builtin_ia32_rsqrtps (v4sf)
50200     v4sf __builtin_ia32_sqrtps (v4sf)
50201     v4sf __builtin_ia32_rcpss (v4sf)
50202     v4sf __builtin_ia32_rsqrtss (v4sf)
50203     v4sf __builtin_ia32_sqrtss (v4sf)
50204     v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
50205     void __builtin_ia32_movntps (float *, v4sf)
50206     int __builtin_ia32_movmskps (v4sf)
50207
50208 The following built-in functions are available when '-msse' is used.
50209
50210'v4sf __builtin_ia32_loadups (float *)'
50211     Generates the 'movups' machine instruction as a load from memory.
50212'void __builtin_ia32_storeups (float *, v4sf)'
50213     Generates the 'movups' machine instruction as a store to memory.
50214'v4sf __builtin_ia32_loadss (float *)'
50215     Generates the 'movss' machine instruction as a load from memory.
50216'v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
50217     Generates the 'movhps' machine instruction as a load from memory.
50218'v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
50219     Generates the 'movlps' machine instruction as a load from memory
50220'void __builtin_ia32_storehps (v2sf *, v4sf)'
50221     Generates the 'movhps' machine instruction as a store to memory.
50222'void __builtin_ia32_storelps (v2sf *, v4sf)'
50223     Generates the 'movlps' machine instruction as a store to memory.
50224
50225 The following built-in functions are available when '-msse2' is used.
50226All of them generate the machine instruction that is part of the name.
50227
50228     int __builtin_ia32_comisdeq (v2df, v2df)
50229     int __builtin_ia32_comisdlt (v2df, v2df)
50230     int __builtin_ia32_comisdle (v2df, v2df)
50231     int __builtin_ia32_comisdgt (v2df, v2df)
50232     int __builtin_ia32_comisdge (v2df, v2df)
50233     int __builtin_ia32_comisdneq (v2df, v2df)
50234     int __builtin_ia32_ucomisdeq (v2df, v2df)
50235     int __builtin_ia32_ucomisdlt (v2df, v2df)
50236     int __builtin_ia32_ucomisdle (v2df, v2df)
50237     int __builtin_ia32_ucomisdgt (v2df, v2df)
50238     int __builtin_ia32_ucomisdge (v2df, v2df)
50239     int __builtin_ia32_ucomisdneq (v2df, v2df)
50240     v2df __builtin_ia32_cmpeqpd (v2df, v2df)
50241     v2df __builtin_ia32_cmpltpd (v2df, v2df)
50242     v2df __builtin_ia32_cmplepd (v2df, v2df)
50243     v2df __builtin_ia32_cmpgtpd (v2df, v2df)
50244     v2df __builtin_ia32_cmpgepd (v2df, v2df)
50245     v2df __builtin_ia32_cmpunordpd (v2df, v2df)
50246     v2df __builtin_ia32_cmpneqpd (v2df, v2df)
50247     v2df __builtin_ia32_cmpnltpd (v2df, v2df)
50248     v2df __builtin_ia32_cmpnlepd (v2df, v2df)
50249     v2df __builtin_ia32_cmpngtpd (v2df, v2df)
50250     v2df __builtin_ia32_cmpngepd (v2df, v2df)
50251     v2df __builtin_ia32_cmpordpd (v2df, v2df)
50252     v2df __builtin_ia32_cmpeqsd (v2df, v2df)
50253     v2df __builtin_ia32_cmpltsd (v2df, v2df)
50254     v2df __builtin_ia32_cmplesd (v2df, v2df)
50255     v2df __builtin_ia32_cmpunordsd (v2df, v2df)
50256     v2df __builtin_ia32_cmpneqsd (v2df, v2df)
50257     v2df __builtin_ia32_cmpnltsd (v2df, v2df)
50258     v2df __builtin_ia32_cmpnlesd (v2df, v2df)
50259     v2df __builtin_ia32_cmpordsd (v2df, v2df)
50260     v2di __builtin_ia32_paddq (v2di, v2di)
50261     v2di __builtin_ia32_psubq (v2di, v2di)
50262     v2df __builtin_ia32_addpd (v2df, v2df)
50263     v2df __builtin_ia32_subpd (v2df, v2df)
50264     v2df __builtin_ia32_mulpd (v2df, v2df)
50265     v2df __builtin_ia32_divpd (v2df, v2df)
50266     v2df __builtin_ia32_addsd (v2df, v2df)
50267     v2df __builtin_ia32_subsd (v2df, v2df)
50268     v2df __builtin_ia32_mulsd (v2df, v2df)
50269     v2df __builtin_ia32_divsd (v2df, v2df)
50270     v2df __builtin_ia32_minpd (v2df, v2df)
50271     v2df __builtin_ia32_maxpd (v2df, v2df)
50272     v2df __builtin_ia32_minsd (v2df, v2df)
50273     v2df __builtin_ia32_maxsd (v2df, v2df)
50274     v2df __builtin_ia32_andpd (v2df, v2df)
50275     v2df __builtin_ia32_andnpd (v2df, v2df)
50276     v2df __builtin_ia32_orpd (v2df, v2df)
50277     v2df __builtin_ia32_xorpd (v2df, v2df)
50278     v2df __builtin_ia32_movsd (v2df, v2df)
50279     v2df __builtin_ia32_unpckhpd (v2df, v2df)
50280     v2df __builtin_ia32_unpcklpd (v2df, v2df)
50281     v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
50282     v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
50283     v4si __builtin_ia32_paddd128 (v4si, v4si)
50284     v2di __builtin_ia32_paddq128 (v2di, v2di)
50285     v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
50286     v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
50287     v4si __builtin_ia32_psubd128 (v4si, v4si)
50288     v2di __builtin_ia32_psubq128 (v2di, v2di)
50289     v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
50290     v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
50291     v2di __builtin_ia32_pand128 (v2di, v2di)
50292     v2di __builtin_ia32_pandn128 (v2di, v2di)
50293     v2di __builtin_ia32_por128 (v2di, v2di)
50294     v2di __builtin_ia32_pxor128 (v2di, v2di)
50295     v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
50296     v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
50297     v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
50298     v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
50299     v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
50300     v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
50301     v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
50302     v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
50303     v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
50304     v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
50305     v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
50306     v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
50307     v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
50308     v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
50309     v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
50310     v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
50311     v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
50312     v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
50313     v4si __builtin_ia32_punpckldq128 (v4si, v4si)
50314     v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
50315     v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
50316     v8hi __builtin_ia32_packssdw128 (v4si, v4si)
50317     v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
50318     v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
50319     void __builtin_ia32_maskmovdqu (v16qi, v16qi)
50320     v2df __builtin_ia32_loadupd (double *)
50321     void __builtin_ia32_storeupd (double *, v2df)
50322     v2df __builtin_ia32_loadhpd (v2df, double const *)
50323     v2df __builtin_ia32_loadlpd (v2df, double const *)
50324     int __builtin_ia32_movmskpd (v2df)
50325     int __builtin_ia32_pmovmskb128 (v16qi)
50326     void __builtin_ia32_movnti (int *, int)
50327     void __builtin_ia32_movnti64 (long long int *, long long int)
50328     void __builtin_ia32_movntpd (double *, v2df)
50329     void __builtin_ia32_movntdq (v2df *, v2df)
50330     v4si __builtin_ia32_pshufd (v4si, int)
50331     v8hi __builtin_ia32_pshuflw (v8hi, int)
50332     v8hi __builtin_ia32_pshufhw (v8hi, int)
50333     v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
50334     v2df __builtin_ia32_sqrtpd (v2df)
50335     v2df __builtin_ia32_sqrtsd (v2df)
50336     v2df __builtin_ia32_shufpd (v2df, v2df, int)
50337     v2df __builtin_ia32_cvtdq2pd (v4si)
50338     v4sf __builtin_ia32_cvtdq2ps (v4si)
50339     v4si __builtin_ia32_cvtpd2dq (v2df)
50340     v2si __builtin_ia32_cvtpd2pi (v2df)
50341     v4sf __builtin_ia32_cvtpd2ps (v2df)
50342     v4si __builtin_ia32_cvttpd2dq (v2df)
50343     v2si __builtin_ia32_cvttpd2pi (v2df)
50344     v2df __builtin_ia32_cvtpi2pd (v2si)
50345     int __builtin_ia32_cvtsd2si (v2df)
50346     int __builtin_ia32_cvttsd2si (v2df)
50347     long long __builtin_ia32_cvtsd2si64 (v2df)
50348     long long __builtin_ia32_cvttsd2si64 (v2df)
50349     v4si __builtin_ia32_cvtps2dq (v4sf)
50350     v2df __builtin_ia32_cvtps2pd (v4sf)
50351     v4si __builtin_ia32_cvttps2dq (v4sf)
50352     v2df __builtin_ia32_cvtsi2sd (v2df, int)
50353     v2df __builtin_ia32_cvtsi642sd (v2df, long long)
50354     v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
50355     v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
50356     void __builtin_ia32_clflush (const void *)
50357     void __builtin_ia32_lfence (void)
50358     void __builtin_ia32_mfence (void)
50359     v16qi __builtin_ia32_loaddqu (const char *)
50360     void __builtin_ia32_storedqu (char *, v16qi)
50361     v1di __builtin_ia32_pmuludq (v2si, v2si)
50362     v2di __builtin_ia32_pmuludq128 (v4si, v4si)
50363     v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
50364     v4si __builtin_ia32_pslld128 (v4si, v4si)
50365     v2di __builtin_ia32_psllq128 (v2di, v2di)
50366     v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
50367     v4si __builtin_ia32_psrld128 (v4si, v4si)
50368     v2di __builtin_ia32_psrlq128 (v2di, v2di)
50369     v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
50370     v4si __builtin_ia32_psrad128 (v4si, v4si)
50371     v2di __builtin_ia32_pslldqi128 (v2di, int)
50372     v8hi __builtin_ia32_psllwi128 (v8hi, int)
50373     v4si __builtin_ia32_pslldi128 (v4si, int)
50374     v2di __builtin_ia32_psllqi128 (v2di, int)
50375     v2di __builtin_ia32_psrldqi128 (v2di, int)
50376     v8hi __builtin_ia32_psrlwi128 (v8hi, int)
50377     v4si __builtin_ia32_psrldi128 (v4si, int)
50378     v2di __builtin_ia32_psrlqi128 (v2di, int)
50379     v8hi __builtin_ia32_psrawi128 (v8hi, int)
50380     v4si __builtin_ia32_psradi128 (v4si, int)
50381     v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
50382     v2di __builtin_ia32_movq128 (v2di)
50383
50384 The following built-in functions are available when '-msse3' is used.
50385All of them generate the machine instruction that is part of the name.
50386
50387     v2df __builtin_ia32_addsubpd (v2df, v2df)
50388     v4sf __builtin_ia32_addsubps (v4sf, v4sf)
50389     v2df __builtin_ia32_haddpd (v2df, v2df)
50390     v4sf __builtin_ia32_haddps (v4sf, v4sf)
50391     v2df __builtin_ia32_hsubpd (v2df, v2df)
50392     v4sf __builtin_ia32_hsubps (v4sf, v4sf)
50393     v16qi __builtin_ia32_lddqu (char const *)
50394     void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
50395     v4sf __builtin_ia32_movshdup (v4sf)
50396     v4sf __builtin_ia32_movsldup (v4sf)
50397     void __builtin_ia32_mwait (unsigned int, unsigned int)
50398
50399 The following built-in functions are available when '-mssse3' is used.
50400All of them generate the machine instruction that is part of the name.
50401
50402     v2si __builtin_ia32_phaddd (v2si, v2si)
50403     v4hi __builtin_ia32_phaddw (v4hi, v4hi)
50404     v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
50405     v2si __builtin_ia32_phsubd (v2si, v2si)
50406     v4hi __builtin_ia32_phsubw (v4hi, v4hi)
50407     v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
50408     v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
50409     v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
50410     v8qi __builtin_ia32_pshufb (v8qi, v8qi)
50411     v8qi __builtin_ia32_psignb (v8qi, v8qi)
50412     v2si __builtin_ia32_psignd (v2si, v2si)
50413     v4hi __builtin_ia32_psignw (v4hi, v4hi)
50414     v1di __builtin_ia32_palignr (v1di, v1di, int)
50415     v8qi __builtin_ia32_pabsb (v8qi)
50416     v2si __builtin_ia32_pabsd (v2si)
50417     v4hi __builtin_ia32_pabsw (v4hi)
50418
50419 The following built-in functions are available when '-mssse3' is used.
50420All of them generate the machine instruction that is part of the name.
50421
50422     v4si __builtin_ia32_phaddd128 (v4si, v4si)
50423     v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
50424     v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
50425     v4si __builtin_ia32_phsubd128 (v4si, v4si)
50426     v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
50427     v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
50428     v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
50429     v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
50430     v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
50431     v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
50432     v4si __builtin_ia32_psignd128 (v4si, v4si)
50433     v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
50434     v2di __builtin_ia32_palignr128 (v2di, v2di, int)
50435     v16qi __builtin_ia32_pabsb128 (v16qi)
50436     v4si __builtin_ia32_pabsd128 (v4si)
50437     v8hi __builtin_ia32_pabsw128 (v8hi)
50438
50439 The following built-in functions are available when '-msse4.1' is used.
50440All of them generate the machine instruction that is part of the name.
50441
50442     v2df __builtin_ia32_blendpd (v2df, v2df, const int)
50443     v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
50444     v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
50445     v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
50446     v2df __builtin_ia32_dppd (v2df, v2df, const int)
50447     v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
50448     v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
50449     v2di __builtin_ia32_movntdqa (v2di *);
50450     v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
50451     v8hi __builtin_ia32_packusdw128 (v4si, v4si)
50452     v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
50453     v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
50454     v2di __builtin_ia32_pcmpeqq (v2di, v2di)
50455     v8hi __builtin_ia32_phminposuw128 (v8hi)
50456     v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
50457     v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
50458     v4si __builtin_ia32_pmaxud128 (v4si, v4si)
50459     v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
50460     v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
50461     v4si __builtin_ia32_pminsd128 (v4si, v4si)
50462     v4si __builtin_ia32_pminud128 (v4si, v4si)
50463     v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
50464     v4si __builtin_ia32_pmovsxbd128 (v16qi)
50465     v2di __builtin_ia32_pmovsxbq128 (v16qi)
50466     v8hi __builtin_ia32_pmovsxbw128 (v16qi)
50467     v2di __builtin_ia32_pmovsxdq128 (v4si)
50468     v4si __builtin_ia32_pmovsxwd128 (v8hi)
50469     v2di __builtin_ia32_pmovsxwq128 (v8hi)
50470     v4si __builtin_ia32_pmovzxbd128 (v16qi)
50471     v2di __builtin_ia32_pmovzxbq128 (v16qi)
50472     v8hi __builtin_ia32_pmovzxbw128 (v16qi)
50473     v2di __builtin_ia32_pmovzxdq128 (v4si)
50474     v4si __builtin_ia32_pmovzxwd128 (v8hi)
50475     v2di __builtin_ia32_pmovzxwq128 (v8hi)
50476     v2di __builtin_ia32_pmuldq128 (v4si, v4si)
50477     v4si __builtin_ia32_pmulld128 (v4si, v4si)
50478     int __builtin_ia32_ptestc128 (v2di, v2di)
50479     int __builtin_ia32_ptestnzc128 (v2di, v2di)
50480     int __builtin_ia32_ptestz128 (v2di, v2di)
50481     v2df __builtin_ia32_roundpd (v2df, const int)
50482     v4sf __builtin_ia32_roundps (v4sf, const int)
50483     v2df __builtin_ia32_roundsd (v2df, v2df, const int)
50484     v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
50485
50486 The following built-in functions are available when '-msse4.1' is used.
50487
50488'v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
50489     Generates the 'insertps' machine instruction.
50490'int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
50491     Generates the 'pextrb' machine instruction.
50492'v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
50493     Generates the 'pinsrb' machine instruction.
50494'v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
50495     Generates the 'pinsrd' machine instruction.
50496'v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
50497     Generates the 'pinsrq' machine instruction in 64bit mode.
50498
50499 The following built-in functions are changed to generate new SSE4.1
50500instructions when '-msse4.1' is used.
50501
50502'float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
50503     Generates the 'extractps' machine instruction.
50504'int __builtin_ia32_vec_ext_v4si (v4si, const int)'
50505     Generates the 'pextrd' machine instruction.
50506'long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
50507     Generates the 'pextrq' machine instruction in 64bit mode.
50508
50509 The following built-in functions are available when '-msse4.2' is used.
50510All of them generate the machine instruction that is part of the name.
50511
50512     v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
50513     int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
50514     int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
50515     int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
50516     int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
50517     int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
50518     int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
50519     v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
50520     int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
50521     int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
50522     int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
50523     int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
50524     int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
50525     int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
50526     v2di __builtin_ia32_pcmpgtq (v2di, v2di)
50527
50528 The following built-in functions are available when '-msse4.2' is used.
50529
50530'unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
50531     Generates the 'crc32b' machine instruction.
50532'unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
50533     Generates the 'crc32w' machine instruction.
50534'unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
50535     Generates the 'crc32l' machine instruction.
50536'unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
50537     Generates the 'crc32q' machine instruction.
50538
50539 The following built-in functions are changed to generate new SSE4.2
50540instructions when '-msse4.2' is used.
50541
50542'int __builtin_popcount (unsigned int)'
50543     Generates the 'popcntl' machine instruction.
50544'int __builtin_popcountl (unsigned long)'
50545     Generates the 'popcntl' or 'popcntq' machine instruction, depending
50546     on the size of 'unsigned long'.
50547'int __builtin_popcountll (unsigned long long)'
50548     Generates the 'popcntq' machine instruction.
50549
50550 The following built-in functions are available when '-mavx' is used.
50551All of them generate the machine instruction that is part of the name.
50552
50553     v4df __builtin_ia32_addpd256 (v4df,v4df)
50554     v8sf __builtin_ia32_addps256 (v8sf,v8sf)
50555     v4df __builtin_ia32_addsubpd256 (v4df,v4df)
50556     v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
50557     v4df __builtin_ia32_andnpd256 (v4df,v4df)
50558     v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
50559     v4df __builtin_ia32_andpd256 (v4df,v4df)
50560     v8sf __builtin_ia32_andps256 (v8sf,v8sf)
50561     v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
50562     v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
50563     v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
50564     v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
50565     v2df __builtin_ia32_cmppd (v2df,v2df,int)
50566     v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
50567     v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
50568     v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
50569     v2df __builtin_ia32_cmpsd (v2df,v2df,int)
50570     v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
50571     v4df __builtin_ia32_cvtdq2pd256 (v4si)
50572     v8sf __builtin_ia32_cvtdq2ps256 (v8si)
50573     v4si __builtin_ia32_cvtpd2dq256 (v4df)
50574     v4sf __builtin_ia32_cvtpd2ps256 (v4df)
50575     v8si __builtin_ia32_cvtps2dq256 (v8sf)
50576     v4df __builtin_ia32_cvtps2pd256 (v4sf)
50577     v4si __builtin_ia32_cvttpd2dq256 (v4df)
50578     v8si __builtin_ia32_cvttps2dq256 (v8sf)
50579     v4df __builtin_ia32_divpd256 (v4df,v4df)
50580     v8sf __builtin_ia32_divps256 (v8sf,v8sf)
50581     v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
50582     v4df __builtin_ia32_haddpd256 (v4df,v4df)
50583     v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
50584     v4df __builtin_ia32_hsubpd256 (v4df,v4df)
50585     v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
50586     v32qi __builtin_ia32_lddqu256 (pcchar)
50587     v32qi __builtin_ia32_loaddqu256 (pcchar)
50588     v4df __builtin_ia32_loadupd256 (pcdouble)
50589     v8sf __builtin_ia32_loadups256 (pcfloat)
50590     v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
50591     v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
50592     v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
50593     v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
50594     void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
50595     void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
50596     void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
50597     void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
50598     v4df __builtin_ia32_maxpd256 (v4df,v4df)
50599     v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
50600     v4df __builtin_ia32_minpd256 (v4df,v4df)
50601     v8sf __builtin_ia32_minps256 (v8sf,v8sf)
50602     v4df __builtin_ia32_movddup256 (v4df)
50603     int __builtin_ia32_movmskpd256 (v4df)
50604     int __builtin_ia32_movmskps256 (v8sf)
50605     v8sf __builtin_ia32_movshdup256 (v8sf)
50606     v8sf __builtin_ia32_movsldup256 (v8sf)
50607     v4df __builtin_ia32_mulpd256 (v4df,v4df)
50608     v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
50609     v4df __builtin_ia32_orpd256 (v4df,v4df)
50610     v8sf __builtin_ia32_orps256 (v8sf,v8sf)
50611     v2df __builtin_ia32_pd_pd256 (v4df)
50612     v4df __builtin_ia32_pd256_pd (v2df)
50613     v4sf __builtin_ia32_ps_ps256 (v8sf)
50614     v8sf __builtin_ia32_ps256_ps (v4sf)
50615     int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
50616     int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
50617     int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
50618     v8sf __builtin_ia32_rcpps256 (v8sf)
50619     v4df __builtin_ia32_roundpd256 (v4df,int)
50620     v8sf __builtin_ia32_roundps256 (v8sf,int)
50621     v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
50622     v8sf __builtin_ia32_rsqrtps256 (v8sf)
50623     v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
50624     v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
50625     v4si __builtin_ia32_si_si256 (v8si)
50626     v8si __builtin_ia32_si256_si (v4si)
50627     v4df __builtin_ia32_sqrtpd256 (v4df)
50628     v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
50629     v8sf __builtin_ia32_sqrtps256 (v8sf)
50630     void __builtin_ia32_storedqu256 (pchar,v32qi)
50631     void __builtin_ia32_storeupd256 (pdouble,v4df)
50632     void __builtin_ia32_storeups256 (pfloat,v8sf)
50633     v4df __builtin_ia32_subpd256 (v4df,v4df)
50634     v8sf __builtin_ia32_subps256 (v8sf,v8sf)
50635     v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
50636     v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
50637     v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
50638     v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
50639     v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
50640     v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
50641     v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
50642     v4sf __builtin_ia32_vbroadcastss (pcfloat)
50643     v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
50644     v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
50645     v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
50646     v4si __builtin_ia32_vextractf128_si256 (v8si,int)
50647     v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
50648     v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
50649     v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
50650     v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
50651     v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
50652     v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
50653     v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
50654     v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
50655     v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
50656     v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
50657     v2df __builtin_ia32_vpermilpd (v2df,int)
50658     v4df __builtin_ia32_vpermilpd256 (v4df,int)
50659     v4sf __builtin_ia32_vpermilps (v4sf,int)
50660     v8sf __builtin_ia32_vpermilps256 (v8sf,int)
50661     v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
50662     v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
50663     v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
50664     v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
50665     int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
50666     int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
50667     int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
50668     int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
50669     int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
50670     int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
50671     int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
50672     int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
50673     int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
50674     int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
50675     int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
50676     int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
50677     void __builtin_ia32_vzeroall (void)
50678     void __builtin_ia32_vzeroupper (void)
50679     v4df __builtin_ia32_xorpd256 (v4df,v4df)
50680     v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
50681
50682 The following built-in functions are available when '-mavx2' is used.
50683All of them generate the machine instruction that is part of the name.
50684
50685     v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int)
50686     v32qi __builtin_ia32_pabsb256 (v32qi)
50687     v16hi __builtin_ia32_pabsw256 (v16hi)
50688     v8si __builtin_ia32_pabsd256 (v8si)
50689     v16hi __builtin_ia32_packssdw256 (v8si,v8si)
50690     v32qi __builtin_ia32_packsswb256 (v16hi,v16hi)
50691     v16hi __builtin_ia32_packusdw256 (v8si,v8si)
50692     v32qi __builtin_ia32_packuswb256 (v16hi,v16hi)
50693     v32qi __builtin_ia32_paddb256 (v32qi,v32qi)
50694     v16hi __builtin_ia32_paddw256 (v16hi,v16hi)
50695     v8si __builtin_ia32_paddd256 (v8si,v8si)
50696     v4di __builtin_ia32_paddq256 (v4di,v4di)
50697     v32qi __builtin_ia32_paddsb256 (v32qi,v32qi)
50698     v16hi __builtin_ia32_paddsw256 (v16hi,v16hi)
50699     v32qi __builtin_ia32_paddusb256 (v32qi,v32qi)
50700     v16hi __builtin_ia32_paddusw256 (v16hi,v16hi)
50701     v4di __builtin_ia32_palignr256 (v4di,v4di,int)
50702     v4di __builtin_ia32_andsi256 (v4di,v4di)
50703     v4di __builtin_ia32_andnotsi256 (v4di,v4di)
50704     v32qi __builtin_ia32_pavgb256 (v32qi,v32qi)
50705     v16hi __builtin_ia32_pavgw256 (v16hi,v16hi)
50706     v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi)
50707     v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int)
50708     v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi)
50709     v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi)
50710     v8si __builtin_ia32_pcmpeqd256 (c8si,v8si)
50711     v4di __builtin_ia32_pcmpeqq256 (v4di,v4di)
50712     v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi)
50713     v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi)
50714     v8si __builtin_ia32_pcmpgtd256 (v8si,v8si)
50715     v4di __builtin_ia32_pcmpgtq256 (v4di,v4di)
50716     v16hi __builtin_ia32_phaddw256 (v16hi,v16hi)
50717     v8si __builtin_ia32_phaddd256 (v8si,v8si)
50718     v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi)
50719     v16hi __builtin_ia32_phsubw256 (v16hi,v16hi)
50720     v8si __builtin_ia32_phsubd256 (v8si,v8si)
50721     v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi)
50722     v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi)
50723     v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi)
50724     v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi)
50725     v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi)
50726     v8si __builtin_ia32_pmaxsd256 (v8si,v8si)
50727     v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi)
50728     v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi)
50729     v8si __builtin_ia32_pmaxud256 (v8si,v8si)
50730     v32qi __builtin_ia32_pminsb256 (v32qi,v32qi)
50731     v16hi __builtin_ia32_pminsw256 (v16hi,v16hi)
50732     v8si __builtin_ia32_pminsd256 (v8si,v8si)
50733     v32qi __builtin_ia32_pminub256 (v32qi,v32qi)
50734     v16hi __builtin_ia32_pminuw256 (v16hi,v16hi)
50735     v8si __builtin_ia32_pminud256 (v8si,v8si)
50736     int __builtin_ia32_pmovmskb256 (v32qi)
50737     v16hi __builtin_ia32_pmovsxbw256 (v16qi)
50738     v8si __builtin_ia32_pmovsxbd256 (v16qi)
50739     v4di __builtin_ia32_pmovsxbq256 (v16qi)
50740     v8si __builtin_ia32_pmovsxwd256 (v8hi)
50741     v4di __builtin_ia32_pmovsxwq256 (v8hi)
50742     v4di __builtin_ia32_pmovsxdq256 (v4si)
50743     v16hi __builtin_ia32_pmovzxbw256 (v16qi)
50744     v8si __builtin_ia32_pmovzxbd256 (v16qi)
50745     v4di __builtin_ia32_pmovzxbq256 (v16qi)
50746     v8si __builtin_ia32_pmovzxwd256 (v8hi)
50747     v4di __builtin_ia32_pmovzxwq256 (v8hi)
50748     v4di __builtin_ia32_pmovzxdq256 (v4si)
50749     v4di __builtin_ia32_pmuldq256 (v8si,v8si)
50750     v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi)
50751     v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi)
50752     v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi)
50753     v16hi __builtin_ia32_pmullw256 (v16hi,v16hi)
50754     v8si __builtin_ia32_pmulld256 (v8si,v8si)
50755     v4di __builtin_ia32_pmuludq256 (v8si,v8si)
50756     v4di __builtin_ia32_por256 (v4di,v4di)
50757     v16hi __builtin_ia32_psadbw256 (v32qi,v32qi)
50758     v32qi __builtin_ia32_pshufb256 (v32qi,v32qi)
50759     v8si __builtin_ia32_pshufd256 (v8si,int)
50760     v16hi __builtin_ia32_pshufhw256 (v16hi,int)
50761     v16hi __builtin_ia32_pshuflw256 (v16hi,int)
50762     v32qi __builtin_ia32_psignb256 (v32qi,v32qi)
50763     v16hi __builtin_ia32_psignw256 (v16hi,v16hi)
50764     v8si __builtin_ia32_psignd256 (v8si,v8si)
50765     v4di __builtin_ia32_pslldqi256 (v4di,int)
50766     v16hi __builtin_ia32_psllwi256 (16hi,int)
50767     v16hi __builtin_ia32_psllw256(v16hi,v8hi)
50768     v8si __builtin_ia32_pslldi256 (v8si,int)
50769     v8si __builtin_ia32_pslld256(v8si,v4si)
50770     v4di __builtin_ia32_psllqi256 (v4di,int)
50771     v4di __builtin_ia32_psllq256(v4di,v2di)
50772     v16hi __builtin_ia32_psrawi256 (v16hi,int)
50773     v16hi __builtin_ia32_psraw256 (v16hi,v8hi)
50774     v8si __builtin_ia32_psradi256 (v8si,int)
50775     v8si __builtin_ia32_psrad256 (v8si,v4si)
50776     v4di __builtin_ia32_psrldqi256 (v4di, int)
50777     v16hi __builtin_ia32_psrlwi256 (v16hi,int)
50778     v16hi __builtin_ia32_psrlw256 (v16hi,v8hi)
50779     v8si __builtin_ia32_psrldi256 (v8si,int)
50780     v8si __builtin_ia32_psrld256 (v8si,v4si)
50781     v4di __builtin_ia32_psrlqi256 (v4di,int)
50782     v4di __builtin_ia32_psrlq256(v4di,v2di)
50783     v32qi __builtin_ia32_psubb256 (v32qi,v32qi)
50784     v32hi __builtin_ia32_psubw256 (v16hi,v16hi)
50785     v8si __builtin_ia32_psubd256 (v8si,v8si)
50786     v4di __builtin_ia32_psubq256 (v4di,v4di)
50787     v32qi __builtin_ia32_psubsb256 (v32qi,v32qi)
50788     v16hi __builtin_ia32_psubsw256 (v16hi,v16hi)
50789     v32qi __builtin_ia32_psubusb256 (v32qi,v32qi)
50790     v16hi __builtin_ia32_psubusw256 (v16hi,v16hi)
50791     v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi)
50792     v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi)
50793     v8si __builtin_ia32_punpckhdq256 (v8si,v8si)
50794     v4di __builtin_ia32_punpckhqdq256 (v4di,v4di)
50795     v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi)
50796     v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi)
50797     v8si __builtin_ia32_punpckldq256 (v8si,v8si)
50798     v4di __builtin_ia32_punpcklqdq256 (v4di,v4di)
50799     v4di __builtin_ia32_pxor256 (v4di,v4di)
50800     v4di __builtin_ia32_movntdqa256 (pv4di)
50801     v4sf __builtin_ia32_vbroadcastss_ps (v4sf)
50802     v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf)
50803     v4df __builtin_ia32_vbroadcastsd_pd256 (v2df)
50804     v4di __builtin_ia32_vbroadcastsi256 (v2di)
50805     v4si __builtin_ia32_pblendd128 (v4si,v4si)
50806     v8si __builtin_ia32_pblendd256 (v8si,v8si)
50807     v32qi __builtin_ia32_pbroadcastb256 (v16qi)
50808     v16hi __builtin_ia32_pbroadcastw256 (v8hi)
50809     v8si __builtin_ia32_pbroadcastd256 (v4si)
50810     v4di __builtin_ia32_pbroadcastq256 (v2di)
50811     v16qi __builtin_ia32_pbroadcastb128 (v16qi)
50812     v8hi __builtin_ia32_pbroadcastw128 (v8hi)
50813     v4si __builtin_ia32_pbroadcastd128 (v4si)
50814     v2di __builtin_ia32_pbroadcastq128 (v2di)
50815     v8si __builtin_ia32_permvarsi256 (v8si,v8si)
50816     v4df __builtin_ia32_permdf256 (v4df,int)
50817     v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf)
50818     v4di __builtin_ia32_permdi256 (v4di,int)
50819     v4di __builtin_ia32_permti256 (v4di,v4di,int)
50820     v4di __builtin_ia32_extract128i256 (v4di,int)
50821     v4di __builtin_ia32_insert128i256 (v4di,v2di,int)
50822     v8si __builtin_ia32_maskloadd256 (pcv8si,v8si)
50823     v4di __builtin_ia32_maskloadq256 (pcv4di,v4di)
50824     v4si __builtin_ia32_maskloadd (pcv4si,v4si)
50825     v2di __builtin_ia32_maskloadq (pcv2di,v2di)
50826     void __builtin_ia32_maskstored256 (pv8si,v8si,v8si)
50827     void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di)
50828     void __builtin_ia32_maskstored (pv4si,v4si,v4si)
50829     void __builtin_ia32_maskstoreq (pv2di,v2di,v2di)
50830     v8si __builtin_ia32_psllv8si (v8si,v8si)
50831     v4si __builtin_ia32_psllv4si (v4si,v4si)
50832     v4di __builtin_ia32_psllv4di (v4di,v4di)
50833     v2di __builtin_ia32_psllv2di (v2di,v2di)
50834     v8si __builtin_ia32_psrav8si (v8si,v8si)
50835     v4si __builtin_ia32_psrav4si (v4si,v4si)
50836     v8si __builtin_ia32_psrlv8si (v8si,v8si)
50837     v4si __builtin_ia32_psrlv4si (v4si,v4si)
50838     v4di __builtin_ia32_psrlv4di (v4di,v4di)
50839     v2di __builtin_ia32_psrlv2di (v2di,v2di)
50840     v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int)
50841     v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int)
50842     v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int)
50843     v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int)
50844     v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int)
50845     v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int)
50846     v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int)
50847     v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int)
50848     v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int)
50849     v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int)
50850     v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int)
50851     v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int)
50852     v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int)
50853     v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int)
50854     v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int)
50855     v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int)
50856
50857 The following built-in functions are available when '-maes' is used.
50858All of them generate the machine instruction that is part of the name.
50859
50860     v2di __builtin_ia32_aesenc128 (v2di, v2di)
50861     v2di __builtin_ia32_aesenclast128 (v2di, v2di)
50862     v2di __builtin_ia32_aesdec128 (v2di, v2di)
50863     v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
50864     v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
50865     v2di __builtin_ia32_aesimc128 (v2di)
50866
50867 The following built-in function is available when '-mpclmul' is used.
50868
50869'v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
50870     Generates the 'pclmulqdq' machine instruction.
50871
50872 The following built-in function is available when '-mfsgsbase' is used.
50873All of them generate the machine instruction that is part of the name.
50874
50875     unsigned int __builtin_ia32_rdfsbase32 (void)
50876     unsigned long long __builtin_ia32_rdfsbase64 (void)
50877     unsigned int __builtin_ia32_rdgsbase32 (void)
50878     unsigned long long __builtin_ia32_rdgsbase64 (void)
50879     void _writefsbase_u32 (unsigned int)
50880     void _writefsbase_u64 (unsigned long long)
50881     void _writegsbase_u32 (unsigned int)
50882     void _writegsbase_u64 (unsigned long long)
50883
50884 The following built-in function is available when '-mrdrnd' is used.
50885All of them generate the machine instruction that is part of the name.
50886
50887     unsigned int __builtin_ia32_rdrand16_step (unsigned short *)
50888     unsigned int __builtin_ia32_rdrand32_step (unsigned int *)
50889     unsigned int __builtin_ia32_rdrand64_step (unsigned long long *)
50890
50891 The following built-in function is available when '-mptwrite' is used.
50892All of them generate the machine instruction that is part of the name.
50893
50894     void __builtin_ia32_ptwrite32 (unsigned)
50895     void __builtin_ia32_ptwrite64 (unsigned long long)
50896
50897 The following built-in functions are available when '-msse4a' is used.
50898All of them generate the machine instruction that is part of the name.
50899
50900     void __builtin_ia32_movntsd (double *, v2df)
50901     void __builtin_ia32_movntss (float *, v4sf)
50902     v2di __builtin_ia32_extrq  (v2di, v16qi)
50903     v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
50904     v2di __builtin_ia32_insertq (v2di, v2di)
50905     v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
50906
50907 The following built-in functions are available when '-mxop' is used.
50908     v2df __builtin_ia32_vfrczpd (v2df)
50909     v4sf __builtin_ia32_vfrczps (v4sf)
50910     v2df __builtin_ia32_vfrczsd (v2df)
50911     v4sf __builtin_ia32_vfrczss (v4sf)
50912     v4df __builtin_ia32_vfrczpd256 (v4df)
50913     v8sf __builtin_ia32_vfrczps256 (v8sf)
50914     v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
50915     v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di)
50916     v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si)
50917     v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi)
50918     v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi)
50919     v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df)
50920     v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf)
50921     v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di)
50922     v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si)
50923     v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi)
50924     v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi)
50925     v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df)
50926     v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf)
50927     v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi)
50928     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
50929     v4si __builtin_ia32_vpcomeqd (v4si, v4si)
50930     v2di __builtin_ia32_vpcomeqq (v2di, v2di)
50931     v16qi __builtin_ia32_vpcomequb (v16qi, v16qi)
50932     v4si __builtin_ia32_vpcomequd (v4si, v4si)
50933     v2di __builtin_ia32_vpcomequq (v2di, v2di)
50934     v8hi __builtin_ia32_vpcomequw (v8hi, v8hi)
50935     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
50936     v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi)
50937     v4si __builtin_ia32_vpcomfalsed (v4si, v4si)
50938     v2di __builtin_ia32_vpcomfalseq (v2di, v2di)
50939     v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi)
50940     v4si __builtin_ia32_vpcomfalseud (v4si, v4si)
50941     v2di __builtin_ia32_vpcomfalseuq (v2di, v2di)
50942     v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi)
50943     v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi)
50944     v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi)
50945     v4si __builtin_ia32_vpcomged (v4si, v4si)
50946     v2di __builtin_ia32_vpcomgeq (v2di, v2di)
50947     v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi)
50948     v4si __builtin_ia32_vpcomgeud (v4si, v4si)
50949     v2di __builtin_ia32_vpcomgeuq (v2di, v2di)
50950     v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi)
50951     v8hi __builtin_ia32_vpcomgew (v8hi, v8hi)
50952     v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi)
50953     v4si __builtin_ia32_vpcomgtd (v4si, v4si)
50954     v2di __builtin_ia32_vpcomgtq (v2di, v2di)
50955     v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi)
50956     v4si __builtin_ia32_vpcomgtud (v4si, v4si)
50957     v2di __builtin_ia32_vpcomgtuq (v2di, v2di)
50958     v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi)
50959     v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi)
50960     v16qi __builtin_ia32_vpcomleb (v16qi, v16qi)
50961     v4si __builtin_ia32_vpcomled (v4si, v4si)
50962     v2di __builtin_ia32_vpcomleq (v2di, v2di)
50963     v16qi __builtin_ia32_vpcomleub (v16qi, v16qi)
50964     v4si __builtin_ia32_vpcomleud (v4si, v4si)
50965     v2di __builtin_ia32_vpcomleuq (v2di, v2di)
50966     v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi)
50967     v8hi __builtin_ia32_vpcomlew (v8hi, v8hi)
50968     v16qi __builtin_ia32_vpcomltb (v16qi, v16qi)
50969     v4si __builtin_ia32_vpcomltd (v4si, v4si)
50970     v2di __builtin_ia32_vpcomltq (v2di, v2di)
50971     v16qi __builtin_ia32_vpcomltub (v16qi, v16qi)
50972     v4si __builtin_ia32_vpcomltud (v4si, v4si)
50973     v2di __builtin_ia32_vpcomltuq (v2di, v2di)
50974     v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi)
50975     v8hi __builtin_ia32_vpcomltw (v8hi, v8hi)
50976     v16qi __builtin_ia32_vpcomneb (v16qi, v16qi)
50977     v4si __builtin_ia32_vpcomned (v4si, v4si)
50978     v2di __builtin_ia32_vpcomneq (v2di, v2di)
50979     v16qi __builtin_ia32_vpcomneub (v16qi, v16qi)
50980     v4si __builtin_ia32_vpcomneud (v4si, v4si)
50981     v2di __builtin_ia32_vpcomneuq (v2di, v2di)
50982     v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi)
50983     v8hi __builtin_ia32_vpcomnew (v8hi, v8hi)
50984     v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi)
50985     v4si __builtin_ia32_vpcomtrued (v4si, v4si)
50986     v2di __builtin_ia32_vpcomtrueq (v2di, v2di)
50987     v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi)
50988     v4si __builtin_ia32_vpcomtrueud (v4si, v4si)
50989     v2di __builtin_ia32_vpcomtrueuq (v2di, v2di)
50990     v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi)
50991     v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi)
50992     v4si __builtin_ia32_vphaddbd (v16qi)
50993     v2di __builtin_ia32_vphaddbq (v16qi)
50994     v8hi __builtin_ia32_vphaddbw (v16qi)
50995     v2di __builtin_ia32_vphadddq (v4si)
50996     v4si __builtin_ia32_vphaddubd (v16qi)
50997     v2di __builtin_ia32_vphaddubq (v16qi)
50998     v8hi __builtin_ia32_vphaddubw (v16qi)
50999     v2di __builtin_ia32_vphaddudq (v4si)
51000     v4si __builtin_ia32_vphadduwd (v8hi)
51001     v2di __builtin_ia32_vphadduwq (v8hi)
51002     v4si __builtin_ia32_vphaddwd (v8hi)
51003     v2di __builtin_ia32_vphaddwq (v8hi)
51004     v8hi __builtin_ia32_vphsubbw (v16qi)
51005     v2di __builtin_ia32_vphsubdq (v4si)
51006     v4si __builtin_ia32_vphsubwd (v8hi)
51007     v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si)
51008     v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di)
51009     v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di)
51010     v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si)
51011     v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di)
51012     v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di)
51013     v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si)
51014     v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi)
51015     v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si)
51016     v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi)
51017     v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si)
51018     v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si)
51019     v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi)
51020     v16qi __builtin_ia32_vprotb (v16qi, v16qi)
51021     v4si __builtin_ia32_vprotd (v4si, v4si)
51022     v2di __builtin_ia32_vprotq (v2di, v2di)
51023     v8hi __builtin_ia32_vprotw (v8hi, v8hi)
51024     v16qi __builtin_ia32_vpshab (v16qi, v16qi)
51025     v4si __builtin_ia32_vpshad (v4si, v4si)
51026     v2di __builtin_ia32_vpshaq (v2di, v2di)
51027     v8hi __builtin_ia32_vpshaw (v8hi, v8hi)
51028     v16qi __builtin_ia32_vpshlb (v16qi, v16qi)
51029     v4si __builtin_ia32_vpshld (v4si, v4si)
51030     v2di __builtin_ia32_vpshlq (v2di, v2di)
51031     v8hi __builtin_ia32_vpshlw (v8hi, v8hi)
51032
51033 The following built-in functions are available when '-mfma4' is used.
51034All of them generate the machine instruction that is part of the name.
51035
51036     v2df __builtin_ia32_vfmaddpd (v2df, v2df, v2df)
51037     v4sf __builtin_ia32_vfmaddps (v4sf, v4sf, v4sf)
51038     v2df __builtin_ia32_vfmaddsd (v2df, v2df, v2df)
51039     v4sf __builtin_ia32_vfmaddss (v4sf, v4sf, v4sf)
51040     v2df __builtin_ia32_vfmsubpd (v2df, v2df, v2df)
51041     v4sf __builtin_ia32_vfmsubps (v4sf, v4sf, v4sf)
51042     v2df __builtin_ia32_vfmsubsd (v2df, v2df, v2df)
51043     v4sf __builtin_ia32_vfmsubss (v4sf, v4sf, v4sf)
51044     v2df __builtin_ia32_vfnmaddpd (v2df, v2df, v2df)
51045     v4sf __builtin_ia32_vfnmaddps (v4sf, v4sf, v4sf)
51046     v2df __builtin_ia32_vfnmaddsd (v2df, v2df, v2df)
51047     v4sf __builtin_ia32_vfnmaddss (v4sf, v4sf, v4sf)
51048     v2df __builtin_ia32_vfnmsubpd (v2df, v2df, v2df)
51049     v4sf __builtin_ia32_vfnmsubps (v4sf, v4sf, v4sf)
51050     v2df __builtin_ia32_vfnmsubsd (v2df, v2df, v2df)
51051     v4sf __builtin_ia32_vfnmsubss (v4sf, v4sf, v4sf)
51052     v2df __builtin_ia32_vfmaddsubpd  (v2df, v2df, v2df)
51053     v4sf __builtin_ia32_vfmaddsubps  (v4sf, v4sf, v4sf)
51054     v2df __builtin_ia32_vfmsubaddpd  (v2df, v2df, v2df)
51055     v4sf __builtin_ia32_vfmsubaddps  (v4sf, v4sf, v4sf)
51056     v4df __builtin_ia32_vfmaddpd256 (v4df, v4df, v4df)
51057     v8sf __builtin_ia32_vfmaddps256 (v8sf, v8sf, v8sf)
51058     v4df __builtin_ia32_vfmsubpd256 (v4df, v4df, v4df)
51059     v8sf __builtin_ia32_vfmsubps256 (v8sf, v8sf, v8sf)
51060     v4df __builtin_ia32_vfnmaddpd256 (v4df, v4df, v4df)
51061     v8sf __builtin_ia32_vfnmaddps256 (v8sf, v8sf, v8sf)
51062     v4df __builtin_ia32_vfnmsubpd256 (v4df, v4df, v4df)
51063     v8sf __builtin_ia32_vfnmsubps256 (v8sf, v8sf, v8sf)
51064     v4df __builtin_ia32_vfmaddsubpd256 (v4df, v4df, v4df)
51065     v8sf __builtin_ia32_vfmaddsubps256 (v8sf, v8sf, v8sf)
51066     v4df __builtin_ia32_vfmsubaddpd256 (v4df, v4df, v4df)
51067     v8sf __builtin_ia32_vfmsubaddps256 (v8sf, v8sf, v8sf)
51068
51069
51070 The following built-in functions are available when '-mlwp' is used.
51071
51072     void __builtin_ia32_llwpcb16 (void *);
51073     void __builtin_ia32_llwpcb32 (void *);
51074     void __builtin_ia32_llwpcb64 (void *);
51075     void * __builtin_ia32_llwpcb16 (void);
51076     void * __builtin_ia32_llwpcb32 (void);
51077     void * __builtin_ia32_llwpcb64 (void);
51078     void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short)
51079     void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int)
51080     void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int)
51081     unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short)
51082     unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int)
51083     unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int)
51084
51085 The following built-in functions are available when '-mbmi' is used.
51086All of them generate the machine instruction that is part of the name.
51087     unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
51088     unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
51089
51090 The following built-in functions are available when '-mbmi2' is used.
51091All of them generate the machine instruction that is part of the name.
51092     unsigned int _bzhi_u32 (unsigned int, unsigned int)
51093     unsigned int _pdep_u32 (unsigned int, unsigned int)
51094     unsigned int _pext_u32 (unsigned int, unsigned int)
51095     unsigned long long _bzhi_u64 (unsigned long long, unsigned long long)
51096     unsigned long long _pdep_u64 (unsigned long long, unsigned long long)
51097     unsigned long long _pext_u64 (unsigned long long, unsigned long long)
51098
51099 The following built-in functions are available when '-mlzcnt' is used.
51100All of them generate the machine instruction that is part of the name.
51101     unsigned short __builtin_ia32_lzcnt_u16(unsigned short);
51102     unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
51103     unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
51104
51105 The following built-in functions are available when '-mfxsr' is used.
51106All of them generate the machine instruction that is part of the name.
51107     void __builtin_ia32_fxsave (void *)
51108     void __builtin_ia32_fxrstor (void *)
51109     void __builtin_ia32_fxsave64 (void *)
51110     void __builtin_ia32_fxrstor64 (void *)
51111
51112 The following built-in functions are available when '-mxsave' is used.
51113All of them generate the machine instruction that is part of the name.
51114     void __builtin_ia32_xsave (void *, long long)
51115     void __builtin_ia32_xrstor (void *, long long)
51116     void __builtin_ia32_xsave64 (void *, long long)
51117     void __builtin_ia32_xrstor64 (void *, long long)
51118
51119 The following built-in functions are available when '-mxsaveopt' is
51120used.  All of them generate the machine instruction that is part of the
51121name.
51122     void __builtin_ia32_xsaveopt (void *, long long)
51123     void __builtin_ia32_xsaveopt64 (void *, long long)
51124
51125 The following built-in functions are available when '-mtbm' is used.
51126Both of them generate the immediate form of the bextr machine
51127instruction.
51128     unsigned int __builtin_ia32_bextri_u32 (unsigned int,
51129                                             const unsigned int);
51130     unsigned long long __builtin_ia32_bextri_u64 (unsigned long long,
51131                                                   const unsigned long long);
51132
51133 The following built-in functions are available when '-m3dnow' is used.
51134All of them generate the machine instruction that is part of the name.
51135
51136     void __builtin_ia32_femms (void)
51137     v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
51138     v2si __builtin_ia32_pf2id (v2sf)
51139     v2sf __builtin_ia32_pfacc (v2sf, v2sf)
51140     v2sf __builtin_ia32_pfadd (v2sf, v2sf)
51141     v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
51142     v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
51143     v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
51144     v2sf __builtin_ia32_pfmax (v2sf, v2sf)
51145     v2sf __builtin_ia32_pfmin (v2sf, v2sf)
51146     v2sf __builtin_ia32_pfmul (v2sf, v2sf)
51147     v2sf __builtin_ia32_pfrcp (v2sf)
51148     v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
51149     v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
51150     v2sf __builtin_ia32_pfrsqrt (v2sf)
51151     v2sf __builtin_ia32_pfsub (v2sf, v2sf)
51152     v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
51153     v2sf __builtin_ia32_pi2fd (v2si)
51154     v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
51155
51156 The following built-in functions are available when '-m3dnowa' is used.
51157All of them generate the machine instruction that is part of the name.
51158
51159     v2si __builtin_ia32_pf2iw (v2sf)
51160     v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
51161     v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
51162     v2sf __builtin_ia32_pi2fw (v2si)
51163     v2sf __builtin_ia32_pswapdsf (v2sf)
51164     v2si __builtin_ia32_pswapdsi (v2si)
51165
51166 The following built-in functions are available when '-mrtm' is used
51167They are used for restricted transactional memory.  These are the
51168internal low level functions.  Normally the functions in *note x86
51169transactional memory intrinsics:: should be used instead.
51170
51171     int __builtin_ia32_xbegin ()
51172     void __builtin_ia32_xend ()
51173     void __builtin_ia32_xabort (status)
51174     int __builtin_ia32_xtest ()
51175
51176 The following built-in functions are available when '-mmwaitx' is used.
51177All of them generate the machine instruction that is part of the name.
51178     void __builtin_ia32_monitorx (void *, unsigned int, unsigned int)
51179     void __builtin_ia32_mwaitx (unsigned int, unsigned int, unsigned int)
51180
51181 The following built-in functions are available when '-mclzero' is used.
51182All of them generate the machine instruction that is part of the name.
51183     void __builtin_i32_clzero (void *)
51184
51185 The following built-in functions are available when '-mpku' is used.
51186They generate reads and writes to PKRU.
51187     void __builtin_ia32_wrpkru (unsigned int)
51188     unsigned int __builtin_ia32_rdpkru ()
51189
51190 The following built-in functions are available when '-mcet' or
51191'-mshstk' option is used.  They support shadow stack machine
51192instructions from Intel Control-flow Enforcement Technology (CET). Each
51193built-in function generates the machine instruction that is part of the
51194function's name.  These are the internal low-level functions.  Normally
51195the functions in *note x86 control-flow protection intrinsics:: should
51196be used instead.
51197
51198     unsigned int __builtin_ia32_rdsspd (void)
51199     unsigned long long __builtin_ia32_rdsspq (void)
51200     void __builtin_ia32_incsspd (unsigned int)
51201     void __builtin_ia32_incsspq (unsigned long long)
51202     void __builtin_ia32_saveprevssp(void);
51203     void __builtin_ia32_rstorssp(void *);
51204     void __builtin_ia32_wrssd(unsigned int, void *);
51205     void __builtin_ia32_wrssq(unsigned long long, void *);
51206     void __builtin_ia32_wrussd(unsigned int, void *);
51207     void __builtin_ia32_wrussq(unsigned long long, void *);
51208     void __builtin_ia32_setssbsy(void);
51209     void __builtin_ia32_clrssbsy(void *);
51210
51211
51212File: gcc.info,  Node: x86 transactional memory intrinsics,  Next: x86 control-flow protection intrinsics,  Prev: x86 Built-in Functions,  Up: Target Builtins
51213
512146.60.34 x86 Transactional Memory Intrinsics
51215-------------------------------------------
51216
51217These hardware transactional memory intrinsics for x86 allow you to use
51218memory transactions with RTM (Restricted Transactional Memory).  This
51219support is enabled with the '-mrtm' option.  For using HLE (Hardware
51220Lock Elision) see *note x86 specific memory model extensions for
51221transactional memory:: instead.
51222
51223 A memory transaction commits all changes to memory in an atomic way, as
51224visible to other threads.  If the transaction fails it is rolled back
51225and all side effects discarded.
51226
51227 Generally there is no guarantee that a memory transaction ever succeeds
51228and suitable fallback code always needs to be supplied.
51229
51230 -- RTM Function: unsigned _xbegin ()
51231     Start a RTM (Restricted Transactional Memory) transaction.  Returns
51232     '_XBEGIN_STARTED' when the transaction started successfully (note
51233     this is not 0, so the constant has to be explicitly tested).
51234
51235     If the transaction aborts, all side effects are undone and an abort
51236     code encoded as a bit mask is returned.  The following macros are
51237     defined:
51238
51239     '_XABORT_EXPLICIT'
51240          Transaction was explicitly aborted with '_xabort'.  The
51241          parameter passed to '_xabort' is available with
51242          '_XABORT_CODE(status)'.
51243     '_XABORT_RETRY'
51244          Transaction retry is possible.
51245     '_XABORT_CONFLICT'
51246          Transaction abort due to a memory conflict with another
51247          thread.
51248     '_XABORT_CAPACITY'
51249          Transaction abort due to the transaction using too much
51250          memory.
51251     '_XABORT_DEBUG'
51252          Transaction abort due to a debug trap.
51253     '_XABORT_NESTED'
51254          Transaction abort in an inner nested transaction.
51255
51256     There is no guarantee any transaction ever succeeds, so there
51257     always needs to be a valid fallback path.
51258
51259 -- RTM Function: void _xend ()
51260     Commit the current transaction.  When no transaction is active this
51261     faults.  All memory side effects of the transaction become visible
51262     to other threads in an atomic manner.
51263
51264 -- RTM Function: int _xtest ()
51265     Return a nonzero value if a transaction is currently active,
51266     otherwise 0.
51267
51268 -- RTM Function: void _xabort (status)
51269     Abort the current transaction.  When no transaction is active this
51270     is a no-op.  The STATUS is an 8-bit constant; its value is encoded
51271     in the return value from '_xbegin'.
51272
51273 Here is an example showing handling for '_XABORT_RETRY' and a fallback
51274path for other failures:
51275
51276     #include <immintrin.h>
51277
51278     int n_tries, max_tries;
51279     unsigned status = _XABORT_EXPLICIT;
51280     ...
51281
51282     for (n_tries = 0; n_tries < max_tries; n_tries++)
51283       {
51284         status = _xbegin ();
51285         if (status == _XBEGIN_STARTED || !(status & _XABORT_RETRY))
51286           break;
51287       }
51288     if (status == _XBEGIN_STARTED)
51289       {
51290         ... transaction code...
51291         _xend ();
51292       }
51293     else
51294       {
51295         ... non-transactional fallback path...
51296       }
51297
51298Note that, in most cases, the transactional and non-transactional code
51299must synchronize together to ensure consistency.
51300
51301
51302File: gcc.info,  Node: x86 control-flow protection intrinsics,  Prev: x86 transactional memory intrinsics,  Up: Target Builtins
51303
513046.60.35 x86 Control-Flow Protection Intrinsics
51305----------------------------------------------
51306
51307 -- CET Function: ret_type _get_ssp (void)
51308     Get the current value of shadow stack pointer if shadow stack
51309     support from Intel CET is enabled in the hardware or '0' otherwise.
51310     The 'ret_type' is 'unsigned long long' for 64-bit targets and
51311     'unsigned int' for 32-bit targets.
51312
51313 -- CET Function: void _inc_ssp (unsigned int)
51314     Increment the current shadow stack pointer by the size specified by
51315     the function argument.  The argument is masked to a byte value for
51316     security reasons, so to increment by more than 255 bytes you must
51317     call the function multiple times.
51318
51319 The shadow stack unwind code looks like:
51320
51321     #include <immintrin.h>
51322
51323     /* Unwind the shadow stack for EH.  */
51324     #define _Unwind_Frames_Extra(x)       \
51325       do                                  \
51326         {                                \
51327           _Unwind_Word ssp = _get_ssp (); \
51328           if (ssp != 0)                   \
51329             {                            \
51330               _Unwind_Word tmp = (x);     \
51331               while (tmp > 255)           \
51332                 {                        \
51333                   _inc_ssp (tmp);         \
51334                   tmp -= 255;             \
51335                 }                        \
51336               _inc_ssp (tmp);             \
51337             }                            \
51338         }                                \
51339         while (0)
51340
51341This code runs unconditionally on all 64-bit processors.  For 32-bit
51342processors the code runs on those that support multi-byte NOP
51343instructions.
51344
51345
51346File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
51347
513486.61 Format Checks Specific to Particular Target Machines
51349=========================================================
51350
51351For some target machines, GCC supports additional options to the format
51352attribute (*note Declaring Attributes of Functions: Function
51353Attributes.).
51354
51355* Menu:
51356
51357* Solaris Format Checks::
51358* Darwin Format Checks::
51359
51360
51361File: gcc.info,  Node: Solaris Format Checks,  Next: Darwin Format Checks,  Up: Target Format Checks
51362
513636.61.1 Solaris Format Checks
51364----------------------------
51365
51366Solaris targets support the 'cmn_err' (or '__cmn_err__') format check.
51367'cmn_err' accepts a subset of the standard 'printf' conversions, and the
51368two-argument '%b' conversion for displaying bit-fields.  See the Solaris
51369man page for 'cmn_err' for more information.
51370
51371
51372File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks
51373
513746.61.2 Darwin Format Checks
51375---------------------------
51376
51377In addition to the full set of format archetypes (attribute format style
51378arguments such as 'printf', 'scanf', 'strftime', and 'strfmon'), Darwin
51379targets also support the 'CFString' (or '__CFString__') archetype in the
51380'format' attribute.  Declarations with this archetype are parsed for
51381correct syntax and argument types.  However, parsing of the format
51382string itself and validating arguments against it in calls to such
51383functions is currently not performed.
51384
51385 Additionally, 'CFStringRefs' (defined by the 'CoreFoundation' headers)
51386may also be used as format arguments.  Note that the relevant headers
51387are only likely to be available on Darwin (OSX) installations.  On such
51388installations, the XCode and system documentation provide descriptions
51389of 'CFString', 'CFStringRefs' and associated functions.
51390
51391
51392File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
51393
513946.62 Pragmas Accepted by GCC
51395============================
51396
51397GCC supports several types of pragmas, primarily in order to compile
51398code originally written for other compilers.  Note that in general we do
51399not recommend the use of pragmas; *Note Function Attributes::, for
51400further explanation.
51401
51402 The GNU C preprocessor recognizes several pragmas in addition to the
51403compiler pragmas documented here.  Refer to the CPP manual for more
51404information.
51405
51406* Menu:
51407
51408* AArch64 Pragmas::
51409* ARM Pragmas::
51410* M32C Pragmas::
51411* MeP Pragmas::
51412* RS/6000 and PowerPC Pragmas::
51413* S/390 Pragmas::
51414* Darwin Pragmas::
51415* Solaris Pragmas::
51416* Symbol-Renaming Pragmas::
51417* Structure-Layout Pragmas::
51418* Weak Pragmas::
51419* Diagnostic Pragmas::
51420* Visibility Pragmas::
51421* Push/Pop Macro Pragmas::
51422* Function Specific Option Pragmas::
51423* Loop-Specific Pragmas::
51424
51425
51426File: gcc.info,  Node: AArch64 Pragmas,  Next: ARM Pragmas,  Up: Pragmas
51427
514286.62.1 AArch64 Pragmas
51429----------------------
51430
51431The pragmas defined by the AArch64 target correspond to the AArch64
51432target function attributes.  They can be specified as below:
51433     #pragma GCC target("string")
51434
51435 where 'STRING' can be any string accepted as an AArch64 target
51436attribute.  *Note AArch64 Function Attributes::, for more details on the
51437permissible values of 'string'.
51438
51439
51440File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Prev: AArch64 Pragmas,  Up: Pragmas
51441
514426.62.2 ARM Pragmas
51443------------------
51444
51445The ARM target defines pragmas for controlling the default addition of
51446'long_call' and 'short_call' attributes to functions.  *Note Function
51447Attributes::, for information about the effects of these attributes.
51448
51449'long_calls'
51450     Set all subsequent functions to have the 'long_call' attribute.
51451
51452'no_long_calls'
51453     Set all subsequent functions to have the 'short_call' attribute.
51454
51455'long_calls_off'
51456     Do not affect the 'long_call' or 'short_call' attributes of
51457     subsequent functions.
51458
51459
51460File: gcc.info,  Node: M32C Pragmas,  Next: MeP Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
51461
514626.62.3 M32C Pragmas
51463-------------------
51464
51465'GCC memregs NUMBER'
51466     Overrides the command-line option '-memregs=' for the current file.
51467     Use with care!  This pragma must be before any function in the
51468     file, and mixing different memregs values in different objects may
51469     make them incompatible.  This pragma is useful when a
51470     performance-critical function uses a memreg for temporary values,
51471     as it may allow you to reduce the number of memregs used.
51472
51473'ADDRESS NAME ADDRESS'
51474     For any declared symbols matching NAME, this does three things to
51475     that symbol: it forces the symbol to be located at the given
51476     address (a number), it forces the symbol to be volatile, and it
51477     changes the symbol's scope to be static.  This pragma exists for
51478     compatibility with other compilers, but note that the common
51479     '1234H' numeric syntax is not supported (use '0x1234' instead).
51480     Example:
51481
51482          #pragma ADDRESS port3 0x103
51483          char port3;
51484
51485
51486File: gcc.info,  Node: MeP Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
51487
514886.62.4 MeP Pragmas
51489------------------
51490
51491'custom io_volatile (on|off)'
51492     Overrides the command-line option '-mio-volatile' for the current
51493     file.  Note that for compatibility with future GCC releases, this
51494     option should only be used once before any 'io' variables in each
51495     file.
51496
51497'GCC coprocessor available REGISTERS'
51498     Specifies which coprocessor registers are available to the register
51499     allocator.  REGISTERS may be a single register, register range
51500     separated by ellipses, or comma-separated list of those.  Example:
51501
51502          #pragma GCC coprocessor available $c0...$c10, $c28
51503
51504'GCC coprocessor call_saved REGISTERS'
51505     Specifies which coprocessor registers are to be saved and restored
51506     by any function using them.  REGISTERS may be a single register,
51507     register range separated by ellipses, or comma-separated list of
51508     those.  Example:
51509
51510          #pragma GCC coprocessor call_saved $c4...$c6, $c31
51511
51512'GCC coprocessor subclass '(A|B|C|D)' = REGISTERS'
51513     Creates and defines a register class.  These register classes can
51514     be used by inline 'asm' constructs.  REGISTERS may be a single
51515     register, register range separated by ellipses, or comma-separated
51516     list of those.  Example:
51517
51518          #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
51519
51520          asm ("cpfoo %0" : "=B" (x));
51521
51522'GCC disinterrupt NAME , NAME ...'
51523     For the named functions, the compiler adds code to disable
51524     interrupts for the duration of those functions.  If any functions
51525     so named are not encountered in the source, a warning is emitted
51526     that the pragma is not used.  Examples:
51527
51528          #pragma disinterrupt foo
51529          #pragma disinterrupt bar, grill
51530          int foo () { ... }
51531
51532'GCC call NAME , NAME ...'
51533     For the named functions, the compiler always uses a
51534     register-indirect call model when calling the named functions.
51535     Examples:
51536
51537          extern int foo ();
51538          #pragma call foo
51539
51540
51541File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: S/390 Pragmas,  Prev: MeP Pragmas,  Up: Pragmas
51542
515436.62.5 RS/6000 and PowerPC Pragmas
51544----------------------------------
51545
51546The RS/6000 and PowerPC targets define one pragma for controlling
51547whether or not the 'longcall' attribute is added to function
51548declarations by default.  This pragma overrides the '-mlongcall' option,
51549but not the 'longcall' and 'shortcall' attributes.  *Note RS/6000 and
51550PowerPC Options::, for more information about when long calls are and
51551are not necessary.
51552
51553'longcall (1)'
51554     Apply the 'longcall' attribute to all subsequent function
51555     declarations.
51556
51557'longcall (0)'
51558     Do not apply the 'longcall' attribute to subsequent function
51559     declarations.
51560
51561
51562File: gcc.info,  Node: S/390 Pragmas,  Next: Darwin Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
51563
515646.62.6 S/390 Pragmas
51565--------------------
51566
51567The pragmas defined by the S/390 target correspond to the S/390 target
51568function attributes and some the additional options:
51569
51570'zvector'
51571'no-zvector'
51572
51573 Note that options of the pragma, unlike options of the target
51574attribute, do change the value of preprocessor macros like '__VEC__'.
51575They can be specified as below:
51576
51577     #pragma GCC target("string[,string]...")
51578     #pragma GCC target("string"[,"string"]...)
51579
51580
51581File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: S/390 Pragmas,  Up: Pragmas
51582
515836.62.7 Darwin Pragmas
51584---------------------
51585
51586The following pragmas are available for all architectures running the
51587Darwin operating system.  These are useful for compatibility with other
51588Mac OS compilers.
51589
51590'mark TOKENS...'
51591     This pragma is accepted, but has no effect.
51592
51593'options align=ALIGNMENT'
51594     This pragma sets the alignment of fields in structures.  The values
51595     of ALIGNMENT may be 'mac68k', to emulate m68k alignment, or
51596     'power', to emulate PowerPC alignment.  Uses of this pragma nest
51597     properly; to restore the previous setting, use 'reset' for the
51598     ALIGNMENT.
51599
51600'segment TOKENS...'
51601     This pragma is accepted, but has no effect.
51602
51603'unused (VAR [, VAR]...)'
51604     This pragma declares variables to be possibly unused.  GCC does not
51605     produce warnings for the listed variables.  The effect is similar
51606     to that of the 'unused' attribute, except that this pragma may
51607     appear anywhere within the variables' scopes.
51608
51609
51610File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
51611
516126.62.8 Solaris Pragmas
51613----------------------
51614
51615The Solaris target supports '#pragma redefine_extname' (*note
51616Symbol-Renaming Pragmas::).  It also supports additional '#pragma'
51617directives for compatibility with the system compiler.
51618
51619'align ALIGNMENT (VARIABLE [, VARIABLE]...)'
51620
51621     Increase the minimum alignment of each VARIABLE to ALIGNMENT.  This
51622     is the same as GCC's 'aligned' attribute *note Variable
51623     Attributes::).  Macro expansion occurs on the arguments to this
51624     pragma when compiling C and Objective-C.  It does not currently
51625     occur when compiling C++, but this is a bug which may be fixed in a
51626     future release.
51627
51628'fini (FUNCTION [, FUNCTION]...)'
51629
51630     This pragma causes each listed FUNCTION to be called after main, or
51631     during shared module unloading, by adding a call to the '.fini'
51632     section.
51633
51634'init (FUNCTION [, FUNCTION]...)'
51635
51636     This pragma causes each listed FUNCTION to be called during
51637     initialization (before 'main') or during shared module loading, by
51638     adding a call to the '.init' section.
51639
51640
51641File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Layout Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
51642
516436.62.9 Symbol-Renaming Pragmas
51644------------------------------
51645
51646GCC supports a '#pragma' directive that changes the name used in
51647assembly for a given declaration.  While this pragma is supported on all
51648platforms, it is intended primarily to provide compatibility with the
51649Solaris system headers.  This effect can also be achieved using the asm
51650labels extension (*note Asm Labels::).
51651
51652'redefine_extname OLDNAME NEWNAME'
51653
51654     This pragma gives the C function OLDNAME the assembly symbol
51655     NEWNAME.  The preprocessor macro '__PRAGMA_REDEFINE_EXTNAME' is
51656     defined if this pragma is available (currently on all platforms).
51657
51658 This pragma and the 'asm' labels extension interact in a complicated
51659manner.  Here are some corner cases you may want to be aware of:
51660
51661  1. This pragma silently applies only to declarations with external
51662     linkage.  The 'asm' label feature does not have this restriction.
51663
51664  2. In C++, this pragma silently applies only to declarations with "C"
51665     linkage.  Again, 'asm' labels do not have this restriction.
51666
51667  3. If either of the ways of changing the assembly name of a
51668     declaration are applied to a declaration whose assembly name has
51669     already been determined (either by a previous use of one of these
51670     features, or because the compiler needed the assembly name in order
51671     to generate code), and the new name is different, a warning issues
51672     and the name does not change.
51673
51674  4. The OLDNAME used by '#pragma redefine_extname' is always the
51675     C-language name.
51676
51677
51678File: gcc.info,  Node: Structure-Layout Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
51679
516806.62.10 Structure-Layout Pragmas
51681--------------------------------
51682
51683For compatibility with Microsoft Windows compilers, GCC supports a set
51684of '#pragma' directives that change the maximum alignment of members of
51685structures (other than zero-width bit-fields), unions, and classes
51686subsequently defined.  The N value below always is required to be a
51687small power of two and specifies the new alignment in bytes.
51688
51689  1. '#pragma pack(N)' simply sets the new alignment.
51690  2. '#pragma pack()' sets the alignment to the one that was in effect
51691     when compilation started (see also command-line option
51692     '-fpack-struct[=N]' *note Code Gen Options::).
51693  3. '#pragma pack(push[,N])' pushes the current alignment setting on an
51694     internal stack and then optionally sets the new alignment.
51695  4. '#pragma pack(pop)' restores the alignment setting to the one saved
51696     at the top of the internal stack (and removes that stack entry).
51697     Note that '#pragma pack([N])' does not influence this internal
51698     stack; thus it is possible to have '#pragma pack(push)' followed by
51699     multiple '#pragma pack(N)' instances and finalized by a single
51700     '#pragma pack(pop)'.
51701
51702 Some targets, e.g. x86 and PowerPC, support the '#pragma ms_struct'
51703directive which lays out structures and unions subsequently defined as
51704the documented '__attribute__ ((ms_struct))'.
51705
51706  1. '#pragma ms_struct on' turns on the Microsoft layout.
51707  2. '#pragma ms_struct off' turns off the Microsoft layout.
51708  3. '#pragma ms_struct reset' goes back to the default layout.
51709
51710 Most targets also support the '#pragma scalar_storage_order' directive
51711which lays out structures and unions subsequently defined as the
51712documented '__attribute__ ((scalar_storage_order))'.
51713
51714  1. '#pragma scalar_storage_order big-endian' sets the storage order of
51715     the scalar fields to big-endian.
51716  2. '#pragma scalar_storage_order little-endian' sets the storage order
51717     of the scalar fields to little-endian.
51718  3. '#pragma scalar_storage_order default' goes back to the endianness
51719     that was in effect when compilation started (see also command-line
51720     option '-fsso-struct=ENDIANNESS' *note C Dialect Options::).
51721
51722
51723File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Layout Pragmas,  Up: Pragmas
51724
517256.62.11 Weak Pragmas
51726--------------------
51727
51728For compatibility with SVR4, GCC supports a set of '#pragma' directives
51729for declaring symbols to be weak, and defining weak aliases.
51730
51731'#pragma weak SYMBOL'
51732     This pragma declares SYMBOL to be weak, as if the declaration had
51733     the attribute of the same name.  The pragma may appear before or
51734     after the declaration of SYMBOL.  It is not an error for SYMBOL to
51735     never be defined at all.
51736
51737'#pragma weak SYMBOL1 = SYMBOL2'
51738     This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
51739     an error if SYMBOL2 is not defined in the current translation unit.
51740
51741
51742File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
51743
517446.62.12 Diagnostic Pragmas
51745--------------------------
51746
51747GCC allows the user to selectively enable or disable certain types of
51748diagnostics, and change the kind of the diagnostic.  For example, a
51749project's policy might require that all sources compile with '-Werror'
51750but certain files might have exceptions allowing specific types of
51751warnings.  Or, a project might selectively enable diagnostics and treat
51752them as errors depending on which preprocessor macros are defined.
51753
51754'#pragma GCC diagnostic KIND OPTION'
51755
51756     Modifies the disposition of a diagnostic.  Note that not all
51757     diagnostics are modifiable; at the moment only warnings (normally
51758     controlled by '-W...') can be controlled, and not all of them.  Use
51759     '-fdiagnostics-show-option' to determine which diagnostics are
51760     controllable and which option controls them.
51761
51762     KIND is 'error' to treat this diagnostic as an error, 'warning' to
51763     treat it like a warning (even if '-Werror' is in effect), or
51764     'ignored' if the diagnostic is to be ignored.  OPTION is a double
51765     quoted string that matches the command-line option.
51766
51767          #pragma GCC diagnostic warning "-Wformat"
51768          #pragma GCC diagnostic error "-Wformat"
51769          #pragma GCC diagnostic ignored "-Wformat"
51770
51771     Note that these pragmas override any command-line options.  GCC
51772     keeps track of the location of each pragma, and issues diagnostics
51773     according to the state as of that point in the source file.  Thus,
51774     pragmas occurring after a line do not affect diagnostics caused by
51775     that line.
51776
51777'#pragma GCC diagnostic push'
51778'#pragma GCC diagnostic pop'
51779
51780     Causes GCC to remember the state of the diagnostics as of each
51781     'push', and restore to that point at each 'pop'.  If a 'pop' has no
51782     matching 'push', the command-line options are restored.
51783
51784          #pragma GCC diagnostic error "-Wuninitialized"
51785            foo(a);                       /* error is given for this one */
51786          #pragma GCC diagnostic push
51787          #pragma GCC diagnostic ignored "-Wuninitialized"
51788            foo(b);                       /* no diagnostic for this one */
51789          #pragma GCC diagnostic pop
51790            foo(c);                       /* error is given for this one */
51791          #pragma GCC diagnostic pop
51792            foo(d);                       /* depends on command-line options */
51793
51794 GCC also offers a simple mechanism for printing messages during
51795compilation.
51796
51797'#pragma message STRING'
51798
51799     Prints STRING as a compiler message on compilation.  The message is
51800     informational only, and is neither a compilation warning nor an
51801     error.  Newlines can be included in the string by using the '\n'
51802     escape sequence.
51803
51804          #pragma message "Compiling " __FILE__ "..."
51805
51806     STRING may be parenthesized, and is printed with location
51807     information.  For example,
51808
51809          #define DO_PRAGMA(x) _Pragma (#x)
51810          #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
51811
51812          TODO(Remember to fix this)
51813
51814     prints '/tmp/file.c:4: note: #pragma message: TODO - Remember to
51815     fix this'.
51816
51817'#pragma GCC error MESSAGE'
51818     Generates an error message.  This pragma _is_ considered to
51819     indicate an error in the compilation, and it will be treated as
51820     such.
51821
51822     Newlines can be included in the string by using the '\n' escape
51823     sequence.  They will be displayed as newlines even if the
51824     '-fmessage-length' option is set to zero.
51825
51826     The error is only generated if the pragma is present in the code
51827     after pre-processing has been completed.  It does not matter
51828     however if the code containing the pragma is unreachable:
51829
51830          #if 0
51831          #pragma GCC error "this error is not seen"
51832          #endif
51833          void foo (void)
51834          {
51835            return;
51836          #pragma GCC error "this error is seen"
51837          }
51838
51839'#pragma GCC warning MESSAGE'
51840     This is just like 'pragma GCC error' except that a warning message
51841     is issued instead of an error message.  Unless '-Werror' is in
51842     effect, in which case this pragma will generate an error as well.
51843
51844
51845File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
51846
518476.62.13 Visibility Pragmas
51848--------------------------
51849
51850'#pragma GCC visibility push(VISIBILITY)'
51851'#pragma GCC visibility pop'
51852
51853     This pragma allows the user to set the visibility for multiple
51854     declarations without having to give each a visibility attribute
51855     (*note Function Attributes::).
51856
51857     In C++, '#pragma GCC visibility' affects only namespace-scope
51858     declarations.  Class members and template specializations are not
51859     affected; if you want to override the visibility for a particular
51860     member or instantiation, you must use an attribute.
51861
51862
51863File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas
51864
518656.62.14 Push/Pop Macro Pragmas
51866------------------------------
51867
51868For compatibility with Microsoft Windows compilers, GCC supports
51869'#pragma push_macro("MACRO_NAME")' and '#pragma
51870pop_macro("MACRO_NAME")'.
51871
51872'#pragma push_macro("MACRO_NAME")'
51873     This pragma saves the value of the macro named as MACRO_NAME to the
51874     top of the stack for this macro.
51875
51876'#pragma pop_macro("MACRO_NAME")'
51877     This pragma sets the value of the macro named as MACRO_NAME to the
51878     value on top of the stack for this macro.  If the stack for
51879     MACRO_NAME is empty, the value of the macro remains unchanged.
51880
51881 For example:
51882
51883     #define X  1
51884     #pragma push_macro("X")
51885     #undef X
51886     #define X -1
51887     #pragma pop_macro("X")
51888     int x [X];
51889
51890In this example, the definition of X as 1 is saved by '#pragma
51891push_macro' and restored by '#pragma pop_macro'.
51892
51893
51894File: gcc.info,  Node: Function Specific Option Pragmas,  Next: Loop-Specific Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
51895
518966.62.15 Function Specific Option Pragmas
51897----------------------------------------
51898
51899'#pragma GCC target (STRING, ...)'
51900
51901     This pragma allows you to set target-specific options for functions
51902     defined later in the source file.  One or more strings can be
51903     specified.  Each function that is defined after this point is
51904     treated as if it had been declared with one 'target('STRING')'
51905     attribute for each STRING argument.  The parentheses around the
51906     strings in the pragma are optional.  *Note Function Attributes::,
51907     for more information about the 'target' attribute and the attribute
51908     syntax.
51909
51910     The '#pragma GCC target' pragma is presently implemented for x86,
51911     ARM, AArch64, PowerPC, S/390, and Nios II targets only.
51912
51913'#pragma GCC optimize (STRING, ...)'
51914
51915     This pragma allows you to set global optimization options for
51916     functions defined later in the source file.  One or more strings
51917     can be specified.  Each function that is defined after this point
51918     is treated as if it had been declared with one 'optimize('STRING')'
51919     attribute for each STRING argument.  The parentheses around the
51920     strings in the pragma are optional.  *Note Function Attributes::,
51921     for more information about the 'optimize' attribute and the
51922     attribute syntax.
51923
51924'#pragma GCC push_options'
51925'#pragma GCC pop_options'
51926
51927     These pragmas maintain a stack of the current target and
51928     optimization options.  It is intended for include files where you
51929     temporarily want to switch to using a different '#pragma GCC
51930     target' or '#pragma GCC optimize' and then to pop back to the
51931     previous options.
51932
51933'#pragma GCC reset_options'
51934
51935     This pragma clears the current '#pragma GCC target' and '#pragma
51936     GCC optimize' to use the default switches as specified on the
51937     command line.
51938
51939
51940File: gcc.info,  Node: Loop-Specific Pragmas,  Prev: Function Specific Option Pragmas,  Up: Pragmas
51941
519426.62.16 Loop-Specific Pragmas
51943-----------------------------
51944
51945'#pragma GCC ivdep'
51946
51947     With this pragma, the programmer asserts that there are no
51948     loop-carried dependencies which would prevent consecutive
51949     iterations of the following loop from executing concurrently with
51950     SIMD (single instruction multiple data) instructions.
51951
51952     For example, the compiler can only unconditionally vectorize the
51953     following loop with the pragma:
51954
51955          void foo (int n, int *a, int *b, int *c)
51956          {
51957            int i, j;
51958          #pragma GCC ivdep
51959            for (i = 0; i < n; ++i)
51960              a[i] = b[i] + c[i];
51961          }
51962
51963     In this example, using the 'restrict' qualifier had the same
51964     effect.  In the following example, that would not be possible.
51965     Assume k < -m or k >= m.  Only with the pragma, the compiler knows
51966     that it can unconditionally vectorize the following loop:
51967
51968          void ignore_vec_dep (int *a, int k, int c, int m)
51969          {
51970          #pragma GCC ivdep
51971            for (int i = 0; i < m; i++)
51972              a[i] = a[i + k] * c;
51973          }
51974
51975'#pragma GCC unroll N'
51976
51977     You can use this pragma to control how many times a loop should be
51978     unrolled.  It must be placed immediately before a 'for', 'while' or
51979     'do' loop or a '#pragma GCC ivdep', and applies only to the loop
51980     that follows.  N is an integer constant expression specifying the
51981     unrolling factor.  The values of 0 and 1 block any unrolling of the
51982     loop.
51983
51984
51985File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
51986
519876.63 Unnamed Structure and Union Fields
51988=======================================
51989
51990As permitted by ISO C11 and for compatibility with other compilers, GCC
51991allows you to define a structure or union that contains, as fields,
51992structures and unions without names.  For example:
51993
51994     struct {
51995       int a;
51996       union {
51997         int b;
51998         float c;
51999       };
52000       int d;
52001     } foo;
52002
52003In this example, you are able to access members of the unnamed union
52004with code like 'foo.b'.  Note that only unnamed structs and unions are
52005allowed, you may not have, for example, an unnamed 'int'.
52006
52007 You must never create such structures that cause ambiguous field
52008definitions.  For example, in this structure:
52009
52010     struct {
52011       int a;
52012       struct {
52013         int a;
52014       };
52015     } foo;
52016
52017it is ambiguous which 'a' is being referred to with 'foo.a'.  The
52018compiler gives errors for such constructs.
52019
52020 Unless '-fms-extensions' is used, the unnamed field must be a structure
52021or union definition without a tag (for example, 'struct { int a; };').
52022If '-fms-extensions' is used, the field may also be a definition with a
52023tag such as 'struct foo { int a; };', a reference to a previously
52024defined structure or union such as 'struct foo;', or a reference to a
52025'typedef' name for a previously defined structure or union type.
52026
52027 The option '-fplan9-extensions' enables '-fms-extensions' as well as
52028two other extensions.  First, a pointer to a structure is automatically
52029converted to a pointer to an anonymous field for assignments and
52030function calls.  For example:
52031
52032     struct s1 { int a; };
52033     struct s2 { struct s1; };
52034     extern void f1 (struct s1 *);
52035     void f2 (struct s2 *p) { f1 (p); }
52036
52037In the call to 'f1' inside 'f2', the pointer 'p' is converted into a
52038pointer to the anonymous field.
52039
52040 Second, when the type of an anonymous field is a 'typedef' for a
52041'struct' or 'union', code may refer to the field using the name of the
52042'typedef'.
52043
52044     typedef struct { int a; } s1;
52045     struct s2 { s1; };
52046     s1 f1 (struct s2 *p) { return p->s1; }
52047
52048 These usages are only permitted when they are not ambiguous.
52049
52050
52051File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
52052
520536.64 Thread-Local Storage
52054=========================
52055
52056Thread-local storage (TLS) is a mechanism by which variables are
52057allocated such that there is one instance of the variable per extant
52058thread.  The runtime model GCC uses to implement this originates in the
52059IA-64 processor-specific ABI, but has since been migrated to other
52060processors as well.  It requires significant support from the linker
52061('ld'), dynamic linker ('ld.so'), and system libraries ('libc.so' and
52062'libpthread.so'), so it is not available everywhere.
52063
52064 At the user level, the extension is visible with a new storage class
52065keyword: '__thread'.  For example:
52066
52067     __thread int i;
52068     extern __thread struct state s;
52069     static __thread char *p;
52070
52071 The '__thread' specifier may be used alone, with the 'extern' or
52072'static' specifiers, but with no other storage class specifier.  When
52073used with 'extern' or 'static', '__thread' must appear immediately after
52074the other storage class specifier.
52075
52076 The '__thread' specifier may be applied to any global, file-scoped
52077static, function-scoped static, or static data member of a class.  It
52078may not be applied to block-scoped automatic or non-static data member.
52079
52080 When the address-of operator is applied to a thread-local variable, it
52081is evaluated at run time and returns the address of the current thread's
52082instance of that variable.  An address so obtained may be used by any
52083thread.  When a thread terminates, any pointers to thread-local
52084variables in that thread become invalid.
52085
52086 No static initialization may refer to the address of a thread-local
52087variable.
52088
52089 In C++, if an initializer is present for a thread-local variable, it
52090must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
52091standard.
52092
52093 See ELF Handling For Thread-Local Storage
52094(https://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of
52095the four thread-local storage addressing models, and how the runtime is
52096expected to function.
52097
52098* Menu:
52099
52100* C99 Thread-Local Edits::
52101* C++98 Thread-Local Edits::
52102
52103
52104File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
52105
521066.64.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
52107-------------------------------------------------------
52108
52109The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
52110document the exact semantics of the language extension.
52111
52112   * '5.1.2 Execution environments'
52113
52114     Add new text after paragraph 1
52115
52116          Within either execution environment, a "thread" is a flow of
52117          control within a program.  It is implementation defined
52118          whether or not there may be more than one thread associated
52119          with a program.  It is implementation defined how threads
52120          beyond the first are created, the name and type of the
52121          function called at thread startup, and how threads may be
52122          terminated.  However, objects with thread storage duration
52123          shall be initialized before thread startup.
52124
52125   * '6.2.4 Storage durations of objects'
52126
52127     Add new text before paragraph 3
52128
52129          An object whose identifier is declared with the storage-class
52130          specifier '__thread' has "thread storage duration".  Its
52131          lifetime is the entire execution of the thread, and its stored
52132          value is initialized only once, prior to thread startup.
52133
52134   * '6.4.1 Keywords'
52135
52136     Add '__thread'.
52137
52138   * '6.7.1 Storage-class specifiers'
52139
52140     Add '__thread' to the list of storage class specifiers in paragraph
52141     1.
52142
52143     Change paragraph 2 to
52144
52145          With the exception of '__thread', at most one storage-class
52146          specifier may be given [...].  The '__thread' specifier may be
52147          used alone, or immediately following 'extern' or 'static'.
52148
52149     Add new text after paragraph 6
52150
52151          The declaration of an identifier for a variable that has block
52152          scope that specifies '__thread' shall also specify either
52153          'extern' or 'static'.
52154
52155          The '__thread' specifier shall be used only with variables.
52156
52157
52158File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
52159
521606.64.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
52161--------------------------------------------------------
52162
52163The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
52164that document the exact semantics of the language extension.
52165
52166   * [intro.execution]
52167
52168     New text after paragraph 4
52169
52170          A "thread" is a flow of control within the abstract machine.
52171          It is implementation defined whether or not there may be more
52172          than one thread.
52173
52174     New text after paragraph 7
52175
52176          It is unspecified whether additional action must be taken to
52177          ensure when and whether side effects are visible to other
52178          threads.
52179
52180   * [lex.key]
52181
52182     Add '__thread'.
52183
52184   * [basic.start.main]
52185
52186     Add after paragraph 5
52187
52188          The thread that begins execution at the 'main' function is
52189          called the "main thread".  It is implementation defined how
52190          functions beginning threads other than the main thread are
52191          designated or typed.  A function so designated, as well as the
52192          'main' function, is called a "thread startup function".  It is
52193          implementation defined what happens if a thread startup
52194          function returns.  It is implementation defined what happens
52195          to other threads when any thread calls 'exit'.
52196
52197   * [basic.start.init]
52198
52199     Add after paragraph 4
52200
52201          The storage for an object of thread storage duration shall be
52202          statically initialized before the first statement of the
52203          thread startup function.  An object of thread storage duration
52204          shall not require dynamic initialization.
52205
52206   * [basic.start.term]
52207
52208     Add after paragraph 3
52209
52210          The type of an object with thread storage duration shall not
52211          have a non-trivial destructor, nor shall it be an array type
52212          whose elements (directly or indirectly) have non-trivial
52213          destructors.
52214
52215   * [basic.stc]
52216
52217     Add "thread storage duration" to the list in paragraph 1.
52218
52219     Change paragraph 2
52220
52221          Thread, static, and automatic storage durations are associated
52222          with objects introduced by declarations [...].
52223
52224     Add '__thread' to the list of specifiers in paragraph 3.
52225
52226   * [basic.stc.thread]
52227
52228     New section before [basic.stc.static]
52229
52230          The keyword '__thread' applied to a non-local object gives the
52231          object thread storage duration.
52232
52233          A local variable or class data member declared both 'static'
52234          and '__thread' gives the variable or member thread storage
52235          duration.
52236
52237   * [basic.stc.static]
52238
52239     Change paragraph 1
52240
52241          All objects that have neither thread storage duration, dynamic
52242          storage duration nor are local [...].
52243
52244   * [dcl.stc]
52245
52246     Add '__thread' to the list in paragraph 1.
52247
52248     Change paragraph 1
52249
52250          With the exception of '__thread', at most one
52251          STORAGE-CLASS-SPECIFIER shall appear in a given
52252          DECL-SPECIFIER-SEQ.  The '__thread' specifier may be used
52253          alone, or immediately following the 'extern' or 'static'
52254          specifiers.  [...]
52255
52256     Add after paragraph 5
52257
52258          The '__thread' specifier can be applied only to the names of
52259          objects and to anonymous unions.
52260
52261   * [class.mem]
52262
52263     Add after paragraph 6
52264
52265          Non-'static' members shall not be '__thread'.
52266
52267
52268File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
52269
522706.65 Binary Constants using the '0b' Prefix
52271===========================================
52272
52273Integer constants can be written as binary constants, consisting of a
52274sequence of '0' and '1' digits, prefixed by '0b' or '0B'.  This is
52275particularly useful in environments that operate a lot on the bit level
52276(like microcontrollers).
52277
52278 The following statements are identical:
52279
52280     i =       42;
52281     i =     0x2a;
52282     i =      052;
52283     i = 0b101010;
52284
52285 The type of these constants follows the same rules as for octal or
52286hexadecimal integer constants, so suffixes like 'L' or 'UL' can be
52287applied.
52288
52289
52290File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
52291
522927 Extensions to the C++ Language
52293********************************
52294
52295The GNU compiler provides these extensions to the C++ language (and you
52296can also use most of the C language extensions in your C++ programs).
52297If you want to write code that checks whether these features are
52298available, you can test for the GNU compiler the same way as for C
52299programs: check for a predefined macro '__GNUC__'.  You can also use
52300'__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
52301(cpp)Common Predefined Macros.).
52302
52303* Menu:
52304
52305* C++ Volatiles::       What constitutes an access to a volatile object.
52306* Restricted Pointers:: C99 restricted pointers and references.
52307* Vague Linkage::       Where G++ puts inlines, vtables and such.
52308* C++ Interface::       You can use a single C++ header file for both
52309                        declarations and definitions.
52310* Template Instantiation:: Methods for ensuring that exactly one copy of
52311                        each needed template instantiation is emitted.
52312* Bound member functions:: You can extract a function pointer to the
52313                        method denoted by a '->*' or '.*' expression.
52314* C++ Attributes::      Variable, function, and type attributes for C++ only.
52315* Function Multiversioning::   Declaring multiple function versions.
52316* Type Traits::         Compiler support for type traits.
52317* C++ Concepts::        Improved support for generic programming.
52318* Deprecated Features:: Things will disappear from G++.
52319* Backwards Compatibility:: Compatibilities with earlier definitions of C++.
52320
52321
52322File: gcc.info,  Node: C++ Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
52323
523247.1 When is a Volatile C++ Object Accessed?
52325===========================================
52326
52327The C++ standard differs from the C standard in its treatment of
52328volatile objects.  It fails to specify what constitutes a volatile
52329access, except to say that C++ should behave in a similar manner to C
52330with respect to volatiles, where possible.  However, the different
52331lvalueness of expressions between C and C++ complicate the behavior.
52332G++ behaves the same as GCC for volatile access, *Note Volatiles: C
52333Extensions, for a description of GCC's behavior.
52334
52335 The C and C++ language specifications differ when an object is accessed
52336in a void context:
52337
52338     volatile int *src = SOMEVALUE;
52339     *src;
52340
52341 The C++ standard specifies that such expressions do not undergo lvalue
52342to rvalue conversion, and that the type of the dereferenced object may
52343be incomplete.  The C++ standard does not specify explicitly that it is
52344lvalue to rvalue conversion that is responsible for causing an access.
52345There is reason to believe that it is, because otherwise certain simple
52346expressions become undefined.  However, because it would surprise most
52347programmers, G++ treats dereferencing a pointer to volatile object of
52348complete type as GCC would do for an equivalent type in C.  When the
52349object has incomplete type, G++ issues a warning; if you wish to force
52350an error, you must force a conversion to rvalue with, for instance, a
52351static cast.
52352
52353 When using a reference to volatile, G++ does not treat equivalent
52354expressions as accesses to volatiles, but instead issues a warning that
52355no volatile is accessed.  The rationale for this is that otherwise it
52356becomes difficult to determine where volatile access occur, and not
52357possible to ignore the return value from functions returning volatile
52358references.  Again, if you wish to force a read, cast the reference to
52359an rvalue.
52360
52361 G++ implements the same behavior as GCC does when assigning to a
52362volatile object--there is no reread of the assigned-to object, the
52363assigned rvalue is reused.  Note that in C++ assignment expressions are
52364lvalues, and if used as an lvalue, the volatile object is referred to.
52365For instance, VREF refers to VOBJ, as expected, in the following
52366example:
52367
52368     volatile int vobj;
52369     volatile int &vref = vobj = SOMETHING;
52370
52371
52372File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: C++ Volatiles,  Up: C++ Extensions
52373
523747.2 Restricting Pointer Aliasing
52375================================
52376
52377As with the C front end, G++ understands the C99 feature of restricted
52378pointers, specified with the '__restrict__', or '__restrict' type
52379qualifier.  Because you cannot compile C++ by specifying the '-std=c99'
52380language flag, 'restrict' is not a keyword in C++.
52381
52382 In addition to allowing restricted pointers, you can specify restricted
52383references, which indicate that the reference is not aliased in the
52384local context.
52385
52386     void fn (int *__restrict__ rptr, int &__restrict__ rref)
52387     {
52388       /* ... */
52389     }
52390
52391In the body of 'fn', RPTR points to an unaliased integer and RREF refers
52392to a (different) unaliased integer.
52393
52394 You may also specify whether a member function's THIS pointer is
52395unaliased by using '__restrict__' as a member function qualifier.
52396
52397     void T::fn () __restrict__
52398     {
52399       /* ... */
52400     }
52401
52402Within the body of 'T::fn', THIS has the effective definition 'T
52403*__restrict__ const this'.  Notice that the interpretation of a
52404'__restrict__' member function qualifier is different to that of 'const'
52405or 'volatile' qualifier, in that it is applied to the pointer rather
52406than the object.  This is consistent with other compilers that implement
52407restricted pointers.
52408
52409 As with all outermost parameter qualifiers, '__restrict__' is ignored
52410in function definition matching.  This means you only need to specify
52411'__restrict__' in a function definition, rather than in a function
52412prototype as well.
52413
52414
52415File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
52416
524177.3 Vague Linkage
52418=================
52419
52420There are several constructs in C++ that require space in the object
52421file but are not clearly tied to a single translation unit.  We say that
52422these constructs have "vague linkage".  Typically such constructs are
52423emitted wherever they are needed, though sometimes we can be more
52424clever.
52425
52426Inline Functions
52427     Inline functions are typically defined in a header file which can
52428     be included in many different compilations.  Hopefully they can
52429     usually be inlined, but sometimes an out-of-line copy is necessary,
52430     if the address of the function is taken or if inlining fails.  In
52431     general, we emit an out-of-line copy in all translation units where
52432     one is needed.  As an exception, we only emit inline virtual
52433     functions with the vtable, since it always requires a copy.
52434
52435     Local static variables and string constants used in an inline
52436     function are also considered to have vague linkage, since they must
52437     be shared between all inlined and out-of-line instances of the
52438     function.
52439
52440VTables
52441     C++ virtual functions are implemented in most compilers using a
52442     lookup table, known as a vtable.  The vtable contains pointers to
52443     the virtual functions provided by a class, and each object of the
52444     class contains a pointer to its vtable (or vtables, in some
52445     multiple-inheritance situations).  If the class declares any
52446     non-inline, non-pure virtual functions, the first one is chosen as
52447     the "key method" for the class, and the vtable is only emitted in
52448     the translation unit where the key method is defined.
52449
52450     _Note:_ If the chosen key method is later defined as inline, the
52451     vtable is still emitted in every translation unit that defines it.
52452     Make sure that any inline virtuals are declared inline in the class
52453     body, even if they are not defined there.
52454
52455'type_info' objects
52456     C++ requires information about types to be written out in order to
52457     implement 'dynamic_cast', 'typeid' and exception handling.  For
52458     polymorphic classes (classes with virtual functions), the
52459     'type_info' object is written out along with the vtable so that
52460     'dynamic_cast' can determine the dynamic type of a class object at
52461     run time.  For all other types, we write out the 'type_info' object
52462     when it is used: when applying 'typeid' to an expression, throwing
52463     an object, or referring to a type in a catch clause or exception
52464     specification.
52465
52466Template Instantiations
52467     Most everything in this section also applies to template
52468     instantiations, but there are other options as well.  *Note Where's
52469     the Template?: Template Instantiation.
52470
52471 When used with GNU ld version 2.8 or later on an ELF system such as
52472GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
52473these constructs will be discarded at link time.  This is known as
52474COMDAT support.
52475
52476 On targets that don't support COMDAT, but do support weak symbols, GCC
52477uses them.  This way one copy overrides all the others, but the unused
52478copies still take up space in the executable.
52479
52480 For targets that do not support either COMDAT or weak symbols, most
52481entities with vague linkage are emitted as local symbols to avoid
52482duplicate definition errors from the linker.  This does not happen for
52483local statics in inlines, however, as having multiple copies almost
52484certainly breaks things.
52485
52486 *Note Declarations and Definitions in One Header: C++ Interface, for
52487another way to control placement of these constructs.
52488
52489
52490File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
52491
524927.4 C++ Interface and Implementation Pragmas
52493============================================
52494
52495'#pragma interface' and '#pragma implementation' provide the user with a
52496way of explicitly directing the compiler to emit entities with vague
52497linkage (and debugging information) in a particular translation unit.
52498
52499 _Note:_ These '#pragma's have been superceded as of GCC 2.7.2 by COMDAT
52500support and the "key method" heuristic mentioned in *note Vague
52501Linkage::.  Using them can actually cause your program to grow due to
52502unnecessary out-of-line copies of inline functions.
52503
52504'#pragma interface'
52505'#pragma interface "SUBDIR/OBJECTS.h"'
52506     Use this directive in _header files_ that define object classes, to
52507     save space in most of the object files that use those classes.
52508     Normally, local copies of certain information (backup copies of
52509     inline member functions, debugging information, and the internal
52510     tables that implement virtual functions) must be kept in each
52511     object file that includes class definitions.  You can use this
52512     pragma to avoid such duplication.  When a header file containing
52513     '#pragma interface' is included in a compilation, this auxiliary
52514     information is not generated (unless the main input source file
52515     itself uses '#pragma implementation').  Instead, the object files
52516     contain references to be resolved at link time.
52517
52518     The second form of this directive is useful for the case where you
52519     have multiple headers with the same name in different directories.
52520     If you use this form, you must specify the same string to '#pragma
52521     implementation'.
52522
52523'#pragma implementation'
52524'#pragma implementation "OBJECTS.h"'
52525     Use this pragma in a _main input file_, when you want full output
52526     from included header files to be generated (and made globally
52527     visible).  The included header file, in turn, should use '#pragma
52528     interface'.  Backup copies of inline member functions, debugging
52529     information, and the internal tables used to implement virtual
52530     functions are all generated in implementation files.
52531
52532     If you use '#pragma implementation' with no argument, it applies to
52533     an include file with the same basename(1) as your source file.  For
52534     example, in 'allclass.cc', giving just '#pragma implementation' by
52535     itself is equivalent to '#pragma implementation "allclass.h"'.
52536
52537     Use the string argument if you want a single implementation file to
52538     include code from multiple header files.  (You must also use
52539     '#include' to include the header file; '#pragma implementation'
52540     only specifies how to use the file--it doesn't actually include
52541     it.)
52542
52543     There is no way to split up the contents of a single header file
52544     into multiple implementation files.
52545
52546 '#pragma implementation' and '#pragma interface' also have an effect on
52547function inlining.
52548
52549 If you define a class in a header file marked with '#pragma interface',
52550the effect on an inline function defined in that class is similar to an
52551explicit 'extern' declaration--the compiler emits no code at all to
52552define an independent version of the function.  Its definition is used
52553only for inlining with its callers.
52554
52555 Conversely, when you include the same header file in a main source file
52556that declares it as '#pragma implementation', the compiler emits code
52557for the function itself; this defines a version of the function that can
52558be found via pointers (or by callers compiled without inlining).  If all
52559calls to the function can be inlined, you can avoid emitting the
52560function by compiling with '-fno-implement-inlines'.  If any calls are
52561not inlined, you will get linker errors.
52562
52563   ---------- Footnotes ----------
52564
52565   (1) A file's "basename" is the name stripped of all leading path
52566information and of trailing suffixes, such as '.h' or '.C' or '.cc'.
52567
52568
52569File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
52570
525717.5 Where's the Template?
52572=========================
52573
52574C++ templates were the first language feature to require more
52575intelligence from the environment than was traditionally found on a UNIX
52576system.  Somehow the compiler and linker have to make sure that each
52577template instance occurs exactly once in the executable if it is needed,
52578and not at all otherwise.  There are two basic approaches to this
52579problem, which are referred to as the Borland model and the Cfront
52580model.
52581
52582Borland model
52583     Borland C++ solved the template instantiation problem by adding the
52584     code equivalent of common blocks to their linker; the compiler
52585     emits template instances in each translation unit that uses them,
52586     and the linker collapses them together.  The advantage of this
52587     model is that the linker only has to consider the object files
52588     themselves; there is no external complexity to worry about.  The
52589     disadvantage is that compilation time is increased because the
52590     template code is being compiled repeatedly.  Code written for this
52591     model tends to include definitions of all templates in the header
52592     file, since they must be seen to be instantiated.
52593
52594Cfront model
52595     The AT&T C++ translator, Cfront, solved the template instantiation
52596     problem by creating the notion of a template repository, an
52597     automatically maintained place where template instances are stored.
52598     A more modern version of the repository works as follows: As
52599     individual object files are built, the compiler places any template
52600     definitions and instantiations encountered in the repository.  At
52601     link time, the link wrapper adds in the objects in the repository
52602     and compiles any needed instances that were not previously emitted.
52603     The advantages of this model are more optimal compilation speed and
52604     the ability to use the system linker; to implement the Borland
52605     model a compiler vendor also needs to replace the linker.  The
52606     disadvantages are vastly increased complexity, and thus potential
52607     for error; for some code this can be just as transparent, but in
52608     practice it can been very difficult to build multiple programs in
52609     one directory and one program in multiple directories.  Code
52610     written for this model tends to separate definitions of non-inline
52611     member templates into a separate file, which should be compiled
52612     separately.
52613
52614 G++ implements the Borland model on targets where the linker supports
52615it, including ELF targets (such as GNU/Linux), Mac OS X and Microsoft
52616Windows.  Otherwise G++ implements neither automatic model.
52617
52618 You have the following options for dealing with template
52619instantiations:
52620
52621  1. Do nothing.  Code written for the Borland model works fine, but
52622     each translation unit contains instances of each of the templates
52623     it uses.  The duplicate instances will be discarded by the linker,
52624     but in a large program, this can lead to an unacceptable amount of
52625     code duplication in object files or shared libraries.
52626
52627     Duplicate instances of a template can be avoided by defining an
52628     explicit instantiation in one object file, and preventing the
52629     compiler from doing implicit instantiations in any other object
52630     files by using an explicit instantiation declaration, using the
52631     'extern template' syntax:
52632
52633          extern template int max (int, int);
52634
52635     This syntax is defined in the C++ 2011 standard, but has been
52636     supported by G++ and other compilers since well before 2011.
52637
52638     Explicit instantiations can be used for the largest or most
52639     frequently duplicated instances, without having to know exactly
52640     which other instances are used in the rest of the program.  You can
52641     scatter the explicit instantiations throughout your program,
52642     perhaps putting them in the translation units where the instances
52643     are used or the translation units that define the templates
52644     themselves; you can put all of the explicit instantiations you need
52645     into one big file; or you can create small files like
52646
52647          #include "Foo.h"
52648          #include "Foo.cc"
52649
52650          template class Foo<int>;
52651          template ostream& operator <<
52652                          (ostream&, const Foo<int>&);
52653
52654     for each of the instances you need, and create a template
52655     instantiation library from those.
52656
52657     This is the simplest option, but also offers flexibility and
52658     fine-grained control when necessary.  It is also the most portable
52659     alternative and programs using this approach will work with most
52660     modern compilers.
52661
52662  2. Compile your template-using code with '-frepo'.  The compiler
52663     generates files with the extension '.rpo' listing all of the
52664     template instantiations used in the corresponding object files that
52665     could be instantiated there; the link wrapper, 'collect2', then
52666     updates the '.rpo' files to tell the compiler where to place those
52667     instantiations and rebuild any affected object files.  The
52668     link-time overhead is negligible after the first pass, as the
52669     compiler continues to place the instantiations in the same files.
52670
52671     This can be a suitable option for application code written for the
52672     Borland model, as it usually just works.  Code written for the
52673     Cfront model needs to be modified so that the template definitions
52674     are available at one or more points of instantiation; usually this
52675     is as simple as adding '#include <tmethods.cc>' to the end of each
52676     template header.
52677
52678     For library code, if you want the library to provide all of the
52679     template instantiations it needs, just try to link all of its
52680     object files together; the link will fail, but cause the
52681     instantiations to be generated as a side effect.  Be warned,
52682     however, that this may cause conflicts if multiple libraries try to
52683     provide the same instantiations.  For greater control, use explicit
52684     instantiation as described in the next option.
52685
52686  3. Compile your code with '-fno-implicit-templates' to disable the
52687     implicit generation of template instances, and explicitly
52688     instantiate all the ones you use.  This approach requires more
52689     knowledge of exactly which instances you need than do the others,
52690     but it's less mysterious and allows greater control if you want to
52691     ensure that only the intended instances are used.
52692
52693     If you are using Cfront-model code, you can probably get away with
52694     not using '-fno-implicit-templates' when compiling files that don't
52695     '#include' the member template definitions.
52696
52697     If you use one big file to do the instantiations, you may want to
52698     compile it without '-fno-implicit-templates' so you get all of the
52699     instances required by your explicit instantiations (but not by any
52700     other files) without having to specify them as well.
52701
52702     In addition to forward declaration of explicit instantiations (with
52703     'extern'), G++ has extended the template instantiation syntax to
52704     support instantiation of the compiler support data for a template
52705     class (i.e. the vtable) without instantiating any of its members
52706     (with 'inline'), and instantiation of only the static data members
52707     of a template class, without the support data or member functions
52708     (with 'static'):
52709
52710          inline template class Foo<int>;
52711          static template class Foo<int>;
52712
52713
52714File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
52715
527167.6 Extracting the Function Pointer from a Bound Pointer to Member Function
52717===========================================================================
52718
52719In C++, pointer to member functions (PMFs) are implemented using a wide
52720pointer of sorts to handle all the possible call mechanisms; the PMF
52721needs to store information about how to adjust the 'this' pointer, and
52722if the function pointed to is virtual, where to find the vtable, and
52723where in the vtable to look for the member function.  If you are using
52724PMFs in an inner loop, you should really reconsider that decision.  If
52725that is not an option, you can extract the pointer to the function that
52726would be called for a given object/PMF pair and call it directly inside
52727the inner loop, to save a bit of time.
52728
52729 Note that you still pay the penalty for the call through a function
52730pointer; on most modern architectures, such a call defeats the branch
52731prediction features of the CPU.  This is also true of normal virtual
52732function calls.
52733
52734 The syntax for this extension is
52735
52736     extern A a;
52737     extern int (A::*fp)();
52738     typedef int (*fptr)(A *);
52739
52740     fptr p = (fptr)(a.*fp);
52741
52742 For PMF constants (i.e. expressions of the form '&Klasse::Member'), no
52743object is needed to obtain the address of the function.  They can be
52744converted to function pointers directly:
52745
52746     fptr p1 = (fptr)(&A::foo);
52747
52748 You must specify '-Wno-pmf-conversions' to use this extension.
52749
52750
52751File: gcc.info,  Node: C++ Attributes,  Next: Function Multiversioning,  Prev: Bound member functions,  Up: C++ Extensions
52752
527537.7 C++-Specific Variable, Function, and Type Attributes
52754========================================================
52755
52756Some attributes only make sense for C++ programs.
52757
52758'abi_tag ("TAG", ...)'
52759     The 'abi_tag' attribute can be applied to a function, variable, or
52760     class declaration.  It modifies the mangled name of the entity to
52761     incorporate the tag name, in order to distinguish the function or
52762     class from an earlier version with a different ABI; perhaps the
52763     class has changed size, or the function has a different return type
52764     that is not encoded in the mangled name.
52765
52766     The attribute can also be applied to an inline namespace, but does
52767     not affect the mangled name of the namespace; in this case it is
52768     only used for '-Wabi-tag' warnings and automatic tagging of
52769     functions and variables.  Tagging inline namespaces is generally
52770     preferable to tagging individual declarations, but the latter is
52771     sometimes necessary, such as when only certain members of a class
52772     need to be tagged.
52773
52774     The argument can be a list of strings of arbitrary length.  The
52775     strings are sorted on output, so the order of the list is
52776     unimportant.
52777
52778     A redeclaration of an entity must not add new ABI tags, since doing
52779     so would change the mangled name.
52780
52781     The ABI tags apply to a name, so all instantiations and
52782     specializations of a template have the same tags.  The attribute
52783     will be ignored if applied to an explicit specialization or
52784     instantiation.
52785
52786     The '-Wabi-tag' flag enables a warning about a class which does not
52787     have all the ABI tags used by its subobjects and virtual functions;
52788     for users with code that needs to coexist with an earlier ABI,
52789     using this option can help to find all affected types that need to
52790     be tagged.
52791
52792     When a type involving an ABI tag is used as the type of a variable
52793     or return type of a function where that tag is not already present
52794     in the signature of the function, the tag is automatically applied
52795     to the variable or function.  '-Wabi-tag' also warns about this
52796     situation; this warning can be avoided by explicitly tagging the
52797     variable or function or moving it into a tagged inline namespace.
52798
52799'init_priority (PRIORITY)'
52800
52801     In Standard C++, objects defined at namespace scope are guaranteed
52802     to be initialized in an order in strict accordance with that of
52803     their definitions _in a given translation unit_.  No guarantee is
52804     made for initializations across translation units.  However, GNU
52805     C++ allows users to control the order of initialization of objects
52806     defined at namespace scope with the 'init_priority' attribute by
52807     specifying a relative PRIORITY, a constant integral expression
52808     currently bounded between 101 and 65535 inclusive.  Lower numbers
52809     indicate a higher priority.
52810
52811     In the following example, 'A' would normally be created before 'B',
52812     but the 'init_priority' attribute reverses that order:
52813
52814          Some_Class  A  __attribute__ ((init_priority (2000)));
52815          Some_Class  B  __attribute__ ((init_priority (543)));
52816
52817     Note that the particular values of PRIORITY do not matter; only
52818     their relative ordering.
52819
52820'warn_unused'
52821
52822     For C++ types with non-trivial constructors and/or destructors it
52823     is impossible for the compiler to determine whether a variable of
52824     this type is truly unused if it is not referenced.  This type
52825     attribute informs the compiler that variables of this type should
52826     be warned about if they appear to be unused, just like variables of
52827     fundamental types.
52828
52829     This attribute is appropriate for types which just represent a
52830     value, such as 'std::string'; it is not appropriate for types which
52831     control a resource, such as 'std::lock_guard'.
52832
52833     This attribute is also accepted in C, but it is unnecessary because
52834     C does not have constructors or destructors.
52835
52836
52837File: gcc.info,  Node: Function Multiversioning,  Next: Type Traits,  Prev: C++ Attributes,  Up: C++ Extensions
52838
528397.8 Function Multiversioning
52840============================
52841
52842With the GNU C++ front end, for x86 targets, you may specify multiple
52843versions of a function, where each function is specialized for a
52844specific target feature.  At runtime, the appropriate version of the
52845function is automatically executed depending on the characteristics of
52846the execution platform.  Here is an example.
52847
52848     __attribute__ ((target ("default")))
52849     int foo ()
52850     {
52851       // The default version of foo.
52852       return 0;
52853     }
52854
52855     __attribute__ ((target ("sse4.2")))
52856     int foo ()
52857     {
52858       // foo version for SSE4.2
52859       return 1;
52860     }
52861
52862     __attribute__ ((target ("arch=atom")))
52863     int foo ()
52864     {
52865       // foo version for the Intel ATOM processor
52866       return 2;
52867     }
52868
52869     __attribute__ ((target ("arch=amdfam10")))
52870     int foo ()
52871     {
52872       // foo version for the AMD Family 0x10 processors.
52873       return 3;
52874     }
52875
52876     int main ()
52877     {
52878       int (*p)() = &foo;
52879       assert ((*p) () == foo ());
52880       return 0;
52881     }
52882
52883 In the above example, four versions of function foo are created.  The
52884first version of foo with the target attribute "default" is the default
52885version.  This version gets executed when no other target specific
52886version qualifies for execution on a particular platform.  A new version
52887of foo is created by using the same function signature but with a
52888different target string.  Function foo is called or a pointer to it is
52889taken just like a regular function.  GCC takes care of doing the
52890dispatching to call the right version at runtime.  Refer to the GCC wiki
52891on Function Multiversioning
52892(http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details.
52893
52894
52895File: gcc.info,  Node: Type Traits,  Next: C++ Concepts,  Prev: Function Multiversioning,  Up: C++ Extensions
52896
528977.9 Type Traits
52898===============
52899
52900The C++ front end implements syntactic extensions that allow
52901compile-time determination of various characteristics of a type (or of a
52902pair of types).
52903
52904'__has_nothrow_assign (type)'
52905     If 'type' is 'const'-qualified or is a reference type then the
52906     trait is 'false'.  Otherwise if '__has_trivial_assign (type)' is
52907     'true' then the trait is 'true', else if 'type' is a cv-qualified
52908     class or union type with copy assignment operators that are known
52909     not to throw an exception then the trait is 'true', else it is
52910     'false'.  Requires: 'type' shall be a complete type, (possibly
52911     cv-qualified) 'void', or an array of unknown bound.
52912
52913'__has_nothrow_copy (type)'
52914     If '__has_trivial_copy (type)' is 'true' then the trait is 'true',
52915     else if 'type' is a cv-qualified class or union type with copy
52916     constructors that are known not to throw an exception then the
52917     trait is 'true', else it is 'false'.  Requires: 'type' shall be a
52918     complete type, (possibly cv-qualified) 'void', or an array of
52919     unknown bound.
52920
52921'__has_nothrow_constructor (type)'
52922     If '__has_trivial_constructor (type)' is 'true' then the trait is
52923     'true', else if 'type' is a cv class or union type (or array
52924     thereof) with a default constructor that is known not to throw an
52925     exception then the trait is 'true', else it is 'false'.  Requires:
52926     'type' shall be a complete type, (possibly cv-qualified) 'void', or
52927     an array of unknown bound.
52928
52929'__has_trivial_assign (type)'
52930     If 'type' is 'const'- qualified or is a reference type then the
52931     trait is 'false'.  Otherwise if '__is_pod (type)' is 'true' then
52932     the trait is 'true', else if 'type' is a cv-qualified class or
52933     union type with a trivial copy assignment ([class.copy]) then the
52934     trait is 'true', else it is 'false'.  Requires: 'type' shall be a
52935     complete type, (possibly cv-qualified) 'void', or an array of
52936     unknown bound.
52937
52938'__has_trivial_copy (type)'
52939     If '__is_pod (type)' is 'true' or 'type' is a reference type then
52940     the trait is 'true', else if 'type' is a cv class or union type
52941     with a trivial copy constructor ([class.copy]) then the trait is
52942     'true', else it is 'false'.  Requires: 'type' shall be a complete
52943     type, (possibly cv-qualified) 'void', or an array of unknown bound.
52944
52945'__has_trivial_constructor (type)'
52946     If '__is_pod (type)' is 'true' then the trait is 'true', else if
52947     'type' is a cv-qualified class or union type (or array thereof)
52948     with a trivial default constructor ([class.ctor]) then the trait is
52949     'true', else it is 'false'.  Requires: 'type' shall be a complete
52950     type, (possibly cv-qualified) 'void', or an array of unknown bound.
52951
52952'__has_trivial_destructor (type)'
52953     If '__is_pod (type)' is 'true' or 'type' is a reference type then
52954     the trait is 'true', else if 'type' is a cv class or union type (or
52955     array thereof) with a trivial destructor ([class.dtor]) then the
52956     trait is 'true', else it is 'false'.  Requires: 'type' shall be a
52957     complete type, (possibly cv-qualified) 'void', or an array of
52958     unknown bound.
52959
52960'__has_virtual_destructor (type)'
52961     If 'type' is a class type with a virtual destructor ([class.dtor])
52962     then the trait is 'true', else it is 'false'.  Requires: 'type'
52963     shall be a complete type, (possibly cv-qualified) 'void', or an
52964     array of unknown bound.
52965
52966'__is_abstract (type)'
52967     If 'type' is an abstract class ([class.abstract]) then the trait is
52968     'true', else it is 'false'.  Requires: 'type' shall be a complete
52969     type, (possibly cv-qualified) 'void', or an array of unknown bound.
52970
52971'__is_base_of (base_type, derived_type)'
52972     If 'base_type' is a base class of 'derived_type' ([class.derived])
52973     then the trait is 'true', otherwise it is 'false'.  Top-level
52974     cv-qualifications of 'base_type' and 'derived_type' are ignored.
52975     For the purposes of this trait, a class type is considered is own
52976     base.  Requires: if '__is_class (base_type)' and '__is_class
52977     (derived_type)' are 'true' and 'base_type' and 'derived_type' are
52978     not the same type (disregarding cv-qualifiers), 'derived_type'
52979     shall be a complete type.  A diagnostic is produced if this
52980     requirement is not met.
52981
52982'__is_class (type)'
52983     If 'type' is a cv-qualified class type, and not a union type
52984     ([basic.compound]) the trait is 'true', else it is 'false'.
52985
52986'__is_empty (type)'
52987     If '__is_class (type)' is 'false' then the trait is 'false'.
52988     Otherwise 'type' is considered empty if and only if: 'type' has no
52989     non-static data members, or all non-static data members, if any,
52990     are bit-fields of length 0, and 'type' has no virtual members, and
52991     'type' has no virtual base classes, and 'type' has no base classes
52992     'base_type' for which '__is_empty (base_type)' is 'false'.
52993     Requires: 'type' shall be a complete type, (possibly cv-qualified)
52994     'void', or an array of unknown bound.
52995
52996'__is_enum (type)'
52997     If 'type' is a cv enumeration type ([basic.compound]) the trait is
52998     'true', else it is 'false'.
52999
53000'__is_literal_type (type)'
53001     If 'type' is a literal type ([basic.types]) the trait is 'true',
53002     else it is 'false'.  Requires: 'type' shall be a complete type,
53003     (possibly cv-qualified) 'void', or an array of unknown bound.
53004
53005'__is_pod (type)'
53006     If 'type' is a cv POD type ([basic.types]) then the trait is
53007     'true', else it is 'false'.  Requires: 'type' shall be a complete
53008     type, (possibly cv-qualified) 'void', or an array of unknown bound.
53009
53010'__is_polymorphic (type)'
53011     If 'type' is a polymorphic class ([class.virtual]) then the trait
53012     is 'true', else it is 'false'.  Requires: 'type' shall be a
53013     complete type, (possibly cv-qualified) 'void', or an array of
53014     unknown bound.
53015
53016'__is_standard_layout (type)'
53017     If 'type' is a standard-layout type ([basic.types]) the trait is
53018     'true', else it is 'false'.  Requires: 'type' shall be a complete
53019     type, (possibly cv-qualified) 'void', or an array of unknown bound.
53020
53021'__is_trivial (type)'
53022     If 'type' is a trivial type ([basic.types]) the trait is 'true',
53023     else it is 'false'.  Requires: 'type' shall be a complete type,
53024     (possibly cv-qualified) 'void', or an array of unknown bound.
53025
53026'__is_union (type)'
53027     If 'type' is a cv union type ([basic.compound]) the trait is
53028     'true', else it is 'false'.
53029
53030'__underlying_type (type)'
53031     The underlying type of 'type'.  Requires: 'type' shall be an
53032     enumeration type ([dcl.enum]).
53033
53034'__integer_pack (length)'
53035     When used as the pattern of a pack expansion within a template
53036     definition, expands to a template argument pack containing integers
53037     from '0' to 'length-1'.  This is provided for efficient
53038     implementation of 'std::make_integer_sequence'.
53039
53040
53041File: gcc.info,  Node: C++ Concepts,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
53042
530437.10 C++ Concepts
53044=================
53045
53046C++ concepts provide much-improved support for generic programming.  In
53047particular, they allow the specification of constraints on template
53048arguments.  The constraints are used to extend the usual overloading and
53049partial specialization capabilities of the language, allowing generic
53050data structures and algorithms to be "refined" based on their properties
53051rather than their type names.
53052
53053 The following keywords are reserved for concepts.
53054
53055'assumes'
53056     States an expression as an assumption, and if possible, verifies
53057     that the assumption is valid.  For example, 'assume(n > 0)'.
53058
53059'axiom'
53060     Introduces an axiom definition.  Axioms introduce requirements on
53061     values.
53062
53063'forall'
53064     Introduces a universally quantified object in an axiom.  For
53065     example, 'forall (int n) n + 0 == n').
53066
53067'concept'
53068     Introduces a concept definition.  Concepts are sets of syntactic
53069     and semantic requirements on types and their values.
53070
53071'requires'
53072     Introduces constraints on template arguments or requirements for a
53073     member function of a class template.
53074
53075 The front end also exposes a number of internal mechanism that can be
53076used to simplify the writing of type traits.  Note that some of these
53077traits are likely to be removed in the future.
53078
53079'__is_same (type1, type2)'
53080     A binary type trait: 'true' whenever the type arguments are the
53081     same.
53082
53083
53084File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: C++ Concepts,  Up: C++ Extensions
53085
530867.11 Deprecated Features
53087========================
53088
53089In the past, the GNU C++ compiler was extended to experiment with new
53090features, at a time when the C++ language was still evolving.  Now that
53091the C++ standard is complete, some of those features are superseded by
53092superior alternatives.  Using the old features might cause a warning in
53093some cases that the feature will be dropped in the future.  In other
53094cases, the feature might be gone already.
53095
53096 G++ allows a virtual function returning 'void *' to be overridden by
53097one returning a different pointer type.  This extension to the covariant
53098return type rules is now deprecated and will be removed from a future
53099version.
53100
53101 The use of default arguments in function pointers, function typedefs
53102and other places where they are not permitted by the standard is
53103deprecated and will be removed from a future version of G++.
53104
53105 G++ allows floating-point literals to appear in integral constant
53106expressions, e.g. ' enum E { e = int(2.2 * 3.7) } ' This extension is
53107deprecated and will be removed from a future version.
53108
53109 G++ allows static data members of const floating-point type to be
53110declared with an initializer in a class definition.  The standard only
53111allows initializers for static members of const integral types and const
53112enumeration types so this extension has been deprecated and will be
53113removed from a future version.
53114
53115 G++ allows attributes to follow a parenthesized direct initializer,
53116e.g. ' int f (0) __attribute__ ((something)); ' This extension has been
53117ignored since G++ 3.3 and is deprecated.
53118
53119 G++ allows anonymous structs and unions to have members that are not
53120public non-static data members (i.e. fields).  These extensions are
53121deprecated.
53122
53123
53124File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
53125
531267.12 Backwards Compatibility
53127============================
53128
53129Now that there is a definitive ISO standard C++, G++ has a specification
53130to adhere to.  The C++ language evolved over time, and features that
53131used to be acceptable in previous drafts of the standard, such as the
53132ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
53133to allow compilation of C++ written to such drafts, G++ contains some
53134backwards compatibilities.  _All such backwards compatibility features
53135are liable to disappear in future versions of G++._  They should be
53136considered deprecated.  *Note Deprecated Features::.
53137
53138'Implicit C language'
53139     Old C system header files did not contain an 'extern "C" {...}'
53140     scope to set the language.  On such systems, all system header
53141     files are implicitly scoped inside a C language scope.  Such
53142     headers must correctly prototype function argument types, there is
53143     no leeway for '()' to indicate an unspecified set of arguments.
53144
53145
53146File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
53147
531488 GNU Objective-C Features
53149**************************
53150
53151This document is meant to describe some of the GNU Objective-C features.
53152It is not intended to teach you Objective-C. There are several resources
53153on the Internet that present the language.
53154
53155* Menu:
53156
53157* GNU Objective-C runtime API::
53158* Executing code before main::
53159* Type encoding::
53160* Garbage Collection::
53161* Constant string objects::
53162* compatibility_alias::
53163* Exceptions::
53164* Synchronization::
53165* Fast enumeration::
53166* Messaging with the GNU Objective-C runtime::
53167
53168
53169File: gcc.info,  Node: GNU Objective-C runtime API,  Next: Executing code before main,  Up: Objective-C
53170
531718.1 GNU Objective-C Runtime API
53172===============================
53173
53174This section is specific for the GNU Objective-C runtime.  If you are
53175using a different runtime, you can skip it.
53176
53177 The GNU Objective-C runtime provides an API that allows you to interact
53178with the Objective-C runtime system, querying the live runtime
53179structures and even manipulating them.  This allows you for example to
53180inspect and navigate classes, methods and protocols; to define new
53181classes or new methods, and even to modify existing classes or
53182protocols.
53183
53184 If you are using a "Foundation" library such as GNUstep-Base, this
53185library will provide you with a rich set of functionality to do most of
53186the inspection tasks, and you probably will only need direct access to
53187the GNU Objective-C runtime API to define new classes or methods.
53188
53189* Menu:
53190
53191* Modern GNU Objective-C runtime API::
53192* Traditional GNU Objective-C runtime API::
53193
53194
53195File: gcc.info,  Node: Modern GNU Objective-C runtime API,  Next: Traditional GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
53196
531978.1.1 Modern GNU Objective-C Runtime API
53198----------------------------------------
53199
53200The GNU Objective-C runtime provides an API which is similar to the one
53201provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime.  The
53202API is documented in the public header files of the GNU Objective-C
53203runtime:
53204
53205   * 'objc/objc.h': this is the basic Objective-C header file, defining
53206     the basic Objective-C types such as 'id', 'Class' and 'BOOL'.  You
53207     have to include this header to do almost anything with Objective-C.
53208
53209   * 'objc/runtime.h': this header declares most of the public runtime
53210     API functions allowing you to inspect and manipulate the
53211     Objective-C runtime data structures.  These functions are fairly
53212     standardized across Objective-C runtimes and are almost identical
53213     to the Apple/NeXT Objective-C runtime ones.  It does not declare
53214     functions in some specialized areas (constructing and forwarding
53215     message invocations, threading) which are in the other headers
53216     below.  You have to include 'objc/objc.h' and 'objc/runtime.h' to
53217     use any of the functions, such as 'class_getName()', declared in
53218     'objc/runtime.h'.
53219
53220   * 'objc/message.h': this header declares public functions used to
53221     construct, deconstruct and forward message invocations.  Because
53222     messaging is done in quite a different way on different runtimes,
53223     functions in this header are specific to the GNU Objective-C
53224     runtime implementation.
53225
53226   * 'objc/objc-exception.h': this header declares some public functions
53227     related to Objective-C exceptions.  For example functions in this
53228     header allow you to throw an Objective-C exception from plain C/C++
53229     code.
53230
53231   * 'objc/objc-sync.h': this header declares some public functions
53232     related to the Objective-C '@synchronized()' syntax, allowing you
53233     to emulate an Objective-C '@synchronized()' block in plain C/C++
53234     code.
53235
53236   * 'objc/thr.h': this header declares a public runtime API threading
53237     layer that is only provided by the GNU Objective-C runtime.  It
53238     declares functions such as 'objc_mutex_lock()', which provide a
53239     platform-independent set of threading functions.
53240
53241 The header files contain detailed documentation for each function in
53242the GNU Objective-C runtime API.
53243
53244
53245File: gcc.info,  Node: Traditional GNU Objective-C runtime API,  Prev: Modern GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
53246
532478.1.2 Traditional GNU Objective-C Runtime API
53248---------------------------------------------
53249
53250The GNU Objective-C runtime used to provide a different API, which we
53251call the "traditional" GNU Objective-C runtime API. Functions belonging
53252to this API are easy to recognize because they use a different naming
53253convention, such as 'class_get_super_class()' (traditional API) instead
53254of 'class_getSuperclass()' (modern API). Software using this API
53255includes the file 'objc/objc-api.h' where it is declared.
53256
53257 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer
53258available.
53259
53260
53261File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C
53262
532638.2 '+load': Executing Code before 'main'
53264=========================================
53265
53266This section is specific for the GNU Objective-C runtime.  If you are
53267using a different runtime, you can skip it.
53268
53269 The GNU Objective-C runtime provides a way that allows you to execute
53270code before the execution of the program enters the 'main' function.
53271The code is executed on a per-class and a per-category basis, through a
53272special class method '+load'.
53273
53274 This facility is very useful if you want to initialize global variables
53275which can be accessed by the program directly, without sending a message
53276to the class first.  The usual way to initialize global variables, in
53277the '+initialize' method, might not be useful because '+initialize' is
53278only called when the first message is sent to a class object, which in
53279some cases could be too late.
53280
53281 Suppose for example you have a 'FileStream' class that declares
53282'Stdin', 'Stdout' and 'Stderr' as global variables, like below:
53283
53284
53285     FileStream *Stdin = nil;
53286     FileStream *Stdout = nil;
53287     FileStream *Stderr = nil;
53288
53289     @implementation FileStream
53290
53291     + (void)initialize
53292     {
53293         Stdin = [[FileStream new] initWithFd:0];
53294         Stdout = [[FileStream new] initWithFd:1];
53295         Stderr = [[FileStream new] initWithFd:2];
53296     }
53297
53298     /* Other methods here */
53299     @end
53300
53301
53302 In this example, the initialization of 'Stdin', 'Stdout' and 'Stderr'
53303in '+initialize' occurs too late.  The programmer can send a message to
53304one of these objects before the variables are actually initialized, thus
53305sending messages to the 'nil' object.  The '+initialize' method which
53306actually initializes the global variables is not invoked until the first
53307message is sent to the class object.  The solution would require these
53308variables to be initialized just before entering 'main'.
53309
53310 The correct solution of the above problem is to use the '+load' method
53311instead of '+initialize':
53312
53313
53314     @implementation FileStream
53315
53316     + (void)load
53317     {
53318         Stdin = [[FileStream new] initWithFd:0];
53319         Stdout = [[FileStream new] initWithFd:1];
53320         Stderr = [[FileStream new] initWithFd:2];
53321     }
53322
53323     /* Other methods here */
53324     @end
53325
53326
53327 The '+load' is a method that is not overridden by categories.  If a
53328class and a category of it both implement '+load', both methods are
53329invoked.  This allows some additional initializations to be performed in
53330a category.
53331
53332 This mechanism is not intended to be a replacement for '+initialize'.
53333You should be aware of its limitations when you decide to use it instead
53334of '+initialize'.
53335
53336* Menu:
53337
53338* What you can and what you cannot do in +load::
53339
53340
53341File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main
53342
533438.2.1 What You Can and Cannot Do in '+load'
53344-------------------------------------------
53345
53346'+load' is to be used only as a last resort.  Because it is executed
53347very early, most of the Objective-C runtime machinery will not be ready
53348when '+load' is executed; hence '+load' works best for executing C code
53349that is independent on the Objective-C runtime.
53350
53351 The '+load' implementation in the GNU runtime guarantees you the
53352following things:
53353
53354   * you can write whatever C code you like;
53355
53356   * you can allocate and send messages to objects whose class is
53357     implemented in the same file;
53358
53359   * the '+load' implementation of all super classes of a class are
53360     executed before the '+load' of that class is executed;
53361
53362   * the '+load' implementation of a class is executed before the
53363     '+load' implementation of any category.
53364
53365 In particular, the following things, even if they can work in a
53366particular case, are not guaranteed:
53367
53368   * allocation of or sending messages to arbitrary objects;
53369
53370   * allocation of or sending messages to objects whose classes have a
53371     category implemented in the same file;
53372
53373   * sending messages to Objective-C constant strings ('@"this is a
53374     constant string"');
53375
53376 You should make no assumptions about receiving '+load' in sibling
53377classes when you write '+load' of a class.  The order in which sibling
53378classes receive '+load' is not guaranteed.
53379
53380 The order in which '+load' and '+initialize' are called could be
53381problematic if this matters.  If you don't allocate objects inside
53382'+load', it is guaranteed that '+load' is called before '+initialize'.
53383If you create an object inside '+load' the '+initialize' method of
53384object's class is invoked even if '+load' was not invoked.  Note if you
53385explicitly call '+load' on a class, '+initialize' will be called first.
53386To avoid possible problems try to implement only one of these methods.
53387
53388 The '+load' method is also invoked when a bundle is dynamically loaded
53389into your running program.  This happens automatically without any
53390intervening operation from you.  When you write bundles and you need to
53391write '+load' you can safely create and send messages to objects whose
53392classes already exist in the running program.  The same restrictions as
53393above apply to classes defined in bundle.
53394
53395
53396File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
53397
533988.3 Type Encoding
53399=================
53400
53401This is an advanced section.  Type encodings are used extensively by the
53402compiler and by the runtime, but you generally do not need to know about
53403them to use Objective-C.
53404
53405 The Objective-C compiler generates type encodings for all the types.
53406These type encodings are used at runtime to find out information about
53407selectors and methods and about objects and classes.
53408
53409 The types are encoded in the following way:
53410
53411'_Bool'            'B'
53412'char'             'c'
53413'unsigned char'    'C'
53414'short'            's'
53415'unsigned short'   'S'
53416'int'              'i'
53417'unsigned int'     'I'
53418'long'             'l'
53419'unsigned long'    'L'
53420'long long'        'q'
53421'unsigned long     'Q'
53422long'
53423'float'            'f'
53424'double'           'd'
53425'long double'      'D'
53426'void'             'v'
53427'id'               '@'
53428'Class'            '#'
53429'SEL'              ':'
53430'char*'            '*'
53431'enum'             an 'enum' is encoded exactly as the integer type
53432                   that the compiler uses for it, which depends on the
53433                   enumeration values.  Often the compiler users
53434                   'unsigned int', which is then encoded as 'I'.
53435unknown type       '?'
53436Complex types      'j' followed by the inner type.  For example
53437                   '_Complex double' is encoded as "jd".
53438bit-fields         'b' followed by the starting position of the
53439                   bit-field, the type of the bit-field and the size of
53440                   the bit-field (the bit-fields encoding was changed
53441                   from the NeXT's compiler encoding, see below)
53442
53443 The encoding of bit-fields has changed to allow bit-fields to be
53444properly handled by the runtime functions that compute sizes and
53445alignments of types that contain bit-fields.  The previous encoding
53446contained only the size of the bit-field.  Using only this information
53447it is not possible to reliably compute the size occupied by the
53448bit-field.  This is very important in the presence of the Boehm's
53449garbage collector because the objects are allocated using the typed
53450memory facility available in this collector.  The typed memory
53451allocation requires information about where the pointers are located
53452inside the object.
53453
53454 The position in the bit-field is the position, counting in bits, of the
53455bit closest to the beginning of the structure.
53456
53457 The non-atomic types are encoded as follows:
53458
53459pointers       '^' followed by the pointed type.
53460arrays         '[' followed by the number of elements in the array
53461               followed by the type of the elements followed by ']'
53462structures     '{' followed by the name of the structure (or '?' if the
53463               structure is unnamed), the '=' sign, the type of the
53464               members and by '}'
53465unions         '(' followed by the name of the structure (or '?' if the
53466               union is unnamed), the '=' sign, the type of the members
53467               followed by ')'
53468vectors        '![' followed by the vector_size (the number of bytes
53469               composing the vector) followed by a comma, followed by
53470               the alignment (in bytes) of the vector, followed by the
53471               type of the elements followed by ']'
53472
53473 Here are some types and their encodings, as they are generated by the
53474compiler on an i386 machine:
53475
53476
53477Objective-C type                            Compiler encoding
53478     int a[10];                             '[10i]'
53479     struct {                               '{?=i[3f]b128i3b131i2c}'
53480       int i;
53481       float f[3];
53482       int a:3;
53483       int b:2;
53484       char c;
53485     }
53486     int a __attribute__ ((vector_size (16)));'![16,16i]' (alignment
53487                                            depends on the machine)
53488
53489
53490 In addition to the types the compiler also encodes the type specifiers.
53491The table below describes the encoding of the current Objective-C type
53492specifiers:
53493
53494
53495Specifier          Encoding
53496'const'            'r'
53497'in'               'n'
53498'inout'            'N'
53499'out'              'o'
53500'bycopy'           'O'
53501'byref'            'R'
53502'oneway'           'V'
53503
53504
53505 The type specifiers are encoded just before the type.  Unlike types
53506however, the type specifiers are only encoded when they appear in method
53507argument types.
53508
53509 Note how 'const' interacts with pointers:
53510
53511
53512Objective-C type   Compiler encoding
53513     const int     'ri'
53514     const int*    '^ri'
53515     int *const    'r^i'
53516
53517
53518 'const int*' is a pointer to a 'const int', and so is encoded as '^ri'.
53519'int* const', instead, is a 'const' pointer to an 'int', and so is
53520encoded as 'r^i'.
53521
53522 Finally, there is a complication when encoding 'const char *' versus
53523'char * const'.  Because 'char *' is encoded as '*' and not as '^c',
53524there is no way to express the fact that 'r' applies to the pointer or
53525to the pointee.
53526
53527 Hence, it is assumed as a convention that 'r*' means 'const char *'
53528(since it is what is most often meant), and there is no way to encode
53529'char *const'.  'char *const' would simply be encoded as '*', and the
53530'const' is lost.
53531
53532* Menu:
53533
53534* Legacy type encoding::
53535* @encode::
53536* Method signatures::
53537
53538
53539File: gcc.info,  Node: Legacy type encoding,  Next: @encode,  Up: Type encoding
53540
535418.3.1 Legacy Type Encoding
53542--------------------------
53543
53544Unfortunately, historically GCC used to have a number of bugs in its
53545encoding code.  The NeXT runtime expects GCC to emit type encodings in
53546this historical format (compatible with GCC-3.3), so when using the NeXT
53547runtime, GCC will introduce on purpose a number of incorrect encodings:
53548
53549   * the read-only qualifier of the pointee gets emitted before the '^'.
53550     The read-only qualifier of the pointer itself gets ignored, unless
53551     it is a typedef.  Also, the 'r' is only emitted for the outermost
53552     type.
53553
53554   * 32-bit longs are encoded as 'l' or 'L', but not always.  For
53555     typedefs, the compiler uses 'i' or 'I' instead if encoding a struct
53556     field or a pointer.
53557
53558   * 'enum's are always encoded as 'i' (int) even if they are actually
53559     unsigned or long.
53560
53561 In addition to that, the NeXT runtime uses a different encoding for
53562bitfields.  It encodes them as 'b' followed by the size, without a bit
53563offset or the underlying field type.
53564
53565
53566File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding
53567
535688.3.2 '@encode'
53569---------------
53570
53571GNU Objective-C supports the '@encode' syntax that allows you to create
53572a type encoding from a C/Objective-C type.  For example, '@encode(int)'
53573is compiled by the compiler into '"i"'.
53574
53575 '@encode' does not support type qualifiers other than 'const'.  For
53576example, '@encode(const char*)' is valid and is compiled into '"r*"',
53577while '@encode(bycopy char *)' is invalid and will cause a compilation
53578error.
53579
53580
53581File: gcc.info,  Node: Method signatures,  Prev: @encode,  Up: Type encoding
53582
535838.3.3 Method Signatures
53584-----------------------
53585
53586This section documents the encoding of method types, which is rarely
53587needed to use Objective-C. You should skip it at a first reading; the
53588runtime provides functions that will work on methods and can walk
53589through the list of parameters and interpret them for you.  These
53590functions are part of the public "API" and are the preferred way to
53591interact with method signatures from user code.
53592
53593 But if you need to debug a problem with method signatures and need to
53594know how they are implemented (i.e., the "ABI"), read on.
53595
53596 Methods have their "signature" encoded and made available to the
53597runtime.  The "signature" encodes all the information required to
53598dynamically build invocations of the method at runtime: return type and
53599arguments.
53600
53601 The "signature" is a null-terminated string, composed of the following:
53602
53603   * The return type, including type qualifiers.  For example, a method
53604     returning 'int' would have 'i' here.
53605
53606   * The total size (in bytes) required to pass all the parameters.
53607     This includes the two hidden parameters (the object 'self' and the
53608     method selector '_cmd').
53609
53610   * Each argument, with the type encoding, followed by the offset (in
53611     bytes) of the argument in the list of parameters.
53612
53613 For example, a method with no arguments and returning 'int' would have
53614the signature 'i8@0:4' if the size of a pointer is 4.  The signature is
53615interpreted as follows: the 'i' is the return type (an 'int'), the '8'
53616is the total size of the parameters in bytes (two pointers each of size
536174), the '@0' is the first parameter (an object at byte offset '0') and
53618':4' is the second parameter (a 'SEL' at byte offset '4').
53619
53620 You can easily find more examples by running the "strings" program on
53621an Objective-C object file compiled by GCC. You'll see a lot of strings
53622that look very much like 'i8@0:4'.  They are signatures of Objective-C
53623methods.
53624
53625
53626File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
53627
536288.4 Garbage Collection
53629======================
53630
53631This section is specific for the GNU Objective-C runtime.  If you are
53632using a different runtime, you can skip it.
53633
53634 Support for garbage collection with the GNU runtime has been added by
53635using a powerful conservative garbage collector, known as the
53636Boehm-Demers-Weiser conservative garbage collector.
53637
53638 To enable the support for it you have to configure the compiler using
53639an additional argument, '--enable-objc-gc'.  This will build the
53640boehm-gc library, and build an additional runtime library which has
53641several enhancements to support the garbage collector.  The new library
53642has a new name, 'libobjc_gc.a' to not conflict with the
53643non-garbage-collected library.
53644
53645 When the garbage collector is used, the objects are allocated using the
53646so-called typed memory allocation mechanism available in the
53647Boehm-Demers-Weiser collector.  This mode requires precise information
53648on where pointers are located inside objects.  This information is
53649computed once per class, immediately after the class has been
53650initialized.
53651
53652 There is a new runtime function 'class_ivar_set_gcinvisible()' which
53653can be used to declare a so-called "weak pointer" reference.  Such a
53654pointer is basically hidden for the garbage collector; this can be
53655useful in certain situations, especially when you want to keep track of
53656the allocated objects, yet allow them to be collected.  This kind of
53657pointers can only be members of objects, you cannot declare a global
53658pointer as a weak reference.  Every type which is a pointer type can be
53659declared a weak pointer, including 'id', 'Class' and 'SEL'.
53660
53661 Here is an example of how to use this feature.  Suppose you want to
53662implement a class whose instances hold a weak pointer reference; the
53663following class does this:
53664
53665
53666     @interface WeakPointer : Object
53667     {
53668         const void* weakPointer;
53669     }
53670
53671     - initWithPointer:(const void*)p;
53672     - (const void*)weakPointer;
53673     @end
53674
53675
53676     @implementation WeakPointer
53677
53678     + (void)initialize
53679     {
53680       if (self == objc_lookUpClass ("WeakPointer"))
53681         class_ivar_set_gcinvisible (self, "weakPointer", YES);
53682     }
53683
53684     - initWithPointer:(const void*)p
53685     {
53686       weakPointer = p;
53687       return self;
53688     }
53689
53690     - (const void*)weakPointer
53691     {
53692       return weakPointer;
53693     }
53694
53695     @end
53696
53697
53698 Weak pointers are supported through a new type character specifier
53699represented by the '!' character.  The 'class_ivar_set_gcinvisible()'
53700function adds or removes this specifier to the string type description
53701of the instance variable named as argument.
53702
53703
53704File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
53705
537068.5 Constant String Objects
53707===========================
53708
53709GNU Objective-C provides constant string objects that are generated
53710directly by the compiler.  You declare a constant string object by
53711prefixing a C constant string with the character '@':
53712
53713       id myString = @"this is a constant string object";
53714
53715 The constant string objects are by default instances of the
53716'NXConstantString' class which is provided by the GNU Objective-C
53717runtime.  To get the definition of this class you must include the
53718'objc/NXConstStr.h' header file.
53719
53720 User defined libraries may want to implement their own constant string
53721class.  To be able to support them, the GNU Objective-C compiler
53722provides a new command line options
53723'-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
53724to a strict structure, the same as 'NXConstantString''s structure:
53725
53726
53727     @interface MyConstantStringClass
53728     {
53729       Class isa;
53730       char *c_string;
53731       unsigned int len;
53732     }
53733     @end
53734
53735
53736 'NXConstantString' inherits from 'Object'; user class libraries may
53737choose to inherit the customized constant string class from a different
53738class than 'Object'.  There is no requirement in the methods the
53739constant string class has to implement, but the final ivar layout of the
53740class must be the compatible with the given structure.
53741
53742 When the compiler creates the statically allocated constant string
53743object, the 'c_string' field will be filled by the compiler with the
53744string; the 'length' field will be filled by the compiler with the
53745string length; the 'isa' pointer will be filled with 'NULL' by the
53746compiler, and it will later be fixed up automatically at runtime by the
53747GNU Objective-C runtime library to point to the class which was set by
53748the '-fconstant-string-class' option when the object file is loaded (if
53749you wonder how it works behind the scenes, the name of the class to use,
53750and the list of static objects to fixup, are stored by the compiler in
53751the object file in a place where the GNU runtime library will find them
53752at runtime).
53753
53754 As a result, when a file is compiled with the '-fconstant-string-class'
53755option, all the constant string objects will be instances of the class
53756specified as argument to this option.  It is possible to have multiple
53757compilation units referring to different constant string classes,
53758neither the compiler nor the linker impose any restrictions in doing
53759this.
53760
53761
53762File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C
53763
537648.6 'compatibility_alias'
53765=========================
53766
53767The keyword '@compatibility_alias' allows you to define a class name as
53768equivalent to another class name.  For example:
53769
53770     @compatibility_alias WOApplication GSWApplication;
53771
53772 tells the compiler that each time it encounters 'WOApplication' as a
53773class name, it should replace it with 'GSWApplication' (that is,
53774'WOApplication' is just an alias for 'GSWApplication').
53775
53776 There are some constraints on how this can be used--
53777
53778   * 'WOApplication' (the alias) must not be an existing class;
53779
53780   * 'GSWApplication' (the real class) must be an existing class.
53781
53782
53783File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C
53784
537858.7 Exceptions
53786==============
53787
53788GNU Objective-C provides exception support built into the language, as
53789in the following example:
53790
53791       @try {
53792         ...
53793            @throw expr;
53794         ...
53795       }
53796       @catch (AnObjCClass *exc) {
53797         ...
53798           @throw expr;
53799         ...
53800           @throw;
53801         ...
53802       }
53803       @catch (AnotherClass *exc) {
53804         ...
53805       }
53806       @catch (id allOthers) {
53807         ...
53808       }
53809       @finally {
53810         ...
53811           @throw expr;
53812         ...
53813       }
53814
53815 The '@throw' statement may appear anywhere in an Objective-C or
53816Objective-C++ program; when used inside of a '@catch' block, the
53817'@throw' may appear without an argument (as shown above), in which case
53818the object caught by the '@catch' will be rethrown.
53819
53820 Note that only (pointers to) Objective-C objects may be thrown and
53821caught using this scheme.  When an object is thrown, it will be caught
53822by the nearest '@catch' clause capable of handling objects of that type,
53823analogously to how 'catch' blocks work in C++ and Java.  A '@catch(id
53824...)' clause (as shown above) may also be provided to catch any and all
53825Objective-C exceptions not caught by previous '@catch' clauses (if any).
53826
53827 The '@finally' clause, if present, will be executed upon exit from the
53828immediately preceding '@try ... @catch' section.  This will happen
53829regardless of whether any exceptions are thrown, caught or rethrown
53830inside the '@try ... @catch' section, analogously to the behavior of the
53831'finally' clause in Java.
53832
53833 There are several caveats to using the new exception mechanism:
53834
53835   * The '-fobjc-exceptions' command line option must be used when
53836     compiling Objective-C files that use exceptions.
53837
53838   * With the GNU runtime, exceptions are always implemented as "native"
53839     exceptions and it is recommended that the '-fexceptions' and
53840     '-shared-libgcc' options are used when linking.
53841
53842   * With the NeXT runtime, although currently designed to be binary
53843     compatible with 'NS_HANDLER'-style idioms provided by the
53844     'NSException' class, the new exceptions can only be used on Mac OS
53845     X 10.3 (Panther) and later systems, due to additional functionality
53846     needed in the NeXT Objective-C runtime.
53847
53848   * As mentioned above, the new exceptions do not support handling
53849     types other than Objective-C objects.  Furthermore, when used from
53850     Objective-C++, the Objective-C exception model does not
53851     interoperate with C++ exceptions at this time.  This means you
53852     cannot '@throw' an exception from Objective-C and 'catch' it in
53853     C++, or vice versa (i.e., 'throw ... @catch').
53854
53855
53856File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C
53857
538588.8 Synchronization
53859===================
53860
53861GNU Objective-C provides support for synchronized blocks:
53862
53863       @synchronized (ObjCClass *guard) {
53864         ...
53865       }
53866
53867 Upon entering the '@synchronized' block, a thread of execution shall
53868first check whether a lock has been placed on the corresponding 'guard'
53869object by another thread.  If it has, the current thread shall wait
53870until the other thread relinquishes its lock.  Once 'guard' becomes
53871available, the current thread will place its own lock on it, execute the
53872code contained in the '@synchronized' block, and finally relinquish the
53873lock (thereby making 'guard' available to other threads).
53874
53875 Unlike Java, Objective-C does not allow for entire methods to be marked
53876'@synchronized'.  Note that throwing exceptions out of '@synchronized'
53877blocks is allowed, and will cause the guarding object to be unlocked
53878properly.
53879
53880 Because of the interactions between synchronization and exception
53881handling, you can only use '@synchronized' when compiling with
53882exceptions enabled, that is with the command line option
53883'-fobjc-exceptions'.
53884
53885
53886File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C
53887
538888.9 Fast Enumeration
53889====================
53890
53891* Menu:
53892
53893* Using fast enumeration::
53894* c99-like fast enumeration syntax::
53895* Fast enumeration details::
53896* Fast enumeration protocol::
53897
53898
53899File: gcc.info,  Node: Using fast enumeration,  Next: c99-like fast enumeration syntax,  Up: Fast enumeration
53900
539018.9.1 Using Fast Enumeration
53902----------------------------
53903
53904GNU Objective-C provides support for the fast enumeration syntax:
53905
53906       id array = ...;
53907       id object;
53908
53909       for (object in array)
53910       {
53911         /* Do something with 'object' */
53912       }
53913
53914 'array' needs to be an Objective-C object (usually a collection object,
53915for example an array, a dictionary or a set) which implements the "Fast
53916Enumeration Protocol" (see below).  If you are using a Foundation
53917library such as GNUstep Base or Apple Cocoa Foundation, all collection
53918objects in the library implement this protocol and can be used in this
53919way.
53920
53921 The code above would iterate over all objects in 'array'.  For each of
53922them, it assigns it to 'object', then executes the 'Do something with
53923'object'' statements.
53924
53925 Here is a fully worked-out example using a Foundation library (which
53926provides the implementation of 'NSArray', 'NSString' and 'NSLog'):
53927
53928       NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
53929       NSString *object;
53930
53931       for (object in array)
53932         NSLog (@"Iterating over %@", object);
53933
53934
53935File: gcc.info,  Node: c99-like fast enumeration syntax,  Next: Fast enumeration details,  Prev: Using fast enumeration,  Up: Fast enumeration
53936
539378.9.2 C99-Like Fast Enumeration Syntax
53938--------------------------------------
53939
53940A c99-like declaration syntax is also allowed:
53941
53942       id array = ...;
53943
53944       for (id object in array)
53945       {
53946         /* Do something with 'object'  */
53947       }
53948
53949 this is completely equivalent to:
53950
53951       id array = ...;
53952
53953       {
53954         id object;
53955         for (object in array)
53956         {
53957           /* Do something with 'object'  */
53958         }
53959       }
53960
53961 but can save some typing.
53962
53963 Note that the option '-std=c99' is not required to allow this syntax in
53964Objective-C.
53965
53966
53967File: gcc.info,  Node: Fast enumeration details,  Next: Fast enumeration protocol,  Prev: c99-like fast enumeration syntax,  Up: Fast enumeration
53968
539698.9.3 Fast Enumeration Details
53970------------------------------
53971
53972Here is a more technical description with the gory details.  Consider
53973the code
53974
53975       for (OBJECT EXPRESSION in COLLECTION EXPRESSION)
53976       {
53977         STATEMENTS
53978       }
53979
53980 here is what happens when you run it:
53981
53982   * 'COLLECTION EXPRESSION' is evaluated exactly once and the result is
53983     used as the collection object to iterate over.  This means it is
53984     safe to write code such as 'for (object in [NSDictionary
53985     keyEnumerator]) ...'.
53986
53987   * the iteration is implemented by the compiler by repeatedly getting
53988     batches of objects from the collection object using the fast
53989     enumeration protocol (see below), then iterating over all objects
53990     in the batch.  This is faster than a normal enumeration where
53991     objects are retrieved one by one (hence the name "fast
53992     enumeration").
53993
53994   * if there are no objects in the collection, then 'OBJECT EXPRESSION'
53995     is set to 'nil' and the loop immediately terminates.
53996
53997   * if there are objects in the collection, then for each object in the
53998     collection (in the order they are returned) 'OBJECT EXPRESSION' is
53999     set to the object, then 'STATEMENTS' are executed.
54000
54001   * 'STATEMENTS' can contain 'break' and 'continue' commands, which
54002     will abort the iteration or skip to the next loop iteration as
54003     expected.
54004
54005   * when the iteration ends because there are no more objects to
54006     iterate over, 'OBJECT EXPRESSION' is set to 'nil'.  This allows you
54007     to determine whether the iteration finished because a 'break'
54008     command was used (in which case 'OBJECT EXPRESSION' will remain set
54009     to the last object that was iterated over) or because it iterated
54010     over all the objects (in which case 'OBJECT EXPRESSION' will be set
54011     to 'nil').
54012
54013   * 'STATEMENTS' must not make any changes to the collection object; if
54014     they do, it is a hard error and the fast enumeration terminates by
54015     invoking 'objc_enumerationMutation', a runtime function that
54016     normally aborts the program but which can be customized by
54017     Foundation libraries via 'objc_set_mutation_handler' to do
54018     something different, such as raising an exception.
54019
54020
54021File: gcc.info,  Node: Fast enumeration protocol,  Prev: Fast enumeration details,  Up: Fast enumeration
54022
540238.9.4 Fast Enumeration Protocol
54024-------------------------------
54025
54026If you want your own collection object to be usable with fast
54027enumeration, you need to have it implement the method
54028
54029     - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state
54030                                           objects: (id *)objects
54031                                             count: (unsigned long)len;
54032
54033 where 'NSFastEnumerationState' must be defined in your code as follows:
54034
54035     typedef struct
54036     {
54037       unsigned long state;
54038       id            *itemsPtr;
54039       unsigned long *mutationsPtr;
54040       unsigned long extra[5];
54041     } NSFastEnumerationState;
54042
54043 If no 'NSFastEnumerationState' is defined in your code, the compiler
54044will automatically replace 'NSFastEnumerationState *' with 'struct
54045__objcFastEnumerationState *', where that type is silently defined by
54046the compiler in an identical way.  This can be confusing and we
54047recommend that you define 'NSFastEnumerationState' (as shown above)
54048instead.
54049
54050 The method is called repeatedly during a fast enumeration to retrieve
54051batches of objects.  Each invocation of the method should retrieve the
54052next batch of objects.
54053
54054 The return value of the method is the number of objects in the current
54055batch; this should not exceed 'len', which is the maximum size of a
54056batch as requested by the caller.  The batch itself is returned in the
54057'itemsPtr' field of the 'NSFastEnumerationState' struct.
54058
54059 To help with returning the objects, the 'objects' array is a C array
54060preallocated by the caller (on the stack) of size 'len'.  In many cases
54061you can put the objects you want to return in that 'objects' array, then
54062do 'itemsPtr = objects'.  But you don't have to; if your collection
54063already has the objects to return in some form of C array, it could
54064return them from there instead.
54065
54066 The 'state' and 'extra' fields of the 'NSFastEnumerationState'
54067structure allows your collection object to keep track of the state of
54068the enumeration.  In a simple array implementation, 'state' may keep
54069track of the index of the last object that was returned, and 'extra' may
54070be unused.
54071
54072 The 'mutationsPtr' field of the 'NSFastEnumerationState' is used to
54073keep track of mutations.  It should point to a number; before working on
54074each object, the fast enumeration loop will check that this number has
54075not changed.  If it has, a mutation has happened and the fast
54076enumeration will abort.  So, 'mutationsPtr' could be set to point to
54077some sort of version number of your collection, which is increased by
54078one every time there is a change (for example when an object is added or
54079removed).  Or, if you are content with less strict mutation checks, it
54080could point to the number of objects in your collection or some other
54081value that can be checked to perform an approximate check that the
54082collection has not been mutated.
54083
54084 Finally, note how we declared the 'len' argument and the return value
54085to be of type 'unsigned long'.  They could also be declared to be of
54086type 'unsigned int' and everything would still work.
54087
54088
54089File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C
54090
540918.10 Messaging with the GNU Objective-C Runtime
54092===============================================
54093
54094This section is specific for the GNU Objective-C runtime.  If you are
54095using a different runtime, you can skip it.
54096
54097 The implementation of messaging in the GNU Objective-C runtime is
54098designed to be portable, and so is based on standard C.
54099
54100 Sending a message in the GNU Objective-C runtime is composed of two
54101separate steps.  First, there is a call to the lookup function,
54102'objc_msg_lookup ()' (or, in the case of messages to super,
54103'objc_msg_lookup_super ()').  This runtime function takes as argument
54104the receiver and the selector of the method to be called; it returns the
54105'IMP', that is a pointer to the function implementing the method.  The
54106second step of method invocation consists of casting this pointer
54107function to the appropriate function pointer type, and calling the
54108function pointed to it with the right arguments.
54109
54110 For example, when the compiler encounters a method invocation such as
54111'[object init]', it compiles it into a call to 'objc_msg_lookup (object,
54112@selector(init))' followed by a cast of the returned value to the
54113appropriate function pointer type, and then it calls it.
54114
54115* Menu:
54116
54117* Dynamically registering methods::
54118* Forwarding hook::
54119
54120
54121File: gcc.info,  Node: Dynamically registering methods,  Next: Forwarding hook,  Up: Messaging with the GNU Objective-C runtime
54122
541238.10.1 Dynamically Registering Methods
54124--------------------------------------
54125
54126If 'objc_msg_lookup()' does not find a suitable method implementation,
54127because the receiver does not implement the required method, it tries to
54128see if the class can dynamically register the method.
54129
54130 To do so, the runtime checks if the class of the receiver implements
54131the method
54132
54133     + (BOOL) resolveInstanceMethod: (SEL)selector;
54134
54135 in the case of an instance method, or
54136
54137     + (BOOL) resolveClassMethod: (SEL)selector;
54138
54139 in the case of a class method.  If the class implements it, the runtime
54140invokes it, passing as argument the selector of the original method, and
54141if it returns 'YES', the runtime tries the lookup again, which could now
54142succeed if a matching method was added dynamically by
54143'+resolveInstanceMethod:' or '+resolveClassMethod:'.
54144
54145 This allows classes to dynamically register methods (by adding them to
54146the class using 'class_addMethod') when they are first called.  To do
54147so, a class should implement '+resolveInstanceMethod:' (or, depending on
54148the case, '+resolveClassMethod:') and have it recognize the selectors of
54149methods that can be registered dynamically at runtime, register them,
54150and return 'YES'.  It should return 'NO' for methods that it does not
54151dynamically registered at runtime.
54152
54153 If '+resolveInstanceMethod:' (or '+resolveClassMethod:') is not
54154implemented or returns 'NO', the runtime then tries the forwarding hook.
54155
54156 Support for '+resolveInstanceMethod:' and 'resolveClassMethod:' was
54157added to the GNU Objective-C runtime in GCC version 4.6.
54158
54159
54160File: gcc.info,  Node: Forwarding hook,  Prev: Dynamically registering methods,  Up: Messaging with the GNU Objective-C runtime
54161
541628.10.2 Forwarding Hook
54163----------------------
54164
54165The GNU Objective-C runtime provides a hook, called
54166'__objc_msg_forward2', which is called by 'objc_msg_lookup()' when it
54167cannot find a method implementation in the runtime tables and after
54168calling '+resolveInstanceMethod:' and '+resolveClassMethod:' has been
54169attempted and did not succeed in dynamically registering the method.
54170
54171 To configure the hook, you set the global variable
54172'__objc_msg_forward2' to a function with the same argument and return
54173types of 'objc_msg_lookup()'.  When 'objc_msg_lookup()' cannot find a
54174method implementation, it invokes the hook function you provided to get
54175a method implementation to return.  So, in practice
54176'__objc_msg_forward2' allows you to extend 'objc_msg_lookup()' by adding
54177some custom code that is called to do a further lookup when no standard
54178method implementation can be found using the normal lookup.
54179
54180 This hook is generally reserved for "Foundation" libraries such as
54181GNUstep Base, which use it to implement their high-level method
54182forwarding API, typically based around the 'forwardInvocation:' method.
54183So, unless you are implementing your own "Foundation" library, you
54184should not set this hook.
54185
54186 In a typical forwarding implementation, the '__objc_msg_forward2' hook
54187function determines the argument and return type of the method that is
54188being looked up, and then creates a function that takes these arguments
54189and has that return type, and returns it to the caller.  Creating this
54190function is non-trivial and is typically performed using a dedicated
54191library such as 'libffi'.
54192
54193 The forwarding method implementation thus created is returned by
54194'objc_msg_lookup()' and is executed as if it was a normal method
54195implementation.  When the forwarding method implementation is called, it
54196is usually expected to pack all arguments into some sort of object
54197(typically, an 'NSInvocation' in a "Foundation" library), and hand it
54198over to the programmer ('forwardInvocation:') who is then allowed to
54199manipulate the method invocation using a high-level API provided by the
54200"Foundation" library.  For example, the programmer may want to examine
54201the method invocation arguments and name and potentially change them
54202before forwarding the method invocation to one or more local objects
54203('performInvocation:') or even to remote objects (by using Distributed
54204Objects or some other mechanism).  When all this completes, the return
54205value is passed back and must be returned correctly to the original
54206caller.
54207
54208 Note that the GNU Objective-C runtime currently provides no support for
54209method forwarding or method invocations other than the
54210'__objc_msg_forward2' hook.
54211
54212 If the forwarding hook does not exist or returns 'NULL', the runtime
54213currently attempts forwarding using an older, deprecated API, and if
54214that fails, it aborts the program.  In future versions of the GNU
54215Objective-C runtime, the runtime will immediately abort.
54216
54217
54218File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
54219
542209 Binary Compatibility
54221**********************
54222
54223Binary compatibility encompasses several related concepts:
54224
54225"application binary interface (ABI)"
54226     The set of runtime conventions followed by all of the tools that
54227     deal with binary representations of a program, including compilers,
54228     assemblers, linkers, and language runtime support.  Some ABIs are
54229     formal with a written specification, possibly designed by multiple
54230     interested parties.  Others are simply the way things are actually
54231     done by a particular set of tools.
54232
54233"ABI conformance"
54234     A compiler conforms to an ABI if it generates code that follows all
54235     of the specifications enumerated by that ABI.  A library conforms
54236     to an ABI if it is implemented according to that ABI.  An
54237     application conforms to an ABI if it is built using tools that
54238     conform to that ABI and does not contain source code that
54239     specifically changes behavior specified by the ABI.
54240
54241"calling conventions"
54242     Calling conventions are a subset of an ABI that specify of how
54243     arguments are passed and function results are returned.
54244
54245"interoperability"
54246     Different sets of tools are interoperable if they generate files
54247     that can be used in the same program.  The set of tools includes
54248     compilers, assemblers, linkers, libraries, header files, startup
54249     files, and debuggers.  Binaries produced by different sets of tools
54250     are not interoperable unless they implement the same ABI.  This
54251     applies to different versions of the same tools as well as tools
54252     from different vendors.
54253
54254"intercallability"
54255     Whether a function in a binary built by one set of tools can call a
54256     function in a binary built by a different set of tools is a subset
54257     of interoperability.
54258
54259"implementation-defined features"
54260     Language standards include lists of implementation-defined features
54261     whose behavior can vary from one implementation to another.  Some
54262     of these features are normally covered by a platform's ABI and
54263     others are not.  The features that are not covered by an ABI
54264     generally affect how a program behaves, but not intercallability.
54265
54266"compatibility"
54267     Conformance to the same ABI and the same behavior of
54268     implementation-defined features are both relevant for
54269     compatibility.
54270
54271 The application binary interface implemented by a C or C++ compiler
54272affects code generation and runtime support for:
54273
54274   * size and alignment of data types
54275   * layout of structured types
54276   * calling conventions
54277   * register usage conventions
54278   * interfaces for runtime arithmetic support
54279   * object file formats
54280
54281 In addition, the application binary interface implemented by a C++
54282compiler affects code generation and runtime support for:
54283   * name mangling
54284   * exception handling
54285   * invoking constructors and destructors
54286   * layout, alignment, and padding of classes
54287   * layout and alignment of virtual tables
54288
54289 Some GCC compilation options cause the compiler to generate code that
54290does not conform to the platform's default ABI.  Other options cause
54291different program behavior for implementation-defined features that are
54292not covered by an ABI.  These options are provided for consistency with
54293other compilers that do not follow the platform's default ABI or the
54294usual behavior of implementation-defined features for the platform.  Be
54295very careful about using such options.
54296
54297 Most platforms have a well-defined ABI that covers C code, but ABIs
54298that cover C++ functionality are not yet common.
54299
54300 Starting with GCC 3.2, GCC binary conventions for C++ are based on a
54301written, vendor-neutral C++ ABI that was designed to be specific to
5430264-bit Itanium but also includes generic specifications that apply to
54303any platform.  This C++ ABI is also implemented by other compiler
54304vendors on some platforms, notably GNU/Linux and BSD systems.  We have
54305tried hard to provide a stable ABI that will be compatible with future
54306GCC releases, but it is possible that we will encounter problems that
54307make this difficult.  Such problems could include different
54308interpretations of the C++ ABI by different vendors, bugs in the ABI, or
54309bugs in the implementation of the ABI in different compilers.  GCC's
54310'-Wabi' switch warns when G++ generates code that is probably not
54311compatible with the C++ ABI.
54312
54313 The C++ library used with a C++ compiler includes the Standard C++
54314Library, with functionality defined in the C++ Standard, plus language
54315runtime support.  The runtime support is included in a C++ ABI, but
54316there is no formal ABI for the Standard C++ Library.  Two
54317implementations of that library are interoperable if one follows the
54318de-facto ABI of the other and if they are both built with the same
54319compiler, or with compilers that conform to the same ABI for C++
54320compiler and runtime support.
54321
54322 When G++ and another C++ compiler conform to the same C++ ABI, but the
54323implementations of the Standard C++ Library that they normally use do
54324not follow the same ABI for the Standard C++ Library, object files built
54325with those compilers can be used in the same program only if they use
54326the same C++ library.  This requires specifying the location of the C++
54327library header files when invoking the compiler whose usual library is
54328not being used.  The location of GCC's C++ header files depends on how
54329the GCC build was configured, but can be seen by using the G++ '-v'
54330option.  With default configuration options for G++ 3.3 the compile line
54331for a different C++ compiler needs to include
54332
54333         -IGCC_INSTALL_DIRECTORY/include/c++/3.3
54334
54335 Similarly, compiling code with G++ that must use a C++ library other
54336than the GNU C++ library requires specifying the location of the header
54337files for that other library.
54338
54339 The most straightforward way to link a program to use a particular C++
54340library is to use a C++ driver that specifies that C++ library by
54341default.  The 'g++' driver, for example, tells the linker where to find
54342GCC's C++ library ('libstdc++') plus the other libraries and startup
54343files it needs, in the proper order.
54344
54345 If a program must use a different C++ library and it's not possible to
54346do the final link using a C++ driver that uses that library by default,
54347it is necessary to tell 'g++' the location and name of that library.  It
54348might also be necessary to specify different startup files and other
54349runtime support libraries, and to suppress the use of GCC's support
54350libraries with one or more of the options '-nostdlib', '-nostartfiles',
54351and '-nodefaultlibs'.
54352
54353
54354File: gcc.info,  Node: Gcov,  Next: Gcov-tool,  Prev: Compatibility,  Up: Top
54355
5435610 'gcov'--a Test Coverage Program
54357**********************************
54358
54359'gcov' is a tool you can use in conjunction with GCC to test code
54360coverage in your programs.
54361
54362* Menu:
54363
54364* Gcov Intro::                  Introduction to gcov.
54365* Invoking Gcov::               How to use gcov.
54366* Gcov and Optimization::       Using gcov with GCC optimization.
54367* Gcov Data Files::             The files used by gcov.
54368* Cross-profiling::             Data file relocation.
54369
54370
54371File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
54372
5437310.1 Introduction to 'gcov'
54374===========================
54375
54376'gcov' is a test coverage program.  Use it in concert with GCC to
54377analyze your programs to help create more efficient, faster running code
54378and to discover untested parts of your program.  You can use 'gcov' as a
54379profiling tool to help discover where your optimization efforts will
54380best affect your code.  You can also use 'gcov' along with the other
54381profiling tool, 'gprof', to assess which parts of your code use the
54382greatest amount of computing time.
54383
54384 Profiling tools help you analyze your code's performance.  Using a
54385profiler such as 'gcov' or 'gprof', you can find out some basic
54386performance statistics, such as:
54387
54388   * how often each line of code executes
54389
54390   * what lines of code are actually executed
54391
54392   * how much computing time each section of code uses
54393
54394 Once you know these things about how your code works when compiled, you
54395can look at each module to see which modules should be optimized.
54396'gcov' helps you determine where to work on optimization.
54397
54398 Software developers also use coverage testing in concert with
54399testsuites, to make sure software is actually good enough for a release.
54400Testsuites can verify that a program works as expected; a coverage
54401program tests to see how much of the program is exercised by the
54402testsuite.  Developers can then determine what kinds of test cases need
54403to be added to the testsuites to create both better testing and a better
54404final product.
54405
54406 You should compile your code without optimization if you plan to use
54407'gcov' because the optimization, by combining some lines of code into
54408one function, may not give you as much information as you need to look
54409for 'hot spots' where the code is using a great deal of computer time.
54410Likewise, because 'gcov' accumulates statistics by line (at the lowest
54411resolution), it works best with a programming style that places only one
54412statement on each line.  If you use complicated macros that expand to
54413loops or to other control structures, the statistics are less
54414helpful--they only report on the line where the macro call appears.  If
54415your complex macros behave like functions, you can replace them with
54416inline functions to solve this problem.
54417
54418 'gcov' creates a logfile called 'SOURCEFILE.gcov' which indicates how
54419many times each line of a source file 'SOURCEFILE.c' has executed.  You
54420can use these logfiles along with 'gprof' to aid in fine-tuning the
54421performance of your programs.  'gprof' gives timing information you can
54422use along with the information you get from 'gcov'.
54423
54424 'gcov' works only on code compiled with GCC.  It is not compatible with
54425any other profiling or test coverage mechanism.
54426
54427
54428File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
54429
5443010.2 Invoking 'gcov'
54431====================
54432
54433     gcov [OPTIONS] FILES
54434
54435 'gcov' accepts the following options:
54436
54437'-a'
54438'--all-blocks'
54439     Write individual execution counts for every basic block.  Normally
54440     gcov outputs execution counts only for the main blocks of a line.
54441     With this option you can determine if blocks within a single line
54442     are not being executed.
54443
54444'-b'
54445'--branch-probabilities'
54446     Write branch frequencies to the output file, and write branch
54447     summary info to the standard output.  This option allows you to see
54448     how often each branch in your program was taken.  Unconditional
54449     branches will not be shown, unless the '-u' option is given.
54450
54451'-c'
54452'--branch-counts'
54453     Write branch frequencies as the number of branches taken, rather
54454     than the percentage of branches taken.
54455
54456'-d'
54457'--display-progress'
54458     Display the progress on the standard output.
54459
54460'-f'
54461'--function-summaries'
54462     Output summaries for each function in addition to the file level
54463     summary.
54464
54465'-h'
54466'--help'
54467     Display help about using 'gcov' (on the standard output), and exit
54468     without doing any further processing.
54469
54470'-i'
54471'--json-format'
54472     Output gcov file in an easy-to-parse JSON intermediate format which
54473     does not require source code for generation.  The JSON file is
54474     compressed with gzip compression algorithm and the files have
54475     '.gcov.json.gz' extension.
54476
54477     Structure of the JSON is following:
54478
54479          {
54480            "current_working_directory": CURRENT_WORKING_DIRECTORY,
54481            "data_file": DATA_FILE,
54482            "format_version": FORMAT_VERSION,
54483            "gcc_version": GCC_VERSION
54484            "files": [FILE]
54485          }
54486
54487     Fields of the root element have following semantics:
54488
54489        * CURRENT_WORKING_DIRECTORY: working directory where a
54490          compilation unit was compiled
54491
54492        * DATA_FILE: name of the data file (GCDA)
54493
54494        * FORMAT_VERSION: semantic version of the format
54495
54496        * GCC_VERSION: version of the GCC compiler
54497
54498     Each FILE has the following form:
54499
54500          {
54501            "file": FILE_NAME,
54502            "functions": [FUNCTION],
54503            "lines": [LINE]
54504          }
54505
54506     Fields of the FILE element have following semantics:
54507
54508        * FILE_NAME: name of the source file
54509
54510     Each FUNCTION has the following form:
54511
54512          {
54513            "blocks": BLOCKS,
54514            "blocks_executed": BLOCKS_EXECUTED,
54515            "demangled_name": "DEMANGLED_NAME,
54516            "end_column": END_COLUMN,
54517            "end_line": END_LINE,
54518            "execution_count": EXECUTION_COUNT,
54519            "name": NAME,
54520            "start_column": START_COLUMN
54521            "start_line": START_LINE
54522          }
54523
54524     Fields of the FUNCTION element have following semantics:
54525
54526        * BLOCKS: number of blocks that are in the function
54527
54528        * BLOCKS_EXECUTED: number of executed blocks of the function
54529
54530        * DEMANGLED_NAME: demangled name of the function
54531
54532        * END_COLUMN: column in the source file where the function ends
54533
54534        * END_LINE: line in the source file where the function ends
54535
54536        * EXECUTION_COUNT: number of executions of the function
54537
54538        * NAME: name of the function
54539
54540        * START_COLUMN: column in the source file where the function
54541          begins
54542
54543        * START_LINE: line in the source file where the function begins
54544
54545     Note that line numbers and column numbers number from 1.  In the
54546     current implementation, START_LINE and START_COLUMN do not include
54547     any template parameters and the leading return type but that this
54548     is likely to be fixed in the future.
54549
54550     Each LINE has the following form:
54551
54552          {
54553            "branches": [BRANCH],
54554            "count": COUNT,
54555            "line_number": LINE_NUMBER,
54556            "unexecuted_block": UNEXECUTED_BLOCK
54557            "function_name": FUNCTION_NAME,
54558          }
54559
54560     Branches are present only with -B option.  Fields of the LINE
54561     element have following semantics:
54562
54563        * COUNT: number of executions of the line
54564
54565        * LINE_NUMBER: line number
54566
54567        * UNEXECUTED_BLOCK: flag whether the line contains an unexecuted
54568          block (not all statements on the line are executed)
54569
54570        * FUNCTION_NAME: a name of a function this LINE belongs to (for
54571          a line with an inlined statements can be not set)
54572
54573     Each BRANCH has the following form:
54574
54575          {
54576            "count": COUNT,
54577            "fallthrough": FALLTHROUGH,
54578            "throw": THROW
54579          }
54580
54581     Fields of the BRANCH element have following semantics:
54582
54583        * COUNT: number of executions of the branch
54584
54585        * FALLTHROUGH: true when the branch is a fall through branch
54586
54587        * THROW: true when the branch is an exceptional branch
54588
54589'-j'
54590'--human-readable'
54591     Write counts in human readable format (like 24.6k).
54592
54593'-k'
54594'--use-colors'
54595
54596     Use colors for lines of code that have zero coverage.  We use red
54597     color for non-exceptional lines and cyan for exceptional.  Same
54598     colors are used for basic blocks with '-a' option.
54599
54600'-l'
54601'--long-file-names'
54602     Create long file names for included source files.  For example, if
54603     the header file 'x.h' contains code, and was included in the file
54604     'a.c', then running 'gcov' on the file 'a.c' will produce an output
54605     file called 'a.c##x.h.gcov' instead of 'x.h.gcov'.  This can be
54606     useful if 'x.h' is included in multiple source files and you want
54607     to see the individual contributions.  If you use the '-p' option,
54608     both the including and included file names will be complete path
54609     names.
54610
54611'-m'
54612'--demangled-names'
54613     Display demangled function names in output.  The default is to show
54614     mangled function names.
54615
54616'-n'
54617'--no-output'
54618     Do not create the 'gcov' output file.
54619
54620'-o DIRECTORY|FILE'
54621'--object-directory DIRECTORY'
54622'--object-file FILE'
54623     Specify either the directory containing the gcov data files, or the
54624     object path name.  The '.gcno', and '.gcda' data files are searched
54625     for using this option.  If a directory is specified, the data files
54626     are in that directory and named after the input file name, without
54627     its extension.  If a file is specified here, the data files are
54628     named after that file, without its extension.
54629
54630'-p'
54631'--preserve-paths'
54632     Preserve complete path information in the names of generated
54633     '.gcov' files.  Without this option, just the filename component is
54634     used.  With this option, all directories are used, with '/'
54635     characters translated to '#' characters, '.' directory components
54636     removed and unremoveable '..' components renamed to '^'.  This is
54637     useful if sourcefiles are in several different directories.
54638
54639'-q'
54640'--use-hotness-colors'
54641
54642     Emit perf-like colored output for hot lines.  Legend of the color
54643     scale is printed at the very beginning of the output file.
54644
54645'-r'
54646'--relative-only'
54647     Only output information about source files with a relative pathname
54648     (after source prefix elision).  Absolute paths are usually system
54649     header files and coverage of any inline functions therein is
54650     normally uninteresting.
54651
54652'-s DIRECTORY'
54653'--source-prefix DIRECTORY'
54654     A prefix for source file names to remove when generating the output
54655     coverage files.  This option is useful when building in a separate
54656     directory, and the pathname to the source directory is not wanted
54657     when determining the output file names.  Note that this prefix
54658     detection is applied before determining whether the source file is
54659     absolute.
54660
54661'-t'
54662'--stdout'
54663     Output to standard output instead of output files.
54664
54665'-u'
54666'--unconditional-branches'
54667     When branch probabilities are given, include those of unconditional
54668     branches.  Unconditional branches are normally not interesting.
54669
54670'-v'
54671'--version'
54672     Display the 'gcov' version number (on the standard output), and
54673     exit without doing any further processing.
54674
54675'-w'
54676'--verbose'
54677     Print verbose informations related to basic blocks and arcs.
54678
54679'-x'
54680'--hash-filenames'
54681     When using -PRESERVE-PATHS, gcov uses the full pathname of the
54682     source files to create an output filename.  This can lead to long
54683     filenames that can overflow filesystem limits.  This option creates
54684     names of the form 'SOURCE-FILE##MD5.gcov', where the SOURCE-FILE
54685     component is the final filename part and the MD5 component is
54686     calculated from the full mangled name that would have been used
54687     otherwise.  The option is an alternative to the -PRESERVE-PATHS on
54688     systems which have a filesystem limit.
54689
54690 'gcov' should be run with the current directory the same as that when
54691you invoked the compiler.  Otherwise it will not be able to locate the
54692source files.  'gcov' produces files called 'MANGLEDNAME.gcov' in the
54693current directory.  These contain the coverage information of the source
54694file they correspond to.  One '.gcov' file is produced for each source
54695(or header) file containing code, which was compiled to produce the data
54696files.  The MANGLEDNAME part of the output file name is usually simply
54697the source file name, but can be something more complicated if the '-l'
54698or '-p' options are given.  Refer to those options for details.
54699
54700 If you invoke 'gcov' with multiple input files, the contributions from
54701each input file are summed.  Typically you would invoke it with the same
54702list of files as the final link of your executable.
54703
54704 The '.gcov' files contain the ':' separated fields along with program
54705source code.  The format is
54706
54707     EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
54708
54709 Additional block information may succeed each line, when requested by
54710command line option.  The EXECUTION_COUNT is '-' for lines containing no
54711code.  Unexecuted lines are marked '#####' or '=====', depending on
54712whether they are reachable by non-exceptional paths or only exceptional
54713paths such as C++ exception handlers, respectively.  Given the '-a'
54714option, unexecuted blocks are marked '$$$$$' or '%%%%%', depending on
54715whether a basic block is reachable via non-exceptional or exceptional
54716paths.  Executed basic blocks having a statement with zero
54717EXECUTION_COUNT end with '*' character and are colored with magenta
54718color with the '-k' option.  This functionality is not supported in Ada.
54719
54720 Note that GCC can completely remove the bodies of functions that are
54721not needed - for instance if they are inlined everywhere.  Such
54722functions are marked with '-', which can be confusing.  Use the
54723'-fkeep-inline-functions' and '-fkeep-static-functions' options to
54724retain these functions and allow gcov to properly show their
54725EXECUTION_COUNT.
54726
54727 Some lines of information at the start have LINE_NUMBER of zero.  These
54728preamble lines are of the form
54729
54730     -:0:TAG:VALUE
54731
54732 The ordering and number of these preamble lines will be augmented as
54733'gcov' development progresses -- do not rely on them remaining
54734unchanged.  Use TAG to locate a particular preamble line.
54735
54736 The additional block information is of the form
54737
54738     TAG INFORMATION
54739
54740 The INFORMATION is human readable, but designed to be simple enough for
54741machine parsing too.
54742
54743 When printing percentages, 0% and 100% are only printed when the values
54744are _exactly_ 0% and 100% respectively.  Other values which would
54745conventionally be rounded to 0% or 100% are instead printed as the
54746nearest non-boundary value.
54747
54748 When using 'gcov', you must first compile your program with a special
54749GCC option '--coverage'.  This tells the compiler to generate additional
54750information needed by gcov (basically a flow graph of the program) and
54751also includes additional code in the object files for generating the
54752extra profiling information needed by gcov.  These additional files are
54753placed in the directory where the object file is located.
54754
54755 Running the program will cause profile output to be generated.  For
54756each source file compiled with '-fprofile-arcs', an accompanying '.gcda'
54757file will be placed in the object file directory.
54758
54759 Running 'gcov' with your program's source file names as arguments will
54760now produce a listing of the code along with frequency of execution for
54761each line.  For example, if your program is called 'tmp.cpp', this is
54762what you see when you use the basic 'gcov' facility:
54763
54764     $ g++ --coverage tmp.cpp
54765     $ a.out
54766     $ gcov tmp.cpp -m
54767     File 'tmp.cpp'
54768     Lines executed:92.86% of 14
54769     Creating 'tmp.cpp.gcov'
54770
54771 The file 'tmp.cpp.gcov' contains output from 'gcov'.  Here is a sample:
54772
54773             -:    0:Source:tmp.cpp
54774             -:    0:Working directory:/home/gcc/testcase
54775             -:    0:Graph:tmp.gcno
54776             -:    0:Data:tmp.gcda
54777             -:    0:Runs:1
54778             -:    0:Programs:1
54779             -:    1:#include <stdio.h>
54780             -:    2:
54781             -:    3:template<class T>
54782             -:    4:class Foo
54783             -:    5:{
54784             -:    6:  public:
54785            1*:    7:  Foo(): b (1000) {}
54786     ------------------
54787     Foo<char>::Foo():
54788         #####:    7:  Foo(): b (1000) {}
54789     ------------------
54790     Foo<int>::Foo():
54791             1:    7:  Foo(): b (1000) {}
54792     ------------------
54793            2*:    8:  void inc () { b++; }
54794     ------------------
54795     Foo<char>::inc():
54796         #####:    8:  void inc () { b++; }
54797     ------------------
54798     Foo<int>::inc():
54799             2:    8:  void inc () { b++; }
54800     ------------------
54801             -:    9:
54802             -:   10:  private:
54803             -:   11:  int b;
54804             -:   12:};
54805             -:   13:
54806             -:   14:template class Foo<int>;
54807             -:   15:template class Foo<char>;
54808             -:   16:
54809             -:   17:int
54810             1:   18:main (void)
54811             -:   19:{
54812             -:   20:  int i, total;
54813             1:   21:  Foo<int> counter;
54814             -:   22:
54815             1:   23:  counter.inc();
54816             1:   24:  counter.inc();
54817             1:   25:  total = 0;
54818             -:   26:
54819            11:   27:  for (i = 0; i < 10; i++)
54820            10:   28:    total += i;
54821             -:   29:
54822            1*:   30:  int v = total > 100 ? 1 : 2;
54823             -:   31:
54824             1:   32:  if (total != 45)
54825         #####:   33:    printf ("Failure\n");
54826             -:   34:  else
54827             1:   35:    printf ("Success\n");
54828             1:   36:  return 0;
54829             -:   37:}
54830
54831 Note that line 7 is shown in the report multiple times.  First
54832occurrence presents total number of execution of the line and the next
54833two belong to instances of class Foo constructors.  As you can also see,
54834line 30 contains some unexecuted basic blocks and thus execution count
54835has asterisk symbol.
54836
54837 When you use the '-a' option, you will get individual block counts, and
54838the output looks like this:
54839
54840             -:    0:Source:tmp.cpp
54841             -:    0:Working directory:/home/gcc/testcase
54842             -:    0:Graph:tmp.gcno
54843             -:    0:Data:tmp.gcda
54844             -:    0:Runs:1
54845             -:    0:Programs:1
54846             -:    1:#include <stdio.h>
54847             -:    2:
54848             -:    3:template<class T>
54849             -:    4:class Foo
54850             -:    5:{
54851             -:    6:  public:
54852            1*:    7:  Foo(): b (1000) {}
54853     ------------------
54854     Foo<char>::Foo():
54855         #####:    7:  Foo(): b (1000) {}
54856     ------------------
54857     Foo<int>::Foo():
54858             1:    7:  Foo(): b (1000) {}
54859     ------------------
54860            2*:    8:  void inc () { b++; }
54861     ------------------
54862     Foo<char>::inc():
54863         #####:    8:  void inc () { b++; }
54864     ------------------
54865     Foo<int>::inc():
54866             2:    8:  void inc () { b++; }
54867     ------------------
54868             -:    9:
54869             -:   10:  private:
54870             -:   11:  int b;
54871             -:   12:};
54872             -:   13:
54873             -:   14:template class Foo<int>;
54874             -:   15:template class Foo<char>;
54875             -:   16:
54876             -:   17:int
54877             1:   18:main (void)
54878             -:   19:{
54879             -:   20:  int i, total;
54880             1:   21:  Foo<int> counter;
54881             1:   21-block  0
54882             -:   22:
54883             1:   23:  counter.inc();
54884             1:   23-block  0
54885             1:   24:  counter.inc();
54886             1:   24-block  0
54887             1:   25:  total = 0;
54888             -:   26:
54889            11:   27:  for (i = 0; i < 10; i++)
54890             1:   27-block  0
54891            11:   27-block  1
54892            10:   28:    total += i;
54893            10:   28-block  0
54894             -:   29:
54895            1*:   30:  int v = total > 100 ? 1 : 2;
54896             1:   30-block  0
54897         %%%%%:   30-block  1
54898             1:   30-block  2
54899             -:   31:
54900             1:   32:  if (total != 45)
54901             1:   32-block  0
54902         #####:   33:    printf ("Failure\n");
54903         %%%%%:   33-block  0
54904             -:   34:  else
54905             1:   35:    printf ("Success\n");
54906             1:   35-block  0
54907             1:   36:  return 0;
54908             1:   36-block  0
54909             -:   37:}
54910
54911 In this mode, each basic block is only shown on one line - the last
54912line of the block.  A multi-line block will only contribute to the
54913execution count of that last line, and other lines will not be shown to
54914contain code, unless previous blocks end on those lines.  The total
54915execution count of a line is shown and subsequent lines show the
54916execution counts for individual blocks that end on that line.  After
54917each block, the branch and call counts of the block will be shown, if
54918the '-b' option is given.
54919
54920 Because of the way GCC instruments calls, a call count can be shown
54921after a line with no individual blocks.  As you can see, line 33
54922contains a basic block that was not executed.
54923
54924 When you use the '-b' option, your output looks like this:
54925
54926             -:    0:Source:tmp.cpp
54927             -:    0:Working directory:/home/gcc/testcase
54928             -:    0:Graph:tmp.gcno
54929             -:    0:Data:tmp.gcda
54930             -:    0:Runs:1
54931             -:    0:Programs:1
54932             -:    1:#include <stdio.h>
54933             -:    2:
54934             -:    3:template<class T>
54935             -:    4:class Foo
54936             -:    5:{
54937             -:    6:  public:
54938            1*:    7:  Foo(): b (1000) {}
54939     ------------------
54940     Foo<char>::Foo():
54941     function Foo<char>::Foo() called 0 returned 0% blocks executed 0%
54942         #####:    7:  Foo(): b (1000) {}
54943     ------------------
54944     Foo<int>::Foo():
54945     function Foo<int>::Foo() called 1 returned 100% blocks executed 100%
54946             1:    7:  Foo(): b (1000) {}
54947     ------------------
54948            2*:    8:  void inc () { b++; }
54949     ------------------
54950     Foo<char>::inc():
54951     function Foo<char>::inc() called 0 returned 0% blocks executed 0%
54952         #####:    8:  void inc () { b++; }
54953     ------------------
54954     Foo<int>::inc():
54955     function Foo<int>::inc() called 2 returned 100% blocks executed 100%
54956             2:    8:  void inc () { b++; }
54957     ------------------
54958             -:    9:
54959             -:   10:  private:
54960             -:   11:  int b;
54961             -:   12:};
54962             -:   13:
54963             -:   14:template class Foo<int>;
54964             -:   15:template class Foo<char>;
54965             -:   16:
54966             -:   17:int
54967     function main called 1 returned 100% blocks executed 81%
54968             1:   18:main (void)
54969             -:   19:{
54970             -:   20:  int i, total;
54971             1:   21:  Foo<int> counter;
54972     call    0 returned 100%
54973     branch  1 taken 100% (fallthrough)
54974     branch  2 taken 0% (throw)
54975             -:   22:
54976             1:   23:  counter.inc();
54977     call    0 returned 100%
54978     branch  1 taken 100% (fallthrough)
54979     branch  2 taken 0% (throw)
54980             1:   24:  counter.inc();
54981     call    0 returned 100%
54982     branch  1 taken 100% (fallthrough)
54983     branch  2 taken 0% (throw)
54984             1:   25:  total = 0;
54985             -:   26:
54986            11:   27:  for (i = 0; i < 10; i++)
54987     branch  0 taken 91% (fallthrough)
54988     branch  1 taken 9%
54989            10:   28:    total += i;
54990             -:   29:
54991            1*:   30:  int v = total > 100 ? 1 : 2;
54992     branch  0 taken 0% (fallthrough)
54993     branch  1 taken 100%
54994             -:   31:
54995             1:   32:  if (total != 45)
54996     branch  0 taken 0% (fallthrough)
54997     branch  1 taken 100%
54998         #####:   33:    printf ("Failure\n");
54999     call    0 never executed
55000     branch  1 never executed
55001     branch  2 never executed
55002             -:   34:  else
55003             1:   35:    printf ("Success\n");
55004     call    0 returned 100%
55005     branch  1 taken 100% (fallthrough)
55006     branch  2 taken 0% (throw)
55007             1:   36:  return 0;
55008             -:   37:}
55009
55010 For each function, a line is printed showing how many times the
55011function is called, how many times it returns and what percentage of the
55012function's blocks were executed.
55013
55014 For each basic block, a line is printed after the last line of the
55015basic block describing the branch or call that ends the basic block.
55016There can be multiple branches and calls listed for a single source line
55017if there are multiple basic blocks that end on that line.  In this case,
55018the branches and calls are each given a number.  There is no simple way
55019to map these branches and calls back to source constructs.  In general,
55020though, the lowest numbered branch or call will correspond to the
55021leftmost construct on the source line.
55022
55023 For a branch, if it was executed at least once, then a percentage
55024indicating the number of times the branch was taken divided by the
55025number of times the branch was executed will be printed.  Otherwise, the
55026message "never executed" is printed.
55027
55028 For a call, if it was executed at least once, then a percentage
55029indicating the number of times the call returned divided by the number
55030of times the call was executed will be printed.  This will usually be
55031100%, but may be less for functions that call 'exit' or 'longjmp', and
55032thus may not return every time they are called.
55033
55034 The execution counts are cumulative.  If the example program were
55035executed again without removing the '.gcda' file, the count for the
55036number of times each line in the source was executed would be added to
55037the results of the previous run(s).  This is potentially useful in
55038several ways.  For example, it could be used to accumulate data over a
55039number of program runs as part of a test verification suite, or to
55040provide more accurate long-term information over a large number of
55041program runs.
55042
55043 The data in the '.gcda' files is saved immediately before the program
55044exits.  For each source file compiled with '-fprofile-arcs', the
55045profiling code first attempts to read in an existing '.gcda' file; if
55046the file doesn't match the executable (differing number of basic block
55047counts) it will ignore the contents of the file.  It then adds in the
55048new execution counts and finally writes the data to the file.
55049
55050
55051File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
55052
5505310.3 Using 'gcov' with GCC Optimization
55054=======================================
55055
55056If you plan to use 'gcov' to help optimize your code, you must first
55057compile your program with a special GCC option '--coverage'.  Aside from
55058that, you can use any other GCC options; but if you want to prove that
55059every single line in your program was executed, you should not compile
55060with optimization at the same time.  On some machines the optimizer can
55061eliminate some simple code lines by combining them with other lines.
55062For example, code like this:
55063
55064     if (a != b)
55065       c = 1;
55066     else
55067       c = 0;
55068
55069can be compiled into one instruction on some machines.  In this case,
55070there is no way for 'gcov' to calculate separate execution counts for
55071each line because there isn't separate code for each line.  Hence the
55072'gcov' output looks like this if you compiled the program with
55073optimization:
55074
55075           100:   12:if (a != b)
55076           100:   13:  c = 1;
55077           100:   14:else
55078           100:   15:  c = 0;
55079
55080 The output shows that this block of code, combined by optimization,
55081executed 100 times.  In one sense this result is correct, because there
55082was only one instruction representing all four of these lines.  However,
55083the output does not indicate how many times the result was 0 and how
55084many times the result was 1.
55085
55086 Inlineable functions can create unexpected line counts.  Line counts
55087are shown for the source code of the inlineable function, but what is
55088shown depends on where the function is inlined, or if it is not inlined
55089at all.
55090
55091 If the function is not inlined, the compiler must emit an out of line
55092copy of the function, in any object file that needs it.  If 'fileA.o'
55093and 'fileB.o' both contain out of line bodies of a particular inlineable
55094function, they will also both contain coverage counts for that function.
55095When 'fileA.o' and 'fileB.o' are linked together, the linker will, on
55096many systems, select one of those out of line bodies for all calls to
55097that function, and remove or ignore the other.  Unfortunately, it will
55098not remove the coverage counters for the unused function body.  Hence
55099when instrumented, all but one use of that function will show zero
55100counts.
55101
55102 If the function is inlined in several places, the block structure in
55103each location might not be the same.  For instance, a condition might
55104now be calculable at compile time in some instances.  Because the
55105coverage of all the uses of the inline function will be shown for the
55106same source lines, the line counts themselves might seem inconsistent.
55107
55108 Long-running applications can use the '__gcov_reset' and '__gcov_dump'
55109facilities to restrict profile collection to the program region of
55110interest.  Calling '__gcov_reset(void)' will clear all profile counters
55111to zero, and calling '__gcov_dump(void)' will cause the profile
55112information collected at that point to be dumped to '.gcda' output
55113files.  Instrumented applications use a static destructor with priority
5511499 to invoke the '__gcov_dump' function.  Thus '__gcov_dump' is executed
55115after all user defined static destructors, as well as handlers
55116registered with 'atexit'.  If an executable loads a dynamic shared
55117object via dlopen functionality, '-Wl,--dynamic-list-data' is needed to
55118dump all profile data.
55119
55120 Profiling run-time library reports various errors related to profile
55121manipulation and profile saving.  Errors are printed into standard error
55122output or 'GCOV_ERROR_FILE' file, if environment variable is used.  In
55123order to terminate immediately after an errors occurs set
55124'GCOV_EXIT_AT_ERROR' environment variable.  That can help users to find
55125profile clashing which leads to a misleading profile.
55126
55127
55128File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
55129
5513010.4 Brief Description of 'gcov' Data Files
55131===========================================
55132
55133'gcov' uses two files for profiling.  The names of these files are
55134derived from the original _object_ file by substituting the file suffix
55135with either '.gcno', or '.gcda'.  The files contain coverage and profile
55136data stored in a platform-independent format.  The '.gcno' files are
55137placed in the same directory as the object file.  By default, the
55138'.gcda' files are also stored in the same directory as the object file,
55139but the GCC '-fprofile-dir' option may be used to store the '.gcda'
55140files in a separate directory.
55141
55142 The '.gcno' notes file is generated when the source file is compiled
55143with the GCC '-ftest-coverage' option.  It contains information to
55144reconstruct the basic block graphs and assign source line numbers to
55145blocks.
55146
55147 The '.gcda' count data file is generated when a program containing
55148object files built with the GCC '-fprofile-arcs' option is executed.  A
55149separate '.gcda' file is created for each object file compiled with this
55150option.  It contains arc transition counts, value profile counts, and
55151some summary information.
55152
55153 It is not recommended to access the coverage files directly.  Consumers
55154should use the intermediate format that is provided by 'gcov' tool via
55155'--json-format' option.
55156
55157
55158File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
55159
5516010.5 Data File Relocation to Support Cross-Profiling
55161====================================================
55162
55163Running the program will cause profile output to be generated.  For each
55164source file compiled with '-fprofile-arcs', an accompanying '.gcda' file
55165will be placed in the object file directory.  That implicitly requires
55166running the program on the same system as it was built or having the
55167same absolute directory structure on the target system.  The program
55168will try to create the needed directory structure, if it is not already
55169present.
55170
55171 To support cross-profiling, a program compiled with '-fprofile-arcs'
55172can relocate the data files based on two environment variables:
55173
55174   * GCOV_PREFIX contains the prefix to add to the absolute paths in the
55175     object file.  Prefix can be absolute, or relative.  The default is
55176     no prefix.
55177
55178   * GCOV_PREFIX_STRIP indicates the how many initial directory names to
55179     strip off the hardwired absolute paths.  Default value is 0.
55180
55181     _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
55182     undefined, then a relative path is made out of the hardwired
55183     absolute paths.
55184
55185 For example, if the object file '/user/build/foo.o' was built with
55186'-fprofile-arcs', the final executable will try to create the data file
55187'/user/build/foo.gcda' when running on the target system.  This will
55188fail if the corresponding directory does not exist and it is unable to
55189create it.  This can be overcome by, for example, setting the
55190environment as 'GCOV_PREFIX=/target/run' and 'GCOV_PREFIX_STRIP=1'.
55191Such a setting will name the data file '/target/run/build/foo.gcda'.
55192
55193 You must move the data files to the expected directory tree in order to
55194use them for profile directed optimizations ('-fprofile-use'), or to use
55195the 'gcov' tool.
55196
55197
55198File: gcc.info,  Node: Gcov-tool,  Next: Gcov-dump,  Prev: Gcov,  Up: Top
55199
5520011 'gcov-tool'--an Offline Gcda Profile Processing Tool
55201*******************************************************
55202
55203'gcov-tool' is a tool you can use in conjunction with GCC to manipulate
55204or process gcda profile files offline.
55205
55206* Menu:
55207
55208* Gcov-tool Intro::             Introduction to gcov-tool.
55209* Invoking Gcov-tool::          How to use gcov-tool.
55210
55211
55212File: gcc.info,  Node: Gcov-tool Intro,  Next: Invoking Gcov-tool,  Up: Gcov-tool
55213
5521411.1 Introduction to 'gcov-tool'
55215================================
55216
55217'gcov-tool' is an offline tool to process gcc's gcda profile files.
55218
55219 Current gcov-tool supports the following functionalities:
55220
55221   * merge two sets of profiles with weights.
55222
55223   * read one set of profile and rewrite profile contents.  One can
55224     scale or normalize the count values.
55225
55226 Examples of the use cases for this tool are:
55227   * Collect the profiles for different set of inputs, and use this tool
55228     to merge them.  One can specify the weight to factor in the
55229     relative importance of each input.
55230
55231   * Rewrite the profile after removing a subset of the gcda files,
55232     while maintaining the consistency of the summary and the histogram.
55233
55234   * It can also be used to debug or libgcov code as the tools shares
55235     the majority code as the runtime library.
55236
55237 Note that for the merging operation, this profile generated offline may
55238contain slight different values from the online merged profile.  Here
55239are a list of typical differences:
55240
55241   * histogram difference: This offline tool recomputes the histogram
55242     after merging the counters.  The resulting histogram, therefore, is
55243     precise.  The online merging does not have this capability - the
55244     histogram is merged from two histograms and the result is an
55245     approximation.
55246
55247   * summary checksum difference: Summary checksum uses a CRC32
55248     operation.  The value depends on the link list order of gcov-info
55249     objects.  This order is different in gcov-tool from that in the
55250     online merge.  It's expected to have different summary checksums.
55251     It does not really matter as the compiler does not use this
55252     checksum anywhere.
55253
55254   * value profile counter values difference: Some counter values for
55255     value profile are runtime dependent, like heap addresses.  It's
55256     normal to see some difference in these kind of counters.
55257
55258
55259File: gcc.info,  Node: Invoking Gcov-tool,  Prev: Gcov-tool Intro,  Up: Gcov-tool
55260
5526111.2 Invoking 'gcov-tool'
55262=========================
55263
55264     gcov-tool [GLOBAL-OPTIONS] SUB_COMMAND [SUB_COMMAND-OPTIONS] PROFILE_DIR
55265
55266 'gcov-tool' accepts the following options:
55267
55268'-h'
55269'--help'
55270     Display help about using 'gcov-tool' (on the standard output), and
55271     exit without doing any further processing.
55272
55273'-v'
55274'--version'
55275     Display the 'gcov-tool' version number (on the standard output),
55276     and exit without doing any further processing.
55277
55278'merge'
55279     Merge two profile directories.
55280
55281     '-o DIRECTORY'
55282     '--output DIRECTORY'
55283          Set the output profile directory.  Default output directory
55284          name is MERGED_PROFILE.
55285
55286     '-v'
55287     '--verbose'
55288          Set the verbose mode.
55289
55290     '-w W1,W2'
55291     '--weight W1,W2'
55292          Set the merge weights of the DIRECTORY1 and DIRECTORY2,
55293          respectively.  The default weights are 1 for both.
55294
55295'rewrite'
55296     Read the specified profile directory and rewrite to a new
55297     directory.
55298
55299     '-n LONG_LONG_VALUE'
55300     '--normalize <long_long_value>'
55301          Normalize the profile.  The specified value is the max counter
55302          value in the new profile.
55303
55304     '-o DIRECTORY'
55305     '--output DIRECTORY'
55306          Set the output profile directory.  Default output name is
55307          REWRITE_PROFILE.
55308
55309     '-s FLOAT_OR_SIMPLE-FRAC_VALUE'
55310     '--scale FLOAT_OR_SIMPLE-FRAC_VALUE'
55311          Scale the profile counters.  The specified value can be in
55312          floating point value, or simple fraction value form, such 1,
55313          2, 2/3, and 5/3.
55314
55315     '-v'
55316     '--verbose'
55317          Set the verbose mode.
55318
55319'overlap'
55320     Compute the overlap score between the two specified profile
55321     directories.  The overlap score is computed based on the arc
55322     profiles.  It is defined as the sum of min (p1_counter[i] /
55323     p1_sum_all, p2_counter[i] / p2_sum_all), for all arc counter i,
55324     where p1_counter[i] and p2_counter[i] are two matched counters and
55325     p1_sum_all and p2_sum_all are the sum of counter values in profile
55326     1 and profile 2, respectively.
55327
55328     '-f'
55329     '--function'
55330          Print function level overlap score.
55331
55332     '-F'
55333     '--fullname'
55334          Print full gcda filename.
55335
55336     '-h'
55337     '--hotonly'
55338          Only print info for hot objects/functions.
55339
55340     '-o'
55341     '--object'
55342          Print object level overlap score.
55343
55344     '-t FLOAT'
55345     '--hot_threshold <float>'
55346          Set the threshold for hot counter value.
55347
55348     '-v'
55349     '--verbose'
55350          Set the verbose mode.
55351
55352
55353File: gcc.info,  Node: Gcov-dump,  Next: Trouble,  Prev: Gcov-tool,  Up: Top
55354
5535512 'gcov-dump'--an Offline Gcda and Gcno Profile Dump Tool
55356**********************************************************
55357
55358* Menu:
55359
55360* Gcov-dump Intro::             Introduction to gcov-dump.
55361* Invoking Gcov-dump::          How to use gcov-dump.
55362
55363
55364File: gcc.info,  Node: Gcov-dump Intro,  Next: Invoking Gcov-dump,  Up: Gcov-dump
55365
5536612.1 Introduction to 'gcov-dump'
55367================================
55368
55369'gcov-dump' is a tool you can use in conjunction with GCC to dump
55370content of gcda and gcno profile files offline.
55371
55372
55373File: gcc.info,  Node: Invoking Gcov-dump,  Prev: Gcov-dump Intro,  Up: Gcov-dump
55374
5537512.2 Invoking 'gcov-dump'
55376=========================
55377
55378     Usage: gcov-dump [OPTION] ... GCOVFILES
55379
55380 'gcov-dump' accepts the following options:
55381
55382'-h'
55383'--help'
55384     Display help about using 'gcov-dump' (on the standard output), and
55385     exit without doing any further processing.
55386
55387'-l'
55388'--long'
55389     Dump content of records.
55390
55391'-p'
55392'--positions'
55393     Dump positions of records.
55394
55395'-v'
55396'--version'
55397     Display the 'gcov-dump' version number (on the standard output),
55398     and exit without doing any further processing.
55399
55400
55401File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov-dump,  Up: Top
55402
5540313 Known Causes of Trouble with GCC
55404***********************************
55405
55406This section describes known problems that affect users of GCC.  Most of
55407these are not GCC bugs per se--if they were, we would fix them.  But the
55408result for a user may be like the result of a bug.
55409
55410 Some of these problems are due to bugs in other software, some are
55411missing features that are too much work to add, and some are places
55412where people's opinions differ as to what is best.
55413
55414* Menu:
55415
55416* Actual Bugs::         Bugs we will fix later.
55417* Interoperation::      Problems using GCC with other compilers,
55418                        and with certain linkers, assemblers and debuggers.
55419* Incompatibilities::   GCC is incompatible with traditional C.
55420* Fixed Headers::       GCC uses corrected versions of system header files.
55421                        This is necessary, but doesn't always work smoothly.
55422* Standard Libraries::  GCC uses the system C library, which might not be
55423                        compliant with the ISO C standard.
55424* Disappointments::     Regrettable things we cannot change, but not quite bugs.
55425* C++ Misunderstandings:: Common misunderstandings with GNU C++.
55426* Non-bugs::            Things we think are right, but some others disagree.
55427* Warnings and Errors:: Which problems in your code get warnings,
55428                        and which get errors.
55429
55430
55431File: gcc.info,  Node: Actual Bugs,  Next: Interoperation,  Up: Trouble
55432
5543313.1 Actual Bugs We Haven't Fixed Yet
55434=====================================
55435
55436   * The 'fixincludes' script interacts badly with automounters; if the
55437     directory of system header files is automounted, it tends to be
55438     unmounted while 'fixincludes' is running.  This would seem to be a
55439     bug in the automounter.  We don't know any good way to work around
55440     it.
55441
55442
55443File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Actual Bugs,  Up: Trouble
55444
5544513.2 Interoperation
55446===================
55447
55448This section lists various difficulties encountered in using GCC
55449together with other compilers or with the assemblers, linkers, libraries
55450and debuggers on certain systems.
55451
55452   * On many platforms, GCC supports a different ABI for C++ than do
55453     other compilers, so the object files compiled by GCC cannot be used
55454     with object files generated by another C++ compiler.
55455
55456     An area where the difference is most apparent is name mangling.
55457     The use of different name mangling is intentional, to protect you
55458     from more subtle problems.  Compilers differ as to many internal
55459     details of C++ implementation, including: how class instances are
55460     laid out, how multiple inheritance is implemented, and how virtual
55461     function calls are handled.  If the name encoding were made the
55462     same, your programs would link against libraries provided from
55463     other compilers--but the programs would then crash when run.
55464     Incompatible libraries are then detected at link time, rather than
55465     at run time.
55466
55467   * On some BSD systems, including some versions of Ultrix, use of
55468     profiling causes static variable destructors (currently used only
55469     in C++) not to be run.
55470
55471   * On a SPARC, GCC aligns all values of type 'double' on an 8-byte
55472     boundary, and it expects every 'double' to be so aligned.  The Sun
55473     compiler usually gives 'double' values 8-byte alignment, with one
55474     exception: function arguments of type 'double' may not be aligned.
55475
55476     As a result, if a function compiled with Sun CC takes the address
55477     of an argument of type 'double' and passes this pointer of type
55478     'double *' to a function compiled with GCC, dereferencing the
55479     pointer may cause a fatal signal.
55480
55481     One way to solve this problem is to compile your entire program
55482     with GCC.  Another solution is to modify the function that is
55483     compiled with Sun CC to copy the argument into a local variable;
55484     local variables are always properly aligned.  A third solution is
55485     to modify the function that uses the pointer to dereference it via
55486     the following function 'access_double' instead of directly with
55487     '*':
55488
55489          inline double
55490          access_double (double *unaligned_ptr)
55491          {
55492            union d2i { double d; int i[2]; };
55493
55494            union d2i *p = (union d2i *) unaligned_ptr;
55495            union d2i u;
55496
55497            u.i[0] = p->i[0];
55498            u.i[1] = p->i[1];
55499
55500            return u.d;
55501          }
55502
55503     Storing into the pointer can be done likewise with the same union.
55504
55505   * On Solaris, the 'malloc' function in the 'libmalloc.a' library may
55506     allocate memory that is only 4 byte aligned.  Since GCC on the
55507     SPARC assumes that doubles are 8 byte aligned, this may result in a
55508     fatal signal if doubles are stored in memory allocated by the
55509     'libmalloc.a' library.
55510
55511     The solution is to not use the 'libmalloc.a' library.  Use instead
55512     'malloc' and related functions from 'libc.a'; they do not have this
55513     problem.
55514
55515   * On the HP PA machine, ADB sometimes fails to work on functions
55516     compiled with GCC.  Specifically, it fails to work on functions
55517     that use 'alloca' or variable-size arrays.  This is because GCC
55518     doesn't generate HP-UX unwind descriptors for such functions.  It
55519     may even be impossible to generate them.
55520
55521   * Debugging ('-g') is not supported on the HP PA machine, unless you
55522     use the preliminary GNU tools.
55523
55524   * Taking the address of a label may generate errors from the HP-UX PA
55525     assembler.  GAS for the PA does not have this problem.
55526
55527   * Using floating point parameters for indirect calls to static
55528     functions will not work when using the HP assembler.  There simply
55529     is no way for GCC to specify what registers hold arguments for
55530     static functions when using the HP assembler.  GAS for the PA does
55531     not have this problem.
55532
55533   * In extremely rare cases involving some very large functions you may
55534     receive errors from the HP linker complaining about an out of
55535     bounds unconditional branch offset.  This used to occur more often
55536     in previous versions of GCC, but is now exceptionally rare.  If you
55537     should run into it, you can work around by making your function
55538     smaller.
55539
55540   * GCC compiled code sometimes emits warnings from the HP-UX assembler
55541     of the form:
55542
55543          (warning) Use of GR3 when
55544            frame >= 8192 may cause conflict.
55545
55546     These warnings are harmless and can be safely ignored.
55547
55548   * In extremely rare cases involving some very large functions you may
55549     receive errors from the AIX Assembler complaining about a
55550     displacement that is too large.  If you should run into it, you can
55551     work around by making your function smaller.
55552
55553   * The 'libstdc++.a' library in GCC relies on the SVR4 dynamic linker
55554     semantics which merges global symbols between libraries and
55555     applications, especially necessary for C++ streams functionality.
55556     This is not the default behavior of AIX shared libraries and
55557     dynamic linking.  'libstdc++.a' is built on AIX with
55558     "runtime-linking" enabled so that symbol merging can occur.  To
55559     utilize this feature, the application linked with 'libstdc++.a'
55560     must include the '-Wl,-brtl' flag on the link line.  G++ cannot
55561     impose this because this option may interfere with the semantics of
55562     the user program and users may not always use 'g++' to link his or
55563     her application.  Applications are not required to use the
55564     '-Wl,-brtl' flag on the link line--the rest of the 'libstdc++.a'
55565     library which is not dependent on the symbol merging semantics will
55566     continue to function correctly.
55567
55568   * An application can interpose its own definition of functions for
55569     functions invoked by 'libstdc++.a' with "runtime-linking" enabled
55570     on AIX.  To accomplish this the application must be linked with
55571     "runtime-linking" option and the functions explicitly must be
55572     exported by the application ('-Wl,-brtl,-bE:exportfile').
55573
55574   * AIX on the RS/6000 provides support (NLS) for environments outside
55575     of the United States.  Compilers and assemblers use NLS to support
55576     locale-specific representations of various objects including
55577     floating-point numbers ('.' vs ',' for separating decimal
55578     fractions).  There have been problems reported where the library
55579     linked with GCC does not produce the same floating-point formats
55580     that the assembler accepts.  If you have this problem, set the
55581     'LANG' environment variable to 'C' or 'En_US'.
55582
55583   * Even if you specify '-fdollars-in-identifiers', you cannot
55584     successfully use '$' in identifiers on the RS/6000 due to a
55585     restriction in the IBM assembler.  GAS supports these identifiers.
55586
55587
55588File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
55589
5559013.3 Incompatibilities of GCC
55591=============================
55592
55593There are several noteworthy incompatibilities between GNU C and K&R
55594(non-ISO) versions of C.
55595
55596   * GCC normally makes string constants read-only.  If several
55597     identical-looking string constants are used, GCC stores only one
55598     copy of the string.
55599
55600     One consequence is that you cannot call 'mktemp' with a string
55601     constant argument.  The function 'mktemp' always alters the string
55602     its argument points to.
55603
55604     Another consequence is that 'sscanf' does not work on some very old
55605     systems when passed a string constant as its format control string
55606     or input.  This is because 'sscanf' incorrectly tries to write into
55607     the string constant.  Likewise 'fscanf' and 'scanf'.
55608
55609     The solution to these problems is to change the program to use
55610     'char'-array variables with initialization strings for these
55611     purposes instead of string constants.
55612
55613   * '-2147483648' is positive.
55614
55615     This is because 2147483648 cannot fit in the type 'int', so
55616     (following the ISO C rules) its data type is 'unsigned long int'.
55617     Negating this value yields 2147483648 again.
55618
55619   * GCC does not substitute macro arguments when they appear inside of
55620     string constants.  For example, the following macro in GCC
55621
55622          #define foo(a) "a"
55623
55624     will produce output '"a"' regardless of what the argument A is.
55625
55626   * When you use 'setjmp' and 'longjmp', the only automatic variables
55627     guaranteed to remain valid are those declared 'volatile'.  This is
55628     a consequence of automatic register allocation.  Consider this
55629     function:
55630
55631          jmp_buf j;
55632
55633          foo ()
55634          {
55635            int a, b;
55636
55637            a = fun1 ();
55638            if (setjmp (j))
55639              return a;
55640
55641            a = fun2 ();
55642            /* 'longjmp (j)' may occur in 'fun3'. */
55643            return a + fun3 ();
55644          }
55645
55646     Here 'a' may or may not be restored to its first value when the
55647     'longjmp' occurs.  If 'a' is allocated in a register, then its
55648     first value is restored; otherwise, it keeps the last value stored
55649     in it.
55650
55651     If you use the '-W' option with the '-O' option, you will get a
55652     warning when GCC thinks such a problem might be possible.
55653
55654   * Programs that use preprocessing directives in the middle of macro
55655     arguments do not work with GCC.  For example, a program like this
55656     will not work:
55657
55658          foobar (
55659          #define luser
55660                  hack)
55661
55662     ISO C does not permit such a construct.
55663
55664   * K&R compilers allow comments to cross over an inclusion boundary
55665     (i.e. started in an include file and ended in the including file).
55666
55667   * Declarations of external variables and functions within a block
55668     apply only to the block containing the declaration.  In other
55669     words, they have the same scope as any other declaration in the
55670     same place.
55671
55672     In some other C compilers, an 'extern' declaration affects all the
55673     rest of the file even if it happens within a block.
55674
55675   * In traditional C, you can combine 'long', etc., with a typedef
55676     name, as shown here:
55677
55678          typedef int foo;
55679          typedef long foo bar;
55680
55681     In ISO C, this is not allowed: 'long' and other type modifiers
55682     require an explicit 'int'.
55683
55684   * PCC allows typedef names to be used as function parameters.
55685
55686   * Traditional C allows the following erroneous pair of declarations
55687     to appear together in a given scope:
55688
55689          typedef int foo;
55690          typedef foo foo;
55691
55692   * GCC treats all characters of identifiers as significant.  According
55693     to K&R-1 (2.2), "No more than the first eight characters are
55694     significant, although more may be used.".  Also according to K&R-1
55695     (2.2), "An identifier is a sequence of letters and digits; the
55696     first character must be a letter.  The underscore _ counts as a
55697     letter.", but GCC also allows dollar signs in identifiers.
55698
55699   * PCC allows whitespace in the middle of compound assignment
55700     operators such as '+='.  GCC, following the ISO standard, does not
55701     allow this.
55702
55703   * GCC complains about unterminated character constants inside of
55704     preprocessing conditionals that fail.  Some programs have English
55705     comments enclosed in conditionals that are guaranteed to fail; if
55706     these comments contain apostrophes, GCC will probably report an
55707     error.  For example, this code would produce an error:
55708
55709          #if 0
55710          You can't expect this to work.
55711          #endif
55712
55713     The best solution to such a problem is to put the text into an
55714     actual C comment delimited by '/*...*/'.
55715
55716   * Many user programs contain the declaration 'long time ();'.  In the
55717     past, the system header files on many systems did not actually
55718     declare 'time', so it did not matter what type your program
55719     declared it to return.  But in systems with ISO C headers, 'time'
55720     is declared to return 'time_t', and if that is not the same as
55721     'long', then 'long time ();' is erroneous.
55722
55723     The solution is to change your program to use appropriate system
55724     headers ('<time.h>' on systems with ISO C headers) and not to
55725     declare 'time' if the system header files declare it, or failing
55726     that to use 'time_t' as the return type of 'time'.
55727
55728   * When compiling functions that return 'float', PCC converts it to a
55729     double.  GCC actually returns a 'float'.  If you are concerned with
55730     PCC compatibility, you should declare your functions to return
55731     'double'; you might as well say what you mean.
55732
55733   * When compiling functions that return structures or unions, GCC
55734     output code normally uses a method different from that used on most
55735     versions of Unix.  As a result, code compiled with GCC cannot call
55736     a structure-returning function compiled with PCC, and vice versa.
55737
55738     The method used by GCC is as follows: a structure or union which is
55739     1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
55740     union with any other size is stored into an address supplied by the
55741     caller (usually in a special, fixed register, but on some machines
55742     it is passed on the stack).  The target hook
55743     'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
55744
55745     By contrast, PCC on most target machines returns structures and
55746     unions of any size by copying the data into an area of static
55747     storage, and then returning the address of that storage as if it
55748     were a pointer value.  The caller must copy the data from that
55749     memory area to the place where the value is wanted.  GCC does not
55750     use this method because it is slower and nonreentrant.
55751
55752     On some newer machines, PCC uses a reentrant convention for all
55753     structure and union returning.  GCC on most of these machines uses
55754     a compatible convention when returning structures and unions in
55755     memory, but still returns small structures and unions in registers.
55756
55757     You can tell GCC to use a compatible convention for all structure
55758     and union returning with the option '-fpcc-struct-return'.
55759
55760   * GCC complains about program fragments such as '0x74ae-0x4000' which
55761     appear to be two hexadecimal constants separated by the minus
55762     operator.  Actually, this string is a single "preprocessing token".
55763     Each such token must correspond to one token in C.  Since this does
55764     not, GCC prints an error message.  Although it may appear obvious
55765     that what is meant is an operator and two values, the ISO C
55766     standard specifically requires that this be treated as erroneous.
55767
55768     A "preprocessing token" is a "preprocessing number" if it begins
55769     with a digit and is followed by letters, underscores, digits,
55770     periods and 'e+', 'e-', 'E+', 'E-', 'p+', 'p-', 'P+', or 'P-'
55771     character sequences.  (In strict C90 mode, the sequences 'p+',
55772     'p-', 'P+' and 'P-' cannot appear in preprocessing numbers.)
55773
55774     To make the above program fragment valid, place whitespace in front
55775     of the minus sign.  This whitespace will end the preprocessing
55776     number.
55777
55778
55779File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
55780
5578113.4 Fixed Header Files
55782=======================
55783
55784GCC needs to install corrected versions of some system header files.
55785This is because most target systems have some header files that won't
55786work with GCC unless they are changed.  Some have bugs, some are
55787incompatible with ISO C, and some depend on special features of other
55788compilers.
55789
55790 Installing GCC automatically creates and installs the fixed header
55791files, by running a program called 'fixincludes'.  Normally, you don't
55792need to pay attention to this.  But there are cases where it doesn't do
55793the right thing automatically.
55794
55795   * If you update the system's header files, such as by installing a
55796     new system version, the fixed header files of GCC are not
55797     automatically updated.  They can be updated using the 'mkheaders'
55798     script installed in 'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
55799
55800   * On some systems, header file directories contain machine-specific
55801     symbolic links in certain places.  This makes it possible to share
55802     most of the header files among hosts running the same version of
55803     the system on different machine models.
55804
55805     The programs that fix the header files do not understand this
55806     special way of using symbolic links; therefore, the directory of
55807     fixed header files is good only for the machine model used to build
55808     it.
55809
55810     It is possible to make separate sets of fixed header files for the
55811     different machine models, and arrange a structure of symbolic links
55812     so as to use the proper set, but you'll have to do this by hand.
55813
55814
55815File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
55816
5581713.5 Standard Libraries
55818=======================
55819
55820GCC by itself attempts to be a conforming freestanding implementation.
55821*Note Language Standards Supported by GCC: Standards, for details of
55822what this means.  Beyond the library facilities required of such an
55823implementation, the rest of the C library is supplied by the vendor of
55824the operating system.  If that C library doesn't conform to the C
55825standards, then your programs might get warnings (especially when using
55826'-Wall') that you don't expect.
55827
55828 For example, the 'sprintf' function on SunOS 4.1.3 returns 'char *'
55829while the C standard says that 'sprintf' returns an 'int'.  The
55830'fixincludes' program could make the prototype for this function match
55831the Standard, but that would be wrong, since the function will still
55832return 'char *'.
55833
55834 If you need a Standard compliant library, then you need to find one, as
55835GCC does not provide one.  The GNU C library (called 'glibc') provides
55836ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
55837HURD-based GNU systems; no recent version of it supports other systems,
55838though some very old versions did.  Version 2.2 of the GNU C library
55839includes nearly complete C99 support.  You could also ask your operating
55840system vendor if newer libraries are available.
55841
55842
55843File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
55844
5584513.6 Disappointments and Misunderstandings
55846==========================================
55847
55848These problems are perhaps regrettable, but we don't know any practical
55849way around them.
55850
55851   * Certain local variables aren't recognized by debuggers when you
55852     compile with optimization.
55853
55854     This occurs because sometimes GCC optimizes the variable out of
55855     existence.  There is no way to tell the debugger how to compute the
55856     value such a variable "would have had", and it is not clear that
55857     would be desirable anyway.  So GCC simply does not mention the
55858     eliminated variable when it writes debugging information.
55859
55860     You have to expect a certain amount of disagreement between the
55861     executable and your source code, when you use optimization.
55862
55863   * Users often think it is a bug when GCC reports an error for code
55864     like this:
55865
55866          int foo (struct mumble *);
55867
55868          struct mumble { ... };
55869
55870          int foo (struct mumble *x)
55871          { ... }
55872
55873     This code really is erroneous, because the scope of 'struct mumble'
55874     in the prototype is limited to the argument list containing it.  It
55875     does not refer to the 'struct mumble' defined with file scope
55876     immediately below--they are two unrelated types with similar names
55877     in different scopes.
55878
55879     But in the definition of 'foo', the file-scope type is used because
55880     that is available to be inherited.  Thus, the definition and the
55881     prototype do not match, and you get an error.
55882
55883     This behavior may seem silly, but it's what the ISO standard
55884     specifies.  It is easy enough for you to make your code work by
55885     moving the definition of 'struct mumble' above the prototype.  It's
55886     not worth being incompatible with ISO C just to avoid an error for
55887     the example shown above.
55888
55889   * Accesses to bit-fields even in volatile objects works by accessing
55890     larger objects, such as a byte or a word.  You cannot rely on what
55891     size of object is accessed in order to read or write the bit-field;
55892     it may even vary for a given bit-field according to the precise
55893     usage.
55894
55895     If you care about controlling the amount of memory that is
55896     accessed, use volatile but do not use bit-fields.
55897
55898   * GCC comes with shell scripts to fix certain known problems in
55899     system header files.  They install corrected copies of various
55900     header files in a special directory where only GCC will normally
55901     look for them.  The scripts adapt to various systems by searching
55902     all the system header files for the problem cases that we know
55903     about.
55904
55905     If new system header files are installed, nothing automatically
55906     arranges to update the corrected header files.  They can be updated
55907     using the 'mkheaders' script installed in
55908     'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
55909
55910   * On 68000 and x86 systems, for instance, you can get paradoxical
55911     results if you test the precise values of floating point numbers.
55912     For example, you can find that a floating point value which is not
55913     a NaN is not equal to itself.  This results from the fact that the
55914     floating point registers hold a few more bits of precision than fit
55915     in a 'double' in memory.  Compiled code moves values between memory
55916     and floating point registers at its convenience, and moving them
55917     into memory truncates them.
55918
55919     You can partially avoid this problem by using the '-ffloat-store'
55920     option (*note Optimize Options::).
55921
55922   * On AIX and other platforms without weak symbol support, templates
55923     need to be instantiated explicitly and symbols for static members
55924     of templates will not be generated.
55925
55926   * On AIX, GCC scans object files and library archives for static
55927     constructors and destructors when linking an application before the
55928     linker prunes unreferenced symbols.  This is necessary to prevent
55929     the AIX linker from mistakenly assuming that static constructor or
55930     destructor are unused and removing them before the scanning can
55931     occur.  All static constructors and destructors found will be
55932     referenced even though the modules in which they occur may not be
55933     used by the program.  This may lead to both increased executable
55934     size and unexpected symbol references.
55935
55936
55937File: gcc.info,  Node: C++ Misunderstandings,  Next: Non-bugs,  Prev: Disappointments,  Up: Trouble
55938
5593913.7 Common Misunderstandings with GNU C++
55940==========================================
55941
55942C++ is a complex language and an evolving one, and its standard
55943definition (the ISO C++ standard) was only recently completed.  As a
55944result, your C++ compiler may occasionally surprise you, even when its
55945behavior is correct.  This section discusses some areas that frequently
55946give rise to questions of this sort.
55947
55948* Menu:
55949
55950* Static Definitions::  Static member declarations are not definitions
55951* Name lookup::         Name lookup, templates, and accessing members of base classes
55952* Temporaries::         Temporaries may vanish before you expect
55953* Copy Assignment::     Copy Assignment operators copy virtual bases twice
55954
55955
55956File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
55957
5595813.7.1 Declare _and_ Define Static Members
55959------------------------------------------
55960
55961When a class has static data members, it is not enough to _declare_ the
55962static member; you must also _define_ it.  For example:
55963
55964     class Foo
55965     {
55966       ...
55967       void method();
55968       static int bar;
55969     };
55970
55971 This declaration only establishes that the class 'Foo' has an 'int'
55972named 'Foo::bar', and a member function named 'Foo::method'.  But you
55973still need to define _both_ 'method' and 'bar' elsewhere.  According to
55974the ISO standard, you must supply an initializer in one (and only one)
55975source file, such as:
55976
55977     int Foo::bar = 0;
55978
55979 Other C++ compilers may not correctly implement the standard behavior.
55980As a result, when you switch to 'g++' from one of these compilers, you
55981may discover that a program that appeared to work correctly in fact does
55982not conform to the standard: 'g++' reports as undefined symbols any
55983static data members that lack definitions.
55984
55985
55986File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
55987
5598813.7.2 Name Lookup, Templates, and Accessing Members of Base Classes
55989--------------------------------------------------------------------
55990
55991The C++ standard prescribes that all names that are not dependent on
55992template parameters are bound to their present definitions when parsing
55993a template function or class.(1)  Only names that are dependent are
55994looked up at the point of instantiation.  For example, consider
55995
55996       void foo(double);
55997
55998       struct A {
55999         template <typename T>
56000         void f () {
56001           foo (1);        // 1
56002           int i = N;      // 2
56003           T t;
56004           t.bar();        // 3
56005           foo (t);        // 4
56006         }
56007
56008         static const int N;
56009       };
56010
56011 Here, the names 'foo' and 'N' appear in a context that does not depend
56012on the type of 'T'.  The compiler will thus require that they are
56013defined in the context of use in the template, not only before the point
56014of instantiation, and will here use '::foo(double)' and 'A::N',
56015respectively.  In particular, it will convert the integer value to a
56016'double' when passing it to '::foo(double)'.
56017
56018 Conversely, 'bar' and the call to 'foo' in the fourth marked line are
56019used in contexts that do depend on the type of 'T', so they are only
56020looked up at the point of instantiation, and you can provide
56021declarations for them after declaring the template, but before
56022instantiating it.  In particular, if you instantiate 'A::f<int>', the
56023last line will call an overloaded '::foo(int)' if one was provided, even
56024if after the declaration of 'struct A'.
56025
56026 This distinction between lookup of dependent and non-dependent names is
56027called two-stage (or dependent) name lookup.  G++ implements it since
56028version 3.4.
56029
56030 Two-stage name lookup sometimes leads to situations with behavior
56031different from non-template codes.  The most common is probably this:
56032
56033       template <typename T> struct Base {
56034         int i;
56035       };
56036
56037       template <typename T> struct Derived : public Base<T> {
56038         int get_i() { return i; }
56039       };
56040
56041 In 'get_i()', 'i' is not used in a dependent context, so the compiler
56042will look for a name declared at the enclosing namespace scope (which is
56043the global scope here).  It will not look into the base class, since
56044that is dependent and you may declare specializations of 'Base' even
56045after declaring 'Derived', so the compiler cannot really know what 'i'
56046would refer to.  If there is no global variable 'i', then you will get
56047an error message.
56048
56049 In order to make it clear that you want the member of the base class,
56050you need to defer lookup until instantiation time, at which the base
56051class is known.  For this, you need to access 'i' in a dependent
56052context, by either using 'this->i' (remember that 'this' is of type
56053'Derived<T>*', so is obviously dependent), or using 'Base<T>::i'.
56054Alternatively, 'Base<T>::i' might be brought into scope by a
56055'using'-declaration.
56056
56057 Another, similar example involves calling member functions of a base
56058class:
56059
56060       template <typename T> struct Base {
56061           int f();
56062       };
56063
56064       template <typename T> struct Derived : Base<T> {
56065           int g() { return f(); };
56066       };
56067
56068 Again, the call to 'f()' is not dependent on template arguments (there
56069are no arguments that depend on the type 'T', and it is also not
56070otherwise specified that the call should be in a dependent context).
56071Thus a global declaration of such a function must be available, since
56072the one in the base class is not visible until instantiation time.  The
56073compiler will consequently produce the following error message:
56074
56075       x.cc: In member function `int Derived<T>::g()':
56076       x.cc:6: error: there are no arguments to `f' that depend on a template
56077          parameter, so a declaration of `f' must be available
56078       x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
56079          allowing the use of an undeclared name is deprecated)
56080
56081 To make the code valid either use 'this->f()', or 'Base<T>::f()'.
56082Using the '-fpermissive' flag will also let the compiler accept the
56083code, by marking all function calls for which no declaration is visible
56084at the time of definition of the template for later lookup at
56085instantiation time, as if it were a dependent call.  We do not recommend
56086using '-fpermissive' to work around invalid code, and it will also only
56087catch cases where functions in base classes are called, not where
56088variables in base classes are used (as in the example above).
56089
56090 Note that some compilers (including G++ versions prior to 3.4) get
56091these examples wrong and accept above code without an error.  Those
56092compilers do not implement two-stage name lookup correctly.
56093
56094   ---------- Footnotes ----------
56095
56096   (1) The C++ standard just uses the term "dependent" for names that
56097depend on the type or value of template parameters.  This shorter term
56098will also be used in the rest of this section.
56099
56100
56101File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
56102
5610313.7.3 Temporaries May Vanish Before You Expect
56104-----------------------------------------------
56105
56106It is dangerous to use pointers or references to _portions_ of a
56107temporary object.  The compiler may very well delete the object before
56108you expect it to, leaving a pointer to garbage.  The most common place
56109where this problem crops up is in classes like string classes,
56110especially ones that define a conversion function to type 'char *' or
56111'const char *'--which is one reason why the standard 'string' class
56112requires you to call the 'c_str' member function.  However, any class
56113that returns a pointer to some internal structure is potentially subject
56114to this problem.
56115
56116 For example, a program may use a function 'strfunc' that returns
56117'string' objects, and another function 'charfunc' that operates on
56118pointers to 'char':
56119
56120     string strfunc ();
56121     void charfunc (const char *);
56122
56123     void
56124     f ()
56125     {
56126       const char *p = strfunc().c_str();
56127       ...
56128       charfunc (p);
56129       ...
56130       charfunc (p);
56131     }
56132
56133In this situation, it may seem reasonable to save a pointer to the C
56134string returned by the 'c_str' member function and use that rather than
56135call 'c_str' repeatedly.  However, the temporary string created by the
56136call to 'strfunc' is destroyed after 'p' is initialized, at which point
56137'p' is left pointing to freed memory.
56138
56139 Code like this may run successfully under some other compilers,
56140particularly obsolete cfront-based compilers that delete temporaries
56141along with normal local variables.  However, the GNU C++ behavior is
56142standard-conforming, so if your program depends on late destruction of
56143temporaries it is not portable.
56144
56145 The safe way to write such code is to give the temporary a name, which
56146forces it to remain until the end of the scope of the name.  For
56147example:
56148
56149     const string& tmp = strfunc ();
56150     charfunc (tmp.c_str ());
56151
56152
56153File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
56154
5615513.7.4 Implicit Copy-Assignment for Virtual Bases
56156-------------------------------------------------
56157
56158When a base class is virtual, only one subobject of the base class
56159belongs to each full object.  Also, the constructors and destructors are
56160invoked only once, and called from the most-derived class.  However,
56161such objects behave unspecified when being assigned.  For example:
56162
56163     struct Base{
56164       char *name;
56165       Base(char *n) : name(strdup(n)){}
56166       Base& operator= (const Base& other){
56167        free (name);
56168        name = strdup (other.name);
56169       }
56170     };
56171
56172     struct A:virtual Base{
56173       int val;
56174       A():Base("A"){}
56175     };
56176
56177     struct B:virtual Base{
56178       int bval;
56179       B():Base("B"){}
56180     };
56181
56182     struct Derived:public A, public B{
56183       Derived():Base("Derived"){}
56184     };
56185
56186     void func(Derived &d1, Derived &d2)
56187     {
56188       d1 = d2;
56189     }
56190
56191 The C++ standard specifies that 'Base::Base' is only called once when
56192constructing or copy-constructing a Derived object.  It is unspecified
56193whether 'Base::operator=' is called more than once when the implicit
56194copy-assignment for Derived objects is invoked (as it is inside 'func'
56195in the example).
56196
56197 G++ implements the "intuitive" algorithm for copy-assignment: assign
56198all direct bases, then assign all members.  In that algorithm, the
56199virtual base subobject can be encountered more than once.  In the
56200example, copying proceeds in the following order: 'val', 'name' (via
56201'strdup'), 'bval', and 'name' again.
56202
56203 If application code relies on copy-assignment, a user-defined
56204copy-assignment operator removes any uncertainties.  With such an
56205operator, the application can define whether and how the virtual base
56206subobject is assigned.
56207
56208
56209File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: C++ Misunderstandings,  Up: Trouble
56210
5621113.8 Certain Changes We Don't Want to Make
56212==========================================
56213
56214This section lists changes that people frequently request, but which we
56215do not make because we think GCC is better without them.
56216
56217   * Checking the number and type of arguments to a function which has
56218     an old-fashioned definition and no prototype.
56219
56220     Such a feature would work only occasionally--only for calls that
56221     appear in the same file as the called function, following the
56222     definition.  The only way to check all calls reliably is to add a
56223     prototype for the function.  But adding a prototype eliminates the
56224     motivation for this feature.  So the feature is not worthwhile.
56225
56226   * Warning about using an expression whose type is signed as a shift
56227     count.
56228
56229     Shift count operands are probably signed more often than unsigned.
56230     Warning about this would cause far more annoyance than good.
56231
56232   * Warning about assigning a signed value to an unsigned variable.
56233
56234     Such assignments must be very common; warning about them would
56235     cause more annoyance than good.
56236
56237   * Warning when a non-void function value is ignored.
56238
56239     C contains many standard functions that return a value that most
56240     programs choose to ignore.  One obvious example is 'printf'.
56241     Warning about this practice only leads the defensive programmer to
56242     clutter programs with dozens of casts to 'void'.  Such casts are
56243     required so frequently that they become visual noise.  Writing
56244     those casts becomes so automatic that they no longer convey useful
56245     information about the intentions of the programmer.  For functions
56246     where the return value should never be ignored, use the
56247     'warn_unused_result' function attribute (*note Function
56248     Attributes::).
56249
56250   * Making '-fshort-enums' the default.
56251
56252     This would cause storage layout to be incompatible with most other
56253     C compilers.  And it doesn't seem very important, given that you
56254     can get the same result in other ways.  The case where it matters
56255     most is when the enumeration-valued object is inside a structure,
56256     and in that case you can specify a field width explicitly.
56257
56258   * Making bit-fields unsigned by default on particular machines where
56259     "the ABI standard" says to do so.
56260
56261     The ISO C standard leaves it up to the implementation whether a
56262     bit-field declared plain 'int' is signed or not.  This in effect
56263     creates two alternative dialects of C.
56264
56265     The GNU C compiler supports both dialects; you can specify the
56266     signed dialect with '-fsigned-bitfields' and the unsigned dialect
56267     with '-funsigned-bitfields'.  However, this leaves open the
56268     question of which dialect to use by default.
56269
56270     Currently, the preferred dialect makes plain bit-fields signed,
56271     because this is simplest.  Since 'int' is the same as 'signed int'
56272     in every other context, it is cleanest for them to be the same in
56273     bit-fields as well.
56274
56275     Some computer manufacturers have published Application Binary
56276     Interface standards which specify that plain bit-fields should be
56277     unsigned.  It is a mistake, however, to say anything about this
56278     issue in an ABI.  This is because the handling of plain bit-fields
56279     distinguishes two dialects of C.  Both dialects are meaningful on
56280     every type of machine.  Whether a particular object file was
56281     compiled using signed bit-fields or unsigned is of no concern to
56282     other object files, even if they access the same bit-fields in the
56283     same data structures.
56284
56285     A given program is written in one or the other of these two
56286     dialects.  The program stands a chance to work on most any machine
56287     if it is compiled with the proper dialect.  It is unlikely to work
56288     at all if compiled with the wrong dialect.
56289
56290     Many users appreciate the GNU C compiler because it provides an
56291     environment that is uniform across machines.  These users would be
56292     inconvenienced if the compiler treated plain bit-fields differently
56293     on certain machines.
56294
56295     Occasionally users write programs intended only for a particular
56296     machine type.  On these occasions, the users would benefit if the
56297     GNU C compiler were to support by default the same dialect as the
56298     other compilers on that machine.  But such applications are rare.
56299     And users writing a program to run on more than one type of machine
56300     cannot possibly benefit from this kind of compatibility.
56301
56302     This is why GCC does and will treat plain bit-fields in the same
56303     fashion on all types of machines (by default).
56304
56305     There are some arguments for making bit-fields unsigned by default
56306     on all machines.  If, for example, this becomes a universal de
56307     facto standard, it would make sense for GCC to go along with it.
56308     This is something to be considered in the future.
56309
56310     (Of course, users strongly concerned about portability should
56311     indicate explicitly in each bit-field whether it is signed or not.
56312     In this way, they write programs which have the same meaning in
56313     both C dialects.)
56314
56315   * Undefining '__STDC__' when '-ansi' is not used.
56316
56317     Currently, GCC defines '__STDC__' unconditionally.  This provides
56318     good results in practice.
56319
56320     Programmers normally use conditionals on '__STDC__' to ask whether
56321     it is safe to use certain features of ISO C, such as function
56322     prototypes or ISO token concatenation.  Since plain 'gcc' supports
56323     all the features of ISO C, the correct answer to these questions is
56324     "yes".
56325
56326     Some users try to use '__STDC__' to check for the availability of
56327     certain library facilities.  This is actually incorrect usage in an
56328     ISO C program, because the ISO C standard says that a conforming
56329     freestanding implementation should define '__STDC__' even though it
56330     does not have the library facilities.  'gcc -ansi -pedantic' is a
56331     conforming freestanding implementation, and it is therefore
56332     required to define '__STDC__', even though it does not come with an
56333     ISO C library.
56334
56335     Sometimes people say that defining '__STDC__' in a compiler that
56336     does not completely conform to the ISO C standard somehow violates
56337     the standard.  This is illogical.  The standard is a standard for
56338     compilers that claim to support ISO C, such as 'gcc -ansi'--not for
56339     other compilers such as plain 'gcc'.  Whatever the ISO C standard
56340     says is relevant to the design of plain 'gcc' without '-ansi' only
56341     for pragmatic reasons, not as a requirement.
56342
56343     GCC normally defines '__STDC__' to be 1, and in addition defines
56344     '__STRICT_ANSI__' if you specify the '-ansi' option, or a '-std'
56345     option for strict conformance to some version of ISO C.  On some
56346     hosts, system include files use a different convention, where
56347     '__STDC__' is normally 0, but is 1 if the user specifies strict
56348     conformance to the C Standard.  GCC follows the host convention
56349     when processing system include files, but when processing user
56350     files it follows the usual GNU C convention.
56351
56352   * Undefining '__STDC__' in C++.
56353
56354     Programs written to compile with C++-to-C translators get the value
56355     of '__STDC__' that goes with the C compiler that is subsequently
56356     used.  These programs must test '__STDC__' to determine what kind
56357     of C preprocessor that compiler uses: whether they should
56358     concatenate tokens in the ISO C fashion or in the traditional
56359     fashion.
56360
56361     These programs work properly with GNU C++ if '__STDC__' is defined.
56362     They would not work otherwise.
56363
56364     In addition, many header files are written to provide prototypes in
56365     ISO C but not in traditional C.  Many of these header files can
56366     work without change in C++ provided '__STDC__' is defined.  If
56367     '__STDC__' is not defined, they will all fail, and will all need to
56368     be changed to test explicitly for C++ as well.
56369
56370   * Deleting "empty" loops.
56371
56372     Historically, GCC has not deleted "empty" loops under the
56373     assumption that the most likely reason you would put one in a
56374     program is to have a delay, so deleting them will not make real
56375     programs run any faster.
56376
56377     However, the rationale here is that optimization of a nonempty loop
56378     cannot produce an empty one.  This held for carefully written C
56379     compiled with less powerful optimizers but is not always the case
56380     for carefully written C++ or with more powerful optimizers.  Thus
56381     GCC will remove operations from loops whenever it can determine
56382     those operations are not externally visible (apart from the time
56383     taken to execute them, of course).  In case the loop can be proved
56384     to be finite, GCC will also remove the loop itself.
56385
56386     Be aware of this when performing timing tests, for instance the
56387     following loop can be completely removed, provided
56388     'some_expression' can provably not change any global state.
56389
56390          {
56391             int sum = 0;
56392             int ix;
56393
56394             for (ix = 0; ix != 10000; ix++)
56395                sum += some_expression;
56396          }
56397
56398     Even though 'sum' is accumulated in the loop, no use is made of
56399     that summation, so the accumulation can be removed.
56400
56401   * Making side effects happen in the same order as in some other
56402     compiler.
56403
56404     It is never safe to depend on the order of evaluation of side
56405     effects.  For example, a function call like this may very well
56406     behave differently from one compiler to another:
56407
56408          void func (int, int);
56409
56410          int i = 2;
56411          func (i++, i++);
56412
56413     There is no guarantee (in either the C or the C++ standard language
56414     definitions) that the increments will be evaluated in any
56415     particular order.  Either increment might happen first.  'func'
56416     might get the arguments '2, 3', or it might get '3, 2', or even '2,
56417     2'.
56418
56419   * Making certain warnings into errors by default.
56420
56421     Some ISO C testsuites report failure when the compiler does not
56422     produce an error message for a certain program.
56423
56424     ISO C requires a "diagnostic" message for certain kinds of invalid
56425     programs, but a warning is defined by GCC to count as a diagnostic.
56426     If GCC produces a warning but not an error, that is correct ISO C
56427     support.  If testsuites call this "failure", they should be run
56428     with the GCC option '-pedantic-errors', which will turn these
56429     warnings into errors.
56430
56431
56432File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
56433
5643413.9 Warning Messages and Error Messages
56435========================================
56436
56437The GNU compiler can produce two kinds of diagnostics: errors and
56438warnings.  Each kind has a different purpose:
56439
56440     "Errors" report problems that make it impossible to compile your
56441     program.  GCC reports errors with the source file name and line
56442     number where the problem is apparent.
56443
56444     "Warnings" report other unusual conditions in your code that _may_
56445     indicate a problem, although compilation can (and does) proceed.
56446     Warning messages also report the source file name and line number,
56447     but include the text 'warning:' to distinguish them from error
56448     messages.
56449
56450 Warnings may indicate danger points where you should check to make sure
56451that your program really does what you intend; or the use of obsolete
56452features; or the use of nonstandard features of GNU C or C++.  Many
56453warnings are issued only if you ask for them, with one of the '-W'
56454options (for instance, '-Wall' requests a variety of useful warnings).
56455
56456 GCC always tries to compile your program if possible; it never
56457gratuitously rejects a program whose meaning is clear merely because
56458(for instance) it fails to conform to a standard.  In some cases,
56459however, the C and C++ standards specify that certain extensions are
56460forbidden, and a diagnostic _must_ be issued by a conforming compiler.
56461The '-pedantic' option tells GCC to issue warnings in such cases;
56462'-pedantic-errors' says to make them errors instead.  This does not mean
56463that _all_ non-ISO constructs get warnings or errors.
56464
56465 *Note Options to Request or Suppress Warnings: Warning Options, for
56466more detail on these and related command-line options.
56467
56468
56469File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
56470
5647114 Reporting Bugs
56472*****************
56473
56474Your bug reports play an essential role in making GCC reliable.
56475
56476 When you encounter a problem, the first thing to do is to see if it is
56477already known.  *Note Trouble::.  If it isn't known, then you should
56478report the problem.
56479
56480* Menu:
56481
56482* Criteria:  Bug Criteria.   Have you really found a bug?
56483* Reporting: Bug Reporting.  How to report a bug effectively.
56484
56485
56486File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
56487
5648814.1 Have You Found a Bug?
56489==========================
56490
56491If you are not sure whether you have found a bug, here are some
56492guidelines:
56493
56494   * If the compiler gets a fatal signal, for any input whatever, that
56495     is a compiler bug.  Reliable compilers never crash.
56496
56497   * If the compiler produces invalid assembly code, for any input
56498     whatever (except an 'asm' statement), that is a compiler bug,
56499     unless the compiler reports errors (not just warnings) which would
56500     ordinarily prevent the assembler from being run.
56501
56502   * If the compiler produces valid assembly code that does not
56503     correctly execute the input source code, that is a compiler bug.
56504
56505     However, you must double-check to make sure, because you may have a
56506     program whose behavior is undefined, which happened by chance to
56507     give the desired results with another C or C++ compiler.
56508
56509     For example, in many nonoptimizing compilers, you can write 'x;' at
56510     the end of a function instead of 'return x;', with the same
56511     results.  But the value of the function is undefined if 'return' is
56512     omitted; it is not a bug when GCC produces different results.
56513
56514     Problems often result from expressions with two increment
56515     operators, as in 'f (*p++, *p++)'.  Your previous compiler might
56516     have interpreted that expression the way you intended; GCC might
56517     interpret it another way.  Neither compiler is wrong.  The bug is
56518     in your code.
56519
56520     After you have localized the error to a single source line, it
56521     should be easy to check for these things.  If your program is
56522     correct and well defined, you have found a compiler bug.
56523
56524   * If the compiler produces an error message for valid input, that is
56525     a compiler bug.
56526
56527   * If the compiler does not produce an error message for invalid
56528     input, that is a compiler bug.  However, you should note that your
56529     idea of "invalid input" might be someone else's idea of "an
56530     extension" or "support for traditional practice".
56531
56532   * If you are an experienced user of one of the languages GCC
56533     supports, your suggestions for improvement of GCC are welcome in
56534     any case.
56535
56536
56537File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
56538
5653914.2 How and Where to Report Bugs
56540=================================
56541
56542Bugs should be reported to the bug database at
56543<https://gcc.gnu.org/bugs/>.
56544
56545
56546File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
56547
5654815 How To Get Help with GCC
56549***************************
56550
56551If you need help installing, using or changing GCC, there are two ways
56552to find it:
56553
56554   * Send a message to a suitable network mailing list.  First try
56555     <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
56556     that brings no response, try <gcc@gcc.gnu.org>.  For help changing
56557     GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
56558     GCC, please report it following the instructions at *note Bug
56559     Reporting::.
56560
56561   * Look in the service directory for someone who might help you for a
56562     fee.  The service directory is found at
56563     <https://www.fsf.org/resources/service>.
56564
56565 For further information, see <http://gcc.gnu.org/faq.html#support>.
56566
56567
56568File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
56569
5657016 Contributing to GCC Development
56571**********************************
56572
56573If you would like to help pretest GCC releases to assure they work well,
56574current development sources are available via Git (see
56575<http://gcc.gnu.org/git.html>).  Source and binary snapshots are also
56576available for FTP; see <http://gcc.gnu.org/snapshots.html>.
56577
56578 If you would like to work on improvements to GCC, please read the
56579advice at these URLs:
56580
56581     <http://gcc.gnu.org/contribute.html>
56582     <http://gcc.gnu.org/contributewhy.html>
56583
56584for information on how to make useful contributions and avoid
56585duplication of effort.  Suggested projects are listed at
56586<http://gcc.gnu.org/projects/>.
56587
56588
56589File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
56590
56591Funding Free Software
56592*********************
56593
56594If you want to have more free software a few years from now, it makes
56595sense for you to help encourage people to contribute funds for its
56596development.  The most effective approach known is to encourage
56597commercial redistributors to donate.
56598
56599 Users of free software systems can boost the pace of development by
56600encouraging for-a-fee distributors to donate part of their selling price
56601to free software developers--the Free Software Foundation, and others.
56602
56603 The way to convince distributors to do this is to demand it and expect
56604it from them.  So when you compare distributors, judge them partly by
56605how much they give to free software development.  Show distributors they
56606must compete to be the one who gives the most.
56607
56608 To make this approach work, you must insist on numbers that you can
56609compare, such as, "We will donate ten dollars to the Frobnitz project
56610for each disk sold."  Don't be satisfied with a vague promise, such as
56611"A portion of the profits are donated," since it doesn't give a basis
56612for comparison.
56613
56614 Even a precise fraction "of the profits from this disk" is not very
56615meaningful, since creative accounting and unrelated business decisions
56616can greatly alter what fraction of the sales price counts as profit.  If
56617the price you pay is $50, ten percent of the profit is probably less
56618than a dollar; it might be a few cents, or nothing at all.
56619
56620 Some redistributors do development work themselves.  This is useful
56621too; but to keep everyone honest, you need to inquire how much they do,
56622and what kind.  Some kinds of development make much more long-term
56623difference than others.  For example, maintaining a separate version of
56624a program contributes very little; maintaining the standard version of a
56625program for the whole community contributes much.  Easy new ports
56626contribute little, since someone else would surely do them; difficult
56627ports such as adding a new CPU to the GNU Compiler Collection contribute
56628more; major new features or packages contribute the most.
56629
56630 By establishing the idea that supporting further development is "the
56631proper thing to do" when distributing free software for a fee, we can
56632assure a steady flow of resources into making more free software.
56633
56634     Copyright (C) 1994 Free Software Foundation, Inc.
56635     Verbatim copying and redistribution of this section is permitted
56636     without royalty; alteration is not permitted.
56637
56638
56639File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
56640
56641The GNU Project and GNU/Linux
56642*****************************
56643
56644The GNU Project was launched in 1984 to develop a complete Unix-like
56645operating system which is free software: the GNU system.  (GNU is a
56646recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
56647Variants of the GNU operating system, which use the kernel Linux, are
56648now widely used; though these systems are often referred to as "Linux",
56649they are more accurately called GNU/Linux systems.
56650
56651 For more information, see:
56652     <http://www.gnu.org/>
56653     <http://www.gnu.org/gnu/linux-and-gnu.html>
56654
56655
56656File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
56657
56658GNU General Public License
56659**************************
56660
56661                        Version 3, 29 June 2007
56662
56663     Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
56664
56665     Everyone is permitted to copy and distribute verbatim copies of this
56666     license document, but changing it is not allowed.
56667
56668Preamble
56669========
56670
56671The GNU General Public License is a free, copyleft license for software
56672and other kinds of works.
56673
56674 The licenses for most software and other practical works are designed
56675to take away your freedom to share and change the works.  By contrast,
56676the GNU General Public License is intended to guarantee your freedom to
56677share and change all versions of a program-to make sure it remains free
56678software for all its users.  We, the Free Software Foundation, use the
56679GNU General Public License for most of our software; it applies also to
56680any other work released this way by its authors.  You can apply it to
56681your programs, too.
56682
56683 When we speak of free software, we are referring to freedom, not price.
56684Our General Public Licenses are designed to make sure that you have the
56685freedom to distribute copies of free software (and charge for them if
56686you wish), that you receive source code or can get it if you want it,
56687that you can change the software or use pieces of it in new free
56688programs, and that you know you can do these things.
56689
56690 To protect your rights, we need to prevent others from denying you
56691these rights or asking you to surrender the rights.  Therefore, you have
56692certain responsibilities if you distribute copies of the software, or if
56693you modify it: responsibilities to respect the freedom of others.
56694
56695 For example, if you distribute copies of such a program, whether gratis
56696or for a fee, you must pass on to the recipients the same freedoms that
56697you received.  You must make sure that they, too, receive or can get the
56698source code.  And you must show them these terms so they know their
56699rights.
56700
56701 Developers that use the GNU GPL protect your rights with two steps: (1)
56702assert copyright on the software, and (2) offer you this License giving
56703you legal permission to copy, distribute and/or modify it.
56704
56705 For the developers' and authors' protection, the GPL clearly explains
56706that there is no warranty for this free software.  For both users' and
56707authors' sake, the GPL requires that modified versions be marked as
56708changed, so that their problems will not be attributed erroneously to
56709authors of previous versions.
56710
56711 Some devices are designed to deny users access to install or run
56712modified versions of the software inside them, although the manufacturer
56713can do so.  This is fundamentally incompatible with the aim of
56714protecting users' freedom to change the software.  The systematic
56715pattern of such abuse occurs in the area of products for individuals to
56716use, which is precisely where it is most unacceptable.  Therefore, we
56717have designed this version of the GPL to prohibit the practice for those
56718products.  If such problems arise substantially in other domains, we
56719stand ready to extend this provision to those domains in future versions
56720of the GPL, as needed to protect the freedom of users.
56721
56722 Finally, every program is threatened constantly by software patents.
56723States should not allow patents to restrict development and use of
56724software on general-purpose computers, but in those that do, we wish to
56725avoid the special danger that patents applied to a free program could
56726make it effectively proprietary.  To prevent this, the GPL assures that
56727patents cannot be used to render the program non-free.
56728
56729 The precise terms and conditions for copying, distribution and
56730modification follow.
56731
56732TERMS AND CONDITIONS
56733====================
56734
56735  0. Definitions.
56736
56737     "This License" refers to version 3 of the GNU General Public
56738     License.
56739
56740     "Copyright" also means copyright-like laws that apply to other
56741     kinds of works, such as semiconductor masks.
56742
56743     "The Program" refers to any copyrightable work licensed under this
56744     License.  Each licensee is addressed as "you".  "Licensees" and
56745     "recipients" may be individuals or organizations.
56746
56747     To "modify" a work means to copy from or adapt all or part of the
56748     work in a fashion requiring copyright permission, other than the
56749     making of an exact copy.  The resulting work is called a "modified
56750     version" of the earlier work or a work "based on" the earlier work.
56751
56752     A "covered work" means either the unmodified Program or a work
56753     based on the Program.
56754
56755     To "propagate" a work means to do anything with it that, without
56756     permission, would make you directly or secondarily liable for
56757     infringement under applicable copyright law, except executing it on
56758     a computer or modifying a private copy.  Propagation includes
56759     copying, distribution (with or without modification), making
56760     available to the public, and in some countries other activities as
56761     well.
56762
56763     To "convey" a work means any kind of propagation that enables other
56764     parties to make or receive copies.  Mere interaction with a user
56765     through a computer network, with no transfer of a copy, is not
56766     conveying.
56767
56768     An interactive user interface displays "Appropriate Legal Notices"
56769     to the extent that it includes a convenient and prominently visible
56770     feature that (1) displays an appropriate copyright notice, and (2)
56771     tells the user that there is no warranty for the work (except to
56772     the extent that warranties are provided), that licensees may convey
56773     the work under this License, and how to view a copy of this
56774     License.  If the interface presents a list of user commands or
56775     options, such as a menu, a prominent item in the list meets this
56776     criterion.
56777
56778  1. Source Code.
56779
56780     The "source code" for a work means the preferred form of the work
56781     for making modifications to it.  "Object code" means any non-source
56782     form of a work.
56783
56784     A "Standard Interface" means an interface that either is an
56785     official standard defined by a recognized standards body, or, in
56786     the case of interfaces specified for a particular programming
56787     language, one that is widely used among developers working in that
56788     language.
56789
56790     The "System Libraries" of an executable work include anything,
56791     other than the work as a whole, that (a) is included in the normal
56792     form of packaging a Major Component, but which is not part of that
56793     Major Component, and (b) serves only to enable use of the work with
56794     that Major Component, or to implement a Standard Interface for
56795     which an implementation is available to the public in source code
56796     form.  A "Major Component", in this context, means a major
56797     essential component (kernel, window system, and so on) of the
56798     specific operating system (if any) on which the executable work
56799     runs, or a compiler used to produce the work, or an object code
56800     interpreter used to run it.
56801
56802     The "Corresponding Source" for a work in object code form means all
56803     the source code needed to generate, install, and (for an executable
56804     work) run the object code and to modify the work, including scripts
56805     to control those activities.  However, it does not include the
56806     work's System Libraries, or general-purpose tools or generally
56807     available free programs which are used unmodified in performing
56808     those activities but which are not part of the work.  For example,
56809     Corresponding Source includes interface definition files associated
56810     with source files for the work, and the source code for shared
56811     libraries and dynamically linked subprograms that the work is
56812     specifically designed to require, such as by intimate data
56813     communication or control flow between those subprograms and other
56814     parts of the work.
56815
56816     The Corresponding Source need not include anything that users can
56817     regenerate automatically from other parts of the Corresponding
56818     Source.
56819
56820     The Corresponding Source for a work in source code form is that
56821     same work.
56822
56823  2. Basic Permissions.
56824
56825     All rights granted under this License are granted for the term of
56826     copyright on the Program, and are irrevocable provided the stated
56827     conditions are met.  This License explicitly affirms your unlimited
56828     permission to run the unmodified Program.  The output from running
56829     a covered work is covered by this License only if the output, given
56830     its content, constitutes a covered work.  This License acknowledges
56831     your rights of fair use or other equivalent, as provided by
56832     copyright law.
56833
56834     You may make, run and propagate covered works that you do not
56835     convey, without conditions so long as your license otherwise
56836     remains in force.  You may convey covered works to others for the
56837     sole purpose of having them make modifications exclusively for you,
56838     or provide you with facilities for running those works, provided
56839     that you comply with the terms of this License in conveying all
56840     material for which you do not control copyright.  Those thus making
56841     or running the covered works for you must do so exclusively on your
56842     behalf, under your direction and control, on terms that prohibit
56843     them from making any copies of your copyrighted material outside
56844     their relationship with you.
56845
56846     Conveying under any other circumstances is permitted solely under
56847     the conditions stated below.  Sublicensing is not allowed; section
56848     10 makes it unnecessary.
56849
56850  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
56851
56852     No covered work shall be deemed part of an effective technological
56853     measure under any applicable law fulfilling obligations under
56854     article 11 of the WIPO copyright treaty adopted on 20 December
56855     1996, or similar laws prohibiting or restricting circumvention of
56856     such measures.
56857
56858     When you convey a covered work, you waive any legal power to forbid
56859     circumvention of technological measures to the extent such
56860     circumvention is effected by exercising rights under this License
56861     with respect to the covered work, and you disclaim any intention to
56862     limit operation or modification of the work as a means of
56863     enforcing, against the work's users, your or third parties' legal
56864     rights to forbid circumvention of technological measures.
56865
56866  4. Conveying Verbatim Copies.
56867
56868     You may convey verbatim copies of the Program's source code as you
56869     receive it, in any medium, provided that you conspicuously and
56870     appropriately publish on each copy an appropriate copyright notice;
56871     keep intact all notices stating that this License and any
56872     non-permissive terms added in accord with section 7 apply to the
56873     code; keep intact all notices of the absence of any warranty; and
56874     give all recipients a copy of this License along with the Program.
56875
56876     You may charge any price or no price for each copy that you convey,
56877     and you may offer support or warranty protection for a fee.
56878
56879  5. Conveying Modified Source Versions.
56880
56881     You may convey a work based on the Program, or the modifications to
56882     produce it from the Program, in the form of source code under the
56883     terms of section 4, provided that you also meet all of these
56884     conditions:
56885
56886       a. The work must carry prominent notices stating that you
56887          modified it, and giving a relevant date.
56888
56889       b. The work must carry prominent notices stating that it is
56890          released under this License and any conditions added under
56891          section 7.  This requirement modifies the requirement in
56892          section 4 to "keep intact all notices".
56893
56894       c. You must license the entire work, as a whole, under this
56895          License to anyone who comes into possession of a copy.  This
56896          License will therefore apply, along with any applicable
56897          section 7 additional terms, to the whole of the work, and all
56898          its parts, regardless of how they are packaged.  This License
56899          gives no permission to license the work in any other way, but
56900          it does not invalidate such permission if you have separately
56901          received it.
56902
56903       d. If the work has interactive user interfaces, each must display
56904          Appropriate Legal Notices; however, if the Program has
56905          interactive interfaces that do not display Appropriate Legal
56906          Notices, your work need not make them do so.
56907
56908     A compilation of a covered work with other separate and independent
56909     works, which are not by their nature extensions of the covered
56910     work, and which are not combined with it such as to form a larger
56911     program, in or on a volume of a storage or distribution medium, is
56912     called an "aggregate" if the compilation and its resulting
56913     copyright are not used to limit the access or legal rights of the
56914     compilation's users beyond what the individual works permit.
56915     Inclusion of a covered work in an aggregate does not cause this
56916     License to apply to the other parts of the aggregate.
56917
56918  6. Conveying Non-Source Forms.
56919
56920     You may convey a covered work in object code form under the terms
56921     of sections 4 and 5, provided that you also convey the
56922     machine-readable Corresponding Source under the terms of this
56923     License, in one of these ways:
56924
56925       a. Convey the object code in, or embodied in, a physical product
56926          (including a physical distribution medium), accompanied by the
56927          Corresponding Source fixed on a durable physical medium
56928          customarily used for software interchange.
56929
56930       b. Convey the object code in, or embodied in, a physical product
56931          (including a physical distribution medium), accompanied by a
56932          written offer, valid for at least three years and valid for as
56933          long as you offer spare parts or customer support for that
56934          product model, to give anyone who possesses the object code
56935          either (1) a copy of the Corresponding Source for all the
56936          software in the product that is covered by this License, on a
56937          durable physical medium customarily used for software
56938          interchange, for a price no more than your reasonable cost of
56939          physically performing this conveying of source, or (2) access
56940          to copy the Corresponding Source from a network server at no
56941          charge.
56942
56943       c. Convey individual copies of the object code with a copy of the
56944          written offer to provide the Corresponding Source.  This
56945          alternative is allowed only occasionally and noncommercially,
56946          and only if you received the object code with such an offer,
56947          in accord with subsection 6b.
56948
56949       d. Convey the object code by offering access from a designated
56950          place (gratis or for a charge), and offer equivalent access to
56951          the Corresponding Source in the same way through the same
56952          place at no further charge.  You need not require recipients
56953          to copy the Corresponding Source along with the object code.
56954          If the place to copy the object code is a network server, the
56955          Corresponding Source may be on a different server (operated by
56956          you or a third party) that supports equivalent copying
56957          facilities, provided you maintain clear directions next to the
56958          object code saying where to find the Corresponding Source.
56959          Regardless of what server hosts the Corresponding Source, you
56960          remain obligated to ensure that it is available for as long as
56961          needed to satisfy these requirements.
56962
56963       e. Convey the object code using peer-to-peer transmission,
56964          provided you inform other peers where the object code and
56965          Corresponding Source of the work are being offered to the
56966          general public at no charge under subsection 6d.
56967
56968     A separable portion of the object code, whose source code is
56969     excluded from the Corresponding Source as a System Library, need
56970     not be included in conveying the object code work.
56971
56972     A "User Product" is either (1) a "consumer product", which means
56973     any tangible personal property which is normally used for personal,
56974     family, or household purposes, or (2) anything designed or sold for
56975     incorporation into a dwelling.  In determining whether a product is
56976     a consumer product, doubtful cases shall be resolved in favor of
56977     coverage.  For a particular product received by a particular user,
56978     "normally used" refers to a typical or common use of that class of
56979     product, regardless of the status of the particular user or of the
56980     way in which the particular user actually uses, or expects or is
56981     expected to use, the product.  A product is a consumer product
56982     regardless of whether the product has substantial commercial,
56983     industrial or non-consumer uses, unless such uses represent the
56984     only significant mode of use of the product.
56985
56986     "Installation Information" for a User Product means any methods,
56987     procedures, authorization keys, or other information required to
56988     install and execute modified versions of a covered work in that
56989     User Product from a modified version of its Corresponding Source.
56990     The information must suffice to ensure that the continued
56991     functioning of the modified object code is in no case prevented or
56992     interfered with solely because modification has been made.
56993
56994     If you convey an object code work under this section in, or with,
56995     or specifically for use in, a User Product, and the conveying
56996     occurs as part of a transaction in which the right of possession
56997     and use of the User Product is transferred to the recipient in
56998     perpetuity or for a fixed term (regardless of how the transaction
56999     is characterized), the Corresponding Source conveyed under this
57000     section must be accompanied by the Installation Information.  But
57001     this requirement does not apply if neither you nor any third party
57002     retains the ability to install modified object code on the User
57003     Product (for example, the work has been installed in ROM).
57004
57005     The requirement to provide Installation Information does not
57006     include a requirement to continue to provide support service,
57007     warranty, or updates for a work that has been modified or installed
57008     by the recipient, or for the User Product in which it has been
57009     modified or installed.  Access to a network may be denied when the
57010     modification itself materially and adversely affects the operation
57011     of the network or violates the rules and protocols for
57012     communication across the network.
57013
57014     Corresponding Source conveyed, and Installation Information
57015     provided, in accord with this section must be in a format that is
57016     publicly documented (and with an implementation available to the
57017     public in source code form), and must require no special password
57018     or key for unpacking, reading or copying.
57019
57020  7. Additional Terms.
57021
57022     "Additional permissions" are terms that supplement the terms of
57023     this License by making exceptions from one or more of its
57024     conditions.  Additional permissions that are applicable to the
57025     entire Program shall be treated as though they were included in
57026     this License, to the extent that they are valid under applicable
57027     law.  If additional permissions apply only to part of the Program,
57028     that part may be used separately under those permissions, but the
57029     entire Program remains governed by this License without regard to
57030     the additional permissions.
57031
57032     When you convey a copy of a covered work, you may at your option
57033     remove any additional permissions from that copy, or from any part
57034     of it.  (Additional permissions may be written to require their own
57035     removal in certain cases when you modify the work.)  You may place
57036     additional permissions on material, added by you to a covered work,
57037     for which you have or can give appropriate copyright permission.
57038
57039     Notwithstanding any other provision of this License, for material
57040     you add to a covered work, you may (if authorized by the copyright
57041     holders of that material) supplement the terms of this License with
57042     terms:
57043
57044       a. Disclaiming warranty or limiting liability differently from
57045          the terms of sections 15 and 16 of this License; or
57046
57047       b. Requiring preservation of specified reasonable legal notices
57048          or author attributions in that material or in the Appropriate
57049          Legal Notices displayed by works containing it; or
57050
57051       c. Prohibiting misrepresentation of the origin of that material,
57052          or requiring that modified versions of such material be marked
57053          in reasonable ways as different from the original version; or
57054
57055       d. Limiting the use for publicity purposes of names of licensors
57056          or authors of the material; or
57057
57058       e. Declining to grant rights under trademark law for use of some
57059          trade names, trademarks, or service marks; or
57060
57061       f. Requiring indemnification of licensors and authors of that
57062          material by anyone who conveys the material (or modified
57063          versions of it) with contractual assumptions of liability to
57064          the recipient, for any liability that these contractual
57065          assumptions directly impose on those licensors and authors.
57066
57067     All other non-permissive additional terms are considered "further
57068     restrictions" within the meaning of section 10.  If the Program as
57069     you received it, or any part of it, contains a notice stating that
57070     it is governed by this License along with a term that is a further
57071     restriction, you may remove that term.  If a license document
57072     contains a further restriction but permits relicensing or conveying
57073     under this License, you may add to a covered work material governed
57074     by the terms of that license document, provided that the further
57075     restriction does not survive such relicensing or conveying.
57076
57077     If you add terms to a covered work in accord with this section, you
57078     must place, in the relevant source files, a statement of the
57079     additional terms that apply to those files, or a notice indicating
57080     where to find the applicable terms.
57081
57082     Additional terms, permissive or non-permissive, may be stated in
57083     the form of a separately written license, or stated as exceptions;
57084     the above requirements apply either way.
57085
57086  8. Termination.
57087
57088     You may not propagate or modify a covered work except as expressly
57089     provided under this License.  Any attempt otherwise to propagate or
57090     modify it is void, and will automatically terminate your rights
57091     under this License (including any patent licenses granted under the
57092     third paragraph of section 11).
57093
57094     However, if you cease all violation of this License, then your
57095     license from a particular copyright holder is reinstated (a)
57096     provisionally, unless and until the copyright holder explicitly and
57097     finally terminates your license, and (b) permanently, if the
57098     copyright holder fails to notify you of the violation by some
57099     reasonable means prior to 60 days after the cessation.
57100
57101     Moreover, your license from a particular copyright holder is
57102     reinstated permanently if the copyright holder notifies you of the
57103     violation by some reasonable means, this is the first time you have
57104     received notice of violation of this License (for any work) from
57105     that copyright holder, and you cure the violation prior to 30 days
57106     after your receipt of the notice.
57107
57108     Termination of your rights under this section does not terminate
57109     the licenses of parties who have received copies or rights from you
57110     under this License.  If your rights have been terminated and not
57111     permanently reinstated, you do not qualify to receive new licenses
57112     for the same material under section 10.
57113
57114  9. Acceptance Not Required for Having Copies.
57115
57116     You are not required to accept this License in order to receive or
57117     run a copy of the Program.  Ancillary propagation of a covered work
57118     occurring solely as a consequence of using peer-to-peer
57119     transmission to receive a copy likewise does not require
57120     acceptance.  However, nothing other than this License grants you
57121     permission to propagate or modify any covered work.  These actions
57122     infringe copyright if you do not accept this License.  Therefore,
57123     by modifying or propagating a covered work, you indicate your
57124     acceptance of this License to do so.
57125
57126  10. Automatic Licensing of Downstream Recipients.
57127
57128     Each time you convey a covered work, the recipient automatically
57129     receives a license from the original licensors, to run, modify and
57130     propagate that work, subject to this License.  You are not
57131     responsible for enforcing compliance by third parties with this
57132     License.
57133
57134     An "entity transaction" is a transaction transferring control of an
57135     organization, or substantially all assets of one, or subdividing an
57136     organization, or merging organizations.  If propagation of a
57137     covered work results from an entity transaction, each party to that
57138     transaction who receives a copy of the work also receives whatever
57139     licenses to the work the party's predecessor in interest had or
57140     could give under the previous paragraph, plus a right to possession
57141     of the Corresponding Source of the work from the predecessor in
57142     interest, if the predecessor has it or can get it with reasonable
57143     efforts.
57144
57145     You may not impose any further restrictions on the exercise of the
57146     rights granted or affirmed under this License.  For example, you
57147     may not impose a license fee, royalty, or other charge for exercise
57148     of rights granted under this License, and you may not initiate
57149     litigation (including a cross-claim or counterclaim in a lawsuit)
57150     alleging that any patent claim is infringed by making, using,
57151     selling, offering for sale, or importing the Program or any portion
57152     of it.
57153
57154  11. Patents.
57155
57156     A "contributor" is a copyright holder who authorizes use under this
57157     License of the Program or a work on which the Program is based.
57158     The work thus licensed is called the contributor's "contributor
57159     version".
57160
57161     A contributor's "essential patent claims" are all patent claims
57162     owned or controlled by the contributor, whether already acquired or
57163     hereafter acquired, that would be infringed by some manner,
57164     permitted by this License, of making, using, or selling its
57165     contributor version, but do not include claims that would be
57166     infringed only as a consequence of further modification of the
57167     contributor version.  For purposes of this definition, "control"
57168     includes the right to grant patent sublicenses in a manner
57169     consistent with the requirements of this License.
57170
57171     Each contributor grants you a non-exclusive, worldwide,
57172     royalty-free patent license under the contributor's essential
57173     patent claims, to make, use, sell, offer for sale, import and
57174     otherwise run, modify and propagate the contents of its contributor
57175     version.
57176
57177     In the following three paragraphs, a "patent license" is any
57178     express agreement or commitment, however denominated, not to
57179     enforce a patent (such as an express permission to practice a
57180     patent or covenant not to sue for patent infringement).  To "grant"
57181     such a patent license to a party means to make such an agreement or
57182     commitment not to enforce a patent against the party.
57183
57184     If you convey a covered work, knowingly relying on a patent
57185     license, and the Corresponding Source of the work is not available
57186     for anyone to copy, free of charge and under the terms of this
57187     License, through a publicly available network server or other
57188     readily accessible means, then you must either (1) cause the
57189     Corresponding Source to be so available, or (2) arrange to deprive
57190     yourself of the benefit of the patent license for this particular
57191     work, or (3) arrange, in a manner consistent with the requirements
57192     of this License, to extend the patent license to downstream
57193     recipients.  "Knowingly relying" means you have actual knowledge
57194     that, but for the patent license, your conveying the covered work
57195     in a country, or your recipient's use of the covered work in a
57196     country, would infringe one or more identifiable patents in that
57197     country that you have reason to believe are valid.
57198
57199     If, pursuant to or in connection with a single transaction or
57200     arrangement, you convey, or propagate by procuring conveyance of, a
57201     covered work, and grant a patent license to some of the parties
57202     receiving the covered work authorizing them to use, propagate,
57203     modify or convey a specific copy of the covered work, then the
57204     patent license you grant is automatically extended to all
57205     recipients of the covered work and works based on it.
57206
57207     A patent license is "discriminatory" if it does not include within
57208     the scope of its coverage, prohibits the exercise of, or is
57209     conditioned on the non-exercise of one or more of the rights that
57210     are specifically granted under this License.  You may not convey a
57211     covered work if you are a party to an arrangement with a third
57212     party that is in the business of distributing software, under which
57213     you make payment to the third party based on the extent of your
57214     activity of conveying the work, and under which the third party
57215     grants, to any of the parties who would receive the covered work
57216     from you, a discriminatory patent license (a) in connection with
57217     copies of the covered work conveyed by you (or copies made from
57218     those copies), or (b) primarily for and in connection with specific
57219     products or compilations that contain the covered work, unless you
57220     entered into that arrangement, or that patent license was granted,
57221     prior to 28 March 2007.
57222
57223     Nothing in this License shall be construed as excluding or limiting
57224     any implied license or other defenses to infringement that may
57225     otherwise be available to you under applicable patent law.
57226
57227  12. No Surrender of Others' Freedom.
57228
57229     If conditions are imposed on you (whether by court order, agreement
57230     or otherwise) that contradict the conditions of this License, they
57231     do not excuse you from the conditions of this License.  If you
57232     cannot convey a covered work so as to satisfy simultaneously your
57233     obligations under this License and any other pertinent obligations,
57234     then as a consequence you may not convey it at all.  For example,
57235     if you agree to terms that obligate you to collect a royalty for
57236     further conveying from those to whom you convey the Program, the
57237     only way you could satisfy both those terms and this License would
57238     be to refrain entirely from conveying the Program.
57239
57240  13. Use with the GNU Affero General Public License.
57241
57242     Notwithstanding any other provision of this License, you have
57243     permission to link or combine any covered work with a work licensed
57244     under version 3 of the GNU Affero General Public License into a
57245     single combined work, and to convey the resulting work.  The terms
57246     of this License will continue to apply to the part which is the
57247     covered work, but the special requirements of the GNU Affero
57248     General Public License, section 13, concerning interaction through
57249     a network will apply to the combination as such.
57250
57251  14. Revised Versions of this License.
57252
57253     The Free Software Foundation may publish revised and/or new
57254     versions of the GNU General Public License from time to time.  Such
57255     new versions will be similar in spirit to the present version, but
57256     may differ in detail to address new problems or concerns.
57257
57258     Each version is given a distinguishing version number.  If the
57259     Program specifies that a certain numbered version of the GNU
57260     General Public License "or any later version" applies to it, you
57261     have the option of following the terms and conditions either of
57262     that numbered version or of any later version published by the Free
57263     Software Foundation.  If the Program does not specify a version
57264     number of the GNU General Public License, you may choose any
57265     version ever published by the Free Software Foundation.
57266
57267     If the Program specifies that a proxy can decide which future
57268     versions of the GNU General Public License can be used, that
57269     proxy's public statement of acceptance of a version permanently
57270     authorizes you to choose that version for the Program.
57271
57272     Later license versions may give you additional or different
57273     permissions.  However, no additional obligations are imposed on any
57274     author or copyright holder as a result of your choosing to follow a
57275     later version.
57276
57277  15. Disclaimer of Warranty.
57278
57279     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
57280     APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
57281     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
57282     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
57283     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
57284     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
57285     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
57286     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
57287     NECESSARY SERVICING, REPAIR OR CORRECTION.
57288
57289  16. Limitation of Liability.
57290
57291     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
57292     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
57293     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
57294     DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
57295     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
57296     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
57297     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
57298     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
57299     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
57300     THE POSSIBILITY OF SUCH DAMAGES.
57301
57302  17. Interpretation of Sections 15 and 16.
57303
57304     If the disclaimer of warranty and limitation of liability provided
57305     above cannot be given local legal effect according to their terms,
57306     reviewing courts shall apply local law that most closely
57307     approximates an absolute waiver of all civil liability in
57308     connection with the Program, unless a warranty or assumption of
57309     liability accompanies a copy of the Program in return for a fee.
57310
57311END OF TERMS AND CONDITIONS
57312===========================
57313
57314How to Apply These Terms to Your New Programs
57315=============================================
57316
57317If you develop a new program, and you want it to be of the greatest
57318possible use to the public, the best way to achieve this is to make it
57319free software which everyone can redistribute and change under these
57320terms.
57321
57322 To do so, attach the following notices to the program.  It is safest to
57323attach them to the start of each source file to most effectively state
57324the exclusion of warranty; and each file should have at least the
57325"copyright" line and a pointer to where the full notice is found.
57326
57327     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
57328     Copyright (C) YEAR NAME OF AUTHOR
57329
57330     This program is free software: you can redistribute it and/or modify
57331     it under the terms of the GNU General Public License as published by
57332     the Free Software Foundation, either version 3 of the License, or (at
57333     your option) any later version.
57334
57335     This program is distributed in the hope that it will be useful, but
57336     WITHOUT ANY WARRANTY; without even the implied warranty of
57337     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
57338     General Public License for more details.
57339
57340     You should have received a copy of the GNU General Public License
57341     along with this program.  If not, see <http://www.gnu.org/licenses/>.
57342
57343 Also add information on how to contact you by electronic and paper
57344mail.
57345
57346 If the program does terminal interaction, make it output a short notice
57347like this when it starts in an interactive mode:
57348
57349     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
57350     This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
57351     This is free software, and you are welcome to redistribute it
57352     under certain conditions; type 'show c' for details.
57353
57354 The hypothetical commands 'show w' and 'show c' should show the
57355appropriate parts of the General Public License.  Of course, your
57356program's commands might be different; for a GUI interface, you would
57357use an "about box".
57358
57359 You should also get your employer (if you work as a programmer) or
57360school, if any, to sign a "copyright disclaimer" for the program, if
57361necessary.  For more information on this, and how to apply and follow
57362the GNU GPL, see <http://www.gnu.org/licenses/>.
57363
57364 The GNU General Public License does not permit incorporating your
57365program into proprietary programs.  If your program is a subroutine
57366library, you may consider it more useful to permit linking proprietary
57367applications with the library.  If this is what you want to do, use the
57368GNU Lesser General Public License instead of this License.  But first,
57369please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
57370
57371
57372File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
57373
57374GNU Free Documentation License
57375******************************
57376
57377                     Version 1.3, 3 November 2008
57378
57379     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
57380     <http://fsf.org/>
57381
57382     Everyone is permitted to copy and distribute verbatim copies
57383     of this license document, but changing it is not allowed.
57384
57385  0. PREAMBLE
57386
57387     The purpose of this License is to make a manual, textbook, or other
57388     functional and useful document "free" in the sense of freedom: to
57389     assure everyone the effective freedom to copy and redistribute it,
57390     with or without modifying it, either commercially or
57391     noncommercially.  Secondarily, this License preserves for the
57392     author and publisher a way to get credit for their work, while not
57393     being considered responsible for modifications made by others.
57394
57395     This License is a kind of "copyleft", which means that derivative
57396     works of the document must themselves be free in the same sense.
57397     It complements the GNU General Public License, which is a copyleft
57398     license designed for free software.
57399
57400     We have designed this License in order to use it for manuals for
57401     free software, because free software needs free documentation: a
57402     free program should come with manuals providing the same freedoms
57403     that the software does.  But this License is not limited to
57404     software manuals; it can be used for any textual work, regardless
57405     of subject matter or whether it is published as a printed book.  We
57406     recommend this License principally for works whose purpose is
57407     instruction or reference.
57408
57409  1. APPLICABILITY AND DEFINITIONS
57410
57411     This License applies to any manual or other work, in any medium,
57412     that contains a notice placed by the copyright holder saying it can
57413     be distributed under the terms of this License.  Such a notice
57414     grants a world-wide, royalty-free license, unlimited in duration,
57415     to use that work under the conditions stated herein.  The
57416     "Document", below, refers to any such manual or work.  Any member
57417     of the public is a licensee, and is addressed as "you".  You accept
57418     the license if you copy, modify or distribute the work in a way
57419     requiring permission under copyright law.
57420
57421     A "Modified Version" of the Document means any work containing the
57422     Document or a portion of it, either copied verbatim, or with
57423     modifications and/or translated into another language.
57424
57425     A "Secondary Section" is a named appendix or a front-matter section
57426     of the Document that deals exclusively with the relationship of the
57427     publishers or authors of the Document to the Document's overall
57428     subject (or to related matters) and contains nothing that could
57429     fall directly within that overall subject.  (Thus, if the Document
57430     is in part a textbook of mathematics, a Secondary Section may not
57431     explain any mathematics.)  The relationship could be a matter of
57432     historical connection with the subject or with related matters, or
57433     of legal, commercial, philosophical, ethical or political position
57434     regarding them.
57435
57436     The "Invariant Sections" are certain Secondary Sections whose
57437     titles are designated, as being those of Invariant Sections, in the
57438     notice that says that the Document is released under this License.
57439     If a section does not fit the above definition of Secondary then it
57440     is not allowed to be designated as Invariant.  The Document may
57441     contain zero Invariant Sections.  If the Document does not identify
57442     any Invariant Sections then there are none.
57443
57444     The "Cover Texts" are certain short passages of text that are
57445     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
57446     that says that the Document is released under this License.  A
57447     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
57448     be at most 25 words.
57449
57450     A "Transparent" copy of the Document means a machine-readable copy,
57451     represented in a format whose specification is available to the
57452     general public, that is suitable for revising the document
57453     straightforwardly with generic text editors or (for images composed
57454     of pixels) generic paint programs or (for drawings) some widely
57455     available drawing editor, and that is suitable for input to text
57456     formatters or for automatic translation to a variety of formats
57457     suitable for input to text formatters.  A copy made in an otherwise
57458     Transparent file format whose markup, or absence of markup, has
57459     been arranged to thwart or discourage subsequent modification by
57460     readers is not Transparent.  An image format is not Transparent if
57461     used for any substantial amount of text.  A copy that is not
57462     "Transparent" is called "Opaque".
57463
57464     Examples of suitable formats for Transparent copies include plain
57465     ASCII without markup, Texinfo input format, LaTeX input format,
57466     SGML or XML using a publicly available DTD, and standard-conforming
57467     simple HTML, PostScript or PDF designed for human modification.
57468     Examples of transparent image formats include PNG, XCF and JPG.
57469     Opaque formats include proprietary formats that can be read and
57470     edited only by proprietary word processors, SGML or XML for which
57471     the DTD and/or processing tools are not generally available, and
57472     the machine-generated HTML, PostScript or PDF produced by some word
57473     processors for output purposes only.
57474
57475     The "Title Page" means, for a printed book, the title page itself,
57476     plus such following pages as are needed to hold, legibly, the
57477     material this License requires to appear in the title page.  For
57478     works in formats which do not have any title page as such, "Title
57479     Page" means the text near the most prominent appearance of the
57480     work's title, preceding the beginning of the body of the text.
57481
57482     The "publisher" means any person or entity that distributes copies
57483     of the Document to the public.
57484
57485     A section "Entitled XYZ" means a named subunit of the Document
57486     whose title either is precisely XYZ or contains XYZ in parentheses
57487     following text that translates XYZ in another language.  (Here XYZ
57488     stands for a specific section name mentioned below, such as
57489     "Acknowledgements", "Dedications", "Endorsements", or "History".)
57490     To "Preserve the Title" of such a section when you modify the
57491     Document means that it remains a section "Entitled XYZ" according
57492     to this definition.
57493
57494     The Document may include Warranty Disclaimers next to the notice
57495     which states that this License applies to the Document.  These
57496     Warranty Disclaimers are considered to be included by reference in
57497     this License, but only as regards disclaiming warranties: any other
57498     implication that these Warranty Disclaimers may have is void and
57499     has no effect on the meaning of this License.
57500
57501  2. VERBATIM COPYING
57502
57503     You may copy and distribute the Document in any medium, either
57504     commercially or noncommercially, provided that this License, the
57505     copyright notices, and the license notice saying this License
57506     applies to the Document are reproduced in all copies, and that you
57507     add no other conditions whatsoever to those of this License.  You
57508     may not use technical measures to obstruct or control the reading
57509     or further copying of the copies you make or distribute.  However,
57510     you may accept compensation in exchange for copies.  If you
57511     distribute a large enough number of copies you must also follow the
57512     conditions in section 3.
57513
57514     You may also lend copies, under the same conditions stated above,
57515     and you may publicly display copies.
57516
57517  3. COPYING IN QUANTITY
57518
57519     If you publish printed copies (or copies in media that commonly
57520     have printed covers) of the Document, numbering more than 100, and
57521     the Document's license notice requires Cover Texts, you must
57522     enclose the copies in covers that carry, clearly and legibly, all
57523     these Cover Texts: Front-Cover Texts on the front cover, and
57524     Back-Cover Texts on the back cover.  Both covers must also clearly
57525     and legibly identify you as the publisher of these copies.  The
57526     front cover must present the full title with all words of the title
57527     equally prominent and visible.  You may add other material on the
57528     covers in addition.  Copying with changes limited to the covers, as
57529     long as they preserve the title of the Document and satisfy these
57530     conditions, can be treated as verbatim copying in other respects.
57531
57532     If the required texts for either cover are too voluminous to fit
57533     legibly, you should put the first ones listed (as many as fit
57534     reasonably) on the actual cover, and continue the rest onto
57535     adjacent pages.
57536
57537     If you publish or distribute Opaque copies of the Document
57538     numbering more than 100, you must either include a machine-readable
57539     Transparent copy along with each Opaque copy, or state in or with
57540     each Opaque copy a computer-network location from which the general
57541     network-using public has access to download using public-standard
57542     network protocols a complete Transparent copy of the Document, free
57543     of added material.  If you use the latter option, you must take
57544     reasonably prudent steps, when you begin distribution of Opaque
57545     copies in quantity, to ensure that this Transparent copy will
57546     remain thus accessible at the stated location until at least one
57547     year after the last time you distribute an Opaque copy (directly or
57548     through your agents or retailers) of that edition to the public.
57549
57550     It is requested, but not required, that you contact the authors of
57551     the Document well before redistributing any large number of copies,
57552     to give them a chance to provide you with an updated version of the
57553     Document.
57554
57555  4. MODIFICATIONS
57556
57557     You may copy and distribute a Modified Version of the Document
57558     under the conditions of sections 2 and 3 above, provided that you
57559     release the Modified Version under precisely this License, with the
57560     Modified Version filling the role of the Document, thus licensing
57561     distribution and modification of the Modified Version to whoever
57562     possesses a copy of it.  In addition, you must do these things in
57563     the Modified Version:
57564
57565       A. Use in the Title Page (and on the covers, if any) a title
57566          distinct from that of the Document, and from those of previous
57567          versions (which should, if there were any, be listed in the
57568          History section of the Document).  You may use the same title
57569          as a previous version if the original publisher of that
57570          version gives permission.
57571
57572       B. List on the Title Page, as authors, one or more persons or
57573          entities responsible for authorship of the modifications in
57574          the Modified Version, together with at least five of the
57575          principal authors of the Document (all of its principal
57576          authors, if it has fewer than five), unless they release you
57577          from this requirement.
57578
57579       C. State on the Title page the name of the publisher of the
57580          Modified Version, as the publisher.
57581
57582       D. Preserve all the copyright notices of the Document.
57583
57584       E. Add an appropriate copyright notice for your modifications
57585          adjacent to the other copyright notices.
57586
57587       F. Include, immediately after the copyright notices, a license
57588          notice giving the public permission to use the Modified
57589          Version under the terms of this License, in the form shown in
57590          the Addendum below.
57591
57592       G. Preserve in that license notice the full lists of Invariant
57593          Sections and required Cover Texts given in the Document's
57594          license notice.
57595
57596       H. Include an unaltered copy of this License.
57597
57598       I. Preserve the section Entitled "History", Preserve its Title,
57599          and add to it an item stating at least the title, year, new
57600          authors, and publisher of the Modified Version as given on the
57601          Title Page.  If there is no section Entitled "History" in the
57602          Document, create one stating the title, year, authors, and
57603          publisher of the Document as given on its Title Page, then add
57604          an item describing the Modified Version as stated in the
57605          previous sentence.
57606
57607       J. Preserve the network location, if any, given in the Document
57608          for public access to a Transparent copy of the Document, and
57609          likewise the network locations given in the Document for
57610          previous versions it was based on.  These may be placed in the
57611          "History" section.  You may omit a network location for a work
57612          that was published at least four years before the Document
57613          itself, or if the original publisher of the version it refers
57614          to gives permission.
57615
57616       K. For any section Entitled "Acknowledgements" or "Dedications",
57617          Preserve the Title of the section, and preserve in the section
57618          all the substance and tone of each of the contributor
57619          acknowledgements and/or dedications given therein.
57620
57621       L. Preserve all the Invariant Sections of the Document, unaltered
57622          in their text and in their titles.  Section numbers or the
57623          equivalent are not considered part of the section titles.
57624
57625       M. Delete any section Entitled "Endorsements".  Such a section
57626          may not be included in the Modified Version.
57627
57628       N. Do not retitle any existing section to be Entitled
57629          "Endorsements" or to conflict in title with any Invariant
57630          Section.
57631
57632       O. Preserve any Warranty Disclaimers.
57633
57634     If the Modified Version includes new front-matter sections or
57635     appendices that qualify as Secondary Sections and contain no
57636     material copied from the Document, you may at your option designate
57637     some or all of these sections as invariant.  To do this, add their
57638     titles to the list of Invariant Sections in the Modified Version's
57639     license notice.  These titles must be distinct from any other
57640     section titles.
57641
57642     You may add a section Entitled "Endorsements", provided it contains
57643     nothing but endorsements of your Modified Version by various
57644     parties--for example, statements of peer review or that the text
57645     has been approved by an organization as the authoritative
57646     definition of a standard.
57647
57648     You may add a passage of up to five words as a Front-Cover Text,
57649     and a passage of up to 25 words as a Back-Cover Text, to the end of
57650     the list of Cover Texts in the Modified Version.  Only one passage
57651     of Front-Cover Text and one of Back-Cover Text may be added by (or
57652     through arrangements made by) any one entity.  If the Document
57653     already includes a cover text for the same cover, previously added
57654     by you or by arrangement made by the same entity you are acting on
57655     behalf of, you may not add another; but you may replace the old
57656     one, on explicit permission from the previous publisher that added
57657     the old one.
57658
57659     The author(s) and publisher(s) of the Document do not by this
57660     License give permission to use their names for publicity for or to
57661     assert or imply endorsement of any Modified Version.
57662
57663  5. COMBINING DOCUMENTS
57664
57665     You may combine the Document with other documents released under
57666     this License, under the terms defined in section 4 above for
57667     modified versions, provided that you include in the combination all
57668     of the Invariant Sections of all of the original documents,
57669     unmodified, and list them all as Invariant Sections of your
57670     combined work in its license notice, and that you preserve all
57671     their Warranty Disclaimers.
57672
57673     The combined work need only contain one copy of this License, and
57674     multiple identical Invariant Sections may be replaced with a single
57675     copy.  If there are multiple Invariant Sections with the same name
57676     but different contents, make the title of each such section unique
57677     by adding at the end of it, in parentheses, the name of the
57678     original author or publisher of that section if known, or else a
57679     unique number.  Make the same adjustment to the section titles in
57680     the list of Invariant Sections in the license notice of the
57681     combined work.
57682
57683     In the combination, you must combine any sections Entitled
57684     "History" in the various original documents, forming one section
57685     Entitled "History"; likewise combine any sections Entitled
57686     "Acknowledgements", and any sections Entitled "Dedications".  You
57687     must delete all sections Entitled "Endorsements."
57688
57689  6. COLLECTIONS OF DOCUMENTS
57690
57691     You may make a collection consisting of the Document and other
57692     documents released under this License, and replace the individual
57693     copies of this License in the various documents with a single copy
57694     that is included in the collection, provided that you follow the
57695     rules of this License for verbatim copying of each of the documents
57696     in all other respects.
57697
57698     You may extract a single document from such a collection, and
57699     distribute it individually under this License, provided you insert
57700     a copy of this License into the extracted document, and follow this
57701     License in all other respects regarding verbatim copying of that
57702     document.
57703
57704  7. AGGREGATION WITH INDEPENDENT WORKS
57705
57706     A compilation of the Document or its derivatives with other
57707     separate and independent documents or works, in or on a volume of a
57708     storage or distribution medium, is called an "aggregate" if the
57709     copyright resulting from the compilation is not used to limit the
57710     legal rights of the compilation's users beyond what the individual
57711     works permit.  When the Document is included in an aggregate, this
57712     License does not apply to the other works in the aggregate which
57713     are not themselves derivative works of the Document.
57714
57715     If the Cover Text requirement of section 3 is applicable to these
57716     copies of the Document, then if the Document is less than one half
57717     of the entire aggregate, the Document's Cover Texts may be placed
57718     on covers that bracket the Document within the aggregate, or the
57719     electronic equivalent of covers if the Document is in electronic
57720     form.  Otherwise they must appear on printed covers that bracket
57721     the whole aggregate.
57722
57723  8. TRANSLATION
57724
57725     Translation is considered a kind of modification, so you may
57726     distribute translations of the Document under the terms of section
57727     4.  Replacing Invariant Sections with translations requires special
57728     permission from their copyright holders, but you may include
57729     translations of some or all Invariant Sections in addition to the
57730     original versions of these Invariant Sections.  You may include a
57731     translation of this License, and all the license notices in the
57732     Document, and any Warranty Disclaimers, provided that you also
57733     include the original English version of this License and the
57734     original versions of those notices and disclaimers.  In case of a
57735     disagreement between the translation and the original version of
57736     this License or a notice or disclaimer, the original version will
57737     prevail.
57738
57739     If a section in the Document is Entitled "Acknowledgements",
57740     "Dedications", or "History", the requirement (section 4) to
57741     Preserve its Title (section 1) will typically require changing the
57742     actual title.
57743
57744  9. TERMINATION
57745
57746     You may not copy, modify, sublicense, or distribute the Document
57747     except as expressly provided under this License.  Any attempt
57748     otherwise to copy, modify, sublicense, or distribute it is void,
57749     and will automatically terminate your rights under this License.
57750
57751     However, if you cease all violation of this License, then your
57752     license from a particular copyright holder is reinstated (a)
57753     provisionally, unless and until the copyright holder explicitly and
57754     finally terminates your license, and (b) permanently, if the
57755     copyright holder fails to notify you of the violation by some
57756     reasonable means prior to 60 days after the cessation.
57757
57758     Moreover, your license from a particular copyright holder is
57759     reinstated permanently if the copyright holder notifies you of the
57760     violation by some reasonable means, this is the first time you have
57761     received notice of violation of this License (for any work) from
57762     that copyright holder, and you cure the violation prior to 30 days
57763     after your receipt of the notice.
57764
57765     Termination of your rights under this section does not terminate
57766     the licenses of parties who have received copies or rights from you
57767     under this License.  If your rights have been terminated and not
57768     permanently reinstated, receipt of a copy of some or all of the
57769     same material does not give you any rights to use it.
57770
57771  10. FUTURE REVISIONS OF THIS LICENSE
57772
57773     The Free Software Foundation may publish new, revised versions of
57774     the GNU Free Documentation License from time to time.  Such new
57775     versions will be similar in spirit to the present version, but may
57776     differ in detail to address new problems or concerns.  See
57777     <http://www.gnu.org/copyleft/>.
57778
57779     Each version of the License is given a distinguishing version
57780     number.  If the Document specifies that a particular numbered
57781     version of this License "or any later version" applies to it, you
57782     have the option of following the terms and conditions either of
57783     that specified version or of any later version that has been
57784     published (not as a draft) by the Free Software Foundation.  If the
57785     Document does not specify a version number of this License, you may
57786     choose any version ever published (not as a draft) by the Free
57787     Software Foundation.  If the Document specifies that a proxy can
57788     decide which future versions of this License can be used, that
57789     proxy's public statement of acceptance of a version permanently
57790     authorizes you to choose that version for the Document.
57791
57792  11. RELICENSING
57793
57794     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
57795     World Wide Web server that publishes copyrightable works and also
57796     provides prominent facilities for anybody to edit those works.  A
57797     public wiki that anybody can edit is an example of such a server.
57798     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
57799     site means any set of copyrightable works thus published on the MMC
57800     site.
57801
57802     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
57803     license published by Creative Commons Corporation, a not-for-profit
57804     corporation with a principal place of business in San Francisco,
57805     California, as well as future copyleft versions of that license
57806     published by that same organization.
57807
57808     "Incorporate" means to publish or republish a Document, in whole or
57809     in part, as part of another Document.
57810
57811     An MMC is "eligible for relicensing" if it is licensed under this
57812     License, and if all works that were first published under this
57813     License somewhere other than this MMC, and subsequently
57814     incorporated in whole or in part into the MMC, (1) had no cover
57815     texts or invariant sections, and (2) were thus incorporated prior
57816     to November 1, 2008.
57817
57818     The operator of an MMC Site may republish an MMC contained in the
57819     site under CC-BY-SA on the same site at any time before August 1,
57820     2009, provided the MMC is eligible for relicensing.
57821
57822ADDENDUM: How to use this License for your documents
57823====================================================
57824
57825To use this License in a document you have written, include a copy of
57826the License in the document and put the following copyright and license
57827notices just after the title page:
57828
57829       Copyright (C)  YEAR  YOUR NAME.
57830       Permission is granted to copy, distribute and/or modify this document
57831       under the terms of the GNU Free Documentation License, Version 1.3
57832       or any later version published by the Free Software Foundation;
57833       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
57834       Texts.  A copy of the license is included in the section entitled ``GNU
57835       Free Documentation License''.
57836
57837 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
57838replace the "with...Texts."  line with this:
57839
57840         with the Invariant Sections being LIST THEIR TITLES, with
57841         the Front-Cover Texts being LIST, and with the Back-Cover Texts
57842         being LIST.
57843
57844 If you have Invariant Sections without Cover Texts, or some other
57845combination of the three, merge those two alternatives to suit the
57846situation.
57847
57848 If your document contains nontrivial examples of program code, we
57849recommend releasing these examples in parallel under your choice of free
57850software license, such as the GNU General Public License, to permit
57851their use in free software.
57852
57853
57854File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
57855
57856Contributors to GCC
57857*******************
57858
57859The GCC project would like to thank its many contributors.  Without them
57860the project would not have been nearly as successful as it has been.
57861Any omissions in this list are accidental.  Feel free to contact
57862<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
57863some of your contributions are not listed.  Please keep this list in
57864alphabetical order.
57865
57866   * Analog Devices helped implement the support for complex data types
57867     and iterators.
57868
57869   * John David Anglin for threading-related fixes and improvements to
57870     libstdc++-v3, and the HP-UX port.
57871
57872   * James van Artsdalen wrote the code that makes efficient use of the
57873     Intel 80387 register stack.
57874
57875   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
57876     Series port.
57877
57878   * Alasdair Baird for various bug fixes.
57879
57880   * Giovanni Bajo for analyzing lots of complicated C++ problem
57881     reports.
57882
57883   * Peter Barada for his work to improve code generation for new
57884     ColdFire cores.
57885
57886   * Gerald Baumgartner added the signature extension to the C++ front
57887     end.
57888
57889   * Godmar Back for his Java improvements and encouragement.
57890
57891   * Scott Bambrough for help porting the Java compiler.
57892
57893   * Wolfgang Bangerth for processing tons of bug reports.
57894
57895   * Jon Beniston for his Microsoft Windows port of Java and port to
57896     Lattice Mico32.
57897
57898   * Daniel Berlin for better DWARF 2 support, faster/better
57899     optimizations, improved alias analysis, plus migrating GCC to
57900     Bugzilla.
57901
57902   * Geoff Berry for his Java object serialization work and various
57903     patches.
57904
57905   * David Binderman tests weekly snapshots of GCC trunk against Fedora
57906     Rawhide for several architectures.
57907
57908   * Laurynas Biveinis for memory management work and DJGPP port fixes.
57909
57910   * Uros Bizjak for the implementation of x87 math built-in functions
57911     and for various middle end and i386 back end improvements and bug
57912     fixes.
57913
57914   * Eric Blake for helping to make GCJ and libgcj conform to the
57915     specifications.
57916
57917   * Janne Blomqvist for contributions to GNU Fortran.
57918
57919   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
57920     other Java work.
57921
57922   * Segher Boessenkool for helping maintain the PowerPC port and the
57923     instruction combiner plus various contributions to the middle end.
57924
57925   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
57926     miscellaneous clean-ups.
57927
57928   * Steven Bosscher for integrating the GNU Fortran front end into GCC
57929     and for contributing to the tree-ssa branch.
57930
57931   * Eric Botcazou for fixing middle- and backend bugs left and right.
57932
57933   * Per Bothner for his direction via the steering committee and
57934     various improvements to the infrastructure for supporting new
57935     languages.  Chill front end implementation.  Initial
57936     implementations of cpplib, fix-header, config.guess, libio, and
57937     past C++ library (libg++) maintainer.  Dreaming up, designing and
57938     implementing much of GCJ.
57939
57940   * Devon Bowen helped port GCC to the Tahoe.
57941
57942   * Don Bowman for mips-vxworks contributions.
57943
57944   * James Bowman for the FT32 port.
57945
57946   * Dave Brolley for work on cpplib and Chill.
57947
57948   * Paul Brook for work on the ARM architecture and maintaining GNU
57949     Fortran.
57950
57951   * Robert Brown implemented the support for Encore 32000 systems.
57952
57953   * Christian Bruel for improvements to local store elimination.
57954
57955   * Herman A.J. ten Brugge for various fixes.
57956
57957   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
57958     FAQ.
57959
57960   * Joe Buck for his direction via the steering committee from its
57961     creation to 2013.
57962
57963   * Iain Buclaw for the D frontend.
57964
57965   * Craig Burley for leadership of the G77 Fortran effort.
57966
57967   * Tobias Burnus for contributions to GNU Fortran.
57968
57969   * Stephan Buys for contributing Doxygen notes for libstdc++.
57970
57971   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
57972     to the C++ strings, streambufs and formatted I/O, hard detective
57973     work on the frustrating localization issues, and keeping up with
57974     the problem reports.
57975
57976   * John Carr for his alias work, SPARC hacking, infrastructure
57977     improvements, previous contributions to the steering committee,
57978     loop optimizations, etc.
57979
57980   * Stephane Carrez for 68HC11 and 68HC12 ports.
57981
57982   * Steve Chamberlain for support for the Renesas SH and H8 processors
57983     and the PicoJava processor, and for GCJ config fixes.
57984
57985   * Glenn Chambers for help with the GCJ FAQ.
57986
57987   * John-Marc Chandonia for various libgcj patches.
57988
57989   * Denis Chertykov for contributing and maintaining the AVR port, the
57990     first GCC port for an 8-bit architecture.
57991
57992   * Kito Cheng for his work on the RISC-V port, including bringing up
57993     the test suite and maintenance.
57994
57995   * Scott Christley for his Objective-C contributions.
57996
57997   * Eric Christopher for his Java porting help and clean-ups.
57998
57999   * Branko Cibej for more warning contributions.
58000
58001   * The GNU Classpath project for all of their merged runtime code.
58002
58003   * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work,
58004     '--help', and other random hacking.
58005
58006   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
58007
58008   * R. Kelley Cook for making GCC buildable from a read-only directory
58009     as well as other miscellaneous build process and documentation
58010     clean-ups.
58011
58012   * Ralf Corsepius for SH testing and minor bug fixing.
58013
58014   * Franc,ois-Xavier Coudert for contributions to GNU Fortran.
58015
58016   * Stan Cox for care and feeding of the x86 port and lots of behind
58017     the scenes hacking.
58018
58019   * Alex Crain provided changes for the 3b1.
58020
58021   * Ian Dall for major improvements to the NS32k port.
58022
58023   * Paul Dale for his work to add uClinux platform support to the m68k
58024     backend.
58025
58026   * Palmer Dabbelt for his work maintaining the RISC-V port.
58027
58028   * Dario Dariol contributed the four varieties of sample programs that
58029     print a copy of their source.
58030
58031   * Russell Davidson for fstream and stringstream fixes in libstdc++.
58032
58033   * Bud Davis for work on the G77 and GNU Fortran compilers.
58034
58035   * Mo DeJong for GCJ and libgcj bug fixes.
58036
58037   * Jerry DeLisle for contributions to GNU Fortran.
58038
58039   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
58040     various bug fixes, and the M32C, MeP, MSP430, and RL78 ports.
58041
58042   * Arnaud Desitter for helping to debug GNU Fortran.
58043
58044   * Gabriel Dos Reis for contributions to G++, contributions and
58045     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
58046     including 'valarray<>', 'complex<>', maintaining the numerics
58047     library (including that pesky '<limits>' :-) and keeping up-to-date
58048     anything to do with numbers.
58049
58050   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
58051     ISO C99 support, CFG dumping support, etc., plus support of the C++
58052     runtime libraries including for all kinds of C interface issues,
58053     contributing and maintaining 'complex<>', sanity checking and
58054     disbursement, configuration architecture, libio maintenance, and
58055     early math work.
58056
58057   * Franc,ois Dumont for his work on libstdc++-v3, especially
58058     maintaining and improving 'debug-mode' and associative and
58059     unordered containers.
58060
58061   * Zdenek Dvorak for a new loop unroller and various fixes.
58062
58063   * Michael Eager for his work on the Xilinx MicroBlaze port.
58064
58065   * Richard Earnshaw for his ongoing work with the ARM.
58066
58067   * David Edelsohn for his direction via the steering committee,
58068     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
58069     loop changes, doing the entire AIX port of libstdc++ with his bare
58070     hands, and for ensuring GCC properly keeps working on AIX.
58071
58072   * Kevin Ediger for the floating point formatting of num_put::do_put
58073     in libstdc++.
58074
58075   * Phil Edwards for libstdc++ work including configuration hackery,
58076     documentation maintainer, chief breaker of the web pages, the
58077     occasional iostream bug fix, and work on shared library symbol
58078     versioning.
58079
58080   * Paul Eggert for random hacking all over GCC.
58081
58082   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
58083     configuration support for locales and fstream-related fixes.
58084
58085   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
58086     iostreams.
58087
58088   * Christian Ehrhardt for dealing with bug reports.
58089
58090   * Ben Elliston for his work to move the Objective-C runtime into its
58091     own subdirectory and for his work on autoconf.
58092
58093   * Revital Eres for work on the PowerPC 750CL port.
58094
58095   * Marc Espie for OpenBSD support.
58096
58097   * Doug Evans for much of the global optimization framework, arc,
58098     m32r, and SPARC work.
58099
58100   * Christopher Faylor for his work on the Cygwin port and for caring
58101     and feeding the gcc.gnu.org box and saving its users tons of spam.
58102
58103   * Fred Fish for BeOS support and Ada fixes.
58104
58105   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
58106
58107   * Peter Gerwinski for various bug fixes and the Pascal front end.
58108
58109   * Kaveh R. Ghazi for his direction via the steering committee,
58110     amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC
58111     on a plethora of platforms.  Kaveh extends his gratitude to the
58112     CAIP Center at Rutgers University for providing him with computing
58113     resources to work on Free Software from the late 1980s to 2010.
58114
58115   * John Gilmore for a donation to the FSF earmarked improving GNU
58116     Java.
58117
58118   * Judy Goldberg for c++ contributions.
58119
58120   * Torbjorn Granlund for various fixes and the c-torture testsuite,
58121     multiply- and divide-by-constant optimization, improved long long
58122     support, improved leaf function register allocation, and his
58123     direction via the steering committee.
58124
58125   * Jonny Grant for improvements to 'collect2's' '--help'
58126     documentation.
58127
58128   * Anthony Green for his '-Os' contributions, the moxie port, and Java
58129     front end work.
58130
58131   * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java
58132     code.
58133
58134   * Michael K. Gschwind contributed the port to the PDP-11.
58135
58136   * Richard Biener for his ongoing middle-end contributions and bug
58137     fixes and for release management.
58138
58139   * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools,
58140     the support for DWARF 1 symbolic debugging information, and much of
58141     the support for System V Release 4.  He has also worked heavily on
58142     the Intel 386 and 860 support.
58143
58144   * Sumanth Gundapaneni for contributing the CR16 port.
58145
58146   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
58147     GCSE.
58148
58149   * Bruno Haible for improvements in the runtime overhead for EH, new
58150     warnings and assorted bug fixes.
58151
58152   * Andrew Haley for his amazing Java compiler and library efforts.
58153
58154   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
58155     series 300.
58156
58157   * Michael Hayes for various thankless work he's done trying to get
58158     the c30/c40 ports functional.  Lots of loop and unroll improvements
58159     and fixes.
58160
58161   * Dara Hazeghi for wading through myriads of target-specific bug
58162     reports.
58163
58164   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
58165
58166   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
58167     work, loop opts, and generally fixing lots of old problems we've
58168     ignored for years, flow rewrite and lots of further stuff,
58169     including reviewing tons of patches.
58170
58171   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
58172     various fixes.
58173
58174   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
58175     contributed the support for the Sony NEWS machine.
58176
58177   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
58178     various fixes.
58179
58180   * Katherine Holcomb for work on GNU Fortran.
58181
58182   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
58183     of testing and bug fixing, particularly of GCC configury code.
58184
58185   * Steve Holmgren for MachTen patches.
58186
58187   * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
58188
58189   * Jan Hubicka for his x86 port improvements.
58190
58191   * Falk Hueffner for working on C and optimization bug reports.
58192
58193   * Bernardo Innocenti for his m68k work, including merging of ColdFire
58194     improvements and uClinux support.
58195
58196   * Christian Iseli for various bug fixes.
58197
58198   * Kamil Iskra for general m68k hacking.
58199
58200   * Lee Iverson for random fixes and MIPS testing.
58201
58202   * Balaji V. Iyer for Cilk+ development and merging.
58203
58204   * Andreas Jaeger for testing and benchmarking of GCC and various bug
58205     fixes.
58206
58207   * Martin Jambor for his work on inter-procedural optimizations, the
58208     switch conversion pass, and scalar replacement of aggregates.
58209
58210   * Jakub Jelinek for his SPARC work and sibling call optimizations as
58211     well as lots of bug fixes and test cases, and for improving the
58212     Java build system.
58213
58214   * Janis Johnson for ia64 testing and fixes, her quality improvement
58215     sidetracks, and web page maintenance.
58216
58217   * Kean Johnston for SCO OpenServer support and various fixes.
58218
58219   * Tim Josling for the sample language treelang based originally on
58220     Richard Kenner's "toy" language.
58221
58222   * Nicolai Josuttis for additional libstdc++ documentation.
58223
58224   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
58225     target.
58226
58227   * Steven G. Kargl for work on GNU Fortran.
58228
58229   * David Kashtan of SRI adapted GCC to VMS.
58230
58231   * Ryszard Kabatek for many, many libstdc++ bug fixes and
58232     optimizations of strings, especially member functions, and for
58233     auto_ptr fixes.
58234
58235   * Geoffrey Keating for his ongoing work to make the PPC work for
58236     GNU/Linux and his automatic regression tester.
58237
58238   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
58239     work in just about every part of libstdc++.
58240
58241   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
58242     MIL-STD-1750A.
58243
58244   * Richard Kenner of the New York University Ultracomputer Research
58245     Laboratory wrote the machine descriptions for the AMD 29000, the
58246     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
58247     support for instruction attributes.  He also made changes to better
58248     support RISC processors including changes to common subexpression
58249     elimination, strength reduction, function calling sequence
58250     handling, and condition code support, in addition to generalizing
58251     the code for frame pointer elimination and delay slot scheduling.
58252     Richard Kenner was also the head maintainer of GCC for several
58253     years.
58254
58255   * Mumit Khan for various contributions to the Cygwin and Mingw32
58256     ports and maintaining binary releases for Microsoft Windows hosts,
58257     and for massive libstdc++ porting work to Cygwin/Mingw32.
58258
58259   * Robin Kirkham for cpu32 support.
58260
58261   * Mark Klein for PA improvements.
58262
58263   * Thomas Koenig for various bug fixes.
58264
58265   * Bruce Korb for the new and improved fixincludes code.
58266
58267   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
58268     effort.
58269
58270   * Maxim Kuvyrkov for contributions to the instruction scheduler, the
58271     Android and m68k/Coldfire ports, and optimizations.
58272
58273   * Charles LaBrec contributed the support for the Integrated Solutions
58274     68020 system.
58275
58276   * Asher Langton and Mike Kumbera for contributing Cray pointer
58277     support to GNU Fortran, and for other GNU Fortran improvements.
58278
58279   * Jeff Law for his direction via the steering committee, coordinating
58280     the entire egcs project and GCC 2.95, rolling out snapshots and
58281     releases, handling merges from GCC2, reviewing tons of patches that
58282     might have fallen through the cracks else, and random but extensive
58283     hacking.
58284
58285   * Walter Lee for work on the TILE-Gx and TILEPro ports.
58286
58287   * Marc Lehmann for his direction via the steering committee and
58288     helping with analysis and improvements of x86 performance.
58289
58290   * Victor Leikehman for work on GNU Fortran.
58291
58292   * Ted Lemon wrote parts of the RTL reader and printer.
58293
58294   * Kriang Lerdsuwanakij for C++ improvements including template as
58295     template parameter support, and many C++ fixes.
58296
58297   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
58298     and random work on the Java front end.
58299
58300   * Alain Lichnewsky ported GCC to the MIPS CPU.
58301
58302   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
58303     and patches.
58304
58305   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
58306
58307   * Chen Liqin for various S+core related fixes/improvement, and for
58308     maintaining the S+core port.
58309
58310   * Martin Liska for his work on identical code folding, the
58311     sanitizers, HSA, general bug fixing and for running automated
58312     regression testing of GCC and reporting numerous bugs.
58313
58314   * Weiwen Liu for testing and various bug fixes.
58315
58316   * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other
58317     diagnostics fixes and improvements.
58318
58319   * Dave Love for his ongoing work with the Fortran front end and
58320     runtime libraries.
58321
58322   * Martin von Lo"wis for internal consistency checking infrastructure,
58323     various C++ improvements including namespace support, and tons of
58324     assistance with libstdc++/compiler merges.
58325
58326   * H.J. Lu for his previous contributions to the steering committee,
58327     many x86 bug reports, prototype patches, and keeping the GNU/Linux
58328     ports working.
58329
58330   * Greg McGary for random fixes and (someday) bounded pointers.
58331
58332   * Andrew MacLeod for his ongoing work in building a real EH system,
58333     various code generation improvements, work on the global optimizer,
58334     etc.
58335
58336   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
58337     hacking improvements to compile-time performance, overall knowledge
58338     and direction in the area of instruction scheduling, design and
58339     implementation of the automaton based instruction scheduler and
58340     design and implementation of the integrated and local register
58341     allocators.
58342
58343   * David Malcolm for his work on improving GCC diagnostics, JIT,
58344     self-tests and unit testing.
58345
58346   * Bob Manson for his behind the scenes work on dejagnu.
58347
58348   * John Marino for contributing the DragonFly BSD port.
58349
58350   * Philip Martin for lots of libstdc++ string and vector iterator
58351     fixes and improvements, and string clean up and testsuites.
58352
58353   * Michael Matz for his work on dominance tree discovery, the x86-64
58354     port, link-time optimization framework and general optimization
58355     improvements.
58356
58357   * All of the Mauve project contributors for Java test code.
58358
58359   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
58360
58361   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
58362
58363   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
58364     powerpc, haifa, ECOFF debug support, and other assorted hacking.
58365
58366   * Jason Merrill for his direction via the steering committee and
58367     leading the G++ effort.
58368
58369   * Martin Michlmayr for testing GCC on several architectures using the
58370     entire Debian archive.
58371
58372   * David Miller for his direction via the steering committee, lots of
58373     SPARC work, improvements in jump.c and interfacing with the Linux
58374     kernel developers.
58375
58376   * Gary Miller ported GCC to Charles River Data Systems machines.
58377
58378   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
58379     the entire libstdc++ testsuite namespace-compatible.
58380
58381   * Mark Mitchell for his direction via the steering committee,
58382     mountains of C++ work, load/store hoisting out of loops, alias
58383     analysis improvements, ISO C 'restrict' support, and serving as
58384     release manager from 2000 to 2011.
58385
58386   * Alan Modra for various GNU/Linux bits and testing.
58387
58388   * Toon Moene for his direction via the steering committee, Fortran
58389     maintenance, and his ongoing work to make us make Fortran run fast.
58390
58391   * Jason Molenda for major help in the care and feeding of all the
58392     services on the gcc.gnu.org (formerly egcs.cygnus.com)
58393     machine--mail, web services, ftp services, etc etc.  Doing all this
58394     work on scrap paper and the backs of envelopes would have been...
58395     difficult.
58396
58397   * Catherine Moore for fixing various ugly problems we have sent her
58398     way, including the haifa bug which was killing the Alpha & PowerPC
58399     Linux kernels.
58400
58401   * Mike Moreton for his various Java patches.
58402
58403   * David Mosberger-Tang for various Alpha improvements, and for the
58404     initial IA-64 port.
58405
58406   * Stephen Moshier contributed the floating point emulator that
58407     assists in cross-compilation and permits support for floating point
58408     numbers wider than 64 bits and for ISO C99 support.
58409
58410   * Bill Moyer for his behind the scenes work on various issues.
58411
58412   * Philippe De Muyter for his work on the m68k port.
58413
58414   * Joseph S. Myers for his work on the PDP-11 port, format checking
58415     and ISO C99 support, and continuous emphasis on (and contributions
58416     to) documentation.
58417
58418   * Nathan Myers for his work on libstdc++-v3: architecture and
58419     authorship through the first three snapshots, including
58420     implementation of locale infrastructure, string, shadow C headers,
58421     and the initial project documentation (DESIGN, CHECKLIST, and so
58422     forth).  Later, more work on MT-safe string and shadow headers.
58423
58424   * Felix Natter for documentation on porting libstdc++.
58425
58426   * Nathanael Nerode for cleaning up the configuration/build process.
58427
58428   * NeXT, Inc. donated the front end that supports the Objective-C
58429     language.
58430
58431   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the
58432     search engine setup, various documentation fixes and other small
58433     fixes.
58434
58435   * Geoff Noer for his work on getting cygwin native builds working.
58436
58437   * Vegard Nossum for running automated regression testing of GCC and
58438     reporting numerous bugs.
58439
58440   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
58441     tracking web pages, GIMPLE tuples, and assorted fixes.
58442
58443   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
58444     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related
58445     infrastructure improvements.
58446
58447   * Alexandre Oliva for various build infrastructure improvements,
58448     scripts and amazing testing work, including keeping libtool issues
58449     sane and happy.
58450
58451   * Stefan Olsson for work on mt_alloc.
58452
58453   * Melissa O'Neill for various NeXT fixes.
58454
58455   * Rainer Orth for random MIPS work, including improvements to GCC's
58456     o32 ABI support, improvements to dejagnu's MIPS support, Java
58457     configuration clean-ups and porting work, and maintaining the IRIX,
58458     Solaris 2, and Tru64 UNIX ports.
58459
58460   * Steven Pemberton for his contribution of 'enquire' which allowed
58461     GCC to determine various properties of the floating point unit and
58462     generate 'float.h' in older versions of GCC.
58463
58464   * Hartmut Penner for work on the s390 port.
58465
58466   * Paul Petersen wrote the machine description for the Alliant FX/8.
58467
58468   * Alexandre Petit-Bianco for implementing much of the Java compiler
58469     and continued Java maintainership.
58470
58471   * Matthias Pfaller for major improvements to the NS32k port.
58472
58473   * Gerald Pfeifer for his direction via the steering committee,
58474     pointing out lots of problems we need to solve, maintenance of the
58475     web pages, and taking care of documentation maintenance in general.
58476
58477   * Marek Polacek for his work on the C front end, the sanitizers and
58478     general bug fixing.
58479
58480   * Andrew Pinski for processing bug reports by the dozen.
58481
58482   * Ovidiu Predescu for his work on the Objective-C front end and
58483     runtime libraries.
58484
58485   * Jerry Quinn for major performance improvements in C++ formatted
58486     I/O.
58487
58488   * Ken Raeburn for various improvements to checker, MIPS ports and
58489     various cleanups in the compiler.
58490
58491   * Rolf W. Rasmussen for hacking on AWT.
58492
58493   * David Reese of Sun Microsystems contributed to the Solaris on
58494     PowerPC port.
58495
58496   * John Regehr for running automated regression testing of GCC and
58497     reporting numerous bugs.
58498
58499   * Volker Reichelt for running automated regression testing of GCC and
58500     reporting numerous bugs and for keeping up with the problem
58501     reports.
58502
58503   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
58504     hacking and developing and maintaining the Epiphany port.
58505
58506   * Loren J. Rittle for improvements to libstdc++-v3 including the
58507     FreeBSD port, threading fixes, thread-related configury changes,
58508     critical threading documentation, and solutions to really tricky
58509     I/O problems, as well as keeping GCC properly working on FreeBSD
58510     and continuous testing.
58511
58512   * Craig Rodrigues for processing tons of bug reports.
58513
58514   * Ola Ro"nnerup for work on mt_alloc.
58515
58516   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
58517
58518   * David Ronis inspired and encouraged Craig to rewrite the G77
58519     documentation in texinfo format by contributing a first pass at a
58520     translation of the old 'g77-0.5.16/f/DOC' file.
58521
58522   * Ken Rose for fixes to GCC's delay slot filling code.
58523
58524   * Ira Rosen for her contributions to the auto-vectorizer.
58525
58526   * Paul Rubin wrote most of the preprocessor.
58527
58528   * Pe'tur Runo'lfsson for major performance improvements in C++
58529     formatted I/O and large file support in C++ filebuf.
58530
58531   * Chip Salzenberg for libstdc++ patches and improvements to locales,
58532     traits, Makefiles, libio, libtool hackery, and "long long" support.
58533
58534   * Juha Sarlin for improvements to the H8 code generator.
58535
58536   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
58537     300.
58538
58539   * Roger Sayle for improvements to constant folding and GCC's RTL
58540     optimizers as well as for fixing numerous bugs.
58541
58542   * Bradley Schatz for his work on the GCJ FAQ.
58543
58544   * Peter Schauer wrote the code to allow debugging to work on the
58545     Alpha.
58546
58547   * William Schelter did most of the work on the Intel 80386 support.
58548
58549   * Tobias Schlu"ter for work on GNU Fortran.
58550
58551   * Bernd Schmidt for various code generation improvements and major
58552     work in the reload pass, serving as release manager for GCC 2.95.3,
58553     and work on the Blackfin and C6X ports.
58554
58555   * Peter Schmid for constant testing of libstdc++--especially
58556     application testing, going above and beyond what was requested for
58557     the release criteria--and libstdc++ header file tweaks.
58558
58559   * Jason Schroeder for jcf-dump patches.
58560
58561   * Andreas Schwab for his work on the m68k port.
58562
58563   * Lars Segerlund for work on GNU Fortran.
58564
58565   * Dodji Seketeli for numerous C++ bug fixes and debug info
58566     improvements.
58567
58568   * Tim Shen for major work on '<regex>'.
58569
58570   * Joel Sherrill for his direction via the steering committee, RTEMS
58571     contributions and RTEMS testing.
58572
58573   * Nathan Sidwell for many C++ fixes/improvements.
58574
58575   * Jeffrey Siegal for helping RMS with the original design of GCC,
58576     some code which handles the parse tree and RTL data structures,
58577     constant folding and help with the original VAX & m68k ports.
58578
58579   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
58580     from the LWG (thereby keeping GCC in line with updates from the
58581     ISO).
58582
58583   * Franz Sirl for his ongoing work with making the PPC port stable for
58584     GNU/Linux.
58585
58586   * Andrey Slepuhin for assorted AIX hacking.
58587
58588   * Trevor Smigiel for contributing the SPU port.
58589
58590   * Christopher Smith did the port for Convex machines.
58591
58592   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
58593     Retired from GCC maintainership August 2010, having mentored two
58594     new maintainers into the role.
58595
58596   * Randy Smith finished the Sun FPA support.
58597
58598   * Ed Smith-Rowland for his continuous work on libstdc++-v3, special
58599     functions, '<random>', and various improvements to C++11 features.
58600
58601   * Scott Snyder for queue, iterator, istream, and string fixes and
58602     libstdc++ testsuite entries.  Also for providing the patch to G77
58603     to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and
58604     'LOGICAL*1'.
58605
58606   * Zdenek Sojka for running automated regression testing of GCC and
58607     reporting numerous bugs.
58608
58609   * Arseny Solokha for running automated regression testing of GCC and
58610     reporting numerous bugs.
58611
58612   * Jayant Sonar for contributing the CR16 port.
58613
58614   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
58615
58616   * Richard Stallman, for writing the original GCC and launching the
58617     GNU project.
58618
58619   * Jan Stein of the Chalmers Computer Society provided support for
58620     Genix, as well as part of the 32000 machine description.
58621
58622   * Gerhard Steinmetz for running automated regression testing of GCC
58623     and reporting numerous bugs.
58624
58625   * Nigel Stephens for various mips16 related fixes/improvements.
58626
58627   * Jonathan Stone wrote the machine description for the Pyramid
58628     computer.
58629
58630   * Graham Stott for various infrastructure improvements.
58631
58632   * John Stracke for his Java HTTP protocol fixes.
58633
58634   * Mike Stump for his Elxsi port, G++ contributions over the years and
58635     more recently his vxworks contributions
58636
58637   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
58638
58639   * Zhendong Su for running automated regression testing of GCC and
58640     reporting numerous bugs.
58641
58642   * Chengnian Sun for running automated regression testing of GCC and
58643     reporting numerous bugs.
58644
58645   * Shigeya Suzuki for this fixes for the bsdi platforms.
58646
58647   * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
58648     support, general configury hacking, fixincludes, etc.
58649
58650   * Holger Teutsch provided the support for the Clipper CPU.
58651
58652   * Gary Thomas for his ongoing work to make the PPC work for
58653     GNU/Linux.
58654
58655   * Paul Thomas for contributions to GNU Fortran.
58656
58657   * Philipp Thomas for random bug fixes throughout the compiler
58658
58659   * Jason Thorpe for thread support in libstdc++ on NetBSD.
58660
58661   * Kresten Krab Thorup wrote the run time support for the Objective-C
58662     language and the fantastic Java bytecode interpreter.
58663
58664   * Michael Tiemann for random bug fixes, the first instruction
58665     scheduler, initial C++ support, function integration, NS32k, SPARC
58666     and M88k machine description work, delay slot scheduling.
58667
58668   * Andreas Tobler for his work porting libgcj to Darwin.
58669
58670   * Teemu Torma for thread safe exception handling support.
58671
58672   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
58673     definitions, and of the VAX machine description.
58674
58675   * Daniel Towner and Hariharan Sandanagobalane contributed and
58676     maintain the picoChip port.
58677
58678   * Tom Tromey for internationalization support and for his many Java
58679     contributions and libgcj maintainership.
58680
58681   * Lassi Tuura for improvements to config.guess to determine HP
58682     processor types.
58683
58684   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
58685
58686   * Andy Vaught for the design and initial implementation of the GNU
58687     Fortran front end.
58688
58689   * Brent Verner for work with the libstdc++ cshadow files and their
58690     associated configure steps.
58691
58692   * Todd Vierling for contributions for NetBSD ports.
58693
58694   * Andrew Waterman for contributing the RISC-V port, as well as
58695     maintaining it.
58696
58697   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
58698     guidance and maintaining libstdc++.
58699
58700   * Dean Wakerley for converting the install documentation from HTML to
58701     texinfo in time for GCC 3.0.
58702
58703   * Krister Walfridsson for random bug fixes.
58704
58705   * Feng Wang for contributions to GNU Fortran.
58706
58707   * Stephen M. Webb for time and effort on making libstdc++ shadow
58708     files work with the tricky Solaris 8+ headers, and for pushing the
58709     build-time header tree.  Also, for starting and driving the
58710     '<regex>' effort.
58711
58712   * John Wehle for various improvements for the x86 code generator,
58713     related infrastructure improvements to help x86 code generation,
58714     value range propagation and other work, WE32k port.
58715
58716   * Ulrich Weigand for work on the s390 port.
58717
58718   * Janus Weil for contributions to GNU Fortran.
58719
58720   * Zack Weinberg for major work on cpplib and various other bug fixes.
58721
58722   * Matt Welsh for help with Linux Threads support in GCJ.
58723
58724   * Urban Widmark for help fixing java.io.
58725
58726   * Mark Wielaard for new Java library code and his work integrating
58727     with Classpath.
58728
58729   * Dale Wiles helped port GCC to the Tahoe.
58730
58731   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
58732
58733   * Jim Wilson for his direction via the steering committee, tackling
58734     hard problems in various places that nobody else wanted to work on,
58735     strength reduction and other loop optimizations.
58736
58737   * Paul Woegerer and Tal Agmon for the CRX port.
58738
58739   * Carlo Wood for various fixes.
58740
58741   * Tom Wood for work on the m88k port.
58742
58743   * Chung-Ju Wu for his work on the Andes NDS32 port.
58744
58745   * Canqun Yang for work on GNU Fortran.
58746
58747   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
58748     description for the Tron architecture (specifically, the Gmicro).
58749
58750   * Kevin Zachmann helped port GCC to the Tahoe.
58751
58752   * Ayal Zaks for Swing Modulo Scheduling (SMS).
58753
58754   * Qirun Zhang for running automated regression testing of GCC and
58755     reporting numerous bugs.
58756
58757   * Xiaoqiang Zhang for work on GNU Fortran.
58758
58759   * Gilles Zunino for help porting Java to Irix.
58760
58761 The following people are recognized for their contributions to GNAT,
58762the Ada front end of GCC:
58763   * Bernard Banner
58764
58765   * Romain Berrendonner
58766
58767   * Geert Bosch
58768
58769   * Emmanuel Briot
58770
58771   * Joel Brobecker
58772
58773   * Ben Brosgol
58774
58775   * Vincent Celier
58776
58777   * Arnaud Charlet
58778
58779   * Chien Chieng
58780
58781   * Cyrille Comar
58782
58783   * Cyrille Crozes
58784
58785   * Robert Dewar
58786
58787   * Gary Dismukes
58788
58789   * Robert Duff
58790
58791   * Ed Falis
58792
58793   * Ramon Fernandez
58794
58795   * Sam Figueroa
58796
58797   * Vasiliy Fofanov
58798
58799   * Michael Friess
58800
58801   * Franco Gasperoni
58802
58803   * Ted Giering
58804
58805   * Matthew Gingell
58806
58807   * Laurent Guerby
58808
58809   * Jerome Guitton
58810
58811   * Olivier Hainque
58812
58813   * Jerome Hugues
58814
58815   * Hristian Kirtchev
58816
58817   * Jerome Lambourg
58818
58819   * Bruno Leclerc
58820
58821   * Albert Lee
58822
58823   * Sean McNeil
58824
58825   * Javier Miranda
58826
58827   * Laurent Nana
58828
58829   * Pascal Obry
58830
58831   * Dong-Ik Oh
58832
58833   * Laurent Pautet
58834
58835   * Brett Porter
58836
58837   * Thomas Quinot
58838
58839   * Nicolas Roche
58840
58841   * Pat Rogers
58842
58843   * Jose Ruiz
58844
58845   * Douglas Rupp
58846
58847   * Sergey Rybin
58848
58849   * Gail Schenker
58850
58851   * Ed Schonberg
58852
58853   * Nicolas Setton
58854
58855   * Samuel Tardieu
58856
58857 The following people are recognized for their contributions of new
58858features, bug reports, testing and integration of classpath/libgcj for
58859GCC version 4.1:
58860   * Lillian Angel for 'JTree' implementation and lots Free Swing
58861     additions and bug fixes.
58862
58863   * Wolfgang Baer for 'GapContent' bug fixes.
58864
58865   * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse
58866     event fixes, lots of Free Swing work including 'JTable' editing.
58867
58868   * Stuart Ballard for RMI constant fixes.
58869
58870   * Goffredo Baroncelli for 'HTTPURLConnection' fixes.
58871
58872   * Gary Benson for 'MessageFormat' fixes.
58873
58874   * Daniel Bonniot for 'Serialization' fixes.
58875
58876   * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX'
58877     and 'DOM xml:id' support.
58878
58879   * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes.
58880
58881   * Archie Cobbs for build fixes, VM interface updates,
58882     'URLClassLoader' updates.
58883
58884   * Kelley Cook for build fixes.
58885
58886   * Martin Cordova for Suggestions for better 'SocketTimeoutException'.
58887
58888   * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and
58889     improvements.
58890
58891   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
58892     2D support.  Lots of imageio framework additions, lots of AWT and
58893     Free Swing bug fixes.
58894
58895   * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization
58896     fixes, better 'Proxy' support, bug fixes and IKVM integration.
58897
58898   * Santiago Gala for 'AccessControlContext' fixes.
58899
58900   * Nicolas Geoffray for 'VMClassLoader' and 'AccessController'
58901     improvements.
58902
58903   * David Gilbert for 'basic' and 'metal' icon and plaf support and
58904     lots of documenting, Lots of Free Swing and metal theme additions.
58905     'MetalIconFactory' implementation.
58906
58907   * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers.
58908
58909   * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj
58910     build speedups.
58911
58912   * Kim Ho for 'JFileChooser' implementation.
58913
58914   * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates,
58915     'Serialization' fixes, 'Properties' XML support and generic branch
58916     work, VMIntegration guide update.
58917
58918   * Bastiaan Huisman for 'TimeZone' bug fixing.
58919
58920   * Andreas Jaeger for mprec updates.
58921
58922   * Paul Jenner for better '-Werror' support.
58923
58924   * Ito Kazumitsu for 'NetworkInterface' implementation and updates.
58925
58926   * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus
58927     bug fixes all over.  Lots of Free Swing work including styled text.
58928
58929   * Simon Kitching for 'String' cleanups and optimization suggestions.
58930
58931   * Michael Koch for configuration fixes, 'Locale' updates, bug and
58932     build fixes.
58933
58934   * Guilhem Lavaux for configuration, thread and channel fixes and
58935     Kaffe integration.  JCL native 'Pointer' updates.  Logger bug
58936     fixes.
58937
58938   * David Lichteblau for JCL support library global/local reference
58939     cleanups.
58940
58941   * Aaron Luchko for JDWP updates and documentation fixes.
58942
58943   * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex
58944     features.
58945
58946   * Sven de Marothy for BMP imageio support, CSS and 'TextLayout'
58947     fixes.  'GtkImage' rewrite, 2D, awt, free swing and date/time fixes
58948     and implementing the Qt4 peers.
58949
58950   * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock,
58951     'SystemLogger' and 'FileHandler' rotate implementations, NIO
58952     'FileChannel.map' support, security and policy updates.
58953
58954   * Bryce McKinlay for RMI work.
58955
58956   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
58957     testing and documenting.
58958
58959   * Kalle Olavi Niemitalo for build fixes.
58960
58961   * Rainer Orth for build fixes.
58962
58963   * Andrew Overholt for 'File' locking fixes.
58964
58965   * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates.
58966
58967   * Olga Rodimina for 'MenuSelectionManager' implementation.
58968
58969   * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes.
58970
58971   * Julian Scheid for documentation updates and gjdoc support.
58972
58973   * Christian Schlichtherle for zip fixes and cleanups.
58974
58975   * Robert Schuster for documentation updates and beans fixes,
58976     'TreeNode' enumerations and 'ActionCommand' and various fixes, XML
58977     and URL, AWT and Free Swing bug fixes.
58978
58979   * Keith Seitz for lots of JDWP work.
58980
58981   * Christian Thalinger for 64-bit cleanups, Configuration and VM
58982     interface fixes and 'CACAO' integration, 'fdlibm' updates.
58983
58984   * Gael Thomas for 'VMClassLoader' boot packages support suggestions.
58985
58986   * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4'
58987     support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates.
58988
58989   * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe
58990     integration.  'Qt4' build infrastructure, 'SHA1PRNG' and
58991     'GdkPixbugDecoder' updates.
58992
58993   * Tom Tromey for Eclipse integration, generics work, lots of bug
58994     fixes and gcj integration including coordinating The Big Merge.
58995
58996   * Mark Wielaard for bug fixes, packaging and release management,
58997     'Clipboard' implementation, system call interrupts and network
58998     timeouts and 'GdkPixpufDecoder' fixes.
58999
59000 In addition to the above, all of which also contributed time and energy
59001in testing GCC, we would like to thank the following for their
59002contributions to testing:
59003
59004   * Michael Abd-El-Malek
59005
59006   * Thomas Arend
59007
59008   * Bonzo Armstrong
59009
59010   * Steven Ashe
59011
59012   * Chris Baldwin
59013
59014   * David Billinghurst
59015
59016   * Jim Blandy
59017
59018   * Stephane Bortzmeyer
59019
59020   * Horst von Brand
59021
59022   * Frank Braun
59023
59024   * Rodney Brown
59025
59026   * Sidney Cadot
59027
59028   * Bradford Castalia
59029
59030   * Robert Clark
59031
59032   * Jonathan Corbet
59033
59034   * Ralph Doncaster
59035
59036   * Richard Emberson
59037
59038   * Levente Farkas
59039
59040   * Graham Fawcett
59041
59042   * Mark Fernyhough
59043
59044   * Robert A. French
59045
59046   * Jo"rgen Freyh
59047
59048   * Mark K. Gardner
59049
59050   * Charles-Antoine Gauthier
59051
59052   * Yung Shing Gene
59053
59054   * David Gilbert
59055
59056   * Simon Gornall
59057
59058   * Fred Gray
59059
59060   * John Griffin
59061
59062   * Patrik Hagglund
59063
59064   * Phil Hargett
59065
59066   * Amancio Hasty
59067
59068   * Takafumi Hayashi
59069
59070   * Bryan W. Headley
59071
59072   * Kevin B. Hendricks
59073
59074   * Joep Jansen
59075
59076   * Christian Joensson
59077
59078   * Michel Kern
59079
59080   * David Kidd
59081
59082   * Tobias Kuipers
59083
59084   * Anand Krishnaswamy
59085
59086   * A. O. V. Le Blanc
59087
59088   * llewelly
59089
59090   * Damon Love
59091
59092   * Brad Lucier
59093
59094   * Matthias Klose
59095
59096   * Martin Knoblauch
59097
59098   * Rick Lutowski
59099
59100   * Jesse Macnish
59101
59102   * Stefan Morrell
59103
59104   * Anon A. Mous
59105
59106   * Matthias Mueller
59107
59108   * Pekka Nikander
59109
59110   * Rick Niles
59111
59112   * Jon Olson
59113
59114   * Magnus Persson
59115
59116   * Chris Pollard
59117
59118   * Richard Polton
59119
59120   * Derk Reefman
59121
59122   * David Rees
59123
59124   * Paul Reilly
59125
59126   * Tom Reilly
59127
59128   * Torsten Rueger
59129
59130   * Danny Sadinoff
59131
59132   * Marc Schifer
59133
59134   * Erik Schnetter
59135
59136   * Wayne K. Schroll
59137
59138   * David Schuler
59139
59140   * Vin Shelton
59141
59142   * Tim Souder
59143
59144   * Adam Sulmicki
59145
59146   * Bill Thorson
59147
59148   * George Talbot
59149
59150   * Pedro A. M. Vazquez
59151
59152   * Gregory Warnes
59153
59154   * Ian Watson
59155
59156   * David E. Young
59157
59158   * And many others
59159
59160 And finally we'd like to thank everyone who uses the compiler, provides
59161feedback and generally reminds us why we're doing this work in the first
59162place.
59163
59164
59165File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
59166
59167Option Index
59168************
59169
59170GCC's command line options are indexed here without any initial '-' or
59171'--'.  Where an option has both positive and negative forms (such as
59172'-fOPTION' and '-fno-OPTION'), relevant entries in the manual are
59173indexed under the most appropriate form; it may sometimes be useful to
59174look up both forms.
59175
59176�[index�]
59177* Menu:
59178
59179* ###:                                   Overall Options.    (line  214)
59180* -Wattribute-alias:                     Warning Options.    (line 1610)
59181* -Wno-attribute-alias:                  Warning Options.    (line 1610)
59182* 80387:                                 x86 Options.        (line  511)
59183* A:                                     Preprocessor Options.
59184                                                             (line  328)
59185* allowable_client:                      Darwin Options.     (line  196)
59186* all_load:                              Darwin Options.     (line  110)
59187* ansi:                                  Standards.          (line   13)
59188* ansi <1>:                              C Dialect Options.  (line   11)
59189* ansi <2>:                              Other Builtins.     (line   31)
59190* ansi <3>:                              Non-bugs.           (line  107)
59191* arch_errors_fatal:                     Darwin Options.     (line  114)
59192* aux-info:                              C Dialect Options.  (line  227)
59193* B:                                     Directory Options.  (line  122)
59194* Bdynamic:                              VxWorks Options.    (line   22)
59195* bind_at_load:                          Darwin Options.     (line  118)
59196* Bstatic:                               VxWorks Options.    (line   22)
59197* bundle:                                Darwin Options.     (line  123)
59198* bundle_loader:                         Darwin Options.     (line  127)
59199* c:                                     Overall Options.    (line  169)
59200* C:                                     Preprocessor Options.
59201                                                             (line  337)
59202* c <1>:                                 Link Options.       (line   20)
59203* CC:                                    Preprocessor Options.
59204                                                             (line  349)
59205* client_name:                           Darwin Options.     (line  196)
59206* compatibility_version:                 Darwin Options.     (line  196)
59207* coverage:                              Instrumentation Options.
59208                                                             (line   50)
59209* current_version:                       Darwin Options.     (line  196)
59210* D:                                     Preprocessor Options.
59211                                                             (line   19)
59212* d:                                     Preprocessor Options.
59213                                                             (line  403)
59214* d <1>:                                 Developer Options.  (line   35)
59215* da:                                    Developer Options.  (line  229)
59216* dA:                                    Developer Options.  (line  232)
59217* dD:                                    Preprocessor Options.
59218                                                             (line  427)
59219* dD <1>:                                Developer Options.  (line  236)
59220* dead_strip:                            Darwin Options.     (line  196)
59221* dependency-file:                       Darwin Options.     (line  196)
59222* dH:                                    Developer Options.  (line  240)
59223* dI:                                    Preprocessor Options.
59224                                                             (line  437)
59225* dM:                                    Preprocessor Options.
59226                                                             (line  412)
59227* dN:                                    Preprocessor Options.
59228                                                             (line  433)
59229* dp:                                    Developer Options.  (line  243)
59230* dP:                                    Developer Options.  (line  248)
59231* dU:                                    Preprocessor Options.
59232                                                             (line  441)
59233* dumpfullversion:                       Developer Options.  (line 1009)
59234* dumpmachine:                           Developer Options.  (line  997)
59235* dumpspecs:                             Developer Options.  (line 1014)
59236* dumpversion:                           Developer Options.  (line 1001)
59237* dx:                                    Developer Options.  (line  252)
59238* dylib_file:                            Darwin Options.     (line  196)
59239* dylinker_install_name:                 Darwin Options.     (line  196)
59240* dynamic:                               Darwin Options.     (line  196)
59241* dynamiclib:                            Darwin Options.     (line  131)
59242* E:                                     Overall Options.    (line  190)
59243* E <1>:                                 Link Options.       (line   20)
59244* e:                                     Link Options.       (line  170)
59245* EB:                                    ARC Options.        (line  597)
59246* EB <1>:                                C-SKY Options.      (line   29)
59247* EB <2>:                                MIPS Options.       (line    7)
59248* EL:                                    ARC Options.        (line  606)
59249* EL <1>:                                C-SKY Options.      (line   31)
59250* EL <2>:                                MIPS Options.       (line   10)
59251* entry:                                 Link Options.       (line  170)
59252* exported_symbols_list:                 Darwin Options.     (line  196)
59253* F:                                     Darwin Options.     (line   31)
59254* fabi-compat-version:                   C++ Dialect Options.
59255                                                             (line   85)
59256* fabi-version:                          C++ Dialect Options.
59257                                                             (line   24)
59258* faccess-control:                       C++ Dialect Options.
59259                                                             (line  101)
59260* fada-spec-parent:                      Overall Options.    (line  396)
59261* faggressive-loop-optimizations:        Optimize Options.   (line  537)
59262* falign-functions:                      Optimize Options.   (line 1647)
59263* falign-jumps:                          Optimize Options.   (line 1726)
59264* falign-labels:                         Optimize Options.   (line 1688)
59265* falign-loops:                          Optimize Options.   (line 1708)
59266* faligned-new:                          C++ Dialect Options.
59267                                                             (line  105)
59268* fallow-parameterless-variadic-functions: C Dialect Options.
59269                                                             (line  243)
59270* fasan-shadow-offset:                   Instrumentation Options.
59271                                                             (line  404)
59272* fasm:                                  C Dialect Options.  (line  250)
59273* fassociative-math:                     Optimize Options.   (line 2219)
59274* fasynchronous-unwind-tables:           Code Gen Options.   (line  156)
59275* fauto-inc-dec:                         Optimize Options.   (line  559)
59276* fauto-profile:                         Optimize Options.   (line 2094)
59277* fbranch-count-reg:                     Optimize Options.   (line  417)
59278* fbranch-probabilities:                 Optimize Options.   (line 2364)
59279* fbranch-target-load-optimize:          Optimize Options.   (line 2531)
59280* fbranch-target-load-optimize2:         Optimize Options.   (line 2537)
59281* fbtr-bb-exclusive:                     Optimize Options.   (line 2541)
59282* fbuiltin:                              C Dialect Options.  (line  264)
59283* fcall-saved:                           Code Gen Options.   (line  454)
59284* fcall-used:                            Code Gen Options.   (line  440)
59285* fcaller-saves:                         Optimize Options.   (line  917)
59286* fcf-protection:                        Instrumentation Options.
59287                                                             (line  477)
59288* fchar8_t:                              C++ Dialect Options.
59289                                                             (line  115)
59290* fcheck-new:                            C++ Dialect Options.
59291                                                             (line  158)
59292* fchecking:                             Developer Options.  (line  688)
59293* fcode-hoisting:                        Optimize Options.   (line  958)
59294* fcombine-stack-adjustments:            Optimize Options.   (line  929)
59295* fcommon:                               Code Gen Options.   (line  231)
59296* fcommon <1>:                           Common Variable Attributes.
59297                                                             (line  176)
59298* fcompare-debug:                        Developer Options.  (line  782)
59299* fcompare-debug-second:                 Developer Options.  (line  808)
59300* fcompare-elim:                         Optimize Options.   (line 2037)
59301* fconcepts:                             C++ Dialect Options.
59302                                                             (line  168)
59303* fcond-mismatch:                        C Dialect Options.  (line  394)
59304* fconserve-stack:                       Optimize Options.   (line  948)
59305* fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
59306                                                             (line   30)
59307* fconstexpr-depth:                      C++ Dialect Options.
59308                                                             (line  175)
59309* fconstexpr-loop-limit:                 C++ Dialect Options.
59310                                                             (line  181)
59311* fconstexpr-ops-limit:                  C++ Dialect Options.
59312                                                             (line  186)
59313* fcprop-registers:                      Optimize Options.   (line 2049)
59314* fcrossjumping:                         Optimize Options.   (line  552)
59315* fcse-follow-jumps:                     Optimize Options.   (line  471)
59316* fcse-skip-blocks:                      Optimize Options.   (line  480)
59317* fcx-fortran-rules:                     Optimize Options.   (line 2351)
59318* fcx-limited-range:                     Optimize Options.   (line 2339)
59319* fdata-sections:                        Optimize Options.   (line 2502)
59320* fdbg-cnt:                              Developer Options.  (line  918)
59321* fdbg-cnt-list:                         Developer Options.  (line  915)
59322* fdce:                                  Optimize Options.   (line  565)
59323* fdebug-cpp:                            Preprocessor Options.
59324                                                             (line  448)
59325* fdebug-prefix-map:                     Debugging Options.  (line  140)
59326* fdebug-types-section:                  Debugging Options.  (line  191)
59327* fdeclone-ctor-dtor:                    Optimize Options.   (line  588)
59328* fdeduce-init-list:                     C++ Dialect Options.
59329                                                             (line  195)
59330* fdefer-pop:                            Optimize Options.   (line  218)
59331* fdelayed-branch:                       Optimize Options.   (line  741)
59332* fdelete-dead-exceptions:               Code Gen Options.   (line  141)
59333* fdelete-null-pointer-checks:           Optimize Options.   (line  599)
59334* fdevirtualize:                         Optimize Options.   (line  620)
59335* fdevirtualize-at-ltrans:               Optimize Options.   (line  637)
59336* fdevirtualize-speculatively:           Optimize Options.   (line  627)
59337* fdiagnostics-color:                    Diagnostic Message Formatting Options.
59338                                                             (line   40)
59339* fdiagnostics-format:                   Diagnostic Message Formatting Options.
59340                                                             (line  242)
59341* fdiagnostics-generate-patch:           Diagnostic Message Formatting Options.
59342                                                             (line  187)
59343* fdiagnostics-minimum-margin-width:     Diagnostic Message Formatting Options.
59344                                                             (line  156)
59345* fdiagnostics-parseable-fixits:         Diagnostic Message Formatting Options.
59346                                                             (line  160)
59347* fdiagnostics-show-caret:               Diagnostic Message Formatting Options.
59348                                                             (line  129)
59349* fdiagnostics-show-labels:              Diagnostic Message Formatting Options.
59350                                                             (line  138)
59351* fdiagnostics-show-line-numbers:        Diagnostic Message Formatting Options.
59352                                                             (line  151)
59353* fdiagnostics-show-location:            Diagnostic Message Formatting Options.
59354                                                             (line   25)
59355* fdiagnostics-show-option:              Diagnostic Message Formatting Options.
59356                                                             (line  123)
59357* fdiagnostics-show-template-tree:       Diagnostic Message Formatting Options.
59358                                                             (line  205)
59359* fdirectives-only:                      Preprocessor Options.
59360                                                             (line  202)
59361* fdisable-:                             Developer Options.  (line  619)
59362* fdollars-in-identifiers:               Preprocessor Options.
59363                                                             (line  223)
59364* fdollars-in-identifiers <1>:           Interoperation.     (line  141)
59365* fdpic:                                 SH Options.         (line  388)
59366* fdse:                                  Optimize Options.   (line  569)
59367* fdump-ada-spec:                        Overall Options.    (line  391)
59368* fdump-debug:                           Developer Options.  (line  256)
59369* fdump-earlydebug:                      Developer Options.  (line  260)
59370* fdump-final-insns:                     Developer Options.  (line  776)
59371* fdump-go-spec:                         Overall Options.    (line  400)
59372* fdump-ipa:                             Developer Options.  (line  286)
59373* fdump-lang:                            Developer Options.  (line  318)
59374* fdump-lang-all:                        Developer Options.  (line  318)
59375* fdump-noaddr:                          Developer Options.  (line  264)
59376* fdump-passes:                          Developer Options.  (line  336)
59377* fdump-rtl-alignments:                  Developer Options.  (line   48)
59378* fdump-rtl-all:                         Developer Options.  (line  229)
59379* fdump-rtl-asmcons:                     Developer Options.  (line   51)
59380* fdump-rtl-auto_inc_dec:                Developer Options.  (line   55)
59381* fdump-rtl-barriers:                    Developer Options.  (line   59)
59382* fdump-rtl-bbpart:                      Developer Options.  (line   62)
59383* fdump-rtl-bbro:                        Developer Options.  (line   65)
59384* fdump-rtl-btl2:                        Developer Options.  (line   69)
59385* fdump-rtl-btl2 <1>:                    Developer Options.  (line   69)
59386* fdump-rtl-bypass:                      Developer Options.  (line   73)
59387* fdump-rtl-ce1:                         Developer Options.  (line   84)
59388* fdump-rtl-ce2:                         Developer Options.  (line   84)
59389* fdump-rtl-ce3:                         Developer Options.  (line   84)
59390* fdump-rtl-combine:                     Developer Options.  (line   76)
59391* fdump-rtl-compgotos:                   Developer Options.  (line   79)
59392* fdump-rtl-cprop_hardreg:               Developer Options.  (line   88)
59393* fdump-rtl-csa:                         Developer Options.  (line   91)
59394* fdump-rtl-cse1:                        Developer Options.  (line   95)
59395* fdump-rtl-cse2:                        Developer Options.  (line   95)
59396* fdump-rtl-dbr:                         Developer Options.  (line  102)
59397* fdump-rtl-dce:                         Developer Options.  (line   99)
59398* fdump-rtl-dce1:                        Developer Options.  (line  106)
59399* fdump-rtl-dce2:                        Developer Options.  (line  106)
59400* fdump-rtl-dfinish:                     Developer Options.  (line  225)
59401* fdump-rtl-dfinit:                      Developer Options.  (line  225)
59402* fdump-rtl-eh:                          Developer Options.  (line  110)
59403* fdump-rtl-eh_ranges:                   Developer Options.  (line  113)
59404* fdump-rtl-expand:                      Developer Options.  (line  116)
59405* fdump-rtl-fwprop1:                     Developer Options.  (line  120)
59406* fdump-rtl-fwprop2:                     Developer Options.  (line  120)
59407* fdump-rtl-gcse1:                       Developer Options.  (line  125)
59408* fdump-rtl-gcse2:                       Developer Options.  (line  125)
59409* fdump-rtl-init-regs:                   Developer Options.  (line  129)
59410* fdump-rtl-initvals:                    Developer Options.  (line  132)
59411* fdump-rtl-into_cfglayout:              Developer Options.  (line  135)
59412* fdump-rtl-ira:                         Developer Options.  (line  138)
59413* fdump-rtl-jump:                        Developer Options.  (line  141)
59414* fdump-rtl-loop2:                       Developer Options.  (line  144)
59415* fdump-rtl-mach:                        Developer Options.  (line  148)
59416* fdump-rtl-mode_sw:                     Developer Options.  (line  152)
59417* fdump-rtl-outof_cfglayout:             Developer Options.  (line  158)
59418* fdump-rtl-PASS:                        Developer Options.  (line   35)
59419* fdump-rtl-peephole2:                   Developer Options.  (line  161)
59420* fdump-rtl-postreload:                  Developer Options.  (line  164)
59421* fdump-rtl-pro_and_epilogue:            Developer Options.  (line  167)
59422* fdump-rtl-ree:                         Developer Options.  (line  175)
59423* fdump-rtl-regclass:                    Developer Options.  (line  225)
59424* fdump-rtl-rnreg:                       Developer Options.  (line  155)
59425* fdump-rtl-sched1:                      Developer Options.  (line  171)
59426* fdump-rtl-sched2:                      Developer Options.  (line  171)
59427* fdump-rtl-seqabstr:                    Developer Options.  (line  178)
59428* fdump-rtl-shorten:                     Developer Options.  (line  181)
59429* fdump-rtl-sibling:                     Developer Options.  (line  184)
59430* fdump-rtl-sms:                         Developer Options.  (line  195)
59431* fdump-rtl-split1:                      Developer Options.  (line  191)
59432* fdump-rtl-split2:                      Developer Options.  (line  191)
59433* fdump-rtl-split3:                      Developer Options.  (line  191)
59434* fdump-rtl-split4:                      Developer Options.  (line  191)
59435* fdump-rtl-split5:                      Developer Options.  (line  191)
59436* fdump-rtl-stack:                       Developer Options.  (line  199)
59437* fdump-rtl-subreg1:                     Developer Options.  (line  205)
59438* fdump-rtl-subreg2:                     Developer Options.  (line  205)
59439* fdump-rtl-subregs_of_mode_finish:      Developer Options.  (line  225)
59440* fdump-rtl-subregs_of_mode_init:        Developer Options.  (line  225)
59441* fdump-rtl-unshare:                     Developer Options.  (line  209)
59442* fdump-rtl-vartrack:                    Developer Options.  (line  212)
59443* fdump-rtl-vregs:                       Developer Options.  (line  215)
59444* fdump-rtl-web:                         Developer Options.  (line  218)
59445* fdump-statistics:                      Developer Options.  (line  340)
59446* fdump-tree:                            Developer Options.  (line  353)
59447* fdump-tree-all:                        Developer Options.  (line  353)
59448* fdump-unnumbered:                      Developer Options.  (line  274)
59449* fdump-unnumbered-links:                Developer Options.  (line  280)
59450* fdwarf2-cfi-asm:                       Debugging Options.  (line  396)
59451* fearly-inlining:                       Optimize Options.   (line  317)
59452* felide-constructors:                   C++ Dialect Options.
59453                                                             (line  216)
59454* felide-type:                           Diagnostic Message Formatting Options.
59455                                                             (line  225)
59456* feliminate-unused-debug-symbols:       Debugging Options.  (line  121)
59457* feliminate-unused-debug-types:         Debugging Options.  (line  400)
59458* femit-class-debug-always:              Debugging Options.  (line  125)
59459* femit-struct-debug-baseonly:           Debugging Options.  (line  327)
59460* femit-struct-debug-detailed:           Debugging Options.  (line  354)
59461* femit-struct-debug-reduced:            Debugging Options.  (line  340)
59462* fenable-:                              Developer Options.  (line  619)
59463* fenforce-eh-specs:                     C++ Dialect Options.
59464                                                             (line  227)
59465* fexceptions:                           Code Gen Options.   (line  119)
59466* fexcess-precision:                     Optimize Options.   (line 2145)
59467* fexec-charset:                         Preprocessor Options.
59468                                                             (line  266)
59469* fexpensive-optimizations:              Optimize Options.   (line  644)
59470* fext-numeric-literals:                 C++ Dialect Options.
59471                                                             (line  836)
59472* fextended-identifiers:                 Preprocessor Options.
59473                                                             (line  226)
59474* fextern-tls-init:                      C++ Dialect Options.
59475                                                             (line  237)
59476* ffast-math:                            Optimize Options.   (line 2169)
59477* ffat-lto-objects:                      Optimize Options.   (line 2014)
59478* ffile-prefix-map:                      Overall Options.    (line  371)
59479* ffinite-math-only:                     Optimize Options.   (line 2246)
59480* ffix-and-continue:                     Darwin Options.     (line  104)
59481* ffixed:                                Code Gen Options.   (line  428)
59482* ffloat-store:                          Optimize Options.   (line 2131)
59483* ffloat-store <1>:                      Disappointments.    (line   77)
59484* fforward-propagate:                    Optimize Options.   (line  225)
59485* ffp-contract:                          Optimize Options.   (line  234)
59486* ffp-int-builtin-inexact:               Optimize Options.   (line 2318)
59487* ffreestanding:                         Standards.          (line   99)
59488* ffreestanding <1>:                     C Dialect Options.  (line  312)
59489* ffreestanding <2>:                     Warning Options.    (line  295)
59490* ffreestanding <3>:                     Common Function Attributes.
59491                                                             (line  350)
59492* ffunction-cse:                         Optimize Options.   (line  431)
59493* ffunction-sections:                    Optimize Options.   (line 2502)
59494* fgcse:                                 Optimize Options.   (line  494)
59495* fgcse-after-reload:                    Optimize Options.   (line  530)
59496* fgcse-las:                             Optimize Options.   (line  523)
59497* fgcse-lm:                              Optimize Options.   (line  505)
59498* fgcse-sm:                              Optimize Options.   (line  514)
59499* fgimple:                               C Dialect Options.  (line  298)
59500* fgnu-keywords:                         C++ Dialect Options.
59501                                                             (line  257)
59502* fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
59503                                                             (line   39)
59504* fgnu-tm:                               C Dialect Options.  (line  351)
59505* fgnu-unique:                           Code Gen Options.   (line  162)
59506* fgnu89-inline:                         C Dialect Options.  (line  188)
59507* fgraphite-identity:                    Optimize Options.   (line 1231)
59508* fguess-branch-probability:             Optimize Options.   (line 1527)
59509* fhoist-adjacent-loads:                 Optimize Options.   (line  988)
59510* fhosted:                               C Dialect Options.  (line  304)
59511* fident:                                Code Gen Options.   (line  258)
59512* fif-conversion:                        Optimize Options.   (line  573)
59513* fif-conversion2:                       Optimize Options.   (line  582)
59514* fiji:                                  AMD GCN Options.    (line   13)
59515* filelist:                              Darwin Options.     (line  196)
59516* fimplement-inlines:                    C++ Dialect Options.
59517                                                             (line  277)
59518* fimplicit-inline-templates:            C++ Dialect Options.
59519                                                             (line  271)
59520* fimplicit-templates:                   C++ Dialect Options.
59521                                                             (line  263)
59522* findirect-data:                        Darwin Options.     (line  104)
59523* findirect-inlining:                    Optimize Options.   (line  289)
59524* finhibit-size-directive:               Code Gen Options.   (line  261)
59525* finline:                               Optimize Options.   (line  272)
59526* finline-functions:                     Optimize Options.   (line  297)
59527* finline-functions-called-once:         Optimize Options.   (line  309)
59528* finline-limit:                         Optimize Options.   (line  333)
59529* finline-small-functions:               Optimize Options.   (line  280)
59530* finput-charset:                        Preprocessor Options.
59531                                                             (line  279)
59532* finstrument-functions:                 Instrumentation Options.
59533                                                             (line  670)
59534* finstrument-functions <1>:             Common Function Attributes.
59535                                                             (line  620)
59536* finstrument-functions-exclude-file-list: Instrumentation Options.
59537                                                             (line  706)
59538* finstrument-functions-exclude-function-list: Instrumentation Options.
59539                                                             (line  727)
59540* fipa-bit-cp:                           Optimize Options.   (line 1048)
59541* fipa-cp:                               Optimize Options.   (line 1029)
59542* fipa-cp-clone:                         Optimize Options.   (line 1038)
59543* fipa-icf:                              Optimize Options.   (line 1058)
59544* fipa-profile:                          Optimize Options.   (line 1021)
59545* fipa-pta:                              Optimize Options.   (line 1015)
59546* fipa-pure-const:                       Optimize Options.   (line  999)
59547* fipa-ra:                               Optimize Options.   (line  935)
59548* fipa-reference:                        Optimize Options.   (line 1003)
59549* fipa-reference-addressable:            Optimize Options.   (line 1007)
59550* fipa-sra:                              Optimize Options.   (line  326)
59551* fipa-stack-alignment:                  Optimize Options.   (line 1011)
59552* fipa-vrp:                              Optimize Options.   (line 1053)
59553* fira-algorithm:                        Optimize Options.   (line  678)
59554* fira-hoist-pressure:                   Optimize Options.   (line  707)
59555* fira-loop-pressure:                    Optimize Options.   (line  714)
59556* fira-region:                           Optimize Options.   (line  686)
59557* fira-share-save-slots:                 Optimize Options.   (line  722)
59558* fira-share-spill-slots:                Optimize Options.   (line  728)
59559* fira-verbose:                          Developer Options.  (line  845)
59560* fisolate-erroneous-paths-attribute:    Optimize Options.   (line 1140)
59561* fisolate-erroneous-paths-dereference:  Optimize Options.   (line 1132)
59562* fivar-visibility:                      Objective-C and Objective-C++ Dialect Options.
59563                                                             (line  161)
59564* fivopts:                               Optimize Options.   (line 1356)
59565* fjump-tables:                          Code Gen Options.   (line  420)
59566* fkeep-inline-dllexport:                Optimize Options.   (line  358)
59567* fkeep-inline-functions:                Optimize Options.   (line  364)
59568* fkeep-inline-functions <1>:            Inline.             (line   51)
59569* fkeep-static-consts:                   Optimize Options.   (line  375)
59570* fkeep-static-functions:                Optimize Options.   (line  371)
59571* flat_namespace:                        Darwin Options.     (line  196)
59572* flax-vector-conversions:               C Dialect Options.  (line  399)
59573* fleading-underscore:                   Code Gen Options.   (line  484)
59574* flifetime-dse:                         Optimize Options.   (line  658)
59575* flinker-output:                        Link Options.       (line   25)
59576* flive-patching:                        Optimize Options.   (line 1072)
59577* flive-range-shrinkage:                 Optimize Options.   (line  673)
59578* flocal-ivars:                          Objective-C and Objective-C++ Dialect Options.
59579                                                             (line  152)
59580* floop-block:                           Optimize Options.   (line 1225)
59581* floop-interchange:                     Optimize Options.   (line 1309)
59582* floop-nest-optimize:                   Optimize Options.   (line 1239)
59583* floop-parallelize-all:                 Optimize Options.   (line 1245)
59584* floop-strip-mine:                      Optimize Options.   (line 1225)
59585* floop-unroll-and-jam:                  Optimize Options.   (line 1326)
59586* flra-remat:                            Optimize Options.   (line  734)
59587* flto:                                  Optimize Options.   (line 1782)
59588* flto-compression-level:                Optimize Options.   (line 1988)
59589* flto-odr-type-merging:                 Optimize Options.   (line 1983)
59590* flto-partition:                        Optimize Options.   (line 1969)
59591* flto-report:                           Developer Options.  (line  851)
59592* flto-report-wpa:                       Developer Options.  (line  859)
59593* fmacro-prefix-map:                     Preprocessor Options.
59594                                                             (line  257)
59595* fmath-errno:                           Optimize Options.   (line 2183)
59596* fmax-errors:                           Warning Options.    (line   18)
59597* fmem-report:                           Developer Options.  (line  863)
59598* fmem-report-wpa:                       Developer Options.  (line  867)
59599* fmerge-all-constants:                  Optimize Options.   (line  394)
59600* fmerge-constants:                      Optimize Options.   (line  384)
59601* fmerge-debug-strings:                  Debugging Options.  (line  133)
59602* fmessage-length:                       Diagnostic Message Formatting Options.
59603                                                             (line   14)
59604* fmodulo-sched:                         Optimize Options.   (line  405)
59605* fmodulo-sched-allow-regmoves:          Optimize Options.   (line  410)
59606* fmove-loop-invariants:                 Optimize Options.   (line 2462)
59607* fms-extensions:                        C Dialect Options.  (line  366)
59608* fms-extensions <1>:                    C++ Dialect Options.
59609                                                             (line  282)
59610* fms-extensions <2>:                    Unnamed Fields.     (line   36)
59611* fnew-inheriting-ctors:                 C++ Dialect Options.
59612                                                             (line  287)
59613* fnew-ttp-matching:                     C++ Dialect Options.
59614                                                             (line  293)
59615* fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
59616                                                             (line   43)
59617* fnil-receivers:                        Objective-C and Objective-C++ Dialect Options.
59618                                                             (line   49)
59619* fno-access-control:                    C++ Dialect Options.
59620                                                             (line  101)
59621* fno-asm:                               C Dialect Options.  (line  250)
59622* fno-branch-count-reg:                  Optimize Options.   (line  417)
59623* fno-builtin:                           C Dialect Options.  (line  264)
59624* fno-builtin <1>:                       Warning Options.    (line  295)
59625* fno-builtin <2>:                       Common Function Attributes.
59626                                                             (line  350)
59627* fno-builtin <3>:                       Other Builtins.     (line   21)
59628* fno-canonical-system-headers:          Preprocessor Options.
59629                                                             (line  230)
59630* fno-char8_t:                           C++ Dialect Options.
59631                                                             (line  115)
59632* fno-checking:                          Developer Options.  (line  688)
59633* fno-common:                            Code Gen Options.   (line  231)
59634* fno-common <1>:                        Common Variable Attributes.
59635                                                             (line  176)
59636* fno-compare-debug:                     Developer Options.  (line  782)
59637* fno-debug-types-section:               Debugging Options.  (line  191)
59638* fno-default-inline:                    Inline.             (line   68)
59639* fno-defer-pop:                         Optimize Options.   (line  218)
59640* fno-diagnostics-show-caret:            Diagnostic Message Formatting Options.
59641                                                             (line  129)
59642* fno-diagnostics-show-labels:           Diagnostic Message Formatting Options.
59643                                                             (line  138)
59644* fno-diagnostics-show-line-numbers:     Diagnostic Message Formatting Options.
59645                                                             (line  151)
59646* fno-diagnostics-show-option:           Diagnostic Message Formatting Options.
59647                                                             (line  123)
59648* fno-dwarf2-cfi-asm:                    Debugging Options.  (line  396)
59649* fno-elide-constructors:                C++ Dialect Options.
59650                                                             (line  216)
59651* fno-elide-type:                        Diagnostic Message Formatting Options.
59652                                                             (line  225)
59653* fno-eliminate-unused-debug-types:      Debugging Options.  (line  400)
59654* fno-enforce-eh-specs:                  C++ Dialect Options.
59655                                                             (line  227)
59656* fno-ext-numeric-literals:              C++ Dialect Options.
59657                                                             (line  836)
59658* fno-extern-tls-init:                   C++ Dialect Options.
59659                                                             (line  237)
59660* fno-fp-int-builtin-inexact:            Optimize Options.   (line 2318)
59661* fno-function-cse:                      Optimize Options.   (line  431)
59662* fno-gnu-keywords:                      C++ Dialect Options.
59663                                                             (line  257)
59664* fno-gnu-unique:                        Code Gen Options.   (line  162)
59665* fno-guess-branch-probability:          Optimize Options.   (line 1527)
59666* fno-ident:                             Code Gen Options.   (line  258)
59667* fno-implement-inlines:                 C++ Dialect Options.
59668                                                             (line  277)
59669* fno-implement-inlines <1>:             C++ Interface.      (line   66)
59670* fno-implicit-inline-templates:         C++ Dialect Options.
59671                                                             (line  271)
59672* fno-implicit-templates:                C++ Dialect Options.
59673                                                             (line  263)
59674* fno-implicit-templates <1>:            Template Instantiation.
59675                                                             (line  118)
59676* fno-inline:                            Optimize Options.   (line  272)
59677* fno-ira-share-save-slots:              Optimize Options.   (line  722)
59678* fno-ira-share-spill-slots:             Optimize Options.   (line  728)
59679* fno-jump-tables:                       Code Gen Options.   (line  420)
59680* fno-keep-inline-dllexport:             Optimize Options.   (line  358)
59681* fno-lifetime-dse:                      Optimize Options.   (line  658)
59682* fno-local-ivars:                       Objective-C and Objective-C++ Dialect Options.
59683                                                             (line  152)
59684* fno-math-errno:                        Optimize Options.   (line 2183)
59685* fno-merge-debug-strings:               Debugging Options.  (line  133)
59686* fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
59687                                                             (line   49)
59688* fno-nonansi-builtins:                  C++ Dialect Options.
59689                                                             (line  300)
59690* fno-operator-names:                    C++ Dialect Options.
59691                                                             (line  316)
59692* fno-optional-diags:                    C++ Dialect Options.
59693                                                             (line  320)
59694* fno-peephole:                          Optimize Options.   (line 1518)
59695* fno-peephole2:                         Optimize Options.   (line 1518)
59696* fno-plt:                               Code Gen Options.   (line  402)
59697* fno-pretty-templates:                  C++ Dialect Options.
59698                                                             (line  330)
59699* fno-printf-return-value:               Optimize Options.   (line 1495)
59700* fno-rtti:                              C++ Dialect Options.
59701                                                             (line  347)
59702* fno-sanitize-recover:                  Instrumentation Options.
59703                                                             (line  413)
59704* fno-sanitize=all:                      Instrumentation Options.
59705                                                             (line  398)
59706* fno-sched-interblock:                  Optimize Options.   (line  767)
59707* fno-sched-spec:                        Optimize Options.   (line  772)
59708* fno-set-stack-executable:              x86 Windows Options.
59709                                                             (line   46)
59710* fno-show-column:                       Diagnostic Message Formatting Options.
59711                                                             (line  237)
59712* fno-signed-bitfields:                  C Dialect Options.  (line  432)
59713* fno-signed-zeros:                      Optimize Options.   (line 2258)
59714* fno-stack-limit:                       Instrumentation Options.
59715                                                             (line  582)
59716* fno-threadsafe-statics:                C++ Dialect Options.
59717                                                             (line  402)
59718* fno-toplevel-reorder:                  Optimize Options.   (line 1747)
59719* fno-trapping-math:                     Optimize Options.   (line 2268)
59720* fno-unsigned-bitfields:                C Dialect Options.  (line  432)
59721* fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
59722                                                             (line  415)
59723* fno-var-tracking-assignments:          Debugging Options.  (line  160)
59724* fno-var-tracking-assignments-toggle:   Developer Options.  (line  829)
59725* fno-weak:                              C++ Dialect Options.
59726                                                             (line  477)
59727* fno-working-directory:                 Preprocessor Options.
59728                                                             (line  314)
59729* fno-writable-relocated-rdata:          x86 Windows Options.
59730                                                             (line   53)
59731* fno-zero-initialized-in-bss:           Optimize Options.   (line  442)
59732* fnon-call-exceptions:                  Code Gen Options.   (line  133)
59733* fnonansi-builtins:                     C++ Dialect Options.
59734                                                             (line  300)
59735* fnothrow-opt:                          C++ Dialect Options.
59736                                                             (line  305)
59737* fobjc-abi-version:                     Objective-C and Objective-C++ Dialect Options.
59738                                                             (line   56)
59739* fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
59740                                                             (line   67)
59741* fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
59742                                                             (line   92)
59743* fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
59744                                                             (line   96)
59745* fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
59746                                                             (line  104)
59747* fobjc-nilcheck:                        Objective-C and Objective-C++ Dialect Options.
59748                                                             (line  110)
59749* fobjc-std:                             Objective-C and Objective-C++ Dialect Options.
59750                                                             (line  119)
59751* fomit-frame-pointer:                   Optimize Options.   (line  245)
59752* fopenacc:                              C Dialect Options.  (line  323)
59753* fopenacc-dim:                          C Dialect Options.  (line  332)
59754* fopenmp:                               C Dialect Options.  (line  338)
59755* fopenmp-simd:                          C Dialect Options.  (line  347)
59756* foperator-names:                       C++ Dialect Options.
59757                                                             (line  316)
59758* fopt-info:                             Developer Options.  (line  459)
59759* foptimize-sibling-calls:               Optimize Options.   (line  260)
59760* foptimize-strlen:                      Optimize Options.   (line  265)
59761* foptional-diags:                       C++ Dialect Options.
59762                                                             (line  320)
59763* force_cpusubtype_ALL:                  Darwin Options.     (line  135)
59764* force_flat_namespace:                  Darwin Options.     (line  196)
59765* fpack-struct:                          Code Gen Options.   (line  471)
59766* fpartial-inlining:                     Optimize Options.   (line 1470)
59767* fpatchable-function-entry:             Instrumentation Options.
59768                                                             (line  739)
59769* fpcc-struct-return:                    Code Gen Options.   (line  175)
59770* fpcc-struct-return <1>:                Incompatibilities.  (line  170)
59771* fpch-deps:                             Preprocessor Options.
59772                                                             (line  289)
59773* fpch-preprocess:                       Preprocessor Options.
59774                                                             (line  297)
59775* fpeel-loops:                           Optimize Options.   (line 2454)
59776* fpeephole:                             Optimize Options.   (line 1518)
59777* fpeephole2:                            Optimize Options.   (line 1518)
59778* fpermissive:                           C++ Dialect Options.
59779                                                             (line  325)
59780* fpermitted-flt-eval-methods:           C Dialect Options.  (line  205)
59781* fpermitted-flt-eval-methods=c11:       C Dialect Options.  (line  205)
59782* fpermitted-flt-eval-methods=ts-18661-3: C Dialect Options. (line  205)
59783* fpic:                                  Code Gen Options.   (line  359)
59784* fPIC:                                  Code Gen Options.   (line  380)
59785* fpie:                                  Code Gen Options.   (line  393)
59786* fPIE:                                  Code Gen Options.   (line  393)
59787* fplan9-extensions:                     C Dialect Options.  (line  384)
59788* fplan9-extensions <1>:                 Unnamed Fields.     (line   43)
59789* fplt:                                  Code Gen Options.   (line  402)
59790* fplugin:                               Overall Options.    (line  380)
59791* fplugin-arg:                           Overall Options.    (line  387)
59792* fpost-ipa-mem-report:                  Developer Options.  (line  872)
59793* fpre-ipa-mem-report:                   Developer Options.  (line  871)
59794* fpredictive-commoning:                 Optimize Options.   (line 1477)
59795* fprefetch-loop-arrays:                 Optimize Options.   (line 1485)
59796* fpreprocessed:                         Preprocessor Options.
59797                                                             (line  189)
59798* fpretty-templates:                     C++ Dialect Options.
59799                                                             (line  330)
59800* fprintf-return-value:                  Optimize Options.   (line 1495)
59801* fprofile-abs-path:                     Instrumentation Options.
59802                                                             (line  106)
59803* fprofile-arcs:                         Instrumentation Options.
59804                                                             (line   30)
59805* fprofile-arcs <1>:                     Other Builtins.     (line  563)
59806* fprofile-correction:                   Optimize Options.   (line 2056)
59807* fprofile-dir:                          Instrumentation Options.
59808                                                             (line  112)
59809* fprofile-exclude-files:                Instrumentation Options.
59810                                                             (line  179)
59811* fprofile-filter-files:                 Instrumentation Options.
59812                                                             (line  171)
59813* fprofile-generate:                     Instrumentation Options.
59814                                                             (line  137)
59815* fprofile-reorder-functions:            Optimize Options.   (line 2394)
59816* fprofile-report:                       Developer Options.  (line  876)
59817* fprofile-update:                       Instrumentation Options.
59818                                                             (line  154)
59819* fprofile-use:                          Optimize Options.   (line 2066)
59820* fprofile-values:                       Optimize Options.   (line 2384)
59821* fpu:                                   RX Options.         (line   17)
59822* frandom-seed:                          Developer Options.  (line  693)
59823* freciprocal-math:                      Optimize Options.   (line 2236)
59824* frecord-gcc-switches:                  Code Gen Options.   (line  347)
59825* free:                                  Optimize Options.   (line  650)
59826* freg-struct-return:                    Code Gen Options.   (line  193)
59827* frename-registers:                     Optimize Options.   (line 2413)
59828* freorder-blocks:                       Optimize Options.   (line 1548)
59829* freorder-blocks-algorithm:             Optimize Options.   (line 1554)
59830* freorder-blocks-and-partition:         Optimize Options.   (line 1565)
59831* freorder-functions:                    Optimize Options.   (line 1582)
59832* freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
59833                                                             (line  130)
59834* frepo:                                 C++ Dialect Options.
59835                                                             (line  342)
59836* frepo <1>:                             Template Instantiation.
59837                                                             (line   94)
59838* freport-bug:                           Developer Options.  (line  270)
59839* frerun-cse-after-loop:                 Optimize Options.   (line  488)
59840* freschedule-modulo-scheduled-loops:    Optimize Options.   (line  866)
59841* frounding-math:                        Optimize Options.   (line 2283)
59842* frtti:                                 C++ Dialect Options.
59843                                                             (line  347)
59844* fsanitize-address-use-after-scope:     Instrumentation Options.
59845                                                             (line  449)
59846* fsanitize-coverage=trace-cmp:          Instrumentation Options.
59847                                                             (line  464)
59848* fsanitize-coverage=trace-pc:           Instrumentation Options.
59849                                                             (line  460)
59850* fsanitize-recover:                     Instrumentation Options.
59851                                                             (line  413)
59852* fsanitize-sections:                    Instrumentation Options.
59853                                                             (line  409)
59854* fsanitize-undefined-trap-on-error:     Instrumentation Options.
59855                                                             (line  453)
59856* fsanitize=address:                     Instrumentation Options.
59857                                                             (line  187)
59858* fsanitize=alignment:                   Instrumentation Options.
59859                                                             (line  324)
59860* fsanitize=bool:                        Instrumentation Options.
59861                                                             (line  362)
59862* fsanitize=bounds:                      Instrumentation Options.
59863                                                             (line  311)
59864* fsanitize=bounds-strict:               Instrumentation Options.
59865                                                             (line  317)
59866* fsanitize=builtin:                     Instrumentation Options.
59867                                                             (line  386)
59868* fsanitize=enum:                        Instrumentation Options.
59869                                                             (line  367)
59870* fsanitize=float-cast-overflow:         Instrumentation Options.
59871                                                             (line  342)
59872* fsanitize=float-divide-by-zero:        Instrumentation Options.
59873                                                             (line  336)
59874* fsanitize=integer-divide-by-zero:      Instrumentation Options.
59875                                                             (line  274)
59876* fsanitize=kernel-address:              Instrumentation Options.
59877                                                             (line  201)
59878* fsanitize=leak:                        Instrumentation Options.
59879                                                             (line  239)
59880* fsanitize=nonnull-attribute:           Instrumentation Options.
59881                                                             (line  350)
59882* fsanitize=null:                        Instrumentation Options.
59883                                                             (line  288)
59884* fsanitize=object-size:                 Instrumentation Options.
59885                                                             (line  331)
59886* fsanitize=pointer-compare:             Instrumentation Options.
59887                                                             (line  205)
59888* fsanitize=pointer-overflow:            Instrumentation Options.
59889                                                             (line  380)
59890* fsanitize=pointer-subtract:            Instrumentation Options.
59891                                                             (line  215)
59892* fsanitize=return:                      Instrumentation Options.
59893                                                             (line  296)
59894* fsanitize=returns-nonnull-attribute:   Instrumentation Options.
59895                                                             (line  356)
59896* fsanitize=shift:                       Instrumentation Options.
59897                                                             (line  254)
59898* fsanitize=shift-base:                  Instrumentation Options.
59899                                                             (line  267)
59900* fsanitize=shift-exponent:              Instrumentation Options.
59901                                                             (line  262)
59902* fsanitize=signed-integer-overflow:     Instrumentation Options.
59903                                                             (line  302)
59904* fsanitize=thread:                      Instrumentation Options.
59905                                                             (line  225)
59906* fsanitize=undefined:                   Instrumentation Options.
59907                                                             (line  249)
59908* fsanitize=unreachable:                 Instrumentation Options.
59909                                                             (line  278)
59910* fsanitize=vla-bound:                   Instrumentation Options.
59911                                                             (line  284)
59912* fsanitize=vptr:                        Instrumentation Options.
59913                                                             (line  373)
59914* fsave-optimization-record:             Developer Options.  (line  565)
59915* fsched-critical-path-heuristic:        Optimize Options.   (line  832)
59916* fsched-dep-count-heuristic:            Optimize Options.   (line  859)
59917* fsched-group-heuristic:                Optimize Options.   (line  826)
59918* fsched-interblock:                     Optimize Options.   (line  767)
59919* fsched-last-insn-heuristic:            Optimize Options.   (line  852)
59920* fsched-pressure:                       Optimize Options.   (line  777)
59921* fsched-rank-heuristic:                 Optimize Options.   (line  845)
59922* fsched-spec:                           Optimize Options.   (line  772)
59923* fsched-spec-insn-heuristic:            Optimize Options.   (line  838)
59924* fsched-spec-load:                      Optimize Options.   (line  786)
59925* fsched-spec-load-dangerous:            Optimize Options.   (line  791)
59926* fsched-stalled-insns:                  Optimize Options.   (line  797)
59927* fsched-stalled-insns-dep:              Optimize Options.   (line  807)
59928* fsched-verbose:                        Developer Options.  (line  605)
59929* fsched2-use-superblocks:               Optimize Options.   (line  816)
59930* fschedule-fusion:                      Optimize Options.   (line 2423)
59931* fschedule-insns:                       Optimize Options.   (line  748)
59932* fschedule-insns2:                      Optimize Options.   (line  758)
59933* fsection-anchors:                      Optimize Options.   (line 2549)
59934* fsel-sched-pipelining:                 Optimize Options.   (line  879)
59935* fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  884)
59936* fselective-scheduling:                 Optimize Options.   (line  871)
59937* fselective-scheduling2:                Optimize Options.   (line  875)
59938* fsemantic-interposition:               Optimize Options.   (line  889)
59939* fset-stack-executable:                 x86 Windows Options.
59940                                                             (line   46)
59941* fshort-enums:                          Code Gen Options.   (line  211)
59942* fshort-enums <1>:                      Structures unions enumerations and bit-fields implementation.
59943                                                             (line   48)
59944* fshort-enums <2>:                      Common Type Attributes.
59945                                                             (line  288)
59946* fshort-enums <3>:                      Non-bugs.           (line   42)
59947* fshort-wchar:                          Code Gen Options.   (line  221)
59948* fshow-column:                          Diagnostic Message Formatting Options.
59949                                                             (line  237)
59950* fshrink-wrap:                          Optimize Options.   (line  906)
59951* fshrink-wrap-separate:                 Optimize Options.   (line  911)
59952* fsignaling-nans:                       Optimize Options.   (line 2303)
59953* fsigned-bitfields:                     C Dialect Options.  (line  432)
59954* fsigned-bitfields <1>:                 Non-bugs.           (line   57)
59955* fsigned-char:                          C Dialect Options.  (line  422)
59956* fsigned-char <1>:                      Characters implementation.
59957                                                             (line   31)
59958* fsigned-zeros:                         Optimize Options.   (line 2258)
59959* fsimd-cost-model:                      Optimize Options.   (line 1430)
59960* fsingle-precision-constant:            Optimize Options.   (line 2335)
59961* fsized-deallocation:                   C++ Dialect Options.
59962                                                             (line  362)
59963* fsplit-ivs-in-unroller:                Optimize Options.   (line 1451)
59964* fsplit-loops:                          Optimize Options.   (line 2466)
59965* fsplit-paths:                          Optimize Options.   (line 1446)
59966* fsplit-stack:                          Instrumentation Options.
59967                                                             (line  599)
59968* fsplit-stack <1>:                      Common Function Attributes.
59969                                                             (line  670)
59970* fsplit-wide-types:                     Optimize Options.   (line  463)
59971* fssa-backprop:                         Optimize Options.   (line 1164)
59972* fssa-phiopt:                           Optimize Options.   (line 1170)
59973* fsso-struct:                           C Dialect Options.  (line  438)
59974* fstack-check:                          Instrumentation Options.
59975                                                             (line  525)
59976* fstack-clash-protection:               Instrumentation Options.
59977                                                             (line  567)
59978* fstack-limit-register:                 Instrumentation Options.
59979                                                             (line  582)
59980* fstack-limit-symbol:                   Instrumentation Options.
59981                                                             (line  582)
59982* fstack-protector:                      Instrumentation Options.
59983                                                             (line  504)
59984* fstack-protector-all:                  Instrumentation Options.
59985                                                             (line  513)
59986* fstack-protector-explicit:             Instrumentation Options.
59987                                                             (line  521)
59988* fstack-protector-strong:               Instrumentation Options.
59989                                                             (line  516)
59990* fstack-usage:                          Developer Options.  (line  880)
59991* fstack_reuse:                          Code Gen Options.   (line   15)
59992* fstats:                                Developer Options.  (line  909)
59993* fstdarg-opt:                           Optimize Options.   (line 2545)
59994* fstore-merging:                        Optimize Options.   (line 1380)
59995* fstrict-aliasing:                      Optimize Options.   (line 1597)
59996* fstrict-enums:                         C++ Dialect Options.
59997                                                             (line  372)
59998* fstrict-overflow:                      Code Gen Options.   (line  115)
59999* fstrict-volatile-bitfields:            Code Gen Options.   (line  595)
60000* fstrong-eval-order:                    C++ Dialect Options.
60001                                                             (line  381)
60002* fsync-libcalls:                        Code Gen Options.   (line  627)
60003* fsyntax-only:                          Warning Options.    (line   14)
60004* ftabstop:                              Preprocessor Options.
60005                                                             (line  234)
60006* ftemplate-backtrace-limit:             C++ Dialect Options.
60007                                                             (line  389)
60008* ftemplate-depth:                       C++ Dialect Options.
60009                                                             (line  393)
60010* ftest-coverage:                        Instrumentation Options.
60011                                                             (line   97)
60012* fthread-jumps:                         Optimize Options.   (line  454)
60013* fthreadsafe-statics:                   C++ Dialect Options.
60014                                                             (line  402)
60015* ftime-report:                          Developer Options.  (line  837)
60016* ftime-report-details:                  Developer Options.  (line  841)
60017* ftls-model:                            Code Gen Options.   (line  495)
60018* ftoplevel-reorder:                     Optimize Options.   (line 1747)
60019* ftracer:                               Optimize Options.   (line 2431)
60020* ftrack-macro-expansion:                Preprocessor Options.
60021                                                             (line  240)
60022* ftrampolines:                          Code Gen Options.   (line  506)
60023* ftrapping-math:                        Optimize Options.   (line 2268)
60024* ftrapv:                                Code Gen Options.   (line   91)
60025* ftree-bit-ccp:                         Optimize Options.   (line 1152)
60026* ftree-builtin-call-dce:                Optimize Options.   (line 1192)
60027* ftree-ccp:                             Optimize Options.   (line 1159)
60028* ftree-ch:                              Optimize Options.   (line 1212)
60029* ftree-coalesce-vars:                   Optimize Options.   (line 1251)
60030* ftree-copy-prop:                       Optimize Options.   (line  994)
60031* ftree-dce:                             Optimize Options.   (line 1188)
60032* ftree-dominator-opts:                  Optimize Options.   (line 1198)
60033* ftree-dse:                             Optimize Options.   (line 1205)
60034* ftree-forwprop:                        Optimize Options.   (line  973)
60035* ftree-fre:                             Optimize Options.   (line  977)
60036* ftree-loop-distribute-patterns:        Optimize Options.   (line 1287)
60037* ftree-loop-distribution:               Optimize Options.   (line 1268)
60038* ftree-loop-if-convert:                 Optimize Options.   (line 1261)
60039* ftree-loop-im:                         Optimize Options.   (line 1332)
60040* ftree-loop-ivcanon:                    Optimize Options.   (line 1341)
60041* ftree-loop-linear:                     Optimize Options.   (line 1225)
60042* ftree-loop-optimize:                   Optimize Options.   (line 1219)
60043* ftree-loop-vectorize:                  Optimize Options.   (line 1406)
60044* ftree-parallelize-loops:               Optimize Options.   (line 1361)
60045* ftree-partial-pre:                     Optimize Options.   (line  969)
60046* ftree-phiprop:                         Optimize Options.   (line  984)
60047* ftree-pre:                             Optimize Options.   (line  965)
60048* ftree-pta:                             Optimize Options.   (line 1370)
60049* ftree-reassoc:                         Optimize Options.   (line  954)
60050* ftree-scev-cprop:                      Optimize Options.   (line 1347)
60051* ftree-sink:                            Optimize Options.   (line 1148)
60052* ftree-slp-vectorize:                   Optimize Options.   (line 1411)
60053* ftree-slsr:                            Optimize Options.   (line 1395)
60054* ftree-sra:                             Optimize Options.   (line 1374)
60055* ftree-switch-conversion:               Optimize Options.   (line 1175)
60056* ftree-tail-merge:                      Optimize Options.   (line 1180)
60057* ftree-ter:                             Optimize Options.   (line 1387)
60058* ftree-vectorize:                       Optimize Options.   (line 1401)
60059* ftree-vrp:                             Optimize Options.   (line 1437)
60060* funconstrained-commons:                Optimize Options.   (line  546)
60061* funit-at-a-time:                       Optimize Options.   (line 1740)
60062* funroll-all-loops:                     Optimize Options.   (line 2448)
60063* funroll-loops:                         Optimize Options.   (line 2438)
60064* funsafe-math-optimizations:            Optimize Options.   (line 2201)
60065* funsigned-bitfields:                   C Dialect Options.  (line  432)
60066* funsigned-bitfields <1>:               Structures unions enumerations and bit-fields implementation.
60067                                                             (line   17)
60068* funsigned-bitfields <2>:               Non-bugs.           (line   57)
60069* funsigned-char:                        C Dialect Options.  (line  404)
60070* funsigned-char <1>:                    Characters implementation.
60071                                                             (line   31)
60072* funswitch-loops:                       Optimize Options.   (line 2472)
60073* funwind-tables:                        Code Gen Options.   (line  149)
60074* fuse-cxa-atexit:                       C++ Dialect Options.
60075                                                             (line  408)
60076* fuse-cxa-get-exception-ptr:            C++ Dialect Options.
60077                                                             (line  415)
60078* fuse-ld=bfd:                           Link Options.       (line   75)
60079* fuse-ld=gold:                          Link Options.       (line   78)
60080* fuse-ld=lld:                           Link Options.       (line   81)
60081* fuse-linker-plugin:                    Optimize Options.   (line 1996)
60082* fvar-tracking:                         Debugging Options.  (line  150)
60083* fvar-tracking-assignments:             Debugging Options.  (line  160)
60084* fvar-tracking-assignments-toggle:      Developer Options.  (line  829)
60085* fvariable-expansion-in-unroller:       Optimize Options.   (line 1465)
60086* fvect-cost-model:                      Optimize Options.   (line 1416)
60087* fverbose-asm:                          Code Gen Options.   (line  268)
60088* fversion-loops-for-strides:            Optimize Options.   (line 2479)
60089* fvisibility:                           Code Gen Options.   (line  530)
60090* fvisibility-inlines-hidden:            C++ Dialect Options.
60091                                                             (line  420)
60092* fvisibility-ms-compat:                 C++ Dialect Options.
60093                                                             (line  448)
60094* fvpt:                                  Optimize Options.   (line 2401)
60095* fvtable-verify:                        Instrumentation Options.
60096                                                             (line  617)
60097* fvtv-counts:                           Instrumentation Options.
60098                                                             (line  653)
60099* fvtv-debug:                            Instrumentation Options.
60100                                                             (line  640)
60101* fweak:                                 C++ Dialect Options.
60102                                                             (line  477)
60103* fweb:                                  Optimize Options.   (line 1760)
60104* fwhole-program:                        Optimize Options.   (line 1771)
60105* fwide-exec-charset:                    Preprocessor Options.
60106                                                             (line  271)
60107* fworking-directory:                    Preprocessor Options.
60108                                                             (line  314)
60109* fwrapv:                                Code Gen Options.   (line   99)
60110* fwrapv-pointer:                        Code Gen Options.   (line  109)
60111* fwritable-relocated-rdata:             x86 Windows Options.
60112                                                             (line   53)
60113* fzero-initialized-in-bss:              Optimize Options.   (line  442)
60114* fzero-link:                            Objective-C and Objective-C++ Dialect Options.
60115                                                             (line  140)
60116* g:                                     Debugging Options.  (line   25)
60117* G:                                     ARC Options.        (line  416)
60118* G <1>:                                 M32R/D Options.     (line   57)
60119* G <2>:                                 MIPS Options.       (line  460)
60120* G <3>:                                 Nios II Options.    (line    9)
60121* G <4>:                                 RS/6000 and PowerPC Options.
60122                                                             (line  718)
60123* G <5>:                                 System V Options.   (line   10)
60124* gas-loc-support:                       Debugging Options.  (line  220)
60125* gas-locview-support:                   Debugging Options.  (line  236)
60126* gcolumn-info:                          Debugging Options.  (line  248)
60127* gdescribe-dies:                        Debugging Options.  (line  178)
60128* gdwarf:                                Debugging Options.  (line   45)
60129* gen-decls:                             Objective-C and Objective-C++ Dialect Options.
60130                                                             (line  166)
60131* gfull:                                 Darwin Options.     (line   69)
60132* ggdb:                                  Debugging Options.  (line   38)
60133* ggnu-pubnames:                         Debugging Options.  (line  186)
60134* ginline-points:                        Debugging Options.  (line  307)
60135* ginternal-reset-location-views:        Debugging Options.  (line  296)
60136* gno-as-loc-support:                    Debugging Options.  (line  232)
60137* gno-column-info:                       Debugging Options.  (line  248)
60138* gno-inline-points:                     Debugging Options.  (line  307)
60139* gno-internal-reset-location-views:     Debugging Options.  (line  296)
60140* gno-record-gcc-switches:               Debugging Options.  (line  201)
60141* gno-statement-frontiers:               Debugging Options.  (line  253)
60142* gno-strict-dwarf:                      Debugging Options.  (line  216)
60143* gno-variable-location-views:           Debugging Options.  (line  264)
60144* gpubnames:                             Debugging Options.  (line  183)
60145* grecord-gcc-switches:                  Debugging Options.  (line  201)
60146* gsplit-dwarf:                          Debugging Options.  (line  171)
60147* gstabs:                                Debugging Options.  (line   63)
60148* gstabs+:                               Debugging Options.  (line   71)
60149* gstatement-frontiers:                  Debugging Options.  (line  253)
60150* gstrict-dwarf:                         Debugging Options.  (line  210)
60151* gtoggle:                               Developer Options.  (line  821)
60152* gused:                                 Darwin Options.     (line   64)
60153* gvariable-location-views:              Debugging Options.  (line  264)
60154* gvariable-location-views=incompat5:    Debugging Options.  (line  264)
60155* gvms:                                  Debugging Options.  (line   90)
60156* gxcoff:                                Debugging Options.  (line   77)
60157* gxcoff+:                               Debugging Options.  (line   82)
60158* gz:                                    Debugging Options.  (line  316)
60159* H:                                     Preprocessor Options.
60160                                                             (line  396)
60161* headerpad_max_install_names:           Darwin Options.     (line  196)
60162* help:                                  Overall Options.    (line  220)
60163* I:                                     Directory Options.  (line   13)
60164* I-:                                    Directory Options.  (line   65)
60165* idirafter:                             Directory Options.  (line   13)
60166* iframework:                            Darwin Options.     (line   57)
60167* imacros:                               Preprocessor Options.
60168                                                             (line   57)
60169* image_base:                            Darwin Options.     (line  196)
60170* imultilib:                             Directory Options.  (line   98)
60171* include:                               Preprocessor Options.
60172                                                             (line   46)
60173* init:                                  Darwin Options.     (line  196)
60174* install_name:                          Darwin Options.     (line  196)
60175* iplugindir=:                           Directory Options.  (line  113)
60176* iprefix:                               Directory Options.  (line   80)
60177* iquote:                                Directory Options.  (line   13)
60178* isysroot:                              Directory Options.  (line   92)
60179* isystem:                               Directory Options.  (line   13)
60180* iwithprefix:                           Directory Options.  (line   86)
60181* iwithprefixbefore:                     Directory Options.  (line   86)
60182* keep_private_externs:                  Darwin Options.     (line  196)
60183* l:                                     Link Options.       (line   85)
60184* L:                                     Directory Options.  (line  118)
60185* lobjc:                                 Link Options.       (line  111)
60186* M:                                     Preprocessor Options.
60187                                                             (line   77)
60188* m:                                     RS/6000 and PowerPC Options.
60189                                                             (line  526)
60190* m1:                                    SH Options.         (line    9)
60191* m10:                                   PDP-11 Options.     (line   29)
60192* m128bit-long-double:                   x86 Options.        (line  563)
60193* m16:                                   x86 Options.        (line 1402)
60194* m16-bit:                               CRIS Options.       (line   64)
60195* m16-bit <1>:                           NDS32 Options.      (line   51)
60196* m1reg-:                                Adapteva Epiphany Options.
60197                                                             (line  131)
60198* m2:                                    SH Options.         (line   12)
60199* m210:                                  MCore Options.      (line   43)
60200* m2a:                                   SH Options.         (line   30)
60201* m2a-nofpu:                             SH Options.         (line   18)
60202* m2a-single:                            SH Options.         (line   26)
60203* m2a-single-only:                       SH Options.         (line   22)
60204* m3:                                    SH Options.         (line   34)
60205* m31:                                   S/390 and zSeries Options.
60206                                                             (line   86)
60207* m32:                                   Nvidia PTX Options. (line   10)
60208* m32 <1>:                               RS/6000 and PowerPC Options.
60209                                                             (line  250)
60210* m32 <2>:                               SPARC Options.      (line  315)
60211* m32 <3>:                               TILE-Gx Options.    (line   23)
60212* m32 <4>:                               TILEPro Options.    (line   13)
60213* m32 <5>:                               x86 Options.        (line 1402)
60214* m32-bit:                               CRIS Options.       (line   64)
60215* m32bit-doubles:                        RL78 Options.       (line   73)
60216* m32bit-doubles <1>:                    RX Options.         (line   10)
60217* m32r:                                  M32R/D Options.     (line   15)
60218* m32r2:                                 M32R/D Options.     (line    9)
60219* m32rx:                                 M32R/D Options.     (line   12)
60220* m340:                                  MCore Options.      (line   43)
60221* m3dnow:                                x86 Options.        (line  789)
60222* m3dnowa:                               x86 Options.        (line  790)
60223* m3e:                                   SH Options.         (line   37)
60224* m4:                                    SH Options.         (line   51)
60225* m4-100:                                SH Options.         (line   54)
60226* m4-100-nofpu:                          SH Options.         (line   57)
60227* m4-100-single:                         SH Options.         (line   61)
60228* m4-100-single-only:                    SH Options.         (line   65)
60229* m4-200:                                SH Options.         (line   69)
60230* m4-200-nofpu:                          SH Options.         (line   72)
60231* m4-200-single:                         SH Options.         (line   76)
60232* m4-200-single-only:                    SH Options.         (line   80)
60233* m4-300:                                SH Options.         (line   84)
60234* m4-300-nofpu:                          SH Options.         (line   87)
60235* m4-300-single:                         SH Options.         (line   91)
60236* m4-300-single-only:                    SH Options.         (line   95)
60237* m4-340:                                SH Options.         (line   99)
60238* m4-500:                                SH Options.         (line  102)
60239* m4-nofpu:                              SH Options.         (line   40)
60240* m4-single:                             SH Options.         (line   47)
60241* m4-single-only:                        SH Options.         (line   43)
60242* m40:                                   PDP-11 Options.     (line   23)
60243* m45:                                   PDP-11 Options.     (line   26)
60244* m4a:                                   SH Options.         (line  118)
60245* m4a-nofpu:                             SH Options.         (line  106)
60246* m4a-single:                            SH Options.         (line  114)
60247* m4a-single-only:                       SH Options.         (line  110)
60248* m4al:                                  SH Options.         (line  121)
60249* m4byte-functions:                      MCore Options.      (line   27)
60250* m5200:                                 M680x0 Options.     (line  144)
60251* m5206e:                                M680x0 Options.     (line  153)
60252* m528x:                                 M680x0 Options.     (line  157)
60253* m5307:                                 M680x0 Options.     (line  161)
60254* m5407:                                 M680x0 Options.     (line  165)
60255* m64:                                   Nvidia PTX Options. (line   10)
60256* m64 <1>:                               RS/6000 and PowerPC Options.
60257                                                             (line  250)
60258* m64 <2>:                               S/390 and zSeries Options.
60259                                                             (line   86)
60260* m64 <3>:                               SPARC Options.      (line  315)
60261* m64 <4>:                               TILE-Gx Options.    (line   23)
60262* m64 <5>:                               x86 Options.        (line 1402)
60263* m64bit-doubles:                        RL78 Options.       (line   73)
60264* m64bit-doubles <1>:                    RX Options.         (line   10)
60265* m68000:                                M680x0 Options.     (line   93)
60266* m68010:                                M680x0 Options.     (line  101)
60267* m68020:                                M680x0 Options.     (line  107)
60268* m68020-40:                             M680x0 Options.     (line  175)
60269* m68020-60:                             M680x0 Options.     (line  184)
60270* m68030:                                M680x0 Options.     (line  112)
60271* m68040:                                M680x0 Options.     (line  117)
60272* m68060:                                M680x0 Options.     (line  126)
60273* m68881:                                M680x0 Options.     (line  194)
60274* m8-bit:                                CRIS Options.       (line   64)
60275* m8bit-idiv:                            x86 Options.        (line 1323)
60276* m8byte-align:                          V850 Options.       (line  170)
60277* m96bit-long-double:                    x86 Options.        (line  563)
60278* mA6:                                   ARC Options.        (line   23)
60279* mA7:                                   ARC Options.        (line   30)
60280* mabi:                                  AArch64 Options.    (line    9)
60281* mabi <1>:                              ARM Options.        (line    9)
60282* mabi <2>:                              RISC-V Options.     (line   17)
60283* mabi <3>:                              RS/6000 and PowerPC Options.
60284                                                             (line  557)
60285* mabi <4>:                              x86 Options.        (line 1017)
60286* mabi=32:                               MIPS Options.       (line  156)
60287* mabi=64:                               MIPS Options.       (line  156)
60288* mabi=eabi:                             MIPS Options.       (line  156)
60289* mabi=elfv1:                            RS/6000 and PowerPC Options.
60290                                                             (line  578)
60291* mabi=elfv2:                            RS/6000 and PowerPC Options.
60292                                                             (line  584)
60293* mabi=gnu:                              MMIX Options.       (line   20)
60294* mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
60295                                                             (line  562)
60296* mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
60297                                                             (line  570)
60298* mabi=mmixware:                         MMIX Options.       (line   20)
60299* mabi=n32:                              MIPS Options.       (line  156)
60300* mabi=o64:                              MIPS Options.       (line  156)
60301* mabicalls:                             MIPS Options.       (line  192)
60302* mabm:                                  x86 Options.        (line  792)
60303* mabort-on-noreturn:                    ARM Options.        (line  655)
60304* mabs=2008:                             MIPS Options.       (line  300)
60305* mabs=legacy:                           MIPS Options.       (line  300)
60306* mabsdata:                              AVR Options.        (line  163)
60307* mabsdiff:                              MeP Options.        (line    7)
60308* mac0:                                  PDP-11 Options.     (line   16)
60309* macc-4:                                FRV Options.        (line  139)
60310* macc-8:                                FRV Options.        (line  143)
60311* maccumulate-args:                      AVR Options.        (line  170)
60312* maccumulate-outgoing-args:             SH Options.         (line  314)
60313* maccumulate-outgoing-args <1>:         x86 Options.        (line 1061)
60314* maddress-mode=long:                    x86 Options.        (line 1452)
60315* maddress-mode=short:                   x86 Options.        (line 1457)
60316* maddress-space-conversion:             SPU Options.        (line   68)
60317* mads:                                  RS/6000 and PowerPC Options.
60318                                                             (line  618)
60319* madx:                                  x86 Options.        (line  793)
60320* maes:                                  x86 Options.        (line  770)
60321* maix-struct-return:                    RS/6000 and PowerPC Options.
60322                                                             (line  550)
60323* maix32:                                RS/6000 and PowerPC Options.
60324                                                             (line  288)
60325* maix64:                                RS/6000 and PowerPC Options.
60326                                                             (line  288)
60327* malign-300:                            H8/300 Options.     (line   41)
60328* malign-call:                           ARC Options.        (line  435)
60329* malign-data:                           x86 Options.        (line  603)
60330* malign-double:                         x86 Options.        (line  548)
60331* malign-int:                            M680x0 Options.     (line  261)
60332* malign-labels:                         FRV Options.        (line  128)
60333* malign-loops:                          M32R/D Options.     (line   73)
60334* malign-natural:                        RS/6000 and PowerPC Options.
60335                                                             (line  326)
60336* malign-power:                          RS/6000 and PowerPC Options.
60337                                                             (line  326)
60338* malign-stringops:                      x86 Options.        (line 1197)
60339* mall-opts:                             MeP Options.        (line   11)
60340* malloc-cc:                             FRV Options.        (line   31)
60341* mallow-string-insns:                   RX Options.         (line  150)
60342* mallregs:                              RL78 Options.       (line   66)
60343* maltivec:                              RS/6000 and PowerPC Options.
60344                                                             (line  141)
60345* mam33:                                 MN10300 Options.    (line   17)
60346* mam33-2:                               MN10300 Options.    (line   24)
60347* mam34:                                 MN10300 Options.    (line   27)
60348* manchor:                               C-SKY Options.      (line  110)
60349* mandroid:                              GNU/Linux Options.  (line   26)
60350* mannotate-align:                       ARC Options.        (line  382)
60351* mapcs:                                 ARM Options.        (line   21)
60352* mapcs-frame:                           ARM Options.        (line   13)
60353* mapp-regs:                             SPARC Options.      (line   10)
60354* mapp-regs <1>:                         V850 Options.       (line  181)
60355* mARC600:                               ARC Options.        (line   23)
60356* mARC601:                               ARC Options.        (line   27)
60357* mARC700:                               ARC Options.        (line   30)
60358* march:                                 AArch64 Options.    (line  163)
60359* march <1>:                             AMD GCN Options.    (line    9)
60360* march <2>:                             ARM Options.        (line   80)
60361* march <3>:                             C6X Options.        (line    7)
60362* march <4>:                             CRIS Options.       (line   10)
60363* march <5>:                             HPPA Options.       (line    9)
60364* march <6>:                             HPPA Options.       (line  162)
60365* march <7>:                             M680x0 Options.     (line   12)
60366* march <8>:                             MIPS Options.       (line   14)
60367* march <9>:                             NDS32 Options.      (line   64)
60368* march <10>:                            Nios II Options.    (line   94)
60369* march <11>:                            Nvidia PTX Options. (line   13)
60370* march <12>:                            RISC-V Options.     (line   54)
60371* march <13>:                            S/390 and zSeries Options.
60372                                                             (line  148)
60373* march <14>:                            x86 Options.        (line    9)
60374* march=:                                C-SKY Options.      (line    9)
60375* marclinux:                             ARC Options.        (line  388)
60376* marclinux_prof:                        ARC Options.        (line  395)
60377* margonaut:                             ARC Options.        (line  593)
60378* marm:                                  ARM Options.        (line  727)
60379* mas100-syntax:                         RX Options.         (line   76)
60380* masm-hex:                              MSP430 Options.     (line    9)
60381* masm-syntax-unified:                   ARM Options.        (line  828)
60382* masm=DIALECT:                          x86 Options.        (line  497)
60383* matomic:                               ARC Options.        (line  155)
60384* matomic-model=MODEL:                   SH Options.         (line  193)
60385* matomic-updates:                       SPU Options.        (line   83)
60386* mauto-litpools:                        Xtensa Options.     (line   60)
60387* mauto-modify-reg:                      ARC Options.        (line  438)
60388* mauto-pic:                             IA-64 Options.      (line   50)
60389* maverage:                              MeP Options.        (line   16)
60390* mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
60391                                                             (line  365)
60392* mavx:                                  x86 Options.        (line  758)
60393* mavx2:                                 x86 Options.        (line  759)
60394* mavx256-split-unaligned-load:          x86 Options.        (line 1331)
60395* mavx256-split-unaligned-store:         x86 Options.        (line 1331)
60396* mavx5124fmaps:                         x86 Options.        (line  817)
60397* mavx5124vnniw:                         x86 Options.        (line  819)
60398* mavx512bitalg:                         x86 Options.        (line  813)
60399* mavx512bw:                             x86 Options.        (line  765)
60400* mavx512cd:                             x86 Options.        (line  763)
60401* mavx512dq:                             x86 Options.        (line  766)
60402* mavx512er:                             x86 Options.        (line  762)
60403* mavx512f:                              x86 Options.        (line  760)
60404* mavx512ifma:                           x86 Options.        (line  767)
60405* mavx512pf:                             x86 Options.        (line  761)
60406* mavx512vbmi:                           x86 Options.        (line  768)
60407* mavx512vbmi2:                          x86 Options.        (line  808)
60408* mavx512vl:                             x86 Options.        (line  764)
60409* mavx512vnni:                           x86 Options.        (line  818)
60410* mavx512vpopcntdq:                      x86 Options.        (line  816)
60411* max-vect-align:                        Adapteva Epiphany Options.
60412                                                             (line  119)
60413* mb:                                    SH Options.         (line  126)
60414* mbackchain:                            S/390 and zSeries Options.
60415                                                             (line   35)
60416* mbarrel-shift-enabled:                 LM32 Options.       (line    9)
60417* mbarrel-shifter:                       ARC Options.        (line   10)
60418* mbarrel_shifter:                       ARC Options.        (line  613)
60419* mbase-addresses:                       MMIX Options.       (line   53)
60420* mbased=:                               MeP Options.        (line   20)
60421* mbbit-peephole:                        ARC Options.        (line  441)
60422* mbe8:                                  ARM Options.        (line   72)
60423* mbig:                                  RS/6000 and PowerPC Options.
60424                                                             (line  445)
60425* mbig-endian:                           AArch64 Options.    (line   20)
60426* mbig-endian <1>:                       ARC Options.        (line  596)
60427* mbig-endian <2>:                       ARM Options.        (line   67)
60428* mbig-endian <3>:                       C6X Options.        (line   13)
60429* mbig-endian <4>:                       C-SKY Options.      (line   28)
60430* mbig-endian <5>:                       IA-64 Options.      (line    9)
60431* mbig-endian <6>:                       MCore Options.      (line   39)
60432* mbig-endian <7>:                       MicroBlaze Options. (line   56)
60433* mbig-endian <8>:                       NDS32 Options.      (line    9)
60434* mbig-endian <9>:                       RS/6000 and PowerPC Options.
60435                                                             (line  445)
60436* mbig-endian <10>:                      TILE-Gx Options.    (line   29)
60437* mbig-endian-data:                      RX Options.         (line   42)
60438* mbig-switch:                           V850 Options.       (line  176)
60439* mbigtable:                             SH Options.         (line  141)
60440* mbionic:                               GNU/Linux Options.  (line   22)
60441* mbit-align:                            RS/6000 and PowerPC Options.
60442                                                             (line  397)
60443* mbit-ops:                              CR16 Options.       (line   25)
60444* mbitfield:                             M680x0 Options.     (line  231)
60445* mbitops:                               MeP Options.        (line   26)
60446* mbitops <1>:                           SH Options.         (line  145)
60447* mblock-compare-inline-limit:           RS/6000 and PowerPC Options.
60448                                                             (line  698)
60449* mblock-compare-inline-loop-limit:      RS/6000 and PowerPC Options.
60450                                                             (line  704)
60451* mblock-move-inline-limit:              RS/6000 and PowerPC Options.
60452                                                             (line  692)
60453* mbmi:                                  x86 Options.        (line  794)
60454* mbmi2:                                 x86 Options.        (line  795)
60455* mboard:                                OpenRISC Options.   (line    9)
60456* mbranch-cost:                          Adapteva Epiphany Options.
60457                                                             (line   18)
60458* mbranch-cost <1>:                      AVR Options.        (line  185)
60459* mbranch-cost <2>:                      MIPS Options.       (line  785)
60460* mbranch-cost <3>:                      RISC-V Options.     (line    9)
60461* mbranch-cost=:                         C-SKY Options.      (line  143)
60462* mbranch-cost=NUM:                      SH Options.         (line  334)
60463* mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
60464* mbranch-hints:                         SPU Options.        (line   29)
60465* mbranch-index:                         ARC Options.        (line  329)
60466* mbranch-likely:                        MIPS Options.       (line  792)
60467* mbranch-predict:                       MMIX Options.       (line   48)
60468* mbranch-protection:                    AArch64 Options.    (line  276)
60469* mbss-plt:                              RS/6000 and PowerPC Options.
60470                                                             (line  165)
60471* mbuild-constants:                      DEC Alpha Options.  (line  141)
60472* mbwx:                                  DEC Alpha Options.  (line  163)
60473* mbypass-cache:                         Nios II Options.    (line  103)
60474* mc68000:                               M680x0 Options.     (line   93)
60475* mc68020:                               M680x0 Options.     (line  107)
60476* mc=:                                   MeP Options.        (line   31)
60477* mcache:                                C-SKY Options.      (line   77)
60478* mcache-block-size:                     NDS32 Options.      (line   60)
60479* mcache-size:                           SPU Options.        (line   75)
60480* mcache-volatile:                       Nios II Options.    (line  109)
60481* mcall-eabi:                            RS/6000 and PowerPC Options.
60482                                                             (line  520)
60483* mcall-freebsd:                         RS/6000 and PowerPC Options.
60484                                                             (line  534)
60485* mcall-linux:                           RS/6000 and PowerPC Options.
60486                                                             (line  530)
60487* mcall-ms2sysv-xlogues:                 x86 Options.        (line 1037)
60488* mcall-netbsd:                          RS/6000 and PowerPC Options.
60489                                                             (line  538)
60490* mcall-netbsd <1>:                      RS/6000 and PowerPC Options.
60491                                                             (line  542)
60492* mcall-prologues:                       AVR Options.        (line  190)
60493* mcall-sysv:                            RS/6000 and PowerPC Options.
60494                                                             (line  512)
60495* mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
60496                                                             (line  520)
60497* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
60498                                                             (line  523)
60499* mcallee-super-interworking:            ARM Options.        (line  756)
60500* mcaller-copies:                        HPPA Options.       (line   23)
60501* mcaller-super-interworking:            ARM Options.        (line  763)
60502* mcallgraph-data:                       MCore Options.      (line   31)
60503* mcase-vector-pcrel:                    ARC Options.        (line  450)
60504* mcbcond:                               SPARC Options.      (line  260)
60505* mcbranch-force-delay-slot:             SH Options.         (line  349)
60506* mcc-init:                              CRIS Options.       (line   42)
60507* mccrt:                                 C-SKY Options.      (line  139)
60508* mcfv4e:                                M680x0 Options.     (line  169)
60509* mcheck-zero-division:                  MIPS Options.       (line  570)
60510* mcix:                                  DEC Alpha Options.  (line  163)
60511* mcld:                                  x86 Options.        (line  870)
60512* mcldemote:                             x86 Options.        (line  820)
60513* mclear-hwcap:                          Solaris 2 Options.  (line    9)
60514* mclflushopt:                           x86 Options.        (line  772)
60515* mclip:                                 MeP Options.        (line   35)
60516* mclwb:                                 x86 Options.        (line  773)
60517* mclzero:                               x86 Options.        (line  806)
60518* mcmodel:                               NDS32 Options.      (line   67)
60519* mcmodel <1>:                           SPARC Options.      (line  320)
60520* mcmodel=kernel:                        x86 Options.        (line 1436)
60521* mcmodel=large:                         AArch64 Options.    (line   45)
60522* mcmodel=large <1>:                     RS/6000 and PowerPC Options.
60523                                                             (line  135)
60524* mcmodel=large <2>:                     TILE-Gx Options.    (line   14)
60525* mcmodel=large <3>:                     x86 Options.        (line 1448)
60526* mcmodel=medany:                        RISC-V Options.     (line  105)
60527* mcmodel=medium:                        RS/6000 and PowerPC Options.
60528                                                             (line  130)
60529* mcmodel=medium <1>:                    x86 Options.        (line 1441)
60530* mcmodel=medlow:                        RISC-V Options.     (line   98)
60531* mcmodel=small:                         AArch64 Options.    (line   39)
60532* mcmodel=small <1>:                     RS/6000 and PowerPC Options.
60533                                                             (line  126)
60534* mcmodel=small <2>:                     TILE-Gx Options.    (line    9)
60535* mcmodel=small <3>:                     x86 Options.        (line 1430)
60536* mcmodel=tiny:                          AArch64 Options.    (line   34)
60537* mcmov:                                 NDS32 Options.      (line   21)
60538* mcmov <1>:                             OpenRISC Options.   (line   24)
60539* mcmove:                                Adapteva Epiphany Options.
60540                                                             (line   23)
60541* mcmpb:                                 RS/6000 and PowerPC Options.
60542                                                             (line   27)
60543* mcmse:                                 ARM Options.        (line  857)
60544* mcode-density:                         ARC Options.        (line  163)
60545* mcode-density-frame:                   ARC Options.        (line  511)
60546* mcode-readable:                        MIPS Options.       (line  530)
60547* mcode-region:                          MSP430 Options.     (line   93)
60548* mcompact-branches=always:              MIPS Options.       (line  804)
60549* mcompact-branches=never:               MIPS Options.       (line  804)
60550* mcompact-branches=optimal:             MIPS Options.       (line  804)
60551* mcompact-casesi:                       ARC Options.        (line  454)
60552* mcompat-align-parm:                    RS/6000 and PowerPC Options.
60553                                                             (line  903)
60554* mcompress:                             FT32 Options.       (line   26)
60555* mcond-exec:                            FRV Options.        (line  187)
60556* mcond-move:                            FRV Options.        (line  159)
60557* mconfig=:                              MeP Options.        (line   39)
60558* mconsole:                              x86 Windows Options.
60559                                                             (line    9)
60560* mconst-align:                          CRIS Options.       (line   55)
60561* mconst16:                              Xtensa Options.     (line   10)
60562* mconstant-gp:                          IA-64 Options.      (line   46)
60563* mconstpool:                            C-SKY Options.      (line  127)
60564* mcop:                                  MeP Options.        (line   48)
60565* mcop32:                                MeP Options.        (line   53)
60566* mcop64:                                MeP Options.        (line   56)
60567* mcorea:                                Blackfin Options.   (line  154)
60568* mcoreb:                                Blackfin Options.   (line  161)
60569* mcp:                                   C-SKY Options.      (line   74)
60570* mcpu:                                  AArch64 Options.    (line  232)
60571* mcpu <1>:                              ARC Options.        (line   18)
60572* mcpu <2>:                              ARM Options.        (line  526)
60573* mcpu <3>:                              CRIS Options.       (line   10)
60574* mcpu <4>:                              DEC Alpha Options.  (line  215)
60575* mcpu <5>:                              FRV Options.        (line  258)
60576* mcpu <6>:                              M680x0 Options.     (line   28)
60577* mcpu <7>:                              picoChip Options.   (line    9)
60578* mcpu <8>:                              RL78 Options.       (line   32)
60579* mcpu <9>:                              RS/6000 and PowerPC Options.
60580                                                             (line   68)
60581* mcpu <10>:                             RX Options.         (line   30)
60582* mcpu <11>:                             SPARC Options.      (line  115)
60583* mcpu <12>:                             TILE-Gx Options.    (line   18)
60584* mcpu <13>:                             TILEPro Options.    (line    9)
60585* mcpu <14>:                             Visium Options.     (line   33)
60586* mcpu <15>:                             x86 Options.        (line  443)
60587* mcpu32:                                M680x0 Options.     (line  135)
60588* mcpu=:                                 Blackfin Options.   (line    7)
60589* mcpu= <1>:                             C-SKY Options.      (line   14)
60590* mcpu= <2>:                             M32C Options.       (line    7)
60591* mcpu= <3>:                             MicroBlaze Options. (line   20)
60592* mcpu= <4>:                             MSP430 Options.     (line   42)
60593* mcr16c:                                CR16 Options.       (line   14)
60594* mcr16cplus:                            CR16 Options.       (line   14)
60595* mcrc:                                  MIPS Options.       (line  416)
60596* mcrc32:                                x86 Options.        (line  938)
60597* mcrypto:                               RS/6000 and PowerPC Options.
60598                                                             (line  182)
60599* mcsync-anomaly:                        Blackfin Options.   (line   57)
60600* mcsync-anomaly <1>:                    Blackfin Options.   (line   63)
60601* mctor-dtor:                            NDS32 Options.      (line   81)
60602* mcustom-fpu-cfg:                       Nios II Options.    (line  259)
60603* mcustom-INSN:                          Nios II Options.    (line  139)
60604* mcx16:                                 x86 Options.        (line  911)
60605* MD:                                    Preprocessor Options.
60606                                                             (line  169)
60607* mdalign:                               SH Options.         (line  132)
60608* mdata-align:                           CRIS Options.       (line   55)
60609* mdata-model:                           CR16 Options.       (line   28)
60610* mdata-region:                          MSP430 Options.     (line   93)
60611* mdc:                                   MeP Options.        (line   62)
60612* mdebug:                                M32R/D Options.     (line   69)
60613* mdebug <1>:                            S/390 and zSeries Options.
60614                                                             (line  144)
60615* mdebug <2>:                            Visium Options.     (line    7)
60616* mdebug-main=PREFIX:                    VMS Options.        (line   13)
60617* mdec-asm:                              PDP-11 Options.     (line   46)
60618* mdisable-callt:                        V850 Options.       (line   92)
60619* mdisable-fpregs:                       HPPA Options.       (line   34)
60620* mdisable-indexing:                     HPPA Options.       (line   40)
60621* mdiv:                                  C-SKY Options.      (line   93)
60622* mdiv <1>:                              M680x0 Options.     (line  206)
60623* mdiv <2>:                              MCore Options.      (line   15)
60624* mdiv <3>:                              MeP Options.        (line   65)
60625* mdiv <4>:                              RISC-V Options.     (line   49)
60626* mdiv-rem:                              ARC Options.        (line  160)
60627* mdiv=STRATEGY:                         SH Options.         (line  284)
60628* mdivide-breaks:                        MIPS Options.       (line  576)
60629* mdivide-enabled:                       LM32 Options.       (line   12)
60630* mdivide-traps:                         MIPS Options.       (line  576)
60631* mdivsi3_libfunc=NAME:                  SH Options.         (line  320)
60632* mdll:                                  x86 Windows Options.
60633                                                             (line   16)
60634* mdlmzb:                                RS/6000 and PowerPC Options.
60635                                                             (line  390)
60636* mdmx:                                  MIPS Options.       (line  376)
60637* mdouble:                               FRV Options.        (line   48)
60638* mdouble-float:                         C-SKY Options.      (line   42)
60639* mdouble-float <1>:                     MIPS Options.       (line  288)
60640* mdpfp:                                 ARC Options.        (line   99)
60641* mdpfp-compact:                         ARC Options.        (line  100)
60642* mdpfp-fast:                            ARC Options.        (line  104)
60643* mdpfp_compact:                         ARC Options.        (line  616)
60644* mdpfp_fast:                            ARC Options.        (line  619)
60645* mdsp:                                  C-SKY Options.      (line   86)
60646* mdsp <1>:                              MIPS Options.       (line  353)
60647* mdsp-packa:                            ARC Options.        (line  335)
60648* mdspr2:                                MIPS Options.       (line  359)
60649* mdsp_packa:                            ARC Options.        (line  622)
60650* mdual-nops:                            SPU Options.        (line   95)
60651* mdump-tune-features:                   x86 Options.        (line  852)
60652* mdvbf:                                 ARC Options.        (line  340)
60653* mdwarf2-asm:                           IA-64 Options.      (line   94)
60654* mdword:                                FRV Options.        (line   40)
60655* mdword <1>:                            FRV Options.        (line   44)
60656* mdynamic-no-pic:                       RS/6000 and PowerPC Options.
60657                                                             (line  450)
60658* mea:                                   ARC Options.        (line  112)
60659* mEA:                                   ARC Options.        (line  625)
60660* mea32:                                 SPU Options.        (line   60)
60661* mea64:                                 SPU Options.        (line   60)
60662* meabi:                                 RS/6000 and PowerPC Options.
60663                                                             (line  637)
60664* mearly-cbranchsi:                      ARC Options.        (line  476)
60665* mearly-stop-bits:                      IA-64 Options.      (line  100)
60666* meb:                                   MeP Options.        (line   68)
60667* meb <1>:                               Moxie Options.      (line    7)
60668* meb <2>:                               Nios II Options.    (line   90)
60669* meb <3>:                               Score Options.      (line    9)
60670* medsp:                                 C-SKY Options.      (line   87)
60671* mel:                                   MeP Options.        (line   71)
60672* mel <1>:                               Moxie Options.      (line   11)
60673* mel <2>:                               Nios II Options.    (line   90)
60674* mel <3>:                               Score Options.      (line   12)
60675* melf:                                  CRIS Options.       (line   87)
60676* melf <1>:                              MMIX Options.       (line   43)
60677* melrw:                                 C-SKY Options.      (line   60)
60678* memb:                                  RS/6000 and PowerPC Options.
60679                                                             (line  632)
60680* membedded-data:                        MIPS Options.       (line  517)
60681* memregs=:                              M32C Options.       (line   21)
60682* mep:                                   V850 Options.       (line   16)
60683* mepsilon:                              MMIX Options.       (line   15)
60684* merror-reloc:                          SPU Options.        (line   10)
60685* mesa:                                  S/390 and zSeries Options.
60686                                                             (line   94)
60687* metrax100:                             CRIS Options.       (line   27)
60688* metrax4:                               CRIS Options.       (line   27)
60689* meva:                                  MIPS Options.       (line  403)
60690* mexpand-adddi:                         ARC Options.        (line  479)
60691* mexplicit-relocs:                      DEC Alpha Options.  (line  176)
60692* mexplicit-relocs <1>:                  MIPS Options.       (line  561)
60693* mexr:                                  H8/300 Options.     (line   28)
60694* mexr <1>:                              H8/300 Options.     (line   33)
60695* mext-perf:                             NDS32 Options.      (line   27)
60696* mext-perf2:                            NDS32 Options.      (line   33)
60697* mext-string:                           NDS32 Options.      (line   39)
60698* mextern-sdata:                         MIPS Options.       (line  480)
60699* MF:                                    Preprocessor Options.
60700                                                             (line  111)
60701* mf16c:                                 x86 Options.        (line  777)
60702* mfancy-math-387:                       x86 Options.        (line  538)
60703* mfast-fp:                              Blackfin Options.   (line  130)
60704* mfast-indirect-calls:                  HPPA Options.       (line   52)
60705* mfast-sw-div:                          Nios II Options.    (line  115)
60706* mfaster-structs:                       SPARC Options.      (line   91)
60707* mfdiv:                                 RISC-V Options.     (line   42)
60708* mfdivdu:                               C-SKY Options.      (line   48)
60709* mfdpic:                                FRV Options.        (line   72)
60710* mfentry:                               x86 Options.        (line 1270)
60711* mfentry-name:                          x86 Options.        (line 1301)
60712* mfentry-section:                       x86 Options.        (line 1305)
60713* mfix:                                  DEC Alpha Options.  (line  163)
60714* mfix-24k:                              MIPS Options.       (line  641)
60715* mfix-and-continue:                     Darwin Options.     (line  104)
60716* mfix-at697f:                           SPARC Options.      (line  294)
60717* mfix-cortex-a53-835769:                AArch64 Options.    (line  104)
60718* mfix-cortex-a53-843419:                AArch64 Options.    (line  111)
60719* mfix-cortex-m3-ldrd:                   ARM Options.        (line  797)
60720* mfix-gr712rc:                          SPARC Options.      (line  307)
60721* mfix-r10000:                           MIPS Options.       (line  663)
60722* mfix-r4000:                            MIPS Options.       (line  647)
60723* mfix-r4400:                            MIPS Options.       (line  657)
60724* mfix-r5900:                            MIPS Options.       (line  674)
60725* mfix-rm7000:                           MIPS Options.       (line  684)
60726* mfix-sb1:                              MIPS Options.       (line  709)
60727* mfix-ut699:                            SPARC Options.      (line  299)
60728* mfix-ut700:                            SPARC Options.      (line  303)
60729* mfix-vr4120:                           MIPS Options.       (line  689)
60730* mfix-vr4130:                           MIPS Options.       (line  702)
60731* mfixed-cc:                             FRV Options.        (line   35)
60732* mfixed-range:                          HPPA Options.       (line   59)
60733* mfixed-range <1>:                      IA-64 Options.      (line  105)
60734* mfixed-range <2>:                      SH Options.         (line  327)
60735* mfixed-range <3>:                      SPU Options.        (line   52)
60736* mflat:                                 SPARC Options.      (line   22)
60737* mflip-mips16:                          MIPS Options.       (line  128)
60738* mflip-thumb:                           ARM Options.        (line  739)
60739* mfloat-abi:                            ARM Options.        (line   41)
60740* mfloat-ieee:                           DEC Alpha Options.  (line  171)
60741* mfloat-vax:                            DEC Alpha Options.  (line  171)
60742* mfloat128:                             RS/6000 and PowerPC Options.
60743                                                             (line  219)
60744* mfloat128-hardware:                    RS/6000 and PowerPC Options.
60745                                                             (line  241)
60746* mflush-func:                           MIPS Options.       (line  776)
60747* mflush-func=NAME:                      M32R/D Options.     (line   93)
60748* mflush-trap=NUMBER:                    M32R/D Options.     (line   86)
60749* mfma:                                  x86 Options.        (line  778)
60750* mfma4:                                 x86 Options.        (line  781)
60751* mfmaf:                                 SPARC Options.      (line  267)
60752* mfmovd:                                SH Options.         (line  148)
60753* mforce-indirect-call:                  x86 Options.        (line 1026)
60754* mforce-no-pic:                         Xtensa Options.     (line   41)
60755* mfp-exceptions:                        MIPS Options.       (line  824)
60756* mfp-mode:                              Adapteva Epiphany Options.
60757                                                             (line   71)
60758* mfp-reg:                               DEC Alpha Options.  (line   25)
60759* mfp-ret-in-387:                        x86 Options.        (line  528)
60760* mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
60761* mfp-trap-mode:                         DEC Alpha Options.  (line   63)
60762* mfp16-format:                          ARM Options.        (line  633)
60763* mfp32:                                 MIPS Options.       (line  258)
60764* mfp64:                                 MIPS Options.       (line  261)
60765* mfpmath:                               Optimize Options.   (line 2162)
60766* mfpmath <1>:                           x86 Options.        (line  446)
60767* mfpr-32:                               FRV Options.        (line   15)
60768* mfpr-64:                               FRV Options.        (line   19)
60769* mfprnd:                                RS/6000 and PowerPC Options.
60770                                                             (line   27)
60771* mfpu:                                  ARC Options.        (line  231)
60772* mfpu <1>:                              ARM Options.        (line  605)
60773* mfpu <2>:                              PDP-11 Options.     (line    9)
60774* mfpu <3>:                              SPARC Options.      (line   34)
60775* mfpu <4>:                              Visium Options.     (line   19)
60776* mfpu=:                                 C-SKY Options.      (line   53)
60777* mfpxx:                                 MIPS Options.       (line  264)
60778* mfract-convert-truncate:               AVR Options.        (line  277)
60779* mframe-header-opt:                     MIPS Options.       (line  885)
60780* mfriz:                                 RS/6000 and PowerPC Options.
60781                                                             (line  874)
60782* mfsca:                                 SH Options.         (line  365)
60783* mfsgsbase:                             x86 Options.        (line  774)
60784* mfsmuld:                               SPARC Options.      (line  274)
60785* mfsrra:                                SH Options.         (line  374)
60786* mft32b:                                FT32 Options.       (line   23)
60787* mfull-regs:                            NDS32 Options.      (line   18)
60788* mfull-toc:                             RS/6000 and PowerPC Options.
60789                                                             (line  261)
60790* mfunction-return:                      x86 Options.        (line 1373)
60791* mfused-madd:                           IA-64 Options.      (line   88)
60792* mfused-madd <1>:                       MIPS Options.       (line  624)
60793* mfused-madd <2>:                       RS/6000 and PowerPC Options.
60794                                                             (line  374)
60795* mfused-madd <3>:                       S/390 and zSeries Options.
60796                                                             (line  174)
60797* mfused-madd <4>:                       SH Options.         (line  356)
60798* mfused-madd <5>:                       Xtensa Options.     (line   19)
60799* mfxsr:                                 x86 Options.        (line  797)
60800* MG:                                    Preprocessor Options.
60801                                                             (line  122)
60802* mg:                                    VAX Options.        (line   17)
60803* mg10:                                  RL78 Options.       (line   62)
60804* mg13:                                  RL78 Options.       (line   62)
60805* mg14:                                  RL78 Options.       (line   62)
60806* mgas:                                  HPPA Options.       (line   75)
60807* mgas-isr-prologues:                    AVR Options.        (line  194)
60808* mgcc-abi:                              V850 Options.       (line  148)
60809* mgeneral-regs-only:                    AArch64 Options.    (line   24)
60810* mgeneral-regs-only <1>:                ARM Options.        (line   57)
60811* mgeneral-regs-only <2>:                x86 Options.        (line 1349)
60812* mgfni:                                 x86 Options.        (line  809)
60813* mghs:                                  V850 Options.       (line  127)
60814* mginv:                                 MIPS Options.       (line  421)
60815* mglibc:                                GNU/Linux Options.  (line    9)
60816* mgnu:                                  VAX Options.        (line   13)
60817* mgnu-as:                               IA-64 Options.      (line   18)
60818* mgnu-asm:                              PDP-11 Options.     (line   49)
60819* mgnu-attribute:                        RS/6000 and PowerPC Options.
60820                                                             (line  591)
60821* mgnu-ld:                               HPPA Options.       (line  111)
60822* mgnu-ld <1>:                           IA-64 Options.      (line   23)
60823* mgomp:                                 Nvidia PTX Options. (line   53)
60824* mgotplt:                               CRIS Options.       (line   81)
60825* mgp32:                                 MIPS Options.       (line  252)
60826* mgp64:                                 MIPS Options.       (line  255)
60827* mgpopt:                                MIPS Options.       (line  502)
60828* mgpopt <1>:                            Nios II Options.    (line   16)
60829* mgpr-32:                               FRV Options.        (line    7)
60830* mgpr-64:                               FRV Options.        (line   11)
60831* mgprel-ro:                             FRV Options.        (line   99)
60832* mgprel-sec:                            Nios II Options.    (line   65)
60833* mh:                                    H8/300 Options.     (line   14)
60834* mhal:                                  Nios II Options.    (line  304)
60835* mhalf-reg-file:                        Adapteva Epiphany Options.
60836                                                             (line    9)
60837* mhard-dfp:                             RS/6000 and PowerPC Options.
60838                                                             (line   27)
60839* mhard-dfp <1>:                         S/390 and zSeries Options.
60840                                                             (line   20)
60841* mhard-div:                             OpenRISC Options.   (line   16)
60842* mhard-float:                           C-SKY Options.      (line   35)
60843* mhard-float <1>:                       FRV Options.        (line   23)
60844* mhard-float <2>:                       M680x0 Options.     (line  194)
60845* mhard-float <3>:                       MicroBlaze Options. (line   10)
60846* mhard-float <4>:                       MIPS Options.       (line  267)
60847* mhard-float <5>:                       RS/6000 and PowerPC Options.
60848                                                             (line  338)
60849* mhard-float <6>:                       S/390 and zSeries Options.
60850                                                             (line   11)
60851* mhard-float <7>:                       SPARC Options.      (line   34)
60852* mhard-float <8>:                       V850 Options.       (line  113)
60853* mhard-float <9>:                       Visium Options.     (line   19)
60854* mhard-float <10>:                      x86 Options.        (line  511)
60855* mhard-mul:                             OpenRISC Options.   (line   20)
60856* mhard-quad-float:                      SPARC Options.      (line   55)
60857* mharden-sls:                           AArch64 Options.    (line  288)
60858* mhardlit:                              MCore Options.      (line   10)
60859* mhigh-registers:                       C-SKY Options.      (line  104)
60860* mhint-max-distance:                    SPU Options.        (line  107)
60861* mhint-max-nops:                        SPU Options.        (line  101)
60862* mhle:                                  x86 Options.        (line  803)
60863* mhotpatch:                             S/390 and zSeries Options.
60864                                                             (line  209)
60865* mhp-ld:                                HPPA Options.       (line  123)
60866* mhtm:                                  RS/6000 and PowerPC Options.
60867                                                             (line  188)
60868* mhtm <1>:                              S/390 and zSeries Options.
60869                                                             (line  104)
60870* mhw-div:                               Nios II Options.    (line  124)
60871* mhw-mul:                               Nios II Options.    (line  124)
60872* mhw-mulx:                              Nios II Options.    (line  124)
60873* mhwmult=:                              MSP430 Options.     (line   63)
60874* miamcu:                                x86 Options.        (line 1402)
60875* micplb:                                Blackfin Options.   (line  175)
60876* mid-shared-library:                    Blackfin Options.   (line   78)
60877* mid-shared-library <1>:                Blackfin Options.   (line   85)
60878* mieee:                                 DEC Alpha Options.  (line   39)
60879* mieee <1>:                             SH Options.         (line  165)
60880* mieee-conformant:                      DEC Alpha Options.  (line  134)
60881* mieee-fp:                              x86 Options.        (line  505)
60882* mieee-with-inexact:                    DEC Alpha Options.  (line   52)
60883* milp32:                                IA-64 Options.      (line  121)
60884* mimadd:                                MIPS Options.       (line  617)
60885* mimpure-text:                          Solaris 2 Options.  (line   15)
60886* mincoming-stack-boundary:              x86 Options.        (line  724)
60887* mindexed-loads:                        ARC Options.        (line  483)
60888* mindirect-branch:                      x86 Options.        (line 1354)
60889* mindirect-branch-register:             x86 Options.        (line 1392)
60890* minline-all-stringops:                 x86 Options.        (line 1202)
60891* minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
60892* minline-float-divide-min-latency:      IA-64 Options.      (line   54)
60893* minline-ic_invalidate:                 SH Options.         (line  174)
60894* minline-int-divide:                    IA-64 Options.      (line   73)
60895* minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
60896* minline-int-divide-min-latency:        IA-64 Options.      (line   65)
60897* minline-plt:                           Blackfin Options.   (line  135)
60898* minline-plt <1>:                       FRV Options.        (line   81)
60899* minline-sqrt-max-throughput:           IA-64 Options.      (line   80)
60900* minline-sqrt-min-latency:              IA-64 Options.      (line   76)
60901* minline-stringops-dynamically:         x86 Options.        (line 1209)
60902* minrt:                                 MSP430 Options.     (line   85)
60903* minsert-sched-nops:                    RS/6000 and PowerPC Options.
60904                                                             (line  490)
60905* minstrument-return:                    x86 Options.        (line 1289)
60906* mint-register:                         RX Options.         (line  100)
60907* mint16:                                PDP-11 Options.     (line   33)
60908* mint32:                                CR16 Options.       (line   22)
60909* mint32 <1>:                            H8/300 Options.     (line   38)
60910* mint32 <2>:                            PDP-11 Options.     (line   37)
60911* mint8:                                 AVR Options.        (line  204)
60912* minterlink-compressed:                 MIPS Options.       (line  135)
60913* minterlink-mips16:                     MIPS Options.       (line  147)
60914* mio-volatile:                          MeP Options.        (line   74)
60915* mips1:                                 MIPS Options.       (line   80)
60916* mips16:                                MIPS Options.       (line  120)
60917* mips2:                                 MIPS Options.       (line   83)
60918* mips3:                                 MIPS Options.       (line   86)
60919* mips32:                                MIPS Options.       (line   92)
60920* mips32r3:                              MIPS Options.       (line   95)
60921* mips32r5:                              MIPS Options.       (line   98)
60922* mips32r6:                              MIPS Options.       (line  101)
60923* mips3d:                                MIPS Options.       (line  382)
60924* mips4:                                 MIPS Options.       (line   89)
60925* mips64:                                MIPS Options.       (line  104)
60926* mips64r2:                              MIPS Options.       (line  107)
60927* mips64r3:                              MIPS Options.       (line  110)
60928* mips64r5:                              MIPS Options.       (line  113)
60929* mips64r6:                              MIPS Options.       (line  116)
60930* mirq-ctrl-saved:                       ARC Options.        (line  296)
60931* misel:                                 RS/6000 and PowerPC Options.
60932                                                             (line  171)
60933* misize:                                ARC Options.        (line  379)
60934* misize <1>:                            SH Options.         (line  186)
60935* misr-vector-size:                      NDS32 Options.      (line   57)
60936* missue-rate=NUMBER:                    M32R/D Options.     (line   79)
60937* mistack:                               C-SKY Options.      (line   65)
60938* mivc2:                                 MeP Options.        (line   59)
60939* mjli-alawys:                           ARC Options.        (line   14)
60940* mjsr:                                  RX Options.         (line  169)
60941* mjump-in-delay:                        HPPA Options.       (line   30)
60942* mkernel:                               Darwin Options.     (line   82)
60943* mknuthdiv:                             MMIX Options.       (line   32)
60944* ml:                                    MeP Options.        (line   78)
60945* ml <1>:                                SH Options.         (line  129)
60946* mlarge:                                MSP430 Options.     (line   52)
60947* mlarge-data:                           DEC Alpha Options.  (line  187)
60948* mlarge-data-threshold:                 x86 Options.        (line  610)
60949* mlarge-mem:                            SPU Options.        (line   38)
60950* mlarge-text:                           DEC Alpha Options.  (line  205)
60951* mleadz:                                MeP Options.        (line   81)
60952* mleaf-id-shared-library:               Blackfin Options.   (line   89)
60953* mleaf-id-shared-library <1>:           Blackfin Options.   (line   95)
60954* mlibfuncs:                             MMIX Options.       (line   10)
60955* mlibrary-pic:                          FRV Options.        (line  135)
60956* mlinked-fp:                            FRV Options.        (line  116)
60957* mlinker-opt:                           HPPA Options.       (line   85)
60958* mlinux:                                CRIS Options.       (line   91)
60959* mlittle:                               RS/6000 and PowerPC Options.
60960                                                             (line  439)
60961* mlittle-endian:                        AArch64 Options.    (line   30)
60962* mlittle-endian <1>:                    ARC Options.        (line  605)
60963* mlittle-endian <2>:                    ARM Options.        (line   63)
60964* mlittle-endian <3>:                    C6X Options.        (line   16)
60965* mlittle-endian <4>:                    C-SKY Options.      (line   30)
60966* mlittle-endian <5>:                    IA-64 Options.      (line   13)
60967* mlittle-endian <6>:                    MCore Options.      (line   39)
60968* mlittle-endian <7>:                    MicroBlaze Options. (line   59)
60969* mlittle-endian <8>:                    NDS32 Options.      (line   12)
60970* mlittle-endian <9>:                    RS/6000 and PowerPC Options.
60971                                                             (line  439)
60972* mlittle-endian <10>:                   TILE-Gx Options.    (line   29)
60973* mlittle-endian-data:                   RX Options.         (line   42)
60974* mliw:                                  MN10300 Options.    (line   54)
60975* mll64:                                 ARC Options.        (line  167)
60976* mllsc:                                 MIPS Options.       (line  339)
60977* mload-store-pairs:                     MIPS Options.       (line  590)
60978* mlocal-sdata:                          MIPS Options.       (line  468)
60979* mlock:                                 ARC Options.        (line  345)
60980* mlong-calls:                           Adapteva Epiphany Options.
60981                                                             (line   55)
60982* mlong-calls <1>:                       ARC Options.        (line  404)
60983* mlong-calls <2>:                       ARM Options.        (line  660)
60984* mlong-calls <3>:                       Blackfin Options.   (line  118)
60985* mlong-calls <4>:                       FRV Options.        (line  122)
60986* mlong-calls <5>:                       HPPA Options.       (line  136)
60987* mlong-calls <6>:                       MIPS Options.       (line  603)
60988* mlong-calls <7>:                       V850 Options.       (line   10)
60989* mlong-double-128:                      S/390 and zSeries Options.
60990                                                             (line   29)
60991* mlong-double-128 <1>:                  x86 Options.        (line  589)
60992* mlong-double-64:                       S/390 and zSeries Options.
60993                                                             (line   29)
60994* mlong-double-64 <1>:                   x86 Options.        (line  589)
60995* mlong-double-80:                       x86 Options.        (line  589)
60996* mlong-jump-table-offsets:              M680x0 Options.     (line  340)
60997* mlong-jumps:                           V850 Options.       (line  108)
60998* mlong-load-store:                      HPPA Options.       (line   66)
60999* mlong32:                               MIPS Options.       (line  443)
61000* mlong64:                               MIPS Options.       (line  438)
61001* mlongcall:                             RS/6000 and PowerPC Options.
61002                                                             (line  732)
61003* mlongcalls:                            Xtensa Options.     (line   87)
61004* mloongson-ext:                         MIPS Options.       (line  430)
61005* mloongson-ext2:                        MIPS Options.       (line  434)
61006* mloongson-mmi:                         MIPS Options.       (line  425)
61007* mloop:                                 V850 Options.       (line  121)
61008* mlow-precision-div:                    AArch64 Options.    (line  134)
61009* mlow-precision-recip-sqrt:             AArch64 Options.    (line  117)
61010* mlow-precision-sqrt:                   AArch64 Options.    (line  125)
61011* mlow64k:                               Blackfin Options.   (line   67)
61012* mlp64:                                 IA-64 Options.      (line  121)
61013* mlpc-width:                            ARC Options.        (line  313)
61014* mlra:                                  ARC Options.        (line  488)
61015* mlra <1>:                              FT32 Options.       (line   16)
61016* mlra <2>:                              PDP-11 Options.     (line   52)
61017* mlra <3>:                              SPARC Options.      (line  111)
61018* mlra-priority-compact:                 ARC Options.        (line  496)
61019* mlra-priority-noncompact:              ARC Options.        (line  499)
61020* mlra-priority-none:                    ARC Options.        (line  493)
61021* mlwp:                                  x86 Options.        (line  788)
61022* mlxc1-sxc1:                            MIPS Options.       (line  895)
61023* mlzcnt:                                x86 Options.        (line  796)
61024* MM:                                    Preprocessor Options.
61025                                                             (line  102)
61026* mm:                                    MeP Options.        (line   84)
61027* mmac:                                  CR16 Options.       (line    9)
61028* mmac <1>:                              Score Options.      (line   21)
61029* mmac-24:                               ARC Options.        (line  354)
61030* mmac-d16:                              ARC Options.        (line  350)
61031* mmac_24:                               ARC Options.        (line  628)
61032* mmac_d16:                              ARC Options.        (line  631)
61033* mmad:                                  MIPS Options.       (line  612)
61034* mmadd4:                                MIPS Options.       (line  900)
61035* mmain-is-OS_task:                      AVR Options.        (line  210)
61036* mmainkernel:                           Nvidia PTX Options. (line   18)
61037* mmalloc64:                             VMS Options.        (line   17)
61038* mmanual-endbr:                         x86 Options.        (line 1031)
61039* mmax:                                  DEC Alpha Options.  (line  163)
61040* mmax-constant-size:                    RX Options.         (line   82)
61041* mmax-stack-frame:                      CRIS Options.       (line   23)
61042* mmcount-ra-address:                    MIPS Options.       (line  872)
61043* mmcu:                                  AVR Options.        (line    9)
61044* mmcu <1>:                              MIPS Options.       (line  399)
61045* mmcu=:                                 MSP430 Options.     (line   14)
61046* MMD:                                   Preprocessor Options.
61047                                                             (line  185)
61048* mmedia:                                FRV Options.        (line   56)
61049* mmedium-calls:                         ARC Options.        (line  408)
61050* mmemcpy:                               MicroBlaze Options. (line   13)
61051* mmemcpy <1>:                           MIPS Options.       (line  597)
61052* mmemcpy-strategy=STRATEGY:             x86 Options.        (line 1231)
61053* mmemory-latency:                       DEC Alpha Options.  (line  268)
61054* mmemory-model:                         SPARC Options.      (line  348)
61055* mmemset-strategy=STRATEGY:             x86 Options.        (line 1243)
61056* mmfcrf:                                RS/6000 and PowerPC Options.
61057                                                             (line   27)
61058* mmfpgpr:                               RS/6000 and PowerPC Options.
61059                                                             (line   27)
61060* mmicromips:                            MIPS Options.       (line  387)
61061* mmillicode:                            ARC Options.        (line  502)
61062* mminimal-toc:                          RS/6000 and PowerPC Options.
61063                                                             (line  261)
61064* mminmax:                               MeP Options.        (line   87)
61065* mmixed-code:                           ARC Options.        (line  516)
61066* mmmx:                                  x86 Options.        (line  749)
61067* mmodel=large:                          M32R/D Options.     (line   33)
61068* mmodel=medium:                         M32R/D Options.     (line   27)
61069* mmodel=small:                          M32R/D Options.     (line   18)
61070* mmovbe:                                x86 Options.        (line  930)
61071* mmovdir64b:                            x86 Options.        (line  815)
61072* mmovdiri:                              x86 Options.        (line  814)
61073* mmp:                                   C-SKY Options.      (line   71)
61074* mmpy:                                  ARC Options.        (line  117)
61075* mmpy-option:                           ARC Options.        (line  173)
61076* mms-bitfields:                         x86 Options.        (line 1077)
61077* mmt:                                   MIPS Options.       (line  395)
61078* mmul:                                  RL78 Options.       (line   15)
61079* mmul-bug-workaround:                   CRIS Options.       (line   32)
61080* mmul.x:                                Moxie Options.      (line   14)
61081* mmul32x16:                             ARC Options.        (line  121)
61082* mmul64:                                ARC Options.        (line  124)
61083* mmuladd:                               FRV Options.        (line   64)
61084* mmulhw:                                RS/6000 and PowerPC Options.
61085                                                             (line  383)
61086* mmult:                                 MeP Options.        (line   90)
61087* mmult-bug:                             MN10300 Options.    (line    9)
61088* mmultcost:                             ARC Options.        (line  578)
61089* mmulti-cond-exec:                      FRV Options.        (line  215)
61090* mmulticore:                            Blackfin Options.   (line  139)
61091* mmultiple:                             RS/6000 and PowerPC Options.
61092                                                             (line  344)
61093* mmultiple-stld:                        C-SKY Options.      (line  121)
61094* mmusl:                                 GNU/Linux Options.  (line   18)
61095* mmvcle:                                S/390 and zSeries Options.
61096                                                             (line  138)
61097* mmvme:                                 RS/6000 and PowerPC Options.
61098                                                             (line  613)
61099* mmwaitx:                               x86 Options.        (line  805)
61100* mn:                                    H8/300 Options.     (line   20)
61101* mn-flash:                              AVR Options.        (line  215)
61102* mnan=2008:                             MIPS Options.       (line  320)
61103* mnan=legacy:                           MIPS Options.       (line  320)
61104* mneon-for-64bits:                      ARM Options.        (line  817)
61105* mnested-cond-exec:                     FRV Options.        (line  230)
61106* mnewlib:                               OpenRISC Options.   (line   13)
61107* mnhwloop:                              Score Options.      (line   15)
61108* mno-16-bit:                            NDS32 Options.      (line   54)
61109* mno-4byte-functions:                   MCore Options.      (line   27)
61110* mno-8byte-align:                       V850 Options.       (line  170)
61111* mno-abicalls:                          MIPS Options.       (line  192)
61112* mno-ac0:                               PDP-11 Options.     (line   20)
61113* mno-address-space-conversion:          SPU Options.        (line   68)
61114* mno-align-double:                      x86 Options.        (line  548)
61115* mno-align-int:                         M680x0 Options.     (line  261)
61116* mno-align-loops:                       M32R/D Options.     (line   76)
61117* mno-align-stringops:                   x86 Options.        (line 1197)
61118* mno-allow-string-insns:                RX Options.         (line  150)
61119* mno-altivec:                           RS/6000 and PowerPC Options.
61120                                                             (line  141)
61121* mno-am33:                              MN10300 Options.    (line   20)
61122* mno-app-regs:                          SPARC Options.      (line   10)
61123* mno-app-regs <1>:                      V850 Options.       (line  185)
61124* mno-as100-syntax:                      RX Options.         (line   76)
61125* mno-atomic-updates:                    SPU Options.        (line   83)
61126* mno-auto-litpools:                     Xtensa Options.     (line   60)
61127* mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
61128                                                             (line  365)
61129* mno-backchain:                         S/390 and zSeries Options.
61130                                                             (line   35)
61131* mno-base-addresses:                    MMIX Options.       (line   53)
61132* mno-bit-align:                         RS/6000 and PowerPC Options.
61133                                                             (line  397)
61134* mno-bitfield:                          M680x0 Options.     (line  227)
61135* mno-branch-likely:                     MIPS Options.       (line  792)
61136* mno-branch-predict:                    MMIX Options.       (line   48)
61137* mno-brcc:                              ARC Options.        (line  444)
61138* mno-bwx:                               DEC Alpha Options.  (line  163)
61139* mno-bypass-cache:                      Nios II Options.    (line  103)
61140* mno-cache-volatile:                    Nios II Options.    (line  109)
61141* mno-call-ms2sysv-xlogues:              x86 Options.        (line 1037)
61142* mno-callgraph-data:                    MCore Options.      (line   31)
61143* mno-cbcond:                            SPARC Options.      (line  260)
61144* mno-check-zero-division:               MIPS Options.       (line  570)
61145* mno-cix:                               DEC Alpha Options.  (line  163)
61146* mno-clearbss:                          MicroBlaze Options. (line   16)
61147* mno-cmov:                              NDS32 Options.      (line   24)
61148* mno-cmpb:                              RS/6000 and PowerPC Options.
61149                                                             (line   27)
61150* mno-cond-exec:                         ARC Options.        (line  458)
61151* mno-cond-exec <1>:                     FRV Options.        (line  194)
61152* mno-cond-move:                         FRV Options.        (line  166)
61153* mno-const-align:                       CRIS Options.       (line   55)
61154* mno-const16:                           Xtensa Options.     (line   10)
61155* mno-crc:                               MIPS Options.       (line  416)
61156* mno-crt0:                              MN10300 Options.    (line   43)
61157* mno-crt0 <1>:                          Moxie Options.      (line   18)
61158* mno-crypto:                            RS/6000 and PowerPC Options.
61159                                                             (line  182)
61160* mno-csync-anomaly:                     Blackfin Options.   (line   63)
61161* mno-custom-INSN:                       Nios II Options.    (line  139)
61162* mno-data-align:                        CRIS Options.       (line   55)
61163* mno-debug:                             S/390 and zSeries Options.
61164                                                             (line  144)
61165* mno-default:                           x86 Options.        (line  866)
61166* mno-disable-callt:                     V850 Options.       (line   92)
61167* mno-div:                               M680x0 Options.     (line  206)
61168* mno-div <1>:                           MCore Options.      (line   15)
61169* mno-dlmzb:                             RS/6000 and PowerPC Options.
61170                                                             (line  390)
61171* mno-double:                            FRV Options.        (line   52)
61172* mno-dpfp-lrsr:                         ARC Options.        (line  108)
61173* mno-dsp:                               MIPS Options.       (line  353)
61174* mno-dspr2:                             MIPS Options.       (line  359)
61175* mno-dwarf2-asm:                        IA-64 Options.      (line   94)
61176* mno-dword:                             FRV Options.        (line   44)
61177* mno-eabi:                              RS/6000 and PowerPC Options.
61178                                                             (line  637)
61179* mno-early-stop-bits:                   IA-64 Options.      (line  100)
61180* mno-eflags:                            FRV Options.        (line  155)
61181* mno-embedded-data:                     MIPS Options.       (line  517)
61182* mno-ep:                                V850 Options.       (line   16)
61183* mno-epsilon:                           MMIX Options.       (line   15)
61184* mno-eva:                               MIPS Options.       (line  403)
61185* mno-explicit-relocs:                   DEC Alpha Options.  (line  176)
61186* mno-explicit-relocs <1>:               MIPS Options.       (line  561)
61187* mno-exr:                               H8/300 Options.     (line   33)
61188* mno-ext-perf:                          NDS32 Options.      (line   30)
61189* mno-ext-perf2:                         NDS32 Options.      (line   36)
61190* mno-ext-string:                        NDS32 Options.      (line   42)
61191* mno-extern-sdata:                      MIPS Options.       (line  480)
61192* mno-fancy-math-387:                    x86 Options.        (line  538)
61193* mno-fast-sw-div:                       Nios II Options.    (line  115)
61194* mno-faster-structs:                    SPARC Options.      (line   91)
61195* mno-fix:                               DEC Alpha Options.  (line  163)
61196* mno-fix-24k:                           MIPS Options.       (line  641)
61197* mno-fix-cortex-a53-835769:             AArch64 Options.    (line  104)
61198* mno-fix-cortex-a53-843419:             AArch64 Options.    (line  111)
61199* mno-fix-r10000:                        MIPS Options.       (line  663)
61200* mno-fix-r4000:                         MIPS Options.       (line  647)
61201* mno-fix-r4400:                         MIPS Options.       (line  657)
61202* mno-flat:                              SPARC Options.      (line   22)
61203* mno-float:                             MIPS Options.       (line  274)
61204* mno-float128:                          RS/6000 and PowerPC Options.
61205                                                             (line  219)
61206* mno-float128-hardware:                 RS/6000 and PowerPC Options.
61207                                                             (line  241)
61208* mno-flush-func:                        M32R/D Options.     (line   98)
61209* mno-flush-trap:                        M32R/D Options.     (line   90)
61210* mno-fmaf:                              SPARC Options.      (line  267)
61211* mno-fp-in-toc:                         RS/6000 and PowerPC Options.
61212                                                             (line  261)
61213* mno-fp-regs:                           DEC Alpha Options.  (line   25)
61214* mno-fp-ret-in-387:                     x86 Options.        (line  528)
61215* mno-fprnd:                             RS/6000 and PowerPC Options.
61216                                                             (line   27)
61217* mno-fpu:                               SPARC Options.      (line   39)
61218* mno-fpu <1>:                           Visium Options.     (line   24)
61219* mno-fsca:                              SH Options.         (line  365)
61220* mno-fsmuld:                            SPARC Options.      (line  274)
61221* mno-fsrra:                             SH Options.         (line  374)
61222* mno-fused-madd:                        IA-64 Options.      (line   88)
61223* mno-fused-madd <1>:                    MIPS Options.       (line  624)
61224* mno-fused-madd <2>:                    RS/6000 and PowerPC Options.
61225                                                             (line  374)
61226* mno-fused-madd <3>:                    S/390 and zSeries Options.
61227                                                             (line  174)
61228* mno-fused-madd <4>:                    SH Options.         (line  356)
61229* mno-fused-madd <5>:                    Xtensa Options.     (line   19)
61230* mno-ginv:                              MIPS Options.       (line  421)
61231* mno-gnu-as:                            IA-64 Options.      (line   18)
61232* mno-gnu-attribute:                     RS/6000 and PowerPC Options.
61233                                                             (line  591)
61234* mno-gnu-ld:                            IA-64 Options.      (line   23)
61235* mno-gotplt:                            CRIS Options.       (line   81)
61236* mno-gpopt:                             MIPS Options.       (line  502)
61237* mno-gpopt <1>:                         Nios II Options.    (line   16)
61238* mno-hard-dfp:                          RS/6000 and PowerPC Options.
61239                                                             (line   27)
61240* mno-hard-dfp <1>:                      S/390 and zSeries Options.
61241                                                             (line   20)
61242* mno-hardlit:                           MCore Options.      (line   10)
61243* mno-htm:                               RS/6000 and PowerPC Options.
61244                                                             (line  188)
61245* mno-htm <1>:                           S/390 and zSeries Options.
61246                                                             (line  104)
61247* mno-hw-div:                            Nios II Options.    (line  124)
61248* mno-hw-mul:                            Nios II Options.    (line  124)
61249* mno-hw-mulx:                           Nios II Options.    (line  124)
61250* mno-id-shared-library:                 Blackfin Options.   (line   85)
61251* mno-ieee:                              SH Options.         (line  165)
61252* mno-ieee-fp:                           x86 Options.        (line  505)
61253* mno-imadd:                             MIPS Options.       (line  617)
61254* mno-inline-float-divide:               IA-64 Options.      (line   62)
61255* mno-inline-int-divide:                 IA-64 Options.      (line   73)
61256* mno-inline-sqrt:                       IA-64 Options.      (line   84)
61257* mno-int16:                             PDP-11 Options.     (line   37)
61258* mno-int32:                             PDP-11 Options.     (line   33)
61259* mno-interlink-compressed:              MIPS Options.       (line  135)
61260* mno-interlink-mips16:                  MIPS Options.       (line  147)
61261* mno-interrupts:                        AVR Options.        (line  218)
61262* mno-isel:                              RS/6000 and PowerPC Options.
61263                                                             (line  171)
61264* mno-jsr:                               RX Options.         (line  169)
61265* mno-knuthdiv:                          MMIX Options.       (line   32)
61266* mno-leaf-id-shared-library:            Blackfin Options.   (line   95)
61267* mno-libfuncs:                          MMIX Options.       (line   10)
61268* mno-liw:                               MN10300 Options.    (line   59)
61269* mno-llsc:                              MIPS Options.       (line  339)
61270* mno-load-store-pairs:                  MIPS Options.       (line  590)
61271* mno-local-sdata:                       MIPS Options.       (line  468)
61272* mno-long-calls:                        ARM Options.        (line  660)
61273* mno-long-calls <1>:                    Blackfin Options.   (line  118)
61274* mno-long-calls <2>:                    HPPA Options.       (line  136)
61275* mno-long-calls <3>:                    MIPS Options.       (line  603)
61276* mno-long-calls <4>:                    V850 Options.       (line   10)
61277* mno-long-jumps:                        V850 Options.       (line  108)
61278* mno-longcall:                          RS/6000 and PowerPC Options.
61279                                                             (line  732)
61280* mno-longcalls:                         Xtensa Options.     (line   87)
61281* mno-loongson-ext:                      MIPS Options.       (line  430)
61282* mno-loongson-ext2:                     MIPS Options.       (line  434)
61283* mno-loongson-mmi:                      MIPS Options.       (line  425)
61284* mno-low-precision-div:                 AArch64 Options.    (line  134)
61285* mno-low-precision-recip-sqrt:          AArch64 Options.    (line  117)
61286* mno-low-precision-sqrt:                AArch64 Options.    (line  125)
61287* mno-low64k:                            Blackfin Options.   (line   71)
61288* mno-lra:                               SPARC Options.      (line  111)
61289* mno-lsim:                              FR30 Options.       (line   14)
61290* mno-lsim <1>:                          MCore Options.      (line   46)
61291* mno-mad:                               MIPS Options.       (line  612)
61292* mno-max:                               DEC Alpha Options.  (line  163)
61293* mno-mcount-ra-address:                 MIPS Options.       (line  872)
61294* mno-mcu:                               MIPS Options.       (line  399)
61295* mno-mdmx:                              MIPS Options.       (line  376)
61296* mno-media:                             FRV Options.        (line   60)
61297* mno-memcpy:                            MIPS Options.       (line  597)
61298* mno-mfcrf:                             RS/6000 and PowerPC Options.
61299                                                             (line   27)
61300* mno-mfpgpr:                            RS/6000 and PowerPC Options.
61301                                                             (line   27)
61302* mno-mips16:                            MIPS Options.       (line  120)
61303* mno-mips3d:                            MIPS Options.       (line  382)
61304* mno-mmicromips:                        MIPS Options.       (line  387)
61305* mno-mpy:                               ARC Options.        (line  117)
61306* mno-ms-bitfields:                      x86 Options.        (line 1077)
61307* mno-mt:                                MIPS Options.       (line  395)
61308* mno-mul-bug-workaround:                CRIS Options.       (line   32)
61309* mno-muladd:                            FRV Options.        (line   68)
61310* mno-mulhw:                             RS/6000 and PowerPC Options.
61311                                                             (line  383)
61312* mno-mult-bug:                          MN10300 Options.    (line   13)
61313* mno-multi-cond-exec:                   FRV Options.        (line  223)
61314* mno-multiple:                          RS/6000 and PowerPC Options.
61315                                                             (line  344)
61316* mno-mvcle:                             S/390 and zSeries Options.
61317                                                             (line  138)
61318* mno-nested-cond-exec:                  FRV Options.        (line  237)
61319* mno-odd-spreg:                         MIPS Options.       (line  293)
61320* mno-omit-leaf-frame-pointer:           AArch64 Options.    (line   57)
61321* mno-optimize-membar:                   FRV Options.        (line  249)
61322* mno-opts:                              MeP Options.        (line   93)
61323* mno-pack:                              FRV Options.        (line  151)
61324* mno-packed-stack:                      S/390 and zSeries Options.
61325                                                             (line   54)
61326* mno-paired-single:                     MIPS Options.       (line  370)
61327* mno-pc-relative-literal-loads:         AArch64 Options.    (line  262)
61328* mno-pic:                               IA-64 Options.      (line   26)
61329* mno-pid:                               RX Options.         (line  117)
61330* mno-plt:                               MIPS Options.       (line  219)
61331* mno-pltseq:                            RS/6000 and PowerPC Options.
61332                                                             (line  769)
61333* mno-popc:                              SPARC Options.      (line  281)
61334* mno-popcntb:                           RS/6000 and PowerPC Options.
61335                                                             (line   27)
61336* mno-popcntd:                           RS/6000 and PowerPC Options.
61337                                                             (line   27)
61338* mno-postinc:                           Adapteva Epiphany Options.
61339                                                             (line  109)
61340* mno-postmodify:                        Adapteva Epiphany Options.
61341                                                             (line  109)
61342* mno-power8-fusion:                     RS/6000 and PowerPC Options.
61343                                                             (line  194)
61344* mno-power8-vector:                     RS/6000 and PowerPC Options.
61345                                                             (line  200)
61346* mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
61347                                                             (line   27)
61348* mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
61349                                                             (line   27)
61350* mno-powerpc64:                         RS/6000 and PowerPC Options.
61351                                                             (line   27)
61352* mno-prolog-function:                   V850 Options.       (line   23)
61353* mno-prologue-epilogue:                 CRIS Options.       (line   71)
61354* mno-prototype:                         RS/6000 and PowerPC Options.
61355                                                             (line  597)
61356* mno-push-args:                         x86 Options.        (line 1054)
61357* mno-quad-memory:                       RS/6000 and PowerPC Options.
61358                                                             (line  207)
61359* mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
61360                                                             (line  213)
61361* mno-readonly-in-sdata:                 RS/6000 and PowerPC Options.
61362                                                             (line  688)
61363* mno-red-zone:                          x86 Options.        (line 1422)
61364* mno-register-names:                    IA-64 Options.      (line   37)
61365* mno-regnames:                          RS/6000 and PowerPC Options.
61366                                                             (line  726)
61367* mno-relax:                             V850 Options.       (line  103)
61368* mno-relax-immediate:                   MCore Options.      (line   19)
61369* mno-relocatable:                       RS/6000 and PowerPC Options.
61370                                                             (line  413)
61371* mno-relocatable-lib:                   RS/6000 and PowerPC Options.
61372                                                             (line  424)
61373* mno-renesas:                           SH Options.         (line  155)
61374* mno-round-nearest:                     Adapteva Epiphany Options.
61375                                                             (line   51)
61376* mno-save-mduc-in-interrupts:           RL78 Options.       (line   79)
61377* mno-scc:                               FRV Options.        (line  180)
61378* mno-sched-ar-data-spec:                IA-64 Options.      (line  135)
61379* mno-sched-ar-in-data-spec:             IA-64 Options.      (line  157)
61380* mno-sched-br-data-spec:                IA-64 Options.      (line  128)
61381* mno-sched-br-in-data-spec:             IA-64 Options.      (line  150)
61382* mno-sched-control-spec:                IA-64 Options.      (line  142)
61383* mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  185)
61384* mno-sched-in-control-spec:             IA-64 Options.      (line  164)
61385* mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  178)
61386* mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  171)
61387* mno-sched-prolog:                      ARM Options.        (line   32)
61388* mno-sdata:                             ARC Options.        (line  422)
61389* mno-sdata <1>:                         IA-64 Options.      (line   42)
61390* mno-sdata <2>:                         RS/6000 and PowerPC Options.
61391                                                             (line  683)
61392* mno-sep-data:                          Blackfin Options.   (line  113)
61393* mno-serialize-volatile:                Xtensa Options.     (line   35)
61394* mno-setlb:                             MN10300 Options.    (line   69)
61395* mno-short:                             M680x0 Options.     (line  222)
61396* mno-side-effects:                      CRIS Options.       (line   46)
61397* mno-sim:                               RX Options.         (line   71)
61398* mno-single-exit:                       MMIX Options.       (line   65)
61399* mno-slow-bytes:                        MCore Options.      (line   35)
61400* mno-small-exec:                        S/390 and zSeries Options.
61401                                                             (line   79)
61402* mno-smartmips:                         MIPS Options.       (line  366)
61403* mno-soft-cmpsf:                        Adapteva Epiphany Options.
61404                                                             (line   29)
61405* mno-soft-float:                        DEC Alpha Options.  (line   10)
61406* mno-space-regs:                        HPPA Options.       (line   45)
61407* mno-specld-anomaly:                    Blackfin Options.   (line   53)
61408* mno-split-addresses:                   MIPS Options.       (line  555)
61409* mno-split-lohi:                        Adapteva Epiphany Options.
61410                                                             (line  109)
61411* mno-stack-align:                       CRIS Options.       (line   55)
61412* mno-stack-bias:                        SPARC Options.      (line  372)
61413* mno-std-struct-return:                 SPARC Options.      (line  102)
61414* mno-strict-align:                      AArch64 Options.    (line   51)
61415* mno-strict-align <1>:                  M680x0 Options.     (line  281)
61416* mno-strict-align <2>:                  RS/6000 and PowerPC Options.
61417                                                             (line  408)
61418* mno-subxc:                             SPARC Options.      (line  288)
61419* mno-sum-in-toc:                        RS/6000 and PowerPC Options.
61420                                                             (line  261)
61421* mno-sym32:                             MIPS Options.       (line  453)
61422* mno-target-align:                      Xtensa Options.     (line   74)
61423* mno-text-section-literals:             Xtensa Options.     (line   47)
61424* mno-tls-markers:                       RS/6000 and PowerPC Options.
61425                                                             (line  781)
61426* mno-toc:                               RS/6000 and PowerPC Options.
61427                                                             (line  433)
61428* mno-toplevel-symbols:                  MMIX Options.       (line   39)
61429* mno-tpf-trace:                         S/390 and zSeries Options.
61430                                                             (line  168)
61431* mno-unaligned-access:                  ARM Options.        (line  804)
61432* mno-unaligned-doubles:                 SPARC Options.      (line   73)
61433* mno-uninit-const-in-rodata:            MIPS Options.       (line  525)
61434* mno-update:                            RS/6000 and PowerPC Options.
61435                                                             (line  355)
61436* mno-user-mode:                         SPARC Options.      (line   85)
61437* mno-usermode:                          SH Options.         (line  274)
61438* mno-v3push:                            NDS32 Options.      (line   48)
61439* mno-v8plus:                            SPARC Options.      (line  214)
61440* mno-vect-double:                       Adapteva Epiphany Options.
61441                                                             (line  115)
61442* mno-virt:                              MIPS Options.       (line  407)
61443* mno-vis:                               SPARC Options.      (line  221)
61444* mno-vis2:                              SPARC Options.      (line  227)
61445* mno-vis3:                              SPARC Options.      (line  235)
61446* mno-vis4:                              SPARC Options.      (line  243)
61447* mno-vis4b:                             SPARC Options.      (line  251)
61448* mno-vliw-branch:                       FRV Options.        (line  208)
61449* mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
61450* mno-volatile-cache:                    ARC Options.        (line  431)
61451* mno-vrsave:                            RS/6000 and PowerPC Options.
61452                                                             (line  157)
61453* mno-vsx:                               RS/6000 and PowerPC Options.
61454                                                             (line  176)
61455* mno-vx:                                S/390 and zSeries Options.
61456                                                             (line  112)
61457* mno-warn-mcu:                          MSP430 Options.     (line   35)
61458* mno-warn-multiple-fast-interrupts:     RX Options.         (line  143)
61459* mno-wide-bitfields:                    MCore Options.      (line   23)
61460* mno-xgot:                              M680x0 Options.     (line  313)
61461* mno-xgot <1>:                          MIPS Options.       (line  229)
61462* mno-xl-compat:                         RS/6000 and PowerPC Options.
61463                                                             (line  296)
61464* mno-xpa:                               MIPS Options.       (line  411)
61465* mno-zdcbranch:                         SH Options.         (line  341)
61466* mno-zero-extend:                       MMIX Options.       (line   26)
61467* mno-zvector:                           S/390 and zSeries Options.
61468                                                             (line  123)
61469* mnobitfield:                           M680x0 Options.     (line  227)
61470* mnodiv:                                FT32 Options.       (line   20)
61471* mnomacsave:                            SH Options.         (line  160)
61472* mnop-fun-dllimport:                    x86 Windows Options.
61473                                                             (line   22)
61474* mnop-mcount:                           x86 Options.        (line 1283)
61475* mnopm:                                 FT32 Options.       (line   29)
61476* mnops:                                 Adapteva Epiphany Options.
61477                                                             (line   26)
61478* mnorm:                                 ARC Options.        (line  128)
61479* modd-spreg:                            MIPS Options.       (line  293)
61480* momit-leaf-frame-pointer:              AArch64 Options.    (line   57)
61481* momit-leaf-frame-pointer <1>:          Blackfin Options.   (line   43)
61482* momit-leaf-frame-pointer <2>:          x86 Options.        (line 1247)
61483* mone-byte-bool:                        Darwin Options.     (line   90)
61484* moptimize:                             Nvidia PTX Options. (line   22)
61485* moptimize-membar:                      FRV Options.        (line  244)
61486* moptimize-membar <1>:                  FRV Options.        (line  249)
61487* moverride:                             AArch64 Options.    (line  249)
61488* MP:                                    Preprocessor Options.
61489                                                             (line  132)
61490* mpa-risc-1-0:                          HPPA Options.       (line   19)
61491* mpa-risc-1-1:                          HPPA Options.       (line   19)
61492* mpa-risc-2-0:                          HPPA Options.       (line   19)
61493* mpack:                                 FRV Options.        (line  147)
61494* mpacked-stack:                         S/390 and zSeries Options.
61495                                                             (line   54)
61496* mpadstruct:                            SH Options.         (line  189)
61497* mpaired-single:                        MIPS Options.       (line  370)
61498* mpc-relative-literal-loads:            AArch64 Options.    (line  262)
61499* mpc32:                                 x86 Options.        (line  673)
61500* mpc64:                                 x86 Options.        (line  673)
61501* mpc80:                                 x86 Options.        (line  673)
61502* mpclmul:                               x86 Options.        (line  771)
61503* mpconfig:                              x86 Options.        (line  779)
61504* mpcrel:                                M680x0 Options.     (line  273)
61505* mpdebug:                               CRIS Options.       (line   36)
61506* mpe:                                   RS/6000 and PowerPC Options.
61507                                                             (line  315)
61508* mpe-aligned-commons:                   x86 Windows Options.
61509                                                             (line   59)
61510* mpic-data-is-text-relative:            ARM Options.        (line  697)
61511* mpic-data-is-text-relative <1>:        MicroBlaze Options. (line   70)
61512* mpic-register:                         ARM Options.        (line  690)
61513* mpid:                                  RX Options.         (line  117)
61514* mpku:                                  x86 Options.        (line  807)
61515* mplt:                                  MIPS Options.       (line  219)
61516* mpltseq:                               RS/6000 and PowerPC Options.
61517                                                             (line  769)
61518* mpointer-size=SIZE:                    VMS Options.        (line   20)
61519* mpointers-to-nested-functions:         RS/6000 and PowerPC Options.
61520                                                             (line  882)
61521* mpoke-function-name:                   ARM Options.        (line  705)
61522* mpopc:                                 SPARC Options.      (line  281)
61523* mpopcnt:                               x86 Options.        (line  791)
61524* mpopcntb:                              RS/6000 and PowerPC Options.
61525                                                             (line   27)
61526* mpopcntd:                              RS/6000 and PowerPC Options.
61527                                                             (line   27)
61528* mportable-runtime:                     HPPA Options.       (line   71)
61529* mpostinc:                              Adapteva Epiphany Options.
61530                                                             (line  109)
61531* mpostmodify:                           Adapteva Epiphany Options.
61532                                                             (line  109)
61533* mpower8-fusion:                        RS/6000 and PowerPC Options.
61534                                                             (line  194)
61535* mpower8-vector:                        RS/6000 and PowerPC Options.
61536                                                             (line  200)
61537* mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
61538                                                             (line   27)
61539* mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
61540                                                             (line   27)
61541* mpowerpc64:                            RS/6000 and PowerPC Options.
61542                                                             (line   27)
61543* mprefer-avx128:                        x86 Options.        (line  890)
61544* mprefer-short-insn-regs:               Adapteva Epiphany Options.
61545                                                             (line   13)
61546* mprefer-vector-width:                  x86 Options.        (line  894)
61547* mprefergot:                            SH Options.         (line  268)
61548* mpreferred-stack-boundary:             RISC-V Options.     (line   73)
61549* mpreferred-stack-boundary <1>:         x86 Options.        (line  703)
61550* mprefetchwt1:                          x86 Options.        (line  784)
61551* mpretend-cmove:                        SH Options.         (line  383)
61552* mprfchw:                               x86 Options.        (line  782)
61553* mprint-tune-info:                      ARM Options.        (line  840)
61554* mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
61555                                                             (line  462)
61556* mprolog-function:                      V850 Options.       (line   23)
61557* mprologue-epilogue:                    CRIS Options.       (line   71)
61558* mprototype:                            RS/6000 and PowerPC Options.
61559                                                             (line  597)
61560* mptwrite:                              x86 Options.        (line  775)
61561* mpure-code:                            ARM Options.        (line  850)
61562* mpush-args:                            x86 Options.        (line 1054)
61563* mpushpop:                              C-SKY Options.      (line  114)
61564* MQ:                                    Preprocessor Options.
61565                                                             (line  159)
61566* mq-class:                              ARC Options.        (line  521)
61567* mquad-memory:                          RS/6000 and PowerPC Options.
61568                                                             (line  207)
61569* mquad-memory-atomic:                   RS/6000 and PowerPC Options.
61570                                                             (line  213)
61571* mr0rel-sec:                            Nios II Options.    (line   76)
61572* mr10k-cache-barrier:                   MIPS Options.       (line  714)
61573* mRcq:                                  ARC Options.        (line  525)
61574* mRcw:                                  ARC Options.        (line  529)
61575* mrdpid:                                x86 Options.        (line  783)
61576* mrdrnd:                                x86 Options.        (line  776)
61577* mrdseed:                               x86 Options.        (line  785)
61578* mreadonly-in-sdata:                    RS/6000 and PowerPC Options.
61579                                                             (line  688)
61580* mrecip:                                RS/6000 and PowerPC Options.
61581                                                             (line  789)
61582* mrecip <1>:                            x86 Options.        (line  944)
61583* mrecip-precision:                      RS/6000 and PowerPC Options.
61584                                                             (line  846)
61585* mrecip=opt:                            RS/6000 and PowerPC Options.
61586                                                             (line  802)
61587* mrecip=opt <1>:                        x86 Options.        (line  966)
61588* mrecord-mcount:                        x86 Options.        (line 1277)
61589* mrecord-return:                        x86 Options.        (line 1297)
61590* mred-zone:                             x86 Options.        (line 1422)
61591* mreduced-regs:                         NDS32 Options.      (line   15)
61592* mregister-names:                       IA-64 Options.      (line   37)
61593* mregnames:                             RS/6000 and PowerPC Options.
61594                                                             (line  726)
61595* mregparm:                              x86 Options.        (line  640)
61596* mrelax:                                AVR Options.        (line  222)
61597* mrelax <1>:                            H8/300 Options.     (line    9)
61598* mrelax <2>:                            MN10300 Options.    (line   46)
61599* mrelax <3>:                            MSP430 Options.     (line   58)
61600* mrelax <4>:                            NDS32 Options.      (line   84)
61601* mrelax <5>:                            RX Options.         (line   95)
61602* mrelax <6>:                            SH Options.         (line  137)
61603* mrelax <7>:                            V850 Options.       (line  103)
61604* mrelax-immediate:                      MCore Options.      (line   19)
61605* mrelax-pic-calls:                      MIPS Options.       (line  859)
61606* mrelocatable:                          RS/6000 and PowerPC Options.
61607                                                             (line  413)
61608* mrelocatable-lib:                      RS/6000 and PowerPC Options.
61609                                                             (line  424)
61610* mrenesas:                              SH Options.         (line  152)
61611* mrepeat:                               MeP Options.        (line   96)
61612* mrestrict-it:                          ARM Options.        (line  834)
61613* mreturn-pointer-on-d0:                 MN10300 Options.    (line   36)
61614* mrf16:                                 ARC Options.        (line  324)
61615* mrgf-banked-regs:                      ARC Options.        (line  304)
61616* mrh850-abi:                            V850 Options.       (line  127)
61617* mrl78:                                 RL78 Options.       (line   62)
61618* mrmw:                                  AVR Options.        (line  236)
61619* mror:                                  OpenRISC Options.   (line   28)
61620* mround-nearest:                        Adapteva Epiphany Options.
61621                                                             (line   51)
61622* mrtd:                                  M680x0 Options.     (line  236)
61623* mrtd <1>:                              x86 Options.        (line  616)
61624* mrtd <2>:                              x86 Function Attributes.
61625                                                             (line    9)
61626* mrtm:                                  x86 Options.        (line  802)
61627* mrtp:                                  VxWorks Options.    (line   11)
61628* mrtsc:                                 ARC Options.        (line  358)
61629* ms:                                    H8/300 Options.     (line   17)
61630* ms <1>:                                MeP Options.        (line  100)
61631* ms2600:                                H8/300 Options.     (line   24)
61632* msafe-dma:                             SPU Options.        (line   18)
61633* msafe-hints:                           SPU Options.        (line  112)
61634* msahf:                                 x86 Options.        (line  920)
61635* msatur:                                MeP Options.        (line  105)
61636* msave-acc-in-interrupts:               RX Options.         (line  109)
61637* msave-mduc-in-interrupts:              RL78 Options.       (line   79)
61638* msave-restore:                         RISC-V Options.     (line   87)
61639* msave-toc-indirect:                    RS/6000 and PowerPC Options.
61640                                                             (line  894)
61641* mscc:                                  FRV Options.        (line  173)
61642* msched-ar-data-spec:                   IA-64 Options.      (line  135)
61643* msched-ar-in-data-spec:                IA-64 Options.      (line  157)
61644* msched-br-data-spec:                   IA-64 Options.      (line  128)
61645* msched-br-in-data-spec:                IA-64 Options.      (line  150)
61646* msched-control-spec:                   IA-64 Options.      (line  142)
61647* msched-costly-dep:                     RS/6000 and PowerPC Options.
61648                                                             (line  469)
61649* msched-count-spec-in-critical-path:    IA-64 Options.      (line  185)
61650* msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  202)
61651* msched-in-control-spec:                IA-64 Options.      (line  164)
61652* msched-max-memory-insns:               IA-64 Options.      (line  211)
61653* msched-max-memory-insns-hard-limit:    IA-64 Options.      (line  217)
61654* msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  178)
61655* msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  171)
61656* msched-prolog:                         ARM Options.        (line   32)
61657* msched-prolog <1>:                     C-SKY Options.      (line  148)
61658* msched-spec-ldc:                       IA-64 Options.      (line  191)
61659* msched-spec-ldc <1>:                   IA-64 Options.      (line  194)
61660* msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  198)
61661* mschedule:                             HPPA Options.       (line   78)
61662* mscore5:                               Score Options.      (line   25)
61663* mscore5u:                              Score Options.      (line   28)
61664* mscore7:                               Score Options.      (line   31)
61665* mscore7d:                              Score Options.      (line   35)
61666* msda:                                  V850 Options.       (line   40)
61667* msdata:                                ARC Options.        (line  422)
61668* msdata <1>:                            IA-64 Options.      (line   42)
61669* msdata <2>:                            RS/6000 and PowerPC Options.
61670                                                             (line  670)
61671* msdata=all:                            C6X Options.        (line   30)
61672* msdata=data:                           RS/6000 and PowerPC Options.
61673                                                             (line  675)
61674* msdata=default:                        C6X Options.        (line   22)
61675* msdata=default <1>:                    RS/6000 and PowerPC Options.
61676                                                             (line  670)
61677* msdata=eabi:                           RS/6000 and PowerPC Options.
61678                                                             (line  651)
61679* msdata=none:                           C6X Options.        (line   35)
61680* msdata=none <1>:                       M32R/D Options.     (line   40)
61681* msdata=none <2>:                       RS/6000 and PowerPC Options.
61682                                                             (line  683)
61683* msdata=sdata:                          M32R/D Options.     (line   49)
61684* msdata=sysv:                           RS/6000 and PowerPC Options.
61685                                                             (line  661)
61686* msdata=use:                            M32R/D Options.     (line   53)
61687* msdram:                                Blackfin Options.   (line  169)
61688* msdram <1>:                            MeP Options.        (line  110)
61689* msecure-plt:                           RS/6000 and PowerPC Options.
61690                                                             (line  160)
61691* msecurity:                             C-SKY Options.      (line   80)
61692* msel-sched-dont-check-control-spec:    IA-64 Options.      (line  207)
61693* msep-data:                             Blackfin Options.   (line  107)
61694* msep-data <1>:                         Blackfin Options.   (line  113)
61695* mserialize-volatile:                   Xtensa Options.     (line   35)
61696* msetlb:                                MN10300 Options.    (line   64)
61697* msext:                                 OpenRISC Options.   (line   32)
61698* msfimm:                                OpenRISC Options.   (line   36)
61699* msgx:                                  x86 Options.        (line  786)
61700* msha:                                  x86 Options.        (line  769)
61701* mshared-library-id:                    Blackfin Options.   (line  100)
61702* mshftimm:                              OpenRISC Options.   (line   40)
61703* mshort:                                M680x0 Options.     (line  216)
61704* mshort-calls:                          AVR Options.        (line  240)
61705* mshstk:                                x86 Options.        (line  934)
61706* mside-effects:                         CRIS Options.       (line   46)
61707* msign-extend-enabled:                  LM32 Options.       (line   18)
61708* msign-return-address:                  AArch64 Options.    (line  268)
61709* msilicon-errata:                       MSP430 Options.     (line  102)
61710* msilicon-errata-warn:                  MSP430 Options.     (line  106)
61711* msim:                                  Blackfin Options.   (line   36)
61712* msim <1>:                              C6X Options.        (line   19)
61713* msim <2>:                              CR16 Options.       (line   18)
61714* msim <3>:                              FT32 Options.       (line    9)
61715* msim <4>:                              M32C Options.       (line   13)
61716* msim <5>:                              MeP Options.        (line  114)
61717* msim <6>:                              MSP430 Options.     (line   47)
61718* msim <7>:                              RL78 Options.       (line    7)
61719* msim <8>:                              RS/6000 and PowerPC Options.
61720                                                             (line  607)
61721* msim <9>:                              RX Options.         (line   71)
61722* msim <10>:                             Visium Options.     (line   13)
61723* msim <11>:                             Xstormy16 Options.  (line    9)
61724* msimd:                                 ARC Options.        (line  141)
61725* msimnovec:                             MeP Options.        (line  117)
61726* msingle-exit:                          MMIX Options.       (line   65)
61727* msingle-float:                         MIPS Options.       (line  284)
61728* msingle-pic-base:                      ARM Options.        (line  684)
61729* msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
61730                                                             (line  456)
61731* msio:                                  HPPA Options.       (line  105)
61732* msize-level:                           ARC Options.        (line  533)
61733* mskip-rax-setup:                       x86 Options.        (line 1310)
61734* mslow-bytes:                           MCore Options.      (line   35)
61735* mslow-flash-data:                      ARM Options.        (line  822)
61736* msmall:                                MSP430 Options.     (line   55)
61737* msmall-data:                           DEC Alpha Options.  (line  187)
61738* msmall-data-limit:                     RISC-V Options.     (line   82)
61739* msmall-data-limit <1>:                 RX Options.         (line   47)
61740* msmall-divides:                        MicroBlaze Options. (line   38)
61741* msmall-exec:                           S/390 and zSeries Options.
61742                                                             (line   79)
61743* msmall-mem:                            SPU Options.        (line   38)
61744* msmall-model:                          FR30 Options.       (line    9)
61745* msmall-text:                           DEC Alpha Options.  (line  205)
61746* msmall16:                              Adapteva Epiphany Options.
61747                                                             (line   66)
61748* msmallc:                               Nios II Options.    (line  310)
61749* msmart:                                C-SKY Options.      (line   97)
61750* msmartmips:                            MIPS Options.       (line  366)
61751* msoft-cmpsf:                           Adapteva Epiphany Options.
61752                                                             (line   29)
61753* msoft-div:                             OpenRISC Options.   (line   46)
61754* msoft-float:                           ARC Options.        (line  145)
61755* msoft-float <1>:                       C-SKY Options.      (line   36)
61756* msoft-float <2>:                       DEC Alpha Options.  (line   10)
61757* msoft-float <3>:                       FRV Options.        (line   27)
61758* msoft-float <4>:                       HPPA Options.       (line   91)
61759* msoft-float <5>:                       M680x0 Options.     (line  200)
61760* msoft-float <6>:                       MicroBlaze Options. (line    7)
61761* msoft-float <7>:                       MIPS Options.       (line  270)
61762* msoft-float <8>:                       PDP-11 Options.     (line   13)
61763* msoft-float <9>:                       RS/6000 and PowerPC Options.
61764                                                             (line  338)
61765* msoft-float <10>:                      S/390 and zSeries Options.
61766                                                             (line   11)
61767* msoft-float <11>:                      SPARC Options.      (line   39)
61768* msoft-float <12>:                      V850 Options.       (line  113)
61769* msoft-float <13>:                      Visium Options.     (line   24)
61770* msoft-float <14>:                      x86 Options.        (line  515)
61771* msoft-mul:                             OpenRISC Options.   (line   50)
61772* msoft-quad-float:                      SPARC Options.      (line   59)
61773* msoft-stack:                           Nvidia PTX Options. (line   26)
61774* msp8:                                  AVR Options.        (line  247)
61775* mspace:                                V850 Options.       (line   30)
61776* mspace-regs:                           HPPA Options.       (line   45)
61777* mspecld-anomaly:                       Blackfin Options.   (line   48)
61778* mspecld-anomaly <1>:                   Blackfin Options.   (line   53)
61779* mspfp:                                 ARC Options.        (line  132)
61780* mspfp-compact:                         ARC Options.        (line  133)
61781* mspfp-fast:                            ARC Options.        (line  137)
61782* mspfp_compact:                         ARC Options.        (line  634)
61783* mspfp_fast:                            ARC Options.        (line  637)
61784* msplit:                                PDP-11 Options.     (line   40)
61785* msplit-addresses:                      MIPS Options.       (line  555)
61786* msplit-lohi:                           Adapteva Epiphany Options.
61787                                                             (line  109)
61788* msplit-vecmove-early:                  Adapteva Epiphany Options.
61789                                                             (line  126)
61790* msse:                                  x86 Options.        (line  750)
61791* msse2:                                 x86 Options.        (line  751)
61792* msse2avx:                              x86 Options.        (line 1265)
61793* msse3:                                 x86 Options.        (line  752)
61794* msse4:                                 x86 Options.        (line  754)
61795* msse4.1:                               x86 Options.        (line  756)
61796* msse4.2:                               x86 Options.        (line  757)
61797* msse4a:                                x86 Options.        (line  755)
61798* msseregparm:                           x86 Options.        (line  651)
61799* mssse3:                                x86 Options.        (line  753)
61800* mstack-align:                          CRIS Options.       (line   55)
61801* mstack-bias:                           SPARC Options.      (line  372)
61802* mstack-check-l1:                       Blackfin Options.   (line   74)
61803* mstack-guard:                          S/390 and zSeries Options.
61804                                                             (line  193)
61805* mstack-increment:                      MCore Options.      (line   50)
61806* mstack-offset:                         Adapteva Epiphany Options.
61807                                                             (line   37)
61808* mstack-protector-guard:                AArch64 Options.    (line   63)
61809* mstack-protector-guard <1>:            AArch64 Options.    (line   78)
61810* mstack-protector-guard <2>:            RS/6000 and PowerPC Options.
61811                                                             (line  920)
61812* mstack-protector-guard <3>:            x86 Options.        (line 1336)
61813* mstack-protector-guard-offset:         AArch64 Options.    (line   63)
61814* mstack-protector-guard-offset <1>:     AArch64 Options.    (line   78)
61815* mstack-protector-guard-offset <2>:     RS/6000 and PowerPC Options.
61816                                                             (line  920)
61817* mstack-protector-guard-offset <3>:     x86 Options.        (line 1336)
61818* mstack-protector-guard-reg:            AArch64 Options.    (line   63)
61819* mstack-protector-guard-reg <1>:        AArch64 Options.    (line   78)
61820* mstack-protector-guard-reg <2>:        RS/6000 and PowerPC Options.
61821                                                             (line  920)
61822* mstack-protector-guard-reg <3>:        x86 Options.        (line 1336)
61823* mstack-protector-guard-symbol:         RS/6000 and PowerPC Options.
61824                                                             (line  920)
61825* mstack-size:                           AMD GCN Options.    (line   20)
61826* mstack-size <1>:                       C-SKY Options.      (line  134)
61827* mstack-size <2>:                       S/390 and zSeries Options.
61828                                                             (line  193)
61829* mstackrealign:                         x86 Options.        (line  694)
61830* mstd-struct-return:                    SPARC Options.      (line  102)
61831* mstdmain:                              SPU Options.        (line   44)
61832* mstrict-align:                         AArch64 Options.    (line   51)
61833* mstrict-align <1>:                     M680x0 Options.     (line  281)
61834* mstrict-align <2>:                     RISC-V Options.     (line   93)
61835* mstrict-align <3>:                     RS/6000 and PowerPC Options.
61836                                                             (line  408)
61837* mstrict-X:                             AVR Options.        (line  260)
61838* mstring-compare-inline-limit:          RS/6000 and PowerPC Options.
61839                                                             (line  712)
61840* mstringop-strategy=ALG:                x86 Options.        (line 1213)
61841* mstructure-size-boundary:              ARM Options.        (line  639)
61842* msubxc:                                SPARC Options.      (line  288)
61843* msv-mode:                              Visium Options.     (line   52)
61844* msve-vector-bits:                      AArch64 Options.    (line  296)
61845* msvr4-struct-return:                   RS/6000 and PowerPC Options.
61846                                                             (line  553)
61847* mswap:                                 ARC Options.        (line  152)
61848* mswape:                                ARC Options.        (line  363)
61849* msym32:                                MIPS Options.       (line  453)
61850* msynci:                                MIPS Options.       (line  845)
61851* msys-crt0:                             Nios II Options.    (line  314)
61852* msys-lib:                              Nios II Options.    (line  318)
61853* MT:                                    Preprocessor Options.
61854                                                             (line  144)
61855* mtarget-align:                         Xtensa Options.     (line   74)
61856* mtas:                                  SH Options.         (line  259)
61857* mtbm:                                  x86 Options.        (line  804)
61858* mtda:                                  V850 Options.       (line   34)
61859* mtelephony:                            ARC Options.        (line  368)
61860* mtext-section-literals:                Xtensa Options.     (line   47)
61861* mtf:                                   MeP Options.        (line  121)
61862* mthread:                               x86 Windows Options.
61863                                                             (line   26)
61864* mthreads:                              x86 Options.        (line 1069)
61865* mthumb:                                ARM Options.        (line  727)
61866* mthumb-interwork:                      ARM Options.        (line   24)
61867* mtiny-stack:                           AVR Options.        (line  274)
61868* mtiny=:                                MeP Options.        (line  125)
61869* mTLS:                                  FRV Options.        (line   90)
61870* mtls:                                  FRV Options.        (line   94)
61871* mtls-dialect:                          ARM Options.        (line  779)
61872* mtls-dialect <1>:                      x86 Options.        (line 1047)
61873* mtls-dialect=desc:                     AArch64 Options.    (line   91)
61874* mtls-dialect=traditional:              AArch64 Options.    (line   95)
61875* mtls-direct-seg-refs:                  x86 Options.        (line 1255)
61876* mtls-markers:                          RS/6000 and PowerPC Options.
61877                                                             (line  781)
61878* mtls-size:                             AArch64 Options.    (line   99)
61879* mtls-size <1>:                         IA-64 Options.      (line  112)
61880* mtoc:                                  RS/6000 and PowerPC Options.
61881                                                             (line  433)
61882* mtomcat-stats:                         FRV Options.        (line  254)
61883* mtoplevel-symbols:                     MMIX Options.       (line   39)
61884* mtp:                                   ARM Options.        (line  771)
61885* mtp-regno:                             ARC Options.        (line  170)
61886* mtpcs-frame:                           ARM Options.        (line  744)
61887* mtpcs-leaf-frame:                      ARM Options.        (line  750)
61888* mtpf-trace:                            S/390 and zSeries Options.
61889                                                             (line  168)
61890* mtraceback:                            RS/6000 and PowerPC Options.
61891                                                             (line  546)
61892* mtrap-precision:                       DEC Alpha Options.  (line  109)
61893* mtrust:                                C-SKY Options.      (line   83)
61894* mtune:                                 AArch64 Options.    (line  203)
61895* mtune <1>:                             AMD GCN Options.    (line   10)
61896* mtune <2>:                             ARC Options.        (line  554)
61897* mtune <3>:                             ARC Options.        (line  640)
61898* mtune <4>:                             ARM Options.        (line  477)
61899* mtune <5>:                             CRIS Options.       (line   17)
61900* mtune <6>:                             DEC Alpha Options.  (line  259)
61901* mtune <7>:                             IA-64 Options.      (line  116)
61902* mtune <8>:                             M680x0 Options.     (line   68)
61903* mtune <9>:                             MIPS Options.       (line   66)
61904* mtune <10>:                            MN10300 Options.    (line   30)
61905* mtune <11>:                            RISC-V Options.     (line   59)
61906* mtune <12>:                            RS/6000 and PowerPC Options.
61907                                                             (line  118)
61908* mtune <13>:                            S/390 and zSeries Options.
61909                                                             (line  161)
61910* mtune <14>:                            SPARC Options.      (line  199)
61911* mtune <15>:                            Visium Options.     (line   47)
61912* mtune <16>:                            x86 Options.        (line  389)
61913* mtune-ctrl=FEATURE-LIST:               x86 Options.        (line  857)
61914* muclibc:                               GNU/Linux Options.  (line   14)
61915* muls:                                  Score Options.      (line   18)
61916* multcost:                              ARC Options.        (line  645)
61917* multcost=NUMBER:                       SH Options.         (line  281)
61918* multilib-library-pic:                  FRV Options.        (line  110)
61919* multiply-enabled:                      LM32 Options.       (line   15)
61920* multiply_defined:                      Darwin Options.     (line  196)
61921* multiply_defined_unused:               Darwin Options.     (line  196)
61922* multi_module:                          Darwin Options.     (line  196)
61923* munalign-prob-threshold:               ARC Options.        (line  582)
61924* munaligned-access:                     ARM Options.        (line  804)
61925* munaligned-doubles:                    SPARC Options.      (line   73)
61926* municode:                              x86 Windows Options.
61927                                                             (line   30)
61928* muniform-simt:                         Nvidia PTX Options. (line   38)
61929* muninit-const-in-rodata:               MIPS Options.       (line  525)
61930* munix:                                 VAX Options.        (line    9)
61931* munix-asm:                             PDP-11 Options.     (line   43)
61932* munsafe-dma:                           SPU Options.        (line   18)
61933* mupdate:                               RS/6000 and PowerPC Options.
61934                                                             (line  355)
61935* muser-enabled:                         LM32 Options.       (line   21)
61936* muser-mode:                            SPARC Options.      (line   85)
61937* muser-mode <1>:                        Visium Options.     (line   57)
61938* musermode:                             SH Options.         (line  274)
61939* mv3push:                               NDS32 Options.      (line   45)
61940* mv850:                                 V850 Options.       (line   49)
61941* mv850e:                                V850 Options.       (line   79)
61942* mv850e1:                               V850 Options.       (line   70)
61943* mv850e2:                               V850 Options.       (line   66)
61944* mv850e2v3:                             V850 Options.       (line   61)
61945* mv850e2v4:                             V850 Options.       (line   57)
61946* mv850e3v5:                             V850 Options.       (line   52)
61947* mv850es:                               V850 Options.       (line   75)
61948* mv8plus:                               SPARC Options.      (line  214)
61949* mvaes:                                 x86 Options.        (line  810)
61950* mvdsp:                                 C-SKY Options.      (line   88)
61951* mveclibabi:                            RS/6000 and PowerPC Options.
61952                                                             (line  855)
61953* mveclibabi <1>:                        x86 Options.        (line  995)
61954* mvect-double:                          Adapteva Epiphany Options.
61955                                                             (line  115)
61956* mvect8-ret-in-mem:                     x86 Options.        (line  661)
61957* mverbose-cost-dump:                    AArch64 Options.    (line  257)
61958* mverbose-cost-dump <1>:                ARM Options.        (line  846)
61959* mvirt:                                 MIPS Options.       (line  407)
61960* mvis:                                  SPARC Options.      (line  221)
61961* mvis2:                                 SPARC Options.      (line  227)
61962* mvis3:                                 SPARC Options.      (line  235)
61963* mvis4:                                 SPARC Options.      (line  243)
61964* mvis4b:                                SPARC Options.      (line  251)
61965* mvliw-branch:                          FRV Options.        (line  201)
61966* mvms-return-codes:                     VMS Options.        (line    9)
61967* mvolatile-asm-stop:                    IA-64 Options.      (line   32)
61968* mvolatile-cache:                       ARC Options.        (line  427)
61969* mvolatile-cache <1>:                   ARC Options.        (line  431)
61970* mvpclmulqdq:                           x86 Options.        (line  812)
61971* mvr4130-align:                         MIPS Options.       (line  834)
61972* mvrsave:                               RS/6000 and PowerPC Options.
61973                                                             (line  157)
61974* mvsx:                                  RS/6000 and PowerPC Options.
61975                                                             (line  176)
61976* mvx:                                   S/390 and zSeries Options.
61977                                                             (line  112)
61978* mvxworks:                              RS/6000 and PowerPC Options.
61979                                                             (line  628)
61980* mvzeroupper:                           x86 Options.        (line  884)
61981* mwaitpkg:                              x86 Options.        (line  811)
61982* mwarn-dynamicstack:                    S/390 and zSeries Options.
61983                                                             (line  187)
61984* mwarn-framesize:                       S/390 and zSeries Options.
61985                                                             (line  179)
61986* mwarn-mcu:                             MSP430 Options.     (line   35)
61987* mwarn-multiple-fast-interrupts:        RX Options.         (line  143)
61988* mwarn-reloc:                           SPU Options.        (line   10)
61989* mwbnoinvd:                             x86 Options.        (line  780)
61990* mwide-bitfields:                       MCore Options.      (line   23)
61991* mwin32:                                x86 Windows Options.
61992                                                             (line   35)
61993* mwindows:                              x86 Windows Options.
61994                                                             (line   41)
61995* mword-relocations:                     ARM Options.        (line  790)
61996* mx32:                                  x86 Options.        (line 1402)
61997* mxgot:                                 M680x0 Options.     (line  313)
61998* mxgot <1>:                             MIPS Options.       (line  229)
61999* mxl-barrel-shift:                      MicroBlaze Options. (line   32)
62000* mxl-compat:                            RS/6000 and PowerPC Options.
62001                                                             (line  296)
62002* mxl-float-convert:                     MicroBlaze Options. (line   50)
62003* mxl-float-sqrt:                        MicroBlaze Options. (line   53)
62004* mxl-gp-opt:                            MicroBlaze Options. (line   44)
62005* mxl-multiply-high:                     MicroBlaze Options. (line   47)
62006* mxl-pattern-compare:                   MicroBlaze Options. (line   35)
62007* mxl-reorder:                           MicroBlaze Options. (line   62)
62008* mxl-soft-div:                          MicroBlaze Options. (line   29)
62009* mxl-soft-mul:                          MicroBlaze Options. (line   26)
62010* mxl-stack-check:                       MicroBlaze Options. (line   41)
62011* mxop:                                  x86 Options.        (line  787)
62012* mxpa:                                  MIPS Options.       (line  411)
62013* mxsave:                                x86 Options.        (line  798)
62014* mxsavec:                               x86 Options.        (line  800)
62015* mxsaveopt:                             x86 Options.        (line  799)
62016* mxsaves:                               x86 Options.        (line  801)
62017* mxy:                                   ARC Options.        (line  373)
62018* myellowknife:                          RS/6000 and PowerPC Options.
62019                                                             (line  623)
62020* mzarch:                                S/390 and zSeries Options.
62021                                                             (line   94)
62022* mzda:                                  V850 Options.       (line   45)
62023* mzdcbranch:                            SH Options.         (line  341)
62024* mzero-extend:                          MMIX Options.       (line   26)
62025* mzvector:                              S/390 and zSeries Options.
62026                                                             (line  123)
62027* no-80387:                              x86 Options.        (line  515)
62028* no-canonical-prefixes:                 Directory Options.  (line  164)
62029* no-integrated-cpp:                     Preprocessor Options.
62030                                                             (line  476)
62031* no-pie:                                Link Options.       (line  182)
62032* no-sysroot-suffix:                     Directory Options.  (line  183)
62033* noall_load:                            Darwin Options.     (line  196)
62034* nocpp:                                 MIPS Options.       (line  636)
62035* nodefaultlibs:                         Link Options.       (line  120)
62036* nodevicelib:                           AVR Options.        (line  281)
62037* nodevicespecs:                         AVR Options.        (line  284)
62038* nofixprebinding:                       Darwin Options.     (line  196)
62039* nofpu:                                 RX Options.         (line   17)
62040* nolibc:                                Link Options.       (line  132)
62041* nolibdld:                              HPPA Options.       (line  188)
62042* nomultidefs:                           Darwin Options.     (line  196)
62043* non-static:                            VxWorks Options.    (line   16)
62044* noprebind:                             Darwin Options.     (line  196)
62045* noseglinkedit:                         Darwin Options.     (line  196)
62046* nostartfiles:                          Link Options.       (line  115)
62047* nostdinc:                              Directory Options.  (line  102)
62048* nostdinc++:                            C++ Dialect Options.
62049                                                             (line  484)
62050* nostdinc++ <1>:                        Directory Options.  (line  108)
62051* nostdlib:                              Link Options.       (line  144)
62052* no_dead_strip_inits_and_terms:         Darwin Options.     (line  196)
62053* o:                                     Overall Options.    (line  197)
62054* O:                                     Optimize Options.   (line   39)
62055* O0:                                    Optimize Options.   (line  162)
62056* O1:                                    Optimize Options.   (line   39)
62057* O2:                                    Optimize Options.   (line   95)
62058* O3:                                    Optimize Options.   (line  141)
62059* Ofast:                                 Optimize Options.   (line  178)
62060* Og:                                    Optimize Options.   (line  185)
62061* Os:                                    Optimize Options.   (line  166)
62062* p:                                     Instrumentation Options.
62063                                                             (line   20)
62064* P:                                     Preprocessor Options.
62065                                                             (line  361)
62066* p <1>:                                 Common Function Attributes.
62067                                                             (line  620)
62068* pagezero_size:                         Darwin Options.     (line  196)
62069* param:                                 Optimize Options.   (line 2573)
62070* pass-exit-codes:                       Overall Options.    (line  338)
62071* pedantic:                              Standards.          (line   13)
62072* pedantic <1>:                          Warning Options.    (line   85)
62073* pedantic <2>:                          C Extensions.       (line    6)
62074* pedantic <3>:                          Alternate Keywords. (line   30)
62075* pedantic <4>:                          Warnings and Errors.
62076                                                             (line   25)
62077* pedantic-errors:                       Standards.          (line   13)
62078* pedantic-errors <1>:                   Warning Options.    (line  126)
62079* pedantic-errors <2>:                   Non-bugs.           (line  216)
62080* pedantic-errors <3>:                   Warnings and Errors.
62081                                                             (line   25)
62082* pg:                                    Instrumentation Options.
62083                                                             (line   20)
62084* pg <1>:                                Common Function Attributes.
62085                                                             (line  620)
62086* pie:                                   Link Options.       (line  176)
62087* pipe:                                  Overall Options.    (line  346)
62088* plt:                                   RISC-V Options.     (line   13)
62089* prebind:                               Darwin Options.     (line  196)
62090* prebind_all_twolevel_modules:          Darwin Options.     (line  196)
62091* print-file-name:                       Developer Options.  (line  930)
62092* print-libgcc-file-name:                Developer Options.  (line  964)
62093* print-multi-directory:                 Developer Options.  (line  936)
62094* print-multi-lib:                       Developer Options.  (line  941)
62095* print-multi-os-directory:              Developer Options.  (line  948)
62096* print-multiarch:                       Developer Options.  (line  957)
62097* print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
62098                                                             (line  216)
62099* print-prog-name:                       Developer Options.  (line  961)
62100* print-search-dirs:                     Developer Options.  (line  972)
62101* print-sysroot:                         Developer Options.  (line  985)
62102* print-sysroot-headers-suffix:          Developer Options.  (line  992)
62103* private_bundle:                        Darwin Options.     (line  196)
62104* pthread:                               Preprocessor Options.
62105                                                             (line   70)
62106* pthread <1>:                           Link Options.       (line  193)
62107* pthreads:                              Solaris 2 Options.  (line   30)
62108* Q:                                     Developer Options.  (line  833)
62109* Qn:                                    System V Options.   (line   18)
62110* Qy:                                    System V Options.   (line   14)
62111* r:                                     Link Options.       (line  200)
62112* rdynamic:                              Link Options.       (line  204)
62113* read_only_relocs:                      Darwin Options.     (line  196)
62114* remap:                                 Preprocessor Options.
62115                                                             (line  392)
62116* S:                                     Overall Options.    (line  180)
62117* S <1>:                                 Link Options.       (line   20)
62118* s:                                     Link Options.       (line  211)
62119* save-temps:                            Developer Options.  (line  708)
62120* save-temps=obj:                        Developer Options.  (line  734)
62121* sectalign:                             Darwin Options.     (line  196)
62122* sectcreate:                            Darwin Options.     (line  196)
62123* sectobjectsymbols:                     Darwin Options.     (line  196)
62124* sectobjectsymbols <1>:                 Darwin Options.     (line  196)
62125* sectorder:                             Darwin Options.     (line  196)
62126* seg1addr:                              Darwin Options.     (line  196)
62127* segaddr:                               Darwin Options.     (line  196)
62128* seglinkedit:                           Darwin Options.     (line  196)
62129* segprot:                               Darwin Options.     (line  196)
62130* segs_read_only_addr:                   Darwin Options.     (line  196)
62131* segs_read_only_addr <1>:               Darwin Options.     (line  196)
62132* segs_read_write_addr:                  Darwin Options.     (line  196)
62133* segs_read_write_addr <1>:              Darwin Options.     (line  196)
62134* seg_addr_table:                        Darwin Options.     (line  196)
62135* seg_addr_table_filename:               Darwin Options.     (line  196)
62136* shared:                                Link Options.       (line  220)
62137* shared-libgcc:                         Link Options.       (line  228)
62138* short-calls:                           Adapteva Epiphany Options.
62139                                                             (line   61)
62140* sim:                                   CRIS Options.       (line   95)
62141* sim2:                                  CRIS Options.       (line  101)
62142* single_module:                         Darwin Options.     (line  196)
62143* specs:                                 Overall Options.    (line  352)
62144* static:                                Link Options.       (line  215)
62145* static <1>:                            Darwin Options.     (line  196)
62146* static <2>:                            HPPA Options.       (line  192)
62147* static-libasan:                        Link Options.       (line  262)
62148* static-libgcc:                         Link Options.       (line  228)
62149* static-liblsan:                        Link Options.       (line  278)
62150* static-libstdc++:                      Link Options.       (line  295)
62151* static-libtsan:                        Link Options.       (line  270)
62152* static-libubsan:                       Link Options.       (line  286)
62153* static-pie:                            Link Options.       (line  185)
62154* std:                                   Standards.          (line   13)
62155* std <1>:                               C Dialect Options.  (line   46)
62156* std <2>:                               Other Builtins.     (line   31)
62157* std <3>:                               Non-bugs.           (line  107)
62158* sub_library:                           Darwin Options.     (line  196)
62159* sub_umbrella:                          Darwin Options.     (line  196)
62160* symbolic:                              Link Options.       (line  306)
62161* sysroot:                               Directory Options.  (line  168)
62162* T:                                     Link Options.       (line  312)
62163* target-help:                           Overall Options.    (line  229)
62164* threads:                               HPPA Options.       (line  205)
62165* time:                                  Developer Options.  (line  749)
62166* tno-android-cc:                        GNU/Linux Options.  (line   36)
62167* tno-android-ld:                        GNU/Linux Options.  (line   40)
62168* traditional:                           Preprocessor Options.
62169                                                             (line  368)
62170* traditional <1>:                       Incompatibilities.  (line    6)
62171* traditional-cpp:                       Preprocessor Options.
62172                                                             (line  368)
62173* trigraphs:                             Preprocessor Options.
62174                                                             (line  378)
62175* twolevel_namespace:                    Darwin Options.     (line  196)
62176* U:                                     Preprocessor Options.
62177                                                             (line   42)
62178* u:                                     Link Options.       (line  344)
62179* umbrella:                              Darwin Options.     (line  196)
62180* undef:                                 Preprocessor Options.
62181                                                             (line   66)
62182* undefined:                             Darwin Options.     (line  196)
62183* unexported_symbols_list:               Darwin Options.     (line  196)
62184* v:                                     Overall Options.    (line  208)
62185* version:                               Overall Options.    (line  335)
62186* w:                                     Warning Options.    (line   25)
62187* W:                                     Warning Options.    (line  205)
62188* W <1>:                                 Warning Options.    (line 2553)
62189* W <2>:                                 Warning Options.    (line 2662)
62190* W <3>:                                 Incompatibilities.  (line   64)
62191* Wa:                                    Assembler Options.  (line    9)
62192* Wabi:                                  C++ Dialect Options.
62193                                                             (line  492)
62194* Wabi-tag:                              C++ Dialect Options.
62195                                                             (line  596)
62196* Wabi-tag <1>:                          C++ Dialect Options.
62197                                                             (line  596)
62198* Wabsolute-value:                       Warning Options.    (line 2047)
62199* Waddr-space-convert:                   AVR Options.        (line  290)
62200* Waddress:                              Warning Options.    (line 2426)
62201* Waddress-of-packed-member:             Warning Options.    (line 2439)
62202* Waggregate-return:                     Warning Options.    (line 2467)
62203* Waggressive-loop-optimizations:        Warning Options.    (line 2472)
62204* Waligned-new:                          Warning Options.    (line 1974)
62205* Wall:                                  Warning Options.    (line  135)
62206* Wall <1>:                              Standard Libraries. (line    6)
62207* Walloc-size-larger-than=:              Warning Options.    (line 1509)
62208* Walloc-zero:                           Warning Options.    (line 1499)
62209* Walloca:                               Warning Options.    (line 1524)
62210* Walloca-larger-than=:                  Warning Options.    (line 1527)
62211* Warray-bounds:                         Warning Options.    (line 1593)
62212* Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
62213                                                             (line  170)
62214* Wattribute-warning:                    Warning Options.    (line 2632)
62215* Wattributes:                           Warning Options.    (line 2477)
62216* Wbad-function-cast:                    Warning Options.    (line 2116)
62217* Wbool-compare:                         Warning Options.    (line 1642)
62218* Wbool-operation:                       Warning Options.    (line 1651)
62219* Wbuiltin-declaration-mismatch:         Warning Options.    (line 2483)
62220* Wbuiltin-macro-redefined:              Warning Options.    (line 2504)
62221* Wc++-compat:                           Warning Options.    (line 2142)
62222* Wc++11-compat:                         Warning Options.    (line 2147)
62223* Wc++14-compat:                         Warning Options.    (line 2153)
62224* Wc++17-compat:                         Warning Options.    (line 2157)
62225* Wc11-c2x-compat:                       Warning Options.    (line 2136)
62226* Wc90-c99-compat:                       Warning Options.    (line 2121)
62227* Wc99-c11-compat:                       Warning Options.    (line 2128)
62228* Wcast-align:                           Warning Options.    (line 2177)
62229* Wcast-align=strict:                    Warning Options.    (line 2183)
62230* Wcast-function-type:                   Warning Options.    (line 2188)
62231* Wcast-qual:                            Warning Options.    (line 2161)
62232* Wcatch-value:                          Warning Options.    (line 2215)
62233* Wchar-subscripts:                      Warning Options.    (line  248)
62234* Wclass-conversion:                     C++ Dialect Options.
62235                                                             (line  958)
62236* Wclass-memaccess:                      C++ Dialect Options.
62237                                                             (line  726)
62238* Wclobbered:                            Warning Options.    (line 2223)
62239* Wcomment:                              Warning Options.    (line 2058)
62240* Wcomments:                             Warning Options.    (line 2058)
62241* Wconditionally-supported:              Warning Options.    (line 2227)
62242* Wconversion:                           Warning Options.    (line 2230)
62243* Wconversion-null:                      Warning Options.    (line 2248)
62244* Wcoverage-mismatch:                    Warning Options.    (line  253)
62245* Wctor-dtor-privacy:                    C++ Dialect Options.
62246                                                             (line  601)
62247* Wdangling-else:                        Warning Options.    (line 2269)
62248* Wdate-time:                            Warning Options.    (line 2303)
62249* Wdeclaration-after-statement:          Warning Options.    (line 1848)
62250* Wdelete-incomplete:                    Warning Options.    (line 2308)
62251* Wdelete-non-virtual-dtor:              C++ Dialect Options.
62252                                                             (line  608)
62253* Wdeprecated:                           Warning Options.    (line 2639)
62254* Wdeprecated-copy:                      C++ Dialect Options.
62255                                                             (line  615)
62256* Wdeprecated-declarations:              Warning Options.    (line 2643)
62257* Wdisabled-optimization:                Warning Options.    (line 2872)
62258* Wdiscarded-array-qualifiers:           Warning Options.    (line 1690)
62259* Wdiscarded-qualifiers:                 Warning Options.    (line 1684)
62260* Wdiv-by-zero:                          Warning Options.    (line 1708)
62261* Wdouble-promotion:                     Warning Options.    (line  272)
62262* Wduplicate-decl-specifier:             Warning Options.    (line  290)
62263* Wduplicated-branches:                  Warning Options.    (line 1661)
62264* Wduplicated-cond:                      Warning Options.    (line 1672)
62265* weak_reference_mismatches:             Darwin Options.     (line  196)
62266* Weffc++:                               C++ Dialect Options.
62267                                                             (line  847)
62268* Wempty-body:                           Warning Options.    (line 2315)
62269* Wendif-labels:                         Warning Options.    (line 2102)
62270* Wenum-compare:                         Warning Options.    (line 2319)
62271* Werror:                                Warning Options.    (line   28)
62272* Werror=:                               Warning Options.    (line   31)
62273* Wexpansion-to-defined:                 Warning Options.    (line 2077)
62274* Wextra:                                Warning Options.    (line  205)
62275* Wextra <1>:                            Warning Options.    (line 2553)
62276* Wextra <2>:                            Warning Options.    (line 2662)
62277* Wextra-semi:                           Warning Options.    (line 2325)
62278* Wfatal-errors:                         Warning Options.    (line   48)
62279* Wfloat-conversion:                     Warning Options.    (line 2351)
62280* Wfloat-equal:                          Warning Options.    (line 1748)
62281* Wformat:                               Warning Options.    (line  295)
62282* Wformat <1>:                           Warning Options.    (line  320)
62283* Wformat <2>:                           Warning Options.    (line 1447)
62284* Wformat <3>:                           Common Function Attributes.
62285                                                             (line  310)
62286* Wformat-contains-nul:                  Warning Options.    (line  329)
62287* Wformat-extra-args:                    Warning Options.    (line  333)
62288* Wformat-nonliteral:                    Warning Options.    (line  438)
62289* Wformat-nonliteral <1>:                Common Function Attributes.
62290                                                             (line  375)
62291* Wformat-overflow:                      Warning Options.    (line  348)
62292* Wformat-overflow <1>:                  Warning Options.    (line  359)
62293* Wformat-security:                      Warning Options.    (line  443)
62294* Wformat-signedness:                    Warning Options.    (line  455)
62295* Wformat-truncation:                    Warning Options.    (line  461)
62296* Wformat-truncation <1>:                Warning Options.    (line  473)
62297* Wformat-y2k:                           Warning Options.    (line  484)
62298* Wformat-zero-length:                   Warning Options.    (line  428)
62299* Wformat=:                              Warning Options.    (line  295)
62300* Wformat=1:                             Warning Options.    (line  320)
62301* Wformat=2:                             Warning Options.    (line  433)
62302* Wframe-address:                        Warning Options.    (line 1678)
62303* Wframe-larger-than=:                   Warning Options.    (line 1913)
62304* Wfree-nonheap-object:                  Warning Options.    (line 1930)
62305* whatsloaded:                           Darwin Options.     (line  196)
62306* whyload:                               Darwin Options.     (line  196)
62307* Wif-not-aligned:                       Warning Options.    (line  656)
62308* Wignored-attributes:                   Warning Options.    (line  672)
62309* Wignored-qualifiers:                   Warning Options.    (line  661)
62310* Wimplicit:                             Warning Options.    (line  534)
62311* Wimplicit-fallthrough:                 Warning Options.    (line  538)
62312* Wimplicit-fallthrough=:                Warning Options.    (line  543)
62313* Wimplicit-function-declaration:        Warning Options.    (line  528)
62314* Wimplicit-int:                         Warning Options.    (line  524)
62315* Wincompatible-pointer-types:           Warning Options.    (line 1696)
62316* Winherited-variadic-ctor:              Warning Options.    (line 2755)
62317* Winit-list-lifetime:                   C++ Dialect Options.
62318                                                             (line  623)
62319* Winit-self:                            Warning Options.    (line  509)
62320* Winline:                               Warning Options.    (line 2760)
62321* Winline <1>:                           Inline.             (line   60)
62322* Wint-conversion:                       Warning Options.    (line 1702)
62323* Wint-in-bool-context:                  Warning Options.    (line 2785)
62324* Wint-to-pointer-cast:                  Warning Options.    (line 2793)
62325* Winvalid-memory-model:                 Warning Options.    (line 1127)
62326* Winvalid-offsetof:                     Warning Options.    (line 2773)
62327* Winvalid-pch:                          Warning Options.    (line 2802)
62328* Wjump-misses-init:                     Warning Options.    (line 2328)
62329* Wl:                                    Link Options.       (line  336)
62330* Wlarger-than-BYTE-SIZE:                Warning Options.    (line 1903)
62331* Wlarger-than=:                         Warning Options.    (line 1903)
62332* Wliteral-suffix:                       C++ Dialect Options.
62333                                                             (line  658)
62334* Wlogical-not-parentheses:              Warning Options.    (line 2452)
62335* Wlogical-op:                           Warning Options.    (line 2444)
62336* Wlong-long:                            Warning Options.    (line 2806)
62337* Wlto-type-mismatch:                    C++ Dialect Options.
62338                                                             (line  684)
62339* Wmain:                                 Warning Options.    (line  679)
62340* Wmaybe-uninitialized:                  Warning Options.    (line 1144)
62341* Wmemset-elt-size:                      Warning Options.    (line 2407)
62342* Wmemset-transposed-args:               Warning Options.    (line 2415)
62343* Wmisleading-indentation:               Warning Options.    (line  686)
62344* Wmissing-attributes:                   Warning Options.    (line  720)
62345* Wmissing-braces:                       Warning Options.    (line  764)
62346* Wmissing-declarations:                 Warning Options.    (line 2543)
62347* Wmissing-field-initializers:           Warning Options.    (line 2553)
62348* Wmissing-format-attribute:             Warning Options.    (line 1447)
62349* Wmissing-include-dirs:                 Warning Options.    (line  775)
62350* Wmissing-noreturn:                     Warning Options.    (line 1433)
62351* Wmissing-parameter-type:               Warning Options.    (line 2525)
62352* Wmissing-profile:                      Warning Options.    (line  778)
62353* Wmissing-prototypes:                   Warning Options.    (line 2533)
62354* Wmisspelled-isr:                       AVR Options.        (line  295)
62355* Wmultichar:                            Warning Options.    (line 2583)
62356* Wmultiple-inheritance:                 C++ Dialect Options.
62357                                                             (line  933)
62358* Wmultistatement-macros:                Warning Options.    (line  794)
62359* Wnamespaces:                           C++ Dialect Options.
62360                                                             (line  947)
62361* Wnarrowing:                            C++ Dialect Options.
62362                                                             (line  690)
62363* Wnested-externs:                       Warning Options.    (line 2752)
62364* Wno-abi:                               C++ Dialect Options.
62365                                                             (line  492)
62366* Wno-absolute-value:                    Warning Options.    (line 2047)
62367* Wno-addr-space-convert:                AVR Options.        (line  290)
62368* Wno-address:                           Warning Options.    (line 2426)
62369* Wno-address-of-packed-member:          Warning Options.    (line 2439)
62370* Wno-aggregate-return:                  Warning Options.    (line 2467)
62371* Wno-aggressive-loop-optimizations:     Warning Options.    (line 2472)
62372* Wno-aligned-new:                       Warning Options.    (line 1974)
62373* Wno-all:                               Warning Options.    (line  135)
62374* Wno-alloc-size-larger-than:            Warning Options.    (line 1509)
62375* Wno-alloc-size-larger-than <1>:        Warning Options.    (line 1520)
62376* Wno-alloc-zero:                        Warning Options.    (line 1499)
62377* Wno-alloca:                            Warning Options.    (line 1524)
62378* Wno-alloca-larger-than:                Warning Options.    (line 1527)
62379* Wno-alloca-larger-than <1>:            Warning Options.    (line 1588)
62380* Wno-array-bounds:                      Warning Options.    (line 1593)
62381* Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
62382                                                             (line  170)
62383* Wno-attribute-warning:                 Warning Options.    (line 2632)
62384* Wno-attributes:                        Warning Options.    (line 2477)
62385* Wno-bad-function-cast:                 Warning Options.    (line 2116)
62386* Wno-bool-compare:                      Warning Options.    (line 1642)
62387* Wno-bool-operation:                    Warning Options.    (line 1651)
62388* Wno-builtin-declaration-mismatch:      Warning Options.    (line 2483)
62389* Wno-builtin-macro-redefined:           Warning Options.    (line 2504)
62390* Wno-c++-compat:                        Warning Options.    (line 2142)
62391* Wno-c++11-compat:                      Warning Options.    (line 2147)
62392* Wno-c++14-compat:                      Warning Options.    (line 2153)
62393* Wno-c++17-compat:                      Warning Options.    (line 2157)
62394* Wno-c11-c2x-compat:                    Warning Options.    (line 2136)
62395* Wno-c90-c99-compat:                    Warning Options.    (line 2121)
62396* Wno-c99-c11-compat:                    Warning Options.    (line 2128)
62397* Wno-cast-align:                        Warning Options.    (line 2177)
62398* Wno-cast-function-type:                Warning Options.    (line 2188)
62399* Wno-cast-qual:                         Warning Options.    (line 2161)
62400* Wno-catch-value:                       Warning Options.    (line 2215)
62401* Wno-char-subscripts:                   Warning Options.    (line  248)
62402* Wno-class-conversion:                  C++ Dialect Options.
62403                                                             (line  958)
62404* Wno-class-memaccess:                   C++ Dialect Options.
62405                                                             (line  726)
62406* Wno-clobbered:                         Warning Options.    (line 2223)
62407* Wno-conditionally-supported:           Warning Options.    (line 2227)
62408* Wno-conversion:                        Warning Options.    (line 2230)
62409* Wno-conversion-null:                   Warning Options.    (line 2248)
62410* Wno-coverage-mismatch:                 Warning Options.    (line  253)
62411* Wno-ctor-dtor-privacy:                 C++ Dialect Options.
62412                                                             (line  601)
62413* Wno-dangling-else:                     Warning Options.    (line 2269)
62414* Wno-date-time:                         Warning Options.    (line 2303)
62415* Wno-declaration-after-statement:       Warning Options.    (line 1848)
62416* Wno-delete-incomplete:                 Warning Options.    (line 2308)
62417* Wno-delete-non-virtual-dtor:           C++ Dialect Options.
62418                                                             (line  608)
62419* Wno-deprecated:                        Warning Options.    (line 2639)
62420* Wno-deprecated-copy:                   C++ Dialect Options.
62421                                                             (line  615)
62422* Wno-deprecated-declarations:           Warning Options.    (line 2643)
62423* Wno-disabled-optimization:             Warning Options.    (line 2872)
62424* Wno-discarded-array-qualifiers:        Warning Options.    (line 1690)
62425* Wno-discarded-qualifiers:              Warning Options.    (line 1684)
62426* Wno-div-by-zero:                       Warning Options.    (line 1708)
62427* Wno-double-promotion:                  Warning Options.    (line  272)
62428* Wno-duplicate-decl-specifier:          Warning Options.    (line  290)
62429* Wno-duplicated-branches:               Warning Options.    (line 1661)
62430* Wno-duplicated-cond:                   Warning Options.    (line 1672)
62431* Wno-effc++:                            C++ Dialect Options.
62432                                                             (line  847)
62433* Wno-empty-body:                        Warning Options.    (line 2315)
62434* Wno-endif-labels:                      Warning Options.    (line 2102)
62435* Wno-enum-compare:                      Warning Options.    (line 2319)
62436* Wno-error:                             Warning Options.    (line   28)
62437* Wno-error=:                            Warning Options.    (line   31)
62438* Wno-extra:                             Warning Options.    (line  205)
62439* Wno-extra <1>:                         Warning Options.    (line 2553)
62440* Wno-extra <2>:                         Warning Options.    (line 2662)
62441* Wno-extra-semi:                        Warning Options.    (line 2325)
62442* Wno-fatal-errors:                      Warning Options.    (line   48)
62443* Wno-float-conversion:                  Warning Options.    (line 2351)
62444* Wno-float-equal:                       Warning Options.    (line 1748)
62445* Wno-format:                            Warning Options.    (line  295)
62446* Wno-format <1>:                        Warning Options.    (line 1447)
62447* Wno-format-contains-nul:               Warning Options.    (line  329)
62448* Wno-format-extra-args:                 Warning Options.    (line  333)
62449* Wno-format-nonliteral:                 Warning Options.    (line  438)
62450* Wno-format-overflow:                   Warning Options.    (line  348)
62451* Wno-format-overflow <1>:               Warning Options.    (line  359)
62452* Wno-format-security:                   Warning Options.    (line  443)
62453* Wno-format-signedness:                 Warning Options.    (line  455)
62454* Wno-format-truncation:                 Warning Options.    (line  461)
62455* Wno-format-truncation <1>:             Warning Options.    (line  473)
62456* Wno-format-y2k:                        Warning Options.    (line  484)
62457* Wno-format-zero-length:                Warning Options.    (line  428)
62458* Wno-frame-address:                     Warning Options.    (line 1678)
62459* Wno-frame-larger-than:                 Warning Options.    (line 1913)
62460* Wno-frame-larger-than <1>:             Warning Options.    (line 1926)
62461* Wno-free-nonheap-object:               Warning Options.    (line 1930)
62462* Wno-if-not-aligned:                    Warning Options.    (line  656)
62463* Wno-ignored-attributes:                Warning Options.    (line  672)
62464* Wno-ignored-qualifiers:                Warning Options.    (line  661)
62465* Wno-implicit:                          Warning Options.    (line  534)
62466* Wno-implicit-fallthrough:              Warning Options.    (line  538)
62467* Wno-implicit-function-declaration:     Warning Options.    (line  528)
62468* Wno-implicit-int:                      Warning Options.    (line  524)
62469* Wno-incompatible-pointer-types:        Warning Options.    (line 1696)
62470* Wno-inherited-variadic-ctor:           Warning Options.    (line 2755)
62471* Wno-init-list-lifetime:                C++ Dialect Options.
62472                                                             (line  623)
62473* Wno-init-self:                         Warning Options.    (line  509)
62474* Wno-inline:                            Warning Options.    (line 2760)
62475* Wno-int-conversion:                    Warning Options.    (line 1702)
62476* Wno-int-in-bool-context:               Warning Options.    (line 2785)
62477* Wno-int-to-pointer-cast:               Warning Options.    (line 2793)
62478* Wno-invalid-memory-model:              Warning Options.    (line 1127)
62479* Wno-invalid-offsetof:                  Warning Options.    (line 2773)
62480* Wno-invalid-pch:                       Warning Options.    (line 2802)
62481* Wno-jump-misses-init:                  Warning Options.    (line 2328)
62482* Wno-larger-than:                       Warning Options.    (line 1909)
62483* Wno-literal-suffix:                    C++ Dialect Options.
62484                                                             (line  658)
62485* Wno-logical-not-parentheses:           Warning Options.    (line 2452)
62486* Wno-logical-op:                        Warning Options.    (line 2444)
62487* Wno-long-long:                         Warning Options.    (line 2806)
62488* Wno-lto-type-mismatch:                 C++ Dialect Options.
62489                                                             (line  684)
62490* Wno-main:                              Warning Options.    (line  679)
62491* Wno-maybe-uninitialized:               Warning Options.    (line 1144)
62492* Wno-memset-elt-size:                   Warning Options.    (line 2407)
62493* Wno-memset-transposed-args:            Warning Options.    (line 2415)
62494* Wno-misleading-indentation:            Warning Options.    (line  686)
62495* Wno-missing-attributes:                Warning Options.    (line  720)
62496* Wno-missing-braces:                    Warning Options.    (line  764)
62497* Wno-missing-declarations:              Warning Options.    (line 2543)
62498* Wno-missing-field-initializers:        Warning Options.    (line 2553)
62499* Wno-missing-format-attribute:          Warning Options.    (line 1447)
62500* Wno-missing-include-dirs:              Warning Options.    (line  775)
62501* Wno-missing-noreturn:                  Warning Options.    (line 1433)
62502* Wno-missing-parameter-type:            Warning Options.    (line 2525)
62503* Wno-missing-profile:                   Warning Options.    (line  778)
62504* Wno-missing-prototypes:                Warning Options.    (line 2533)
62505* Wno-misspelled-isr:                    AVR Options.        (line  295)
62506* Wno-multichar:                         Warning Options.    (line 2583)
62507* Wno-multiple-inheritance:              C++ Dialect Options.
62508                                                             (line  933)
62509* Wno-multistatement-macros:             Warning Options.    (line  794)
62510* Wno-namespaces:                        C++ Dialect Options.
62511                                                             (line  947)
62512* Wno-narrowing:                         C++ Dialect Options.
62513                                                             (line  690)
62514* Wno-nested-externs:                    Warning Options.    (line 2752)
62515* Wno-noexcept:                          C++ Dialect Options.
62516                                                             (line  706)
62517* Wno-noexcept-type:                     C++ Dialect Options.
62518                                                             (line  712)
62519* Wno-non-template-friend:               C++ Dialect Options.
62520                                                             (line  882)
62521* Wno-non-virtual-dtor:                  C++ Dialect Options.
62522                                                             (line  746)
62523* Wno-nonnull:                           Warning Options.    (line  488)
62524* Wno-nonnull-compare:                   Warning Options.    (line  495)
62525* Wno-normalized:                        Warning Options.    (line 2589)
62526* Wno-null-dereference:                  Warning Options.    (line  502)
62527* Wno-odr:                               Warning Options.    (line 2652)
62528* Wno-old-style-cast:                    C++ Dialect Options.
62529                                                             (line  891)
62530* Wno-old-style-declaration:             Warning Options.    (line 2515)
62531* Wno-old-style-definition:              Warning Options.    (line 2521)
62532* Wno-openmp-simd:                       Warning Options.    (line 2657)
62533* Wno-overflow:                          Warning Options.    (line 2649)
62534* Wno-overlength-strings:                Warning Options.    (line 2892)
62535* Wno-overloaded-virtual:                C++ Dialect Options.
62536                                                             (line  897)
62537* Wno-override-init:                     Warning Options.    (line 2662)
62538* Wno-override-init-side-effects:        Warning Options.    (line 2670)
62539* Wno-packed:                            Warning Options.    (line 2675)
62540* Wno-packed-bitfield-compat:            Warning Options.    (line 2692)
62541* Wno-packed-not-aligned:                Warning Options.    (line 2709)
62542* Wno-padded:                            Warning Options.    (line 2722)
62543* Wno-parentheses:                       Warning Options.    (line  814)
62544* Wno-pedantic:                          Warning Options.    (line   85)
62545* Wno-pedantic-ms-format:                Warning Options.    (line 1968)
62546* Wno-pessimizing-move:                  C++ Dialect Options.
62547                                                             (line  775)
62548* Wno-placement-new:                     Warning Options.    (line 1985)
62549* Wno-pmf-conversions:                   C++ Dialect Options.
62550                                                             (line  916)
62551* Wno-pmf-conversions <1>:               Bound member functions.
62552                                                             (line   35)
62553* Wno-pointer-arith:                     Warning Options.    (line 2020)
62554* Wno-pointer-compare:                   Warning Options.    (line 2027)
62555* Wno-pointer-sign:                      Warning Options.    (line 2881)
62556* Wno-pointer-to-int-cast:               Warning Options.    (line 2798)
62557* Wno-pragmas:                           Warning Options.    (line 1196)
62558* Wno-prio-ctor-dtor:                    Warning Options.    (line 1201)
62559* Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
62560                                                             (line  174)
62561* Wno-redundant-decls:                   Warning Options.    (line 2729)
62562* Wno-redundant-move:                    C++ Dialect Options.
62563                                                             (line  797)
62564* Wno-register:                          C++ Dialect Options.
62565                                                             (line  754)
62566* Wno-reorder:                           C++ Dialect Options.
62567                                                             (line  761)
62568* Wno-restrict:                          Warning Options.    (line 2733)
62569* Wno-return-local-addr:                 Warning Options.    (line  894)
62570* Wno-return-type:                       Warning Options.    (line  898)
62571* Wno-scalar-storage-order:              Warning Options.    (line 2357)
62572* Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
62573                                                             (line  184)
62574* Wno-sequence-point:                    Warning Options.    (line  841)
62575* Wno-shadow:                            Warning Options.    (line 1854)
62576* Wno-shadow-ivar:                       Warning Options.    (line 1862)
62577* Wno-shift-count-negative:              Warning Options.    (line  919)
62578* Wno-shift-count-overflow:              Warning Options.    (line  923)
62579* Wno-shift-negative-value:              Warning Options.    (line  927)
62580* Wno-shift-overflow:                    Warning Options.    (line  932)
62581* Wno-sign-compare:                      Warning Options.    (line 2339)
62582* Wno-sign-conversion:                   Warning Options.    (line 2345)
62583* Wno-sign-promo:                        C++ Dialect Options.
62584                                                             (line  920)
62585* Wno-sized-deallocation:                Warning Options.    (line 2361)
62586* Wno-sizeof-array-argument:             Warning Options.    (line 2402)
62587* Wno-sizeof-pointer-div:                Warning Options.    (line 2372)
62588* Wno-sizeof-pointer-memaccess:          Warning Options.    (line 2380)
62589* Wno-stack-protector:                   Warning Options.    (line 2887)
62590* Wno-stack-usage:                       Warning Options.    (line 1934)
62591* Wno-stack-usage <1>:                   Warning Options.    (line 1958)
62592* Wno-strict-aliasing:                   Warning Options.    (line 1209)
62593* Wno-strict-null-sentinel:              C++ Dialect Options.
62594                                                             (line  875)
62595* Wno-strict-overflow:                   Warning Options.    (line 1248)
62596* Wno-strict-prototypes:                 Warning Options.    (line 2509)
62597* Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
62598                                                             (line  196)
62599* Wno-stringop-overflow:                 Warning Options.    (line 1297)
62600* Wno-stringop-overflow <1>:             Warning Options.    (line 1336)
62601* Wno-stringop-truncation:               Warning Options.    (line 1374)
62602* Wno-subobject-linkage:                 Warning Options.    (line 2256)
62603* Wno-suggest-attribute=:                Warning Options.    (line 1425)
62604* Wno-suggest-attribute=cold:            Warning Options.    (line 1468)
62605* Wno-suggest-attribute=const:           Warning Options.    (line 1433)
62606* Wno-suggest-attribute=format:          Warning Options.    (line 1447)
62607* Wno-suggest-attribute=malloc:          Warning Options.    (line 1433)
62608* Wno-suggest-attribute=noreturn:        Warning Options.    (line 1433)
62609* Wno-suggest-attribute=pure:            Warning Options.    (line 1433)
62610* Wno-suggest-final-methods:             Warning Options.    (line 1485)
62611* Wno-suggest-final-types:               Warning Options.    (line 1476)
62612* Wno-switch:                            Warning Options.    (line  949)
62613* Wno-switch-bool:                       Warning Options.    (line  969)
62614* Wno-switch-default:                    Warning Options.    (line  957)
62615* Wno-switch-enum:                       Warning Options.    (line  960)
62616* Wno-switch-unreachable:                Warning Options.    (line  980)
62617* Wno-sync-nand:                         Warning Options.    (line 1004)
62618* Wno-system-headers:                    Warning Options.    (line 1713)
62619* Wno-tautological-compare:              Warning Options.    (line 1724)
62620* Wno-templates:                         C++ Dialect Options.
62621                                                             (line  926)
62622* Wno-terminate:                         C++ Dialect Options.
62623                                                             (line  954)
62624* Wno-traditional:                       Warning Options.    (line 1763)
62625* Wno-traditional-conversion:            Warning Options.    (line 1840)
62626* Wno-trampolines:                       Warning Options.    (line 1738)
62627* Wno-type-limits:                       Warning Options.    (line 2040)
62628* Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
62629                                                             (line  204)
62630* Wno-undef:                             Warning Options.    (line 2073)
62631* Wno-uninitialized:                     Warning Options.    (line 1105)
62632* Wno-unknown-pragmas:                   Warning Options.    (line 1189)
62633* Wno-unsafe-loop-optimizations:         Warning Options.    (line 1962)
62634* Wno-unsuffixed-float-constants:        Warning Options.    (line 2907)
62635* Wno-unused:                            Warning Options.    (line 1098)
62636* Wno-unused-but-set-parameter:          Warning Options.    (line 1009)
62637* Wno-unused-but-set-variable:           Warning Options.    (line 1018)
62638* Wno-unused-const-variable:             Warning Options.    (line 1065)
62639* Wno-unused-function:                   Warning Options.    (line 1028)
62640* Wno-unused-label:                      Warning Options.    (line 1033)
62641* Wno-unused-local-typedefs:             Warning Options.    (line 1040)
62642* Wno-unused-parameter:                  Warning Options.    (line 1044)
62643* Wno-unused-result:                     Warning Options.    (line 1051)
62644* Wno-unused-value:                      Warning Options.    (line 1088)
62645* Wno-unused-variable:                   Warning Options.    (line 1056)
62646* Wno-useless-cast:                      Warning Options.    (line 2312)
62647* Wno-varargs:                           Warning Options.    (line 2817)
62648* Wno-variadic-macros:                   Warning Options.    (line 2811)
62649* Wno-vector-operation-performance:      Warning Options.    (line 2822)
62650* Wno-virtual-inheritance:               C++ Dialect Options.
62651                                                             (line  940)
62652* Wno-virtual-move-assign:               Warning Options.    (line 2832)
62653* Wno-vla:                               Warning Options.    (line 2841)
62654* Wno-vla-larger-than:                   Warning Options.    (line 2845)
62655* Wno-vla-larger-than <1>:               Warning Options.    (line 2862)
62656* Wno-volatile-register-var:             Warning Options.    (line 2866)
62657* Wno-write-strings:                     Warning Options.    (line 2201)
62658* Wno-zero-as-null-pointer-constant:     Warning Options.    (line 2252)
62659* Wnoexcept:                             C++ Dialect Options.
62660                                                             (line  706)
62661* Wnoexcept-type:                        C++ Dialect Options.
62662                                                             (line  712)
62663* Wnon-template-friend:                  C++ Dialect Options.
62664                                                             (line  882)
62665* Wnon-virtual-dtor:                     C++ Dialect Options.
62666                                                             (line  746)
62667* Wnonnull:                              Warning Options.    (line  488)
62668* Wnonnull-compare:                      Warning Options.    (line  495)
62669* Wnormalized:                           Warning Options.    (line 2589)
62670* Wnormalized=:                          Warning Options.    (line 2589)
62671* Wnull-dereference:                     Warning Options.    (line  502)
62672* Wodr:                                  Warning Options.    (line 2652)
62673* Wold-style-cast:                       C++ Dialect Options.
62674                                                             (line  891)
62675* Wold-style-declaration:                Warning Options.    (line 2515)
62676* Wold-style-definition:                 Warning Options.    (line 2521)
62677* Wopenmp-simd:                          Warning Options.    (line 2657)
62678* Woverflow:                             Warning Options.    (line 2649)
62679* Woverlength-strings:                   Warning Options.    (line 2892)
62680* Woverloaded-virtual:                   C++ Dialect Options.
62681                                                             (line  897)
62682* Woverride-init:                        Warning Options.    (line 2662)
62683* Woverride-init-side-effects:           Warning Options.    (line 2670)
62684* Wp:                                    Preprocessor Options.
62685                                                             (line  456)
62686* Wpacked:                               Warning Options.    (line 2675)
62687* Wpacked-bitfield-compat:               Warning Options.    (line 2692)
62688* Wpacked-not-aligned:                   Warning Options.    (line 2709)
62689* Wpadded:                               Warning Options.    (line 2722)
62690* Wparentheses:                          Warning Options.    (line  814)
62691* Wpedantic:                             Warning Options.    (line   85)
62692* Wpedantic-ms-format:                   Warning Options.    (line 1968)
62693* Wpessimizing-move:                     C++ Dialect Options.
62694                                                             (line  775)
62695* Wplacement-new:                        Warning Options.    (line 1985)
62696* Wpmf-conversions:                      C++ Dialect Options.
62697                                                             (line  916)
62698* Wpointer-arith:                        Warning Options.    (line 2020)
62699* Wpointer-arith <1>:                    Pointer Arith.      (line   13)
62700* Wpointer-compare:                      Warning Options.    (line 2027)
62701* Wpointer-sign:                         Warning Options.    (line 2881)
62702* Wpointer-to-int-cast:                  Warning Options.    (line 2798)
62703* Wpragmas:                              Warning Options.    (line 1196)
62704* Wprio-ctor-dtor:                       Warning Options.    (line 1201)
62705* Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
62706                                                             (line  174)
62707* wrapper:                               Overall Options.    (line  361)
62708* Wredundant-decls:                      Warning Options.    (line 2729)
62709* Wredundant-move:                       C++ Dialect Options.
62710                                                             (line  797)
62711* Wregister:                             C++ Dialect Options.
62712                                                             (line  754)
62713* Wreorder:                              C++ Dialect Options.
62714                                                             (line  761)
62715* Wrestrict:                             Warning Options.    (line 2733)
62716* Wreturn-local-addr:                    Warning Options.    (line  894)
62717* Wreturn-type:                          Warning Options.    (line  898)
62718* Wscalar-storage-order:                 Warning Options.    (line 2357)
62719* Wselector:                             Objective-C and Objective-C++ Dialect Options.
62720                                                             (line  184)
62721* Wsequence-point:                       Warning Options.    (line  841)
62722* Wshadow:                               Warning Options.    (line 1854)
62723* Wshadow-ivar:                          Warning Options.    (line 1862)
62724* Wshadow=compatible-local:              Warning Options.    (line 1873)
62725* Wshadow=local:                         Warning Options.    (line 1866)
62726* Wshadow=local <1>:                     Warning Options.    (line 1869)
62727* Wshift-count-negative:                 Warning Options.    (line  919)
62728* Wshift-count-overflow:                 Warning Options.    (line  923)
62729* Wshift-negative-value:                 Warning Options.    (line  927)
62730* Wshift-overflow:                       Warning Options.    (line  932)
62731* Wsign-compare:                         Warning Options.    (line 2339)
62732* Wsign-conversion:                      Warning Options.    (line 2345)
62733* Wsign-promo:                           C++ Dialect Options.
62734                                                             (line  920)
62735* Wsized-deallocation:                   Warning Options.    (line 2361)
62736* Wsizeof-array-argument:                Warning Options.    (line 2402)
62737* Wsizeof-pointer-div:                   Warning Options.    (line 2372)
62738* Wsizeof-pointer-memaccess:             Warning Options.    (line 2380)
62739* Wstack-protector:                      Warning Options.    (line 2887)
62740* Wstack-usage:                          Warning Options.    (line 1934)
62741* Wstrict-aliasing:                      Warning Options.    (line 1209)
62742* Wstrict-aliasing=n:                    Warning Options.    (line 1216)
62743* Wstrict-null-sentinel:                 C++ Dialect Options.
62744                                                             (line  875)
62745* Wstrict-overflow:                      Warning Options.    (line 1248)
62746* Wstrict-prototypes:                    Warning Options.    (line 2509)
62747* Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
62748                                                             (line  196)
62749* Wstringop-overflow:                    Warning Options.    (line 1297)
62750* Wstringop-overflow <1>:                Warning Options.    (line 1336)
62751* Wstringop-truncation:                  Warning Options.    (line 1374)
62752* Wsubobject-linkage:                    Warning Options.    (line 2256)
62753* Wsuggest-attribute=:                   Warning Options.    (line 1425)
62754* Wsuggest-attribute=cold:               Warning Options.    (line 1468)
62755* Wsuggest-attribute=const:              Warning Options.    (line 1433)
62756* Wsuggest-attribute=format:             Warning Options.    (line 1447)
62757* Wsuggest-attribute=malloc:             Warning Options.    (line 1433)
62758* Wsuggest-attribute=noreturn:           Warning Options.    (line 1433)
62759* Wsuggest-attribute=pure:               Warning Options.    (line 1433)
62760* Wsuggest-final-methods:                Warning Options.    (line 1485)
62761* Wsuggest-final-types:                  Warning Options.    (line 1476)
62762* Wswitch:                               Warning Options.    (line  949)
62763* Wswitch-bool:                          Warning Options.    (line  969)
62764* Wswitch-default:                       Warning Options.    (line  957)
62765* Wswitch-enum:                          Warning Options.    (line  960)
62766* Wswitch-unreachable:                   Warning Options.    (line  980)
62767* Wsync-nand:                            Warning Options.    (line 1004)
62768* Wsystem-headers:                       Warning Options.    (line 1713)
62769* Wtautological-compare:                 Warning Options.    (line 1724)
62770* Wtemplates:                            C++ Dialect Options.
62771                                                             (line  926)
62772* Wterminate:                            C++ Dialect Options.
62773                                                             (line  954)
62774* Wtraditional:                          Warning Options.    (line 1763)
62775* Wtraditional-conversion:               Warning Options.    (line 1840)
62776* Wtrampolines:                          Warning Options.    (line 1738)
62777* Wtrigraphs:                            Warning Options.    (line 2063)
62778* Wtype-limits:                          Warning Options.    (line 2040)
62779* Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
62780                                                             (line  204)
62781* Wundef:                                Warning Options.    (line 2073)
62782* Wuninitialized:                        Warning Options.    (line 1105)
62783* Wunknown-pragmas:                      Warning Options.    (line 1189)
62784* Wunsafe-loop-optimizations:            Warning Options.    (line 1962)
62785* Wunsuffixed-float-constants:           Warning Options.    (line 2907)
62786* Wunused:                               Warning Options.    (line 1098)
62787* Wunused-but-set-parameter:             Warning Options.    (line 1009)
62788* Wunused-but-set-variable:              Warning Options.    (line 1018)
62789* Wunused-const-variable:                Warning Options.    (line 1065)
62790* Wunused-function:                      Warning Options.    (line 1028)
62791* Wunused-label:                         Warning Options.    (line 1033)
62792* Wunused-local-typedefs:                Warning Options.    (line 1040)
62793* Wunused-macros:                        Warning Options.    (line 2083)
62794* Wunused-parameter:                     Warning Options.    (line 1044)
62795* Wunused-result:                        Warning Options.    (line 1051)
62796* Wunused-value:                         Warning Options.    (line 1088)
62797* Wunused-variable:                      Warning Options.    (line 1056)
62798* Wuseless-cast:                         Warning Options.    (line 2312)
62799* Wvarargs:                              Warning Options.    (line 2817)
62800* Wvariadic-macros:                      Warning Options.    (line 2811)
62801* Wvector-operation-performance:         Warning Options.    (line 2822)
62802* Wvirtual-inheritance:                  C++ Dialect Options.
62803                                                             (line  940)
62804* Wvirtual-move-assign:                  Warning Options.    (line 2832)
62805* Wvla:                                  Warning Options.    (line 2841)
62806* Wvla-larger-than=:                     Warning Options.    (line 2845)
62807* Wvolatile-register-var:                Warning Options.    (line 2866)
62808* Wwrite-strings:                        Warning Options.    (line 2201)
62809* Wzero-as-null-pointer-constant:        Warning Options.    (line 2252)
62810* x:                                     Overall Options.    (line  138)
62811* Xassembler:                            Assembler Options.  (line   13)
62812* Xbind-lazy:                            VxWorks Options.    (line   26)
62813* Xbind-now:                             VxWorks Options.    (line   30)
62814* Xlinker:                               Link Options.       (line  318)
62815* Xpreprocessor:                         Preprocessor Options.
62816                                                             (line  467)
62817* Ym:                                    System V Options.   (line   26)
62818* YP:                                    System V Options.   (line   22)
62819* z:                                     Link Options.       (line  349)
62820
62821
62822File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
62823
62824Keyword Index
62825*************
62826
62827�[index�]
62828* Menu:
62829
62830* #pragma:                               Pragmas.            (line    6)
62831* #pragma implementation:                C++ Interface.      (line   36)
62832* #pragma implementation, implied:       C++ Interface.      (line   43)
62833* #pragma interface:                     C++ Interface.      (line   17)
62834* $:                                     Dollar Signs.       (line    6)
62835* % in constraint:                       Modifiers.          (line   52)
62836* %include:                              Spec Files.         (line   26)
62837* %include_noerr:                        Spec Files.         (line   30)
62838* %rename:                               Spec Files.         (line   34)
62839* & in constraint:                       Modifiers.          (line   25)
62840* ':                                     Incompatibilities.  (line  116)
62841* *__builtin_alloca:                     Other Builtins.     (line  129)
62842* *__builtin_alloca_with_align:          Other Builtins.     (line  166)
62843* *__builtin_alloca_with_align_and_max:  Other Builtins.     (line  211)
62844* + in constraint:                       Modifiers.          (line   12)
62845* -lgcc, use with -nodefaultlibs:        Link Options.       (line  155)
62846* -lgcc, use with -nostdlib:             Link Options.       (line  155)
62847* -march feature modifiers:              AArch64 Options.    (line  318)
62848* -mcpu feature modifiers:               AArch64 Options.    (line  318)
62849* -nodefaultlibs and unresolved references: Link Options.    (line  155)
62850* -nostdlib and unresolved references:   Link Options.       (line  155)
62851* .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
62852                                                             (line  718)
62853* //:                                    C++ Comments.       (line    6)
62854* 0 in constraint:                       Simple Constraints. (line  125)
62855* < in constraint:                       Simple Constraints. (line   47)
62856* = in constraint:                       Modifiers.          (line    8)
62857* > in constraint:                       Simple Constraints. (line   59)
62858* ?: extensions:                         Conditionals.       (line    6)
62859* ?: side effect:                        Conditionals.       (line   20)
62860* _ in variables in macros:              Typeof.             (line   46)
62861* _Accum data type:                      Fixed-Point.        (line    6)
62862* _Complex keyword:                      Complex.            (line    6)
62863* _Decimal128 data type:                 Decimal Float.      (line    6)
62864* _Decimal32 data type:                  Decimal Float.      (line    6)
62865* _Decimal64 data type:                  Decimal Float.      (line    6)
62866* _Exit:                                 Other Builtins.     (line    6)
62867* _exit:                                 Other Builtins.     (line    6)
62868* _FloatN data types:                    Floating Types.     (line    6)
62869* _FloatNx data types:                   Floating Types.     (line    6)
62870* _Fract data type:                      Fixed-Point.        (line    6)
62871* _get_ssp:                              x86 control-flow protection intrinsics.
62872                                                             (line    6)
62873* _HTM_FIRST_USER_ABORT_CODE:            S/390 System z Built-in Functions.
62874                                                             (line   44)
62875* _inc_ssp:                              x86 control-flow protection intrinsics.
62876                                                             (line   12)
62877* _Sat data type:                        Fixed-Point.        (line    6)
62878* _xabort:                               x86 transactional memory intrinsics.
62879                                                             (line   57)
62880* _xbegin:                               x86 transactional memory intrinsics.
62881                                                             (line   19)
62882* _xend:                                 x86 transactional memory intrinsics.
62883                                                             (line   48)
62884* _xtest:                                x86 transactional memory intrinsics.
62885                                                             (line   53)
62886* __atomic_add_fetch:                    __atomic Builtins.  (line  179)
62887* __atomic_always_lock_free:             __atomic Builtins.  (line  267)
62888* __atomic_and_fetch:                    __atomic Builtins.  (line  183)
62889* __atomic_clear:                        __atomic Builtins.  (line  241)
62890* __atomic_compare_exchange:             __atomic Builtins.  (line  171)
62891* __atomic_compare_exchange_n:           __atomic Builtins.  (line  147)
62892* __atomic_exchange:                     __atomic Builtins.  (line  141)
62893* __atomic_exchange_n:                   __atomic Builtins.  (line  131)
62894* __atomic_fetch_add:                    __atomic Builtins.  (line  204)
62895* __atomic_fetch_and:                    __atomic Builtins.  (line  208)
62896* __atomic_fetch_nand:                   __atomic Builtins.  (line  214)
62897* __atomic_fetch_or:                     __atomic Builtins.  (line  212)
62898* __atomic_fetch_sub:                    __atomic Builtins.  (line  206)
62899* __atomic_fetch_xor:                    __atomic Builtins.  (line  210)
62900* __atomic_is_lock_free:                 __atomic Builtins.  (line  281)
62901* __atomic_load:                         __atomic Builtins.  (line  113)
62902* __atomic_load_n:                       __atomic Builtins.  (line  106)
62903* __atomic_nand_fetch:                   __atomic Builtins.  (line  189)
62904* __atomic_or_fetch:                     __atomic Builtins.  (line  187)
62905* __atomic_signal_fence:                 __atomic Builtins.  (line  260)
62906* __atomic_store:                        __atomic Builtins.  (line  126)
62907* __atomic_store_n:                      __atomic Builtins.  (line  118)
62908* __atomic_sub_fetch:                    __atomic Builtins.  (line  181)
62909* __atomic_test_and_set:                 __atomic Builtins.  (line  229)
62910* __atomic_thread_fence:                 __atomic Builtins.  (line  253)
62911* __atomic_xor_fetch:                    __atomic Builtins.  (line  185)
62912* __builtin_addf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
62913                                                             (line   17)
62914* __builtin_add_overflow:                Integer Overflow Builtins.
62915                                                             (line    9)
62916* __builtin_add_overflow_p:              Integer Overflow Builtins.
62917                                                             (line   86)
62918* __builtin_alloca:                      Other Builtins.     (line    6)
62919* __builtin_alloca_with_align:           Other Builtins.     (line    6)
62920* __builtin_alloca_with_align_and_max:   Other Builtins.     (line    6)
62921* __builtin_apply:                       Constructing Calls. (line   29)
62922* __builtin_apply_args:                  Constructing Calls. (line   19)
62923* __builtin_arc_aligned:                 ARC Built-in Functions.
62924                                                             (line   18)
62925* __builtin_arc_brk:                     ARC Built-in Functions.
62926                                                             (line   28)
62927* __builtin_arc_core_read:               ARC Built-in Functions.
62928                                                             (line   32)
62929* __builtin_arc_core_write:              ARC Built-in Functions.
62930                                                             (line   39)
62931* __builtin_arc_divaw:                   ARC Built-in Functions.
62932                                                             (line   46)
62933* __builtin_arc_flag:                    ARC Built-in Functions.
62934                                                             (line   53)
62935* __builtin_arc_lr:                      ARC Built-in Functions.
62936                                                             (line   57)
62937* __builtin_arc_mul64:                   ARC Built-in Functions.
62938                                                             (line   64)
62939* __builtin_arc_mulu64:                  ARC Built-in Functions.
62940                                                             (line   68)
62941* __builtin_arc_nop:                     ARC Built-in Functions.
62942                                                             (line   73)
62943* __builtin_arc_norm:                    ARC Built-in Functions.
62944                                                             (line   77)
62945* __builtin_arc_normw:                   ARC Built-in Functions.
62946                                                             (line   84)
62947* __builtin_arc_rtie:                    ARC Built-in Functions.
62948                                                             (line   91)
62949* __builtin_arc_sleep:                   ARC Built-in Functions.
62950                                                             (line   95)
62951* __builtin_arc_sr:                      ARC Built-in Functions.
62952                                                             (line   99)
62953* __builtin_arc_swap:                    ARC Built-in Functions.
62954                                                             (line  106)
62955* __builtin_arc_swi:                     ARC Built-in Functions.
62956                                                             (line  112)
62957* __builtin_arc_sync:                    ARC Built-in Functions.
62958                                                             (line  116)
62959* __builtin_arc_trap_s:                  ARC Built-in Functions.
62960                                                             (line  120)
62961* __builtin_arc_unimp_s:                 ARC Built-in Functions.
62962                                                             (line  124)
62963* __builtin_assume_aligned:              Other Builtins.     (line  658)
62964* __builtin_bswap16:                     Other Builtins.     (line  979)
62965* __builtin_bswap32:                     Other Builtins.     (line  983)
62966* __builtin_bswap64:                     Other Builtins.     (line  987)
62967* __builtin_call_with_static_chain:      Other Builtins.     (line    6)
62968* __builtin_call_with_static_chain <1>:  Other Builtins.     (line  385)
62969* __builtin_choose_expr:                 Other Builtins.     (line  396)
62970* __builtin_clrsb:                       Other Builtins.     (line  909)
62971* __builtin_clrsbl:                      Other Builtins.     (line  931)
62972* __builtin_clrsbll:                     Other Builtins.     (line  954)
62973* __builtin_clz:                         Other Builtins.     (line  901)
62974* __builtin_clzl:                        Other Builtins.     (line  923)
62975* __builtin_clzll:                       Other Builtins.     (line  946)
62976* __builtin_complex:                     Other Builtins.     (line  490)
62977* __builtin_constant_p:                  Other Builtins.     (line  499)
62978* __builtin_convertvector:               Vector Extensions.  (line  165)
62979* __builtin_cpu_init:                    Basic PowerPC Built-in Functions Available on all Configurations.
62980                                                             (line    6)
62981* __builtin_cpu_init <1>:                x86 Built-in Functions.
62982                                                             (line   68)
62983* __builtin_cpu_is:                      Basic PowerPC Built-in Functions Available on all Configurations.
62984                                                             (line   10)
62985* __builtin_cpu_is <1>:                  x86 Built-in Functions.
62986                                                             (line   96)
62987* __builtin_cpu_supports:                Basic PowerPC Built-in Functions Available on all Configurations.
62988                                                             (line   68)
62989* __builtin_cpu_supports <1>:            x86 Built-in Functions.
62990                                                             (line  231)
62991* __builtin_ctz:                         Other Builtins.     (line  905)
62992* __builtin_ctzl:                        Other Builtins.     (line  927)
62993* __builtin_ctzll:                       Other Builtins.     (line  950)
62994* __builtin_divf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
62995                                                             (line   29)
62996* __builtin_expect:                      Other Builtins.     (line  562)
62997* __builtin_expect_with_probability:     Other Builtins.     (line  593)
62998* __builtin_extend_pointer:              Other Builtins.     (line    6)
62999* __builtin_extend_pointer <1>:          Other Builtins.     (line  991)
63000* __builtin_extract_return_addr:         Return Address.     (line   50)
63001* __builtin_ffs:                         Other Builtins.     (line  897)
63002* __builtin_ffsl:                        Other Builtins.     (line  920)
63003* __builtin_ffsll:                       Other Builtins.     (line  942)
63004* __builtin_FILE:                        Other Builtins.     (line  691)
63005* __builtin_fmaf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
63006                                                             (line   37)
63007* __builtin_fpclassify:                  Other Builtins.     (line    6)
63008* __builtin_fpclassify <1>:              Other Builtins.     (line  793)
63009* __builtin_frame_address:               Return Address.     (line   62)
63010* __builtin_frob_return_address:         Return Address.     (line   59)
63011* __builtin_FUNCTION:                    Other Builtins.     (line  683)
63012* __builtin_goacc_parlevel_id:           Other Builtins.     (line  998)
63013* __builtin_goacc_parlevel_size:         Other Builtins.     (line 1002)
63014* __builtin_has_attribute:               Other Builtins.     (line    6)
63015* __builtin_has_attribute <1>:           Other Builtins.     (line  220)
63016* __builtin_huge_val:                    Other Builtins.     (line  773)
63017* __builtin_huge_valf:                   Other Builtins.     (line  778)
63018* __builtin_huge_valfN:                  Other Builtins.     (line  785)
63019* __builtin_huge_valfNx:                 Other Builtins.     (line  789)
63020* __builtin_huge_vall:                   Other Builtins.     (line  781)
63021* __builtin_huge_valq:                   x86 Built-in Functions.
63022                                                             (line   50)
63023* __builtin_inf:                         Other Builtins.     (line  804)
63024* __builtin_infd128:                     Other Builtins.     (line  814)
63025* __builtin_infd32:                      Other Builtins.     (line  808)
63026* __builtin_infd64:                      Other Builtins.     (line  811)
63027* __builtin_inff:                        Other Builtins.     (line  818)
63028* __builtin_inffN:                       Other Builtins.     (line  827)
63029* __builtin_inffNx:                      Other Builtins.     (line  830)
63030* __builtin_infl:                        Other Builtins.     (line  823)
63031* __builtin_infq:                        x86 Built-in Functions.
63032                                                             (line   47)
63033* __builtin_isfinite:                    Other Builtins.     (line    6)
63034* __builtin_isgreater:                   Other Builtins.     (line    6)
63035* __builtin_isgreaterequal:              Other Builtins.     (line    6)
63036* __builtin_isinf_sign:                  Other Builtins.     (line    6)
63037* __builtin_isinf_sign <1>:              Other Builtins.     (line  833)
63038* __builtin_isless:                      Other Builtins.     (line    6)
63039* __builtin_islessequal:                 Other Builtins.     (line    6)
63040* __builtin_islessgreater:               Other Builtins.     (line    6)
63041* __builtin_isnormal:                    Other Builtins.     (line    6)
63042* __builtin_isunordered:                 Other Builtins.     (line    6)
63043* __builtin_is_constant_evaluated:       Other Builtins.     (line  544)
63044* __builtin_LINE:                        Other Builtins.     (line  676)
63045* __builtin_longjmp:                     Nonlocal Gotos.     (line   37)
63046* __builtin_mulf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
63047                                                             (line   25)
63048* __builtin_mul_overflow:                Integer Overflow Builtins.
63049                                                             (line   63)
63050* __builtin_mul_overflow_p:              Integer Overflow Builtins.
63051                                                             (line   90)
63052* __builtin_nan:                         Other Builtins.     (line  841)
63053* __builtin_nand128:                     Other Builtins.     (line  863)
63054* __builtin_nand32:                      Other Builtins.     (line  857)
63055* __builtin_nand64:                      Other Builtins.     (line  860)
63056* __builtin_nanf:                        Other Builtins.     (line  867)
63057* __builtin_nanfN:                       Other Builtins.     (line  874)
63058* __builtin_nanfNx:                      Other Builtins.     (line  877)
63059* __builtin_nanl:                        Other Builtins.     (line  870)
63060* __builtin_nanq:                        x86 Built-in Functions.
63061                                                             (line   54)
63062* __builtin_nans:                        Other Builtins.     (line  880)
63063* __builtin_nansf:                       Other Builtins.     (line  884)
63064* __builtin_nansfN:                      Other Builtins.     (line  891)
63065* __builtin_nansfNx:                     Other Builtins.     (line  894)
63066* __builtin_nansl:                       Other Builtins.     (line  887)
63067* __builtin_nansq:                       x86 Built-in Functions.
63068                                                             (line   57)
63069* __builtin_nds32_isb:                   NDS32 Built-in Functions.
63070                                                             (line   12)
63071* __builtin_nds32_isync:                 NDS32 Built-in Functions.
63072                                                             (line    8)
63073* __builtin_nds32_mfsr:                  NDS32 Built-in Functions.
63074                                                             (line   15)
63075* __builtin_nds32_mfusr:                 NDS32 Built-in Functions.
63076                                                             (line   18)
63077* __builtin_nds32_mtsr:                  NDS32 Built-in Functions.
63078                                                             (line   21)
63079* __builtin_nds32_mtusr:                 NDS32 Built-in Functions.
63080                                                             (line   24)
63081* __builtin_nds32_setgie_dis:            NDS32 Built-in Functions.
63082                                                             (line   30)
63083* __builtin_nds32_setgie_en:             NDS32 Built-in Functions.
63084                                                             (line   27)
63085* __builtin_non_tx_store:                S/390 System z Built-in Functions.
63086                                                             (line   98)
63087* __builtin_object_size:                 Object Size Checking.
63088                                                             (line    6)
63089* __builtin_object_size <1>:             Object Size Checking.
63090                                                             (line   16)
63091* __builtin_object_size <2>:             Other Builtins.     (line    6)
63092* __builtin_object_size <3>:             Other Builtins.     (line  768)
63093* __builtin_offsetof:                    Offsetof.           (line    6)
63094* __builtin_parity:                      Other Builtins.     (line  917)
63095* __builtin_parityl:                     Other Builtins.     (line  938)
63096* __builtin_parityll:                    Other Builtins.     (line  962)
63097* __builtin_popcount:                    Other Builtins.     (line  914)
63098* __builtin_popcountl:                   Other Builtins.     (line  934)
63099* __builtin_popcountll:                  Other Builtins.     (line  958)
63100* __builtin_powi:                        Other Builtins.     (line    6)
63101* __builtin_powi <1>:                    Other Builtins.     (line  966)
63102* __builtin_powif:                       Other Builtins.     (line    6)
63103* __builtin_powif <1>:                   Other Builtins.     (line  971)
63104* __builtin_powil:                       Other Builtins.     (line    6)
63105* __builtin_powil <1>:                   Other Builtins.     (line  975)
63106* __builtin_prefetch:                    Other Builtins.     (line  729)
63107* __builtin_return:                      Constructing Calls. (line   47)
63108* __builtin_return_address:              Return Address.     (line    9)
63109* __builtin_rx_brk:                      RX Built-in Functions.
63110                                                             (line   10)
63111* __builtin_rx_clrpsw:                   RX Built-in Functions.
63112                                                             (line   13)
63113* __builtin_rx_int:                      RX Built-in Functions.
63114                                                             (line   17)
63115* __builtin_rx_machi:                    RX Built-in Functions.
63116                                                             (line   21)
63117* __builtin_rx_maclo:                    RX Built-in Functions.
63118                                                             (line   26)
63119* __builtin_rx_mulhi:                    RX Built-in Functions.
63120                                                             (line   31)
63121* __builtin_rx_mullo:                    RX Built-in Functions.
63122                                                             (line   36)
63123* __builtin_rx_mvfachi:                  RX Built-in Functions.
63124                                                             (line   41)
63125* __builtin_rx_mvfacmi:                  RX Built-in Functions.
63126                                                             (line   45)
63127* __builtin_rx_mvfc:                     RX Built-in Functions.
63128                                                             (line   49)
63129* __builtin_rx_mvtachi:                  RX Built-in Functions.
63130                                                             (line   53)
63131* __builtin_rx_mvtaclo:                  RX Built-in Functions.
63132                                                             (line   57)
63133* __builtin_rx_mvtc:                     RX Built-in Functions.
63134                                                             (line   61)
63135* __builtin_rx_mvtipl:                   RX Built-in Functions.
63136                                                             (line   65)
63137* __builtin_rx_racw:                     RX Built-in Functions.
63138                                                             (line   69)
63139* __builtin_rx_revw:                     RX Built-in Functions.
63140                                                             (line   73)
63141* __builtin_rx_rmpa:                     RX Built-in Functions.
63142                                                             (line   78)
63143* __builtin_rx_round:                    RX Built-in Functions.
63144                                                             (line   82)
63145* __builtin_rx_sat:                      RX Built-in Functions.
63146                                                             (line   87)
63147* __builtin_rx_setpsw:                   RX Built-in Functions.
63148                                                             (line   91)
63149* __builtin_rx_wait:                     RX Built-in Functions.
63150                                                             (line   95)
63151* __builtin_saddll_overflow:             Integer Overflow Builtins.
63152                                                             (line   15)
63153* __builtin_saddl_overflow:              Integer Overflow Builtins.
63154                                                             (line   13)
63155* __builtin_sadd_overflow:               Integer Overflow Builtins.
63156                                                             (line   11)
63157* __builtin_setjmp:                      Nonlocal Gotos.     (line   32)
63158* __builtin_set_thread_pointer:          SH Built-in Functions.
63159                                                             (line    9)
63160* __builtin_shuffle:                     Vector Extensions.  (line  127)
63161* __builtin_sh_get_fpscr:                SH Built-in Functions.
63162                                                             (line   35)
63163* __builtin_sh_set_fpscr:                SH Built-in Functions.
63164                                                             (line   38)
63165* __builtin_smulll_overflow:             Integer Overflow Builtins.
63166                                                             (line   69)
63167* __builtin_smull_overflow:              Integer Overflow Builtins.
63168                                                             (line   67)
63169* __builtin_smul_overflow:               Integer Overflow Builtins.
63170                                                             (line   65)
63171* __builtin_speculation_safe_value:      Other Builtins.     (line    6)
63172* __builtin_speculation_safe_value <1>:  Other Builtins.     (line  261)
63173* __builtin_sqrtf128_round_to_odd:       Basic PowerPC Built-in Functions Available on ISA 3.0.
63174                                                             (line   33)
63175* __builtin_ssubll_overflow:             Integer Overflow Builtins.
63176                                                             (line   49)
63177* __builtin_ssubl_overflow:              Integer Overflow Builtins.
63178                                                             (line   47)
63179* __builtin_ssub_overflow:               Integer Overflow Builtins.
63180                                                             (line   45)
63181* __builtin_subf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
63182                                                             (line   21)
63183* __builtin_sub_overflow:                Integer Overflow Builtins.
63184                                                             (line   43)
63185* __builtin_sub_overflow_p:              Integer Overflow Builtins.
63186                                                             (line   88)
63187* __builtin_tabort:                      S/390 System z Built-in Functions.
63188                                                             (line   82)
63189* __builtin_tbegin:                      S/390 System z Built-in Functions.
63190                                                             (line    6)
63191* __builtin_tbeginc:                     S/390 System z Built-in Functions.
63192                                                             (line   73)
63193* __builtin_tbegin_nofloat:              S/390 System z Built-in Functions.
63194                                                             (line   54)
63195* __builtin_tbegin_retry:                S/390 System z Built-in Functions.
63196                                                             (line   60)
63197* __builtin_tbegin_retry_nofloat:        S/390 System z Built-in Functions.
63198                                                             (line   67)
63199* __builtin_tend:                        S/390 System z Built-in Functions.
63200                                                             (line   77)
63201* __builtin_tgmath:                      Other Builtins.     (line  436)
63202* __builtin_thread_pointer:              SH Built-in Functions.
63203                                                             (line   18)
63204* __builtin_trap:                        Other Builtins.     (line  602)
63205* __builtin_truncf128_round_to_odd:      Basic PowerPC Built-in Functions Available on ISA 3.0.
63206                                                             (line   41)
63207* __builtin_tx_assist:                   S/390 System z Built-in Functions.
63208                                                             (line   87)
63209* __builtin_tx_nesting_depth:            S/390 System z Built-in Functions.
63210                                                             (line   93)
63211* __builtin_types_compatible_p:          Other Builtins.     (line  340)
63212* __builtin_uaddll_overflow:             Integer Overflow Builtins.
63213                                                             (line   21)
63214* __builtin_uaddl_overflow:              Integer Overflow Builtins.
63215                                                             (line   19)
63216* __builtin_uadd_overflow:               Integer Overflow Builtins.
63217                                                             (line   17)
63218* __builtin_umulll_overflow:             Integer Overflow Builtins.
63219                                                             (line   75)
63220* __builtin_umull_overflow:              Integer Overflow Builtins.
63221                                                             (line   73)
63222* __builtin_umul_overflow:               Integer Overflow Builtins.
63223                                                             (line   71)
63224* __builtin_unreachable:                 Other Builtins.     (line  609)
63225* __builtin_usubll_overflow:             Integer Overflow Builtins.
63226                                                             (line   55)
63227* __builtin_usubl_overflow:              Integer Overflow Builtins.
63228                                                             (line   53)
63229* __builtin_usub_overflow:               Integer Overflow Builtins.
63230                                                             (line   51)
63231* __builtin_va_arg_pack:                 Constructing Calls. (line   52)
63232* __builtin_va_arg_pack_len:             Constructing Calls. (line   75)
63233* __builtin___clear_cache:               Other Builtins.     (line  716)
63234* __builtin___fprintf_chk:               Object Size Checking.
63235                                                             (line    6)
63236* __builtin___memcpy_chk:                Object Size Checking.
63237                                                             (line    6)
63238* __builtin___memmove_chk:               Object Size Checking.
63239                                                             (line    6)
63240* __builtin___mempcpy_chk:               Object Size Checking.
63241                                                             (line    6)
63242* __builtin___memset_chk:                Object Size Checking.
63243                                                             (line    6)
63244* __builtin___printf_chk:                Object Size Checking.
63245                                                             (line    6)
63246* __builtin___snprintf_chk:              Object Size Checking.
63247                                                             (line    6)
63248* __builtin___sprintf_chk:               Object Size Checking.
63249                                                             (line    6)
63250* __builtin___stpcpy_chk:                Object Size Checking.
63251                                                             (line    6)
63252* __builtin___strcat_chk:                Object Size Checking.
63253                                                             (line    6)
63254* __builtin___strcpy_chk:                Object Size Checking.
63255                                                             (line    6)
63256* __builtin___strncat_chk:               Object Size Checking.
63257                                                             (line    6)
63258* __builtin___strncpy_chk:               Object Size Checking.
63259                                                             (line    6)
63260* __builtin___vfprintf_chk:              Object Size Checking.
63261                                                             (line    6)
63262* __builtin___vprintf_chk:               Object Size Checking.
63263                                                             (line    6)
63264* __builtin___vsnprintf_chk:             Object Size Checking.
63265                                                             (line    6)
63266* __builtin___vsprintf_chk:              Object Size Checking.
63267                                                             (line    6)
63268* __complex__ keyword:                   Complex.            (line    6)
63269* __declspec(dllexport):                 Microsoft Windows Function Attributes.
63270                                                             (line   10)
63271* __declspec(dllimport):                 Microsoft Windows Function Attributes.
63272                                                             (line   42)
63273* __ea SPU Named Address Spaces:         Named Address Spaces.
63274                                                             (line  170)
63275* __extension__:                         Alternate Keywords. (line   30)
63276* __far M32C Named Address Spaces:       Named Address Spaces.
63277                                                             (line  153)
63278* __far RL78 Named Address Spaces:       Named Address Spaces.
63279                                                             (line  162)
63280* __flash AVR Named Address Spaces:      Named Address Spaces.
63281                                                             (line   44)
63282* __flash1 AVR Named Address Spaces:     Named Address Spaces.
63283                                                             (line   53)
63284* __flash2 AVR Named Address Spaces:     Named Address Spaces.
63285                                                             (line   53)
63286* __flash3 AVR Named Address Spaces:     Named Address Spaces.
63287                                                             (line   53)
63288* __flash4 AVR Named Address Spaces:     Named Address Spaces.
63289                                                             (line   53)
63290* __flash5 AVR Named Address Spaces:     Named Address Spaces.
63291                                                             (line   53)
63292* __float128 data type:                  Floating Types.     (line    6)
63293* __float80 data type:                   Floating Types.     (line    6)
63294* __fp16 data type:                      Half-Precision.     (line    6)
63295* __FUNCTION__ identifier:               Function Names.     (line    6)
63296* __func__ identifier:                   Function Names.     (line    6)
63297* __ibm128 data type:                    Floating Types.     (line    6)
63298* __imag__ keyword:                      Complex.            (line   31)
63299* __int128 data types:                   __int128.           (line    6)
63300* __memx AVR Named Address Spaces:       Named Address Spaces.
63301                                                             (line   59)
63302* __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
63303* __real__ keyword:                      Complex.            (line   31)
63304* __seg_fs x86 named address space:      Named Address Spaces.
63305                                                             (line  188)
63306* __seg_gs x86 named address space:      Named Address Spaces.
63307                                                             (line  188)
63308* __STDC_HOSTED__:                       Standards.          (line   13)
63309* __sync_add_and_fetch:                  __sync Builtins.    (line   72)
63310* __sync_and_and_fetch:                  __sync Builtins.    (line   72)
63311* __sync_bool_compare_and_swap:          __sync Builtins.    (line   88)
63312* __sync_fetch_and_add:                  __sync Builtins.    (line   50)
63313* __sync_fetch_and_and:                  __sync Builtins.    (line   50)
63314* __sync_fetch_and_nand:                 __sync Builtins.    (line   50)
63315* __sync_fetch_and_or:                   __sync Builtins.    (line   50)
63316* __sync_fetch_and_sub:                  __sync Builtins.    (line   50)
63317* __sync_fetch_and_xor:                  __sync Builtins.    (line   50)
63318* __sync_lock_release:                   __sync Builtins.    (line  118)
63319* __sync_lock_test_and_set:              __sync Builtins.    (line  100)
63320* __sync_nand_and_fetch:                 __sync Builtins.    (line   72)
63321* __sync_or_and_fetch:                   __sync Builtins.    (line   72)
63322* __sync_sub_and_fetch:                  __sync Builtins.    (line   72)
63323* __sync_synchronize:                    __sync Builtins.    (line   97)
63324* __sync_val_compare_and_swap:           __sync Builtins.    (line   88)
63325* __sync_xor_and_fetch:                  __sync Builtins.    (line   72)
63326* __thread:                              Thread-Local.       (line    6)
63327* AArch64 Options:                       AArch64 Options.    (line    6)
63328* ABI:                                   Compatibility.      (line    6)
63329* abi_tag function attribute:            C++ Attributes.     (line    9)
63330* abi_tag type attribute:                C++ Attributes.     (line    9)
63331* abi_tag variable attribute:            C++ Attributes.     (line    9)
63332* abort:                                 Other Builtins.     (line    6)
63333* abs:                                   Other Builtins.     (line    6)
63334* absdata variable attribute, AVR:       AVR Variable Attributes.
63335                                                             (line  104)
63336* accessing volatiles:                   Volatiles.          (line    6)
63337* accessing volatiles <1>:               C++ Volatiles.      (line    6)
63338* acos:                                  Other Builtins.     (line    6)
63339* acosf:                                 Other Builtins.     (line    6)
63340* acosh:                                 Other Builtins.     (line    6)
63341* acoshf:                                Other Builtins.     (line    6)
63342* acoshl:                                Other Builtins.     (line    6)
63343* acosl:                                 Other Builtins.     (line    6)
63344* Ada:                                   G++ and GCC.        (line    6)
63345* Ada <1>:                               G++ and GCC.        (line   29)
63346* additional floating types:             Floating Types.     (line    6)
63347* address constraints:                   Simple Constraints. (line  152)
63348* address of a label:                    Labels as Values.   (line    6)
63349* address variable attribute, AVR:       AVR Variable Attributes.
63350                                                             (line   97)
63351* address_operand:                       Simple Constraints. (line  156)
63352* alias function attribute:              Common Function Attributes.
63353                                                             (line    9)
63354* alias variable attribute:              Common Variable Attributes.
63355                                                             (line    9)
63356* aligned function attribute:            Common Function Attributes.
63357                                                             (line   24)
63358* aligned type attribute:                Common Type Attributes.
63359                                                             (line    8)
63360* aligned variable attribute:            Common Variable Attributes.
63361                                                             (line   31)
63362* alignment:                             Alignment.          (line    6)
63363* alloca:                                Other Builtins.     (line    6)
63364* alloca vs variable-length arrays:      Variable Length.    (line   35)
63365* alloc_align function attribute:        Common Function Attributes.
63366                                                             (line   52)
63367* alloc_size function attribute:         Common Function Attributes.
63368                                                             (line   72)
63369* alloc_size type attribute:             Common Type Attributes.
63370                                                             (line  136)
63371* alloc_size variable attribute:         Common Variable Attributes.
63372                                                             (line  137)
63373* Allow nesting in an interrupt handler on the Blackfin processor: Blackfin Function Attributes.
63374                                                             (line   45)
63375* Altera Nios II options:                Nios II Options.    (line    6)
63376* alternate keywords:                    Alternate Keywords. (line    6)
63377* altivec type attribute, PowerPC:       PowerPC Type Attributes.
63378                                                             (line   12)
63379* altivec variable attribute, PowerPC:   PowerPC Variable Attributes.
63380                                                             (line   12)
63381* always_inline function attribute:      Common Function Attributes.
63382                                                             (line   98)
63383* AMD GCN Options:                       AMD GCN Options.    (line    6)
63384* AMD1:                                  Standards.          (line   13)
63385* amdgpu_hsa_kernel function attribute, AMD GCN: AMD GCN Function Attributes.
63386                                                             (line    9)
63387* ANSI C:                                Standards.          (line   13)
63388* ANSI C standard:                       Standards.          (line   13)
63389* ANSI C89:                              Standards.          (line   13)
63390* ANSI support:                          C Dialect Options.  (line   10)
63391* ANSI X3.159-1989:                      Standards.          (line   13)
63392* apostrophes:                           Incompatibilities.  (line  116)
63393* application binary interface:          Compatibility.      (line    6)
63394* ARC options:                           ARC Options.        (line    6)
63395* arch= function attribute, AArch64:     AArch64 Function Attributes.
63396                                                             (line   53)
63397* arch= function attribute, ARM:         ARM Function Attributes.
63398                                                             (line   98)
63399* ARM options:                           ARM Options.        (line    6)
63400* ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
63401                                                             (line    6)
63402* arrays of length zero:                 Zero Length.        (line    6)
63403* arrays of variable length:             Variable Length.    (line    6)
63404* arrays, non-lvalue:                    Subscripting.       (line    6)
63405* artificial function attribute:         Common Function Attributes.
63406                                                             (line  108)
63407* asin:                                  Other Builtins.     (line    6)
63408* asinf:                                 Other Builtins.     (line    6)
63409* asinh:                                 Other Builtins.     (line    6)
63410* asinhf:                                Other Builtins.     (line    6)
63411* asinhl:                                Other Builtins.     (line    6)
63412* asinl:                                 Other Builtins.     (line    6)
63413* asm assembler template:                Extended Asm.       (line  226)
63414* asm clobbers:                          Extended Asm.       (line  654)
63415* asm constraints:                       Constraints.        (line    6)
63416* asm expressions:                       Extended Asm.       (line  559)
63417* asm flag output operands:              Extended Asm.       (line  488)
63418* asm goto labels:                       Extended Asm.       (line  841)
63419* asm inline:                            Size of an asm.     (line   25)
63420* asm input operands:                    Extended Asm.       (line  559)
63421* asm keyword:                           Using Assembly Language with C.
63422                                                             (line    6)
63423* asm output operands:                   Extended Asm.       (line  329)
63424* asm scratch registers:                 Extended Asm.       (line  654)
63425* asm volatile:                          Extended Asm.       (line  116)
63426* assembler names for identifiers:       Asm Labels.         (line    6)
63427* assembly code, invalid:                Bug Criteria.       (line   12)
63428* assembly language in C:                Using Assembly Language with C.
63429                                                             (line    6)
63430* assembly language in C, basic:         Basic Asm.          (line    6)
63431* assembly language in C, extended:      Extended Asm.       (line    6)
63432* assume_aligned function attribute:     Common Function Attributes.
63433                                                             (line  116)
63434* atan:                                  Other Builtins.     (line    6)
63435* atan2:                                 Other Builtins.     (line    6)
63436* atan2f:                                Other Builtins.     (line    6)
63437* atan2l:                                Other Builtins.     (line    6)
63438* atanf:                                 Other Builtins.     (line    6)
63439* atanh:                                 Other Builtins.     (line    6)
63440* atanhf:                                Other Builtins.     (line    6)
63441* atanhl:                                Other Builtins.     (line    6)
63442* atanl:                                 Other Builtins.     (line    6)
63443* attribute of types:                    Type Attributes.    (line    6)
63444* attribute of variables:                Variable Attributes.
63445                                                             (line    6)
63446* attribute syntax:                      Attribute Syntax.   (line    6)
63447* autoincrement/decrement addressing:    Simple Constraints. (line   30)
63448* automatic inline for C++ member fns:   Inline.             (line   68)
63449* aux variable attribute, ARC:           ARC Variable Attributes.
63450                                                             (line    7)
63451* AVR Options:                           AVR Options.        (line    6)
63452* Backwards Compatibility:               Backwards Compatibility.
63453                                                             (line    6)
63454* bank_switch function attribute, M32C:  M32C Function Attributes.
63455                                                             (line    9)
63456* base class members:                    Name lookup.        (line    6)
63457* based type attribute, MeP:             MeP Type Attributes.
63458                                                             (line    6)
63459* based variable attribute, MeP:         MeP Variable Attributes.
63460                                                             (line   16)
63461* basic asm:                             Basic Asm.          (line    6)
63462* bcmp:                                  Other Builtins.     (line    6)
63463* below100 variable attribute, Xstormy16: Xstormy16 Variable Attributes.
63464                                                             (line   10)
63465* binary compatibility:                  Compatibility.      (line    6)
63466* Binary constants using the 0b prefix:  Binary constants.   (line    6)
63467* Blackfin Options:                      Blackfin Options.   (line    6)
63468* bound pointer to member function:      Bound member functions.
63469                                                             (line    6)
63470* branch-protection function attribute, AArch64: AArch64 Function Attributes.
63471                                                             (line   76)
63472* break handler functions:               MicroBlaze Function Attributes.
63473                                                             (line   17)
63474* break_handler function attribute, MicroBlaze: MicroBlaze Function Attributes.
63475                                                             (line   17)
63476* brk_interrupt function attribute, RL78: RL78 Function Attributes.
63477                                                             (line   10)
63478* bug criteria:                          Bug Criteria.       (line    6)
63479* bugs:                                  Bugs.               (line    6)
63480* bugs, known:                           Trouble.            (line    6)
63481* built-in functions:                    C Dialect Options.  (line  264)
63482* built-in functions <1>:                Other Builtins.     (line    6)
63483* bzero:                                 Other Builtins.     (line    6)
63484* C compilation options:                 Invoking GCC.       (line   18)
63485* C intermediate output, nonexistent:    G++ and GCC.        (line   34)
63486* C language extensions:                 C Extensions.       (line    6)
63487* C language, traditional:               Preprocessor Options.
63488                                                             (line  366)
63489* C standard:                            Standards.          (line   13)
63490* C standards:                           Standards.          (line   13)
63491* c++:                                   Invoking G++.       (line   14)
63492* C++:                                   G++ and GCC.        (line   29)
63493* C++ comments:                          C++ Comments.       (line    6)
63494* C++ interface and implementation headers: C++ Interface.   (line    6)
63495* C++ language extensions:               C++ Extensions.     (line    6)
63496* C++ member fns, automatically inline:  Inline.             (line   68)
63497* C++ misunderstandings:                 C++ Misunderstandings.
63498                                                             (line    6)
63499* C++ options, command-line:             C++ Dialect Options.
63500                                                             (line    6)
63501* C++ pragmas, effect on inlining:       C++ Interface.      (line   57)
63502* C++ source file suffixes:              Invoking G++.       (line    6)
63503* C++ static data, declaring and defining: Static Definitions.
63504                                                             (line    6)
63505* C-SKY Options:                         C-SKY Options.      (line    6)
63506* C11:                                   Standards.          (line   13)
63507* C17:                                   Standards.          (line   13)
63508* C1X:                                   Standards.          (line   13)
63509* C2X:                                   Standards.          (line   13)
63510* C6X Options:                           C6X Options.        (line    6)
63511* C89:                                   Standards.          (line   13)
63512* C90:                                   Standards.          (line   13)
63513* C94:                                   Standards.          (line   13)
63514* C95:                                   Standards.          (line   13)
63515* C99:                                   Standards.          (line   13)
63516* C9X:                                   Standards.          (line   13)
63517* cabs:                                  Other Builtins.     (line    6)
63518* cabsf:                                 Other Builtins.     (line    6)
63519* cabsl:                                 Other Builtins.     (line    6)
63520* cacos:                                 Other Builtins.     (line    6)
63521* cacosf:                                Other Builtins.     (line    6)
63522* cacosh:                                Other Builtins.     (line    6)
63523* cacoshf:                               Other Builtins.     (line    6)
63524* cacoshl:                               Other Builtins.     (line    6)
63525* cacosl:                                Other Builtins.     (line    6)
63526* callee_pop_aggregate_return function attribute, x86: x86 Function Attributes.
63527                                                             (line   47)
63528* calling functions through the function vector on SH2A: SH Function Attributes.
63529                                                             (line    9)
63530* calloc:                                Other Builtins.     (line    6)
63531* carg:                                  Other Builtins.     (line    6)
63532* cargf:                                 Other Builtins.     (line    6)
63533* cargl:                                 Other Builtins.     (line    6)
63534* case labels in initializers:           Designated Inits.   (line    6)
63535* case ranges:                           Case Ranges.        (line    6)
63536* casin:                                 Other Builtins.     (line    6)
63537* casinf:                                Other Builtins.     (line    6)
63538* casinh:                                Other Builtins.     (line    6)
63539* casinhf:                               Other Builtins.     (line    6)
63540* casinhl:                               Other Builtins.     (line    6)
63541* casinl:                                Other Builtins.     (line    6)
63542* cast to a union:                       Cast to Union.      (line    6)
63543* catan:                                 Other Builtins.     (line    6)
63544* catanf:                                Other Builtins.     (line    6)
63545* catanh:                                Other Builtins.     (line    6)
63546* catanhf:                               Other Builtins.     (line    6)
63547* catanhl:                               Other Builtins.     (line    6)
63548* catanl:                                Other Builtins.     (line    6)
63549* cb variable attribute, MeP:            MeP Variable Attributes.
63550                                                             (line   46)
63551* cbrt:                                  Other Builtins.     (line    6)
63552* cbrtf:                                 Other Builtins.     (line    6)
63553* cbrtl:                                 Other Builtins.     (line    6)
63554* ccos:                                  Other Builtins.     (line    6)
63555* ccosf:                                 Other Builtins.     (line    6)
63556* ccosh:                                 Other Builtins.     (line    6)
63557* ccoshf:                                Other Builtins.     (line    6)
63558* ccoshl:                                Other Builtins.     (line    6)
63559* ccosl:                                 Other Builtins.     (line    6)
63560* cdecl function attribute, x86-32:      x86 Function Attributes.
63561                                                             (line    9)
63562* ceil:                                  Other Builtins.     (line    6)
63563* ceilf:                                 Other Builtins.     (line    6)
63564* ceill:                                 Other Builtins.     (line    6)
63565* cexp:                                  Other Builtins.     (line    6)
63566* cexpf:                                 Other Builtins.     (line    6)
63567* cexpl:                                 Other Builtins.     (line    6)
63568* cf_check function attribute, x86:      x86 Function Attributes.
63569                                                             (line  625)
63570* character set, execution:              Preprocessor Options.
63571                                                             (line  266)
63572* character set, input:                  Preprocessor Options.
63573                                                             (line  279)
63574* character set, input normalization:    Warning Options.    (line 2589)
63575* character set, wide execution:         Preprocessor Options.
63576                                                             (line  271)
63577* cimag:                                 Other Builtins.     (line    6)
63578* cimagf:                                Other Builtins.     (line    6)
63579* cimagl:                                Other Builtins.     (line    6)
63580* cleanup variable attribute:            Common Variable Attributes.
63581                                                             (line  161)
63582* clog:                                  Other Builtins.     (line    6)
63583* clog10:                                Other Builtins.     (line    6)
63584* clog10f:                               Other Builtins.     (line    6)
63585* clog10l:                               Other Builtins.     (line    6)
63586* clogf:                                 Other Builtins.     (line    6)
63587* clogl:                                 Other Builtins.     (line    6)
63588* cmodel= function attribute, AArch64:   AArch64 Function Attributes.
63589                                                             (line   27)
63590* COBOL:                                 G++ and GCC.        (line   23)
63591* code generation conventions:           Code Gen Options.   (line    6)
63592* code, mixed with declarations:         Mixed Declarations. (line    6)
63593* cold function attribute:               Common Function Attributes.
63594                                                             (line  132)
63595* cold label attribute:                  Label Attributes.   (line   45)
63596* command options:                       Invoking GCC.       (line    6)
63597* comments, C++ style:                   C++ Comments.       (line    6)
63598* common variable attribute:             Common Variable Attributes.
63599                                                             (line  176)
63600* comparison of signed and unsigned values, warning: Warning Options.
63601                                                             (line 2339)
63602* compilation statistics:                Developer Options.  (line    6)
63603* compiler bugs, reporting:              Bug Reporting.      (line    6)
63604* compiler compared to C++ preprocessor: G++ and GCC.        (line   34)
63605* compiler options, C++:                 C++ Dialect Options.
63606                                                             (line    6)
63607* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
63608                                                             (line    6)
63609* compiler version, specifying:          Invoking GCC.       (line   24)
63610* COMPILER_PATH:                         Environment Variables.
63611                                                             (line   91)
63612* complex conjugation:                   Complex.            (line   38)
63613* complex numbers:                       Complex.            (line    6)
63614* compound literals:                     Compound Literals.  (line    6)
63615* computed gotos:                        Labels as Values.   (line    6)
63616* conditional expressions, extensions:   Conditionals.       (line    6)
63617* conflicting types:                     Disappointments.    (line   21)
63618* conj:                                  Other Builtins.     (line    6)
63619* conjf:                                 Other Builtins.     (line    6)
63620* conjl:                                 Other Builtins.     (line    6)
63621* const applied to function:             Function Attributes.
63622                                                             (line    6)
63623* const function attribute:              Common Function Attributes.
63624                                                             (line  148)
63625* const qualifier:                       Pointers to Arrays. (line    6)
63626* constants in constraints:              Simple Constraints. (line   68)
63627* constraint modifier characters:        Modifiers.          (line    6)
63628* constraint, matching:                  Simple Constraints. (line  137)
63629* constraints, asm:                      Constraints.        (line    6)
63630* constraints, machine specific:         Machine Constraints.
63631                                                             (line    6)
63632* constructing calls:                    Constructing Calls. (line    6)
63633* constructor expressions:               Compound Literals.  (line    6)
63634* constructor function attribute:        Common Function Attributes.
63635                                                             (line  189)
63636* contributors:                          Contributors.       (line    6)
63637* copy function attribute:               Common Function Attributes.
63638                                                             (line  217)
63639* copy type attribute:                   Common Type Attributes.
63640                                                             (line  161)
63641* copy variable attribute:               Common Variable Attributes.
63642                                                             (line  185)
63643* copysign:                              Other Builtins.     (line    6)
63644* copysignf:                             Other Builtins.     (line    6)
63645* copysignl:                             Other Builtins.     (line    6)
63646* core dump:                             Bug Criteria.       (line    9)
63647* cos:                                   Other Builtins.     (line    6)
63648* cosf:                                  Other Builtins.     (line    6)
63649* cosh:                                  Other Builtins.     (line    6)
63650* coshf:                                 Other Builtins.     (line    6)
63651* coshl:                                 Other Builtins.     (line    6)
63652* cosl:                                  Other Builtins.     (line    6)
63653* CPATH:                                 Environment Variables.
63654                                                             (line  127)
63655* CPLUS_INCLUDE_PATH:                    Environment Variables.
63656                                                             (line  129)
63657* cpow:                                  Other Builtins.     (line    6)
63658* cpowf:                                 Other Builtins.     (line    6)
63659* cpowl:                                 Other Builtins.     (line    6)
63660* cproj:                                 Other Builtins.     (line    6)
63661* cprojf:                                Other Builtins.     (line    6)
63662* cprojl:                                Other Builtins.     (line    6)
63663* cpu= function attribute, AArch64:      AArch64 Function Attributes.
63664                                                             (line   63)
63665* CR16 Options:                          CR16 Options.       (line    6)
63666* creal:                                 Other Builtins.     (line    6)
63667* crealf:                                Other Builtins.     (line    6)
63668* creall:                                Other Builtins.     (line    6)
63669* CRIS Options:                          CRIS Options.       (line    6)
63670* critical function attribute, MSP430:   MSP430 Function Attributes.
63671                                                             (line    9)
63672* cross compiling:                       Invoking GCC.       (line   24)
63673* csin:                                  Other Builtins.     (line    6)
63674* csinf:                                 Other Builtins.     (line    6)
63675* csinh:                                 Other Builtins.     (line    6)
63676* csinhf:                                Other Builtins.     (line    6)
63677* csinhl:                                Other Builtins.     (line    6)
63678* csinl:                                 Other Builtins.     (line    6)
63679* csqrt:                                 Other Builtins.     (line    6)
63680* csqrtf:                                Other Builtins.     (line    6)
63681* csqrtl:                                Other Builtins.     (line    6)
63682* ctan:                                  Other Builtins.     (line    6)
63683* ctanf:                                 Other Builtins.     (line    6)
63684* ctanh:                                 Other Builtins.     (line    6)
63685* ctanhf:                                Other Builtins.     (line    6)
63686* ctanhl:                                Other Builtins.     (line    6)
63687* ctanl:                                 Other Builtins.     (line    6)
63688* C_INCLUDE_PATH:                        Environment Variables.
63689                                                             (line  128)
63690* D:                                     G++ and GCC.        (line    6)
63691* Darwin options:                        Darwin Options.     (line    6)
63692* dcgettext:                             Other Builtins.     (line    6)
63693* dd integer suffix:                     Decimal Float.      (line    6)
63694* DD integer suffix:                     Decimal Float.      (line    6)
63695* deallocating variable length arrays:   Variable Length.    (line   22)
63696* debug dump options:                    Developer Options.  (line    6)
63697* debugging GCC:                         Developer Options.  (line    6)
63698* debugging information options:         Debugging Options.  (line    6)
63699* decimal floating types:                Decimal Float.      (line    6)
63700* declaration scope:                     Incompatibilities.  (line   80)
63701* declarations inside expressions:       Statement Exprs.    (line    6)
63702* declarations, mixed with code:         Mixed Declarations. (line    6)
63703* declaring attributes of functions:     Function Attributes.
63704                                                             (line    6)
63705* declaring static data in C++:          Static Definitions. (line    6)
63706* defining static data in C++:           Static Definitions. (line    6)
63707* dependencies for make as output:       Environment Variables.
63708                                                             (line  156)
63709* dependencies for make as output <1>:   Environment Variables.
63710                                                             (line  172)
63711* dependencies, make:                    Preprocessor Options.
63712                                                             (line   77)
63713* DEPENDENCIES_OUTPUT:                   Environment Variables.
63714                                                             (line  155)
63715* dependent name lookup:                 Name lookup.        (line    6)
63716* deprecated enumerator attribute:       Enumerator Attributes.
63717                                                             (line   28)
63718* deprecated function attribute:         Common Function Attributes.
63719                                                             (line  248)
63720* deprecated type attribute:             Common Type Attributes.
63721                                                             (line  189)
63722* deprecated variable attribute:         Common Variable Attributes.
63723                                                             (line  201)
63724* designated initializers:               Designated Inits.   (line    6)
63725* designated_init type attribute:        Common Type Attributes.
63726                                                             (line  223)
63727* designator lists:                      Designated Inits.   (line   96)
63728* designators:                           Designated Inits.   (line   64)
63729* destructor function attribute:         Common Function Attributes.
63730                                                             (line  189)
63731* developer options:                     Developer Options.  (line    6)
63732* df integer suffix:                     Decimal Float.      (line    6)
63733* DF integer suffix:                     Decimal Float.      (line    6)
63734* dgettext:                              Other Builtins.     (line    6)
63735* diagnostic messages:                   Diagnostic Message Formatting Options.
63736                                                             (line    6)
63737* dialect options:                       C Dialect Options.  (line    6)
63738* diff-delete GCC_COLORS capability:     Diagnostic Message Formatting Options.
63739                                                             (line  113)
63740* diff-filename GCC_COLORS capability:   Diagnostic Message Formatting Options.
63741                                                             (line  106)
63742* diff-hunk GCC_COLORS capability:       Diagnostic Message Formatting Options.
63743                                                             (line  109)
63744* diff-insert GCC_COLORS capability:     Diagnostic Message Formatting Options.
63745                                                             (line  116)
63746* digits in constraint:                  Simple Constraints. (line  125)
63747* directory options:                     Directory Options.  (line    6)
63748* disinterrupt function attribute, Epiphany: Epiphany Function Attributes.
63749                                                             (line    9)
63750* disinterrupt function attribute, MeP:  MeP Function Attributes.
63751                                                             (line    9)
63752* dl integer suffix:                     Decimal Float.      (line    6)
63753* DL integer suffix:                     Decimal Float.      (line    6)
63754* dllexport function attribute:          Microsoft Windows Function Attributes.
63755                                                             (line   10)
63756* dllexport variable attribute:          Microsoft Windows Variable Attributes.
63757                                                             (line   12)
63758* dllimport function attribute:          Microsoft Windows Function Attributes.
63759                                                             (line   42)
63760* dllimport variable attribute:          Microsoft Windows Variable Attributes.
63761                                                             (line   12)
63762* dollar signs in identifier names:      Dollar Signs.       (line    6)
63763* double-word arithmetic:                Long Long.          (line    6)
63764* downward funargs:                      Nested Functions.   (line    6)
63765* drem:                                  Other Builtins.     (line    6)
63766* dremf:                                 Other Builtins.     (line    6)
63767* dreml:                                 Other Builtins.     (line    6)
63768* dump options:                          Developer Options.  (line    6)
63769* E in constraint:                       Simple Constraints. (line   87)
63770* earlyclobber operand:                  Modifiers.          (line   25)
63771* eight-bit data on the H8/300, H8/300H, and H8S: H8/300 Variable Attributes.
63772                                                             (line    9)
63773* eightbit_data variable attribute, H8/300: H8/300 Variable Attributes.
63774                                                             (line    9)
63775* EIND:                                  AVR Options.        (line  301)
63776* either function attribute, MSP430:     MSP430 Function Attributes.
63777                                                             (line   57)
63778* either variable attribute, MSP430:     MSP430 Variable Attributes.
63779                                                             (line   24)
63780* empty structures:                      Empty Structures.   (line    6)
63781* Enumerator Attributes:                 Enumerator Attributes.
63782                                                             (line    6)
63783* environment variables:                 Environment Variables.
63784                                                             (line    6)
63785* erf:                                   Other Builtins.     (line    6)
63786* erfc:                                  Other Builtins.     (line    6)
63787* erfcf:                                 Other Builtins.     (line    6)
63788* erfcl:                                 Other Builtins.     (line    6)
63789* erff:                                  Other Builtins.     (line    6)
63790* erfl:                                  Other Builtins.     (line    6)
63791* error function attribute:              Common Function Attributes.
63792                                                             (line  272)
63793* error GCC_COLORS capability:           Diagnostic Message Formatting Options.
63794                                                             (line   77)
63795* error messages:                        Warnings and Errors.
63796                                                             (line    6)
63797* escaped newlines:                      Escaped Newlines.   (line    6)
63798* exception function attribute:          NDS32 Function Attributes.
63799                                                             (line    9)
63800* exception handler functions, Blackfin: Blackfin Function Attributes.
63801                                                             (line    9)
63802* exception handler functions, NDS32:    NDS32 Function Attributes.
63803                                                             (line    9)
63804* exception_handler function attribute:  Blackfin Function Attributes.
63805                                                             (line    9)
63806* exit:                                  Other Builtins.     (line    6)
63807* exp:                                   Other Builtins.     (line    6)
63808* exp10:                                 Other Builtins.     (line    6)
63809* exp10f:                                Other Builtins.     (line    6)
63810* exp10l:                                Other Builtins.     (line    6)
63811* exp2:                                  Other Builtins.     (line    6)
63812* exp2f:                                 Other Builtins.     (line    6)
63813* exp2l:                                 Other Builtins.     (line    6)
63814* expf:                                  Other Builtins.     (line    6)
63815* expl:                                  Other Builtins.     (line    6)
63816* explicit register variables:           Explicit Register Variables.
63817                                                             (line    6)
63818* expm1:                                 Other Builtins.     (line    6)
63819* expm1f:                                Other Builtins.     (line    6)
63820* expm1l:                                Other Builtins.     (line    6)
63821* expressions containing statements:     Statement Exprs.    (line    6)
63822* expressions, constructor:              Compound Literals.  (line    6)
63823* extended asm:                          Extended Asm.       (line    6)
63824* extensible constraints:                Simple Constraints. (line  161)
63825* extensions, ?::                        Conditionals.       (line    6)
63826* extensions, C language:                C Extensions.       (line    6)
63827* extensions, C++ language:              C++ Extensions.     (line    6)
63828* external declaration scope:            Incompatibilities.  (line   80)
63829* externally_visible function attribute: Common Function Attributes.
63830                                                             (line  289)
63831* extra NOP instructions at the function entry point: Common Function Attributes.
63832                                                             (line  834)
63833* F in constraint:                       Simple Constraints. (line   92)
63834* fabs:                                  Other Builtins.     (line    6)
63835* fabsf:                                 Other Builtins.     (line    6)
63836* fabsl:                                 Other Builtins.     (line    6)
63837* fallthrough statement attribute:       Statement Attributes.
63838                                                             (line   26)
63839* far function attribute, MeP:           MeP Function Attributes.
63840                                                             (line   25)
63841* far function attribute, MIPS:          MIPS Function Attributes.
63842                                                             (line   63)
63843* far type attribute, MeP:               MeP Type Attributes.
63844                                                             (line    6)
63845* far variable attribute, MeP:           MeP Variable Attributes.
63846                                                             (line   30)
63847* fastcall function attribute, x86-32:   x86 Function Attributes.
63848                                                             (line   15)
63849* fast_interrupt function attribute, M32C: M32C Function Attributes.
63850                                                             (line   14)
63851* fast_interrupt function attribute, MicroBlaze: MicroBlaze Function Attributes.
63852                                                             (line   27)
63853* fast_interrupt function attribute, RX: RX Function Attributes.
63854                                                             (line    9)
63855* fatal signal:                          Bug Criteria.       (line    9)
63856* fdim:                                  Other Builtins.     (line    6)
63857* fdimf:                                 Other Builtins.     (line    6)
63858* fdiml:                                 Other Builtins.     (line    6)
63859* FDL, GNU Free Documentation License:   GNU Free Documentation License.
63860                                                             (line    6)
63861* fentry_name function attribute, x86:   x86 Function Attributes.
63862                                                             (line  637)
63863* fentry_section function attribute, x86: x86 Function Attributes.
63864                                                             (line  643)
63865* ffs:                                   Other Builtins.     (line    6)
63866* file name suffix:                      Overall Options.    (line   14)
63867* file names:                            Link Options.       (line   10)
63868* fix-cortex-a53-835769 function attribute, AArch64: AArch64 Function Attributes.
63869                                                             (line   19)
63870* fixed-point types:                     Fixed-Point.        (line    6)
63871* fixit-delete GCC_COLORS capability:    Diagnostic Message Formatting Options.
63872                                                             (line  103)
63873* fixit-insert GCC_COLORS capability:    Diagnostic Message Formatting Options.
63874                                                             (line   99)
63875* flatten function attribute:            Common Function Attributes.
63876                                                             (line  302)
63877* flexible array members:                Zero Length.        (line    6)
63878* float as function value type:          Incompatibilities.  (line  141)
63879* floating point precision:              Disappointments.    (line   68)
63880* floating-point precision:              Optimize Options.   (line 2135)
63881* floor:                                 Other Builtins.     (line    6)
63882* floorf:                                Other Builtins.     (line    6)
63883* floorl:                                Other Builtins.     (line    6)
63884* fma:                                   Other Builtins.     (line    6)
63885* fmaf:                                  Other Builtins.     (line    6)
63886* fmal:                                  Other Builtins.     (line    6)
63887* fmax:                                  Other Builtins.     (line    6)
63888* fmaxf:                                 Other Builtins.     (line    6)
63889* fmaxl:                                 Other Builtins.     (line    6)
63890* fmin:                                  Other Builtins.     (line    6)
63891* fminf:                                 Other Builtins.     (line    6)
63892* fminl:                                 Other Builtins.     (line    6)
63893* fmod:                                  Other Builtins.     (line    6)
63894* fmodf:                                 Other Builtins.     (line    6)
63895* fmodl:                                 Other Builtins.     (line    6)
63896* force_align_arg_pointer function attribute, x86: x86 Function Attributes.
63897                                                             (line  100)
63898* format function attribute:             Common Function Attributes.
63899                                                             (line  310)
63900* format_arg function attribute:         Common Function Attributes.
63901                                                             (line  375)
63902* Fortran:                               G++ and GCC.        (line    6)
63903* forwarder_section function attribute, Epiphany: Epiphany Function Attributes.
63904                                                             (line   13)
63905* forwarding calls:                      Constructing Calls. (line    6)
63906* fprintf:                               Other Builtins.     (line    6)
63907* fprintf_unlocked:                      Other Builtins.     (line    6)
63908* fputs:                                 Other Builtins.     (line    6)
63909* fputs_unlocked:                        Other Builtins.     (line    6)
63910* FR30 Options:                          FR30 Options.       (line    6)
63911* freestanding environment:              Standards.          (line   13)
63912* freestanding implementation:           Standards.          (line   13)
63913* frexp:                                 Other Builtins.     (line    6)
63914* frexpf:                                Other Builtins.     (line    6)
63915* frexpl:                                Other Builtins.     (line    6)
63916* FRV Options:                           FRV Options.        (line    6)
63917* fscanf:                                Other Builtins.     (line    6)
63918* fscanf, and constant strings:          Incompatibilities.  (line   17)
63919* FT32 Options:                          FT32 Options.       (line    6)
63920* function addressability on the M32R/D: M32R/D Function Attributes.
63921                                                             (line   15)
63922* function attributes:                   Function Attributes.
63923                                                             (line    6)
63924* function pointers, arithmetic:         Pointer Arith.      (line    6)
63925* function prototype declarations:       Function Prototypes.
63926                                                             (line    6)
63927* function versions:                     Function Multiversioning.
63928                                                             (line    6)
63929* function, size of pointer to:          Pointer Arith.      (line    6)
63930* functions in arbitrary sections:       Common Function Attributes.
63931                                                             (line  918)
63932* functions that are dynamically resolved: Common Function Attributes.
63933                                                             (line  476)
63934* functions that are passed arguments in registers on x86-32: x86 Function Attributes.
63935                                                             (line   76)
63936* functions that behave like malloc:     Common Function Attributes.
63937                                                             (line  603)
63938* functions that have no side effects:   Common Function Attributes.
63939                                                             (line  148)
63940* functions that have no side effects <1>: Common Function Attributes.
63941                                                             (line  852)
63942* functions that never return:           Common Function Attributes.
63943                                                             (line  766)
63944* functions that pop the argument stack on x86-32: x86 Function Attributes.
63945                                                             (line    9)
63946* functions that pop the argument stack on x86-32 <1>: x86 Function Attributes.
63947                                                             (line   15)
63948* functions that pop the argument stack on x86-32 <2>: x86 Function Attributes.
63949                                                             (line   23)
63950* functions that pop the argument stack on x86-32 <3>: x86 Function Attributes.
63951                                                             (line  108)
63952* functions that return more than once:  Common Function Attributes.
63953                                                             (line  909)
63954* functions with non-null pointer arguments: Common Function Attributes.
63955                                                             (line  712)
63956* functions with printf, scanf, strftime or strfmon style arguments: Common Function Attributes.
63957                                                             (line  310)
63958* function_return function attribute, x86: x86 Function Attributes.
63959                                                             (line  562)
63960* function_vector function attribute, H8/300: H8/300 Function Attributes.
63961                                                             (line    9)
63962* function_vector function attribute, M16C/M32C: M32C Function Attributes.
63963                                                             (line   20)
63964* function_vector function attribute, SH: SH Function Attributes.
63965                                                             (line    9)
63966* G in constraint:                       Simple Constraints. (line   96)
63967* g in constraint:                       Simple Constraints. (line  118)
63968* g++:                                   Invoking G++.       (line   14)
63969* G++:                                   G++ and GCC.        (line   29)
63970* gamma:                                 Other Builtins.     (line    6)
63971* gammaf:                                Other Builtins.     (line    6)
63972* gammaf_r:                              Other Builtins.     (line    6)
63973* gammal:                                Other Builtins.     (line    6)
63974* gammal_r:                              Other Builtins.     (line    6)
63975* gamma_r:                               Other Builtins.     (line    6)
63976* GCC:                                   G++ and GCC.        (line    6)
63977* GCC command options:                   Invoking GCC.       (line    6)
63978* GCC_COLORS environment variable:       Diagnostic Message Formatting Options.
63979                                                             (line   40)
63980* GCC_COMPARE_DEBUG:                     Environment Variables.
63981                                                             (line   52)
63982* GCC_EXEC_PREFIX:                       Environment Variables.
63983                                                             (line   57)
63984* gcc_struct type attribute, PowerPC:    PowerPC Type Attributes.
63985                                                             (line    9)
63986* gcc_struct type attribute, x86:        x86 Type Attributes.
63987                                                             (line   11)
63988* gcc_struct variable attribute, PowerPC: PowerPC Variable Attributes.
63989                                                             (line    9)
63990* gcc_struct variable attribute, x86:    x86 Variable Attributes.
63991                                                             (line   11)
63992* gcov:                                  Instrumentation Options.
63993                                                             (line   49)
63994* general-regs-only function attribute, AArch64: AArch64 Function Attributes.
63995                                                             (line   12)
63996* general-regs-only function attribute, ARM: ARM Function Attributes.
63997                                                             (line    9)
63998* gettext:                               Other Builtins.     (line    6)
63999* global offset table:                   Code Gen Options.   (line  359)
64000* global register after longjmp:         Global Register Variables.
64001                                                             (line   92)
64002* global register variables:             Global Register Variables.
64003                                                             (line    6)
64004* GNAT:                                  G++ and GCC.        (line   29)
64005* GNU C Compiler:                        G++ and GCC.        (line    6)
64006* GNU Compiler Collection:               G++ and GCC.        (line    6)
64007* gnu_inline function attribute:         Common Function Attributes.
64008                                                             (line  430)
64009* Go:                                    G++ and GCC.        (line    6)
64010* goto with computed label:              Labels as Values.   (line    6)
64011* gprof:                                 Instrumentation Options.
64012                                                             (line   18)
64013* grouping options:                      Invoking GCC.       (line   31)
64014* H in constraint:                       Simple Constraints. (line   96)
64015* half-precision floating point:         Half-Precision.     (line    6)
64016* hardware models and configurations, specifying: Submodel Options.
64017                                                             (line    6)
64018* hex floats:                            Hex Floats.         (line    6)
64019* highlight, color:                      Diagnostic Message Formatting Options.
64020                                                             (line   40)
64021* hk fixed-suffix:                       Fixed-Point.        (line    6)
64022* HK fixed-suffix:                       Fixed-Point.        (line    6)
64023* hosted environment:                    Standards.          (line   13)
64024* hosted environment <1>:                C Dialect Options.  (line  304)
64025* hosted environment <2>:                C Dialect Options.  (line  312)
64026* hosted implementation:                 Standards.          (line   13)
64027* hot function attribute:                Common Function Attributes.
64028                                                             (line  466)
64029* hot label attribute:                   Label Attributes.   (line   38)
64030* hotpatch function attribute, S/390:    S/390 Function Attributes.
64031                                                             (line    9)
64032* HPPA Options:                          HPPA Options.       (line    6)
64033* hr fixed-suffix:                       Fixed-Point.        (line    6)
64034* HR fixed-suffix:                       Fixed-Point.        (line    6)
64035* hypot:                                 Other Builtins.     (line    6)
64036* hypotf:                                Other Builtins.     (line    6)
64037* hypotl:                                Other Builtins.     (line    6)
64038* i in constraint:                       Simple Constraints. (line   68)
64039* I in constraint:                       Simple Constraints. (line   79)
64040* IA-64 Options:                         IA-64 Options.      (line    6)
64041* IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
64042                                                             (line    6)
64043* identifier names, dollar signs in:     Dollar Signs.       (line    6)
64044* identifiers, names in assembler code:  Asm Labels.         (line    6)
64045* ifunc function attribute:              Common Function Attributes.
64046                                                             (line  476)
64047* ilogb:                                 Other Builtins.     (line    6)
64048* ilogbf:                                Other Builtins.     (line    6)
64049* ilogbl:                                Other Builtins.     (line    6)
64050* imaxabs:                               Other Builtins.     (line    6)
64051* implementation-defined behavior, C language: C Implementation.
64052                                                             (line    6)
64053* implementation-defined behavior, C++ language: C++ Implementation.
64054                                                             (line    6)
64055* implied #pragma implementation:        C++ Interface.      (line   43)
64056* incompatibilities of GCC:              Incompatibilities.  (line    6)
64057* increment operators:                   Bug Criteria.       (line   17)
64058* index:                                 Other Builtins.     (line    6)
64059* indirect calls, ARC:                   ARC Function Attributes.
64060                                                             (line   24)
64061* indirect calls, ARM:                   ARM Function Attributes.
64062                                                             (line   38)
64063* indirect calls, Blackfin:              Blackfin Function Attributes.
64064                                                             (line   38)
64065* indirect calls, Epiphany:              Epiphany Function Attributes.
64066                                                             (line   57)
64067* indirect calls, MIPS:                  MIPS Function Attributes.
64068                                                             (line   63)
64069* indirect calls, PowerPC:               PowerPC Function Attributes.
64070                                                             (line   10)
64071* indirect functions:                    Common Function Attributes.
64072                                                             (line  476)
64073* indirect_branch function attribute, x86: x86 Function Attributes.
64074                                                             (line  552)
64075* indirect_return function attribute, x86: x86 Function Attributes.
64076                                                             (line  631)
64077* initializations in expressions:        Compound Literals.  (line    6)
64078* initializers with labeled elements:    Designated Inits.   (line    6)
64079* initializers, non-constant:            Initializers.       (line    6)
64080* init_priority variable attribute:      C++ Attributes.     (line   50)
64081* inline assembly language:              Using Assembly Language with C.
64082                                                             (line    6)
64083* inline automatic for C++ member fns:   Inline.             (line   68)
64084* inline functions:                      Inline.             (line    6)
64085* inline functions, omission of:         Inline.             (line   51)
64086* inlining and C++ pragmas:              C++ Interface.      (line   57)
64087* installation trouble:                  Trouble.            (line    6)
64088* instrumentation options:               Instrumentation Options.
64089                                                             (line    6)
64090* integrating function code:             Inline.             (line    6)
64091* interface and implementation headers, C++: C++ Interface.  (line    6)
64092* intermediate C version, nonexistent:   G++ and GCC.        (line   34)
64093* interrupt function attribute, ARC:     ARC Function Attributes.
64094                                                             (line    9)
64095* interrupt function attribute, ARM:     ARM Function Attributes.
64096                                                             (line   16)
64097* interrupt function attribute, AVR:     AVR Function Attributes.
64098                                                             (line    9)
64099* interrupt function attribute, C-SKY:   C-SKY Function Attributes.
64100                                                             (line   10)
64101* interrupt function attribute, CR16:    CR16 Function Attributes.
64102                                                             (line    9)
64103* interrupt function attribute, Epiphany: Epiphany Function Attributes.
64104                                                             (line   20)
64105* interrupt function attribute, M32C:    M32C Function Attributes.
64106                                                             (line   53)
64107* interrupt function attribute, M32R/D:  M32R/D Function Attributes.
64108                                                             (line    9)
64109* interrupt function attribute, m68k:    m68k Function Attributes.
64110                                                             (line   10)
64111* interrupt function attribute, MeP:     MeP Function Attributes.
64112                                                             (line   14)
64113* interrupt function attribute, MIPS:    MIPS Function Attributes.
64114                                                             (line    9)
64115* interrupt function attribute, MSP430:  MSP430 Function Attributes.
64116                                                             (line   19)
64117* interrupt function attribute, NDS32:   NDS32 Function Attributes.
64118                                                             (line   14)
64119* interrupt function attribute, RISC-V:  RISC-V Function Attributes.
64120                                                             (line   19)
64121* interrupt function attribute, RL78:    RL78 Function Attributes.
64122                                                             (line   10)
64123* interrupt function attribute, RX:      RX Function Attributes.
64124                                                             (line   15)
64125* interrupt function attribute, V850:    V850 Function Attributes.
64126                                                             (line   10)
64127* interrupt function attribute, Visium:  Visium Function Attributes.
64128                                                             (line    9)
64129* interrupt function attribute, x86:     x86 Function Attributes.
64130                                                             (line  124)
64131* interrupt function attribute, Xstormy16: Xstormy16 Function Attributes.
64132                                                             (line    9)
64133* interrupt_handler function attribute, Blackfin: Blackfin Function Attributes.
64134                                                             (line   15)
64135* interrupt_handler function attribute, H8/300: H8/300 Function Attributes.
64136                                                             (line   17)
64137* interrupt_handler function attribute, m68k: m68k Function Attributes.
64138                                                             (line   10)
64139* interrupt_handler function attribute, MicroBlaze: MicroBlaze Function Attributes.
64140                                                             (line   27)
64141* interrupt_handler function attribute, SH: SH Function Attributes.
64142                                                             (line   28)
64143* interrupt_handler function attribute, V850: V850 Function Attributes.
64144                                                             (line   10)
64145* interrupt_thread function attribute, fido: m68k Function Attributes.
64146                                                             (line   16)
64147* introduction:                          Top.                (line    6)
64148* invalid assembly code:                 Bug Criteria.       (line   12)
64149* invalid input:                         Bug Criteria.       (line   42)
64150* invoking g++:                          Invoking G++.       (line   22)
64151* io variable attribute, AVR:            AVR Variable Attributes.
64152                                                             (line   73)
64153* io variable attribute, MeP:            MeP Variable Attributes.
64154                                                             (line   36)
64155* io_low variable attribute, AVR:        AVR Variable Attributes.
64156                                                             (line   91)
64157* isalnum:                               Other Builtins.     (line    6)
64158* isalpha:                               Other Builtins.     (line    6)
64159* isascii:                               Other Builtins.     (line    6)
64160* isblank:                               Other Builtins.     (line    6)
64161* iscntrl:                               Other Builtins.     (line    6)
64162* isdigit:                               Other Builtins.     (line    6)
64163* isgraph:                               Other Builtins.     (line    6)
64164* islower:                               Other Builtins.     (line    6)
64165* ISO 9899:                              Standards.          (line   13)
64166* ISO C:                                 Standards.          (line   13)
64167* ISO C standard:                        Standards.          (line   13)
64168* ISO C11:                               Standards.          (line   13)
64169* ISO C17:                               Standards.          (line   13)
64170* ISO C1X:                               Standards.          (line   13)
64171* ISO C2X:                               Standards.          (line   13)
64172* ISO C90:                               Standards.          (line   13)
64173* ISO C94:                               Standards.          (line   13)
64174* ISO C95:                               Standards.          (line   13)
64175* ISO C99:                               Standards.          (line   13)
64176* ISO C9X:                               Standards.          (line   13)
64177* ISO support:                           C Dialect Options.  (line   10)
64178* ISO/IEC 9899:                          Standards.          (line   13)
64179* isprint:                               Other Builtins.     (line    6)
64180* ispunct:                               Other Builtins.     (line    6)
64181* isr function attribute, ARM:           ARM Function Attributes.
64182                                                             (line   33)
64183* isr function attribute, C-SKY:         C-SKY Function Attributes.
64184                                                             (line   10)
64185* isspace:                               Other Builtins.     (line    6)
64186* isupper:                               Other Builtins.     (line    6)
64187* iswalnum:                              Other Builtins.     (line    6)
64188* iswalpha:                              Other Builtins.     (line    6)
64189* iswblank:                              Other Builtins.     (line    6)
64190* iswcntrl:                              Other Builtins.     (line    6)
64191* iswdigit:                              Other Builtins.     (line    6)
64192* iswgraph:                              Other Builtins.     (line    6)
64193* iswlower:                              Other Builtins.     (line    6)
64194* iswprint:                              Other Builtins.     (line    6)
64195* iswpunct:                              Other Builtins.     (line    6)
64196* iswspace:                              Other Builtins.     (line    6)
64197* iswupper:                              Other Builtins.     (line    6)
64198* iswxdigit:                             Other Builtins.     (line    6)
64199* isxdigit:                              Other Builtins.     (line    6)
64200* j0:                                    Other Builtins.     (line    6)
64201* j0f:                                   Other Builtins.     (line    6)
64202* j0l:                                   Other Builtins.     (line    6)
64203* j1:                                    Other Builtins.     (line    6)
64204* j1f:                                   Other Builtins.     (line    6)
64205* j1l:                                   Other Builtins.     (line    6)
64206* jli_always function attribute, ARC:    ARC Function Attributes.
64207                                                             (line   41)
64208* jli_fixed function attribute, ARC:     ARC Function Attributes.
64209                                                             (line   47)
64210* jn:                                    Other Builtins.     (line    6)
64211* jnf:                                   Other Builtins.     (line    6)
64212* jnl:                                   Other Builtins.     (line    6)
64213* k fixed-suffix:                        Fixed-Point.        (line    6)
64214* K fixed-suffix:                        Fixed-Point.        (line    6)
64215* keep_interrupts_masked function attribute, MIPS: MIPS Function Attributes.
64216                                                             (line   34)
64217* kernel attribute, Nvidia PTX:          Nvidia PTX Function Attributes.
64218                                                             (line    9)
64219* keywords, alternate:                   Alternate Keywords. (line    6)
64220* known causes of trouble:               Trouble.            (line    6)
64221* kspisusp function attribute, Blackfin: Blackfin Function Attributes.
64222                                                             (line   21)
64223* l1_data variable attribute, Blackfin:  Blackfin Variable Attributes.
64224                                                             (line   11)
64225* l1_data_A variable attribute, Blackfin: Blackfin Variable Attributes.
64226                                                             (line   11)
64227* l1_data_B variable attribute, Blackfin: Blackfin Variable Attributes.
64228                                                             (line   11)
64229* l1_text function attribute, Blackfin:  Blackfin Function Attributes.
64230                                                             (line   26)
64231* l2 function attribute, Blackfin:       Blackfin Function Attributes.
64232                                                             (line   32)
64233* l2 variable attribute, Blackfin:       Blackfin Variable Attributes.
64234                                                             (line   19)
64235* Label Attributes:                      Label Attributes.   (line    6)
64236* labeled elements in initializers:      Designated Inits.   (line    6)
64237* labels as values:                      Labels as Values.   (line    6)
64238* labs:                                  Other Builtins.     (line    6)
64239* LANG:                                  Environment Variables.
64240                                                             (line   21)
64241* LANG <1>:                              Environment Variables.
64242                                                             (line  106)
64243* language dialect options:              C Dialect Options.  (line    6)
64244* LC_ALL:                                Environment Variables.
64245                                                             (line   21)
64246* LC_CTYPE:                              Environment Variables.
64247                                                             (line   21)
64248* LC_MESSAGES:                           Environment Variables.
64249                                                             (line   21)
64250* ldexp:                                 Other Builtins.     (line    6)
64251* ldexpf:                                Other Builtins.     (line    6)
64252* ldexpl:                                Other Builtins.     (line    6)
64253* leaf function attribute:               Common Function Attributes.
64254                                                             (line  566)
64255* length-zero arrays:                    Zero Length.        (line    6)
64256* lgamma:                                Other Builtins.     (line    6)
64257* lgammaf:                               Other Builtins.     (line    6)
64258* lgammaf_r:                             Other Builtins.     (line    6)
64259* lgammal:                               Other Builtins.     (line    6)
64260* lgammal_r:                             Other Builtins.     (line    6)
64261* lgamma_r:                              Other Builtins.     (line    6)
64262* Libraries:                             Link Options.       (line   83)
64263* LIBRARY_PATH:                          Environment Variables.
64264                                                             (line   97)
64265* link options:                          Link Options.       (line    6)
64266* linker script:                         Link Options.       (line  312)
64267* lk fixed-suffix:                       Fixed-Point.        (line    6)
64268* LK fixed-suffix:                       Fixed-Point.        (line    6)
64269* LL integer suffix:                     Long Long.          (line    6)
64270* llabs:                                 Other Builtins.     (line    6)
64271* llk fixed-suffix:                      Fixed-Point.        (line    6)
64272* LLK fixed-suffix:                      Fixed-Point.        (line    6)
64273* llr fixed-suffix:                      Fixed-Point.        (line    6)
64274* LLR fixed-suffix:                      Fixed-Point.        (line    6)
64275* llrint:                                Other Builtins.     (line    6)
64276* llrintf:                               Other Builtins.     (line    6)
64277* llrintl:                               Other Builtins.     (line    6)
64278* llround:                               Other Builtins.     (line    6)
64279* llroundf:                              Other Builtins.     (line    6)
64280* llroundl:                              Other Builtins.     (line    6)
64281* LM32 options:                          LM32 Options.       (line    6)
64282* load address instruction:              Simple Constraints. (line  152)
64283* local labels:                          Local Labels.       (line    6)
64284* local variables in macros:             Typeof.             (line   46)
64285* local variables, specifying registers: Local Register Variables.
64286                                                             (line    6)
64287* locale:                                Environment Variables.
64288                                                             (line   21)
64289* locale definition:                     Environment Variables.
64290                                                             (line  106)
64291* locus GCC_COLORS capability:           Diagnostic Message Formatting Options.
64292                                                             (line   92)
64293* log:                                   Other Builtins.     (line    6)
64294* log10:                                 Other Builtins.     (line    6)
64295* log10f:                                Other Builtins.     (line    6)
64296* log10l:                                Other Builtins.     (line    6)
64297* log1p:                                 Other Builtins.     (line    6)
64298* log1pf:                                Other Builtins.     (line    6)
64299* log1pl:                                Other Builtins.     (line    6)
64300* log2:                                  Other Builtins.     (line    6)
64301* log2f:                                 Other Builtins.     (line    6)
64302* log2l:                                 Other Builtins.     (line    6)
64303* logb:                                  Other Builtins.     (line    6)
64304* logbf:                                 Other Builtins.     (line    6)
64305* logbl:                                 Other Builtins.     (line    6)
64306* logf:                                  Other Builtins.     (line    6)
64307* logl:                                  Other Builtins.     (line    6)
64308* long long data types:                  Long Long.          (line    6)
64309* longcall function attribute, Blackfin: Blackfin Function Attributes.
64310                                                             (line   38)
64311* longcall function attribute, PowerPC:  PowerPC Function Attributes.
64312                                                             (line   10)
64313* longjmp:                               Global Register Variables.
64314                                                             (line   92)
64315* longjmp incompatibilities:             Incompatibilities.  (line   39)
64316* longjmp warnings:                      Warning Options.    (line 1174)
64317* long_call function attribute, ARC:     ARC Function Attributes.
64318                                                             (line   24)
64319* long_call function attribute, ARM:     ARM Function Attributes.
64320                                                             (line   38)
64321* long_call function attribute, Epiphany: Epiphany Function Attributes.
64322                                                             (line   57)
64323* long_call function attribute, MIPS:    MIPS Function Attributes.
64324                                                             (line   63)
64325* lower function attribute, MSP430:      MSP430 Function Attributes.
64326                                                             (line   57)
64327* lower variable attribute, MSP430:      MSP430 Variable Attributes.
64328                                                             (line   24)
64329* lr fixed-suffix:                       Fixed-Point.        (line    6)
64330* LR fixed-suffix:                       Fixed-Point.        (line    6)
64331* lrint:                                 Other Builtins.     (line    6)
64332* lrintf:                                Other Builtins.     (line    6)
64333* lrintl:                                Other Builtins.     (line    6)
64334* lround:                                Other Builtins.     (line    6)
64335* lroundf:                               Other Builtins.     (line    6)
64336* lroundl:                               Other Builtins.     (line    6)
64337* m in constraint:                       Simple Constraints. (line   17)
64338* M32C options:                          M32C Options.       (line    6)
64339* M32R/D options:                        M32R/D Options.     (line    6)
64340* M680x0 options:                        M680x0 Options.     (line    6)
64341* machine specific constraints:          Machine Constraints.
64342                                                             (line    6)
64343* machine-dependent options:             Submodel Options.   (line    6)
64344* macro with variable arguments:         Variadic Macros.    (line    6)
64345* macros, inline alternative:            Inline.             (line    6)
64346* macros, local labels:                  Local Labels.       (line    6)
64347* macros, local variables in:            Typeof.             (line   46)
64348* macros, statements in expressions:     Statement Exprs.    (line    6)
64349* macros, types of arguments:            Typeof.             (line    6)
64350* make:                                  Preprocessor Options.
64351                                                             (line   77)
64352* malloc:                                Other Builtins.     (line    6)
64353* malloc function attribute:             Common Function Attributes.
64354                                                             (line  603)
64355* matching constraint:                   Simple Constraints. (line  137)
64356* may_alias type attribute:              Common Type Attributes.
64357                                                             (line  234)
64358* MCore options:                         MCore Options.      (line    6)
64359* medium_call function attribute, ARC:   ARC Function Attributes.
64360                                                             (line   24)
64361* member fns, automatically inline:      Inline.             (line   68)
64362* memchr:                                Other Builtins.     (line    6)
64363* memcmp:                                Other Builtins.     (line    6)
64364* memcpy:                                Other Builtins.     (line    6)
64365* memory references in constraints:      Simple Constraints. (line   17)
64366* mempcpy:                               Other Builtins.     (line    6)
64367* memset:                                Other Builtins.     (line    6)
64368* MeP options:                           MeP Options.        (line    6)
64369* Mercury:                               G++ and GCC.        (line   23)
64370* message formatting:                    Diagnostic Message Formatting Options.
64371                                                             (line    6)
64372* messages, warning:                     Warning Options.    (line    6)
64373* messages, warning and error:           Warnings and Errors.
64374                                                             (line    6)
64375* MicroBlaze Options:                    MicroBlaze Options. (line    6)
64376* micromips function attribute:          MIPS Function Attributes.
64377                                                             (line   91)
64378* middle-operands, omitted:              Conditionals.       (line    6)
64379* MIPS options:                          MIPS Options.       (line    6)
64380* mips16 function attribute, MIPS:       MIPS Function Attributes.
64381                                                             (line   75)
64382* misunderstandings in C++:              C++ Misunderstandings.
64383                                                             (line    6)
64384* mixed declarations and code:           Mixed Declarations. (line    6)
64385* mixing assembly language and C:        Using Assembly Language with C.
64386                                                             (line    6)
64387* mktemp, and constant strings:          Incompatibilities.  (line   13)
64388* MMIX Options:                          MMIX Options.       (line    6)
64389* MN10300 options:                       MN10300 Options.    (line    6)
64390* mode type attribute:                   Common Type Attributes.
64391                                                             (line  270)
64392* mode variable attribute:               Common Variable Attributes.
64393                                                             (line  225)
64394* model function attribute, M32R/D:      M32R/D Function Attributes.
64395                                                             (line   15)
64396* model variable attribute, IA-64:       IA-64 Variable Attributes.
64397                                                             (line    9)
64398* model-name variable attribute, M32R/D: M32R/D Variable Attributes.
64399                                                             (line    9)
64400* modf:                                  Other Builtins.     (line    6)
64401* modff:                                 Other Builtins.     (line    6)
64402* modfl:                                 Other Builtins.     (line    6)
64403* modifiers in constraints:              Modifiers.          (line    6)
64404* Moxie Options:                         Moxie Options.      (line    6)
64405* MSP430 Options:                        MSP430 Options.     (line    6)
64406* ms_abi function attribute, x86:        x86 Function Attributes.
64407                                                             (line   34)
64408* ms_hook_prologue function attribute, x86: x86 Function Attributes.
64409                                                             (line   59)
64410* ms_struct type attribute, PowerPC:     PowerPC Type Attributes.
64411                                                             (line    9)
64412* ms_struct type attribute, x86:         x86 Type Attributes.
64413                                                             (line   11)
64414* ms_struct variable attribute, PowerPC: PowerPC Variable Attributes.
64415                                                             (line    9)
64416* ms_struct variable attribute, x86:     x86 Variable Attributes.
64417                                                             (line   11)
64418* multiple alternative constraints:      Multi-Alternative.  (line    6)
64419* multiprecision arithmetic:             Long Long.          (line    6)
64420* n in constraint:                       Simple Constraints. (line   73)
64421* naked function attribute, ARM:         ARM Function Attributes.
64422                                                             (line   48)
64423* naked function attribute, AVR:         AVR Function Attributes.
64424                                                             (line   23)
64425* naked function attribute, C-SKY:       C-SKY Function Attributes.
64426                                                             (line   20)
64427* naked function attribute, MCORE:       MCORE Function Attributes.
64428                                                             (line    9)
64429* naked function attribute, MSP430:      MSP430 Function Attributes.
64430                                                             (line   34)
64431* naked function attribute, NDS32:       NDS32 Function Attributes.
64432                                                             (line   35)
64433* naked function attribute, RISC-V:      RISC-V Function Attributes.
64434                                                             (line    9)
64435* naked function attribute, RL78:        RL78 Function Attributes.
64436                                                             (line   20)
64437* naked function attribute, RX:          RX Function Attributes.
64438                                                             (line   39)
64439* naked function attribute, SPU:         SPU Function Attributes.
64440                                                             (line    9)
64441* naked function attribute, x86:         x86 Function Attributes.
64442                                                             (line   66)
64443* Named Address Spaces:                  Named Address Spaces.
64444                                                             (line    6)
64445* names used in assembler code:          Asm Labels.         (line    6)
64446* naming convention, implementation headers: C++ Interface.  (line   43)
64447* NDS32 Options:                         NDS32 Options.      (line    6)
64448* near function attribute, MeP:          MeP Function Attributes.
64449                                                             (line   20)
64450* near function attribute, MIPS:         MIPS Function Attributes.
64451                                                             (line   63)
64452* near type attribute, MeP:              MeP Type Attributes.
64453                                                             (line    6)
64454* near variable attribute, MeP:          MeP Variable Attributes.
64455                                                             (line   24)
64456* nearbyint:                             Other Builtins.     (line    6)
64457* nearbyintf:                            Other Builtins.     (line    6)
64458* nearbyintl:                            Other Builtins.     (line    6)
64459* nested function attribute, NDS32:      NDS32 Function Attributes.
64460                                                             (line   19)
64461* nested functions:                      Nested Functions.   (line    6)
64462* nested_ready function attribute, NDS32: NDS32 Function Attributes.
64463                                                             (line   23)
64464* nesting function attribute, Blackfin:  Blackfin Function Attributes.
64465                                                             (line   45)
64466* newlines (escaped):                    Escaped Newlines.   (line    6)
64467* nextafter:                             Other Builtins.     (line    6)
64468* nextafterf:                            Other Builtins.     (line    6)
64469* nextafterl:                            Other Builtins.     (line    6)
64470* nexttoward:                            Other Builtins.     (line    6)
64471* nexttowardf:                           Other Builtins.     (line    6)
64472* nexttowardl:                           Other Builtins.     (line    6)
64473* NFC:                                   Warning Options.    (line 2589)
64474* NFKC:                                  Warning Options.    (line 2589)
64475* Nios II options:                       Nios II Options.    (line    6)
64476* nmi function attribute, NDS32:         NDS32 Function Attributes.
64477                                                             (line   50)
64478* NMI handler functions on the Blackfin processor: Blackfin Function Attributes.
64479                                                             (line   50)
64480* nmi_handler function attribute, Blackfin: Blackfin Function Attributes.
64481                                                             (line   50)
64482* nocf_check function attribute:         x86 Function Attributes.
64483                                                             (line  571)
64484* noclone function attribute:            Common Function Attributes.
64485                                                             (line  681)
64486* nocommon variable attribute:           Common Variable Attributes.
64487                                                             (line  176)
64488* nocompression function attribute, MIPS: MIPS Function Attributes.
64489                                                             (line  108)
64490* noinit variable attribute, MSP430:     MSP430 Variable Attributes.
64491                                                             (line    7)
64492* noinline function attribute:           Common Function Attributes.
64493                                                             (line  687)
64494* noipa function attribute:              Common Function Attributes.
64495                                                             (line  698)
64496* nomicromips function attribute:        MIPS Function Attributes.
64497                                                             (line   91)
64498* nomips16 function attribute, MIPS:     MIPS Function Attributes.
64499                                                             (line   75)
64500* non-constant initializers:             Initializers.       (line    6)
64501* non-static inline function:            Inline.             (line   82)
64502* nonlocal gotos:                        Nonlocal Gotos.     (line    6)
64503* nonnull function attribute:            Common Function Attributes.
64504                                                             (line  712)
64505* nonstring variable attribute:          Common Variable Attributes.
64506                                                             (line  237)
64507* noplt function attribute:              Common Function Attributes.
64508                                                             (line  742)
64509* noreturn function attribute:           Common Function Attributes.
64510                                                             (line  766)
64511* nosave_low_regs function attribute, SH: SH Function Attributes.
64512                                                             (line   34)
64513* note GCC_COLORS capability:            Diagnostic Message Formatting Options.
64514                                                             (line   83)
64515* nothrow function attribute:            Common Function Attributes.
64516                                                             (line  800)
64517* notshared type attribute, ARM:         ARM Type Attributes.
64518                                                             (line    6)
64519* not_nested function attribute, NDS32:  NDS32 Function Attributes.
64520                                                             (line   21)
64521* no_caller_saved_registers function attribute, x86: x86 Function Attributes.
64522                                                             (line  113)
64523* no_gccisr function attribute, AVR:     AVR Function Attributes.
64524                                                             (line   33)
64525* no_icf function attribute:             Common Function Attributes.
64526                                                             (line  616)
64527* no_instrument_function function attribute: Common Function Attributes.
64528                                                             (line  620)
64529* no_profile_instrument_function function attribute: Common Function Attributes.
64530                                                             (line  626)
64531* no_reorder function attribute:         Common Function Attributes.
64532                                                             (line  631)
64533* no_sanitize function attribute:        Common Function Attributes.
64534                                                             (line  639)
64535* no_sanitize_address function attribute: Common Function Attributes.
64536                                                             (line  651)
64537* no_sanitize_thread function attribute: Common Function Attributes.
64538                                                             (line  659)
64539* no_sanitize_undefined function attribute: Common Function Attributes.
64540                                                             (line  664)
64541* no_split_stack function attribute:     Common Function Attributes.
64542                                                             (line  670)
64543* no_stack_limit function attribute:     Common Function Attributes.
64544                                                             (line  676)
64545* Nvidia PTX options:                    Nvidia PTX Options. (line    6)
64546* nvptx options:                         Nvidia PTX Options. (line    6)
64547* o in constraint:                       Simple Constraints. (line   23)
64548* OBJC_INCLUDE_PATH:                     Environment Variables.
64549                                                             (line  130)
64550* Objective-C:                           G++ and GCC.        (line    6)
64551* Objective-C <1>:                       Standards.          (line  189)
64552* Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options.
64553                                                             (line    6)
64554* Objective-C++:                         G++ and GCC.        (line    6)
64555* Objective-C++ <1>:                     Standards.          (line  189)
64556* offsettable address:                   Simple Constraints. (line   23)
64557* old-style function definitions:        Function Prototypes.
64558                                                             (line    6)
64559* omit-leaf-frame-pointer function attribute, AArch64: AArch64 Function Attributes.
64560                                                             (line   41)
64561* omitted middle-operands:               Conditionals.       (line    6)
64562* open coding:                           Inline.             (line    6)
64563* OpenACC accelerator programming:       C Dialect Options.  (line  323)
64564* OpenACC accelerator programming <1>:   C Dialect Options.  (line  332)
64565* OpenMP parallel:                       C Dialect Options.  (line  338)
64566* OpenMP SIMD:                           C Dialect Options.  (line  347)
64567* OpenRISC Options:                      OpenRISC Options.   (line    6)
64568* operand constraints, asm:              Constraints.        (line    6)
64569* optimize function attribute:           Common Function Attributes.
64570                                                             (line  808)
64571* optimize options:                      Optimize Options.   (line    6)
64572* options to control diagnostics formatting: Diagnostic Message Formatting Options.
64573                                                             (line    6)
64574* options to control warnings:           Warning Options.    (line    6)
64575* options, C++:                          C++ Dialect Options.
64576                                                             (line    6)
64577* options, code generation:              Code Gen Options.   (line    6)
64578* options, debugging:                    Debugging Options.  (line    6)
64579* options, dialect:                      C Dialect Options.  (line    6)
64580* options, directory search:             Directory Options.  (line    6)
64581* options, GCC command:                  Invoking GCC.       (line    6)
64582* options, grouping:                     Invoking GCC.       (line   31)
64583* options, linking:                      Link Options.       (line    6)
64584* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
64585                                                             (line    6)
64586* options, optimization:                 Optimize Options.   (line    6)
64587* options, order:                        Invoking GCC.       (line   35)
64588* options, preprocessor:                 Preprocessor Options.
64589                                                             (line    6)
64590* options, profiling:                    Instrumentation Options.
64591                                                             (line    6)
64592* options, program instrumentation:      Instrumentation Options.
64593                                                             (line    6)
64594* options, run-time error checking:      Instrumentation Options.
64595                                                             (line    6)
64596* order of evaluation, side effects:     Non-bugs.           (line  196)
64597* order of options:                      Invoking GCC.       (line   35)
64598* OS_main function attribute, AVR:       AVR Function Attributes.
64599                                                             (line   56)
64600* OS_task function attribute, AVR:       AVR Function Attributes.
64601                                                             (line   56)
64602* other register constraints:            Simple Constraints. (line  161)
64603* outline-atomics function attribute, AArch64: AArch64 Function Attributes.
64604                                                             (line   82)
64605* output file option:                    Overall Options.    (line  196)
64606* overloaded virtual function, warning:  C++ Dialect Options.
64607                                                             (line  897)
64608* p in constraint:                       Simple Constraints. (line  152)
64609* packed type attribute:                 Common Type Attributes.
64610                                                             (line  282)
64611* packed variable attribute:             Common Variable Attributes.
64612                                                             (line  270)
64613* parameter forward declaration:         Variable Length.    (line   66)
64614* partial_save function attribute, NDS32: NDS32 Function Attributes.
64615                                                             (line   31)
64616* patchable_function_entry function attribute: Common Function Attributes.
64617                                                             (line  834)
64618* pcs function attribute, ARM:           ARM Function Attributes.
64619                                                             (line   58)
64620* PDP-11 Options:                        PDP-11 Options.     (line    6)
64621* persistent variable attribute, MSP430: MSP430 Variable Attributes.
64622                                                             (line   12)
64623* PIC:                                   Code Gen Options.   (line  359)
64624* picoChip options:                      picoChip Options.   (line    6)
64625* pmf:                                   Bound member functions.
64626                                                             (line    6)
64627* pointer arguments:                     Common Function Attributes.
64628                                                             (line  177)
64629* pointer arguments in variadic functions: Variadic Pointer Args.
64630                                                             (line    6)
64631* pointer to member function:            Bound member functions.
64632                                                             (line    6)
64633* pointers to arrays:                    Pointers to Arrays. (line    6)
64634* portions of temporary objects, pointers to: Temporaries.   (line    6)
64635* pow:                                   Other Builtins.     (line    6)
64636* pow10:                                 Other Builtins.     (line    6)
64637* pow10f:                                Other Builtins.     (line    6)
64638* pow10l:                                Other Builtins.     (line    6)
64639* PowerPC options:                       PowerPC Options.    (line    6)
64640* powf:                                  Other Builtins.     (line    6)
64641* powl:                                  Other Builtins.     (line    6)
64642* pragma GCC ivdep:                      Loop-Specific Pragmas.
64643                                                             (line    7)
64644* pragma GCC optimize:                   Function Specific Option Pragmas.
64645                                                             (line   21)
64646* pragma GCC pop_options:                Function Specific Option Pragmas.
64647                                                             (line   33)
64648* pragma GCC push_options:               Function Specific Option Pragmas.
64649                                                             (line   33)
64650* pragma GCC reset_options:              Function Specific Option Pragmas.
64651                                                             (line   41)
64652* pragma GCC target:                     Function Specific Option Pragmas.
64653                                                             (line    7)
64654* pragma GCC unroll N:                   Loop-Specific Pragmas.
64655                                                             (line   37)
64656* pragma, address:                       M32C Pragmas.       (line   15)
64657* pragma, align:                         Solaris Pragmas.    (line   11)
64658* pragma, call:                          MeP Pragmas.        (line   48)
64659* pragma, coprocessor available:         MeP Pragmas.        (line   13)
64660* pragma, coprocessor call_saved:        MeP Pragmas.        (line   20)
64661* pragma, coprocessor subclass:          MeP Pragmas.        (line   28)
64662* pragma, custom io_volatile:            MeP Pragmas.        (line    7)
64663* pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
64664* pragma, diagnostic <1>:                Diagnostic Pragmas. (line   57)
64665* pragma, diagnostic <2>:                Diagnostic Pragmas. (line   77)
64666* pragma, diagnostic <3>:                Diagnostic Pragmas. (line   99)
64667* pragma, disinterrupt:                  MeP Pragmas.        (line   38)
64668* pragma, fini:                          Solaris Pragmas.    (line   20)
64669* pragma, init:                          Solaris Pragmas.    (line   26)
64670* pragma, longcall:                      RS/6000 and PowerPC Pragmas.
64671                                                             (line   14)
64672* pragma, long_calls:                    ARM Pragmas.        (line   11)
64673* pragma, long_calls_off:                ARM Pragmas.        (line   17)
64674* pragma, mark:                          Darwin Pragmas.     (line   11)
64675* pragma, memregs:                       M32C Pragmas.       (line    7)
64676* pragma, no_long_calls:                 ARM Pragmas.        (line   14)
64677* pragma, options align:                 Darwin Pragmas.     (line   14)
64678* pragma, pop_macro:                     Push/Pop Macro Pragmas.
64679                                                             (line   15)
64680* pragma, push_macro:                    Push/Pop Macro Pragmas.
64681                                                             (line   11)
64682* pragma, redefine_extname:              Symbol-Renaming Pragmas.
64683                                                             (line   13)
64684* pragma, segment:                       Darwin Pragmas.     (line   21)
64685* pragma, unused:                        Darwin Pragmas.     (line   24)
64686* pragma, visibility:                    Visibility Pragmas. (line    8)
64687* pragma, weak:                          Weak Pragmas.       (line   10)
64688* pragmas:                               Pragmas.            (line    6)
64689* pragmas in C++, effect on inlining:    C++ Interface.      (line   57)
64690* pragmas, interface and implementation: C++ Interface.      (line    6)
64691* pragmas, warning of unknown:           Warning Options.    (line 1189)
64692* precompiled headers:                   Precompiled Headers.
64693                                                             (line    6)
64694* preprocessing numbers:                 Incompatibilities.  (line  173)
64695* preprocessing tokens:                  Incompatibilities.  (line  173)
64696* preprocessor options:                  Preprocessor Options.
64697                                                             (line    6)
64698* printf:                                Other Builtins.     (line    6)
64699* printf_unlocked:                       Other Builtins.     (line    6)
64700* prof:                                  Instrumentation Options.
64701                                                             (line   18)
64702* profiling options:                     Instrumentation Options.
64703                                                             (line    6)
64704* progmem variable attribute, AVR:       AVR Variable Attributes.
64705                                                             (line    7)
64706* program instrumentation options:       Instrumentation Options.
64707                                                             (line    6)
64708* promotion of formal parameters:        Function Prototypes.
64709                                                             (line    6)
64710* pure function attribute:               Common Function Attributes.
64711                                                             (line  852)
64712* push address instruction:              Simple Constraints. (line  152)
64713* putchar:                               Other Builtins.     (line    6)
64714* puts:                                  Other Builtins.     (line    6)
64715* q floating point suffix:               Floating Types.     (line    6)
64716* Q floating point suffix:               Floating Types.     (line    6)
64717* qsort, and global register variables:  Global Register Variables.
64718                                                             (line   75)
64719* quote GCC_COLORS capability:           Diagnostic Message Formatting Options.
64720                                                             (line   96)
64721* r fixed-suffix:                        Fixed-Point.        (line    6)
64722* R fixed-suffix:                        Fixed-Point.        (line    6)
64723* r in constraint:                       Simple Constraints. (line   64)
64724* RAMPD:                                 AVR Options.        (line  412)
64725* RAMPX:                                 AVR Options.        (line  412)
64726* RAMPY:                                 AVR Options.        (line  412)
64727* RAMPZ:                                 AVR Options.        (line  412)
64728* range1 GCC_COLORS capability:          Diagnostic Message Formatting Options.
64729                                                             (line   86)
64730* range2 GCC_COLORS capability:          Diagnostic Message Formatting Options.
64731                                                             (line   89)
64732* ranges in case statements:             Case Ranges.        (line    6)
64733* read-only strings:                     Incompatibilities.  (line    9)
64734* reentrant function attribute, MSP430:  MSP430 Function Attributes.
64735                                                             (line   44)
64736* register variable after longjmp:       Global Register Variables.
64737                                                             (line   92)
64738* registers for local variables:         Local Register Variables.
64739                                                             (line    6)
64740* registers in constraints:              Simple Constraints. (line   64)
64741* registers, global allocation:          Global Register Variables.
64742                                                             (line    6)
64743* registers, global variables in:        Global Register Variables.
64744                                                             (line    6)
64745* regparm function attribute, x86:       x86 Function Attributes.
64746                                                             (line   76)
64747* relocation truncated to fit (ColdFire): M680x0 Options.    (line  323)
64748* relocation truncated to fit (MIPS):    MIPS Options.       (line  237)
64749* remainder:                             Other Builtins.     (line    6)
64750* remainderf:                            Other Builtins.     (line    6)
64751* remainderl:                            Other Builtins.     (line    6)
64752* remquo:                                Other Builtins.     (line    6)
64753* remquof:                               Other Builtins.     (line    6)
64754* remquol:                               Other Builtins.     (line    6)
64755* renesas function attribute, SH:        SH Function Attributes.
64756                                                             (line   40)
64757* reordering, warning:                   C++ Dialect Options.
64758                                                             (line  761)
64759* reporting bugs:                        Bugs.               (line    6)
64760* resbank function attribute, SH:        SH Function Attributes.
64761                                                             (line   44)
64762* reset function attribute, NDS32:       NDS32 Function Attributes.
64763                                                             (line   45)
64764* reset handler functions:               NDS32 Function Attributes.
64765                                                             (line   45)
64766* rest argument (in macro):              Variadic Macros.    (line    6)
64767* restricted pointers:                   Restricted Pointers.
64768                                                             (line    6)
64769* restricted references:                 Restricted Pointers.
64770                                                             (line    6)
64771* restricted this pointer:               Restricted Pointers.
64772                                                             (line    6)
64773* returns_nonnull function attribute:    Common Function Attributes.
64774                                                             (line  899)
64775* returns_twice function attribute:      Common Function Attributes.
64776                                                             (line  909)
64777* rindex:                                Other Builtins.     (line    6)
64778* rint:                                  Other Builtins.     (line    6)
64779* rintf:                                 Other Builtins.     (line    6)
64780* rintl:                                 Other Builtins.     (line    6)
64781* RISC-V Options:                        RISC-V Options.     (line    6)
64782* RL78 Options:                          RL78 Options.       (line    6)
64783* round:                                 Other Builtins.     (line    6)
64784* roundf:                                Other Builtins.     (line    6)
64785* roundl:                                Other Builtins.     (line    6)
64786* RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
64787                                                             (line    6)
64788* RTTI:                                  Vague Linkage.      (line   42)
64789* run-time error checking options:       Instrumentation Options.
64790                                                             (line    6)
64791* run-time options:                      Code Gen Options.   (line    6)
64792* RX Options:                            RX Options.         (line    6)
64793* s in constraint:                       Simple Constraints. (line  100)
64794* S/390 and zSeries Options:             S/390 and zSeries Options.
64795                                                             (line    6)
64796* saddr variable attribute, RL78:        RL78 Variable Attributes.
64797                                                             (line    6)
64798* save all registers on the Blackfin:    Blackfin Function Attributes.
64799                                                             (line   56)
64800* save all registers on the H8/300, H8/300H, and H8S: H8/300 Function Attributes.
64801                                                             (line   23)
64802* saveall function attribute, Blackfin:  Blackfin Function Attributes.
64803                                                             (line   56)
64804* saveall function attribute, H8/300:    H8/300 Function Attributes.
64805                                                             (line   23)
64806* save_all function attribute, NDS32:    NDS32 Function Attributes.
64807                                                             (line   28)
64808* save_volatiles function attribute, MicroBlaze: MicroBlaze Function Attributes.
64809                                                             (line    9)
64810* scalar_storage_order type attribute:   Common Type Attributes.
64811                                                             (line  317)
64812* scalb:                                 Other Builtins.     (line    6)
64813* scalbf:                                Other Builtins.     (line    6)
64814* scalbl:                                Other Builtins.     (line    6)
64815* scalbln:                               Other Builtins.     (line    6)
64816* scalblnf:                              Other Builtins.     (line    6)
64817* scalblnf <1>:                          Other Builtins.     (line    6)
64818* scalbn:                                Other Builtins.     (line    6)
64819* scalbnf:                               Other Builtins.     (line    6)
64820* scanf, and constant strings:           Incompatibilities.  (line   17)
64821* scanfnl:                               Other Builtins.     (line    6)
64822* scope of a variable length array:      Variable Length.    (line   22)
64823* scope of declaration:                  Disappointments.    (line   21)
64824* scope of external declarations:        Incompatibilities.  (line   80)
64825* Score Options:                         Score Options.      (line    6)
64826* sda variable attribute, V850:          V850 Variable Attributes.
64827                                                             (line    9)
64828* search path:                           Directory Options.  (line    6)
64829* section function attribute:            Common Function Attributes.
64830                                                             (line  918)
64831* section variable attribute:            Common Variable Attributes.
64832                                                             (line  292)
64833* secure_call function attribute, ARC:   ARC Function Attributes.
64834                                                             (line   51)
64835* selectany variable attribute:          Microsoft Windows Variable Attributes.
64836                                                             (line   16)
64837* sentinel function attribute:           Common Function Attributes.
64838                                                             (line  935)
64839* setjmp:                                Global Register Variables.
64840                                                             (line   92)
64841* setjmp incompatibilities:              Incompatibilities.  (line   39)
64842* shared attribute, Nvidia PTX:          Nvidia PTX Variable Attributes.
64843                                                             (line    9)
64844* shared strings:                        Incompatibilities.  (line    9)
64845* shared variable attribute:             Microsoft Windows Variable Attributes.
64846                                                             (line   37)
64847* shortcall function attribute, Blackfin: Blackfin Function Attributes.
64848                                                             (line   38)
64849* shortcall function attribute, PowerPC: PowerPC Function Attributes.
64850                                                             (line   10)
64851* short_call function attribute, ARC:    ARC Function Attributes.
64852                                                             (line   24)
64853* short_call function attribute, ARM:    ARM Function Attributes.
64854                                                             (line   38)
64855* short_call function attribute, Epiphany: Epiphany Function Attributes.
64856                                                             (line   57)
64857* short_call function attribute, MIPS:   MIPS Function Attributes.
64858                                                             (line   63)
64859* side effect in ?::                     Conditionals.       (line   20)
64860* side effects, macro argument:          Statement Exprs.    (line   35)
64861* side effects, order of evaluation:     Non-bugs.           (line  196)
64862* sign-return-address function attribute, AArch64: AArch64 Function Attributes.
64863                                                             (line   69)
64864* signal function attribute, AVR:        AVR Function Attributes.
64865                                                             (line   80)
64866* signbit:                               Other Builtins.     (line    6)
64867* signbitd128:                           Other Builtins.     (line    6)
64868* signbitd32:                            Other Builtins.     (line    6)
64869* signbitd64:                            Other Builtins.     (line    6)
64870* signbitf:                              Other Builtins.     (line    6)
64871* signbitl:                              Other Builtins.     (line    6)
64872* signed and unsigned values, comparison warning: Warning Options.
64873                                                             (line 2339)
64874* significand:                           Other Builtins.     (line    6)
64875* significandf:                          Other Builtins.     (line    6)
64876* significandl:                          Other Builtins.     (line    6)
64877* SIMD:                                  C Dialect Options.  (line  347)
64878* simd function attribute:               Common Function Attributes.
64879                                                             (line  962)
64880* simple constraints:                    Simple Constraints. (line    6)
64881* sin:                                   Other Builtins.     (line    6)
64882* sincos:                                Other Builtins.     (line    6)
64883* sincosf:                               Other Builtins.     (line    6)
64884* sincosl:                               Other Builtins.     (line    6)
64885* sinf:                                  Other Builtins.     (line    6)
64886* sinh:                                  Other Builtins.     (line    6)
64887* sinhf:                                 Other Builtins.     (line    6)
64888* sinhl:                                 Other Builtins.     (line    6)
64889* sinl:                                  Other Builtins.     (line    6)
64890* sizeof:                                Typeof.             (line    6)
64891* smaller data references:               M32R/D Options.     (line   57)
64892* smaller data references <1>:           Nios II Options.    (line    9)
64893* smaller data references (PowerPC):     RS/6000 and PowerPC Options.
64894                                                             (line  718)
64895* snprintf:                              Other Builtins.     (line    6)
64896* Solaris 2 options:                     Solaris 2 Options.  (line    6)
64897* SOURCE_DATE_EPOCH:                     Environment Variables.
64898                                                             (line  177)
64899* SPARC options:                         SPARC Options.      (line    6)
64900* Spec Files:                            Spec Files.         (line    6)
64901* specified registers:                   Explicit Register Variables.
64902                                                             (line    6)
64903* specifying compiler version and target machine: Invoking GCC.
64904                                                             (line   24)
64905* specifying hardware config:            Submodel Options.   (line    6)
64906* specifying machine version:            Invoking GCC.       (line   24)
64907* specifying registers for local variables: Local Register Variables.
64908                                                             (line    6)
64909* speed of compilation:                  Precompiled Headers.
64910                                                             (line    6)
64911* sprintf:                               Other Builtins.     (line    6)
64912* SPU options:                           SPU Options.        (line    6)
64913* spu_vector type attribute, SPU:        SPU Type Attributes.
64914                                                             (line    6)
64915* spu_vector variable attribute, SPU:    SPU Variable Attributes.
64916                                                             (line    6)
64917* sp_switch function attribute, SH:      SH Function Attributes.
64918                                                             (line   58)
64919* sqrt:                                  Other Builtins.     (line    6)
64920* sqrtf:                                 Other Builtins.     (line    6)
64921* sqrtl:                                 Other Builtins.     (line    6)
64922* sscanf:                                Other Builtins.     (line    6)
64923* sscanf, and constant strings:          Incompatibilities.  (line   17)
64924* sseregparm function attribute, x86:    x86 Function Attributes.
64925                                                             (line   93)
64926* stack_protect function attribute:      Common Function Attributes.
64927                                                             (line  981)
64928* Statement Attributes:                  Statement Attributes.
64929                                                             (line    6)
64930* statements inside expressions:         Statement Exprs.    (line    6)
64931* static data in C++, declaring and defining: Static Definitions.
64932                                                             (line    6)
64933* stdcall function attribute, x86-32:    x86 Function Attributes.
64934                                                             (line  108)
64935* stpcpy:                                Other Builtins.     (line    6)
64936* stpncpy:                               Other Builtins.     (line    6)
64937* strcasecmp:                            Other Builtins.     (line    6)
64938* strcat:                                Other Builtins.     (line    6)
64939* strchr:                                Other Builtins.     (line    6)
64940* strcmp:                                Other Builtins.     (line    6)
64941* strcpy:                                Other Builtins.     (line    6)
64942* strcspn:                               Other Builtins.     (line    6)
64943* strdup:                                Other Builtins.     (line    6)
64944* strfmon:                               Other Builtins.     (line    6)
64945* strftime:                              Other Builtins.     (line    6)
64946* strict-align function attribute, AArch64: AArch64 Function Attributes.
64947                                                             (line   33)
64948* string constants:                      Incompatibilities.  (line    9)
64949* strlen:                                Other Builtins.     (line    6)
64950* strncasecmp:                           Other Builtins.     (line    6)
64951* strncat:                               Other Builtins.     (line    6)
64952* strncmp:                               Other Builtins.     (line    6)
64953* strncpy:                               Other Builtins.     (line    6)
64954* strndup:                               Other Builtins.     (line    6)
64955* strnlen:                               Other Builtins.     (line    6)
64956* strpbrk:                               Other Builtins.     (line    6)
64957* strrchr:                               Other Builtins.     (line    6)
64958* strspn:                                Other Builtins.     (line    6)
64959* strstr:                                Other Builtins.     (line    6)
64960* struct:                                Unnamed Fields.     (line    6)
64961* struct __htm_tdb:                      S/390 System z Built-in Functions.
64962                                                             (line   49)
64963* structures:                            Incompatibilities.  (line  146)
64964* structures, constructor expression:    Compound Literals.  (line    6)
64965* submodel options:                      Submodel Options.   (line    6)
64966* subscripting:                          Subscripting.       (line    6)
64967* subscripting and function values:      Subscripting.       (line    6)
64968* suffixes for C++ source:               Invoking G++.       (line    6)
64969* SUNPRO_DEPENDENCIES:                   Environment Variables.
64970                                                             (line  171)
64971* suppressing warnings:                  Warning Options.    (line    6)
64972* surprises in C++:                      C++ Misunderstandings.
64973                                                             (line    6)
64974* syntax checking:                       Warning Options.    (line   13)
64975* syscall_linkage function attribute, IA-64: IA-64 Function Attributes.
64976                                                             (line    9)
64977* system headers, warnings from:         Warning Options.    (line 1713)
64978* sysv_abi function attribute, x86:      x86 Function Attributes.
64979                                                             (line   34)
64980* tan:                                   Other Builtins.     (line    6)
64981* tanf:                                  Other Builtins.     (line    6)
64982* tanh:                                  Other Builtins.     (line    6)
64983* tanhf:                                 Other Builtins.     (line    6)
64984* tanhl:                                 Other Builtins.     (line    6)
64985* tanl:                                  Other Builtins.     (line    6)
64986* target function attribute:             Common Function Attributes.
64987                                                             (line  986)
64988* target function attribute <1>:         ARM Function Attributes.
64989                                                             (line   77)
64990* target function attribute <2>:         Nios II Function Attributes.
64991                                                             (line    9)
64992* target function attribute <3>:         PowerPC Function Attributes.
64993                                                             (line   21)
64994* target function attribute <4>:         S/390 Function Attributes.
64995                                                             (line   22)
64996* target function attribute <5>:         x86 Function Attributes.
64997                                                             (line  180)
64998* target machine, specifying:            Invoking GCC.       (line   24)
64999* target("3dnow") function attribute, x86: x86 Function Attributes.
65000                                                             (line  186)
65001* target("3dnowa") function attribute, x86: x86 Function Attributes.
65002                                                             (line  190)
65003* target("abm") function attribute, x86: x86 Function Attributes.
65004                                                             (line  195)
65005* target("adx") function attribute, x86: x86 Function Attributes.
65006                                                             (line  200)
65007* target("aes") function attribute, x86: x86 Function Attributes.
65008                                                             (line  204)
65009* target("align-stringops") function attribute, x86: x86 Function Attributes.
65010                                                             (line  529)
65011* target("altivec") function attribute, PowerPC: PowerPC Function Attributes.
65012                                                             (line   28)
65013* target("arch=ARCH") function attribute, x86: x86 Function Attributes.
65014                                                             (line  538)
65015* target("arm") function attribute, ARM: ARM Function Attributes.
65016                                                             (line   87)
65017* target("avoid-indexed-addresses") function attribute, PowerPC: PowerPC Function Attributes.
65018                                                             (line  149)
65019* target("avx") function attribute, x86: x86 Function Attributes.
65020                                                             (line  208)
65021* target("avx2") function attribute, x86: x86 Function Attributes.
65022                                                             (line  212)
65023* target("avx5124fmaps") function attribute, x86: x86 Function Attributes.
65024                                                             (line  216)
65025* target("avx5124vnniw") function attribute, x86: x86 Function Attributes.
65026                                                             (line  221)
65027* target("avx512bitalg") function attribute, x86: x86 Function Attributes.
65028                                                             (line  226)
65029* target("avx512bw") function attribute, x86: x86 Function Attributes.
65030                                                             (line  231)
65031* target("avx512cd") function attribute, x86: x86 Function Attributes.
65032                                                             (line  235)
65033* target("avx512dq") function attribute, x86: x86 Function Attributes.
65034                                                             (line  239)
65035* target("avx512er") function attribute, x86: x86 Function Attributes.
65036                                                             (line  243)
65037* target("avx512f") function attribute, x86: x86 Function Attributes.
65038                                                             (line  247)
65039* target("avx512ifma") function attribute, x86: x86 Function Attributes.
65040                                                             (line  251)
65041* target("avx512pf") function attribute, x86: x86 Function Attributes.
65042                                                             (line  255)
65043* target("avx512vbmi") function attribute, x86: x86 Function Attributes.
65044                                                             (line  259)
65045* target("avx512vbmi2") function attribute, x86: x86 Function Attributes.
65046                                                             (line  263)
65047* target("avx512vl") function attribute, x86: x86 Function Attributes.
65048                                                             (line  267)
65049* target("avx512vnni") function attribute, x86: x86 Function Attributes.
65050                                                             (line  271)
65051* target("avx512vpopcntdq") function attribute, x86: x86 Function Attributes.
65052                                                             (line  275)
65053* target("bmi") function attribute, x86: x86 Function Attributes.
65054                                                             (line  280)
65055* target("bmi2") function attribute, x86: x86 Function Attributes.
65056                                                             (line  284)
65057* target("cld") function attribute, x86: x86 Function Attributes.
65058                                                             (line  505)
65059* target("cldemote") function attribute, x86: x86 Function Attributes.
65060                                                             (line  288)
65061* target("clflushopt") function attribute, x86: x86 Function Attributes.
65062                                                             (line  292)
65063* target("clwb") function attribute, x86: x86 Function Attributes.
65064                                                             (line  296)
65065* target("clzero") function attribute, x86: x86 Function Attributes.
65066                                                             (line  300)
65067* target("cmpb") function attribute, PowerPC: PowerPC Function Attributes.
65068                                                             (line   34)
65069* target("cpu=CPU") function attribute, PowerPC: PowerPC Function Attributes.
65070                                                             (line  164)
65071* target("crc32") function attribute, x86: x86 Function Attributes.
65072                                                             (line  304)
65073* target("custom-fpu-cfg=NAME") function attribute, Nios II: Nios II Function Attributes.
65074                                                             (line   25)
65075* target("custom-INSN=N") function attribute, Nios II: Nios II Function Attributes.
65076                                                             (line   16)
65077* target("cx16") function attribute, x86: x86 Function Attributes.
65078                                                             (line  308)
65079* target("default") function attribute, x86: x86 Function Attributes.
65080                                                             (line  311)
65081* target("dlmzb") function attribute, PowerPC: PowerPC Function Attributes.
65082                                                             (line   40)
65083* target("f16c") function attribute, x86: x86 Function Attributes.
65084                                                             (line  316)
65085* target("fancy-math-387") function attribute, x86: x86 Function Attributes.
65086                                                             (line  509)
65087* target("fma") function attribute, x86: x86 Function Attributes.
65088                                                             (line  320)
65089* target("fma4") function attribute, x86: x86 Function Attributes.
65090                                                             (line  324)
65091* target("fpmath=FPMATH") function attribute, x86: x86 Function Attributes.
65092                                                             (line  546)
65093* target("fprnd") function attribute, PowerPC: PowerPC Function Attributes.
65094                                                             (line   47)
65095* target("fpu=") function attribute, ARM: ARM Function Attributes.
65096                                                             (line   93)
65097* target("friz") function attribute, PowerPC: PowerPC Function Attributes.
65098                                                             (line  140)
65099* target("fsgsbase") function attribute, x86: x86 Function Attributes.
65100                                                             (line  328)
65101* target("fxsr") function attribute, x86: x86 Function Attributes.
65102                                                             (line  332)
65103* target("gfni") function attribute, x86: x86 Function Attributes.
65104                                                             (line  336)
65105* target("hard-dfp") function attribute, PowerPC: PowerPC Function Attributes.
65106                                                             (line   53)
65107* target("hle") function attribute, x86: x86 Function Attributes.
65108                                                             (line  340)
65109* target("ieee-fp") function attribute, x86: x86 Function Attributes.
65110                                                             (line  514)
65111* target("inline-all-stringops") function attribute, x86: x86 Function Attributes.
65112                                                             (line  519)
65113* target("inline-stringops-dynamically") function attribute, x86: x86 Function Attributes.
65114                                                             (line  523)
65115* target("isel") function attribute, PowerPC: PowerPC Function Attributes.
65116                                                             (line   59)
65117* target("longcall") function attribute, PowerPC: PowerPC Function Attributes.
65118                                                             (line  159)
65119* target("lwp") function attribute, x86: x86 Function Attributes.
65120                                                             (line  344)
65121* target("lzcnt") function attribute, x86: x86 Function Attributes.
65122                                                             (line  348)
65123* target("mfcrf") function attribute, PowerPC: PowerPC Function Attributes.
65124                                                             (line   63)
65125* target("mfpgpr") function attribute, PowerPC: PowerPC Function Attributes.
65126                                                             (line   70)
65127* target("mmx") function attribute, x86: x86 Function Attributes.
65128                                                             (line  352)
65129* target("movbe") function attribute, x86: x86 Function Attributes.
65130                                                             (line  356)
65131* target("movdir64b") function attribute, x86: x86 Function Attributes.
65132                                                             (line  360)
65133* target("movdiri") function attribute, x86: x86 Function Attributes.
65134                                                             (line  364)
65135* target("mulhw") function attribute, PowerPC: PowerPC Function Attributes.
65136                                                             (line   77)
65137* target("multiple") function attribute, PowerPC: PowerPC Function Attributes.
65138                                                             (line   84)
65139* target("mwaitx") function attribute, x86: x86 Function Attributes.
65140                                                             (line  368)
65141* target("no-custom-INSN") function attribute, Nios II: Nios II Function Attributes.
65142                                                             (line   16)
65143* target("paired") function attribute, PowerPC: PowerPC Function Attributes.
65144                                                             (line  154)
65145* target("pclmul") function attribute, x86: x86 Function Attributes.
65146                                                             (line  372)
65147* target("pconfig") function attribute, x86: x86 Function Attributes.
65148                                                             (line  376)
65149* target("pku") function attribute, x86: x86 Function Attributes.
65150                                                             (line  380)
65151* target("popcnt") function attribute, x86: x86 Function Attributes.
65152                                                             (line  384)
65153* target("popcntb") function attribute, PowerPC: PowerPC Function Attributes.
65154                                                             (line   95)
65155* target("popcntd") function attribute, PowerPC: PowerPC Function Attributes.
65156                                                             (line  102)
65157* target("powerpc-gfxopt") function attribute, PowerPC: PowerPC Function Attributes.
65158                                                             (line  108)
65159* target("powerpc-gpopt") function attribute, PowerPC: PowerPC Function Attributes.
65160                                                             (line  114)
65161* target("prefetchwt1") function attribute, x86: x86 Function Attributes.
65162                                                             (line  388)
65163* target("prfchw") function attribute, x86: x86 Function Attributes.
65164                                                             (line  392)
65165* target("ptwrite") function attribute, x86: x86 Function Attributes.
65166                                                             (line  396)
65167* target("rdpid") function attribute, x86: x86 Function Attributes.
65168                                                             (line  400)
65169* target("rdrnd") function attribute, x86: x86 Function Attributes.
65170                                                             (line  404)
65171* target("rdseed") function attribute, x86: x86 Function Attributes.
65172                                                             (line  408)
65173* target("recip") function attribute, x86: x86 Function Attributes.
65174                                                             (line  533)
65175* target("recip-precision") function attribute, PowerPC: PowerPC Function Attributes.
65176                                                             (line  120)
65177* target("rtm") function attribute, x86: x86 Function Attributes.
65178                                                             (line  412)
65179* target("sahf") function attribute, x86: x86 Function Attributes.
65180                                                             (line  416)
65181* target("sgx") function attribute, x86: x86 Function Attributes.
65182                                                             (line  420)
65183* target("sha") function attribute, x86: x86 Function Attributes.
65184                                                             (line  424)
65185* target("shstk") function attribute, x86: x86 Function Attributes.
65186                                                             (line  428)
65187* target("sse") function attribute, x86: x86 Function Attributes.
65188                                                             (line  432)
65189* target("sse2") function attribute, x86: x86 Function Attributes.
65190                                                             (line  436)
65191* target("sse3") function attribute, x86: x86 Function Attributes.
65192                                                             (line  440)
65193* target("sse4") function attribute, x86: x86 Function Attributes.
65194                                                             (line  444)
65195* target("sse4.1") function attribute, x86: x86 Function Attributes.
65196                                                             (line  449)
65197* target("sse4.2") function attribute, x86: x86 Function Attributes.
65198                                                             (line  453)
65199* target("sse4a") function attribute, x86: x86 Function Attributes.
65200                                                             (line  457)
65201* target("ssse3") function attribute, x86: x86 Function Attributes.
65202                                                             (line  461)
65203* target("string") function attribute, PowerPC: PowerPC Function Attributes.
65204                                                             (line  126)
65205* target("tbm") function attribute, x86: x86 Function Attributes.
65206                                                             (line  465)
65207* target("thumb") function attribute, ARM: ARM Function Attributes.
65208                                                             (line   83)
65209* target("tune=TUNE") function attribute, PowerPC: PowerPC Function Attributes.
65210                                                             (line  171)
65211* target("tune=TUNE") function attribute, x86: x86 Function Attributes.
65212                                                             (line  542)
65213* target("update") function attribute, PowerPC: PowerPC Function Attributes.
65214                                                             (line   89)
65215* target("vaes") function attribute, x86: x86 Function Attributes.
65216                                                             (line  469)
65217* target("vpclmulqdq") function attribute, x86: x86 Function Attributes.
65218                                                             (line  473)
65219* target("vsx") function attribute, PowerPC: PowerPC Function Attributes.
65220                                                             (line  132)
65221* target("waitpkg") function attribute, x86: x86 Function Attributes.
65222                                                             (line  477)
65223* target("wbnoinvd") function attribute, x86: x86 Function Attributes.
65224                                                             (line  481)
65225* target("xop") function attribute, x86: x86 Function Attributes.
65226                                                             (line  485)
65227* target("xsave") function attribute, x86: x86 Function Attributes.
65228                                                             (line  489)
65229* target("xsavec") function attribute, x86: x86 Function Attributes.
65230                                                             (line  493)
65231* target("xsaveopt") function attribute, x86: x86 Function Attributes.
65232                                                             (line  497)
65233* target("xsaves") function attribute, x86: x86 Function Attributes.
65234                                                             (line  501)
65235* target-dependent options:              Submodel Options.   (line    6)
65236* target_clones function attribute:      Common Function Attributes.
65237                                                             (line 1025)
65238* TC1:                                   Standards.          (line   13)
65239* TC2:                                   Standards.          (line   13)
65240* TC3:                                   Standards.          (line   13)
65241* tda variable attribute, V850:          V850 Variable Attributes.
65242                                                             (line   13)
65243* Technical Corrigenda:                  Standards.          (line   13)
65244* Technical Corrigendum 1:               Standards.          (line   13)
65245* Technical Corrigendum 2:               Standards.          (line   13)
65246* Technical Corrigendum 3:               Standards.          (line   13)
65247* template instantiation:                Template Instantiation.
65248                                                             (line    6)
65249* temporaries, lifetime of:              Temporaries.        (line    6)
65250* tentative definitions:                 Code Gen Options.   (line  231)
65251* tgamma:                                Other Builtins.     (line    6)
65252* tgammaf:                               Other Builtins.     (line    6)
65253* tgammal:                               Other Builtins.     (line    6)
65254* thiscall function attribute, x86-32:   x86 Function Attributes.
65255                                                             (line   23)
65256* Thread-Local Storage:                  Thread-Local.       (line    6)
65257* thunks:                                Nested Functions.   (line    6)
65258* TILE-Gx options:                       TILE-Gx Options.    (line    6)
65259* TILEPro options:                       TILEPro Options.    (line    6)
65260* tiny data section on the H8/300H and H8S: H8/300 Variable Attributes.
65261                                                             (line   19)
65262* tiny type attribute, MeP:              MeP Type Attributes.
65263                                                             (line    6)
65264* tiny variable attribute, MeP:          MeP Variable Attributes.
65265                                                             (line   20)
65266* tiny_data variable attribute, H8/300:  H8/300 Variable Attributes.
65267                                                             (line   19)
65268* TLS:                                   Thread-Local.       (line    6)
65269* tls-dialect= function attribute, AArch64: AArch64 Function Attributes.
65270                                                             (line   48)
65271* tls_model variable attribute:          Common Variable Attributes.
65272                                                             (line  337)
65273* TMPDIR:                                Environment Variables.
65274                                                             (line   45)
65275* toascii:                               Other Builtins.     (line    6)
65276* tolower:                               Other Builtins.     (line    6)
65277* toupper:                               Other Builtins.     (line    6)
65278* towlower:                              Other Builtins.     (line    6)
65279* towupper:                              Other Builtins.     (line    6)
65280* traditional C language:                Preprocessor Options.
65281                                                             (line  366)
65282* transparent_union type attribute:      Common Type Attributes.
65283                                                             (line  357)
65284* trapa_handler function attribute, SH:  SH Function Attributes.
65285                                                             (line   73)
65286* trap_exit function attribute, SH:      SH Function Attributes.
65287                                                             (line   68)
65288* trunc:                                 Other Builtins.     (line    6)
65289* truncf:                                Other Builtins.     (line    6)
65290* truncl:                                Other Builtins.     (line    6)
65291* tune= function attribute, AArch64:     AArch64 Function Attributes.
65292                                                             (line   58)
65293* two-stage name lookup:                 Name lookup.        (line    6)
65294* type alignment:                        Alignment.          (line    6)
65295* type attributes:                       Type Attributes.    (line    6)
65296* type-diff GCC_COLORS capability:       Diagnostic Message Formatting Options.
65297                                                             (line  119)
65298* typedef names as function parameters:  Incompatibilities.  (line   97)
65299* typeof:                                Typeof.             (line    6)
65300* type_info:                             Vague Linkage.      (line   42)
65301* uhk fixed-suffix:                      Fixed-Point.        (line    6)
65302* UHK fixed-suffix:                      Fixed-Point.        (line    6)
65303* uhr fixed-suffix:                      Fixed-Point.        (line    6)
65304* UHR fixed-suffix:                      Fixed-Point.        (line    6)
65305* uk fixed-suffix:                       Fixed-Point.        (line    6)
65306* UK fixed-suffix:                       Fixed-Point.        (line    6)
65307* ulk fixed-suffix:                      Fixed-Point.        (line    6)
65308* ULK fixed-suffix:                      Fixed-Point.        (line    6)
65309* ULL integer suffix:                    Long Long.          (line    6)
65310* ullk fixed-suffix:                     Fixed-Point.        (line    6)
65311* ULLK fixed-suffix:                     Fixed-Point.        (line    6)
65312* ullr fixed-suffix:                     Fixed-Point.        (line    6)
65313* ULLR fixed-suffix:                     Fixed-Point.        (line    6)
65314* ulr fixed-suffix:                      Fixed-Point.        (line    6)
65315* ULR fixed-suffix:                      Fixed-Point.        (line    6)
65316* uncached type attribute, ARC:          ARC Type Attributes.
65317                                                             (line    6)
65318* undefined behavior:                    Bug Criteria.       (line   17)
65319* undefined function value:              Bug Criteria.       (line   17)
65320* underscores in variables in macros:    Typeof.             (line   46)
65321* union:                                 Unnamed Fields.     (line    6)
65322* union, casting to a:                   Cast to Union.      (line    6)
65323* unions:                                Incompatibilities.  (line  146)
65324* unknown pragmas, warning:              Warning Options.    (line 1189)
65325* unresolved references and -nodefaultlibs: Link Options.    (line  155)
65326* unresolved references and -nostdlib:   Link Options.       (line  155)
65327* unused function attribute:             Common Function Attributes.
65328                                                             (line 1046)
65329* unused label attribute:                Label Attributes.   (line   31)
65330* unused type attribute:                 Common Type Attributes.
65331                                                             (line  410)
65332* unused variable attribute:             Common Variable Attributes.
65333                                                             (line  346)
65334* upper function attribute, MSP430:      MSP430 Function Attributes.
65335                                                             (line   57)
65336* upper variable attribute, MSP430:      MSP430 Variable Attributes.
65337                                                             (line   24)
65338* ur fixed-suffix:                       Fixed-Point.        (line    6)
65339* UR fixed-suffix:                       Fixed-Point.        (line    6)
65340* used function attribute:               Common Function Attributes.
65341                                                             (line 1051)
65342* used variable attribute:               Common Variable Attributes.
65343                                                             (line  351)
65344* User stack pointer in interrupts on the Blackfin: Blackfin Function Attributes.
65345                                                             (line   21)
65346* use_debug_exception_return function attribute, MIPS: MIPS Function Attributes.
65347                                                             (line   39)
65348* use_shadow_register_set function attribute, MIPS: MIPS Function Attributes.
65349                                                             (line   28)
65350* V in constraint:                       Simple Constraints. (line   43)
65351* V850 Options:                          V850 Options.       (line    6)
65352* vague linkage:                         Vague Linkage.      (line    6)
65353* value after longjmp:                   Global Register Variables.
65354                                                             (line   92)
65355* variable addressability on the M32R/D: M32R/D Variable Attributes.
65356                                                             (line    9)
65357* variable alignment:                    Alignment.          (line    6)
65358* variable attributes:                   Variable Attributes.
65359                                                             (line    6)
65360* variable number of arguments:          Variadic Macros.    (line    6)
65361* variable-length array in a structure:  Variable Length.    (line   26)
65362* variable-length array scope:           Variable Length.    (line   22)
65363* variable-length arrays:                Variable Length.    (line    6)
65364* variables in specified registers:      Explicit Register Variables.
65365                                                             (line    6)
65366* variables, local, in macros:           Typeof.             (line   46)
65367* variadic functions, pointer arguments: Variadic Pointer Args.
65368                                                             (line    6)
65369* variadic macros:                       Variadic Macros.    (line    6)
65370* VAX options:                           VAX Options.        (line    6)
65371* vector function attribute, RX:         RX Function Attributes.
65372                                                             (line   49)
65373* vector types, using with x86 intrinsics: Vector Extensions.
65374                                                             (line  188)
65375* vector_size type attribute:            Common Type Attributes.
65376                                                             (line  419)
65377* vector_size variable attribute:        Common Variable Attributes.
65378                                                             (line  360)
65379* version_id function attribute, IA-64:  IA-64 Function Attributes.
65380                                                             (line   16)
65381* vfprintf:                              Other Builtins.     (line    6)
65382* vfscanf:                               Other Builtins.     (line    6)
65383* visibility function attribute:         Common Function Attributes.
65384                                                             (line 1061)
65385* visibility type attribute:             Common Type Attributes.
65386                                                             (line  446)
65387* visibility variable attribute:         Common Variable Attributes.
65388                                                             (line  388)
65389* Visium options:                        Visium Options.     (line    6)
65390* VLAs:                                  Variable Length.    (line    6)
65391* vliw function attribute, MeP:          MeP Function Attributes.
65392                                                             (line   30)
65393* void pointers, arithmetic:             Pointer Arith.      (line    6)
65394* void, size of pointer to:              Pointer Arith.      (line    6)
65395* volatile access:                       Volatiles.          (line    6)
65396* volatile access <1>:                   C++ Volatiles.      (line    6)
65397* volatile applied to function:          Function Attributes.
65398                                                             (line    6)
65399* volatile asm:                          Extended Asm.       (line  116)
65400* volatile read:                         Volatiles.          (line    6)
65401* volatile read <1>:                     C++ Volatiles.      (line    6)
65402* volatile write:                        Volatiles.          (line    6)
65403* volatile write <1>:                    C++ Volatiles.      (line    6)
65404* vprintf:                               Other Builtins.     (line    6)
65405* vscanf:                                Other Builtins.     (line    6)
65406* vsnprintf:                             Other Builtins.     (line    6)
65407* vsprintf:                              Other Builtins.     (line    6)
65408* vsscanf:                               Other Builtins.     (line    6)
65409* vtable:                                Vague Linkage.      (line   27)
65410* VxWorks Options:                       VxWorks Options.    (line    6)
65411* w floating point suffix:               Floating Types.     (line    6)
65412* W floating point suffix:               Floating Types.     (line    6)
65413* wakeup function attribute, MSP430:     MSP430 Function Attributes.
65414                                                             (line   49)
65415* warm function attribute, NDS32:        NDS32 Function Attributes.
65416                                                             (line   52)
65417* warning for comparison of signed and unsigned values: Warning Options.
65418                                                             (line 2339)
65419* warning for overloaded virtual function: C++ Dialect Options.
65420                                                             (line  897)
65421* warning for reordering of member initializers: C++ Dialect Options.
65422                                                             (line  761)
65423* warning for unknown pragmas:           Warning Options.    (line 1189)
65424* warning function attribute:            Common Function Attributes.
65425                                                             (line  272)
65426* warning GCC_COLORS capability:         Diagnostic Message Formatting Options.
65427                                                             (line   80)
65428* warning messages:                      Warning Options.    (line    6)
65429* warnings from system headers:          Warning Options.    (line 1713)
65430* warnings vs errors:                    Warnings and Errors.
65431                                                             (line    6)
65432* warn_if_not_aligned type attribute:    Common Type Attributes.
65433                                                             (line   91)
65434* warn_if_not_aligned variable attribute: Common Variable Attributes.
65435                                                             (line  106)
65436* warn_unused type attribute:            C++ Attributes.     (line   71)
65437* warn_unused_result function attribute: Common Function Attributes.
65438                                                             (line 1161)
65439* weak function attribute:               Common Function Attributes.
65440                                                             (line 1178)
65441* weak variable attribute:               Common Variable Attributes.
65442                                                             (line  393)
65443* weakref function attribute:            Common Function Attributes.
65444                                                             (line 1187)
65445* whitespace:                            Incompatibilities.  (line  112)
65446* Windows Options for x86:               x86 Windows Options.
65447                                                             (line    6)
65448* X in constraint:                       Simple Constraints. (line  122)
65449* X3.159-1989:                           Standards.          (line   13)
65450* x86 named address spaces:              Named Address Spaces.
65451                                                             (line  183)
65452* x86 Options:                           x86 Options.        (line    6)
65453* x86 Windows Options:                   x86 Windows Options.
65454                                                             (line    6)
65455* Xstormy16 Options:                     Xstormy16 Options.  (line    6)
65456* Xtensa Options:                        Xtensa Options.     (line    6)
65457* y0:                                    Other Builtins.     (line    6)
65458* y0f:                                   Other Builtins.     (line    6)
65459* y0l:                                   Other Builtins.     (line    6)
65460* y1:                                    Other Builtins.     (line    6)
65461* y1f:                                   Other Builtins.     (line    6)
65462* y1l:                                   Other Builtins.     (line    6)
65463* yn:                                    Other Builtins.     (line    6)
65464* ynf:                                   Other Builtins.     (line    6)
65465* ynl:                                   Other Builtins.     (line    6)
65466* zda variable attribute, V850:          V850 Variable Attributes.
65467                                                             (line   17)
65468* zero-length arrays:                    Zero Length.        (line    6)
65469* zero-size structures:                  Empty Structures.   (line    6)
65470* zSeries options:                       zSeries Options.    (line    6)
65471
65472
65473
65474Tag Table:
65475Node: Top2057
65476Node: G++ and GCC3947
65477Node: Standards6007
65478Node: Invoking GCC19624
65479Node: Option Summary24747
65480Node: Overall Options77215
65481Node: Invoking G++92452
65482Node: C Dialect Options93975
65483Node: C++ Dialect Options113185
65484Node: Objective-C and Objective-C++ Dialect Options156560
65485Node: Diagnostic Message Formatting Options167790
65486Node: Warning Options184428
65487Ref: Wtrigraphs276997
65488Node: Debugging Options315548
65489Node: Optimize Options334739
65490Ref: Type-punning403539
65491Node: Instrumentation Options503527
65492Node: Preprocessor Options540568
65493Ref: dashMF545415
65494Ref: fdollars-in-identifiers549994
65495Node: Assembler Options562244
65496Node: Link Options562935
65497Ref: Link Options-Footnote-1579932
65498Node: Directory Options580268
65499Node: Code Gen Options588671
65500Node: Developer Options617357
65501Node: Submodel Options658492
65502Node: AArch64 Options660285
65503Ref: aarch64-feature-modifiers674592
65504Node: Adapteva Epiphany Options678272
65505Node: AMD GCN Options684224
65506Node: ARC Options685050
65507Node: ARM Options706262
65508Node: AVR Options742776
65509Node: Blackfin Options767367
65510Node: C6X Options775259
65511Node: CRIS Options776802
65512Node: CR16 Options780541
65513Node: C-SKY Options781453
65514Node: Darwin Options786313
65515Node: DEC Alpha Options793754
65516Node: FR30 Options805370
65517Node: FT32 Options805935
65518Node: FRV Options806881
65519Node: GNU/Linux Options813645
65520Node: H8/300 Options815026
65521Node: HPPA Options816478
65522Node: IA-64 Options826010
65523Node: LM32 Options834138
65524Node: M32C Options834661
65525Node: M32R/D Options835934
65526Node: M680x0 Options839479
65527Node: MCore Options853564
65528Node: MeP Options855066
65529Node: MicroBlaze Options859026
65530Node: MIPS Options862116
65531Node: MMIX Options898655
65532Node: MN10300 Options901132
65533Node: Moxie Options903675
65534Node: MSP430 Options904162
65535Node: NDS32 Options908866
65536Node: Nios II Options911036
65537Node: Nvidia PTX Options923198
65538Node: OpenRISC Options925667
65539Node: PDP-11 Options927163
65540Node: picoChip Options928412
65541Node: PowerPC Options930550
65542Node: RISC-V Options930773
65543Node: RL78 Options935998
65544Node: RS/6000 and PowerPC Options939773
65545Node: RX Options980385
65546Node: S/390 and zSeries Options988987
65547Node: Score Options999366
65548Node: SH Options1000215
65549Node: Solaris 2 Options1015355
65550Node: SPARC Options1016593
65551Node: SPU Options1032214
65552Node: System V Options1037153
65553Node: TILE-Gx Options1037979
65554Node: TILEPro Options1038997
65555Node: V850 Options1039501
65556Node: VAX Options1046188
65557Node: Visium Options1046726
65558Node: VMS Options1049034
65559Node: VxWorks Options1049850
65560Node: x86 Options1051002
65561Node: x86 Windows Options1112888
65562Node: Xstormy16 Options1115693
65563Node: Xtensa Options1115987
65564Node: zSeries Options1121136
65565Node: Spec Files1121332
65566Node: Environment Variables1143490
65567Node: Precompiled Headers1152216
65568Node: C Implementation1158222
65569Node: Translation implementation1159912
65570Node: Environment implementation1160503
65571Node: Identifiers implementation1161057
65572Node: Characters implementation1162143
65573Node: Integers implementation1165793
65574Node: Floating point implementation1167842
65575Node: Arrays and pointers implementation1170905
65576Ref: Arrays and pointers implementation-Footnote-11172365
65577Node: Hints implementation1172491
65578Node: Structures unions enumerations and bit-fields implementation1173986
65579Node: Qualifiers implementation1176210
65580Node: Declarators implementation1177989
65581Node: Statements implementation1178330
65582Node: Preprocessing directives implementation1178656
65583Node: Library functions implementation1180977
65584Node: Architecture implementation1181626
65585Node: Locale-specific behavior implementation1183271
65586Node: C++ Implementation1183576
65587Node: Conditionally-supported behavior1184859
65588Node: Exception handling1185476
65589Node: C Extensions1185943
65590Node: Statement Exprs1191147
65591Node: Local Labels1196519
65592Node: Labels as Values1199492
65593Ref: Labels as Values-Footnote-11202019
65594Node: Nested Functions1202204
65595Node: Nonlocal Gotos1206158
65596Node: Constructing Calls1208424
65597Node: Typeof1213139
65598Node: Conditionals1217068
65599Node: __int1281217957
65600Node: Long Long1218482
65601Node: Complex1219973
65602Node: Floating Types1222741
65603Node: Half-Precision1226208
65604Node: Decimal Float1228619
65605Node: Hex Floats1230473
65606Node: Fixed-Point1231547
65607Node: Named Address Spaces1234805
65608Ref: AVR Named Address Spaces1235491
65609Node: Zero Length1242514
65610Node: Empty Structures1246695
65611Node: Variable Length1247101
65612Node: Variadic Macros1249819
65613Node: Escaped Newlines1252197
65614Node: Subscripting1253058
65615Node: Pointer Arith1253783
65616Node: Variadic Pointer Args1254360
65617Node: Pointers to Arrays1255085
65618Node: Initializers1255838
65619Node: Compound Literals1256339
65620Node: Designated Inits1259906
65621Node: Case Ranges1263830
65622Node: Cast to Union1264511
65623Node: Mixed Declarations1266234
65624Node: Function Attributes1266744
65625Node: Common Function Attributes1271200
65626Node: AArch64 Function Attributes1329856
65627Node: AMD GCN Function Attributes1336050
65628Node: ARC Function Attributes1339103
65629Node: ARM Function Attributes1341425
65630Node: AVR Function Attributes1346564
65631Node: Blackfin Function Attributes1351099
65632Node: CR16 Function Attributes1353597
65633Node: C-SKY Function Attributes1354121
65634Node: Epiphany Function Attributes1355418
65635Node: H8/300 Function Attributes1358173
65636Node: IA-64 Function Attributes1359371
65637Node: M32C Function Attributes1360413
65638Node: M32R/D Function Attributes1362751
65639Node: m68k Function Attributes1364225
65640Node: MCORE Function Attributes1365169
65641Node: MeP Function Attributes1365980
65642Node: MicroBlaze Function Attributes1367281
65643Node: Microsoft Windows Function Attributes1368788
65644Node: MIPS Function Attributes1373357
65645Node: MSP430 Function Attributes1378975
65646Node: NDS32 Function Attributes1383028
65647Node: Nios II Function Attributes1385452
65648Node: Nvidia PTX Function Attributes1386749
65649Node: PowerPC Function Attributes1387364
65650Node: RISC-V Function Attributes1394419
65651Node: RL78 Function Attributes1395835
65652Node: RX Function Attributes1397074
65653Node: S/390 Function Attributes1399621
65654Node: SH Function Attributes1401449
65655Node: SPU Function Attributes1404870
65656Node: Symbian OS Function Attributes1405678
65657Node: V850 Function Attributes1406015
65658Node: Visium Function Attributes1406560
65659Node: x86 Function Attributes1407088
65660Node: Xstormy16 Function Attributes1429577
65661Node: Variable Attributes1430084
65662Node: Common Variable Attributes1431645
65663Node: ARC Variable Attributes1449446
65664Node: AVR Variable Attributes1449828
65665Node: Blackfin Variable Attributes1454990
65666Node: H8/300 Variable Attributes1455848
65667Node: IA-64 Variable Attributes1456921
65668Node: M32R/D Variable Attributes1457672
65669Node: MeP Variable Attributes1458455
65670Node: Microsoft Windows Variable Attributes1460548
65671Node: MSP430 Variable Attributes1463001
65672Node: Nvidia PTX Variable Attributes1464202
65673Node: PowerPC Variable Attributes1464819
65674Node: RL78 Variable Attributes1465376
65675Node: SPU Variable Attributes1465794
65676Node: V850 Variable Attributes1466159
65677Node: x86 Variable Attributes1466791
65678Node: Xstormy16 Variable Attributes1467847
65679Node: Type Attributes1468417
65680Node: Common Type Attributes1470105
65681Node: ARC Type Attributes1491597
65682Node: ARM Type Attributes1492069
65683Node: MeP Type Attributes1492851
65684Node: PowerPC Type Attributes1493253
65685Node: SPU Type Attributes1494242
65686Node: x86 Type Attributes1494661
65687Node: Label Attributes1495649
65688Node: Enumerator Attributes1497582
65689Node: Statement Attributes1498901
65690Node: Attribute Syntax1500384
65691Node: Function Prototypes1511642
65692Node: C++ Comments1513422
65693Node: Dollar Signs1513941
65694Node: Character Escapes1514406
65695Node: Alignment1514690
65696Node: Inline1516343
65697Node: Volatiles1521160
65698Node: Using Assembly Language with C1524059
65699Node: Basic Asm1525296
65700Node: Extended Asm1530746
65701Ref: Volatile1534845
65702Ref: AssemblerTemplate1538965
65703Ref: OutputOperands1543205
65704Ref: FlagOutputOperands1550168
65705Ref: InputOperands1552209
65706Ref: Clobbers and Scratch Registers1556477
65707Ref: GotoLabels1565118
65708Ref: x86Operandmodifiers1567253
65709Ref: x86floatingpointasmoperands1570410
65710Node: Constraints1573739
65711Node: Simple Constraints1574845
65712Node: Multi-Alternative1582159
65713Node: Modifiers1583834
65714Node: Machine Constraints1586632
65715Node: Asm Labels1649826
65716Node: Explicit Register Variables1651446
65717Ref: Explicit Reg Vars1651660
65718Node: Global Register Variables1652269
65719Ref: Global Reg Vars1652477
65720Node: Local Register Variables1657259
65721Ref: Local Reg Vars1657479
65722Node: Size of an asm1661107
65723Node: Alternate Keywords1662585
65724Node: Incomplete Enums1664084
65725Node: Function Names1664841
65726Node: Return Address1666739
65727Node: Vector Extensions1671329
65728Node: Offsetof1681094
65729Node: __sync Builtins1681927
65730Node: __atomic Builtins1688370
65731Node: Integer Overflow Builtins1701995
65732Node: x86 specific memory model extensions for transactional memory1708478
65733Node: Object Size Checking1709744
65734Node: Other Builtins1716000
65735Node: Target Builtins1765228
65736Node: AArch64 Built-in Functions1766892
65737Node: Alpha Built-in Functions1767347
65738Node: Altera Nios II Built-in Functions1770395
65739Node: ARC Built-in Functions1774764
65740Node: ARC SIMD Built-in Functions1779976
65741Node: ARM iWMMXt Built-in Functions1788872
65742Node: ARM C Language Extensions (ACLE)1795868
65743Node: ARM Floating Point Status and Control Intrinsics1797145
65744Node: ARM ARMv8-M Security Extensions1797630
65745Node: AVR Built-in Functions1798910
65746Node: Blackfin Built-in Functions1802671
65747Node: FR-V Built-in Functions1803290
65748Node: Argument Types1804158
65749Node: Directly-mapped Integer Functions1805912
65750Node: Directly-mapped Media Functions1806996
65751Node: Raw read/write Functions1815202
65752Node: Other Built-in Functions1816110
65753Node: MIPS DSP Built-in Functions1817296
65754Node: MIPS Paired-Single Support1829793
65755Node: MIPS Loongson Built-in Functions1831292
65756Node: Paired-Single Arithmetic1837814
65757Node: Paired-Single Built-in Functions1838762
65758Node: MIPS-3D Built-in Functions1841429
65759Node: MIPS SIMD Architecture (MSA) Support1846823
65760Node: MIPS SIMD Architecture Built-in Functions1849663
65761Node: Other MIPS Built-in Functions1876493
65762Node: MSP430 Built-in Functions1877502
65763Node: NDS32 Built-in Functions1878903
65764Node: picoChip Built-in Functions1880196
65765Node: Basic PowerPC Built-in Functions1881545
65766Node: Basic PowerPC Built-in Functions Available on all Configurations1882345
65767Node: Basic PowerPC Built-in Functions Available on ISA 2.051890400
65768Node: Basic PowerPC Built-in Functions Available on ISA 2.061895259
65769Node: Basic PowerPC Built-in Functions Available on ISA 2.071897339
65770Node: Basic PowerPC Built-in Functions Available on ISA 3.01898193
65771Node: PowerPC AltiVec/VSX Built-in Functions1905109
65772Node: PowerPC AltiVec Built-in Functions on ISA 2.051908783
65773Node: PowerPC AltiVec Built-in Functions Available on ISA 2.061998021
65774Node: PowerPC AltiVec Built-in Functions Available on ISA 2.072022466
65775Node: PowerPC AltiVec Built-in Functions Available on ISA 3.02043670
65776Node: PowerPC Hardware Transactional Memory Built-in Functions2078806
65777Node: PowerPC Atomic Memory Operation Functions2087321
65778Node: RX Built-in Functions2089856
65779Node: S/390 System z Built-in Functions2093874
65780Node: SH Built-in Functions2099104
65781Node: SPARC VIS Built-in Functions2100832
65782Node: SPU Built-in Functions2109361
65783Node: TI C6X Built-in Functions2111078
65784Node: TILE-Gx Built-in Functions2112103
65785Node: TILEPro Built-in Functions2113222
65786Node: x86 Built-in Functions2114322
65787Node: x86 transactional memory intrinsics2178069
65788Node: x86 control-flow protection intrinsics2181336
65789Node: Target Format Checks2183107
65790Node: Solaris Format Checks2183539
65791Node: Darwin Format Checks2183965
65792Node: Pragmas2184928
65793Node: AArch64 Pragmas2185853
65794Node: ARM Pragmas2186310
65795Node: M32C Pragmas2186937
65796Node: MeP Pragmas2188009
65797Node: RS/6000 and PowerPC Pragmas2190077
65798Node: S/390 Pragmas2190817
65799Node: Darwin Pragmas2191383
65800Node: Solaris Pragmas2192436
65801Node: Symbol-Renaming Pragmas2193600
65802Node: Structure-Layout Pragmas2195235
65803Node: Weak Pragmas2197515
65804Node: Diagnostic Pragmas2198250
65805Node: Visibility Pragmas2202441
65806Node: Push/Pop Macro Pragmas2203126
65807Node: Function Specific Option Pragmas2204099
65808Node: Loop-Specific Pragmas2206065
65809Node: Unnamed Fields2207665
65810Node: Thread-Local2209862
65811Node: C99 Thread-Local Edits2211968
65812Node: C++98 Thread-Local Edits2213966
65813Node: Binary constants2217411
65814Node: C++ Extensions2218082
65815Node: C++ Volatiles2219712
65816Node: Restricted Pointers2222060
65817Node: Vague Linkage2223651
65818Node: C++ Interface2227274
65819Ref: C++ Interface-Footnote-12231071
65820Node: Template Instantiation2231209
65821Node: Bound member functions2238692
65822Node: C++ Attributes2240224
65823Node: Function Multiversioning2244296
65824Node: Type Traits2246103
65825Node: C++ Concepts2253053
65826Node: Deprecated Features2254559
65827Node: Backwards Compatibility2256384
65828Node: Objective-C2257456
65829Node: GNU Objective-C runtime API2258063
65830Node: Modern GNU Objective-C runtime API2259070
65831Node: Traditional GNU Objective-C runtime API2261506
65832Node: Executing code before main2262233
65833Node: What you can and what you cannot do in +load2264977
65834Node: Type encoding2267347
65835Node: Legacy type encoding2272488
65836Node: @encode2273578
65837Node: Method signatures2274123
65838Node: Garbage Collection2276115
65839Node: Constant string objects2278805
65840Node: compatibility_alias2281314
65841Node: Exceptions2282039
65842Node: Synchronization2284749
65843Node: Fast enumeration2285933
65844Node: Using fast enumeration2286245
65845Node: c99-like fast enumeration syntax2287456
65846Node: Fast enumeration details2288159
65847Node: Fast enumeration protocol2290499
65848Node: Messaging with the GNU Objective-C runtime2293651
65849Node: Dynamically registering methods2295023
65850Node: Forwarding hook2296714
65851Node: Compatibility2299754
65852Node: Gcov2306310
65853Node: Gcov Intro2306845
65854Node: Invoking Gcov2309563
65855Node: Gcov and Optimization2332398
65856Node: Gcov Data Files2336141
65857Node: Cross-profiling2337550
65858Node: Gcov-tool2339404
65859Node: Gcov-tool Intro2339829
65860Node: Invoking Gcov-tool2341799
65861Node: Gcov-dump2344377
65862Node: Gcov-dump Intro2344699
65863Node: Invoking Gcov-dump2344966
65864Node: Trouble2345567
65865Node: Actual Bugs2346985
65866Node: Interoperation2347432
65867Node: Incompatibilities2354323
65868Node: Fixed Headers2362475
65869Node: Standard Libraries2364133
65870Node: Disappointments2365505
65871Node: C++ Misunderstandings2369864
65872Node: Static Definitions2370675
65873Node: Name lookup2371728
65874Ref: Name lookup-Footnote-12376509
65875Node: Temporaries2376698
65876Node: Copy Assignment2378674
65877Node: Non-bugs2380481
65878Node: Warnings and Errors2390987
65879Node: Bugs2392749
65880Node: Bug Criteria2393216
65881Node: Bug Reporting2395426
65882Node: Service2395644
65883Node: Contributing2396464
65884Node: Funding2397205
65885Node: GNU Project2399695
65886Node: Copying2400341
65887Node: GNU Free Documentation License2437850
65888Node: Contributors2462968
65889Node: Option Index2503941
65890Node: Keyword Index2767493
65891
65892End Tag Table
65893