1This is gcc.info, produced by makeinfo version 6.5 from gcc.texi.
2
3Copyright (C) 1988-2018 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-2018 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 8.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, 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 Pascal,
123Mercury, and COBOL.  To use these, they must be built together with GCC
124proper.
125
126 Most of the compilers for languages other than C have their own names.
127The C++ compiler is G++, the Ada compiler is GNAT, and so on.  When we
128talk about compiling one of those languages, we might refer to that
129compiler by its own name, or as GCC.  Either is correct.
130
131 Historically, compilers for many languages, including C++ and Fortran,
132have been implemented as "preprocessors" which emit another high level
133language such as C.  None of the compilers included in GCC are
134implemented this way; they all generate machine code directly.  This
135sort of preprocessor should not be confused with the "C preprocessor",
136which is an integral feature of the C, C++, Objective-C and
137Objective-C++ languages.
138
139
140File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top
141
1422 Language Standards Supported by GCC
143*************************************
144
145For each language compiled by GCC for which there is a standard, GCC
146attempts to follow one or more versions of that standard, possibly with
147some exceptions, and possibly with some extensions.
148
1492.1 C Language
150==============
151
152The original ANSI C standard (X3.159-1989) was ratified in 1989 and
153published in 1990.  This standard was ratified as an ISO standard
154(ISO/IEC 9899:1990) later in 1990.  There were no technical differences
155between these publications, although the sections of the ANSI standard
156were renumbered and became clauses in the ISO standard.  The ANSI
157standard, but not the ISO standard, also came with a Rationale document.
158This standard, in both its forms, is commonly known as "C89", or
159occasionally as "C90", from the dates of ratification.  To select this
160standard in GCC, use one of the options '-ansi', '-std=c90' or
161'-std=iso9899:1990'; to obtain all the diagnostics required by the
162standard, you should also specify '-pedantic' (or '-pedantic-errors' if
163you want them to be errors rather than warnings).  *Note Options
164Controlling C Dialect: C Dialect Options.
165
166 Errors in the 1990 ISO C standard were corrected in two Technical
167Corrigenda published in 1994 and 1996.  GCC does not support the
168uncorrected version.
169
170 An amendment to the 1990 standard was published in 1995.  This
171amendment added digraphs and '__STDC_VERSION__' to the language, but
172otherwise concerned the library.  This amendment is commonly known as
173"AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
174select this standard in GCC, use the option '-std=iso9899:199409' (with,
175as for other standard versions, '-pedantic' to receive all required
176diagnostics).
177
178 A new edition of the ISO C standard was published in 1999 as ISO/IEC
1799899:1999, and is commonly known as "C99".  (While in development,
180drafts of this standard version were referred to as "C9X".) GCC has
181substantially complete support for this standard version; see
182<http://gcc.gnu.org/c99status.html> for details.  To select this
183standard, use '-std=c99' or '-std=iso9899:1999'.
184
185 Errors in the 1999 ISO C standard were corrected in three Technical
186Corrigenda published in 2001, 2004 and 2007.  GCC does not support the
187uncorrected version.
188
189 A fourth version of the C standard, known as "C11", was published in
1902011 as ISO/IEC 9899:2011.  (While in development, drafts of this
191standard version were referred to as "C1X".) GCC has substantially
192complete support for this standard, enabled with '-std=c11' or
193'-std=iso9899:2011'.  A version with corrections integrated is known as
194"C17" and is supported with '-std=c17' or '-std=iso9899:2017'; the
195corrections are also applied with '-std=c11', and the only difference
196between the options is the value of '__STDC_VERSION__'.
197
198 By default, GCC provides some extensions to the C language that, on
199rare occasions conflict with the C standard.  *Note Extensions to the C
200Language Family: C Extensions.  Some features that are part of the C99
201standard are accepted as extensions in C90 mode, and some features that
202are part of the C11 standard are accepted as extensions in C90 and C99
203modes.  Use of the '-std' options listed above disables these extensions
204where they conflict with the C standard version selected.  You may also
205select an extended version of the C language explicitly with
206'-std=gnu90' (for C90 with GNU extensions), '-std=gnu99' (for C99 with
207GNU extensions) or '-std=gnu11' (for C11 with GNU extensions).
208
209 The default, if no C language dialect options are given, is
210'-std=gnu11'.
211
212 The ISO C standard defines (in clause 4) two classes of conforming
213implementation.  A "conforming hosted implementation" supports the whole
214standard including all the library facilities; a "conforming
215freestanding implementation" is only required to provide certain library
216facilities: those in '<float.h>', '<limits.h>', '<stdarg.h>', and
217'<stddef.h>'; since AMD1, also those in '<iso646.h>'; since C99, also
218those in '<stdbool.h>' and '<stdint.h>'; and since C11, also those in
219'<stdalign.h>' and '<stdnoreturn.h>'.  In addition, complex types, added
220in C99, are not required for freestanding implementations.
221
222 The standard also defines two environments for programs, a
223"freestanding environment", required of all implementations and which
224may not have library facilities beyond those required of freestanding
225implementations, where the handling of program startup and termination
226are implementation-defined; and a "hosted environment", which is not
227required, in which all the library facilities are provided and startup
228is through a function 'int main (void)' or 'int main (int, char *[])'.
229An OS kernel is an example of a program running in a freestanding
230environment; a program using the facilities of an operating system is an
231example of a program running in a hosted environment.
232
233 GCC aims towards being usable as a conforming freestanding
234implementation, or as the compiler for a conforming hosted
235implementation.  By default, it acts as the compiler for a hosted
236implementation, defining '__STDC_HOSTED__' as '1' and presuming that
237when the names of ISO C functions are used, they have the semantics
238defined in the standard.  To make it act as a conforming freestanding
239implementation for a freestanding environment, use the option
240'-ffreestanding'; it then defines '__STDC_HOSTED__' to '0' and does not
241make assumptions about the meanings of function names from the standard
242library, with exceptions noted below.  To build an OS kernel, you may
243well still need to make your own arrangements for linking and startup.
244*Note Options Controlling C Dialect: C Dialect Options.
245
246 GCC does not provide the library facilities required only of hosted
247implementations, nor yet all the facilities required by C99 of
248freestanding implementations on all platforms.  To use the facilities of
249a hosted environment, you need to find them elsewhere (for example, in
250the GNU C library).  *Note Standard Libraries: Standard Libraries.
251
252 Most of the compiler support routines used by GCC are present in
253'libgcc', but there are a few exceptions.  GCC requires the freestanding
254environment provide 'memcpy', 'memmove', 'memset' and 'memcmp'.
255Finally, if '__builtin_trap' is used, and the target does not implement
256the 'trap' pattern, then GCC emits a call to 'abort'.
257
258 For references to Technical Corrigenda, Rationale documents and
259information concerning the history of C that is available online, see
260<http://gcc.gnu.org/readings.html>
261
2622.2 C++ Language
263================
264
265GCC supports the original ISO C++ standard published in 1998, and the
2662011 and 2014 revisions.
267
268 The original ISO C++ standard was published as the ISO standard
269(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
2702003 (ISO/IEC 14882:2003).  These standards are referred to as C++98 and
271C++03, respectively.  GCC implements the majority of C++98 ('export' is
272a notable exception) and most of the changes in C++03.  To select this
273standard in GCC, use one of the options '-ansi', '-std=c++98', or
274'-std=c++03'; to obtain all the diagnostics required by the standard,
275you should also specify '-pedantic' (or '-pedantic-errors' if you want
276them to be errors rather than warnings).
277
278 A revised ISO C++ standard was published in 2011 as ISO/IEC 14882:2011,
279and is referred to as C++11; before its publication it was commonly
280referred to as C++0x.  C++11 contains several changes to the C++
281language, all of which have been implemented in GCC.  For details see
282<https://gcc.gnu.org/projects/cxx-status.html#cxx11>.  To select this
283standard in GCC, use the option '-std=c++11'.
284
285 Another revised ISO C++ standard was published in 2014 as ISO/IEC
28614882:2014, and is referred to as C++14; before its publication it was
287sometimes referred to as C++1y.  C++14 contains several further changes
288to the C++ language, all of which have been implemented in GCC.  For
289details see <https://gcc.gnu.org/projects/cxx-status.html#cxx14>.  To
290select this standard in GCC, use the option '-std=c++14'.
291
292 The C++ language was further revised in 2017 and ISO/IEC 14882:2017 was
293published.  This is referred to as C++17, and before publication was
294often referred to as C++1z.  GCC supports all the changes in the new
295specification.  For further details see
296<https://gcc.gnu.org/projects/cxx-status.html#cxx1z>.  Use the option
297'-std=c++17' to select this variant of C++.
298
299 More information about the C++ standards is available on the ISO C++
300committee's web site at <http://www.open-std.org/jtc1/sc22/wg21/>.
301
302 To obtain all the diagnostics required by any of the standard versions
303described above you should specify '-pedantic' or '-pedantic-errors',
304otherwise GCC will allow some non-ISO C++ features as extensions.  *Note
305Warning Options::.
306
307 By default, GCC also provides some additional extensions to the C++
308language that on rare occasions conflict with the C++ standard.  *Note
309Options Controlling C++ Dialect: C++ Dialect Options.  Use of the '-std'
310options listed above disables these extensions where they they conflict
311with the C++ standard version selected.  You may also select an extended
312version of the C++ language explicitly with '-std=gnu++98' (for C++98
313with GNU extensions), or '-std=gnu++11' (for C++11 with GNU extensions),
314or '-std=gnu++14' (for C++14 with GNU extensions), or '-std=gnu++17'
315(for C++17 with GNU extensions).
316
317 The default, if no C++ language dialect options are given, is
318'-std=gnu++14'.
319
3202.3 Objective-C and Objective-C++ Languages
321===========================================
322
323GCC supports "traditional" Objective-C (also known as "Objective-C 1.0")
324and contains support for the Objective-C exception and synchronization
325syntax.  It has also support for a number of "Objective-C 2.0" language
326extensions, including properties, fast enumeration (only for
327Objective-C), method attributes and the @optional and @required keywords
328in protocols.  GCC supports Objective-C++ and features available in
329Objective-C are also available in Objective-C++.
330
331 GCC by default uses the GNU Objective-C runtime library, which is part
332of GCC and is not the same as the Apple/NeXT Objective-C runtime library
333used on Apple systems.  There are a number of differences documented in
334this manual.  The options '-fgnu-runtime' and '-fnext-runtime' allow you
335to switch between producing output that works with the GNU Objective-C
336runtime library and output that works with the Apple/NeXT Objective-C
337runtime library.
338
339 There is no formal written standard for Objective-C or Objective-C++.
340The authoritative manual on traditional Objective-C (1.0) is
341"Object-Oriented Programming and the Objective-C Language":
342<http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf> is
343the original NeXTstep document.
344
345 The Objective-C exception and synchronization syntax (that is, the
346keywords '@try', '@throw', '@catch', '@finally' and '@synchronized') is
347supported by GCC and is enabled with the option '-fobjc-exceptions'.
348The syntax is briefly documented in this manual and in the Objective-C
3492.0 manuals from Apple.
350
351 The Objective-C 2.0 language extensions and features are automatically
352enabled; they include properties (via the '@property', '@synthesize' and
353'@dynamic keywords'), fast enumeration (not available in Objective-C++),
354attributes for methods (such as 'deprecated', 'noreturn', 'sentinel',
355'format'), the 'unused' attribute for method arguments, the '@package'
356keyword for instance variables and the '@optional' and '@required'
357keywords in protocols.  You can disable all these Objective-C 2.0
358language extensions with the option '-fobjc-std=objc1', which causes the
359compiler to recognize the same Objective-C language syntax recognized by
360GCC 4.0, and to produce an error if one of the new features is used.
361
362 GCC has currently no support for non-fragile instance variables.
363
364 The authoritative manual on Objective-C 2.0 is available from Apple:
365   *
366     <https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html>
367
368 For more information concerning the history of Objective-C that is
369available online, see <http://gcc.gnu.org/readings.html>
370
3712.4 Go Language
372===============
373
374As of the GCC 4.7.1 release, GCC supports the Go 1 language standard,
375described at <https://golang.org/doc/go1>.
376
3772.5 HSA Intermediate Language (HSAIL)
378=====================================
379
380GCC can compile the binary representation (BRIG) of the HSAIL text
381format as described in HSA Programmer's Reference Manual version 1.0.1.
382This capability is typically utilized to implement the HSA runtime API's
383HSAIL finalization extension for a gcc supported processor.  HSA
384standards are freely available at
385<http://www.hsafoundation.com/standards/>.
386
3872.6 References for Other Languages
388==================================
389
390*Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
391conformance and compatibility of the Ada compiler.
392
393 *Note Standards: (gfortran)Standards, for details of standards
394supported by GNU Fortran.
395
396
397File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
398
3993 GCC Command Options
400*********************
401
402When you invoke GCC, it normally does preprocessing, compilation,
403assembly and linking.  The "overall options" allow you to stop this
404process at an intermediate stage.  For example, the '-c' option says not
405to run the linker.  Then the output consists of object files output by
406the assembler.  *Note Options Controlling the Kind of Output: Overall
407Options.
408
409 Other options are passed on to one or more stages of processing.  Some
410options control the preprocessor and others the compiler itself.  Yet
411other options control the assembler and linker; most of these are not
412documented here, since you rarely need to use any of them.
413
414 Most of the command-line options that you can use with GCC are useful
415for C programs; when an option is only useful with another language
416(usually C++), the explanation says so explicitly.  If the description
417for a particular option does not mention a source language, you can use
418that option with all supported languages.
419
420 The usual way to run GCC is to run the executable called 'gcc', or
421'MACHINE-gcc' when cross-compiling, or 'MACHINE-gcc-VERSION' to run a
422specific version of GCC. When you compile C++ programs, you should
423invoke GCC as 'g++' instead.  *Note Compiling C++ Programs: Invoking
424G++, for information about the differences in behavior between 'gcc' and
425'g++' when compiling C++ programs.
426
427 The 'gcc' program accepts options and file names as operands.  Many
428options have multi-letter names; therefore multiple single-letter
429options may _not_ be grouped: '-dv' is very different from '-d -v'.
430
431 You can mix options and other arguments.  For the most part, the order
432you use doesn't matter.  Order does matter when you use several options
433of the same kind; for example, if you specify '-L' more than once, the
434directories are searched in the order specified.  Also, the placement of
435the '-l' option is significant.
436
437 Many options have long names starting with '-f' or with '-W'--for
438example, '-fmove-loop-invariants', '-Wformat' and so on.  Most of these
439have both positive and negative forms; the negative form of '-ffoo' is
440'-fno-foo'.  This manual documents only one of these two forms,
441whichever one is not the default.
442
443 *Note Option Index::, for an index to GCC's options.
444
445* Menu:
446
447* Option Summary::      Brief list of all options, without explanations.
448* Overall Options::     Controlling the kind of output:
449                        an executable, object files, assembler files,
450                        or preprocessed source.
451* Invoking G++::        Compiling C++ programs.
452* C Dialect Options::   Controlling the variant of C language compiled.
453* C++ Dialect Options:: Variations on C++.
454* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
455                        and Objective-C++.
456* Diagnostic Message Formatting Options:: Controlling how diagnostics should
457                        be formatted.
458* Warning Options::     How picky should the compiler be?
459* Debugging Options::   Producing debuggable code.
460* Optimize Options::    How much optimization?
461* Instrumentation Options:: Enabling profiling and extra run-time error checking.
462* Preprocessor Options:: Controlling header files and macro definitions.
463                         Also, getting dependency information for Make.
464* Assembler Options::   Passing options to the assembler.
465* Link Options::        Specifying libraries and so on.
466* Directory Options::   Where to find header files and libraries.
467                        Where to find the compiler executable files.
468* Code Gen Options::    Specifying conventions for function calls, data layout
469                        and register usage.
470* Developer Options::   Printing GCC configuration info, statistics, and
471                        debugging dumps.
472* Submodel Options::    Target-specific options, such as compiling for a
473                        specific processor variant.
474* Spec Files::          How to pass switches to sub-processes.
475* Environment Variables:: Env vars that affect GCC.
476* Precompiled Headers:: Compiling a header once, and using it many times.
477
478
479File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
480
4813.1 Option Summary
482==================
483
484Here is a summary of all the options, grouped by type.  Explanations are
485in the following sections.
486
487_Overall Options_
488     *Note Options Controlling the Kind of Output: Overall Options.
489          -c  -S  -E  -o FILE  -x LANGUAGE
490          -v  -###  --help[=CLASS[,...]]  --target-help  --version
491          -pass-exit-codes  -pipe  -specs=FILE  -wrapper
492          @FILE  -ffile-prefix-map=OLD=NEW
493          -fplugin=FILE  -fplugin-arg-NAME=ARG
494          -fdump-ada-spec[-slim]  -fada-spec-parent=UNIT  -fdump-go-spec=FILE
495
496_C Language Options_
497     *Note Options Controlling C Dialect: C Dialect Options.
498          -ansi  -std=STANDARD  -fgnu89-inline
499          -fpermitted-flt-eval-methods=STANDARD
500          -aux-info FILENAME  -fallow-parameterless-variadic-functions
501          -fno-asm  -fno-builtin  -fno-builtin-FUNCTION  -fgimple
502          -fhosted  -ffreestanding  -fopenacc  -fopenmp  -fopenmp-simd
503          -fms-extensions  -fplan9-extensions  -fsso-struct=ENDIANNESS
504          -fallow-single-precision  -fcond-mismatch  -flax-vector-conversions
505          -fsigned-bitfields  -fsigned-char
506          -funsigned-bitfields  -funsigned-char
507
508_C++ Language Options_
509     *Note Options Controlling C++ Dialect: C++ Dialect Options.
510          -fabi-version=N  -fno-access-control
511          -faligned-new=N  -fargs-in-order=N  -fcheck-new
512          -fconstexpr-depth=N  -fconstexpr-loop-limit=N
513          -ffriend-injection
514          -fno-elide-constructors
515          -fno-enforce-eh-specs
516          -ffor-scope  -fno-for-scope  -fno-gnu-keywords
517          -fno-implicit-templates
518          -fno-implicit-inline-templates
519          -fno-implement-inlines  -fms-extensions
520          -fnew-inheriting-ctors
521          -fnew-ttp-matching
522          -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names
523          -fno-optional-diags  -fpermissive
524          -fno-pretty-templates
525          -frepo  -fno-rtti  -fsized-deallocation
526          -ftemplate-backtrace-limit=N
527          -ftemplate-depth=N
528          -fno-threadsafe-statics  -fuse-cxa-atexit
529          -fno-weak  -nostdinc++
530          -fvisibility-inlines-hidden
531          -fvisibility-ms-compat
532          -fext-numeric-literals
533          -Wabi=N  -Wabi-tag  -Wconversion-null  -Wctor-dtor-privacy
534          -Wdelete-non-virtual-dtor  -Wliteral-suffix  -Wmultiple-inheritance
535          -Wnamespaces  -Wnarrowing
536          -Wnoexcept  -Wnoexcept-type  -Wclass-memaccess
537          -Wnon-virtual-dtor  -Wreorder  -Wregister
538          -Weffc++  -Wstrict-null-sentinel  -Wtemplates
539          -Wno-non-template-friend  -Wold-style-cast
540          -Woverloaded-virtual  -Wno-pmf-conversions
541          -Wsign-promo  -Wvirtual-inheritance
542
543_Objective-C and Objective-C++ Language Options_
544     *Note Options Controlling Objective-C and Objective-C++ Dialects:
545     Objective-C and Objective-C++ Dialect Options.
546          -fconstant-string-class=CLASS-NAME
547          -fgnu-runtime  -fnext-runtime
548          -fno-nil-receivers
549          -fobjc-abi-version=N
550          -fobjc-call-cxx-cdtors
551          -fobjc-direct-dispatch
552          -fobjc-exceptions
553          -fobjc-gc
554          -fobjc-nilcheck
555          -fobjc-std=objc1
556          -fno-local-ivars
557          -fivar-visibility=[public|protected|private|package]
558          -freplace-objc-classes
559          -fzero-link
560          -gen-decls
561          -Wassign-intercept
562          -Wno-protocol  -Wselector
563          -Wstrict-selector-match
564          -Wundeclared-selector
565
566_Diagnostic Message Formatting Options_
567     *Note Options to Control Diagnostic Messages Formatting: Diagnostic
568     Message Formatting Options.
569          -fmessage-length=N
570          -fdiagnostics-show-location=[once|every-line]
571          -fdiagnostics-color=[auto|never|always]
572          -fno-diagnostics-show-option  -fno-diagnostics-show-caret
573          -fdiagnostics-parseable-fixits  -fdiagnostics-generate-patch
574          -fdiagnostics-show-template-tree -fno-elide-type
575          -fno-show-column
576
577_Warning Options_
578     *Note Options to Request or Suppress Warnings: Warning Options.
579          -fsyntax-only  -fmax-errors=N  -Wpedantic
580          -pedantic-errors
581          -w  -Wextra  -Wall  -Waddress  -Waggregate-return  -Waligned-new
582          -Walloc-zero  -Walloc-size-larger-than=N
583          -Walloca  -Walloca-larger-than=N
584          -Wno-aggressive-loop-optimizations  -Warray-bounds  -Warray-bounds=N
585          -Wno-attributes  -Wbool-compare  -Wbool-operation
586          -Wno-builtin-declaration-mismatch
587          -Wno-builtin-macro-redefined  -Wc90-c99-compat  -Wc99-c11-compat
588          -Wc++-compat  -Wc++11-compat  -Wc++14-compat
589          -Wcast-align  -Wcast-align=strict  -Wcast-function-type  -Wcast-qual
590          -Wchar-subscripts  -Wchkp  -Wcatch-value  -Wcatch-value=N
591          -Wclobbered  -Wcomment  -Wconditionally-supported
592          -Wconversion  -Wcoverage-mismatch  -Wno-cpp  -Wdangling-else  -Wdate-time
593          -Wdelete-incomplete
594          -Wno-deprecated  -Wno-deprecated-declarations  -Wno-designated-init
595          -Wdisabled-optimization
596          -Wno-discarded-qualifiers  -Wno-discarded-array-qualifiers
597          -Wno-div-by-zero  -Wdouble-promotion
598          -Wduplicated-branches  -Wduplicated-cond
599          -Wempty-body  -Wenum-compare  -Wno-endif-labels  -Wexpansion-to-defined
600          -Werror  -Werror=*  -Wextra-semi  -Wfatal-errors
601          -Wfloat-equal  -Wformat  -Wformat=2
602          -Wno-format-contains-nul  -Wno-format-extra-args
603          -Wformat-nonliteral -Wformat-overflow=N
604          -Wformat-security  -Wformat-signedness  -Wformat-truncation=N
605          -Wformat-y2k  -Wframe-address
606          -Wframe-larger-than=LEN  -Wno-free-nonheap-object  -Wjump-misses-init
607          -Wif-not-aligned
608          -Wignored-qualifiers  -Wignored-attributes  -Wincompatible-pointer-types
609          -Wimplicit  -Wimplicit-fallthrough  -Wimplicit-fallthrough=N
610          -Wimplicit-function-declaration  -Wimplicit-int
611          -Winit-self  -Winline  -Wno-int-conversion  -Wint-in-bool-context
612          -Wno-int-to-pointer-cast  -Winvalid-memory-model  -Wno-invalid-offsetof
613          -Winvalid-pch  -Wlarger-than=LEN
614          -Wlogical-op  -Wlogical-not-parentheses  -Wlong-long
615          -Wmain  -Wmaybe-uninitialized  -Wmemset-elt-size  -Wmemset-transposed-args
616          -Wmisleading-indentation  -Wmissing-attributes -Wmissing-braces
617          -Wmissing-field-initializers  -Wmissing-include-dirs
618          -Wno-multichar  -Wmultistatement-macros  -Wnonnull  -Wnonnull-compare
619          -Wnormalized=[none|id|nfc|nfkc]
620          -Wnull-dereference  -Wodr  -Wno-overflow  -Wopenmp-simd
621          -Woverride-init-side-effects  -Woverlength-strings
622          -Wpacked  -Wpacked-bitfield-compat -Wpacked-not-aligned -Wpadded
623          -Wparentheses  -Wno-pedantic-ms-format
624          -Wplacement-new  -Wplacement-new=N
625          -Wpointer-arith  -Wpointer-compare  -Wno-pointer-to-int-cast
626          -Wno-pragmas  -Wredundant-decls  -Wrestrict  -Wno-return-local-addr
627          -Wreturn-type  -Wsequence-point  -Wshadow  -Wno-shadow-ivar
628          -Wshadow=global,  -Wshadow=local,  -Wshadow=compatible-local
629          -Wshift-overflow  -Wshift-overflow=N
630          -Wshift-count-negative  -Wshift-count-overflow  -Wshift-negative-value
631          -Wsign-compare  -Wsign-conversion  -Wfloat-conversion
632          -Wno-scalar-storage-order  -Wsizeof-pointer-div
633          -Wsizeof-pointer-memaccess  -Wsizeof-array-argument
634          -Wstack-protector  -Wstack-usage=LEN  -Wstrict-aliasing
635          -Wstrict-aliasing=n  -Wstrict-overflow  -Wstrict-overflow=N
636          -Wstringop-overflow=N -Wstringop-truncation
637          -Wsuggest-attribute=[pure|const|noreturn|format|malloc]
638          -Wsuggest-final-types   -Wsuggest-final-methods  -Wsuggest-override
639          -Wmissing-format-attribute  -Wsubobject-linkage
640          -Wswitch  -Wswitch-bool  -Wswitch-default  -Wswitch-enum
641          -Wswitch-unreachable  -Wsync-nand
642          -Wsystem-headers  -Wtautological-compare  -Wtrampolines  -Wtrigraphs
643          -Wtype-limits  -Wundef
644          -Wuninitialized  -Wunknown-pragmas
645          -Wunsuffixed-float-constants  -Wunused  -Wunused-function
646          -Wunused-label  -Wunused-local-typedefs  -Wunused-macros
647          -Wunused-parameter  -Wno-unused-result
648          -Wunused-value  -Wunused-variable
649          -Wunused-const-variable  -Wunused-const-variable=N
650          -Wunused-but-set-parameter  -Wunused-but-set-variable
651          -Wuseless-cast  -Wvariadic-macros  -Wvector-operation-performance
652          -Wvla  -Wvla-larger-than=N  -Wvolatile-register-var  -Wwrite-strings
653          -Wzero-as-null-pointer-constant  -Whsa
654
655_C and Objective-C-only Warning Options_
656          -Wbad-function-cast  -Wmissing-declarations
657          -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
658          -Wold-style-declaration  -Wold-style-definition
659          -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
660          -Wdeclaration-after-statement  -Wpointer-sign
661
662_Debugging Options_
663     *Note Options for Debugging Your Program: Debugging Options.
664          -g  -gLEVEL  -gdwarf  -gdwarf-VERSION
665          -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches
666          -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf
667          -gas-loc-support  -gno-as-loc-support
668          -gas-locview-support  -gno-as-locview-support
669          -gcolumn-info  -gno-column-info
670          -gstatement-frontiers  -gno-statement-frontiers
671          -gvariable-location-views  -gno-variable-location-views
672          -ginternal-reset-location-views  -gno-internal-reset-location-views
673          -ginline-points  -gno-inline-points
674          -gvms  -gxcoff  -gxcoff+  -gz[=TYPE]
675          -fdebug-prefix-map=OLD=NEW  -fdebug-types-section
676          -fno-eliminate-unused-debug-types
677          -femit-struct-debug-baseonly  -femit-struct-debug-reduced
678          -femit-struct-debug-detailed[=SPEC-LIST]
679          -feliminate-unused-debug-symbols  -femit-class-debug-always
680          -fno-merge-debug-strings  -fno-dwarf2-cfi-asm
681          -fvar-tracking  -fvar-tracking-assignments
682
683_Optimization Options_
684     *Note Options that Control Optimization: Optimize Options.
685          -faggressive-loop-optimizations  -falign-functions[=N]
686          -falign-jumps[=N]
687          -falign-labels[=N]  -falign-loops[=N]
688          -fassociative-math  -fauto-profile  -fauto-profile[=PATH]
689          -fauto-inc-dec  -fbranch-probabilities
690          -fbranch-target-load-optimize  -fbranch-target-load-optimize2
691          -fbtr-bb-exclusive  -fcaller-saves
692          -fcombine-stack-adjustments  -fconserve-stack
693          -fcompare-elim  -fcprop-registers  -fcrossjumping
694          -fcse-follow-jumps  -fcse-skip-blocks  -fcx-fortran-rules
695          -fcx-limited-range
696          -fdata-sections  -fdce  -fdelayed-branch
697          -fdelete-null-pointer-checks  -fdevirtualize  -fdevirtualize-speculatively
698          -fdevirtualize-at-ltrans  -fdse
699          -fearly-inlining  -fipa-sra  -fexpensive-optimizations  -ffat-lto-objects
700          -ffast-math  -ffinite-math-only  -ffloat-store  -fexcess-precision=STYLE
701          -fforward-propagate  -ffp-contract=STYLE  -ffunction-sections
702          -fgcse  -fgcse-after-reload  -fgcse-las  -fgcse-lm  -fgraphite-identity
703          -fgcse-sm  -fhoist-adjacent-loads  -fif-conversion
704          -fif-conversion2  -findirect-inlining
705          -finline-functions  -finline-functions-called-once  -finline-limit=N
706          -finline-small-functions  -fipa-cp  -fipa-cp-clone
707          -fipa-bit-cp -fipa-vrp
708          -fipa-pta  -fipa-profile  -fipa-pure-const  -fipa-reference  -fipa-icf
709          -fira-algorithm=ALGORITHM
710          -fira-region=REGION  -fira-hoist-pressure
711          -fira-loop-pressure  -fno-ira-share-save-slots
712          -fno-ira-share-spill-slots
713          -fisolate-erroneous-paths-dereference  -fisolate-erroneous-paths-attribute
714          -fivopts  -fkeep-inline-functions  -fkeep-static-functions
715          -fkeep-static-consts  -flimit-function-alignment  -flive-range-shrinkage
716          -floop-block  -floop-interchange  -floop-strip-mine
717          -floop-unroll-and-jam  -floop-nest-optimize
718          -floop-parallelize-all  -flra-remat  -flto  -flto-compression-level
719          -flto-partition=ALG  -fmerge-all-constants
720          -fmerge-constants  -fmodulo-sched  -fmodulo-sched-allow-regmoves
721          -fmove-loop-invariants  -fno-branch-count-reg
722          -fno-defer-pop  -fno-fp-int-builtin-inexact  -fno-function-cse
723          -fno-guess-branch-probability  -fno-inline  -fno-math-errno  -fno-peephole
724          -fno-peephole2  -fno-printf-return-value  -fno-sched-interblock
725          -fno-sched-spec  -fno-signed-zeros
726          -fno-toplevel-reorder  -fno-trapping-math  -fno-zero-initialized-in-bss
727          -fomit-frame-pointer  -foptimize-sibling-calls
728          -fpartial-inlining  -fpeel-loops  -fpredictive-commoning
729          -fprefetch-loop-arrays
730          -fprofile-correction
731          -fprofile-use  -fprofile-use=PATH  -fprofile-values
732          -fprofile-reorder-functions
733          -freciprocal-math  -free  -frename-registers  -freorder-blocks
734          -freorder-blocks-algorithm=ALGORITHM
735          -freorder-blocks-and-partition  -freorder-functions
736          -frerun-cse-after-loop  -freschedule-modulo-scheduled-loops
737          -frounding-math  -fsched2-use-superblocks  -fsched-pressure
738          -fsched-spec-load  -fsched-spec-load-dangerous
739          -fsched-stalled-insns-dep[=N]  -fsched-stalled-insns[=N]
740          -fsched-group-heuristic  -fsched-critical-path-heuristic
741          -fsched-spec-insn-heuristic  -fsched-rank-heuristic
742          -fsched-last-insn-heuristic  -fsched-dep-count-heuristic
743          -fschedule-fusion
744          -fschedule-insns  -fschedule-insns2  -fsection-anchors
745          -fselective-scheduling  -fselective-scheduling2
746          -fsel-sched-pipelining  -fsel-sched-pipelining-outer-loops
747          -fsemantic-interposition  -fshrink-wrap  -fshrink-wrap-separate
748          -fsignaling-nans
749          -fsingle-precision-constant  -fsplit-ivs-in-unroller  -fsplit-loops
750          -fsplit-paths
751          -fsplit-wide-types  -fssa-backprop  -fssa-phiopt
752          -fstdarg-opt  -fstore-merging  -fstrict-aliasing
753          -fthread-jumps  -ftracer  -ftree-bit-ccp
754          -ftree-builtin-call-dce  -ftree-ccp  -ftree-ch
755          -ftree-coalesce-vars  -ftree-copy-prop  -ftree-dce  -ftree-dominator-opts
756          -ftree-dse  -ftree-forwprop  -ftree-fre  -fcode-hoisting
757          -ftree-loop-if-convert  -ftree-loop-im
758          -ftree-phiprop  -ftree-loop-distribution  -ftree-loop-distribute-patterns
759          -ftree-loop-ivcanon  -ftree-loop-linear  -ftree-loop-optimize
760          -ftree-loop-vectorize
761          -ftree-parallelize-loops=N  -ftree-pre  -ftree-partial-pre  -ftree-pta
762          -ftree-reassoc  -ftree-sink  -ftree-slsr  -ftree-sra
763          -ftree-switch-conversion  -ftree-tail-merge
764          -ftree-ter  -ftree-vectorize  -ftree-vrp  -funconstrained-commons
765          -funit-at-a-time  -funroll-all-loops  -funroll-loops
766          -funsafe-math-optimizations  -funswitch-loops
767          -fipa-ra  -fvariable-expansion-in-unroller  -fvect-cost-model  -fvpt
768          -fweb  -fwhole-program  -fwpa  -fuse-linker-plugin
769          --param NAME=VALUE
770          -O  -O0  -O1  -O2  -O3  -Os  -Ofast  -Og
771
772_Program Instrumentation Options_
773     *Note Program Instrumentation Options: Instrumentation Options.
774          -p  -pg  -fprofile-arcs  --coverage  -ftest-coverage
775          -fprofile-abs-path
776          -fprofile-dir=PATH  -fprofile-generate  -fprofile-generate=PATH
777          -fsanitize=STYLE  -fsanitize-recover  -fsanitize-recover=STYLE
778          -fasan-shadow-offset=NUMBER  -fsanitize-sections=S1,S2,...
779          -fsanitize-undefined-trap-on-error  -fbounds-check
780          -fcheck-pointer-bounds  -fchkp-check-incomplete-type
781          -fchkp-first-field-has-own-bounds  -fchkp-narrow-bounds
782          -fchkp-narrow-to-innermost-array  -fchkp-optimize
783          -fchkp-use-fast-string-functions  -fchkp-use-nochk-string-functions
784          -fchkp-use-static-bounds  -fchkp-use-static-const-bounds
785          -fchkp-treat-zero-dynamic-size-as-infinite  -fchkp-check-read
786          -fchkp-check-read  -fchkp-check-write  -fchkp-store-bounds
787          -fchkp-instrument-calls  -fchkp-instrument-marked-only
788          -fchkp-use-wrappers  -fchkp-flexible-struct-trailing-arrays
789          -fcf-protection=[full|branch|return|none]
790          -fstack-protector  -fstack-protector-all  -fstack-protector-strong
791          -fstack-protector-explicit  -fstack-check
792          -fstack-limit-register=REG  -fstack-limit-symbol=SYM
793          -fno-stack-limit  -fsplit-stack
794          -fvtable-verify=[std|preinit|none]
795          -fvtv-counts  -fvtv-debug
796          -finstrument-functions
797          -finstrument-functions-exclude-function-list=SYM,SYM,...
798          -finstrument-functions-exclude-file-list=FILE,FILE,...
799
800_Preprocessor Options_
801     *Note Options Controlling the Preprocessor: Preprocessor Options.
802          -AQUESTION=ANSWER
803          -A-QUESTION[=ANSWER]
804          -C  -CC  -DMACRO[=DEFN]
805          -dD  -dI  -dM  -dN  -dU
806          -fdebug-cpp  -fdirectives-only  -fdollars-in-identifiers
807          -fexec-charset=CHARSET  -fextended-identifiers
808          -finput-charset=CHARSET -fmacro-prefix-map=OLD=NEW
809          -fno-canonical-system-headers  -fpch-deps  -fpch-preprocess
810          -fpreprocessed -ftabstop=WIDTH  -ftrack-macro-expansion
811          -fwide-exec-charset=CHARSET  -fworking-directory
812          -H  -imacros FILE  -include FILE
813          -M  -MD  -MF  -MG  -MM  -MMD  -MP  -MQ  -MT
814          -no-integrated-cpp  -P  -pthread  -remap
815          -traditional  -traditional-cpp  -trigraphs
816          -UMACRO  -undef
817          -Wp,OPTION  -Xpreprocessor OPTION
818
819_Assembler Options_
820     *Note Passing Options to the Assembler: Assembler Options.
821          -Wa,OPTION  -Xassembler OPTION
822
823_Linker Options_
824     *Note Options for Linking: Link Options.
825          OBJECT-FILE-NAME  -fuse-ld=LINKER  -lLIBRARY
826          -nostartfiles  -nodefaultlibs  -nostdlib  -pie  -pthread  -rdynamic
827          -s  -static -static-pie -static-libgcc  -static-libstdc++
828          -static-libasan  -static-libtsan  -static-liblsan  -static-libubsan
829          -static-libmpx  -static-libmpxwrappers
830          -shared  -shared-libgcc  -symbolic
831          -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
832          -u SYMBOL  -z KEYWORD
833
834_Directory Options_
835     *Note Options for Directory Search: Directory Options.
836          -BPREFIX  -IDIR  -I-
837          -idirafter DIR
838          -imacros FILE  -imultilib DIR
839          -iplugindir=DIR  -iprefix FILE
840          -iquote DIR  -isysroot DIR  -isystem DIR
841          -iwithprefix DIR  -iwithprefixbefore DIR
842          -LDIR  -no-canonical-prefixes  --no-sysroot-suffix
843          -nostdinc  -nostdinc++  --sysroot=DIR
844
845_Code Generation Options_
846     *Note Options for Code Generation Conventions: Code Gen Options.
847          -fcall-saved-REG  -fcall-used-REG
848          -ffixed-REG  -fexceptions
849          -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables
850          -fasynchronous-unwind-tables
851          -fno-gnu-unique
852          -finhibit-size-directive  -fno-common  -fno-ident
853          -fpcc-struct-return  -fpic  -fPIC  -fpie  -fPIE  -fno-plt
854          -fno-jump-tables
855          -frecord-gcc-switches
856          -freg-struct-return  -fshort-enums  -fshort-wchar
857          -fverbose-asm  -fpack-struct[=N]
858          -fleading-underscore  -ftls-model=MODEL
859          -fstack-reuse=REUSE_LEVEL
860          -ftrampolines  -ftrapv  -fwrapv
861          -fvisibility=[default|internal|hidden|protected]
862          -fstrict-volatile-bitfields  -fsync-libcalls
863
864_Developer Options_
865     *Note GCC Developer Options: Developer Options.
866          -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
867          -dumpfullversion  -fchecking  -fchecking=N  -fdbg-cnt-list
868          -fdbg-cnt=COUNTER-VALUE-LIST
869          -fdisable-ipa-PASS_NAME
870          -fdisable-rtl-PASS_NAME
871          -fdisable-rtl-PASS-NAME=RANGE-LIST
872          -fdisable-tree-PASS_NAME
873          -fdisable-tree-PASS-NAME=RANGE-LIST
874          -fdump-noaddr  -fdump-unnumbered  -fdump-unnumbered-links
875          -fdump-final-insns[=FILE]
876          -fdump-ipa-all  -fdump-ipa-cgraph  -fdump-ipa-inline
877          -fdump-lang-all
878          -fdump-lang-SWITCH
879          -fdump-lang-SWITCH-OPTIONS
880          -fdump-lang-SWITCH-OPTIONS=FILENAME
881          -fdump-passes
882          -fdump-rtl-PASS  -fdump-rtl-PASS=FILENAME
883          -fdump-statistics
884          -fdump-tree-all
885          -fdump-tree-SWITCH
886          -fdump-tree-SWITCH-OPTIONS
887          -fdump-tree-SWITCH-OPTIONS=FILENAME
888          -fcompare-debug[=OPTS]  -fcompare-debug-second
889          -fenable-KIND-PASS
890          -fenable-KIND-PASS=RANGE-LIST
891          -fira-verbose=N
892          -flto-report  -flto-report-wpa  -fmem-report-wpa
893          -fmem-report  -fpre-ipa-mem-report  -fpost-ipa-mem-report
894          -fopt-info  -fopt-info-OPTIONS[=FILE]
895          -fprofile-report
896          -frandom-seed=STRING  -fsched-verbose=N
897          -fsel-sched-verbose  -fsel-sched-dump-cfg  -fsel-sched-pipelining-verbose
898          -fstats  -fstack-usage  -ftime-report  -ftime-report-details
899          -fvar-tracking-assignments-toggle  -gtoggle
900          -print-file-name=LIBRARY  -print-libgcc-file-name
901          -print-multi-directory  -print-multi-lib  -print-multi-os-directory
902          -print-prog-name=PROGRAM  -print-search-dirs  -Q
903          -print-sysroot  -print-sysroot-headers-suffix
904          -save-temps  -save-temps=cwd  -save-temps=obj  -time[=FILE]
905
906_Machine-Dependent Options_
907     *Note Machine-Dependent Options: Submodel Options.
908
909     _AArch64 Options_
910          -mabi=NAME  -mbig-endian  -mlittle-endian
911          -mgeneral-regs-only
912          -mcmodel=tiny  -mcmodel=small  -mcmodel=large
913          -mstrict-align
914          -momit-leaf-frame-pointer
915          -mtls-dialect=desc  -mtls-dialect=traditional
916          -mtls-size=SIZE
917          -mfix-cortex-a53-835769  -mfix-cortex-a53-843419
918          -mlow-precision-recip-sqrt  -mlow-precision-sqrt  -mlow-precision-div
919          -mpc-relative-literal-loads
920          -msign-return-address=SCOPE
921          -march=NAME  -mcpu=NAME  -mtune=NAME
922          -moverride=STRING  -mverbose-cost-dump
923
924     _Adapteva Epiphany Options_
925          -mhalf-reg-file  -mprefer-short-insn-regs
926          -mbranch-cost=NUM  -mcmove  -mnops=NUM  -msoft-cmpsf
927          -msplit-lohi  -mpost-inc  -mpost-modify  -mstack-offset=NUM
928          -mround-nearest  -mlong-calls  -mshort-calls  -msmall16
929          -mfp-mode=MODE  -mvect-double  -max-vect-align=NUM
930          -msplit-vecmove-early  -m1reg-REG
931
932     _ARC Options_
933          -mbarrel-shifter -mjli-always
934          -mcpu=CPU  -mA6  -mARC600  -mA7  -mARC700
935          -mdpfp  -mdpfp-compact  -mdpfp-fast  -mno-dpfp-lrsr
936          -mea  -mno-mpy  -mmul32x16  -mmul64  -matomic
937          -mnorm  -mspfp  -mspfp-compact  -mspfp-fast  -msimd  -msoft-float  -mswap
938          -mcrc  -mdsp-packa  -mdvbf  -mlock  -mmac-d16  -mmac-24  -mrtsc  -mswape
939          -mtelephony  -mxy  -misize  -mannotate-align  -marclinux  -marclinux_prof
940          -mlong-calls  -mmedium-calls  -msdata -mirq-ctrl-saved
941          -mrgf-banked-regs -mlpc-width=WIDTH -G NUM
942          -mvolatile-cache  -mtp-regno=REGNO
943          -malign-call  -mauto-modify-reg  -mbbit-peephole  -mno-brcc
944          -mcase-vector-pcrel  -mcompact-casesi  -mno-cond-exec  -mearly-cbranchsi
945          -mexpand-adddi  -mindexed-loads  -mlra  -mlra-priority-none
946          -mlra-priority-compact mlra-priority-noncompact  -mno-millicode
947          -mmixed-code  -mq-class  -mRcq  -mRcw  -msize-level=LEVEL
948          -mtune=CPU  -mmultcost=NUM
949          -munalign-prob-threshold=PROBABILITY  -mmpy-option=MULTO
950          -mdiv-rem  -mcode-density  -mll64  -mfpu=FPU -mrf16
951
952     _ARM Options_
953          -mapcs-frame  -mno-apcs-frame
954          -mabi=NAME
955          -mapcs-stack-check  -mno-apcs-stack-check
956          -mapcs-reentrant  -mno-apcs-reentrant
957          -msched-prolog  -mno-sched-prolog
958          -mlittle-endian  -mbig-endian
959          -mbe8 -mbe32
960          -mfloat-abi=NAME
961          -mfp16-format=NAME
962          -mthumb-interwork  -mno-thumb-interwork
963          -mcpu=NAME  -march=NAME  -mfpu=NAME
964          -mtune=NAME  -mprint-tune-info
965          -mstructure-size-boundary=N
966          -mabort-on-noreturn
967          -mlong-calls  -mno-long-calls
968          -msingle-pic-base  -mno-single-pic-base
969          -mpic-register=REG
970          -mnop-fun-dllimport
971          -mpoke-function-name
972          -mthumb  -marm  -mflip-thumb
973          -mtpcs-frame  -mtpcs-leaf-frame
974          -mcaller-super-interworking  -mcallee-super-interworking
975          -mtp=NAME  -mtls-dialect=DIALECT
976          -mword-relocations
977          -mfix-cortex-m3-ldrd
978          -munaligned-access
979          -mneon-for-64bits
980          -mslow-flash-data
981          -masm-syntax-unified
982          -mrestrict-it
983          -mverbose-cost-dump
984          -mpure-code
985          -mcmse
986
987     _AVR Options_
988          -mmcu=MCU  -mabsdata  -maccumulate-args
989          -mbranch-cost=COST
990          -mcall-prologues  -mgas-isr-prologues  -mint8
991          -mn_flash=SIZE  -mno-interrupts
992          -mmain-is-OS_task -mrelax  -mrmw  -mstrict-X  -mtiny-stack
993          -mfract-convert-truncate
994          -mshort-calls -nodevicelib  -nodevicespecs
995          -Waddr-space-convert  -Wmisspelled-isr
996
997     _Blackfin Options_
998          -mcpu=CPU[-SIREVISION]
999          -msim  -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
1000          -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
1001          -mlow-64k  -mno-low64k  -mstack-check-l1  -mid-shared-library
1002          -mno-id-shared-library  -mshared-library-id=N
1003          -mleaf-id-shared-library  -mno-leaf-id-shared-library
1004          -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
1005          -mfast-fp  -minline-plt  -mmulticore  -mcorea  -mcoreb  -msdram
1006          -micplb
1007
1008     _C6X Options_
1009          -mbig-endian  -mlittle-endian  -march=CPU
1010          -msim  -msdata=SDATA-TYPE
1011
1012     _CRIS Options_
1013          -mcpu=CPU  -march=CPU  -mtune=CPU
1014          -mmax-stack-frame=N  -melinux-stacksize=N
1015          -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
1016          -mstack-align  -mdata-align  -mconst-align
1017          -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
1018          -melf  -maout  -melinux  -mlinux  -sim  -sim2
1019          -mmul-bug-workaround  -mno-mul-bug-workaround
1020
1021     _CR16 Options_
1022          -mmac
1023          -mcr16cplus  -mcr16c
1024          -msim  -mint32  -mbit-ops
1025          -mdata-model=MODEL
1026
1027     _Darwin Options_
1028          -all_load  -allowable_client  -arch  -arch_errors_fatal
1029          -arch_only  -bind_at_load  -bundle  -bundle_loader
1030          -client_name  -compatibility_version  -current_version
1031          -dead_strip
1032          -dependency-file  -dylib_file  -dylinker_install_name
1033          -dynamic  -dynamiclib  -exported_symbols_list
1034          -filelist  -flat_namespace  -force_cpusubtype_ALL
1035          -force_flat_namespace  -headerpad_max_install_names
1036          -iframework
1037          -image_base  -init  -install_name  -keep_private_externs
1038          -multi_module  -multiply_defined  -multiply_defined_unused
1039          -noall_load   -no_dead_strip_inits_and_terms
1040          -nofixprebinding  -nomultidefs  -noprebind  -noseglinkedit
1041          -pagezero_size  -prebind  -prebind_all_twolevel_modules
1042          -private_bundle  -read_only_relocs  -sectalign
1043          -sectobjectsymbols  -whyload  -seg1addr
1044          -sectcreate  -sectobjectsymbols  -sectorder
1045          -segaddr  -segs_read_only_addr  -segs_read_write_addr
1046          -seg_addr_table  -seg_addr_table_filename  -seglinkedit
1047          -segprot  -segs_read_only_addr  -segs_read_write_addr
1048          -single_module  -static  -sub_library  -sub_umbrella
1049          -twolevel_namespace  -umbrella  -undefined
1050          -unexported_symbols_list  -weak_reference_mismatches
1051          -whatsloaded  -F  -gused  -gfull  -mmacosx-version-min=VERSION
1052          -mkernel  -mone-byte-bool
1053
1054     _DEC Alpha Options_
1055          -mno-fp-regs  -msoft-float
1056          -mieee  -mieee-with-inexact  -mieee-conformant
1057          -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
1058          -mtrap-precision=MODE  -mbuild-constants
1059          -mcpu=CPU-TYPE  -mtune=CPU-TYPE
1060          -mbwx  -mmax  -mfix  -mcix
1061          -mfloat-vax  -mfloat-ieee
1062          -mexplicit-relocs  -msmall-data  -mlarge-data
1063          -msmall-text  -mlarge-text
1064          -mmemory-latency=TIME
1065
1066     _FR30 Options_
1067          -msmall-model  -mno-lsim
1068
1069     _FT32 Options_
1070          -msim  -mlra  -mnodiv  -mft32b  -mcompress  -mnopm
1071
1072     _FRV Options_
1073          -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
1074          -mhard-float  -msoft-float
1075          -malloc-cc  -mfixed-cc  -mdword  -mno-dword
1076          -mdouble  -mno-double
1077          -mmedia  -mno-media  -mmuladd  -mno-muladd
1078          -mfdpic  -minline-plt  -mgprel-ro  -multilib-library-pic
1079          -mlinked-fp  -mlong-calls  -malign-labels
1080          -mlibrary-pic  -macc-4  -macc-8
1081          -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
1082          -moptimize-membar  -mno-optimize-membar
1083          -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
1084          -mvliw-branch  -mno-vliw-branch
1085          -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
1086          -mno-nested-cond-exec  -mtomcat-stats
1087          -mTLS  -mtls
1088          -mcpu=CPU
1089
1090     _GNU/Linux Options_
1091          -mglibc  -muclibc  -mmusl  -mbionic  -mandroid
1092          -tno-android-cc  -tno-android-ld
1093
1094     _H8/300 Options_
1095          -mrelax  -mh  -ms  -mn  -mexr  -mno-exr  -mint32  -malign-300
1096
1097     _HPPA Options_
1098          -march=ARCHITECTURE-TYPE
1099          -mcaller-copies  -mdisable-fpregs  -mdisable-indexing
1100          -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
1101          -mfixed-range=REGISTER-RANGE
1102          -mjump-in-delay  -mlinker-opt  -mlong-calls
1103          -mlong-load-store  -mno-disable-fpregs
1104          -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
1105          -mno-jump-in-delay  -mno-long-load-store
1106          -mno-portable-runtime  -mno-soft-float
1107          -mno-space-regs  -msoft-float  -mpa-risc-1-0
1108          -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
1109          -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
1110          -munix=UNIX-STD  -nolibdld  -static  -threads
1111
1112     _IA-64 Options_
1113          -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
1114          -mvolatile-asm-stop  -mregister-names  -msdata  -mno-sdata
1115          -mconstant-gp  -mauto-pic  -mfused-madd
1116          -minline-float-divide-min-latency
1117          -minline-float-divide-max-throughput
1118          -mno-inline-float-divide
1119          -minline-int-divide-min-latency
1120          -minline-int-divide-max-throughput
1121          -mno-inline-int-divide
1122          -minline-sqrt-min-latency  -minline-sqrt-max-throughput
1123          -mno-inline-sqrt
1124          -mdwarf2-asm  -mearly-stop-bits
1125          -mfixed-range=REGISTER-RANGE  -mtls-size=TLS-SIZE
1126          -mtune=CPU-TYPE  -milp32  -mlp64
1127          -msched-br-data-spec  -msched-ar-data-spec  -msched-control-spec
1128          -msched-br-in-data-spec  -msched-ar-in-data-spec  -msched-in-control-spec
1129          -msched-spec-ldc  -msched-spec-control-ldc
1130          -msched-prefer-non-data-spec-insns  -msched-prefer-non-control-spec-insns
1131          -msched-stop-bits-after-every-cycle  -msched-count-spec-in-critical-path
1132          -msel-sched-dont-check-control-spec  -msched-fp-mem-deps-zero-cost
1133          -msched-max-memory-insns-hard-limit  -msched-max-memory-insns=MAX-INSNS
1134
1135     _LM32 Options_
1136          -mbarrel-shift-enabled  -mdivide-enabled  -mmultiply-enabled
1137          -msign-extend-enabled  -muser-enabled
1138
1139     _M32R/D Options_
1140          -m32r2  -m32rx  -m32r
1141          -mdebug
1142          -malign-loops  -mno-align-loops
1143          -missue-rate=NUMBER
1144          -mbranch-cost=NUMBER
1145          -mmodel=CODE-SIZE-MODEL-TYPE
1146          -msdata=SDATA-TYPE
1147          -mno-flush-func  -mflush-func=NAME
1148          -mno-flush-trap  -mflush-trap=NUMBER
1149          -G NUM
1150
1151     _M32C Options_
1152          -mcpu=CPU  -msim  -memregs=NUMBER
1153
1154     _M680x0 Options_
1155          -march=ARCH  -mcpu=CPU  -mtune=TUNE
1156          -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
1157          -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
1158          -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
1159          -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
1160          -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
1161          -malign-int  -mstrict-align  -msep-data  -mno-sep-data
1162          -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
1163          -mxgot  -mno-xgot  -mlong-jump-table-offsets
1164
1165     _MCore Options_
1166          -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
1167          -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
1168          -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
1169          -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
1170          -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
1171
1172     _MeP Options_
1173          -mabsdiff  -mall-opts  -maverage  -mbased=N  -mbitops
1174          -mc=N  -mclip  -mconfig=NAME  -mcop  -mcop32  -mcop64  -mivc2
1175          -mdc  -mdiv  -meb  -mel  -mio-volatile  -ml  -mleadz  -mm  -mminmax
1176          -mmult  -mno-opts  -mrepeat  -ms  -msatur  -msdram  -msim  -msimnovec  -mtf
1177          -mtiny=N
1178
1179     _MicroBlaze Options_
1180          -msoft-float  -mhard-float  -msmall-divides  -mcpu=CPU
1181          -mmemcpy  -mxl-soft-mul  -mxl-soft-div  -mxl-barrel-shift
1182          -mxl-pattern-compare  -mxl-stack-check  -mxl-gp-opt  -mno-clearbss
1183          -mxl-multiply-high  -mxl-float-convert  -mxl-float-sqrt
1184          -mbig-endian  -mlittle-endian  -mxl-reorder  -mxl-mode-APP-MODEL
1185
1186     _MIPS Options_
1187          -EL  -EB  -march=ARCH  -mtune=ARCH
1188          -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5
1189          -mips32r6  -mips64  -mips64r2  -mips64r3  -mips64r5  -mips64r6
1190          -mips16  -mno-mips16  -mflip-mips16
1191          -minterlink-compressed  -mno-interlink-compressed
1192          -minterlink-mips16  -mno-interlink-mips16
1193          -mabi=ABI  -mabicalls  -mno-abicalls
1194          -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
1195          -mgp32  -mgp64  -mfp32  -mfpxx  -mfp64  -mhard-float  -msoft-float
1196          -mno-float  -msingle-float  -mdouble-float
1197          -modd-spreg  -mno-odd-spreg
1198          -mabs=MODE  -mnan=ENCODING
1199          -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
1200          -mmcu  -mmno-mcu
1201          -meva  -mno-eva
1202          -mvirt  -mno-virt
1203          -mxpa  -mno-xpa
1204          -mmicromips  -mno-micromips
1205          -mmsa  -mno-msa
1206          -mfpu=FPU-TYPE
1207          -msmartmips  -mno-smartmips
1208          -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
1209          -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
1210          -mlong64  -mlong32  -msym32  -mno-sym32
1211          -GNUM  -mlocal-sdata  -mno-local-sdata
1212          -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
1213          -membedded-data  -mno-embedded-data
1214          -muninit-const-in-rodata  -mno-uninit-const-in-rodata
1215          -mcode-readable=SETTING
1216          -msplit-addresses  -mno-split-addresses
1217          -mexplicit-relocs  -mno-explicit-relocs
1218          -mcheck-zero-division  -mno-check-zero-division
1219          -mdivide-traps  -mdivide-breaks
1220          -mload-store-pairs  -mno-load-store-pairs
1221          -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
1222          -mmad  -mno-mad  -mimadd  -mno-imadd  -mfused-madd  -mno-fused-madd  -nocpp
1223          -mfix-24k  -mno-fix-24k
1224          -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
1225          -mfix-r10000  -mno-fix-r10000  -mfix-rm7000  -mno-fix-rm7000
1226          -mfix-vr4120  -mno-fix-vr4120
1227          -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
1228          -mflush-func=FUNC  -mno-flush-func
1229          -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
1230          -mcompact-branches=POLICY
1231          -mfp-exceptions  -mno-fp-exceptions
1232          -mvr4130-align  -mno-vr4130-align  -msynci  -mno-synci
1233          -mlxc1-sxc1 -mno-lxc1-sxc1 -mmadd4 -mno-madd4
1234          -mrelax-pic-calls  -mno-relax-pic-calls  -mmcount-ra-address
1235          -mframe-header-opt  -mno-frame-header-opt
1236
1237     _MMIX Options_
1238          -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
1239          -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
1240          -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
1241          -mno-base-addresses  -msingle-exit  -mno-single-exit
1242
1243     _MN10300 Options_
1244          -mmult-bug  -mno-mult-bug
1245          -mno-am33  -mam33  -mam33-2  -mam34
1246          -mtune=CPU-TYPE
1247          -mreturn-pointer-on-d0
1248          -mno-crt0  -mrelax  -mliw  -msetlb
1249
1250     _Moxie Options_
1251          -meb  -mel  -mmul.x  -mno-crt0
1252
1253     _MSP430 Options_
1254          -msim  -masm-hex  -mmcu=  -mcpu=  -mlarge  -msmall  -mrelax
1255          -mwarn-mcu
1256          -mcode-region=  -mdata-region=
1257          -msilicon-errata=  -msilicon-errata-warn=
1258          -mhwmult=  -minrt
1259
1260     _NDS32 Options_
1261          -mbig-endian  -mlittle-endian
1262          -mreduced-regs  -mfull-regs
1263          -mcmov  -mno-cmov
1264          -mext-perf  -mno-ext-perf
1265          -mext-perf2  -mno-ext-perf2
1266          -mext-string  -mno-ext-string
1267          -mv3push  -mno-v3push
1268          -m16bit  -mno-16bit
1269          -misr-vector-size=NUM
1270          -mcache-block-size=NUM
1271          -march=ARCH
1272          -mcmodel=CODE-MODEL
1273          -mctor-dtor  -mrelax
1274
1275     _Nios II Options_
1276          -G NUM  -mgpopt=OPTION  -mgpopt  -mno-gpopt
1277          -mgprel-sec=REGEXP -mr0rel-sec=REGEXP
1278          -mel  -meb
1279          -mno-bypass-cache  -mbypass-cache
1280          -mno-cache-volatile  -mcache-volatile
1281          -mno-fast-sw-div  -mfast-sw-div
1282          -mhw-mul  -mno-hw-mul  -mhw-mulx  -mno-hw-mulx  -mno-hw-div  -mhw-div
1283          -mcustom-INSN=N  -mno-custom-INSN
1284          -mcustom-fpu-cfg=NAME
1285          -mhal  -msmallc  -msys-crt0=NAME  -msys-lib=NAME
1286          -march=ARCH  -mbmx  -mno-bmx  -mcdx  -mno-cdx
1287
1288     _Nvidia PTX Options_
1289          -m32  -m64  -mmainkernel  -moptimize
1290
1291     _PDP-11 Options_
1292          -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
1293          -mbcopy  -mbcopy-builtin  -mint32  -mno-int16
1294          -mint16  -mno-int32  -mfloat32  -mno-float64
1295          -mfloat64  -mno-float32  -mabshi  -mno-abshi
1296          -mbranch-expensive  -mbranch-cheap
1297          -munix-asm  -mdec-asm
1298
1299     _picoChip Options_
1300          -mae=AE_TYPE  -mvliw-lookahead=N
1301          -msymbol-as-address  -mno-inefficient-warnings
1302
1303     _PowerPC Options_ See RS/6000 and PowerPC Options.
1304
1305     _PowerPC SPE Options_
1306          -mcpu=CPU-TYPE
1307          -mtune=CPU-TYPE
1308          -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb
1309          -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
1310          -m32  -mxl-compat  -mno-xl-compat
1311          -malign-power  -malign-natural
1312          -msoft-float  -mhard-float  -mmultiple  -mno-multiple
1313          -msingle-float  -mdouble-float
1314          -mupdate  -mno-update
1315          -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
1316          -mstrict-align  -mno-strict-align  -mrelocatable
1317          -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
1318          -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
1319          -msingle-pic-base
1320          -mprioritize-restricted-insns=PRIORITY
1321          -msched-costly-dep=DEPENDENCE_TYPE
1322          -minsert-sched-nops=SCHEME
1323          -mcall-sysv  -mcall-netbsd
1324          -maix-struct-return  -msvr4-struct-return
1325          -mabi=ABI-TYPE  -msecure-plt  -mbss-plt
1326          -mblock-move-inline-limit=NUM
1327          -misel  -mno-isel
1328          -misel=yes  -misel=no
1329          -mspe  -mno-spe
1330          -mspe=yes  -mspe=no
1331          -mfloat-gprs=yes  -mfloat-gprs=no  -mfloat-gprs=single  -mfloat-gprs=double
1332          -mprototype  -mno-prototype
1333          -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
1334          -msdata=OPT  -mvxworks  -G NUM
1335          -mrecip  -mrecip=OPT  -mno-recip  -mrecip-precision
1336          -mno-recip-precision
1337          -mpointers-to-nested-functions  -mno-pointers-to-nested-functions
1338          -msave-toc-indirect  -mno-save-toc-indirect
1339          -mcompat-align-parm  -mno-compat-align-parm
1340          -mfloat128  -mno-float128
1341          -mgnu-attribute  -mno-gnu-attribute
1342          -mstack-protector-guard=GUARD -mstack-protector-guard-reg=REG
1343          -mstack-protector-guard-offset=OFFSET
1344
1345     _RISC-V Options_
1346          -mbranch-cost=N-INSTRUCTION
1347          -mplt  -mno-plt
1348          -mabi=ABI-STRING
1349          -mfdiv  -mno-fdiv
1350          -mdiv  -mno-div
1351          -march=ISA-STRING
1352          -mtune=PROCESSOR-STRING
1353          -mpreferred-stack-boundary=NUM
1354          -msmall-data-limit=N-BYTES
1355          -msave-restore  -mno-save-restore
1356          -mstrict-align -mno-strict-align
1357          -mcmodel=medlow -mcmodel=medany
1358          -mexplicit-relocs  -mno-explicit-relocs
1359          -mrelax -mno-relax
1360
1361     _RL78 Options_
1362          -msim  -mmul=none  -mmul=g13  -mmul=g14  -mallregs
1363          -mcpu=g10  -mcpu=g13  -mcpu=g14  -mg10  -mg13  -mg14
1364          -m64bit-doubles  -m32bit-doubles  -msave-mduc-in-interrupts
1365
1366     _RS/6000 and PowerPC Options_
1367          -mcpu=CPU-TYPE
1368          -mtune=CPU-TYPE
1369          -mcmodel=CODE-MODEL
1370          -mpowerpc64
1371          -maltivec  -mno-altivec
1372          -mpowerpc-gpopt  -mno-powerpc-gpopt
1373          -mpowerpc-gfxopt  -mno-powerpc-gfxopt
1374          -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb  -mpopcntd  -mno-popcntd
1375          -mfprnd  -mno-fprnd
1376          -mcmpb  -mno-cmpb  -mmfpgpr  -mno-mfpgpr  -mhard-dfp  -mno-hard-dfp
1377          -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
1378          -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
1379          -malign-power  -malign-natural
1380          -msoft-float  -mhard-float  -mmultiple  -mno-multiple
1381          -msingle-float  -mdouble-float  -msimple-fpu
1382          -mupdate  -mno-update
1383          -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
1384          -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
1385          -mstrict-align  -mno-strict-align  -mrelocatable
1386          -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
1387          -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
1388          -mdynamic-no-pic  -maltivec  -mswdiv  -msingle-pic-base
1389          -mprioritize-restricted-insns=PRIORITY
1390          -msched-costly-dep=DEPENDENCE_TYPE
1391          -minsert-sched-nops=SCHEME
1392          -mcall-aixdesc  -mcall-eabi  -mcall-freebsd
1393          -mcall-linux  -mcall-netbsd  -mcall-openbsd
1394          -mcall-sysv  -mcall-sysv-eabi  -mcall-sysv-noeabi
1395          -mtraceback=TRACEBACK_TYPE
1396          -maix-struct-return  -msvr4-struct-return
1397          -mabi=ABI-TYPE  -msecure-plt  -mbss-plt
1398          -mblock-move-inline-limit=NUM
1399          -mblock-compare-inline-limit=NUM
1400          -mblock-compare-inline-loop-limit=NUM
1401          -mstring-compare-inline-limit=NUM
1402          -misel  -mno-isel
1403          -misel=yes  -misel=no
1404          -mpaired
1405          -mvrsave  -mno-vrsave
1406          -mmulhw  -mno-mulhw
1407          -mdlmzb  -mno-dlmzb
1408          -mprototype  -mno-prototype
1409          -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
1410          -msdata=OPT  -mreadonly-in-sdata  -mvxworks  -G NUM
1411          -mrecip  -mrecip=OPT  -mno-recip  -mrecip-precision
1412          -mno-recip-precision
1413          -mveclibabi=TYPE  -mfriz  -mno-friz
1414          -mpointers-to-nested-functions  -mno-pointers-to-nested-functions
1415          -msave-toc-indirect  -mno-save-toc-indirect
1416          -mpower8-fusion  -mno-mpower8-fusion  -mpower8-vector  -mno-power8-vector
1417          -mcrypto  -mno-crypto  -mhtm  -mno-htm
1418          -mquad-memory  -mno-quad-memory
1419          -mquad-memory-atomic  -mno-quad-memory-atomic
1420          -mcompat-align-parm  -mno-compat-align-parm
1421          -mfloat128  -mno-float128  -mfloat128-hardware  -mno-float128-hardware
1422          -mgnu-attribute  -mno-gnu-attribute
1423          -mstack-protector-guard=GUARD -mstack-protector-guard-reg=REG
1424          -mstack-protector-guard-offset=OFFSET
1425
1426     _RX Options_
1427          -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu
1428          -mcpu=
1429          -mbig-endian-data  -mlittle-endian-data
1430          -msmall-data
1431          -msim  -mno-sim
1432          -mas100-syntax  -mno-as100-syntax
1433          -mrelax
1434          -mmax-constant-size=
1435          -mint-register=
1436          -mpid
1437          -mallow-string-insns  -mno-allow-string-insns
1438          -mjsr
1439          -mno-warn-multiple-fast-interrupts
1440          -msave-acc-in-interrupts
1441
1442     _S/390 and zSeries Options_
1443          -mtune=CPU-TYPE  -march=CPU-TYPE
1444          -mhard-float  -msoft-float  -mhard-dfp  -mno-hard-dfp
1445          -mlong-double-64  -mlong-double-128
1446          -mbackchain  -mno-backchain  -mpacked-stack  -mno-packed-stack
1447          -msmall-exec  -mno-small-exec  -mmvcle  -mno-mvcle
1448          -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
1449          -mhtm  -mvx  -mzvector
1450          -mtpf-trace  -mno-tpf-trace  -mfused-madd  -mno-fused-madd
1451          -mwarn-framesize  -mwarn-dynamicstack  -mstack-size  -mstack-guard
1452          -mhotpatch=HALFWORDS,HALFWORDS
1453
1454     _Score Options_
1455          -meb  -mel
1456          -mnhwloop
1457          -muls
1458          -mmac
1459          -mscore5  -mscore5u  -mscore7  -mscore7d
1460
1461     _SH Options_
1462          -m1  -m2  -m2e
1463          -m2a-nofpu  -m2a-single-only  -m2a-single  -m2a
1464          -m3  -m3e
1465          -m4-nofpu  -m4-single-only  -m4-single  -m4
1466          -m4a-nofpu  -m4a-single-only  -m4a-single  -m4a  -m4al
1467          -mb  -ml  -mdalign  -mrelax
1468          -mbigtable  -mfmovd  -mrenesas  -mno-renesas  -mnomacsave
1469          -mieee  -mno-ieee  -mbitops  -misize  -minline-ic_invalidate  -mpadstruct
1470          -mprefergot  -musermode  -multcost=NUMBER  -mdiv=STRATEGY
1471          -mdivsi3_libfunc=NAME  -mfixed-range=REGISTER-RANGE
1472          -maccumulate-outgoing-args
1473          -matomic-model=ATOMIC-MODEL
1474          -mbranch-cost=NUM  -mzdcbranch  -mno-zdcbranch
1475          -mcbranch-force-delay-slot
1476          -mfused-madd  -mno-fused-madd  -mfsca  -mno-fsca  -mfsrra  -mno-fsrra
1477          -mpretend-cmove  -mtas
1478
1479     _Solaris 2 Options_
1480          -mclear-hwcap  -mno-clear-hwcap  -mimpure-text  -mno-impure-text
1481          -pthreads
1482
1483     _SPARC Options_
1484          -mcpu=CPU-TYPE
1485          -mtune=CPU-TYPE
1486          -mcmodel=CODE-MODEL
1487          -mmemory-model=MEM-MODEL
1488          -m32  -m64  -mapp-regs  -mno-app-regs
1489          -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat
1490          -mfpu  -mno-fpu  -mhard-float  -msoft-float
1491          -mhard-quad-float  -msoft-quad-float
1492          -mstack-bias  -mno-stack-bias
1493          -mstd-struct-return  -mno-std-struct-return
1494          -munaligned-doubles  -mno-unaligned-doubles
1495          -muser-mode  -mno-user-mode
1496          -mv8plus  -mno-v8plus  -mvis  -mno-vis
1497          -mvis2  -mno-vis2  -mvis3  -mno-vis3
1498          -mvis4 -mno-vis4 -mvis4b -mno-vis4b
1499          -mcbcond  -mno-cbcond  -mfmaf  -mno-fmaf  -mfsmuld  -mno-fsmuld
1500          -mpopc  -mno-popc  -msubxc  -mno-subxc
1501          -mfix-at697f  -mfix-ut699  -mfix-ut700  -mfix-gr712rc
1502          -mlra  -mno-lra
1503
1504     _SPU Options_
1505          -mwarn-reloc  -merror-reloc
1506          -msafe-dma  -munsafe-dma
1507          -mbranch-hints
1508          -msmall-mem  -mlarge-mem  -mstdmain
1509          -mfixed-range=REGISTER-RANGE
1510          -mea32  -mea64
1511          -maddress-space-conversion  -mno-address-space-conversion
1512          -mcache-size=CACHE-SIZE
1513          -matomic-updates  -mno-atomic-updates
1514
1515     _System V Options_
1516          -Qy  -Qn  -YP,PATHS  -Ym,DIR
1517
1518     _TILE-Gx Options_
1519          -mcpu=CPU  -m32  -m64  -mbig-endian  -mlittle-endian
1520          -mcmodel=CODE-MODEL
1521
1522     _TILEPro Options_
1523          -mcpu=CPU  -m32
1524
1525     _V850 Options_
1526          -mlong-calls  -mno-long-calls  -mep  -mno-ep
1527          -mprolog-function  -mno-prolog-function  -mspace
1528          -mtda=N  -msda=N  -mzda=N
1529          -mapp-regs  -mno-app-regs
1530          -mdisable-callt  -mno-disable-callt
1531          -mv850e2v3  -mv850e2  -mv850e1  -mv850es
1532          -mv850e  -mv850  -mv850e3v5
1533          -mloop
1534          -mrelax
1535          -mlong-jumps
1536          -msoft-float
1537          -mhard-float
1538          -mgcc-abi
1539          -mrh850-abi
1540          -mbig-switch
1541
1542     _VAX Options_
1543          -mg  -mgnu  -munix
1544
1545     _Visium Options_
1546          -mdebug  -msim  -mfpu  -mno-fpu  -mhard-float  -msoft-float
1547          -mcpu=CPU-TYPE  -mtune=CPU-TYPE  -msv-mode  -muser-mode
1548
1549     _VMS Options_
1550          -mvms-return-codes  -mdebug-main=PREFIX  -mmalloc64
1551          -mpointer-size=SIZE
1552
1553     _VxWorks Options_
1554          -mrtp  -non-static  -Bstatic  -Bdynamic
1555          -Xbind-lazy  -Xbind-now
1556
1557     _x86 Options_
1558          -mtune=CPU-TYPE  -march=CPU-TYPE
1559          -mtune-ctrl=FEATURE-LIST  -mdump-tune-features  -mno-default
1560          -mfpmath=UNIT
1561          -masm=DIALECT  -mno-fancy-math-387
1562          -mno-fp-ret-in-387  -m80387  -mhard-float  -msoft-float
1563          -mno-wide-multiply  -mrtd  -malign-double
1564          -mpreferred-stack-boundary=NUM
1565          -mincoming-stack-boundary=NUM
1566          -mcld  -mcx16  -msahf  -mmovbe  -mcrc32
1567          -mrecip  -mrecip=OPT
1568          -mvzeroupper  -mprefer-avx128 -mprefer-vector-width=OPT
1569          -mmmx  -msse  -msse2  -msse3  -mssse3  -msse4.1  -msse4.2  -msse4  -mavx
1570          -mavx2  -mavx512f  -mavx512pf  -mavx512er  -mavx512cd  -mavx512vl
1571          -mavx512bw  -mavx512dq  -mavx512ifma  -mavx512vbmi  -msha  -maes
1572          -mpclmul  -mfsgsbase  -mrdrnd  -mf16c  -mfma -mpconfig -mwbnoinvd
1573          -mprefetchwt1  -mclflushopt  -mclwb  -mxsavec  -mxsaves
1574          -msse4a  -m3dnow  -m3dnowa  -mpopcnt  -mabm  -mbmi  -mtbm  -mfma4  -mxop
1575          -madx  -mlzcnt  -mbmi2  -mfxsr  -mxsave  -mxsaveopt  -mrtm  -mlwp  -mmpx
1576          -mmwaitx  -mclzero  -mpku  -mthreads -mgfni  -mvaes
1577          -mshstk -mforce-indirect-call -mavx512vbmi2
1578          -mvpclmulqdq -mavx512bitalg -mmovdiri -mmovdir64b -mavx512vpopcntdq
1579          -mavx5124fmaps  -mavx512vnni  -mavx5124vnniw  -mprfchw  -mrdpid
1580          -mrdseed  -msgx
1581          -mms-bitfields  -mno-align-stringops  -minline-all-stringops
1582          -minline-stringops-dynamically  -mstringop-strategy=ALG
1583          -mmemcpy-strategy=STRATEGY  -mmemset-strategy=STRATEGY
1584          -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
1585          -m96bit-long-double  -mlong-double-64  -mlong-double-80  -mlong-double-128
1586          -mregparm=NUM  -msseregparm
1587          -mveclibabi=TYPE  -mvect8-ret-in-mem
1588          -mpc32  -mpc64  -mpc80  -mstackrealign
1589          -momit-leaf-frame-pointer  -mno-red-zone  -mno-tls-direct-seg-refs
1590          -mcmodel=CODE-MODEL  -mabi=NAME  -maddress-mode=MODE
1591          -m32  -m64  -mx32  -m16  -miamcu  -mlarge-data-threshold=NUM
1592          -msse2avx  -mfentry  -mrecord-mcount  -mnop-mcount  -m8bit-idiv
1593          -mavx256-split-unaligned-load  -mavx256-split-unaligned-store
1594          -malign-data=TYPE  -mstack-protector-guard=GUARD
1595          -mstack-protector-guard-reg=REG
1596          -mstack-protector-guard-offset=OFFSET
1597          -mstack-protector-guard-symbol=SYMBOL -mmitigate-rop
1598          -mgeneral-regs-only -mcall-ms2sysv-xlogues
1599          -mindirect-branch=CHOICE -mfunction-return=CHOICE
1600          -mindirect-branch-register
1601
1602     _x86 Windows Options_
1603          -mconsole  -mcygwin  -mno-cygwin  -mdll
1604          -mnop-fun-dllimport  -mthread
1605          -municode  -mwin32  -mwindows  -fno-set-stack-executable
1606
1607     _Xstormy16 Options_
1608          -msim
1609
1610     _Xtensa Options_
1611          -mconst16  -mno-const16
1612          -mfused-madd  -mno-fused-madd
1613          -mforce-no-pic
1614          -mserialize-volatile  -mno-serialize-volatile
1615          -mtext-section-literals  -mno-text-section-literals
1616          -mauto-litpools  -mno-auto-litpools
1617          -mtarget-align  -mno-target-align
1618          -mlongcalls  -mno-longcalls
1619
1620     _zSeries Options_ See S/390 and zSeries Options.
1621
1622
1623File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
1624
16253.2 Options Controlling the Kind of Output
1626==========================================
1627
1628Compilation can involve up to four stages: preprocessing, compilation
1629proper, assembly and linking, always in that order.  GCC is capable of
1630preprocessing and compiling several files either into several assembler
1631input files, or into one assembler input file; then each assembler input
1632file produces an object file, and linking combines all the object files
1633(those newly compiled, and those specified as input) into an executable
1634file.
1635
1636 For any given input file, the file name suffix determines what kind of
1637compilation is done:
1638
1639'FILE.c'
1640     C source code that must be preprocessed.
1641
1642'FILE.i'
1643     C source code that should not be preprocessed.
1644
1645'FILE.ii'
1646     C++ source code that should not be preprocessed.
1647
1648'FILE.m'
1649     Objective-C source code.  Note that you must link with the
1650     'libobjc' library to make an Objective-C program work.
1651
1652'FILE.mi'
1653     Objective-C source code that should not be preprocessed.
1654
1655'FILE.mm'
1656'FILE.M'
1657     Objective-C++ source code.  Note that you must link with the
1658     'libobjc' library to make an Objective-C++ program work.  Note that
1659     '.M' refers to a literal capital M.
1660
1661'FILE.mii'
1662     Objective-C++ source code that should not be preprocessed.
1663
1664'FILE.h'
1665     C, C++, Objective-C or Objective-C++ header file to be turned into
1666     a precompiled header (default), or C, C++ header file to be turned
1667     into an Ada spec (via the '-fdump-ada-spec' switch).
1668
1669'FILE.cc'
1670'FILE.cp'
1671'FILE.cxx'
1672'FILE.cpp'
1673'FILE.CPP'
1674'FILE.c++'
1675'FILE.C'
1676     C++ source code that must be preprocessed.  Note that in '.cxx',
1677     the last two letters must both be literally 'x'.  Likewise, '.C'
1678     refers to a literal capital C.
1679
1680'FILE.mm'
1681'FILE.M'
1682     Objective-C++ source code that must be preprocessed.
1683
1684'FILE.mii'
1685     Objective-C++ source code that should not be preprocessed.
1686
1687'FILE.hh'
1688'FILE.H'
1689'FILE.hp'
1690'FILE.hxx'
1691'FILE.hpp'
1692'FILE.HPP'
1693'FILE.h++'
1694'FILE.tcc'
1695     C++ header file to be turned into a precompiled header or Ada spec.
1696
1697'FILE.f'
1698'FILE.for'
1699'FILE.ftn'
1700     Fixed form Fortran source code that should not be preprocessed.
1701
1702'FILE.F'
1703'FILE.FOR'
1704'FILE.fpp'
1705'FILE.FPP'
1706'FILE.FTN'
1707     Fixed form Fortran source code that must be preprocessed (with the
1708     traditional preprocessor).
1709
1710'FILE.f90'
1711'FILE.f95'
1712'FILE.f03'
1713'FILE.f08'
1714     Free form Fortran source code that should not be preprocessed.
1715
1716'FILE.F90'
1717'FILE.F95'
1718'FILE.F03'
1719'FILE.F08'
1720     Free form Fortran source code that must be preprocessed (with the
1721     traditional preprocessor).
1722
1723'FILE.go'
1724     Go source code.
1725
1726'FILE.brig'
1727     BRIG files (binary representation of HSAIL).
1728
1729'FILE.ads'
1730     Ada source code file that contains a library unit declaration (a
1731     declaration of a package, subprogram, or generic, or a generic
1732     instantiation), or a library unit renaming declaration (a package,
1733     generic, or subprogram renaming declaration).  Such files are also
1734     called "specs".
1735
1736'FILE.adb'
1737     Ada source code file containing a library unit body (a subprogram
1738     or package body).  Such files are also called "bodies".
1739
1740'FILE.s'
1741     Assembler code.
1742
1743'FILE.S'
1744'FILE.sx'
1745     Assembler code that must be preprocessed.
1746
1747'OTHER'
1748     An object file to be fed straight into linking.  Any file name with
1749     no recognized suffix is treated this way.
1750
1751 You can specify the input language explicitly with the '-x' option:
1752
1753'-x LANGUAGE'
1754     Specify explicitly the LANGUAGE for the following input files
1755     (rather than letting the compiler choose a default based on the
1756     file name suffix).  This option applies to all following input
1757     files until the next '-x' option.  Possible values for LANGUAGE
1758     are:
1759          c  c-header  cpp-output
1760          c++  c++-header  c++-cpp-output
1761          objective-c  objective-c-header  objective-c-cpp-output
1762          objective-c++ objective-c++-header objective-c++-cpp-output
1763          assembler  assembler-with-cpp
1764          ada
1765          f77  f77-cpp-input f95  f95-cpp-input
1766          go
1767          brig
1768
1769'-x none'
1770     Turn off any specification of a language, so that subsequent files
1771     are handled according to their file name suffixes (as they are if
1772     '-x' has not been used at all).
1773
1774 If you only want some of the stages of compilation, you can use '-x'
1775(or filename suffixes) to tell 'gcc' where to start, and one of the
1776options '-c', '-S', or '-E' to say where 'gcc' is to stop.  Note that
1777some combinations (for example, '-x cpp-output -E') instruct 'gcc' to do
1778nothing at all.
1779
1780'-c'
1781     Compile or assemble the source files, but do not link.  The linking
1782     stage simply is not done.  The ultimate output is in the form of an
1783     object file for each source file.
1784
1785     By default, the object file name for a source file is made by
1786     replacing the suffix '.c', '.i', '.s', etc., with '.o'.
1787
1788     Unrecognized input files, not requiring compilation or assembly,
1789     are ignored.
1790
1791'-S'
1792     Stop after the stage of compilation proper; do not assemble.  The
1793     output is in the form of an assembler code file for each
1794     non-assembler input file specified.
1795
1796     By default, the assembler file name for a source file is made by
1797     replacing the suffix '.c', '.i', etc., with '.s'.
1798
1799     Input files that don't require compilation are ignored.
1800
1801'-E'
1802     Stop after the preprocessing stage; do not run the compiler proper.
1803     The output is in the form of preprocessed source code, which is
1804     sent to the standard output.
1805
1806     Input files that don't require preprocessing are ignored.
1807
1808'-o FILE'
1809     Place output in file FILE.  This applies to whatever sort of output
1810     is being produced, whether it be an executable file, an object
1811     file, an assembler file or preprocessed C code.
1812
1813     If '-o' is not specified, the default is to put an executable file
1814     in 'a.out', the object file for 'SOURCE.SUFFIX' in 'SOURCE.o', its
1815     assembler file in 'SOURCE.s', a precompiled header file in
1816     'SOURCE.SUFFIX.gch', and all preprocessed C source on standard
1817     output.
1818
1819'-v'
1820     Print (on standard error output) the commands executed to run the
1821     stages of compilation.  Also print the version number of the
1822     compiler driver program and of the preprocessor and the compiler
1823     proper.
1824
1825'-###'
1826     Like '-v' except the commands are not executed and arguments are
1827     quoted unless they contain only alphanumeric characters or './-_'.
1828     This is useful for shell scripts to capture the driver-generated
1829     command lines.
1830
1831'--help'
1832     Print (on the standard output) a description of the command-line
1833     options understood by 'gcc'.  If the '-v' option is also specified
1834     then '--help' is also passed on to the various processes invoked by
1835     'gcc', so that they can display the command-line options they
1836     accept.  If the '-Wextra' option has also been specified (prior to
1837     the '--help' option), then command-line options that have no
1838     documentation associated with them are also displayed.
1839
1840'--target-help'
1841     Print (on the standard output) a description of target-specific
1842     command-line options for each tool.  For some targets extra
1843     target-specific information may also be printed.
1844
1845'--help={CLASS|[^]QUALIFIER}[,...]'
1846     Print (on the standard output) a description of the command-line
1847     options understood by the compiler that fit into all specified
1848     classes and qualifiers.  These are the supported classes:
1849
1850     'optimizers'
1851          Display all of the optimization options supported by the
1852          compiler.
1853
1854     'warnings'
1855          Display all of the options controlling warning messages
1856          produced by the compiler.
1857
1858     'target'
1859          Display target-specific options.  Unlike the '--target-help'
1860          option however, target-specific options of the linker and
1861          assembler are not displayed.  This is because those tools do
1862          not currently support the extended '--help=' syntax.
1863
1864     'params'
1865          Display the values recognized by the '--param' option.
1866
1867     LANGUAGE
1868          Display the options supported for LANGUAGE, where LANGUAGE is
1869          the name of one of the languages supported in this version of
1870          GCC.
1871
1872     'common'
1873          Display the options that are common to all languages.
1874
1875     These are the supported qualifiers:
1876
1877     'undocumented'
1878          Display only those options that are undocumented.
1879
1880     'joined'
1881          Display options taking an argument that appears after an equal
1882          sign in the same continuous piece of text, such as:
1883          '--help=target'.
1884
1885     'separate'
1886          Display options taking an argument that appears as a separate
1887          word following the original option, such as: '-o output-file'.
1888
1889     Thus for example to display all the undocumented target-specific
1890     switches supported by the compiler, use:
1891
1892          --help=target,undocumented
1893
1894     The sense of a qualifier can be inverted by prefixing it with the
1895     '^' character, so for example to display all binary warning options
1896     (i.e., ones that are either on or off and that do not take an
1897     argument) that have a description, use:
1898
1899          --help=warnings,^joined,^undocumented
1900
1901     The argument to '--help=' should not consist solely of inverted
1902     qualifiers.
1903
1904     Combining several classes is possible, although this usually
1905     restricts the output so much that there is nothing to display.  One
1906     case where it does work, however, is when one of the classes is
1907     TARGET.  For example, to display all the target-specific
1908     optimization options, use:
1909
1910          --help=target,optimizers
1911
1912     The '--help=' option can be repeated on the command line.  Each
1913     successive use displays its requested class of options, skipping
1914     those that have already been displayed.
1915
1916     If the '-Q' option appears on the command line before the '--help='
1917     option, then the descriptive text displayed by '--help=' is
1918     changed.  Instead of describing the displayed options, an
1919     indication is given as to whether the option is enabled, disabled
1920     or set to a specific value (assuming that the compiler knows this
1921     at the point where the '--help=' option is used).
1922
1923     Here is a truncated example from the ARM port of 'gcc':
1924
1925            % gcc -Q -mabi=2 --help=target -c
1926            The following options are target specific:
1927            -mabi=                                2
1928            -mabort-on-noreturn                   [disabled]
1929            -mapcs                                [disabled]
1930
1931     The output is sensitive to the effects of previous command-line
1932     options, so for example it is possible to find out which
1933     optimizations are enabled at '-O2' by using:
1934
1935          -Q -O2 --help=optimizers
1936
1937     Alternatively you can discover which binary optimizations are
1938     enabled by '-O3' by using:
1939
1940          gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1941          gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1942          diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1943
1944'--version'
1945     Display the version number and copyrights of the invoked GCC.
1946
1947'-pass-exit-codes'
1948     Normally the 'gcc' program exits with the code of 1 if any phase of
1949     the compiler returns a non-success return code.  If you specify
1950     '-pass-exit-codes', the 'gcc' program instead returns with the
1951     numerically highest error produced by any phase returning an error
1952     indication.  The C, C++, and Fortran front ends return 4 if an
1953     internal compiler error is encountered.
1954
1955'-pipe'
1956     Use pipes rather than temporary files for communication between the
1957     various stages of compilation.  This fails to work on some systems
1958     where the assembler is unable to read from a pipe; but the GNU
1959     assembler has no trouble.
1960
1961'-specs=FILE'
1962     Process FILE after the compiler reads in the standard 'specs' file,
1963     in order to override the defaults which the 'gcc' driver program
1964     uses when determining what switches to pass to 'cc1', 'cc1plus',
1965     'as', 'ld', etc.  More than one '-specs=FILE' can be specified on
1966     the command line, and they are processed in order, from left to
1967     right.  *Note Spec Files::, for information about the format of the
1968     FILE.
1969
1970'-wrapper'
1971     Invoke all subcommands under a wrapper program.  The name of the
1972     wrapper program and its parameters are passed as a comma separated
1973     list.
1974
1975          gcc -c t.c -wrapper gdb,--args
1976
1977     This invokes all subprograms of 'gcc' under 'gdb --args', thus the
1978     invocation of 'cc1' is 'gdb --args cc1 ...'.
1979
1980'-ffile-prefix-map=OLD=NEW'
1981     When compiling files residing in directory 'OLD', record any
1982     references to them in the result of the compilation as if the files
1983     resided in directory 'NEW' instead.  Specifying this option is
1984     equivalent to specifying all the individual '-f*-prefix-map'
1985     options.  This can be used to make reproducible builds that are
1986     location independent.  See also '-fmacro-prefix-map' and
1987     '-fdebug-prefix-map'.
1988
1989'-fplugin=NAME.so'
1990     Load the plugin code in file NAME.so, assumed to be a shared object
1991     to be dlopen'd by the compiler.  The base name of the shared object
1992     file is used to identify the plugin for the purposes of argument
1993     parsing (See '-fplugin-arg-NAME-KEY=VALUE' below).  Each plugin
1994     should define the callback functions specified in the Plugins API.
1995
1996'-fplugin-arg-NAME-KEY=VALUE'
1997     Define an argument called KEY with a value of VALUE for the plugin
1998     called NAME.
1999
2000'-fdump-ada-spec[-slim]'
2001     For C and C++ source and include files, generate corresponding Ada
2002     specs.  *Note (gnat_ugn)Generating Ada Bindings for C and C++
2003     headers::, which provides detailed documentation on this feature.
2004
2005'-fada-spec-parent=UNIT'
2006     In conjunction with '-fdump-ada-spec[-slim]' above, generate Ada
2007     specs as child units of parent UNIT.
2008
2009'-fdump-go-spec=FILE'
2010     For input files in any language, generate corresponding Go
2011     declarations in FILE.  This generates Go 'const', 'type', 'var',
2012     and 'func' declarations which may be a useful way to start writing
2013     a Go interface to code written in some other language.
2014
2015'@FILE'
2016     Read command-line options from FILE.  The options read are inserted
2017     in place of the original @FILE option.  If FILE does not exist, or
2018     cannot be read, then the option will be treated literally, and not
2019     removed.
2020
2021     Options in FILE are separated by whitespace.  A whitespace
2022     character may be included in an option by surrounding the entire
2023     option in either single or double quotes.  Any character (including
2024     a backslash) may be included by prefixing the character to be
2025     included with a backslash.  The FILE may itself contain additional
2026     @FILE options; any such options will be processed recursively.
2027
2028
2029File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
2030
20313.3 Compiling C++ Programs
2032==========================
2033
2034C++ source files conventionally use one of the suffixes '.C', '.cc',
2035'.cpp', '.CPP', '.c++', '.cp', or '.cxx'; C++ header files often use
2036'.hh', '.hpp', '.H', or (for shared template code) '.tcc'; and
2037preprocessed C++ files use the suffix '.ii'.  GCC recognizes files with
2038these names and compiles them as C++ programs even if you call the
2039compiler the same way as for compiling C programs (usually with the name
2040'gcc').
2041
2042 However, the use of 'gcc' does not add the C++ library.  'g++' is a
2043program that calls GCC and automatically specifies linking against the
2044C++ library.  It treats '.c', '.h' and '.i' files as C++ source files
2045instead of C source files unless '-x' is used.  This program is also
2046useful when precompiling a C header file with a '.h' extension for use
2047in C++ compilations.  On many systems, 'g++' is also installed with the
2048name 'c++'.
2049
2050 When you compile C++ programs, you may specify many of the same
2051command-line options that you use for compiling programs in any
2052language; or command-line options meaningful for C and related
2053languages; or options that are meaningful only for C++ programs.  *Note
2054Options Controlling C Dialect: C Dialect Options, for explanations of
2055options for languages related to C.  *Note Options Controlling C++
2056Dialect: C++ Dialect Options, for explanations of options that are
2057meaningful only for C++ programs.
2058
2059
2060File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
2061
20623.4 Options Controlling C Dialect
2063=================================
2064
2065The following options control the dialect of C (or languages derived
2066from C, such as C++, Objective-C and Objective-C++) that the compiler
2067accepts:
2068
2069'-ansi'
2070     In C mode, this is equivalent to '-std=c90'.  In C++ mode, it is
2071     equivalent to '-std=c++98'.
2072
2073     This turns off certain features of GCC that are incompatible with
2074     ISO C90 (when compiling C code), or of standard C++ (when compiling
2075     C++ code), such as the 'asm' and 'typeof' keywords, and predefined
2076     macros such as 'unix' and 'vax' that identify the type of system
2077     you are using.  It also enables the undesirable and rarely used ISO
2078     trigraph feature.  For the C compiler, it disables recognition of
2079     C++ style '//' comments as well as the 'inline' keyword.
2080
2081     The alternate keywords '__asm__', '__extension__', '__inline__' and
2082     '__typeof__' continue to work despite '-ansi'.  You would not want
2083     to use them in an ISO C program, of course, but it is useful to put
2084     them in header files that might be included in compilations done
2085     with '-ansi'.  Alternate predefined macros such as '__unix__' and
2086     '__vax__' are also available, with or without '-ansi'.
2087
2088     The '-ansi' option does not cause non-ISO programs to be rejected
2089     gratuitously.  For that, '-Wpedantic' is required in addition to
2090     '-ansi'.  *Note Warning Options::.
2091
2092     The macro '__STRICT_ANSI__' is predefined when the '-ansi' option
2093     is used.  Some header files may notice this macro and refrain from
2094     declaring certain functions or defining certain macros that the ISO
2095     standard doesn't call for; this is to avoid interfering with any
2096     programs that might use these names for other things.
2097
2098     Functions that are normally built in but do not have semantics
2099     defined by ISO C (such as 'alloca' and 'ffs') are not built-in
2100     functions when '-ansi' is used.  *Note Other built-in functions
2101     provided by GCC: Other Builtins, for details of the functions
2102     affected.
2103
2104'-std='
2105     Determine the language standard.  *Note Language Standards
2106     Supported by GCC: Standards, for details of these standard
2107     versions.  This option is currently only supported when compiling C
2108     or C++.
2109
2110     The compiler can accept several base standards, such as 'c90' or
2111     'c++98', and GNU dialects of those standards, such as 'gnu90' or
2112     'gnu++98'.  When a base standard is specified, the compiler accepts
2113     all programs following that standard plus those using GNU
2114     extensions that do not contradict it.  For example, '-std=c90'
2115     turns off certain features of GCC that are incompatible with ISO
2116     C90, such as the 'asm' and 'typeof' keywords, but not other GNU
2117     extensions that do not have a meaning in ISO C90, such as omitting
2118     the middle term of a '?:' expression.  On the other hand, when a
2119     GNU dialect of a standard is specified, all features supported by
2120     the compiler are enabled, even when those features change the
2121     meaning of the base standard.  As a result, some strict-conforming
2122     programs may be rejected.  The particular standard is used by
2123     '-Wpedantic' to identify which features are GNU extensions given
2124     that version of the standard.  For example '-std=gnu90 -Wpedantic'
2125     warns about C++ style '//' comments, while '-std=gnu99 -Wpedantic'
2126     does not.
2127
2128     A value for this option must be provided; possible values are
2129
2130     'c90'
2131     'c89'
2132     'iso9899:1990'
2133          Support all ISO C90 programs (certain GNU extensions that
2134          conflict with ISO C90 are disabled).  Same as '-ansi' for C
2135          code.
2136
2137     'iso9899:199409'
2138          ISO C90 as modified in amendment 1.
2139
2140     'c99'
2141     'c9x'
2142     'iso9899:1999'
2143     'iso9899:199x'
2144          ISO C99.  This standard is substantially completely supported,
2145          modulo bugs and floating-point issues (mainly but not entirely
2146          relating to optional C99 features from Annexes F and G). See
2147          <http://gcc.gnu.org/c99status.html> for more information.  The
2148          names 'c9x' and 'iso9899:199x' are deprecated.
2149
2150     'c11'
2151     'c1x'
2152     'iso9899:2011'
2153          ISO C11, the 2011 revision of the ISO C standard.  This
2154          standard is substantially completely supported, modulo bugs,
2155          floating-point issues (mainly but not entirely relating to
2156          optional C11 features from Annexes F and G) and the optional
2157          Annexes K (Bounds-checking interfaces) and L (Analyzability).
2158          The name 'c1x' is deprecated.
2159
2160     'c17'
2161     'c18'
2162     'iso9899:2017'
2163     'iso9899:2018'
2164          ISO C17, the 2017 revision of the ISO C standard (expected to
2165          be published in 2018).  This standard is same as C11 except
2166          for corrections of defects (all of which are also applied with
2167          '-std=c11') and a new value of '__STDC_VERSION__', and so is
2168          supported to the same extent as C11.
2169
2170     'gnu90'
2171     'gnu89'
2172          GNU dialect of ISO C90 (including some C99 features).
2173
2174     'gnu99'
2175     'gnu9x'
2176          GNU dialect of ISO C99.  The name 'gnu9x' is deprecated.
2177
2178     'gnu11'
2179     'gnu1x'
2180          GNU dialect of ISO C11.  The name 'gnu1x' is deprecated.
2181
2182     'gnu17'
2183     'gnu18'
2184          GNU dialect of ISO C17.  This is the default for C code.
2185
2186     'c++98'
2187     'c++03'
2188          The 1998 ISO C++ standard plus the 2003 technical corrigendum
2189          and some additional defect reports.  Same as '-ansi' for C++
2190          code.
2191
2192     'gnu++98'
2193     'gnu++03'
2194          GNU dialect of '-std=c++98'.
2195
2196     'c++11'
2197     'c++0x'
2198          The 2011 ISO C++ standard plus amendments.  The name 'c++0x'
2199          is deprecated.
2200
2201     'gnu++11'
2202     'gnu++0x'
2203          GNU dialect of '-std=c++11'.  The name 'gnu++0x' is
2204          deprecated.
2205
2206     'c++14'
2207     'c++1y'
2208          The 2014 ISO C++ standard plus amendments.  The name 'c++1y'
2209          is deprecated.
2210
2211     'gnu++14'
2212     'gnu++1y'
2213          GNU dialect of '-std=c++14'.  This is the default for C++
2214          code.  The name 'gnu++1y' is deprecated.
2215
2216     'c++17'
2217     'c++1z'
2218          The 2017 ISO C++ standard plus amendments.  The name 'c++1z'
2219          is deprecated.
2220
2221     'gnu++17'
2222     'gnu++1z'
2223          GNU dialect of '-std=c++17'.  The name 'gnu++1z' is
2224          deprecated.
2225
2226     'c++2a'
2227          The next revision of the ISO C++ standard, tentatively planned
2228          for 2020.  Support is highly experimental, and will almost
2229          certainly change in incompatible ways in future releases.
2230
2231     'gnu++2a'
2232          GNU dialect of '-std=c++2a'.  Support is highly experimental,
2233          and will almost certainly change in incompatible ways in
2234          future releases.
2235
2236'-fgnu89-inline'
2237     The option '-fgnu89-inline' tells GCC to use the traditional GNU
2238     semantics for 'inline' functions when in C99 mode.  *Note An Inline
2239     Function is As Fast As a Macro: Inline.  Using this option is
2240     roughly equivalent to adding the 'gnu_inline' function attribute to
2241     all inline functions (*note Function Attributes::).
2242
2243     The option '-fno-gnu89-inline' explicitly tells GCC to use the C99
2244     semantics for 'inline' when in C99 or gnu99 mode (i.e., it
2245     specifies the default behavior).  This option is not supported in
2246     '-std=c90' or '-std=gnu90' mode.
2247
2248     The preprocessor macros '__GNUC_GNU_INLINE__' and
2249     '__GNUC_STDC_INLINE__' may be used to check which semantics are in
2250     effect for 'inline' functions.  *Note (cpp)Common Predefined
2251     Macros::.
2252
2253'-fpermitted-flt-eval-methods=STYLE'
2254     ISO/IEC TS 18661-3 defines new permissible values for
2255     'FLT_EVAL_METHOD' that indicate that operations and constants with
2256     a semantic type that is an interchange or extended format should be
2257     evaluated to the precision and range of that type.  These new
2258     values are a superset of those permitted under C99/C11, which does
2259     not specify the meaning of other positive values of
2260     'FLT_EVAL_METHOD'.  As such, code conforming to C11 may not have
2261     been written expecting the possibility of the new values.
2262
2263     '-fpermitted-flt-eval-methods' specifies whether the compiler
2264     should allow only the values of 'FLT_EVAL_METHOD' specified in
2265     C99/C11, or the extended set of values specified in ISO/IEC TS
2266     18661-3.
2267
2268     STYLE is either 'c11' or 'ts-18661-3' as appropriate.
2269
2270     The default when in a standards compliant mode ('-std=c11' or
2271     similar) is '-fpermitted-flt-eval-methods=c11'.  The default when
2272     in a GNU dialect ('-std=gnu11' or similar) is
2273     '-fpermitted-flt-eval-methods=ts-18661-3'.
2274
2275'-aux-info FILENAME'
2276     Output to the given filename prototyped declarations for all
2277     functions declared and/or defined in a translation unit, including
2278     those in header files.  This option is silently ignored in any
2279     language other than C.
2280
2281     Besides declarations, the file indicates, in comments, the origin
2282     of each declaration (source file and line), whether the declaration
2283     was implicit, prototyped or unprototyped ('I', 'N' for new or 'O'
2284     for old, respectively, in the first character after the line number
2285     and the colon), and whether it came from a declaration or a
2286     definition ('C' or 'F', respectively, in the following character).
2287     In the case of function definitions, a K&R-style list of arguments
2288     followed by their declarations is also provided, inside comments,
2289     after the declaration.
2290
2291'-fallow-parameterless-variadic-functions'
2292     Accept variadic functions without named parameters.
2293
2294     Although it is possible to define such a function, this is not very
2295     useful as it is not possible to read the arguments.  This is only
2296     supported for C as this construct is allowed by C++.
2297
2298'-fno-asm'
2299     Do not recognize 'asm', 'inline' or 'typeof' as a keyword, so that
2300     code can use these words as identifiers.  You can use the keywords
2301     '__asm__', '__inline__' and '__typeof__' instead.  '-ansi' implies
2302     '-fno-asm'.
2303
2304     In C++, this switch only affects the 'typeof' keyword, since 'asm'
2305     and 'inline' are standard keywords.  You may want to use the
2306     '-fno-gnu-keywords' flag instead, which has the same effect.  In
2307     C99 mode ('-std=c99' or '-std=gnu99'), this switch only affects the
2308     'asm' and 'typeof' keywords, since 'inline' is a standard keyword
2309     in ISO C99.
2310
2311'-fno-builtin'
2312'-fno-builtin-FUNCTION'
2313     Don't recognize built-in functions that do not begin with
2314     '__builtin_' as prefix.  *Note Other built-in functions provided by
2315     GCC: Other Builtins, for details of the functions affected,
2316     including those which are not built-in functions when '-ansi' or
2317     '-std' options for strict ISO C conformance are used because they
2318     do not have an ISO standard meaning.
2319
2320     GCC normally generates special code to handle certain built-in
2321     functions more efficiently; for instance, calls to 'alloca' may
2322     become single instructions which adjust the stack directly, and
2323     calls to 'memcpy' may become inline copy loops.  The resulting code
2324     is often both smaller and faster, but since the function calls no
2325     longer appear as such, you cannot set a breakpoint on those calls,
2326     nor can you change the behavior of the functions by linking with a
2327     different library.  In addition, when a function is recognized as a
2328     built-in function, GCC may use information about that function to
2329     warn about problems with calls to that function, or to generate
2330     more efficient code, even if the resulting code still contains
2331     calls to that function.  For example, warnings are given with
2332     '-Wformat' for bad calls to 'printf' when 'printf' is built in and
2333     'strlen' is known not to modify global memory.
2334
2335     With the '-fno-builtin-FUNCTION' option only the built-in function
2336     FUNCTION is disabled.  FUNCTION must not begin with '__builtin_'.
2337     If a function is named that is not built-in in this version of GCC,
2338     this option is ignored.  There is no corresponding
2339     '-fbuiltin-FUNCTION' option; if you wish to enable built-in
2340     functions selectively when using '-fno-builtin' or
2341     '-ffreestanding', you may define macros such as:
2342
2343          #define abs(n)          __builtin_abs ((n))
2344          #define strcpy(d, s)    __builtin_strcpy ((d), (s))
2345
2346'-fgimple'
2347
2348     Enable parsing of function definitions marked with '__GIMPLE'.
2349     This is an experimental feature that allows unit testing of GIMPLE
2350     passes.
2351
2352'-fhosted'
2353
2354     Assert that compilation targets a hosted environment.  This implies
2355     '-fbuiltin'.  A hosted environment is one in which the entire
2356     standard library is available, and in which 'main' has a return
2357     type of 'int'.  Examples are nearly everything except a kernel.
2358     This is equivalent to '-fno-freestanding'.
2359
2360'-ffreestanding'
2361
2362     Assert that compilation targets a freestanding environment.  This
2363     implies '-fno-builtin'.  A freestanding environment is one in which
2364     the standard library may not exist, and program startup may not
2365     necessarily be at 'main'.  The most obvious example is an OS
2366     kernel.  This is equivalent to '-fno-hosted'.
2367
2368     *Note Language Standards Supported by GCC: Standards, for details
2369     of freestanding and hosted environments.
2370
2371'-fopenacc'
2372     Enable handling of OpenACC directives '#pragma acc' in C/C++ and
2373     '!$acc' in Fortran.  When '-fopenacc' is specified, the compiler
2374     generates accelerated code according to the OpenACC Application
2375     Programming Interface v2.0 <https://www.openacc.org>.  This option
2376     implies '-pthread', and thus is only supported on targets that have
2377     support for '-pthread'.
2378
2379'-fopenacc-dim=GEOM'
2380     Specify default compute dimensions for parallel offload regions
2381     that do not explicitly specify.  The GEOM value is a triple of
2382     ':'-separated sizes, in order 'gang', 'worker' and, 'vector'.  A
2383     size can be omitted, to use a target-specific default value.
2384
2385'-fopenmp'
2386     Enable handling of OpenMP directives '#pragma omp' in C/C++ and
2387     '!$omp' in Fortran.  When '-fopenmp' is specified, the compiler
2388     generates parallel code according to the OpenMP Application Program
2389     Interface v4.5 <http://www.openmp.org/>.  This option implies
2390     '-pthread', and thus is only supported on targets that have support
2391     for '-pthread'.  '-fopenmp' implies '-fopenmp-simd'.
2392
2393'-fopenmp-simd'
2394     Enable handling of OpenMP's SIMD directives with '#pragma omp' in
2395     C/C++ and '!$omp' in Fortran.  Other OpenMP directives are ignored.
2396
2397'-fgnu-tm'
2398     When the option '-fgnu-tm' is specified, the compiler generates
2399     code for the Linux variant of Intel's current Transactional Memory
2400     ABI specification document (Revision 1.1, May 6 2009).  This is an
2401     experimental feature whose interface may change in future versions
2402     of GCC, as the official specification changes.  Please note that
2403     not all architectures are supported for this feature.
2404
2405     For more information on GCC's support for transactional memory,
2406     *Note The GNU Transactional Memory Library: (libitm)Enabling
2407     libitm.
2408
2409     Note that the transactional memory feature is not supported with
2410     non-call exceptions ('-fnon-call-exceptions').
2411
2412'-fms-extensions'
2413     Accept some non-standard constructs used in Microsoft header files.
2414
2415     In C++ code, this allows member names in structures to be similar
2416     to previous types declarations.
2417
2418          typedef int UOW;
2419          struct ABC {
2420            UOW UOW;
2421          };
2422
2423     Some cases of unnamed fields in structures and unions are only
2424     accepted with this option.  *Note Unnamed struct/union fields
2425     within structs/unions: Unnamed Fields, for details.
2426
2427     Note that this option is off for all targets but x86 targets using
2428     ms-abi.
2429
2430'-fplan9-extensions'
2431     Accept some non-standard constructs used in Plan 9 code.
2432
2433     This enables '-fms-extensions', permits passing pointers to
2434     structures with anonymous fields to functions that expect pointers
2435     to elements of the type of the field, and permits referring to
2436     anonymous fields declared using a typedef.  *Note Unnamed
2437     struct/union fields within structs/unions: Unnamed Fields, for
2438     details.  This is only supported for C, not C++.
2439
2440'-fcond-mismatch'
2441     Allow conditional expressions with mismatched types in the second
2442     and third arguments.  The value of such an expression is void.
2443     This option is not supported for C++.
2444
2445'-flax-vector-conversions'
2446     Allow implicit conversions between vectors with differing numbers
2447     of elements and/or incompatible element types.  This option should
2448     not be used for new code.
2449
2450'-funsigned-char'
2451     Let the type 'char' be unsigned, like 'unsigned char'.
2452
2453     Each kind of machine has a default for what 'char' should be.  It
2454     is either like 'unsigned char' by default or like 'signed char' by
2455     default.
2456
2457     Ideally, a portable program should always use 'signed char' or
2458     'unsigned char' when it depends on the signedness of an object.
2459     But many programs have been written to use plain 'char' and expect
2460     it to be signed, or expect it to be unsigned, depending on the
2461     machines they were written for.  This option, and its inverse, let
2462     you make such a program work with the opposite default.
2463
2464     The type 'char' is always a distinct type from each of 'signed
2465     char' or 'unsigned char', even though its behavior is always just
2466     like one of those two.
2467
2468'-fsigned-char'
2469     Let the type 'char' be signed, like 'signed char'.
2470
2471     Note that this is equivalent to '-fno-unsigned-char', which is the
2472     negative form of '-funsigned-char'.  Likewise, the option
2473     '-fno-signed-char' is equivalent to '-funsigned-char'.
2474
2475'-fsigned-bitfields'
2476'-funsigned-bitfields'
2477'-fno-signed-bitfields'
2478'-fno-unsigned-bitfields'
2479     These options control whether a bit-field is signed or unsigned,
2480     when the declaration does not use either 'signed' or 'unsigned'.
2481     By default, such a bit-field is signed, because this is consistent:
2482     the basic integer types such as 'int' are signed types.
2483
2484'-fsso-struct=ENDIANNESS'
2485     Set the default scalar storage order of structures and unions to
2486     the specified endianness.  The accepted values are 'big-endian',
2487     'little-endian' and 'native' for the native endianness of the
2488     target (the default).  This option is not supported for C++.
2489
2490     *Warning:* the '-fsso-struct' switch causes GCC to generate code
2491     that is not binary compatible with code generated without it if the
2492     specified endianness is not the native endianness of the target.
2493
2494
2495File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
2496
24973.5 Options Controlling C++ Dialect
2498===================================
2499
2500This section describes the command-line options that are only meaningful
2501for C++ programs.  You can also use most of the GNU compiler options
2502regardless of what language your program is in.  For example, you might
2503compile a file 'firstClass.C' like this:
2504
2505     g++ -g -fstrict-enums -O -c firstClass.C
2506
2507In this example, only '-fstrict-enums' is an option meant only for C++
2508programs; you can use the other options with any language supported by
2509GCC.
2510
2511 Some options for compiling C programs, such as '-std', are also
2512relevant for C++ programs.  *Note Options Controlling C Dialect: C
2513Dialect Options.
2514
2515 Here is a list of options that are _only_ for compiling C++ programs:
2516
2517'-fabi-version=N'
2518     Use version N of the C++ ABI.  The default is version 0.
2519
2520     Version 0 refers to the version conforming most closely to the C++
2521     ABI specification.  Therefore, the ABI obtained using version 0
2522     will change in different versions of G++ as ABI bugs are fixed.
2523
2524     Version 1 is the version of the C++ ABI that first appeared in G++
2525     3.2.
2526
2527     Version 2 is the version of the C++ ABI that first appeared in G++
2528     3.4, and was the default through G++ 4.9.
2529
2530     Version 3 corrects an error in mangling a constant address as a
2531     template argument.
2532
2533     Version 4, which first appeared in G++ 4.5, implements a standard
2534     mangling for vector types.
2535
2536     Version 5, which first appeared in G++ 4.6, corrects the mangling
2537     of attribute const/volatile on function pointer types, decltype of
2538     a plain decl, and use of a function parameter in the declaration of
2539     another parameter.
2540
2541     Version 6, which first appeared in G++ 4.7, corrects the promotion
2542     behavior of C++11 scoped enums and the mangling of template
2543     argument packs, const/static_cast, prefix ++ and -, and a class
2544     scope function used as a template argument.
2545
2546     Version 7, which first appeared in G++ 4.8, that treats nullptr_t
2547     as a builtin type and corrects the mangling of lambdas in default
2548     argument scope.
2549
2550     Version 8, which first appeared in G++ 4.9, corrects the
2551     substitution behavior of function types with
2552     function-cv-qualifiers.
2553
2554     Version 9, which first appeared in G++ 5.2, corrects the alignment
2555     of 'nullptr_t'.
2556
2557     Version 10, which first appeared in G++ 6.1, adds mangling of
2558     attributes that affect type identity, such as ia32 calling
2559     convention attributes (e.g.  'stdcall').
2560
2561     Version 11, which first appeared in G++ 7, corrects the mangling of
2562     sizeof...  expressions and operator names.  For multiple entities
2563     with the same name within a function, that are declared in
2564     different scopes, the mangling now changes starting with the
2565     twelfth occurrence.  It also implies '-fnew-inheriting-ctors'.
2566
2567     Version 12, which first appeared in G++ 8, corrects the calling
2568     conventions for empty classes on the x86_64 target and for classes
2569     with only deleted copy/move constructors.  It accidentally changes
2570     the calling convention for classes with a deleted copy constructor
2571     and a trivial move constructor.
2572
2573     Version 13, which first appeared in G++ 8.2, fixes the accidental
2574     change in version 12.
2575
2576     See also '-Wabi'.
2577
2578'-fabi-compat-version=N'
2579     On targets that support strong aliases, G++ works around mangling
2580     changes by creating an alias with the correct mangled name when
2581     defining a symbol with an incorrect mangled name.  This switch
2582     specifies which ABI version to use for the alias.
2583
2584     With '-fabi-version=0' (the default), this defaults to 11 (GCC 7
2585     compatibility).  If another ABI version is explicitly selected,
2586     this defaults to 0.  For compatibility with GCC versions 3.2
2587     through 4.9, use '-fabi-compat-version=2'.
2588
2589     If this option is not provided but '-Wabi=N' is, that version is
2590     used for compatibility aliases.  If this option is provided along
2591     with '-Wabi' (without the version), the version from this option is
2592     used for the warning.
2593
2594'-fno-access-control'
2595     Turn off all access checking.  This switch is mainly useful for
2596     working around bugs in the access control code.
2597
2598'-faligned-new'
2599     Enable support for C++17 'new' of types that require more alignment
2600     than 'void* ::operator new(std::size_t)' provides.  A numeric
2601     argument such as '-faligned-new=32' can be used to specify how much
2602     alignment (in bytes) is provided by that function, but few users
2603     will need to override the default of 'alignof(std::max_align_t)'.
2604
2605     This flag is enabled by default for '-std=c++17'.
2606
2607'-fcheck-new'
2608     Check that the pointer returned by 'operator new' is non-null
2609     before attempting to modify the storage allocated.  This check is
2610     normally unnecessary because the C++ standard specifies that
2611     'operator new' only returns '0' if it is declared 'throw()', in
2612     which case the compiler always checks the return value even without
2613     this option.  In all other cases, when 'operator new' has a
2614     non-empty exception specification, memory exhaustion is signalled
2615     by throwing 'std::bad_alloc'.  See also 'new (nothrow)'.
2616
2617'-fconcepts'
2618     Enable support for the C++ Extensions for Concepts Technical
2619     Specification, ISO 19217 (2015), which allows code like
2620
2621          template <class T> concept bool Addable = requires (T t) { t + t; };
2622          template <Addable T> T add (T a, T b) { return a + b; }
2623
2624'-fconstexpr-depth=N'
2625     Set the maximum nested evaluation depth for C++11 constexpr
2626     functions to N.  A limit is needed to detect endless recursion
2627     during constant expression evaluation.  The minimum specified by
2628     the standard is 512.
2629
2630'-fconstexpr-loop-limit=N'
2631     Set the maximum number of iterations for a loop in C++14 constexpr
2632     functions to N.  A limit is needed to detect infinite loops during
2633     constant expression evaluation.  The default is 262144 (1<<18).
2634
2635'-fdeduce-init-list'
2636     Enable deduction of a template type parameter as
2637     'std::initializer_list' from a brace-enclosed initializer list,
2638     i.e.
2639
2640          template <class T> auto forward(T t) -> decltype (realfn (t))
2641          {
2642            return realfn (t);
2643          }
2644
2645          void f()
2646          {
2647            forward({1,2}); // call forward<std::initializer_list<int>>
2648          }
2649
2650     This deduction was implemented as a possible extension to the
2651     originally proposed semantics for the C++11 standard, but was not
2652     part of the final standard, so it is disabled by default.  This
2653     option is deprecated, and may be removed in a future version of
2654     G++.
2655
2656'-ffriend-injection'
2657     Inject friend functions into the enclosing namespace, so that they
2658     are visible outside the scope of the class in which they are
2659     declared.  Friend functions were documented to work this way in the
2660     old Annotated C++ Reference Manual.  However, in ISO C++ a friend
2661     function that is not declared in an enclosing scope can only be
2662     found using argument dependent lookup.  GCC defaults to the
2663     standard behavior.
2664
2665     This option is deprecated and will be removed.
2666
2667'-fno-elide-constructors'
2668     The C++ standard allows an implementation to omit creating a
2669     temporary that is only used to initialize another object of the
2670     same type.  Specifying this option disables that optimization, and
2671     forces G++ to call the copy constructor in all cases.  This option
2672     also causes G++ to call trivial member functions which otherwise
2673     would be expanded inline.
2674
2675     In C++17, the compiler is required to omit these temporaries, but
2676     this option still affects trivial member functions.
2677
2678'-fno-enforce-eh-specs'
2679     Don't generate code to check for violation of exception
2680     specifications at run time.  This option violates the C++ standard,
2681     but may be useful for reducing code size in production builds, much
2682     like defining 'NDEBUG'.  This does not give user code permission to
2683     throw exceptions in violation of the exception specifications; the
2684     compiler still optimizes based on the specifications, so throwing
2685     an unexpected exception results in undefined behavior at run time.
2686
2687'-fextern-tls-init'
2688'-fno-extern-tls-init'
2689     The C++11 and OpenMP standards allow 'thread_local' and
2690     'threadprivate' variables to have dynamic (runtime) initialization.
2691     To support this, any use of such a variable goes through a wrapper
2692     function that performs any necessary initialization.  When the use
2693     and definition of the variable are in the same translation unit,
2694     this overhead can be optimized away, but when the use is in a
2695     different translation unit there is significant overhead even if
2696     the variable doesn't actually need dynamic initialization.  If the
2697     programmer can be sure that no use of the variable in a
2698     non-defining TU needs to trigger dynamic initialization (either
2699     because the variable is statically initialized, or a use of the
2700     variable in the defining TU will be executed before any uses in
2701     another TU), they can avoid this overhead with the
2702     '-fno-extern-tls-init' option.
2703
2704     On targets that support symbol aliases, the default is
2705     '-fextern-tls-init'.  On targets that do not support symbol
2706     aliases, the default is '-fno-extern-tls-init'.
2707
2708'-ffor-scope'
2709'-fno-for-scope'
2710     If '-ffor-scope' is specified, the scope of variables declared in a
2711     for-init-statement is limited to the 'for' loop itself, as
2712     specified by the C++ standard.  If '-fno-for-scope' is specified,
2713     the scope of variables declared in a for-init-statement extends to
2714     the end of the enclosing scope, as was the case in old versions of
2715     G++, and other (traditional) implementations of C++.
2716
2717     This option is deprecated and the associated non-standard
2718     functionality will be removed.
2719
2720'-fno-gnu-keywords'
2721     Do not recognize 'typeof' as a keyword, so that code can use this
2722     word as an identifier.  You can use the keyword '__typeof__'
2723     instead.  This option is implied by the strict ISO C++ dialects:
2724     '-ansi', '-std=c++98', '-std=c++11', etc.
2725
2726'-fno-implicit-templates'
2727     Never emit code for non-inline templates that are instantiated
2728     implicitly (i.e. by use); only emit code for explicit
2729     instantiations.  *Note Template Instantiation::, for more
2730     information.
2731
2732'-fno-implicit-inline-templates'
2733     Don't emit code for implicit instantiations of inline templates,
2734     either.  The default is to handle inlines differently so that
2735     compiles with and without optimization need the same set of
2736     explicit instantiations.
2737
2738'-fno-implement-inlines'
2739     To save space, do not emit out-of-line copies of inline functions
2740     controlled by '#pragma implementation'.  This causes linker errors
2741     if these functions are not inlined everywhere they are called.
2742
2743'-fms-extensions'
2744     Disable Wpedantic warnings about constructs used in MFC, such as
2745     implicit int and getting a pointer to member function via
2746     non-standard syntax.
2747
2748'-fnew-inheriting-ctors'
2749     Enable the P0136 adjustment to the semantics of C++11 constructor
2750     inheritance.  This is part of C++17 but also considered to be a
2751     Defect Report against C++11 and C++14.  This flag is enabled by
2752     default unless '-fabi-version=10' or lower is specified.
2753
2754'-fnew-ttp-matching'
2755     Enable the P0522 resolution to Core issue 150, template template
2756     parameters and default arguments: this allows a template with
2757     default template arguments as an argument for a template template
2758     parameter with fewer template parameters.  This flag is enabled by
2759     default for '-std=c++17'.
2760
2761'-fno-nonansi-builtins'
2762     Disable built-in declarations of functions that are not mandated by
2763     ANSI/ISO C.  These include 'ffs', 'alloca', '_exit', 'index',
2764     'bzero', 'conjf', and other related functions.
2765
2766'-fnothrow-opt'
2767     Treat a 'throw()' exception specification as if it were a
2768     'noexcept' specification to reduce or eliminate the text size
2769     overhead relative to a function with no exception specification.
2770     If the function has local variables of types with non-trivial
2771     destructors, the exception specification actually makes the
2772     function smaller because the EH cleanups for those variables can be
2773     optimized away.  The semantic effect is that an exception thrown
2774     out of a function with such an exception specification results in a
2775     call to 'terminate' rather than 'unexpected'.
2776
2777'-fno-operator-names'
2778     Do not treat the operator name keywords 'and', 'bitand', 'bitor',
2779     'compl', 'not', 'or' and 'xor' as synonyms as keywords.
2780
2781'-fno-optional-diags'
2782     Disable diagnostics that the standard says a compiler does not need
2783     to issue.  Currently, the only such diagnostic issued by G++ is the
2784     one for a name having multiple meanings within a class.
2785
2786'-fpermissive'
2787     Downgrade some diagnostics about nonconformant code from errors to
2788     warnings.  Thus, using '-fpermissive' allows some nonconforming
2789     code to compile.
2790
2791'-fno-pretty-templates'
2792     When an error message refers to a specialization of a function
2793     template, the compiler normally prints the signature of the
2794     template followed by the template arguments and any typedefs or
2795     typenames in the signature (e.g.  'void f(T) [with T = int]' rather
2796     than 'void f(int)') so that it's clear which template is involved.
2797     When an error message refers to a specialization of a class
2798     template, the compiler omits any template arguments that match the
2799     default template arguments for that template.  If either of these
2800     behaviors make it harder to understand the error message rather
2801     than easier, you can use '-fno-pretty-templates' to disable them.
2802
2803'-frepo'
2804     Enable automatic template instantiation at link time.  This option
2805     also implies '-fno-implicit-templates'.  *Note Template
2806     Instantiation::, for more information.
2807
2808'-fno-rtti'
2809     Disable generation of information about every class with virtual
2810     functions for use by the C++ run-time type identification features
2811     ('dynamic_cast' and 'typeid').  If you don't use those parts of the
2812     language, you can save some space by using this flag.  Note that
2813     exception handling uses the same information, but G++ generates it
2814     as needed.  The 'dynamic_cast' operator can still be used for casts
2815     that do not require run-time type information, i.e. casts to 'void
2816     *' or to unambiguous base classes.
2817
2818'-fsized-deallocation'
2819     Enable the built-in global declarations
2820          void operator delete (void *, std::size_t) noexcept;
2821          void operator delete[] (void *, std::size_t) noexcept;
2822     as introduced in C++14.  This is useful for user-defined
2823     replacement deallocation functions that, for example, use the size
2824     of the object to make deallocation faster.  Enabled by default
2825     under '-std=c++14' and above.  The flag '-Wsized-deallocation'
2826     warns about places that might want to add a definition.
2827
2828'-fstrict-enums'
2829     Allow the compiler to optimize using the assumption that a value of
2830     enumerated type can only be one of the values of the enumeration
2831     (as defined in the C++ standard; basically, a value that can be
2832     represented in the minimum number of bits needed to represent all
2833     the enumerators).  This assumption may not be valid if the program
2834     uses a cast to convert an arbitrary integer value to the enumerated
2835     type.
2836
2837'-fstrong-eval-order'
2838     Evaluate member access, array subscripting, and shift expressions
2839     in left-to-right order, and evaluate assignment in right-to-left
2840     order, as adopted for C++17.  Enabled by default with '-std=c++17'.
2841     '-fstrong-eval-order=some' enables just the ordering of member
2842     access and shift expressions, and is the default without
2843     '-std=c++17'.
2844
2845'-ftemplate-backtrace-limit=N'
2846     Set the maximum number of template instantiation notes for a single
2847     warning or error to N.  The default value is 10.
2848
2849'-ftemplate-depth=N'
2850     Set the maximum instantiation depth for template classes to N.  A
2851     limit on the template instantiation depth is needed to detect
2852     endless recursions during template class instantiation.  ANSI/ISO
2853     C++ conforming programs must not rely on a maximum depth greater
2854     than 17 (changed to 1024 in C++11).  The default value is 900, as
2855     the compiler can run out of stack space before hitting 1024 in some
2856     situations.
2857
2858'-fno-threadsafe-statics'
2859     Do not emit the extra code to use the routines specified in the C++
2860     ABI for thread-safe initialization of local statics.  You can use
2861     this option to reduce code size slightly in code that doesn't need
2862     to be thread-safe.
2863
2864'-fuse-cxa-atexit'
2865     Register destructors for objects with static storage duration with
2866     the '__cxa_atexit' function rather than the 'atexit' function.
2867     This option is required for fully standards-compliant handling of
2868     static destructors, but only works if your C library supports
2869     '__cxa_atexit'.
2870
2871'-fno-use-cxa-get-exception-ptr'
2872     Don't use the '__cxa_get_exception_ptr' runtime routine.  This
2873     causes 'std::uncaught_exception' to be incorrect, but is necessary
2874     if the runtime routine is not available.
2875
2876'-fvisibility-inlines-hidden'
2877     This switch declares that the user does not attempt to compare
2878     pointers to inline functions or methods where the addresses of the
2879     two functions are taken in different shared objects.
2880
2881     The effect of this is that GCC may, effectively, mark inline
2882     methods with '__attribute__ ((visibility ("hidden")))' so that they
2883     do not appear in the export table of a DSO and do not require a PLT
2884     indirection when used within the DSO.  Enabling this option can
2885     have a dramatic effect on load and link times of a DSO as it
2886     massively reduces the size of the dynamic export table when the
2887     library makes heavy use of templates.
2888
2889     The behavior of this switch is not quite the same as marking the
2890     methods as hidden directly, because it does not affect static
2891     variables local to the function or cause the compiler to deduce
2892     that the function is defined in only one shared object.
2893
2894     You may mark a method as having a visibility explicitly to negate
2895     the effect of the switch for that method.  For example, if you do
2896     want to compare pointers to a particular inline method, you might
2897     mark it as having default visibility.  Marking the enclosing class
2898     with explicit visibility has no effect.
2899
2900     Explicitly instantiated inline methods are unaffected by this
2901     option as their linkage might otherwise cross a shared library
2902     boundary.  *Note Template Instantiation::.
2903
2904'-fvisibility-ms-compat'
2905     This flag attempts to use visibility settings to make GCC's C++
2906     linkage model compatible with that of Microsoft Visual Studio.
2907
2908     The flag makes these changes to GCC's linkage model:
2909
2910       1. It sets the default visibility to 'hidden', like
2911          '-fvisibility=hidden'.
2912
2913       2. Types, but not their members, are not hidden by default.
2914
2915       3. The One Definition Rule is relaxed for types without explicit
2916          visibility specifications that are defined in more than one
2917          shared object: those declarations are permitted if they are
2918          permitted when this option is not used.
2919
2920     In new code it is better to use '-fvisibility=hidden' and export
2921     those classes that are intended to be externally visible.
2922     Unfortunately it is possible for code to rely, perhaps
2923     accidentally, on the Visual Studio behavior.
2924
2925     Among the consequences of these changes are that static data
2926     members of the same type with the same name but defined in
2927     different shared objects are different, so changing one does not
2928     change the other; and that pointers to function members defined in
2929     different shared objects may not compare equal.  When this flag is
2930     given, it is a violation of the ODR to define types with the same
2931     name differently.
2932
2933'-fno-weak'
2934     Do not use weak symbol support, even if it is provided by the
2935     linker.  By default, G++ uses weak symbols if they are available.
2936     This option exists only for testing, and should not be used by
2937     end-users; it results in inferior code and has no benefits.  This
2938     option may be removed in a future release of G++.
2939
2940'-nostdinc++'
2941     Do not search for header files in the standard directories specific
2942     to C++, but do still search the other standard directories.  (This
2943     option is used when building the C++ library.)
2944
2945 In addition, these optimization, warning, and code generation options
2946have meanings only for C++ programs:
2947
2948'-Wabi (C, Objective-C, C++ and Objective-C++ only)'
2949     Warn when G++ it generates code that is probably not compatible
2950     with the vendor-neutral C++ ABI.  Since G++ now defaults to
2951     updating the ABI with each major release, normally '-Wabi' will
2952     warn only if there is a check added later in a release series for
2953     an ABI issue discovered since the initial release.  '-Wabi' will
2954     warn about more things if an older ABI version is selected (with
2955     '-fabi-version=N').
2956
2957     '-Wabi' can also be used with an explicit version number to warn
2958     about compatibility with a particular '-fabi-version' level, e.g.
2959     '-Wabi=2' to warn about changes relative to '-fabi-version=2'.
2960
2961     If an explicit version number is provided and
2962     '-fabi-compat-version' is not specified, the version number from
2963     this option is used for compatibility aliases.  If no explicit
2964     version number is provided with this option, but
2965     '-fabi-compat-version' is specified, that version number is used
2966     for ABI warnings.
2967
2968     Although an effort has been made to warn about all such cases,
2969     there are probably some cases that are not warned about, even
2970     though G++ is generating incompatible code.  There may also be
2971     cases where warnings are emitted even though the code that is
2972     generated is compatible.
2973
2974     You should rewrite your code to avoid these warnings if you are
2975     concerned about the fact that code generated by G++ may not be
2976     binary compatible with code generated by other compilers.
2977
2978     Known incompatibilities in '-fabi-version=2' (which was the default
2979     from GCC 3.4 to 4.9) include:
2980
2981        * A template with a non-type template parameter of reference
2982          type was mangled incorrectly:
2983               extern int N;
2984               template <int &> struct S {};
2985               void n (S<N>) {2}
2986
2987          This was fixed in '-fabi-version=3'.
2988
2989        * SIMD vector types declared using '__attribute ((vector_size))'
2990          were mangled in a non-standard way that does not allow for
2991          overloading of functions taking vectors of different sizes.
2992
2993          The mangling was changed in '-fabi-version=4'.
2994
2995        * '__attribute ((const))' and 'noreturn' were mangled as type
2996          qualifiers, and 'decltype' of a plain declaration was folded
2997          away.
2998
2999          These mangling issues were fixed in '-fabi-version=5'.
3000
3001        * Scoped enumerators passed as arguments to a variadic function
3002          are promoted like unscoped enumerators, causing 'va_arg' to
3003          complain.  On most targets this does not actually affect the
3004          parameter passing ABI, as there is no way to pass an argument
3005          smaller than 'int'.
3006
3007          Also, the ABI changed the mangling of template argument packs,
3008          'const_cast', 'static_cast', prefix increment/decrement, and a
3009          class scope function used as a template argument.
3010
3011          These issues were corrected in '-fabi-version=6'.
3012
3013        * Lambdas in default argument scope were mangled incorrectly,
3014          and the ABI changed the mangling of 'nullptr_t'.
3015
3016          These issues were corrected in '-fabi-version=7'.
3017
3018        * When mangling a function type with function-cv-qualifiers, the
3019          un-qualified function type was incorrectly treated as a
3020          substitution candidate.
3021
3022          This was fixed in '-fabi-version=8', the default for GCC 5.1.
3023
3024        * 'decltype(nullptr)' incorrectly had an alignment of 1, leading
3025          to unaligned accesses.  Note that this did not affect the ABI
3026          of a function with a 'nullptr_t' parameter, as parameters have
3027          a minimum alignment.
3028
3029          This was fixed in '-fabi-version=9', the default for GCC 5.2.
3030
3031        * Target-specific attributes that affect the identity of a type,
3032          such as ia32 calling conventions on a function type (stdcall,
3033          regparm, etc.), did not affect the mangled name, leading to
3034          name collisions when function pointers were used as template
3035          arguments.
3036
3037          This was fixed in '-fabi-version=10', the default for GCC 6.1.
3038
3039     It also warns about psABI-related changes.  The known psABI changes
3040     at this point include:
3041
3042        * For SysV/x86-64, unions with 'long double' members are passed
3043          in memory as specified in psABI. For example:
3044
3045               union U {
3046                 long double ld;
3047                 int i;
3048               };
3049
3050          'union U' is always passed in memory.
3051
3052'-Wabi-tag (C++ and Objective-C++ only)'
3053     Warn when a type with an ABI tag is used in a context that does not
3054     have that ABI tag.  See *note C++ Attributes:: for more information
3055     about ABI tags.
3056
3057'-Wctor-dtor-privacy (C++ and Objective-C++ only)'
3058     Warn when a class seems unusable because all the constructors or
3059     destructors in that class are private, and it has neither friends
3060     nor public static member functions.  Also warn if there are no
3061     non-private methods, and there's at least one private member
3062     function that isn't a constructor or destructor.
3063
3064'-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)'
3065     Warn when 'delete' is used to destroy an instance of a class that
3066     has virtual functions and non-virtual destructor.  It is unsafe to
3067     delete an instance of a derived class through a pointer to a base
3068     class if the base class does not have a virtual destructor.  This
3069     warning is enabled by '-Wall'.
3070
3071'-Wliteral-suffix (C++ and Objective-C++ only)'
3072     Warn when a string or character literal is followed by a ud-suffix
3073     which does not begin with an underscore.  As a conforming
3074     extension, GCC treats such suffixes as separate preprocessing
3075     tokens in order to maintain backwards compatibility with code that
3076     uses formatting macros from '<inttypes.h>'.  For example:
3077
3078          #define __STDC_FORMAT_MACROS
3079          #include <inttypes.h>
3080          #include <stdio.h>
3081
3082          int main() {
3083            int64_t i64 = 123;
3084            printf("My int64: %" PRId64"\n", i64);
3085          }
3086
3087     In this case, 'PRId64' is treated as a separate preprocessing
3088     token.
3089
3090     Additionally, warn when a user-defined literal operator is declared
3091     with a literal suffix identifier that doesn't begin with an
3092     underscore.  Literal suffix identifiers that don't begin with an
3093     underscore are reserved for future standardization.
3094
3095     This warning is enabled by default.
3096
3097'-Wlto-type-mismatch'
3098
3099     During the link-time optimization warn about type mismatches in
3100     global declarations from different compilation units.  Requires
3101     '-flto' to be enabled.  Enabled by default.
3102
3103'-Wno-narrowing (C++ and Objective-C++ only)'
3104     For C++11 and later standards, narrowing conversions are diagnosed
3105     by default, as required by the standard.  A narrowing conversion
3106     from a constant produces an error, and a narrowing conversion from
3107     a non-constant produces a warning, but '-Wno-narrowing' suppresses
3108     the diagnostic.  Note that this does not affect the meaning of
3109     well-formed code; narrowing conversions are still considered
3110     ill-formed in SFINAE contexts.
3111
3112     With '-Wnarrowing' in C++98, warn when a narrowing conversion
3113     prohibited by C++11 occurs within '{ }', e.g.
3114
3115          int i = { 2.2 }; // error: narrowing from double to int
3116
3117     This flag is included in '-Wall' and '-Wc++11-compat'.
3118
3119'-Wnoexcept (C++ and Objective-C++ only)'
3120     Warn when a noexcept-expression evaluates to false because of a
3121     call to a function that does not have a non-throwing exception
3122     specification (i.e.  'throw()' or 'noexcept') but is known by the
3123     compiler to never throw an exception.
3124
3125'-Wnoexcept-type (C++ and Objective-C++ only)'
3126     Warn if the C++17 feature making 'noexcept' part of a function type
3127     changes the mangled name of a symbol relative to C++14.  Enabled by
3128     '-Wabi' and '-Wc++17-compat'.
3129
3130     As an example:
3131
3132          template <class T> void f(T t) { t(); };
3133          void g() noexcept;
3134          void h() { f(g); }
3135
3136     In C++14, 'f' calls 'f<void(*)()>', but in C++17 it calls
3137     'f<void(*)()noexcept>'.
3138
3139'-Wclass-memaccess (C++ and Objective-C++ only)'
3140     Warn when the destination of a call to a raw memory function such
3141     as 'memset' or 'memcpy' is an object of class type, and when
3142     writing into such an object might bypass the class non-trivial or
3143     deleted constructor or copy assignment, violate const-correctness
3144     or encapsulation, or corrupt virtual table pointers.  Modifying the
3145     representation of such objects may violate invariants maintained by
3146     member functions of the class.  For example, the call to 'memset'
3147     below is undefined because it modifies a non-trivial class object
3148     and is, therefore, diagnosed.  The safe way to either initialize or
3149     clear the storage of objects of such types is by using the
3150     appropriate constructor or assignment operator, if one is
3151     available.
3152          std::string str = "abc";
3153          memset (&str, 0, sizeof str);
3154     The '-Wclass-memaccess' option is enabled by '-Wall'.  Explicitly
3155     casting the pointer to the class object to 'void *' or to a type
3156     that can be safely accessed by the raw memory function suppresses
3157     the warning.
3158
3159'-Wnon-virtual-dtor (C++ and Objective-C++ only)'
3160     Warn when a class has virtual functions and an accessible
3161     non-virtual destructor itself or in an accessible polymorphic base
3162     class, in which case it is possible but unsafe to delete an
3163     instance of a derived class through a pointer to the class itself
3164     or base class.  This warning is automatically enabled if '-Weffc++'
3165     is specified.
3166
3167'-Wregister (C++ and Objective-C++ only)'
3168     Warn on uses of the 'register' storage class specifier, except when
3169     it is part of the GNU *note Explicit Register Variables::
3170     extension.  The use of the 'register' keyword as storage class
3171     specifier has been deprecated in C++11 and removed in C++17.
3172     Enabled by default with '-std=c++17'.
3173
3174'-Wreorder (C++ and Objective-C++ only)'
3175     Warn when the order of member initializers given in the code does
3176     not match the order in which they must be executed.  For instance:
3177
3178          struct A {
3179            int i;
3180            int j;
3181            A(): j (0), i (1) { }
3182          };
3183
3184     The compiler rearranges the member initializers for 'i' and 'j' to
3185     match the declaration order of the members, emitting a warning to
3186     that effect.  This warning is enabled by '-Wall'.
3187
3188'-fext-numeric-literals (C++ and Objective-C++ only)'
3189     Accept imaginary, fixed-point, or machine-defined literal number
3190     suffixes as GNU extensions.  When this option is turned off these
3191     suffixes are treated as C++11 user-defined literal numeric
3192     suffixes.  This is on by default for all pre-C++11 dialects and all
3193     GNU dialects: '-std=c++98', '-std=gnu++98', '-std=gnu++11',
3194     '-std=gnu++14'.  This option is off by default for ISO C++11
3195     onwards ('-std=c++11', ...).
3196
3197 The following '-W...' options are not affected by '-Wall'.
3198
3199'-Weffc++ (C++ and Objective-C++ only)'
3200     Warn about violations of the following style guidelines from Scott
3201     Meyers' 'Effective C++' series of books:
3202
3203        * Define a copy constructor and an assignment operator for
3204          classes with dynamically-allocated memory.
3205
3206        * Prefer initialization to assignment in constructors.
3207
3208        * Have 'operator=' return a reference to '*this'.
3209
3210        * Don't try to return a reference when you must return an
3211          object.
3212
3213        * Distinguish between prefix and postfix forms of increment and
3214          decrement operators.
3215
3216        * Never overload '&&', '||', or ','.
3217
3218     This option also enables '-Wnon-virtual-dtor', which is also one of
3219     the effective C++ recommendations.  However, the check is extended
3220     to warn about the lack of virtual destructor in accessible
3221     non-polymorphic bases classes too.
3222
3223     When selecting this option, be aware that the standard library
3224     headers do not obey all of these guidelines; use 'grep -v' to
3225     filter out those warnings.
3226
3227'-Wstrict-null-sentinel (C++ and Objective-C++ only)'
3228     Warn about the use of an uncasted 'NULL' as sentinel.  When
3229     compiling only with GCC this is a valid sentinel, as 'NULL' is
3230     defined to '__null'.  Although it is a null pointer constant rather
3231     than a null pointer, it is guaranteed to be of the same size as a
3232     pointer.  But this use is not portable across different compilers.
3233
3234'-Wno-non-template-friend (C++ and Objective-C++ only)'
3235     Disable warnings when non-template friend functions are declared
3236     within a template.  In very old versions of GCC that predate
3237     implementation of the ISO standard, declarations such as 'friend
3238     int foo(int)', where the name of the friend is an unqualified-id,
3239     could be interpreted as a particular specialization of a template
3240     function; the warning exists to diagnose compatibility problems,
3241     and is enabled by default.
3242
3243'-Wold-style-cast (C++ and Objective-C++ only)'
3244     Warn if an old-style (C-style) cast to a non-void type is used
3245     within a C++ program.  The new-style casts ('dynamic_cast',
3246     'static_cast', 'reinterpret_cast', and 'const_cast') are less
3247     vulnerable to unintended effects and much easier to search for.
3248
3249'-Woverloaded-virtual (C++ and Objective-C++ only)'
3250     Warn when a function declaration hides virtual functions from a
3251     base class.  For example, in:
3252
3253          struct A {
3254            virtual void f();
3255          };
3256
3257          struct B: public A {
3258            void f(int);
3259          };
3260
3261     the 'A' class version of 'f' is hidden in 'B', and code like:
3262
3263          B* b;
3264          b->f();
3265
3266     fails to compile.
3267
3268'-Wno-pmf-conversions (C++ and Objective-C++ only)'
3269     Disable the diagnostic for converting a bound pointer to member
3270     function to a plain pointer.
3271
3272'-Wsign-promo (C++ and Objective-C++ only)'
3273     Warn when overload resolution chooses a promotion from unsigned or
3274     enumerated type to a signed type, over a conversion to an unsigned
3275     type of the same size.  Previous versions of G++ tried to preserve
3276     unsignedness, but the standard mandates the current behavior.
3277
3278'-Wtemplates (C++ and Objective-C++ only)'
3279     Warn when a primary template declaration is encountered.  Some
3280     coding rules disallow templates, and this may be used to enforce
3281     that rule.  The warning is inactive inside a system header file,
3282     such as the STL, so one can still use the STL. One may also
3283     instantiate or specialize templates.
3284
3285'-Wmultiple-inheritance (C++ and Objective-C++ only)'
3286     Warn when a class is defined with multiple direct base classes.
3287     Some coding rules disallow multiple inheritance, and this may be
3288     used to enforce that rule.  The warning is inactive inside a system
3289     header file, such as the STL, so one can still use the STL. One may
3290     also define classes that indirectly use multiple inheritance.
3291
3292'-Wvirtual-inheritance'
3293     Warn when a class is defined with a virtual direct base class.
3294     Some coding rules disallow multiple inheritance, and this may be
3295     used to enforce that rule.  The warning is inactive inside a system
3296     header file, such as the STL, so one can still use the STL. One may
3297     also define classes that indirectly use virtual inheritance.
3298
3299'-Wnamespaces'
3300     Warn when a namespace definition is opened.  Some coding rules
3301     disallow namespaces, and this may be used to enforce that rule.
3302     The warning is inactive inside a system header file, such as the
3303     STL, so one can still use the STL. One may also use using
3304     directives and qualified names.
3305
3306'-Wno-terminate (C++ and Objective-C++ only)'
3307     Disable the warning about a throw-expression that will immediately
3308     result in a call to 'terminate'.
3309
3310
3311File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Diagnostic Message Formatting Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
3312
33133.6 Options Controlling Objective-C and Objective-C++ Dialects
3314==============================================================
3315
3316(NOTE: This manual does not describe the Objective-C and Objective-C++
3317languages themselves.  *Note Language Standards Supported by GCC:
3318Standards, for references.)
3319
3320 This section describes the command-line options that are only
3321meaningful for Objective-C and Objective-C++ programs.  You can also use
3322most of the language-independent GNU compiler options.  For example, you
3323might compile a file 'some_class.m' like this:
3324
3325     gcc -g -fgnu-runtime -O -c some_class.m
3326
3327In this example, '-fgnu-runtime' is an option meant only for Objective-C
3328and Objective-C++ programs; you can use the other options with any
3329language supported by GCC.
3330
3331 Note that since Objective-C is an extension of the C language,
3332Objective-C compilations may also use options specific to the C
3333front-end (e.g., '-Wtraditional').  Similarly, Objective-C++
3334compilations may use C++-specific options (e.g., '-Wabi').
3335
3336 Here is a list of options that are _only_ for compiling Objective-C and
3337Objective-C++ programs:
3338
3339'-fconstant-string-class=CLASS-NAME'
3340     Use CLASS-NAME as the name of the class to instantiate for each
3341     literal string specified with the syntax '@"..."'.  The default
3342     class name is 'NXConstantString' if the GNU runtime is being used,
3343     and 'NSConstantString' if the NeXT runtime is being used (see
3344     below).  The '-fconstant-cfstrings' option, if also present,
3345     overrides the '-fconstant-string-class' setting and cause '@"..."'
3346     literals to be laid out as constant CoreFoundation strings.
3347
3348'-fgnu-runtime'
3349     Generate object code compatible with the standard GNU Objective-C
3350     runtime.  This is the default for most types of systems.
3351
3352'-fnext-runtime'
3353     Generate output compatible with the NeXT runtime.  This is the
3354     default for NeXT-based systems, including Darwin and Mac OS X.  The
3355     macro '__NEXT_RUNTIME__' is predefined if (and only if) this option
3356     is used.
3357
3358'-fno-nil-receivers'
3359     Assume that all Objective-C message dispatches ('[receiver
3360     message:arg]') in this translation unit ensure that the receiver is
3361     not 'nil'.  This allows for more efficient entry points in the
3362     runtime to be used.  This option is only available in conjunction
3363     with the NeXT runtime and ABI version 0 or 1.
3364
3365'-fobjc-abi-version=N'
3366     Use version N of the Objective-C ABI for the selected runtime.
3367     This option is currently supported only for the NeXT runtime.  In
3368     that case, Version 0 is the traditional (32-bit) ABI without
3369     support for properties and other Objective-C 2.0 additions.
3370     Version 1 is the traditional (32-bit) ABI with support for
3371     properties and other Objective-C 2.0 additions.  Version 2 is the
3372     modern (64-bit) ABI. If nothing is specified, the default is
3373     Version 0 on 32-bit target machines, and Version 2 on 64-bit target
3374     machines.
3375
3376'-fobjc-call-cxx-cdtors'
3377     For each Objective-C class, check if any of its instance variables
3378     is a C++ object with a non-trivial default constructor.  If so,
3379     synthesize a special '- (id) .cxx_construct' instance method which
3380     runs non-trivial default constructors on any such instance
3381     variables, in order, and then return 'self'.  Similarly, check if
3382     any instance variable is a C++ object with a non-trivial
3383     destructor, and if so, synthesize a special '- (void)
3384     .cxx_destruct' method which runs all such default destructors, in
3385     reverse order.
3386
3387     The '- (id) .cxx_construct' and '- (void) .cxx_destruct' methods
3388     thusly generated only operate on instance variables declared in the
3389     current Objective-C class, and not those inherited from
3390     superclasses.  It is the responsibility of the Objective-C runtime
3391     to invoke all such methods in an object's inheritance hierarchy.
3392     The '- (id) .cxx_construct' methods are invoked by the runtime
3393     immediately after a new object instance is allocated; the '- (void)
3394     .cxx_destruct' methods are invoked immediately before the runtime
3395     deallocates an object instance.
3396
3397     As of this writing, only the NeXT runtime on Mac OS X 10.4 and
3398     later has support for invoking the '- (id) .cxx_construct' and '-
3399     (void) .cxx_destruct' methods.
3400
3401'-fobjc-direct-dispatch'
3402     Allow fast jumps to the message dispatcher.  On Darwin this is
3403     accomplished via the comm page.
3404
3405'-fobjc-exceptions'
3406     Enable syntactic support for structured exception handling in
3407     Objective-C, similar to what is offered by C++.  This option is
3408     required to use the Objective-C keywords '@try', '@throw',
3409     '@catch', '@finally' and '@synchronized'.  This option is available
3410     with both the GNU runtime and the NeXT runtime (but not available
3411     in conjunction with the NeXT runtime on Mac OS X 10.2 and earlier).
3412
3413'-fobjc-gc'
3414     Enable garbage collection (GC) in Objective-C and Objective-C++
3415     programs.  This option is only available with the NeXT runtime; the
3416     GNU runtime has a different garbage collection implementation that
3417     does not require special compiler flags.
3418
3419'-fobjc-nilcheck'
3420     For the NeXT runtime with version 2 of the ABI, check for a nil
3421     receiver in method invocations before doing the actual method call.
3422     This is the default and can be disabled using '-fno-objc-nilcheck'.
3423     Class methods and super calls are never checked for nil in this way
3424     no matter what this flag is set to.  Currently this flag does
3425     nothing when the GNU runtime, or an older version of the NeXT
3426     runtime ABI, is used.
3427
3428'-fobjc-std=objc1'
3429     Conform to the language syntax of Objective-C 1.0, the language
3430     recognized by GCC 4.0.  This only affects the Objective-C additions
3431     to the C/C++ language; it does not affect conformance to C/C++
3432     standards, which is controlled by the separate C/C++ dialect option
3433     flags.  When this option is used with the Objective-C or
3434     Objective-C++ compiler, any Objective-C syntax that is not
3435     recognized by GCC 4.0 is rejected.  This is useful if you need to
3436     make sure that your Objective-C code can be compiled with older
3437     versions of GCC.
3438
3439'-freplace-objc-classes'
3440     Emit a special marker instructing 'ld(1)' not to statically link in
3441     the resulting object file, and allow 'dyld(1)' to load it in at run
3442     time instead.  This is used in conjunction with the
3443     Fix-and-Continue debugging mode, where the object file in question
3444     may be recompiled and dynamically reloaded in the course of program
3445     execution, without the need to restart the program itself.
3446     Currently, Fix-and-Continue functionality is only available in
3447     conjunction with the NeXT runtime on Mac OS X 10.3 and later.
3448
3449'-fzero-link'
3450     When compiling for the NeXT runtime, the compiler ordinarily
3451     replaces calls to 'objc_getClass("...")' (when the name of the
3452     class is known at compile time) with static class references that
3453     get initialized at load time, which improves run-time performance.
3454     Specifying the '-fzero-link' flag suppresses this behavior and
3455     causes calls to 'objc_getClass("...")' to be retained.  This is
3456     useful in Zero-Link debugging mode, since it allows for individual
3457     class implementations to be modified during program execution.  The
3458     GNU runtime currently always retains calls to
3459     'objc_get_class("...")' regardless of command-line options.
3460
3461'-fno-local-ivars'
3462     By default instance variables in Objective-C can be accessed as if
3463     they were local variables from within the methods of the class
3464     they're declared in.  This can lead to shadowing between instance
3465     variables and other variables declared either locally inside a
3466     class method or globally with the same name.  Specifying the
3467     '-fno-local-ivars' flag disables this behavior thus avoiding
3468     variable shadowing issues.
3469
3470'-fivar-visibility=[public|protected|private|package]'
3471     Set the default instance variable visibility to the specified
3472     option so that instance variables declared outside the scope of any
3473     access modifier directives default to the specified visibility.
3474
3475'-gen-decls'
3476     Dump interface declarations for all classes seen in the source file
3477     to a file named 'SOURCENAME.decl'.
3478
3479'-Wassign-intercept (Objective-C and Objective-C++ only)'
3480     Warn whenever an Objective-C assignment is being intercepted by the
3481     garbage collector.
3482
3483'-Wno-protocol (Objective-C and Objective-C++ only)'
3484     If a class is declared to implement a protocol, a warning is issued
3485     for every method in the protocol that is not implemented by the
3486     class.  The default behavior is to issue a warning for every method
3487     not explicitly implemented in the class, even if a method
3488     implementation is inherited from the superclass.  If you use the
3489     '-Wno-protocol' option, then methods inherited from the superclass
3490     are considered to be implemented, and no warning is issued for
3491     them.
3492
3493'-Wselector (Objective-C and Objective-C++ only)'
3494     Warn if multiple methods of different types for the same selector
3495     are found during compilation.  The check is performed on the list
3496     of methods in the final stage of compilation.  Additionally, a
3497     check is performed for each selector appearing in a
3498     '@selector(...)' expression, and a corresponding method for that
3499     selector has been found during compilation.  Because these checks
3500     scan the method table only at the end of compilation, these
3501     warnings are not produced if the final stage of compilation is not
3502     reached, for example because an error is found during compilation,
3503     or because the '-fsyntax-only' option is being used.
3504
3505'-Wstrict-selector-match (Objective-C and Objective-C++ only)'
3506     Warn if multiple methods with differing argument and/or return
3507     types are found for a given selector when attempting to send a
3508     message using this selector to a receiver of type 'id' or 'Class'.
3509     When this flag is off (which is the default behavior), the compiler
3510     omits such warnings if any differences found are confined to types
3511     that share the same size and alignment.
3512
3513'-Wundeclared-selector (Objective-C and Objective-C++ only)'
3514     Warn if a '@selector(...)' expression referring to an undeclared
3515     selector is found.  A selector is considered undeclared if no
3516     method with that name has been declared before the '@selector(...)'
3517     expression, either explicitly in an '@interface' or '@protocol'
3518     declaration, or implicitly in an '@implementation' section.  This
3519     option always performs its checks as soon as a '@selector(...)'
3520     expression is found, while '-Wselector' only performs its checks in
3521     the final stage of compilation.  This also enforces the coding
3522     style convention that methods and selectors must be declared before
3523     being used.
3524
3525'-print-objc-runtime-info'
3526     Generate C header describing the largest structure that is passed
3527     by value, if any.
3528
3529
3530File: gcc.info,  Node: Diagnostic Message Formatting Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
3531
35323.7 Options to Control Diagnostic Messages Formatting
3533=====================================================
3534
3535Traditionally, diagnostic messages have been formatted irrespective of
3536the output device's aspect (e.g. its width, ...).  You can use the
3537options described below to control the formatting algorithm for
3538diagnostic messages, e.g. how many characters per line, how often source
3539location information should be reported.  Note that some language front
3540ends may not honor these options.
3541
3542'-fmessage-length=N'
3543     Try to format error messages so that they fit on lines of about N
3544     characters.  If N is zero, then no line-wrapping is done; each
3545     error message appears on a single line.  This is the default for
3546     all front ends.
3547
3548'-fdiagnostics-show-location=once'
3549     Only meaningful in line-wrapping mode.  Instructs the diagnostic
3550     messages reporter to emit source location information _once_; that
3551     is, in case the message is too long to fit on a single physical
3552     line and has to be wrapped, the source location won't be emitted
3553     (as prefix) again, over and over, in subsequent continuation lines.
3554     This is the default behavior.
3555
3556'-fdiagnostics-show-location=every-line'
3557     Only meaningful in line-wrapping mode.  Instructs the diagnostic
3558     messages reporter to emit the same source location information (as
3559     prefix) for physical lines that result from the process of breaking
3560     a message which is too long to fit on a single line.
3561
3562'-fdiagnostics-color[=WHEN]'
3563'-fno-diagnostics-color'
3564     Use color in diagnostics.  WHEN is 'never', 'always', or 'auto'.
3565     The default depends on how the compiler has been configured, it can
3566     be any of the above WHEN options or also 'never' if 'GCC_COLORS'
3567     environment variable isn't present in the environment, and 'auto'
3568     otherwise.  'auto' means to use color only when the standard error
3569     is a terminal.  The forms '-fdiagnostics-color' and
3570     '-fno-diagnostics-color' are aliases for
3571     '-fdiagnostics-color=always' and '-fdiagnostics-color=never',
3572     respectively.
3573
3574     The colors are defined by the environment variable 'GCC_COLORS'.
3575     Its value is a colon-separated list of capabilities and Select
3576     Graphic Rendition (SGR) substrings.  SGR commands are interpreted
3577     by the terminal or terminal emulator.  (See the section in the
3578     documentation of your text terminal for permitted values and their
3579     meanings as character attributes.)  These substring values are
3580     integers in decimal representation and can be concatenated with
3581     semicolons.  Common values to concatenate include '1' for bold, '4'
3582     for underline, '5' for blink, '7' for inverse, '39' for default
3583     foreground color, '30' to '37' for foreground colors, '90' to '97'
3584     for 16-color mode foreground colors, '38;5;0' to '38;5;255' for
3585     88-color and 256-color modes foreground colors, '49' for default
3586     background color, '40' to '47' for background colors, '100' to
3587     '107' for 16-color mode background colors, and '48;5;0' to
3588     '48;5;255' for 88-color and 256-color modes background colors.
3589
3590     The default 'GCC_COLORS' is
3591          error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\
3592          quote=01:fixit-insert=32:fixit-delete=31:\
3593          diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\
3594          type-diff=01;32
3595     where '01;31' is bold red, '01;35' is bold magenta, '01;36' is bold
3596     cyan, '32' is green, '34' is blue, '01' is bold, and '31' is red.
3597     Setting 'GCC_COLORS' to the empty string disables colors.
3598     Supported capabilities are as follows.
3599
3600     'error='
3601          SGR substring for error: markers.
3602
3603     'warning='
3604          SGR substring for warning: markers.
3605
3606     'note='
3607          SGR substring for note: markers.
3608
3609     'range1='
3610          SGR substring for first additional range.
3611
3612     'range2='
3613          SGR substring for second additional range.
3614
3615     'locus='
3616          SGR substring for location information, 'file:line' or
3617          'file:line:column' etc.
3618
3619     'quote='
3620          SGR substring for information printed within quotes.
3621
3622     'fixit-insert='
3623          SGR substring for fix-it hints suggesting text to be inserted
3624          or replaced.
3625
3626     'fixit-delete='
3627          SGR substring for fix-it hints suggesting text to be deleted.
3628
3629     'diff-filename='
3630          SGR substring for filename headers within generated patches.
3631
3632     'diff-hunk='
3633          SGR substring for the starts of hunks within generated
3634          patches.
3635
3636     'diff-delete='
3637          SGR substring for deleted lines within generated patches.
3638
3639     'diff-insert='
3640          SGR substring for inserted lines within generated patches.
3641
3642     'type-diff='
3643          SGR substring for highlighting mismatching types within
3644          template arguments in the C++ frontend.
3645
3646'-fno-diagnostics-show-option'
3647     By default, each diagnostic emitted includes text indicating the
3648     command-line option that directly controls the diagnostic (if such
3649     an option is known to the diagnostic machinery).  Specifying the
3650     '-fno-diagnostics-show-option' flag suppresses that behavior.
3651
3652'-fno-diagnostics-show-caret'
3653     By default, each diagnostic emitted includes the original source
3654     line and a caret '^' indicating the column.  This option suppresses
3655     this information.  The source line is truncated to N characters, if
3656     the '-fmessage-length=n' option is given.  When the output is done
3657     to the terminal, the width is limited to the width given by the
3658     'COLUMNS' environment variable or, if not set, to the terminal
3659     width.
3660
3661'-fdiagnostics-parseable-fixits'
3662     Emit fix-it hints in a machine-parseable format, suitable for
3663     consumption by IDEs.  For each fix-it, a line will be printed after
3664     the relevant diagnostic, starting with the string "fix-it:".  For
3665     example:
3666
3667          fix-it:"test.c":{45:3-45:21}:"gtk_widget_show_all"
3668
3669     The location is expressed as a half-open range, expressed as a
3670     count of bytes, starting at byte 1 for the initial column.  In the
3671     above example, bytes 3 through 20 of line 45 of "test.c" are to be
3672     replaced with the given string:
3673
3674          00000000011111111112222222222
3675          12345678901234567890123456789
3676            gtk_widget_showall (dlg);
3677            ^^^^^^^^^^^^^^^^^^
3678            gtk_widget_show_all
3679
3680     The filename and replacement string escape backslash as "\\", tab
3681     as "\t", newline as "\n", double quotes as "\"", non-printable
3682     characters as octal (e.g.  vertical tab as "\013").
3683
3684     An empty replacement string indicates that the given range is to be
3685     removed.  An empty range (e.g.  "45:3-45:3") indicates that the
3686     string is to be inserted at the given position.
3687
3688'-fdiagnostics-generate-patch'
3689     Print fix-it hints to stderr in unified diff format, after any
3690     diagnostics are printed.  For example:
3691
3692          --- test.c
3693          +++ test.c
3694          @ -42,5 +42,5 @
3695
3696           void show_cb(GtkDialog *dlg)
3697           {
3698          -  gtk_widget_showall(dlg);
3699          +  gtk_widget_show_all(dlg);
3700           }
3701
3702
3703     The diff may or may not be colorized, following the same rules as
3704     for diagnostics (see '-fdiagnostics-color').
3705
3706'-fdiagnostics-show-template-tree'
3707
3708     In the C++ frontend, when printing diagnostics showing mismatching
3709     template types, such as:
3710
3711            could not convert 'std::map<int, std::vector<double> >()'
3712              from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
3713
3714     the '-fdiagnostics-show-template-tree' flag enables printing a
3715     tree-like structure showing the common and differing parts of the
3716     types, such as:
3717
3718            map<
3719              [...],
3720              vector<
3721                [double != float]>>
3722
3723     The parts that differ are highlighted with color ("double" and
3724     "float" in this case).
3725
3726'-fno-elide-type'
3727     By default when the C++ frontend prints diagnostics showing
3728     mismatching template types, common parts of the types are printed
3729     as "[...]"  to simplify the error message.  For example:
3730
3731            could not convert 'std::map<int, std::vector<double> >()'
3732              from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
3733
3734     Specifying the '-fno-elide-type' flag suppresses that behavior.
3735     This flag also affects the output of the
3736     '-fdiagnostics-show-template-tree' flag.
3737
3738'-fno-show-column'
3739     Do not print column numbers in diagnostics.  This may be necessary
3740     if diagnostics are being scanned by a program that does not
3741     understand the column numbers, such as 'dejagnu'.
3742
3743
3744File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Diagnostic Message Formatting Options,  Up: Invoking GCC
3745
37463.8 Options to Request or Suppress Warnings
3747===========================================
3748
3749Warnings are diagnostic messages that report constructions that are not
3750inherently erroneous but that are risky or suggest there may have been
3751an error.
3752
3753 The following language-independent options do not enable specific
3754warnings but control the kinds of diagnostics produced by GCC.
3755
3756'-fsyntax-only'
3757     Check the code for syntax errors, but don't do anything beyond
3758     that.
3759
3760'-fmax-errors=N'
3761     Limits the maximum number of error messages to N, at which point
3762     GCC bails out rather than attempting to continue processing the
3763     source code.  If N is 0 (the default), there is no limit on the
3764     number of error messages produced.  If '-Wfatal-errors' is also
3765     specified, then '-Wfatal-errors' takes precedence over this option.
3766
3767'-w'
3768     Inhibit all warning messages.
3769
3770'-Werror'
3771     Make all warnings into errors.
3772
3773'-Werror='
3774     Make the specified warning into an error.  The specifier for a
3775     warning is appended; for example '-Werror=switch' turns the
3776     warnings controlled by '-Wswitch' into errors.  This switch takes a
3777     negative form, to be used to negate '-Werror' for specific
3778     warnings; for example '-Wno-error=switch' makes '-Wswitch' warnings
3779     not be errors, even when '-Werror' is in effect.
3780
3781     The warning message for each controllable warning includes the
3782     option that controls the warning.  That option can then be used
3783     with '-Werror=' and '-Wno-error=' as described above.  (Printing of
3784     the option in the warning message can be disabled using the
3785     '-fno-diagnostics-show-option' flag.)
3786
3787     Note that specifying '-Werror='FOO automatically implies '-W'FOO.
3788     However, '-Wno-error='FOO does not imply anything.
3789
3790'-Wfatal-errors'
3791     This option causes the compiler to abort compilation on the first
3792     error occurred rather than trying to keep going and printing
3793     further error messages.
3794
3795 You can request many specific warnings with options beginning with
3796'-W', for example '-Wimplicit' to request warnings on implicit
3797declarations.  Each of these specific warning options also has a
3798negative form beginning '-Wno-' to turn off warnings; for example,
3799'-Wno-implicit'.  This manual lists only one of the two forms, whichever
3800is not the default.  For further language-specific options also refer to
3801*note C++ Dialect Options:: and *note Objective-C and Objective-C++
3802Dialect Options::.
3803
3804 Some options, such as '-Wall' and '-Wextra', turn on other options,
3805such as '-Wunused', which may turn on further options, such as
3806'-Wunused-value'.  The combined effect of positive and negative forms is
3807that more specific options have priority over less specific ones,
3808independently of their position in the command-line.  For options of the
3809same specificity, the last one takes effect.  Options enabled or
3810disabled via pragmas (*note Diagnostic Pragmas::) take effect as if they
3811appeared at the end of the command-line.
3812
3813 When an unrecognized warning option is requested (e.g.,
3814'-Wunknown-warning'), GCC emits a diagnostic stating that the option is
3815not recognized.  However, if the '-Wno-' form is used, the behavior is
3816slightly different: no diagnostic is produced for '-Wno-unknown-warning'
3817unless other diagnostics are being produced.  This allows the use of new
3818'-Wno-' options with old compilers, but if something goes wrong, the
3819compiler warns that an unrecognized option is present.
3820
3821'-Wpedantic'
3822'-pedantic'
3823     Issue all the warnings demanded by strict ISO C and ISO C++; reject
3824     all programs that use forbidden extensions, and some other programs
3825     that do not follow ISO C and ISO C++.  For ISO C, follows the
3826     version of the ISO C standard specified by any '-std' option used.
3827
3828     Valid ISO C and ISO C++ programs should compile properly with or
3829     without this option (though a rare few require '-ansi' or a '-std'
3830     option specifying the required version of ISO C).  However, without
3831     this option, certain GNU extensions and traditional C and C++
3832     features are supported as well.  With this option, they are
3833     rejected.
3834
3835     '-Wpedantic' does not cause warning messages for use of the
3836     alternate keywords whose names begin and end with '__'.  Pedantic
3837     warnings are also disabled in the expression that follows
3838     '__extension__'.  However, only system header files should use
3839     these escape routes; application programs should avoid them.  *Note
3840     Alternate Keywords::.
3841
3842     Some users try to use '-Wpedantic' to check programs for strict ISO
3843     C conformance.  They soon find that it does not do quite what they
3844     want: it finds some non-ISO practices, but not all--only those for
3845     which ISO C _requires_ a diagnostic, and some others for which
3846     diagnostics have been added.
3847
3848     A feature to report any failure to conform to ISO C might be useful
3849     in some instances, but would require considerable additional work
3850     and would be quite different from '-Wpedantic'.  We don't have
3851     plans to support such a feature in the near future.
3852
3853     Where the standard specified with '-std' represents a GNU extended
3854     dialect of C, such as 'gnu90' or 'gnu99', there is a corresponding
3855     "base standard", the version of ISO C on which the GNU extended
3856     dialect is based.  Warnings from '-Wpedantic' are given where they
3857     are required by the base standard.  (It does not make sense for
3858     such warnings to be given only for features not in the specified
3859     GNU C dialect, since by definition the GNU dialects of C include
3860     all features the compiler supports with the given option, and there
3861     would be nothing to warn about.)
3862
3863'-pedantic-errors'
3864     Give an error whenever the "base standard" (see '-Wpedantic')
3865     requires a diagnostic, in some cases where there is undefined
3866     behavior at compile-time and in some other cases that do not
3867     prevent compilation of programs that are valid according to the
3868     standard.  This is not equivalent to '-Werror=pedantic', since
3869     there are errors enabled by this option and not enabled by the
3870     latter and vice versa.
3871
3872'-Wall'
3873     This enables all the warnings about constructions that some users
3874     consider questionable, and that are easy to avoid (or modify to
3875     prevent the warning), even in conjunction with macros.  This also
3876     enables some language-specific warnings described in *note C++
3877     Dialect Options:: and *note Objective-C and Objective-C++ Dialect
3878     Options::.
3879
3880     '-Wall' turns on the following warning flags:
3881
3882          -Waddress
3883          -Warray-bounds=1 (only with -O2)
3884          -Wbool-compare
3885          -Wbool-operation
3886          -Wc++11-compat  -Wc++14-compat
3887          -Wcatch-value (C++ and Objective-C++ only)
3888          -Wchar-subscripts
3889          -Wcomment
3890          -Wduplicate-decl-specifier (C and Objective-C only)
3891          -Wenum-compare (in C/ObjC; this is on by default in C++)
3892          -Wformat
3893          -Wint-in-bool-context
3894          -Wimplicit (C and Objective-C only)
3895          -Wimplicit-int (C and Objective-C only)
3896          -Wimplicit-function-declaration (C and Objective-C only)
3897          -Winit-self (only for C++)
3898          -Wlogical-not-parentheses
3899          -Wmain (only for C/ObjC and unless -ffreestanding)
3900          -Wmaybe-uninitialized
3901          -Wmemset-elt-size
3902          -Wmemset-transposed-args
3903          -Wmisleading-indentation (only for C/C++)
3904          -Wmissing-attributes
3905          -Wmissing-braces (only for C/ObjC)
3906          -Wmultistatement-macros
3907          -Wnarrowing (only for C++)
3908          -Wnonnull
3909          -Wnonnull-compare
3910          -Wopenmp-simd
3911          -Wparentheses
3912          -Wpointer-sign
3913          -Wreorder
3914          -Wrestrict
3915          -Wreturn-type
3916          -Wsequence-point
3917          -Wsign-compare (only in C++)
3918          -Wsizeof-pointer-div
3919          -Wsizeof-pointer-memaccess
3920          -Wstrict-aliasing
3921          -Wstrict-overflow=1
3922          -Wstringop-truncation
3923          -Wswitch
3924          -Wtautological-compare
3925          -Wtrigraphs
3926          -Wuninitialized
3927          -Wunknown-pragmas
3928          -Wunused-function
3929          -Wunused-label
3930          -Wunused-value
3931          -Wunused-variable
3932          -Wvolatile-register-var
3933
3934
3935     Note that some warning flags are not implied by '-Wall'.  Some of
3936     them warn about constructions that users generally do not consider
3937     questionable, but which occasionally you might wish to check for;
3938     others warn about constructions that are necessary or hard to avoid
3939     in some cases, and there is no simple way to modify the code to
3940     suppress the warning.  Some of them are enabled by '-Wextra' but
3941     many of them must be enabled individually.
3942
3943'-Wextra'
3944     This enables some extra warning flags that are not enabled by
3945     '-Wall'.  (This option used to be called '-W'.  The older name is
3946     still supported, but the newer name is more descriptive.)
3947
3948          -Wclobbered
3949          -Wcast-function-type
3950          -Wempty-body
3951          -Wignored-qualifiers
3952          -Wimplicit-fallthrough=3
3953          -Wmissing-field-initializers
3954          -Wmissing-parameter-type (C only)
3955          -Wold-style-declaration (C only)
3956          -Woverride-init
3957          -Wsign-compare (C only)
3958          -Wtype-limits
3959          -Wuninitialized
3960          -Wshift-negative-value (in C++03 and in C99 and newer)
3961          -Wunused-parameter (only with -Wunused or -Wall)
3962          -Wunused-but-set-parameter (only with -Wunused or -Wall)
3963
3964
3965     The option '-Wextra' also prints warning messages for the following
3966     cases:
3967
3968        * A pointer is compared against integer zero with '<', '<=',
3969          '>', or '>='.
3970
3971        * (C++ only) An enumerator and a non-enumerator both appear in a
3972          conditional expression.
3973
3974        * (C++ only) Ambiguous virtual bases.
3975
3976        * (C++ only) Subscripting an array that has been declared
3977          'register'.
3978
3979        * (C++ only) Taking the address of a variable that has been
3980          declared 'register'.
3981
3982        * (C++ only) A base class is not initialized in the copy
3983          constructor of a derived class.
3984
3985'-Wchar-subscripts'
3986     Warn if an array subscript has type 'char'.  This is a common cause
3987     of error, as programmers often forget that this type is signed on
3988     some machines.  This warning is enabled by '-Wall'.
3989
3990'-Wchkp'
3991     Warn about an invalid memory access that is found by Pointer Bounds
3992     Checker ('-fcheck-pointer-bounds').
3993
3994'-Wno-coverage-mismatch'
3995     Warn if feedback profiles do not match when using the
3996     '-fprofile-use' option.  If a source file is changed between
3997     compiling with '-fprofile-gen' and with '-fprofile-use', the files
3998     with the profile feedback can fail to match the source file and GCC
3999     cannot use the profile feedback information.  By default, this
4000     warning is enabled and is treated as an error.
4001     '-Wno-coverage-mismatch' can be used to disable the warning or
4002     '-Wno-error=coverage-mismatch' can be used to disable the error.
4003     Disabling the error for this warning can result in poorly optimized
4004     code and is useful only in the case of very minor changes such as
4005     bug fixes to an existing code-base.  Completely disabling the
4006     warning is not recommended.
4007
4008'-Wno-cpp'
4009     (C, Objective-C, C++, Objective-C++ and Fortran only)
4010
4011     Suppress warning messages emitted by '#warning' directives.
4012
4013'-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)'
4014     Give a warning when a value of type 'float' is implicitly promoted
4015     to 'double'.  CPUs with a 32-bit "single-precision" floating-point
4016     unit implement 'float' in hardware, but emulate 'double' in
4017     software.  On such a machine, doing computations using 'double'
4018     values is much more expensive because of the overhead required for
4019     software emulation.
4020
4021     It is easy to accidentally do computations with 'double' because
4022     floating-point literals are implicitly of type 'double'.  For
4023     example, in:
4024          float area(float radius)
4025          {
4026             return 3.14159 * radius * radius;
4027          }
4028     the compiler performs the entire computation with 'double' because
4029     the floating-point literal is a 'double'.
4030
4031'-Wduplicate-decl-specifier (C and Objective-C only)'
4032     Warn if a declaration has duplicate 'const', 'volatile', 'restrict'
4033     or '_Atomic' specifier.  This warning is enabled by '-Wall'.
4034
4035'-Wformat'
4036'-Wformat=N'
4037     Check calls to 'printf' and 'scanf', etc., to make sure that the
4038     arguments supplied have types appropriate to the format string
4039     specified, and that the conversions specified in the format string
4040     make sense.  This includes standard functions, and others specified
4041     by format attributes (*note Function Attributes::), in the
4042     'printf', 'scanf', 'strftime' and 'strfmon' (an X/Open extension,
4043     not in the C standard) families (or other target-specific
4044     families).  Which functions are checked without format attributes
4045     having been specified depends on the standard version selected, and
4046     such checks of functions without the attribute specified are
4047     disabled by '-ffreestanding' or '-fno-builtin'.
4048
4049     The formats are checked against the format features supported by
4050     GNU libc version 2.2.  These include all ISO C90 and C99 features,
4051     as well as features from the Single Unix Specification and some BSD
4052     and GNU extensions.  Other library implementations may not support
4053     all these features; GCC does not support warning about features
4054     that go beyond a particular library's limitations.  However, if
4055     '-Wpedantic' is used with '-Wformat', warnings are given about
4056     format features not in the selected standard version (but not for
4057     'strfmon' formats, since those are not in any version of the C
4058     standard).  *Note Options Controlling C Dialect: C Dialect Options.
4059
4060     '-Wformat=1'
4061     '-Wformat'
4062          Option '-Wformat' is equivalent to '-Wformat=1', and
4063          '-Wno-format' is equivalent to '-Wformat=0'.  Since '-Wformat'
4064          also checks for null format arguments for several functions,
4065          '-Wformat' also implies '-Wnonnull'.  Some aspects of this
4066          level of format checking can be disabled by the options:
4067          '-Wno-format-contains-nul', '-Wno-format-extra-args', and
4068          '-Wno-format-zero-length'.  '-Wformat' is enabled by '-Wall'.
4069
4070     '-Wno-format-contains-nul'
4071          If '-Wformat' is specified, do not warn about format strings
4072          that contain NUL bytes.
4073
4074     '-Wno-format-extra-args'
4075          If '-Wformat' is specified, do not warn about excess arguments
4076          to a 'printf' or 'scanf' format function.  The C standard
4077          specifies that such arguments are ignored.
4078
4079          Where the unused arguments lie between used arguments that are
4080          specified with '$' operand number specifications, normally
4081          warnings are still given, since the implementation could not
4082          know what type to pass to 'va_arg' to skip the unused
4083          arguments.  However, in the case of 'scanf' formats, this
4084          option suppresses the warning if the unused arguments are all
4085          pointers, since the Single Unix Specification says that such
4086          unused arguments are allowed.
4087
4088     '-Wformat-overflow'
4089     '-Wformat-overflow=LEVEL'
4090          Warn about calls to formatted input/output functions such as
4091          'sprintf' and 'vsprintf' that might overflow the destination
4092          buffer.  When the exact number of bytes written by a format
4093          directive cannot be determined at compile-time it is estimated
4094          based on heuristics that depend on the LEVEL argument and on
4095          optimization.  While enabling optimization will in most cases
4096          improve the accuracy of the warning, it may also result in
4097          false positives.
4098
4099          '-Wformat-overflow'
4100          '-Wformat-overflow=1'
4101               Level 1 of '-Wformat-overflow' enabled by '-Wformat'
4102               employs a conservative approach that warns only about
4103               calls that most likely overflow the buffer.  At this
4104               level, numeric arguments to format directives with
4105               unknown values are assumed to have the value of one, and
4106               strings of unknown length to be empty.  Numeric arguments
4107               that are known to be bounded to a subrange of their type,
4108               or string arguments whose output is bounded either by
4109               their directive's precision or by a finite set of string
4110               literals, are assumed to take on the value within the
4111               range that results in the most bytes on output.  For
4112               example, the call to 'sprintf' below is diagnosed because
4113               even with both A and B equal to zero, the terminating NUL
4114               character (''\0'') appended by the function to the
4115               destination buffer will be written past its end.
4116               Increasing the size of the buffer by a single byte is
4117               sufficient to avoid the warning, though it may not be
4118               sufficient to avoid the overflow.
4119
4120                    void f (int a, int b)
4121                    {
4122                      char buf [13];
4123                      sprintf (buf, "a = %i, b = %i\n", a, b);
4124                    }
4125
4126          '-Wformat-overflow=2'
4127               Level 2 warns also about calls that might overflow the
4128               destination buffer given an argument of sufficient length
4129               or magnitude.  At level 2, unknown numeric arguments are
4130               assumed to have the minimum representable value for
4131               signed types with a precision greater than 1, and the
4132               maximum representable value otherwise.  Unknown string
4133               arguments whose length cannot be assumed to be bounded
4134               either by the directive's precision, or by a finite set
4135               of string literals they may evaluate to, or the character
4136               array they may point to, are assumed to be 1 character
4137               long.
4138
4139               At level 2, the call in the example above is again
4140               diagnosed, but this time because with A equal to a 32-bit
4141               'INT_MIN' the first '%i' directive will write some of its
4142               digits beyond the end of the destination buffer.  To make
4143               the call safe regardless of the values of the two
4144               variables, the size of the destination buffer must be
4145               increased to at least 34 bytes.  GCC includes the minimum
4146               size of the buffer in an informational note following the
4147               warning.
4148
4149               An alternative to increasing the size of the destination
4150               buffer is to constrain the range of formatted values.
4151               The maximum length of string arguments can be bounded by
4152               specifying the precision in the format directive.  When
4153               numeric arguments of format directives can be assumed to
4154               be bounded by less than the precision of their type,
4155               choosing an appropriate length modifier to the format
4156               specifier will reduce the required buffer size.  For
4157               example, if A and B in the example above can be assumed
4158               to be within the precision of the 'short int' type then
4159               using either the '%hi' format directive or casting the
4160               argument to 'short' reduces the maximum required size of
4161               the buffer to 24 bytes.
4162
4163                    void f (int a, int b)
4164                    {
4165                      char buf [23];
4166                      sprintf (buf, "a = %hi, b = %i\n", a, (short)b);
4167                    }
4168
4169     '-Wno-format-zero-length'
4170          If '-Wformat' is specified, do not warn about zero-length
4171          formats.  The C standard specifies that zero-length formats
4172          are allowed.
4173
4174     '-Wformat=2'
4175          Enable '-Wformat' plus additional format checks.  Currently
4176          equivalent to '-Wformat -Wformat-nonliteral -Wformat-security
4177          -Wformat-y2k'.
4178
4179     '-Wformat-nonliteral'
4180          If '-Wformat' is specified, also warn if the format string is
4181          not a string literal and so cannot be checked, unless the
4182          format function takes its format arguments as a 'va_list'.
4183
4184     '-Wformat-security'
4185          If '-Wformat' is specified, also warn about uses of format
4186          functions that represent possible security problems.  At
4187          present, this warns about calls to 'printf' and 'scanf'
4188          functions where the format string is not a string literal and
4189          there are no format arguments, as in 'printf (foo);'.  This
4190          may be a security hole if the format string came from
4191          untrusted input and contains '%n'.  (This is currently a
4192          subset of what '-Wformat-nonliteral' warns about, but in
4193          future warnings may be added to '-Wformat-security' that are
4194          not included in '-Wformat-nonliteral'.)
4195
4196     '-Wformat-signedness'
4197          If '-Wformat' is specified, also warn if the format string
4198          requires an unsigned argument and the argument is signed and
4199          vice versa.
4200
4201     '-Wformat-truncation'
4202     '-Wformat-truncation=LEVEL'
4203          Warn about calls to formatted input/output functions such as
4204          'snprintf' and 'vsnprintf' that might result in output
4205          truncation.  When the exact number of bytes written by a
4206          format directive cannot be determined at compile-time it is
4207          estimated based on heuristics that depend on the LEVEL
4208          argument and on optimization.  While enabling optimization
4209          will in most cases improve the accuracy of the warning, it may
4210          also result in false positives.  Except as noted otherwise,
4211          the option uses the same logic '-Wformat-overflow'.
4212
4213          '-Wformat-truncation'
4214          '-Wformat-truncation=1'
4215               Level 1 of '-Wformat-truncation' enabled by '-Wformat'
4216               employs a conservative approach that warns only about
4217               calls to bounded functions whose return value is unused
4218               and that will most likely result in output truncation.
4219
4220          '-Wformat-truncation=2'
4221               Level 2 warns also about calls to bounded functions whose
4222               return value is used and that might result in truncation
4223               given an argument of sufficient length or magnitude.
4224
4225     '-Wformat-y2k'
4226          If '-Wformat' is specified, also warn about 'strftime' formats
4227          that may yield only a two-digit year.
4228
4229'-Wnonnull'
4230     Warn about passing a null pointer for arguments marked as requiring
4231     a non-null value by the 'nonnull' function attribute.
4232
4233     '-Wnonnull' is included in '-Wall' and '-Wformat'.  It can be
4234     disabled with the '-Wno-nonnull' option.
4235
4236'-Wnonnull-compare'
4237     Warn when comparing an argument marked with the 'nonnull' function
4238     attribute against null inside the function.
4239
4240     '-Wnonnull-compare' is included in '-Wall'.  It can be disabled
4241     with the '-Wno-nonnull-compare' option.
4242
4243'-Wnull-dereference'
4244     Warn if the compiler detects paths that trigger erroneous or
4245     undefined behavior due to dereferencing a null pointer.  This
4246     option is only active when '-fdelete-null-pointer-checks' is
4247     active, which is enabled by optimizations in most targets.  The
4248     precision of the warnings depends on the optimization options used.
4249
4250'-Winit-self (C, C++, Objective-C and Objective-C++ only)'
4251     Warn about uninitialized variables that are initialized with
4252     themselves.  Note this option can only be used with the
4253     '-Wuninitialized' option.
4254
4255     For example, GCC warns about 'i' being uninitialized in the
4256     following snippet only when '-Winit-self' has been specified:
4257          int f()
4258          {
4259            int i = i;
4260            return i;
4261          }
4262
4263     This warning is enabled by '-Wall' in C++.
4264
4265'-Wimplicit-int (C and Objective-C only)'
4266     Warn when a declaration does not specify a type.  This warning is
4267     enabled by '-Wall'.
4268
4269'-Wimplicit-function-declaration (C and Objective-C only)'
4270     Give a warning whenever a function is used before being declared.
4271     In C99 mode ('-std=c99' or '-std=gnu99'), this warning is enabled
4272     by default and it is made into an error by '-pedantic-errors'.
4273     This warning is also enabled by '-Wall'.
4274
4275'-Wimplicit (C and Objective-C only)'
4276     Same as '-Wimplicit-int' and '-Wimplicit-function-declaration'.
4277     This warning is enabled by '-Wall'.
4278
4279'-Wimplicit-fallthrough'
4280     '-Wimplicit-fallthrough' is the same as '-Wimplicit-fallthrough=3'
4281     and '-Wno-implicit-fallthrough' is the same as
4282     '-Wimplicit-fallthrough=0'.
4283
4284'-Wimplicit-fallthrough=N'
4285     Warn when a switch case falls through.  For example:
4286
4287          switch (cond)
4288            {
4289            case 1:
4290              a = 1;
4291              break;
4292            case 2:
4293              a = 2;
4294            case 3:
4295              a = 3;
4296              break;
4297            }
4298
4299     This warning does not warn when the last statement of a case cannot
4300     fall through, e.g.  when there is a return statement or a call to
4301     function declared with the noreturn attribute.
4302     '-Wimplicit-fallthrough=' also takes into account control flow
4303     statements, such as ifs, and only warns when appropriate.  E.g.
4304
4305          switch (cond)
4306            {
4307            case 1:
4308              if (i > 3) {
4309                bar (5);
4310                break;
4311              } else if (i < 1) {
4312                bar (0);
4313              } else
4314                return;
4315            default:
4316              ...
4317            }
4318
4319     Since there are occasions where a switch case fall through is
4320     desirable, GCC provides an attribute, '__attribute__
4321     ((fallthrough))', that is to be used along with a null statement to
4322     suppress this warning that would normally occur:
4323
4324          switch (cond)
4325            {
4326            case 1:
4327              bar (0);
4328              __attribute__ ((fallthrough));
4329            default:
4330              ...
4331            }
4332
4333     C++17 provides a standard way to suppress the
4334     '-Wimplicit-fallthrough' warning using '[[fallthrough]];' instead
4335     of the GNU attribute.  In C++11 or C++14 users can use
4336     '[[gnu::fallthrough]];', which is a GNU extension.  Instead of
4337     these attributes, it is also possible to add a fallthrough comment
4338     to silence the warning.  The whole body of the C or C++ style
4339     comment should match the given regular expressions listed below.
4340     The option argument N specifies what kind of comments are accepted:
4341
4342        * '-Wimplicit-fallthrough=0' disables the warning altogether.
4343
4344        * '-Wimplicit-fallthrough=1' matches '.*' regular expression,
4345          any comment is used as fallthrough comment.
4346
4347        * '-Wimplicit-fallthrough=2' case insensitively matches
4348          '.*falls?[ \t-]*thr(ough|u).*' regular expression.
4349
4350        * '-Wimplicit-fallthrough=3' case sensitively matches one of the
4351          following regular expressions:
4352
4353             * '-fallthrough'
4354
4355             * '@fallthrough@'
4356
4357             * 'lint -fallthrough[ \t]*'
4358
4359             * '[ \t.!]*(ELSE,? |INTENTIONAL(LY)? )?
4360               FALL(S | |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?'
4361
4362             * '[ \t.!]*(Else,? |Intentional(ly)? )?
4363               Fall((s | |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?'
4364
4365             * '[ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?
4366               fall(s | |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?'
4367
4368        * '-Wimplicit-fallthrough=4' case sensitively matches one of the
4369          following regular expressions:
4370
4371             * '-fallthrough'
4372
4373             * '@fallthrough@'
4374
4375             * 'lint -fallthrough[ \t]*'
4376
4377             * '[ \t]*FALLTHR(OUGH|U)[ \t]*'
4378
4379        * '-Wimplicit-fallthrough=5' doesn't recognize any comments as
4380          fallthrough comments, only attributes disable the warning.
4381
4382     The comment needs to be followed after optional whitespace and
4383     other comments by 'case' or 'default' keywords or by a user label
4384     that precedes some 'case' or 'default' label.
4385
4386          switch (cond)
4387            {
4388            case 1:
4389              bar (0);
4390              /* FALLTHRU */
4391            default:
4392              ...
4393            }
4394
4395     The '-Wimplicit-fallthrough=3' warning is enabled by '-Wextra'.
4396
4397'-Wif-not-aligned (C, C++, Objective-C and Objective-C++ only)'
4398     Control if warning triggered by the 'warn_if_not_aligned' attribute
4399     should be issued.  This is enabled by default.  Use
4400     '-Wno-if-not-aligned' to disable it.
4401
4402'-Wignored-qualifiers (C and C++ only)'
4403     Warn if the return type of a function has a type qualifier such as
4404     'const'.  For ISO C such a type qualifier has no effect, since the
4405     value returned by a function is not an lvalue.  For C++, the
4406     warning is only emitted for scalar types or 'void'.  ISO C
4407     prohibits qualified 'void' return types on function definitions, so
4408     such return types always receive a warning even without this
4409     option.
4410
4411     This warning is also enabled by '-Wextra'.
4412
4413'-Wignored-attributes (C and C++ only)'
4414     Warn when an attribute is ignored.  This is different from the
4415     '-Wattributes' option in that it warns whenever the compiler
4416     decides to drop an attribute, not that the attribute is either
4417     unknown, used in a wrong place, etc.  This warning is enabled by
4418     default.
4419
4420'-Wmain'
4421     Warn if the type of 'main' is suspicious.  'main' should be a
4422     function with external linkage, returning int, taking either zero
4423     arguments, two, or three arguments of appropriate types.  This
4424     warning is enabled by default in C++ and is enabled by either
4425     '-Wall' or '-Wpedantic'.
4426
4427'-Wmisleading-indentation (C and C++ only)'
4428     Warn when the indentation of the code does not reflect the block
4429     structure.  Specifically, a warning is issued for 'if', 'else',
4430     'while', and 'for' clauses with a guarded statement that does not
4431     use braces, followed by an unguarded statement with the same
4432     indentation.
4433
4434     In the following example, the call to "bar" is misleadingly
4435     indented as if it were guarded by the "if" conditional.
4436
4437            if (some_condition ())
4438              foo ();
4439              bar ();  /* Gotcha: this is not guarded by the "if".  */
4440
4441     In the case of mixed tabs and spaces, the warning uses the
4442     '-ftabstop=' option to determine if the statements line up
4443     (defaulting to 8).
4444
4445     The warning is not issued for code involving multiline preprocessor
4446     logic such as the following example.
4447
4448            if (flagA)
4449              foo (0);
4450          #if SOME_CONDITION_THAT_DOES_NOT_HOLD
4451            if (flagB)
4452          #endif
4453              foo (1);
4454
4455     The warning is not issued after a '#line' directive, since this
4456     typically indicates autogenerated code, and no assumptions can be
4457     made about the layout of the file that the directive references.
4458
4459     This warning is enabled by '-Wall' in C and C++.
4460
4461'-Wmissing-attributes'
4462     Warn when a declaration of a function is missing one or more
4463     attributes that a related function is declared with and whose
4464     absence may adversely affect the correctness or efficiency of
4465     generated code.  For example, in C++, the warning is issued when an
4466     explicit specialization of a primary template declared with
4467     attribute 'alloc_align', 'alloc_size', 'assume_aligned', 'format',
4468     'format_arg', 'malloc', or 'nonnull' is declared without it.
4469     Attributes 'deprecated', 'error', and 'warning' suppress the
4470     warning.  (*note Function Attributes::).
4471
4472     '-Wmissing-attributes' is enabled by '-Wall'.
4473
4474     For example, since the declaration of the primary function template
4475     below makes use of both attribute 'malloc' and 'alloc_size' the
4476     declaration of the explicit specialization of the template is
4477     diagnosed because it is missing one of the attributes.
4478
4479          template <class T>
4480          T* __attribute__ ((malloc, alloc_size (1)))
4481          allocate (size_t);
4482
4483          template <>
4484          void* __attribute__ ((malloc))   // missing alloc_size
4485          allocate<void> (size_t);
4486
4487'-Wmissing-braces'
4488     Warn if an aggregate or union initializer is not fully bracketed.
4489     In the following example, the initializer for 'a' is not fully
4490     bracketed, but that for 'b' is fully bracketed.  This warning is
4491     enabled by '-Wall' in C.
4492
4493          int a[2][2] = { 0, 1, 2, 3 };
4494          int b[2][2] = { { 0, 1 }, { 2, 3 } };
4495
4496     This warning is enabled by '-Wall'.
4497
4498'-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
4499     Warn if a user-supplied include directory does not exist.
4500
4501'-Wmultistatement-macros'
4502     Warn about unsafe multiple statement macros that appear to be
4503     guarded by a clause such as 'if', 'else', 'for', 'switch', or
4504     'while', in which only the first statement is actually guarded
4505     after the macro is expanded.
4506
4507     For example:
4508
4509          #define DOIT x++; y++
4510          if (c)
4511            DOIT;
4512
4513     will increment 'y' unconditionally, not just when 'c' holds.  The
4514     can usually be fixed by wrapping the macro in a do-while loop:
4515          #define DOIT do { x++; y++; } while (0)
4516          if (c)
4517            DOIT;
4518
4519     This warning is enabled by '-Wall' in C and C++.
4520
4521'-Wparentheses'
4522     Warn if parentheses are omitted in certain contexts, such as when
4523     there is an assignment in a context where a truth value is
4524     expected, or when operators are nested whose precedence people
4525     often get confused about.
4526
4527     Also warn if a comparison like 'x<=y<=z' appears; this is
4528     equivalent to '(x<=y ? 1 : 0) <= z', which is a different
4529     interpretation from that of ordinary mathematical notation.
4530
4531     Also warn for dangerous uses of the GNU extension to '?:' with
4532     omitted middle operand.  When the condition in the '?': operator is
4533     a boolean expression, the omitted value is always 1.  Often
4534     programmers expect it to be a value computed inside the conditional
4535     expression instead.
4536
4537     For C++ this also warns for some cases of unnecessary parentheses
4538     in declarations, which can indicate an attempt at a function call
4539     instead of a declaration:
4540          {
4541            // Declares a local variable called mymutex.
4542            std::unique_lock<std::mutex> (mymutex);
4543            // User meant std::unique_lock<std::mutex> lock (mymutex);
4544          }
4545
4546     This warning is enabled by '-Wall'.
4547
4548'-Wsequence-point'
4549     Warn about code that may have undefined semantics because of
4550     violations of sequence point rules in the C and C++ standards.
4551
4552     The C and C++ standards define the order in which expressions in a
4553     C/C++ program are evaluated in terms of "sequence points", which
4554     represent a partial ordering between the execution of parts of the
4555     program: those executed before the sequence point, and those
4556     executed after it.  These occur after the evaluation of a full
4557     expression (one which is not part of a larger expression), after
4558     the evaluation of the first operand of a '&&', '||', '? :' or ','
4559     (comma) operator, before a function is called (but after the
4560     evaluation of its arguments and the expression denoting the called
4561     function), and in certain other places.  Other than as expressed by
4562     the sequence point rules, the order of evaluation of subexpressions
4563     of an expression is not specified.  All these rules describe only a
4564     partial order rather than a total order, since, for example, if two
4565     functions are called within one expression with no sequence point
4566     between them, the order in which the functions are called is not
4567     specified.  However, the standards committee have ruled that
4568     function calls do not overlap.
4569
4570     It is not specified when between sequence points modifications to
4571     the values of objects take effect.  Programs whose behavior depends
4572     on this have undefined behavior; the C and C++ standards specify
4573     that "Between the previous and next sequence point an object shall
4574     have its stored value modified at most once by the evaluation of an
4575     expression.  Furthermore, the prior value shall be read only to
4576     determine the value to be stored.".  If a program breaks these
4577     rules, the results on any particular implementation are entirely
4578     unpredictable.
4579
4580     Examples of code with undefined behavior are 'a = a++;', 'a[n] =
4581     b[n++]' and 'a[i++] = i;'.  Some more complicated cases are not
4582     diagnosed by this option, and it may give an occasional false
4583     positive result, but in general it has been found fairly effective
4584     at detecting this sort of problem in programs.
4585
4586     The C++17 standard will define the order of evaluation of operands
4587     in more cases: in particular it requires that the right-hand side
4588     of an assignment be evaluated before the left-hand side, so the
4589     above examples are no longer undefined.  But this warning will
4590     still warn about them, to help people avoid writing code that is
4591     undefined in C and earlier revisions of C++.
4592
4593     The standard is worded confusingly, therefore there is some debate
4594     over the precise meaning of the sequence point rules in subtle
4595     cases.  Links to discussions of the problem, including proposed
4596     formal definitions, may be found on the GCC readings page, at
4597     <http://gcc.gnu.org/readings.html>.
4598
4599     This warning is enabled by '-Wall' for C and C++.
4600
4601'-Wno-return-local-addr'
4602     Do not warn about returning a pointer (or in C++, a reference) to a
4603     variable that goes out of scope after the function returns.
4604
4605'-Wreturn-type'
4606     Warn whenever a function is defined with a return type that
4607     defaults to 'int'.  Also warn about any 'return' statement with no
4608     return value in a function whose return type is not 'void' (falling
4609     off the end of the function body is considered returning without a
4610     value).
4611
4612     For C only, warn about a 'return' statement with an expression in a
4613     function whose return type is 'void', unless the expression type is
4614     also 'void'.  As a GNU extension, the latter case is accepted
4615     without a warning unless '-Wpedantic' is used.
4616
4617     For C++, a function without return type always produces a
4618     diagnostic message, even when '-Wno-return-type' is specified.  The
4619     only exceptions are 'main' and functions defined in system headers.
4620
4621     This warning is enabled by default for C++ and is enabled by
4622     '-Wall'.
4623
4624'-Wshift-count-negative'
4625     Warn if shift count is negative.  This warning is enabled by
4626     default.
4627
4628'-Wshift-count-overflow'
4629     Warn if shift count >= width of type.  This warning is enabled by
4630     default.
4631
4632'-Wshift-negative-value'
4633     Warn if left shifting a negative value.  This warning is enabled by
4634     '-Wextra' in C99 and C++11 modes (and newer).
4635
4636'-Wshift-overflow'
4637'-Wshift-overflow=N'
4638     Warn about left shift overflows.  This warning is enabled by
4639     default in C99 and C++11 modes (and newer).
4640
4641     '-Wshift-overflow=1'
4642          This is the warning level of '-Wshift-overflow' and is enabled
4643          by default in C99 and C++11 modes (and newer).  This warning
4644          level does not warn about left-shifting 1 into the sign bit.
4645          (However, in C, such an overflow is still rejected in contexts
4646          where an integer constant expression is required.)
4647
4648     '-Wshift-overflow=2'
4649          This warning level also warns about left-shifting 1 into the
4650          sign bit, unless C++14 mode is active.
4651
4652'-Wswitch'
4653     Warn whenever a 'switch' statement has an index of enumerated type
4654     and lacks a 'case' for one or more of the named codes of that
4655     enumeration.  (The presence of a 'default' label prevents this
4656     warning.)  'case' labels outside the enumeration range also provoke
4657     warnings when this option is used (even if there is a 'default'
4658     label).  This warning is enabled by '-Wall'.
4659
4660'-Wswitch-default'
4661     Warn whenever a 'switch' statement does not have a 'default' case.
4662
4663'-Wswitch-enum'
4664     Warn whenever a 'switch' statement has an index of enumerated type
4665     and lacks a 'case' for one or more of the named codes of that
4666     enumeration.  'case' labels outside the enumeration range also
4667     provoke warnings when this option is used.  The only difference
4668     between '-Wswitch' and this option is that this option gives a
4669     warning about an omitted enumeration code even if there is a
4670     'default' label.
4671
4672'-Wswitch-bool'
4673     Warn whenever a 'switch' statement has an index of boolean type and
4674     the case values are outside the range of a boolean type.  It is
4675     possible to suppress this warning by casting the controlling
4676     expression to a type other than 'bool'.  For example:
4677          switch ((int) (a == 4))
4678            {
4679            ...
4680            }
4681     This warning is enabled by default for C and C++ programs.
4682
4683'-Wswitch-unreachable'
4684     Warn whenever a 'switch' statement contains statements between the
4685     controlling expression and the first case label, which will never
4686     be executed.  For example:
4687          switch (cond)
4688            {
4689             i = 15;
4690            ...
4691             case 5:
4692            ...
4693            }
4694     '-Wswitch-unreachable' does not warn if the statement between the
4695     controlling expression and the first case label is just a
4696     declaration:
4697          switch (cond)
4698            {
4699             int i;
4700            ...
4701             case 5:
4702             i = 5;
4703            ...
4704            }
4705     This warning is enabled by default for C and C++ programs.
4706
4707'-Wsync-nand (C and C++ only)'
4708     Warn when '__sync_fetch_and_nand' and '__sync_nand_and_fetch'
4709     built-in functions are used.  These functions changed semantics in
4710     GCC 4.4.
4711
4712'-Wunused-but-set-parameter'
4713     Warn whenever a function parameter is assigned to, but otherwise
4714     unused (aside from its declaration).
4715
4716     To suppress this warning use the 'unused' attribute (*note Variable
4717     Attributes::).
4718
4719     This warning is also enabled by '-Wunused' together with '-Wextra'.
4720
4721'-Wunused-but-set-variable'
4722     Warn whenever a local variable is assigned to, but otherwise unused
4723     (aside from its declaration).  This warning is enabled by '-Wall'.
4724
4725     To suppress this warning use the 'unused' attribute (*note Variable
4726     Attributes::).
4727
4728     This warning is also enabled by '-Wunused', which is enabled by
4729     '-Wall'.
4730
4731'-Wunused-function'
4732     Warn whenever a static function is declared but not defined or a
4733     non-inline static function is unused.  This warning is enabled by
4734     '-Wall'.
4735
4736'-Wunused-label'
4737     Warn whenever a label is declared but not used.  This warning is
4738     enabled by '-Wall'.
4739
4740     To suppress this warning use the 'unused' attribute (*note Variable
4741     Attributes::).
4742
4743'-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)'
4744     Warn when a typedef locally defined in a function is not used.
4745     This warning is enabled by '-Wall'.
4746
4747'-Wunused-parameter'
4748     Warn whenever a function parameter is unused aside from its
4749     declaration.
4750
4751     To suppress this warning use the 'unused' attribute (*note Variable
4752     Attributes::).
4753
4754'-Wno-unused-result'
4755     Do not warn if a caller of a function marked with attribute
4756     'warn_unused_result' (*note Function Attributes::) does not use its
4757     return value.  The default is '-Wunused-result'.
4758
4759'-Wunused-variable'
4760     Warn whenever a local or static variable is unused aside from its
4761     declaration.  This option implies '-Wunused-const-variable=1' for
4762     C, but not for C++.  This warning is enabled by '-Wall'.
4763
4764     To suppress this warning use the 'unused' attribute (*note Variable
4765     Attributes::).
4766
4767'-Wunused-const-variable'
4768'-Wunused-const-variable=N'
4769     Warn whenever a constant static variable is unused aside from its
4770     declaration.  '-Wunused-const-variable=1' is enabled by
4771     '-Wunused-variable' for C, but not for C++.  In C this declares
4772     variable storage, but in C++ this is not an error since const
4773     variables take the place of '#define's.
4774
4775     To suppress this warning use the 'unused' attribute (*note Variable
4776     Attributes::).
4777
4778     '-Wunused-const-variable=1'
4779          This is the warning level that is enabled by
4780          '-Wunused-variable' for C. It warns only about unused static
4781          const variables defined in the main compilation unit, but not
4782          about static const variables declared in any header included.
4783
4784     '-Wunused-const-variable=2'
4785          This warning level also warns for unused constant static
4786          variables in headers (excluding system headers).  This is the
4787          warning level of '-Wunused-const-variable' and must be
4788          explicitly requested since in C++ this isn't an error and in C
4789          it might be harder to clean up all headers included.
4790
4791'-Wunused-value'
4792     Warn whenever a statement computes a result that is explicitly not
4793     used.  To suppress this warning cast the unused expression to
4794     'void'.  This includes an expression-statement or the left-hand
4795     side of a comma expression that contains no side effects.  For
4796     example, an expression such as 'x[i,j]' causes a warning, while
4797     'x[(void)i,j]' does not.
4798
4799     This warning is enabled by '-Wall'.
4800
4801'-Wunused'
4802     All the above '-Wunused' options combined.
4803
4804     In order to get a warning about an unused function parameter, you
4805     must either specify '-Wextra -Wunused' (note that '-Wall' implies
4806     '-Wunused'), or separately specify '-Wunused-parameter'.
4807
4808'-Wuninitialized'
4809     Warn if an automatic variable is used without first being
4810     initialized or if a variable may be clobbered by a 'setjmp' call.
4811     In C++, warn if a non-static reference or non-static 'const' member
4812     appears in a class without constructors.
4813
4814     If you want to warn about code that uses the uninitialized value of
4815     the variable in its own initializer, use the '-Winit-self' option.
4816
4817     These warnings occur for individual uninitialized or clobbered
4818     elements of structure, union or array variables as well as for
4819     variables that are uninitialized or clobbered as a whole.  They do
4820     not occur for variables or elements declared 'volatile'.  Because
4821     these warnings depend on optimization, the exact variables or
4822     elements for which there are warnings depends on the precise
4823     optimization options and version of GCC used.
4824
4825     Note that there may be no warning about a variable that is used
4826     only to compute a value that itself is never used, because such
4827     computations may be deleted by data flow analysis before the
4828     warnings are printed.
4829
4830'-Winvalid-memory-model'
4831     Warn for invocations of *note __atomic Builtins::, *note __sync
4832     Builtins::, and the C11 atomic generic functions with a memory
4833     consistency argument that is either invalid for the operation or
4834     outside the range of values of the 'memory_order' enumeration.  For
4835     example, since the '__atomic_store' and '__atomic_store_n'
4836     built-ins are only defined for the relaxed, release, and
4837     sequentially consistent memory orders the following code is
4838     diagnosed:
4839
4840          void store (int *i)
4841          {
4842            __atomic_store_n (i, 0, memory_order_consume);
4843          }
4844
4845     '-Winvalid-memory-model' is enabled by default.
4846
4847'-Wmaybe-uninitialized'
4848     For an automatic (i.e. local) variable, if there exists a path from
4849     the function entry to a use of the variable that is initialized,
4850     but there exist some other paths for which the variable is not
4851     initialized, the compiler emits a warning if it cannot prove the
4852     uninitialized paths are not executed at run time.
4853
4854     These warnings are only possible in optimizing compilation, because
4855     otherwise GCC does not keep track of the state of variables.
4856
4857     These warnings are made optional because GCC may not be able to
4858     determine when the code is correct in spite of appearing to have an
4859     error.  Here is one example of how this can happen:
4860
4861          {
4862            int x;
4863            switch (y)
4864              {
4865              case 1: x = 1;
4866                break;
4867              case 2: x = 4;
4868                break;
4869              case 3: x = 5;
4870              }
4871            foo (x);
4872          }
4873
4874     If the value of 'y' is always 1, 2 or 3, then 'x' is always
4875     initialized, but GCC doesn't know this.  To suppress the warning,
4876     you need to provide a default case with assert(0) or similar code.
4877
4878     This option also warns when a non-volatile automatic variable might
4879     be changed by a call to 'longjmp'.  The compiler sees only the
4880     calls to 'setjmp'.  It cannot know where 'longjmp' will be called;
4881     in fact, a signal handler could call it at any point in the code.
4882     As a result, you may get a warning even when there is in fact no
4883     problem because 'longjmp' cannot in fact be called at the place
4884     that would cause a problem.
4885
4886     Some spurious warnings can be avoided if you declare all the
4887     functions you use that never return as 'noreturn'.  *Note Function
4888     Attributes::.
4889
4890     This warning is enabled by '-Wall' or '-Wextra'.
4891
4892'-Wunknown-pragmas'
4893     Warn when a '#pragma' directive is encountered that is not
4894     understood by GCC.  If this command-line option is used, warnings
4895     are even issued for unknown pragmas in system header files.  This
4896     is not the case if the warnings are only enabled by the '-Wall'
4897     command-line option.
4898
4899'-Wno-pragmas'
4900     Do not warn about misuses of pragmas, such as incorrect parameters,
4901     invalid syntax, or conflicts between pragmas.  See also
4902     '-Wunknown-pragmas'.
4903
4904'-Wstrict-aliasing'
4905     This option is only active when '-fstrict-aliasing' is active.  It
4906     warns about code that might break the strict aliasing rules that
4907     the compiler is using for optimization.  The warning does not catch
4908     all cases, but does attempt to catch the more common pitfalls.  It
4909     is included in '-Wall'.  It is equivalent to '-Wstrict-aliasing=3'
4910
4911'-Wstrict-aliasing=n'
4912     This option is only active when '-fstrict-aliasing' is active.  It
4913     warns about code that might break the strict aliasing rules that
4914     the compiler is using for optimization.  Higher levels correspond
4915     to higher accuracy (fewer false positives).  Higher levels also
4916     correspond to more effort, similar to the way '-O' works.
4917     '-Wstrict-aliasing' is equivalent to '-Wstrict-aliasing=3'.
4918
4919     Level 1: Most aggressive, quick, least accurate.  Possibly useful
4920     when higher levels do not warn but '-fstrict-aliasing' still breaks
4921     the code, as it has very few false negatives.  However, it has many
4922     false positives.  Warns for all pointer conversions between
4923     possibly incompatible types, even if never dereferenced.  Runs in
4924     the front end only.
4925
4926     Level 2: Aggressive, quick, not too precise.  May still have many
4927     false positives (not as many as level 1 though), and few false
4928     negatives (but possibly more than level 1).  Unlike level 1, it
4929     only warns when an address is taken.  Warns about incomplete types.
4930     Runs in the front end only.
4931
4932     Level 3 (default for '-Wstrict-aliasing'): Should have very few
4933     false positives and few false negatives.  Slightly slower than
4934     levels 1 or 2 when optimization is enabled.  Takes care of the
4935     common pun+dereference pattern in the front end:
4936     '*(int*)&some_float'.  If optimization is enabled, it also runs in
4937     the back end, where it deals with multiple statement cases using
4938     flow-sensitive points-to information.  Only warns when the
4939     converted pointer is dereferenced.  Does not warn about incomplete
4940     types.
4941
4942'-Wstrict-overflow'
4943'-Wstrict-overflow=N'
4944     This option is only active when signed overflow is undefined.  It
4945     warns about cases where the compiler optimizes based on the
4946     assumption that signed overflow does not occur.  Note that it does
4947     not warn about all cases where the code might overflow: it only
4948     warns about cases where the compiler implements some optimization.
4949     Thus this warning depends on the optimization level.
4950
4951     An optimization that assumes that signed overflow does not occur is
4952     perfectly safe if the values of the variables involved are such
4953     that overflow never does, in fact, occur.  Therefore this warning
4954     can easily give a false positive: a warning about code that is not
4955     actually a problem.  To help focus on important issues, several
4956     warning levels are defined.  No warnings are issued for the use of
4957     undefined signed overflow when estimating how many iterations a
4958     loop requires, in particular when determining whether a loop will
4959     be executed at all.
4960
4961     '-Wstrict-overflow=1'
4962          Warn about cases that are both questionable and easy to avoid.
4963          For example the compiler simplifies 'x + 1 > x' to '1'.  This
4964          level of '-Wstrict-overflow' is enabled by '-Wall'; higher
4965          levels are not, and must be explicitly requested.
4966
4967     '-Wstrict-overflow=2'
4968          Also warn about other cases where a comparison is simplified
4969          to a constant.  For example: 'abs (x) >= 0'.  This can only be
4970          simplified when signed integer overflow is undefined, because
4971          'abs (INT_MIN)' overflows to 'INT_MIN', which is less than
4972          zero.  '-Wstrict-overflow' (with no level) is the same as
4973          '-Wstrict-overflow=2'.
4974
4975     '-Wstrict-overflow=3'
4976          Also warn about other cases where a comparison is simplified.
4977          For example: 'x + 1 > 1' is simplified to 'x > 0'.
4978
4979     '-Wstrict-overflow=4'
4980          Also warn about other simplifications not covered by the above
4981          cases.  For example: '(x * 10) / 5' is simplified to 'x * 2'.
4982
4983     '-Wstrict-overflow=5'
4984          Also warn about cases where the compiler reduces the magnitude
4985          of a constant involved in a comparison.  For example: 'x + 2 >
4986          y' is simplified to 'x + 1 >= y'.  This is reported only at
4987          the highest warning level because this simplification applies
4988          to many comparisons, so this warning level gives a very large
4989          number of false positives.
4990
4991'-Wstringop-overflow'
4992'-Wstringop-overflow=TYPE'
4993     Warn for calls to string manipulation functions such as 'memcpy'
4994     and 'strcpy' that are determined to overflow the destination
4995     buffer.  The optional argument is one greater than the type of
4996     Object Size Checking to perform to determine the size of the
4997     destination.  *Note Object Size Checking::.  The argument is
4998     meaningful only for functions that operate on character arrays but
4999     not for raw memory functions like 'memcpy' which always make use of
5000     Object Size type-0.  The option also warns for calls that specify a
5001     size in excess of the largest possible object or at most 'SIZE_MAX
5002     / 2' bytes.  The option produces the best results with optimization
5003     enabled but can detect a small subset of simple buffer overflows
5004     even without optimization in calls to the GCC built-in functions
5005     like '__builtin_memcpy' that correspond to the standard functions.
5006     In any case, the option warns about just a subset of buffer
5007     overflows detected by the corresponding overflow checking
5008     built-ins.  For example, the option will issue a warning for the
5009     'strcpy' call below because it copies at least 5 characters (the
5010     string '"blue"' including the terminating NUL) into the buffer of
5011     size 4.
5012
5013          enum Color { blue, purple, yellow };
5014          const char* f (enum Color clr)
5015          {
5016            static char buf [4];
5017            const char *str;
5018            switch (clr)
5019              {
5020                case blue: str = "blue"; break;
5021                case purple: str = "purple"; break;
5022                case yellow: str = "yellow"; break;
5023              }
5024
5025            return strcpy (buf, str);   // warning here
5026          }
5027
5028     Option '-Wstringop-overflow=2' is enabled by default.
5029
5030     '-Wstringop-overflow'
5031     '-Wstringop-overflow=1'
5032          The '-Wstringop-overflow=1' option uses type-zero Object Size
5033          Checking to determine the sizes of destination objects.  This
5034          is the default setting of the option.  At this setting the
5035          option will not warn for writes past the end of subobjects of
5036          larger objects accessed by pointers unless the size of the
5037          largest surrounding object is known.  When the destination may
5038          be one of several objects it is assumed to be the largest one
5039          of them.  On Linux systems, when optimization is enabled at
5040          this setting the option warns for the same code as when the
5041          '_FORTIFY_SOURCE' macro is defined to a non-zero value.
5042
5043     '-Wstringop-overflow=2'
5044          The '-Wstringop-overflow=2' option uses type-one Object Size
5045          Checking to determine the sizes of destination objects.  At
5046          this setting the option will warn about overflows when writing
5047          to members of the largest complete objects whose exact size is
5048          known.  It will, however, not warn for excessive writes to the
5049          same members of unknown objects referenced by pointers since
5050          they may point to arrays containing unknown numbers of
5051          elements.
5052
5053     '-Wstringop-overflow=3'
5054          The '-Wstringop-overflow=3' option uses type-two Object Size
5055          Checking to determine the sizes of destination objects.  At
5056          this setting the option warns about overflowing the smallest
5057          object or data member.  This is the most restrictive setting
5058          of the option that may result in warnings for safe code.
5059
5060     '-Wstringop-overflow=4'
5061          The '-Wstringop-overflow=4' option uses type-three Object Size
5062          Checking to determine the sizes of destination objects.  At
5063          this setting the option will warn about overflowing any data
5064          members, and when the destination is one of several objects it
5065          uses the size of the largest of them to decide whether to
5066          issue a warning.  Similarly to '-Wstringop-overflow=3' this
5067          setting of the option may result in warnings for benign code.
5068
5069'-Wstringop-truncation'
5070     Warn for calls to bounded string manipulation functions such as
5071     'strncat', 'strncpy', and 'stpncpy' that may either truncate the
5072     copied string or leave the destination unchanged.
5073
5074     In the following example, the call to 'strncat' specifies a bound
5075     that is less than the length of the source string.  As a result,
5076     the copy of the source will be truncated and so the call is
5077     diagnosed.  To avoid the warning use 'bufsize - strlen (buf) - 1)'
5078     as the bound.
5079
5080          void append (char *buf, size_t bufsize)
5081          {
5082            strncat (buf, ".txt", 3);
5083          }
5084
5085     As another example, the following call to 'strncpy' results in
5086     copying to 'd' just the characters preceding the terminating NUL,
5087     without appending the NUL to the end.  Assuming the result of
5088     'strncpy' is necessarily a NUL-terminated string is a common
5089     mistake, and so the call is diagnosed.  To avoid the warning when
5090     the result is not expected to be NUL-terminated, call 'memcpy'
5091     instead.
5092
5093          void copy (char *d, const char *s)
5094          {
5095            strncpy (d, s, strlen (s));
5096          }
5097
5098     In the following example, the call to 'strncpy' specifies the size
5099     of the destination buffer as the bound.  If the length of the
5100     source string is equal to or greater than this size the result of
5101     the copy will not be NUL-terminated.  Therefore, the call is also
5102     diagnosed.  To avoid the warning, specify 'sizeof buf - 1' as the
5103     bound and set the last element of the buffer to 'NUL'.
5104
5105          void copy (const char *s)
5106          {
5107            char buf[80];
5108            strncpy (buf, s, sizeof buf);
5109            ...
5110          }
5111
5112     In situations where a character array is intended to store a
5113     sequence of bytes with no terminating 'NUL' such an array may be
5114     annotated with attribute 'nonstring' to avoid this warning.  Such
5115     arrays, however, are not suitable arguments to functions that
5116     expect 'NUL'-terminated strings.  To help detect accidental misuses
5117     of such arrays GCC issues warnings unless it can prove that the use
5118     is safe.  *Note Common Variable Attributes::.
5119
5120     Option '-Wstringop-truncation' is enabled by '-Wall'.
5121
5122'-Wsuggest-attribute=[pure|const|noreturn|format|cold|malloc]'
5123     Warn for cases where adding an attribute may be beneficial.  The
5124     attributes currently supported are listed below.
5125
5126     '-Wsuggest-attribute=pure'
5127     '-Wsuggest-attribute=const'
5128     '-Wsuggest-attribute=noreturn'
5129     '-Wsuggest-attribute=malloc'
5130
5131          Warn about functions that might be candidates for attributes
5132          'pure', 'const' or 'noreturn' or 'malloc'.  The compiler only
5133          warns for functions visible in other compilation units or (in
5134          the case of 'pure' and 'const') if it cannot prove that the
5135          function returns normally.  A function returns normally if it
5136          doesn't contain an infinite loop or return abnormally by
5137          throwing, calling 'abort' or trapping.  This analysis requires
5138          option '-fipa-pure-const', which is enabled by default at '-O'
5139          and higher.  Higher optimization levels improve the accuracy
5140          of the analysis.
5141
5142     '-Wsuggest-attribute=format'
5143     '-Wmissing-format-attribute'
5144
5145          Warn about function pointers that might be candidates for
5146          'format' attributes.  Note these are only possible candidates,
5147          not absolute ones.  GCC guesses that function pointers with
5148          'format' attributes that are used in assignment,
5149          initialization, parameter passing or return statements should
5150          have a corresponding 'format' attribute in the resulting type.
5151          I.e. the left-hand side of the assignment or initialization,
5152          the type of the parameter variable, or the return type of the
5153          containing function respectively should also have a 'format'
5154          attribute to avoid the warning.
5155
5156          GCC also warns about function definitions that might be
5157          candidates for 'format' attributes.  Again, these are only
5158          possible candidates.  GCC guesses that 'format' attributes
5159          might be appropriate for any function that calls a function
5160          like 'vprintf' or 'vscanf', but this might not always be the
5161          case, and some functions for which 'format' attributes are
5162          appropriate may not be detected.
5163
5164     '-Wsuggest-attribute=cold'
5165
5166          Warn about functions that might be candidates for 'cold'
5167          attribute.  This is based on static detection and generally
5168          will only warn about functions which always leads to a call to
5169          another 'cold' function such as wrappers of C++ 'throw' or
5170          fatal error reporting functions leading to 'abort'.
5171
5172'-Wsuggest-final-types'
5173     Warn about types with virtual methods where code quality would be
5174     improved if the type were declared with the C++11 'final'
5175     specifier, or, if possible, declared in an anonymous namespace.
5176     This allows GCC to more aggressively devirtualize the polymorphic
5177     calls.  This warning is more effective with link time optimization,
5178     where the information about the class hierarchy graph is more
5179     complete.
5180
5181'-Wsuggest-final-methods'
5182     Warn about virtual methods where code quality would be improved if
5183     the method were declared with the C++11 'final' specifier, or, if
5184     possible, its type were declared in an anonymous namespace or with
5185     the 'final' specifier.  This warning is more effective with
5186     link-time optimization, where the information about the class
5187     hierarchy graph is more complete.  It is recommended to first
5188     consider suggestions of '-Wsuggest-final-types' and then rebuild
5189     with new annotations.
5190
5191'-Wsuggest-override'
5192     Warn about overriding virtual functions that are not marked with
5193     the override keyword.
5194
5195'-Walloc-zero'
5196     Warn about calls to allocation functions decorated with attribute
5197     'alloc_size' that specify zero bytes, including those to the
5198     built-in forms of the functions 'aligned_alloc', 'alloca',
5199     'calloc', 'malloc', and 'realloc'.  Because the behavior of these
5200     functions when called with a zero size differs among
5201     implementations (and in the case of 'realloc' has been deprecated)
5202     relying on it may result in subtle portability bugs and should be
5203     avoided.
5204
5205'-Walloc-size-larger-than=N'
5206     Warn about calls to functions decorated with attribute 'alloc_size'
5207     that attempt to allocate objects larger than the specified number
5208     of bytes, or where the result of the size computation in an integer
5209     type with infinite precision would exceed 'SIZE_MAX / 2'.  The
5210     option argument N may end in one of the standard suffixes
5211     designating a multiple of bytes such as 'kB' and 'KiB' for kilobyte
5212     and kibibyte, respectively, 'MB' and 'MiB' for megabyte and
5213     mebibyte, and so on.  '-Walloc-size-larger-than='PTRDIFF_MAX is
5214     enabled by default.  Warnings controlled by the option can be
5215     disabled by specifying N of SIZE_MAX or more.  *Note Function
5216     Attributes::.
5217
5218'-Walloca'
5219     This option warns on all uses of 'alloca' in the source.
5220
5221'-Walloca-larger-than=N'
5222     This option warns on calls to 'alloca' that are not bounded by a
5223     controlling predicate limiting its argument of integer type to at
5224     most N bytes, or calls to 'alloca' where the bound is unknown.
5225     Arguments of non-integer types are considered unbounded even if
5226     they appear to be constrained to the expected range.
5227
5228     For example, a bounded case of 'alloca' could be:
5229
5230          void func (size_t n)
5231          {
5232            void *p;
5233            if (n <= 1000)
5234              p = alloca (n);
5235            else
5236              p = malloc (n);
5237            f (p);
5238          }
5239
5240     In the above example, passing '-Walloca-larger-than=1000' would not
5241     issue a warning because the call to 'alloca' is known to be at most
5242     1000 bytes.  However, if '-Walloca-larger-than=500' were passed,
5243     the compiler would emit a warning.
5244
5245     Unbounded uses, on the other hand, are uses of 'alloca' with no
5246     controlling predicate constraining its integer argument.  For
5247     example:
5248
5249          void func ()
5250          {
5251            void *p = alloca (n);
5252            f (p);
5253          }
5254
5255     If '-Walloca-larger-than=500' were passed, the above would trigger
5256     a warning, but this time because of the lack of bounds checking.
5257
5258     Note, that even seemingly correct code involving signed integers
5259     could cause a warning:
5260
5261          void func (signed int n)
5262          {
5263            if (n < 500)
5264              {
5265                p = alloca (n);
5266                f (p);
5267              }
5268          }
5269
5270     In the above example, N could be negative, causing a larger than
5271     expected argument to be implicitly cast into the 'alloca' call.
5272
5273     This option also warns when 'alloca' is used in a loop.
5274
5275     This warning is not enabled by '-Wall', and is only active when
5276     '-ftree-vrp' is active (default for '-O2' and above).
5277
5278     See also '-Wvla-larger-than=N'.
5279
5280'-Warray-bounds'
5281'-Warray-bounds=N'
5282     This option is only active when '-ftree-vrp' is active (default for
5283     '-O2' and above).  It warns about subscripts to arrays that are
5284     always out of bounds.  This warning is enabled by '-Wall'.
5285
5286     '-Warray-bounds=1'
5287          This is the warning level of '-Warray-bounds' and is enabled
5288          by '-Wall'; higher levels are not, and must be explicitly
5289          requested.
5290
5291     '-Warray-bounds=2'
5292          This warning level also warns about out of bounds access for
5293          arrays at the end of a struct and for arrays accessed through
5294          pointers.  This warning level may give a larger number of
5295          false positives and is deactivated by default.
5296
5297'-Wattribute-alias'
5298     Warn about declarations using the 'alias' and similar attributes
5299     whose target is incompatible with the type of the alias.  *Note
5300     Declaring Attributes of Functions: Function Attributes.
5301
5302'-Wbool-compare'
5303     Warn about boolean expression compared with an integer value
5304     different from 'true'/'false'.  For instance, the following
5305     comparison is always false:
5306          int n = 5;
5307          ...
5308          if ((n > 1) == 2) { ... }
5309     This warning is enabled by '-Wall'.
5310
5311'-Wbool-operation'
5312     Warn about suspicious operations on expressions of a boolean type.
5313     For instance, bitwise negation of a boolean is very likely a bug in
5314     the program.  For C, this warning also warns about incrementing or
5315     decrementing a boolean, which rarely makes sense.  (In C++,
5316     decrementing a boolean is always invalid.  Incrementing a boolean
5317     is invalid in C++17, and deprecated otherwise.)
5318
5319     This warning is enabled by '-Wall'.
5320
5321'-Wduplicated-branches'
5322     Warn when an if-else has identical branches.  This warning detects
5323     cases like
5324          if (p != NULL)
5325            return 0;
5326          else
5327            return 0;
5328     It doesn't warn when both branches contain just a null statement.
5329     This warning also warn for conditional operators:
5330            int i = x ? *p : *p;
5331
5332'-Wduplicated-cond'
5333     Warn about duplicated conditions in an if-else-if chain.  For
5334     instance, warn for the following code:
5335          if (p->q != NULL) { ... }
5336          else if (p->q != NULL) { ... }
5337
5338'-Wframe-address'
5339     Warn when the '__builtin_frame_address' or
5340     '__builtin_return_address' is called with an argument greater than
5341     0.  Such calls may return indeterminate values or crash the
5342     program.  The warning is included in '-Wall'.
5343
5344'-Wno-discarded-qualifiers (C and Objective-C only)'
5345     Do not warn if type qualifiers on pointers are being discarded.
5346     Typically, the compiler warns if a 'const char *' variable is
5347     passed to a function that takes a 'char *' parameter.  This option
5348     can be used to suppress such a warning.
5349
5350'-Wno-discarded-array-qualifiers (C and Objective-C only)'
5351     Do not warn if type qualifiers on arrays which are pointer targets
5352     are being discarded.  Typically, the compiler warns if a 'const int
5353     (*)[]' variable is passed to a function that takes a 'int (*)[]'
5354     parameter.  This option can be used to suppress such a warning.
5355
5356'-Wno-incompatible-pointer-types (C and Objective-C only)'
5357     Do not warn when there is a conversion between pointers that have
5358     incompatible types.  This warning is for cases not covered by
5359     '-Wno-pointer-sign', which warns for pointer argument passing or
5360     assignment with different signedness.
5361
5362'-Wno-int-conversion (C and Objective-C only)'
5363     Do not warn about incompatible integer to pointer and pointer to
5364     integer conversions.  This warning is about implicit conversions;
5365     for explicit conversions the warnings '-Wno-int-to-pointer-cast'
5366     and '-Wno-pointer-to-int-cast' may be used.
5367
5368'-Wno-div-by-zero'
5369     Do not warn about compile-time integer division by zero.
5370     Floating-point division by zero is not warned about, as it can be a
5371     legitimate way of obtaining infinities and NaNs.
5372
5373'-Wsystem-headers'
5374     Print warning messages for constructs found in system header files.
5375     Warnings from system headers are normally suppressed, on the
5376     assumption that they usually do not indicate real problems and
5377     would only make the compiler output harder to read.  Using this
5378     command-line option tells GCC to emit warnings from system headers
5379     as if they occurred in user code.  However, note that using '-Wall'
5380     in conjunction with this option does _not_ warn about unknown
5381     pragmas in system headers--for that, '-Wunknown-pragmas' must also
5382     be used.
5383
5384'-Wtautological-compare'
5385     Warn if a self-comparison always evaluates to true or false.  This
5386     warning detects various mistakes such as:
5387          int i = 1;
5388          ...
5389          if (i > i) { ... }
5390
5391     This warning also warns about bitwise comparisons that always
5392     evaluate to true or false, for instance:
5393          if ((a & 16) == 10) { ... }
5394     will always be false.
5395
5396     This warning is enabled by '-Wall'.
5397
5398'-Wtrampolines'
5399     Warn about trampolines generated for pointers to nested functions.
5400     A trampoline is a small piece of data or code that is created at
5401     run time on the stack when the address of a nested function is
5402     taken, and is used to call the nested function indirectly.  For
5403     some targets, it is made up of data only and thus requires no
5404     special treatment.  But, for most targets, it is made up of code
5405     and thus requires the stack to be made executable in order for the
5406     program to work properly.
5407
5408'-Wfloat-equal'
5409     Warn if floating-point values are used in equality comparisons.
5410
5411     The idea behind this is that sometimes it is convenient (for the
5412     programmer) to consider floating-point values as approximations to
5413     infinitely precise real numbers.  If you are doing this, then you
5414     need to compute (by analyzing the code, or in some other way) the
5415     maximum or likely maximum error that the computation introduces,
5416     and allow for it when performing comparisons (and when producing
5417     output, but that's a different problem).  In particular, instead of
5418     testing for equality, you should check to see whether the two
5419     values have ranges that overlap; and this is done with the
5420     relational operators, so equality comparisons are probably
5421     mistaken.
5422
5423'-Wtraditional (C and Objective-C only)'
5424     Warn about certain constructs that behave differently in
5425     traditional and ISO C.  Also warn about ISO C constructs that have
5426     no traditional C equivalent, and/or problematic constructs that
5427     should be avoided.
5428
5429        * Macro parameters that appear within string literals in the
5430          macro body.  In traditional C macro replacement takes place
5431          within string literals, but in ISO C it does not.
5432
5433        * In traditional C, some preprocessor directives did not exist.
5434          Traditional preprocessors only considered a line to be a
5435          directive if the '#' appeared in column 1 on the line.
5436          Therefore '-Wtraditional' warns about directives that
5437          traditional C understands but ignores because the '#' does not
5438          appear as the first character on the line.  It also suggests
5439          you hide directives like '#pragma' not understood by
5440          traditional C by indenting them.  Some traditional
5441          implementations do not recognize '#elif', so this option
5442          suggests avoiding it altogether.
5443
5444        * A function-like macro that appears without arguments.
5445
5446        * The unary plus operator.
5447
5448        * The 'U' integer constant suffix, or the 'F' or 'L'
5449          floating-point constant suffixes.  (Traditional C does support
5450          the 'L' suffix on integer constants.)  Note, these suffixes
5451          appear in macros defined in the system headers of most modern
5452          systems, e.g. the '_MIN'/'_MAX' macros in '<limits.h>'.  Use
5453          of these macros in user code might normally lead to spurious
5454          warnings, however GCC's integrated preprocessor has enough
5455          context to avoid warning in these cases.
5456
5457        * A function declared external in one block and then used after
5458          the end of the block.
5459
5460        * A 'switch' statement has an operand of type 'long'.
5461
5462        * A non-'static' function declaration follows a 'static' one.
5463          This construct is not accepted by some traditional C
5464          compilers.
5465
5466        * The ISO type of an integer constant has a different width or
5467          signedness from its traditional type.  This warning is only
5468          issued if the base of the constant is ten.  I.e. hexadecimal
5469          or octal values, which typically represent bit patterns, are
5470          not warned about.
5471
5472        * Usage of ISO string concatenation is detected.
5473
5474        * Initialization of automatic aggregates.
5475
5476        * Identifier conflicts with labels.  Traditional C lacks a
5477          separate namespace for labels.
5478
5479        * Initialization of unions.  If the initializer is zero, the
5480          warning is omitted.  This is done under the assumption that
5481          the zero initializer in user code appears conditioned on e.g.
5482          '__STDC__' to avoid missing initializer warnings and relies on
5483          default initialization to zero in the traditional C case.
5484
5485        * Conversions by prototypes between fixed/floating-point values
5486          and vice versa.  The absence of these prototypes when
5487          compiling with traditional C causes serious problems.  This is
5488          a subset of the possible conversion warnings; for the full set
5489          use '-Wtraditional-conversion'.
5490
5491        * Use of ISO C style function definitions.  This warning
5492          intentionally is _not_ issued for prototype declarations or
5493          variadic functions because these ISO C features appear in your
5494          code when using libiberty's traditional C compatibility
5495          macros, 'PARAMS' and 'VPARAMS'.  This warning is also bypassed
5496          for nested functions because that feature is already a GCC
5497          extension and thus not relevant to traditional C
5498          compatibility.
5499
5500'-Wtraditional-conversion (C and Objective-C only)'
5501     Warn if a prototype causes a type conversion that is different from
5502     what would happen to the same argument in the absence of a
5503     prototype.  This includes conversions of fixed point to floating
5504     and vice versa, and conversions changing the width or signedness of
5505     a fixed-point argument except when the same as the default
5506     promotion.
5507
5508'-Wdeclaration-after-statement (C and Objective-C only)'
5509     Warn when a declaration is found after a statement in a block.
5510     This construct, known from C++, was introduced with ISO C99 and is
5511     by default allowed in GCC.  It is not supported by ISO C90.  *Note
5512     Mixed Declarations::.
5513
5514'-Wshadow'
5515     Warn whenever a local variable or type declaration shadows another
5516     variable, parameter, type, class member (in C++), or instance
5517     variable (in Objective-C) or whenever a built-in function is
5518     shadowed.  Note that in C++, the compiler warns if a local variable
5519     shadows an explicit typedef, but not if it shadows a
5520     struct/class/enum.  Same as '-Wshadow=global'.
5521
5522'-Wno-shadow-ivar (Objective-C only)'
5523     Do not warn whenever a local variable shadows an instance variable
5524     in an Objective-C method.
5525
5526'-Wshadow=global'
5527     The default for '-Wshadow'.  Warns for any (global) shadowing.
5528
5529'-Wshadow=local'
5530     Warn when a local variable shadows another local variable or
5531     parameter.  This warning is enabled by '-Wshadow=global'.
5532
5533'-Wshadow=compatible-local'
5534     Warn when a local variable shadows another local variable or
5535     parameter whose type is compatible with that of the shadowing
5536     variable.  In C++, type compatibility here means the type of the
5537     shadowing variable can be converted to that of the shadowed
5538     variable.  The creation of this flag (in addition to
5539     '-Wshadow=local') is based on the idea that when a local variable
5540     shadows another one of incompatible type, it is most likely
5541     intentional, not a bug or typo, as shown in the following example:
5542
5543          for (SomeIterator i = SomeObj.begin(); i != SomeObj.end(); ++i)
5544          {
5545            for (int i = 0; i < N; ++i)
5546            {
5547              ...
5548            }
5549            ...
5550          }
5551
5552     Since the two variable 'i' in the example above have incompatible
5553     types, enabling only '-Wshadow=compatible-local' will not emit a
5554     warning.  Because their types are incompatible, if a programmer
5555     accidentally uses one in place of the other, type checking will
5556     catch that and emit an error or warning.  So not warning (about
5557     shadowing) in this case will not lead to undetected bugs.  Use of
5558     this flag instead of '-Wshadow=local' can possibly reduce the
5559     number of warnings triggered by intentional shadowing.
5560
5561     This warning is enabled by '-Wshadow=local'.
5562
5563'-Wlarger-than=LEN'
5564     Warn whenever an object of larger than LEN bytes is defined.
5565
5566'-Wframe-larger-than=LEN'
5567     Warn if the size of a function frame is larger than LEN bytes.  The
5568     computation done to determine the stack frame size is approximate
5569     and not conservative.  The actual requirements may be somewhat
5570     greater than LEN even if you do not get a warning.  In addition,
5571     any space allocated via 'alloca', variable-length arrays, or
5572     related constructs is not included by the compiler when determining
5573     whether or not to issue a warning.
5574
5575'-Wno-free-nonheap-object'
5576     Do not warn when attempting to free an object that was not
5577     allocated on the heap.
5578
5579'-Wstack-usage=LEN'
5580     Warn if the stack usage of a function might be larger than LEN
5581     bytes.  The computation done to determine the stack usage is
5582     conservative.  Any space allocated via 'alloca', variable-length
5583     arrays, or related constructs is included by the compiler when
5584     determining whether or not to issue a warning.
5585
5586     The message is in keeping with the output of '-fstack-usage'.
5587
5588        * If the stack usage is fully static but exceeds the specified
5589          amount, it's:
5590
5591                 warning: stack usage is 1120 bytes
5592        * If the stack usage is (partly) dynamic but bounded, it's:
5593
5594                 warning: stack usage might be 1648 bytes
5595        * If the stack usage is (partly) dynamic and not bounded, it's:
5596
5597                 warning: stack usage might be unbounded
5598
5599'-Wno-pedantic-ms-format (MinGW targets only)'
5600     When used in combination with '-Wformat' and '-pedantic' without
5601     GNU extensions, this option disables the warnings about non-ISO
5602     'printf' / 'scanf' format width specifiers 'I32', 'I64', and 'I'
5603     used on Windows targets, which depend on the MS runtime.
5604
5605'-Waligned-new'
5606     Warn about a new-expression of a type that requires greater
5607     alignment than the 'alignof(std::max_align_t)' but uses an
5608     allocation function without an explicit alignment parameter.  This
5609     option is enabled by '-Wall'.
5610
5611     Normally this only warns about global allocation functions, but
5612     '-Waligned-new=all' also warns about class member allocation
5613     functions.
5614
5615'-Wplacement-new'
5616'-Wplacement-new=N'
5617     Warn about placement new expressions with undefined behavior, such
5618     as constructing an object in a buffer that is smaller than the type
5619     of the object.  For example, the placement new expression below is
5620     diagnosed because it attempts to construct an array of 64 integers
5621     in a buffer only 64 bytes large.
5622          char buf [64];
5623          new (buf) int[64];
5624     This warning is enabled by default.
5625
5626     '-Wplacement-new=1'
5627          This is the default warning level of '-Wplacement-new'.  At
5628          this level the warning is not issued for some strictly
5629          undefined constructs that GCC allows as extensions for
5630          compatibility with legacy code.  For example, the following
5631          'new' expression is not diagnosed at this level even though it
5632          has undefined behavior according to the C++ standard because
5633          it writes past the end of the one-element array.
5634               struct S { int n, a[1]; };
5635               S *s = (S *)malloc (sizeof *s + 31 * sizeof s->a[0]);
5636               new (s->a)int [32]();
5637
5638     '-Wplacement-new=2'
5639          At this level, in addition to diagnosing all the same
5640          constructs as at level 1, a diagnostic is also issued for
5641          placement new expressions that construct an object in the last
5642          member of structure whose type is an array of a single element
5643          and whose size is less than the size of the object being
5644          constructed.  While the previous example would be diagnosed,
5645          the following construct makes use of the flexible member array
5646          extension to avoid the warning at level 2.
5647               struct S { int n, a[]; };
5648               S *s = (S *)malloc (sizeof *s + 32 * sizeof s->a[0]);
5649               new (s->a)int [32]();
5650
5651'-Wpointer-arith'
5652     Warn about anything that depends on the "size of" a function type
5653     or of 'void'.  GNU C assigns these types a size of 1, for
5654     convenience in calculations with 'void *' pointers and pointers to
5655     functions.  In C++, warn also when an arithmetic operation involves
5656     'NULL'.  This warning is also enabled by '-Wpedantic'.
5657
5658'-Wpointer-compare'
5659     Warn if a pointer is compared with a zero character constant.  This
5660     usually means that the pointer was meant to be dereferenced.  For
5661     example:
5662
5663          const char *p = foo ();
5664          if (p == '\0')
5665            return 42;
5666
5667     Note that the code above is invalid in C++11.
5668
5669     This warning is enabled by default.
5670
5671'-Wtype-limits'
5672     Warn if a comparison is always true or always false due to the
5673     limited range of the data type, but do not warn for constant
5674     expressions.  For example, warn if an unsigned variable is compared
5675     against zero with '<' or '>='.  This warning is also enabled by
5676     '-Wextra'.
5677
5678'-Wcomment'
5679'-Wcomments'
5680     Warn whenever a comment-start sequence '/*' appears in a '/*'
5681     comment, or whenever a backslash-newline appears in a '//' comment.
5682     This warning is enabled by '-Wall'.
5683
5684'-Wtrigraphs'
5685     Warn if any trigraphs are encountered that might change the meaning
5686     of the program.  Trigraphs within comments are not warned about,
5687     except those that would form escaped newlines.
5688
5689     This option is implied by '-Wall'.  If '-Wall' is not given, this
5690     option is still enabled unless trigraphs are enabled.  To get
5691     trigraph conversion without warnings, but get the other '-Wall'
5692     warnings, use '-trigraphs -Wall -Wno-trigraphs'.
5693
5694'-Wundef'
5695     Warn if an undefined identifier is evaluated in an '#if' directive.
5696     Such identifiers are replaced with zero.
5697
5698'-Wexpansion-to-defined'
5699     Warn whenever 'defined' is encountered in the expansion of a macro
5700     (including the case where the macro is expanded by an '#if'
5701     directive).  Such usage is not portable.  This warning is also
5702     enabled by '-Wpedantic' and '-Wextra'.
5703
5704'-Wunused-macros'
5705     Warn about macros defined in the main file that are unused.  A
5706     macro is "used" if it is expanded or tested for existence at least
5707     once.  The preprocessor also warns if the macro has not been used
5708     at the time it is redefined or undefined.
5709
5710     Built-in macros, macros defined on the command line, and macros
5711     defined in include files are not warned about.
5712
5713     _Note:_ If a macro is actually used, but only used in skipped
5714     conditional blocks, then the preprocessor reports it as unused.  To
5715     avoid the warning in such a case, you might improve the scope of
5716     the macro's definition by, for example, moving it into the first
5717     skipped block.  Alternatively, you could provide a dummy use with
5718     something like:
5719
5720          #if defined the_macro_causing_the_warning
5721          #endif
5722
5723'-Wno-endif-labels'
5724     Do not warn whenever an '#else' or an '#endif' are followed by
5725     text.  This sometimes happens in older programs with code of the
5726     form
5727
5728          #if FOO
5729          ...
5730          #else FOO
5731          ...
5732          #endif FOO
5733
5734     The second and third 'FOO' should be in comments.  This warning is
5735     on by default.
5736
5737'-Wbad-function-cast (C and Objective-C only)'
5738     Warn when a function call is cast to a non-matching type.  For
5739     example, warn if a call to a function returning an integer type is
5740     cast to a pointer type.
5741
5742'-Wc90-c99-compat (C and Objective-C only)'
5743     Warn about features not present in ISO C90, but present in ISO C99.
5744     For instance, warn about use of variable length arrays, 'long long'
5745     type, 'bool' type, compound literals, designated initializers, and
5746     so on.  This option is independent of the standards mode.  Warnings
5747     are disabled in the expression that follows '__extension__'.
5748
5749'-Wc99-c11-compat (C and Objective-C only)'
5750     Warn about features not present in ISO C99, but present in ISO C11.
5751     For instance, warn about use of anonymous structures and unions,
5752     '_Atomic' type qualifier, '_Thread_local' storage-class specifier,
5753     '_Alignas' specifier, 'Alignof' operator, '_Generic' keyword, and
5754     so on.  This option is independent of the standards mode.  Warnings
5755     are disabled in the expression that follows '__extension__'.
5756
5757'-Wc++-compat (C and Objective-C only)'
5758     Warn about ISO C constructs that are outside of the common subset
5759     of ISO C and ISO C++, e.g. request for implicit conversion from
5760     'void *' to a pointer to non-'void' type.
5761
5762'-Wc++11-compat (C++ and Objective-C++ only)'
5763     Warn about C++ constructs whose meaning differs between ISO C++
5764     1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
5765     keywords in ISO C++ 2011.  This warning turns on '-Wnarrowing' and
5766     is enabled by '-Wall'.
5767
5768'-Wc++14-compat (C++ and Objective-C++ only)'
5769     Warn about C++ constructs whose meaning differs between ISO C++
5770     2011 and ISO C++ 2014.  This warning is enabled by '-Wall'.
5771
5772'-Wc++17-compat (C++ and Objective-C++ only)'
5773     Warn about C++ constructs whose meaning differs between ISO C++
5774     2014 and ISO C++ 2017.  This warning is enabled by '-Wall'.
5775
5776'-Wcast-qual'
5777     Warn whenever a pointer is cast so as to remove a type qualifier
5778     from the target type.  For example, warn if a 'const char *' is
5779     cast to an ordinary 'char *'.
5780
5781     Also warn when making a cast that introduces a type qualifier in an
5782     unsafe way.  For example, casting 'char **' to 'const char **' is
5783     unsafe, as in this example:
5784
5785            /* p is char ** value.  */
5786            const char **q = (const char **) p;
5787            /* Assignment of readonly string to const char * is OK.  */
5788            *q = "string";
5789            /* Now char** pointer points to read-only memory.  */
5790            **p = 'b';
5791
5792'-Wcast-align'
5793     Warn whenever a pointer is cast such that the required alignment of
5794     the target is increased.  For example, warn if a 'char *' is cast
5795     to an 'int *' on machines where integers can only be accessed at
5796     two- or four-byte boundaries.
5797
5798'-Wcast-align=strict'
5799     Warn whenever a pointer is cast such that the required alignment of
5800     the target is increased.  For example, warn if a 'char *' is cast
5801     to an 'int *' regardless of the target machine.
5802
5803'-Wcast-function-type'
5804     Warn when a function pointer is cast to an incompatible function
5805     pointer.  In a cast involving function types with a variable
5806     argument list only the types of initial arguments that are provided
5807     are considered.  Any parameter of pointer-type matches any other
5808     pointer-type.  Any benign differences in integral types are
5809     ignored, like 'int' vs.  'long' on ILP32 targets.  Likewise type
5810     qualifiers are ignored.  The function type 'void (*) (void)' is
5811     special and matches everything, which can be used to suppress this
5812     warning.  In a cast involving pointer to member types this warning
5813     warns whenever the type cast is changing the pointer to member
5814     type.  This warning is enabled by '-Wextra'.
5815
5816'-Wwrite-strings'
5817     When compiling C, give string constants the type 'const
5818     char[LENGTH]' so that copying the address of one into a non-'const'
5819     'char *' pointer produces a warning.  These warnings help you find
5820     at compile time code that can try to write into a string constant,
5821     but only if you have been very careful about using 'const' in
5822     declarations and prototypes.  Otherwise, it is just a nuisance.
5823     This is why we did not make '-Wall' request these warnings.
5824
5825     When compiling C++, warn about the deprecated conversion from
5826     string literals to 'char *'.  This warning is enabled by default
5827     for C++ programs.
5828
5829'-Wcatch-value'
5830'-Wcatch-value=N (C++ and Objective-C++ only)'
5831     Warn about catch handlers that do not catch via reference.  With
5832     '-Wcatch-value=1' (or '-Wcatch-value' for short) warn about
5833     polymorphic class types that are caught by value.  With
5834     '-Wcatch-value=2' warn about all class types that are caught by
5835     value.  With '-Wcatch-value=3' warn about all types that are not
5836     caught by reference.  '-Wcatch-value' is enabled by '-Wall'.
5837
5838'-Wclobbered'
5839     Warn for variables that might be changed by 'longjmp' or 'vfork'.
5840     This warning is also enabled by '-Wextra'.
5841
5842'-Wconditionally-supported (C++ and Objective-C++ only)'
5843     Warn for conditionally-supported (C++11 [intro.defs]) constructs.
5844
5845'-Wconversion'
5846     Warn for implicit conversions that may alter a value.  This
5847     includes conversions between real and integer, like 'abs (x)' when
5848     'x' is 'double'; conversions between signed and unsigned, like
5849     'unsigned ui = -1'; and conversions to smaller types, like 'sqrtf
5850     (M_PI)'.  Do not warn for explicit casts like 'abs ((int) x)' and
5851     'ui = (unsigned) -1', or if the value is not changed by the
5852     conversion like in 'abs (2.0)'.  Warnings about conversions between
5853     signed and unsigned integers can be disabled by using
5854     '-Wno-sign-conversion'.
5855
5856     For C++, also warn for confusing overload resolution for
5857     user-defined conversions; and conversions that never use a type
5858     conversion operator: conversions to 'void', the same type, a base
5859     class or a reference to them.  Warnings about conversions between
5860     signed and unsigned integers are disabled by default in C++ unless
5861     '-Wsign-conversion' is explicitly enabled.
5862
5863'-Wno-conversion-null (C++ and Objective-C++ only)'
5864     Do not warn for conversions between 'NULL' and non-pointer types.
5865     '-Wconversion-null' is enabled by default.
5866
5867'-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)'
5868     Warn when a literal '0' is used as null pointer constant.  This can
5869     be useful to facilitate the conversion to 'nullptr' in C++11.
5870
5871'-Wsubobject-linkage (C++ and Objective-C++ only)'
5872     Warn if a class type has a base or a field whose type uses the
5873     anonymous namespace or depends on a type with no linkage.  If a
5874     type A depends on a type B with no or internal linkage, defining it
5875     in multiple translation units would be an ODR violation because the
5876     meaning of B is different in each translation unit.  If A only
5877     appears in a single translation unit, the best way to silence the
5878     warning is to give it internal linkage by putting it in an
5879     anonymous namespace as well.  The compiler doesn't give this
5880     warning for types defined in the main .C file, as those are
5881     unlikely to have multiple definitions.  '-Wsubobject-linkage' is
5882     enabled by default.
5883
5884'-Wdangling-else'
5885     Warn about constructions where there may be confusion to which 'if'
5886     statement an 'else' branch belongs.  Here is an example of such a
5887     case:
5888
5889          {
5890            if (a)
5891              if (b)
5892                foo ();
5893            else
5894              bar ();
5895          }
5896
5897     In C/C++, every 'else' branch belongs to the innermost possible
5898     'if' statement, which in this example is 'if (b)'.  This is often
5899     not what the programmer expected, as illustrated in the above
5900     example by indentation the programmer chose.  When there is the
5901     potential for this confusion, GCC issues a warning when this flag
5902     is specified.  To eliminate the warning, add explicit braces around
5903     the innermost 'if' statement so there is no way the 'else' can
5904     belong to the enclosing 'if'.  The resulting code looks like this:
5905
5906          {
5907            if (a)
5908              {
5909                if (b)
5910                  foo ();
5911                else
5912                  bar ();
5913              }
5914          }
5915
5916     This warning is enabled by '-Wparentheses'.
5917
5918'-Wdate-time'
5919     Warn when macros '__TIME__', '__DATE__' or '__TIMESTAMP__' are
5920     encountered as they might prevent bit-wise-identical reproducible
5921     compilations.
5922
5923'-Wdelete-incomplete (C++ and Objective-C++ only)'
5924     Warn when deleting a pointer to incomplete type, which may cause
5925     undefined behavior at runtime.  This warning is enabled by default.
5926
5927'-Wuseless-cast (C++ and Objective-C++ only)'
5928     Warn when an expression is casted to its own type.
5929
5930'-Wempty-body'
5931     Warn if an empty body occurs in an 'if', 'else' or 'do while'
5932     statement.  This warning is also enabled by '-Wextra'.
5933
5934'-Wenum-compare'
5935     Warn about a comparison between values of different enumerated
5936     types.  In C++ enumerated type mismatches in conditional
5937     expressions are also diagnosed and the warning is enabled by
5938     default.  In C this warning is enabled by '-Wall'.
5939
5940'-Wextra-semi (C++, Objective-C++ only)'
5941     Warn about redundant semicolon after in-class function definition.
5942
5943'-Wjump-misses-init (C, Objective-C only)'
5944     Warn if a 'goto' statement or a 'switch' statement jumps forward
5945     across the initialization of a variable, or jumps backward to a
5946     label after the variable has been initialized.  This only warns
5947     about variables that are initialized when they are declared.  This
5948     warning is only supported for C and Objective-C; in C++ this sort
5949     of branch is an error in any case.
5950
5951     '-Wjump-misses-init' is included in '-Wc++-compat'.  It can be
5952     disabled with the '-Wno-jump-misses-init' option.
5953
5954'-Wsign-compare'
5955     Warn when a comparison between signed and unsigned values could
5956     produce an incorrect result when the signed value is converted to
5957     unsigned.  In C++, this warning is also enabled by '-Wall'.  In C,
5958     it is also enabled by '-Wextra'.
5959
5960'-Wsign-conversion'
5961     Warn for implicit conversions that may change the sign of an
5962     integer value, like assigning a signed integer expression to an
5963     unsigned integer variable.  An explicit cast silences the warning.
5964     In C, this option is enabled also by '-Wconversion'.
5965
5966'-Wfloat-conversion'
5967     Warn for implicit conversions that reduce the precision of a real
5968     value.  This includes conversions from real to integer, and from
5969     higher precision real to lower precision real values.  This option
5970     is also enabled by '-Wconversion'.
5971
5972'-Wno-scalar-storage-order'
5973     Do not warn on suspicious constructs involving reverse scalar
5974     storage order.
5975
5976'-Wsized-deallocation (C++ and Objective-C++ only)'
5977     Warn about a definition of an unsized deallocation function
5978          void operator delete (void *) noexcept;
5979          void operator delete[] (void *) noexcept;
5980     without a definition of the corresponding sized deallocation
5981     function
5982          void operator delete (void *, std::size_t) noexcept;
5983          void operator delete[] (void *, std::size_t) noexcept;
5984     or vice versa.  Enabled by '-Wextra' along with
5985     '-fsized-deallocation'.
5986
5987'-Wsizeof-pointer-div'
5988     Warn for suspicious divisions of two sizeof expressions that divide
5989     the pointer size by the element size, which is the usual way to
5990     compute the array size but won't work out correctly with pointers.
5991     This warning warns e.g. about 'sizeof (ptr) / sizeof (ptr[0])' if
5992     'ptr' is not an array, but a pointer.  This warning is enabled by
5993     '-Wall'.
5994
5995'-Wsizeof-pointer-memaccess'
5996     Warn for suspicious length parameters to certain string and memory
5997     built-in functions if the argument uses 'sizeof'.  This warning
5998     triggers for example for 'memset (ptr, 0, sizeof (ptr));' if 'ptr'
5999     is not an array, but a pointer, and suggests a possible fix, or
6000     about 'memcpy (&foo, ptr, sizeof (&foo));'.
6001     '-Wsizeof-pointer-memaccess' also warns about calls to bounded
6002     string copy functions like 'strncat' or 'strncpy' that specify as
6003     the bound a 'sizeof' expression of the source array.  For example,
6004     in the following function the call to 'strncat' specifies the size
6005     of the source string as the bound.  That is almost certainly a
6006     mistake and so the call is diagnosed.
6007          void make_file (const char *name)
6008          {
6009            char path[PATH_MAX];
6010            strncpy (path, name, sizeof path - 1);
6011            strncat (path, ".text", sizeof ".text");
6012            ...
6013          }
6014
6015     The '-Wsizeof-pointer-memaccess' option is enabled by '-Wall'.
6016
6017'-Wsizeof-array-argument'
6018     Warn when the 'sizeof' operator is applied to a parameter that is
6019     declared as an array in a function definition.  This warning is
6020     enabled by default for C and C++ programs.
6021
6022'-Wmemset-elt-size'
6023     Warn for suspicious calls to the 'memset' built-in function, if the
6024     first argument references an array, and the third argument is a
6025     number equal to the number of elements, but not equal to the size
6026     of the array in memory.  This indicates that the user has omitted a
6027     multiplication by the element size.  This warning is enabled by
6028     '-Wall'.
6029
6030'-Wmemset-transposed-args'
6031     Warn for suspicious calls to the 'memset' built-in function, if the
6032     second argument is not zero and the third argument is zero.  This
6033     warns e.g. about 'memset (buf, sizeof buf, 0)' where most probably
6034     'memset (buf, 0, sizeof buf)' was meant instead.  The diagnostics
6035     is only emitted if the third argument is literal zero.  If it is
6036     some expression that is folded to zero, a cast of zero to some
6037     type, etc., it is far less likely that the user has mistakenly
6038     exchanged the arguments and no warning is emitted.  This warning is
6039     enabled by '-Wall'.
6040
6041'-Waddress'
6042     Warn about suspicious uses of memory addresses.  These include
6043     using the address of a function in a conditional expression, such
6044     as 'void func(void); if (func)', and comparisons against the memory
6045     address of a string literal, such as 'if (x == "abc")'.  Such uses
6046     typically indicate a programmer error: the address of a function
6047     always evaluates to true, so their use in a conditional usually
6048     indicate that the programmer forgot the parentheses in a function
6049     call; and comparisons against string literals result in unspecified
6050     behavior and are not portable in C, so they usually indicate that
6051     the programmer intended to use 'strcmp'.  This warning is enabled
6052     by '-Wall'.
6053
6054'-Wlogical-op'
6055     Warn about suspicious uses of logical operators in expressions.
6056     This includes using logical operators in contexts where a bit-wise
6057     operator is likely to be expected.  Also warns when the operands of
6058     a logical operator are the same:
6059          extern int a;
6060          if (a < 0 && a < 0) { ... }
6061
6062'-Wlogical-not-parentheses'
6063     Warn about logical not used on the left hand side operand of a
6064     comparison.  This option does not warn if the right operand is
6065     considered to be a boolean expression.  Its purpose is to detect
6066     suspicious code like the following:
6067          int a;
6068          ...
6069          if (!a > 1) { ... }
6070
6071     It is possible to suppress the warning by wrapping the LHS into
6072     parentheses:
6073          if ((!a) > 1) { ... }
6074
6075     This warning is enabled by '-Wall'.
6076
6077'-Waggregate-return'
6078     Warn if any functions that return structures or unions are defined
6079     or called.  (In languages where you can return an array, this also
6080     elicits a warning.)
6081
6082'-Wno-aggressive-loop-optimizations'
6083     Warn if in a loop with constant number of iterations the compiler
6084     detects undefined behavior in some statement during one or more of
6085     the iterations.
6086
6087'-Wno-attributes'
6088     Do not warn if an unexpected '__attribute__' is used, such as
6089     unrecognized attributes, function attributes applied to variables,
6090     etc.  This does not stop errors for incorrect use of supported
6091     attributes.
6092
6093'-Wno-builtin-declaration-mismatch'
6094     Warn if a built-in function is declared with the wrong signature or
6095     as non-function.  This warning is enabled by default.
6096
6097'-Wno-builtin-macro-redefined'
6098     Do not warn if certain built-in macros are redefined.  This
6099     suppresses warnings for redefinition of '__TIMESTAMP__',
6100     '__TIME__', '__DATE__', '__FILE__', and '__BASE_FILE__'.
6101
6102'-Wstrict-prototypes (C and Objective-C only)'
6103     Warn if a function is declared or defined without specifying the
6104     argument types.  (An old-style function definition is permitted
6105     without a warning if preceded by a declaration that specifies the
6106     argument types.)
6107
6108'-Wold-style-declaration (C and Objective-C only)'
6109     Warn for obsolescent usages, according to the C Standard, in a
6110     declaration.  For example, warn if storage-class specifiers like
6111     'static' are not the first things in a declaration.  This warning
6112     is also enabled by '-Wextra'.
6113
6114'-Wold-style-definition (C and Objective-C only)'
6115     Warn if an old-style function definition is used.  A warning is
6116     given even if there is a previous prototype.
6117
6118'-Wmissing-parameter-type (C and Objective-C only)'
6119     A function parameter is declared without a type specifier in
6120     K&R-style functions:
6121
6122          void foo(bar) { }
6123
6124     This warning is also enabled by '-Wextra'.
6125
6126'-Wmissing-prototypes (C and Objective-C only)'
6127     Warn if a global function is defined without a previous prototype
6128     declaration.  This warning is issued even if the definition itself
6129     provides a prototype.  Use this option to detect global functions
6130     that do not have a matching prototype declaration in a header file.
6131     This option is not valid for C++ because all function declarations
6132     provide prototypes and a non-matching declaration declares an
6133     overload rather than conflict with an earlier declaration.  Use
6134     '-Wmissing-declarations' to detect missing declarations in C++.
6135
6136'-Wmissing-declarations'
6137     Warn if a global function is defined without a previous
6138     declaration.  Do so even if the definition itself provides a
6139     prototype.  Use this option to detect global functions that are not
6140     declared in header files.  In C, no warnings are issued for
6141     functions with previous non-prototype declarations; use
6142     '-Wmissing-prototypes' to detect missing prototypes.  In C++, no
6143     warnings are issued for function templates, or for inline
6144     functions, or for functions in anonymous namespaces.
6145
6146'-Wmissing-field-initializers'
6147     Warn if a structure's initializer has some fields missing.  For
6148     example, the following code causes such a warning, because 'x.h' is
6149     implicitly zero:
6150
6151          struct s { int f, g, h; };
6152          struct s x = { 3, 4 };
6153
6154     This option does not warn about designated initializers, so the
6155     following modification does not trigger a warning:
6156
6157          struct s { int f, g, h; };
6158          struct s x = { .f = 3, .g = 4 };
6159
6160     In C this option does not warn about the universal zero initializer
6161     '{ 0 }':
6162
6163          struct s { int f, g, h; };
6164          struct s x = { 0 };
6165
6166     Likewise, in C++ this option does not warn about the empty { }
6167     initializer, for example:
6168
6169          struct s { int f, g, h; };
6170          s x = { };
6171
6172     This warning is included in '-Wextra'.  To get other '-Wextra'
6173     warnings without this one, use '-Wextra
6174     -Wno-missing-field-initializers'.
6175
6176'-Wno-multichar'
6177     Do not warn if a multicharacter constant (''FOOF'') is used.
6178     Usually they indicate a typo in the user's code, as they have
6179     implementation-defined values, and should not be used in portable
6180     code.
6181
6182'-Wnormalized=[none|id|nfc|nfkc]'
6183     In ISO C and ISO C++, two identifiers are different if they are
6184     different sequences of characters.  However, sometimes when
6185     characters outside the basic ASCII character set are used, you can
6186     have two different character sequences that look the same.  To
6187     avoid confusion, the ISO 10646 standard sets out some
6188     "normalization rules" which when applied ensure that two sequences
6189     that look the same are turned into the same sequence.  GCC can warn
6190     you if you are using identifiers that have not been normalized;
6191     this option controls that warning.
6192
6193     There are four levels of warning supported by GCC.  The default is
6194     '-Wnormalized=nfc', which warns about any identifier that is not in
6195     the ISO 10646 "C" normalized form, "NFC". NFC is the recommended
6196     form for most uses.  It is equivalent to '-Wnormalized'.
6197
6198     Unfortunately, there are some characters allowed in identifiers by
6199     ISO C and ISO C++ that, when turned into NFC, are not allowed in
6200     identifiers.  That is, there's no way to use these symbols in
6201     portable ISO C or C++ and have all your identifiers in NFC.
6202     '-Wnormalized=id' suppresses the warning for these characters.  It
6203     is hoped that future versions of the standards involved will
6204     correct this, which is why this option is not the default.
6205
6206     You can switch the warning off for all characters by writing
6207     '-Wnormalized=none' or '-Wno-normalized'.  You should only do this
6208     if you are using some other normalization scheme (like "D"),
6209     because otherwise you can easily create bugs that are literally
6210     impossible to see.
6211
6212     Some characters in ISO 10646 have distinct meanings but look
6213     identical in some fonts or display methodologies, especially once
6214     formatting has been applied.  For instance '\u207F', "SUPERSCRIPT
6215     LATIN SMALL LETTER N", displays just like a regular 'n' that has
6216     been placed in a superscript.  ISO 10646 defines the "NFKC"
6217     normalization scheme to convert all these into a standard form as
6218     well, and GCC warns if your code is not in NFKC if you use
6219     '-Wnormalized=nfkc'.  This warning is comparable to warning about
6220     every identifier that contains the letter O because it might be
6221     confused with the digit 0, and so is not the default, but may be
6222     useful as a local coding convention if the programming environment
6223     cannot be fixed to display these characters distinctly.
6224
6225'-Wno-deprecated'
6226     Do not warn about usage of deprecated features.  *Note Deprecated
6227     Features::.
6228
6229'-Wno-deprecated-declarations'
6230     Do not warn about uses of functions (*note Function Attributes::),
6231     variables (*note Variable Attributes::), and types (*note Type
6232     Attributes::) marked as deprecated by using the 'deprecated'
6233     attribute.
6234
6235'-Wno-overflow'
6236     Do not warn about compile-time overflow in constant expressions.
6237
6238'-Wno-odr'
6239     Warn about One Definition Rule violations during link-time
6240     optimization.  Requires '-flto-odr-type-merging' to be enabled.
6241     Enabled by default.
6242
6243'-Wopenmp-simd'
6244     Warn if the vectorizer cost model overrides the OpenMP simd
6245     directive set by user.  The '-fsimd-cost-model=unlimited' option
6246     can be used to relax the cost model.
6247
6248'-Woverride-init (C and Objective-C only)'
6249     Warn if an initialized field without side effects is overridden
6250     when using designated initializers (*note Designated Initializers:
6251     Designated Inits.).
6252
6253     This warning is included in '-Wextra'.  To get other '-Wextra'
6254     warnings without this one, use '-Wextra -Wno-override-init'.
6255
6256'-Woverride-init-side-effects (C and Objective-C only)'
6257     Warn if an initialized field with side effects is overridden when
6258     using designated initializers (*note Designated Initializers:
6259     Designated Inits.).  This warning is enabled by default.
6260
6261'-Wpacked'
6262     Warn if a structure is given the packed attribute, but the packed
6263     attribute has no effect on the layout or size of the structure.
6264     Such structures may be mis-aligned for little benefit.  For
6265     instance, in this code, the variable 'f.x' in 'struct bar' is
6266     misaligned even though 'struct bar' does not itself have the packed
6267     attribute:
6268
6269          struct foo {
6270            int x;
6271            char a, b, c, d;
6272          } __attribute__((packed));
6273          struct bar {
6274            char z;
6275            struct foo f;
6276          };
6277
6278'-Wpacked-bitfield-compat'
6279     The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed' attribute on
6280     bit-fields of type 'char'.  This has been fixed in GCC 4.4 but the
6281     change can lead to differences in the structure layout.  GCC
6282     informs you when the offset of such a field has changed in GCC 4.4.
6283     For example there is no longer a 4-bit padding between field 'a'
6284     and 'b' in this structure:
6285
6286          struct foo
6287          {
6288            char a:4;
6289            char b:8;
6290          } __attribute__ ((packed));
6291
6292     This warning is enabled by default.  Use
6293     '-Wno-packed-bitfield-compat' to disable this warning.
6294
6295'-Wpacked-not-aligned (C, C++, Objective-C and Objective-C++ only)'
6296     Warn if a structure field with explicitly specified alignment in a
6297     packed struct or union is misaligned.  For example, a warning will
6298     be issued on 'struct S', like, 'warning: alignment 1 of 'struct S'
6299     is less than 8', in this code:
6300
6301          struct __attribute__ ((aligned (8))) S8 { char a[8]; };
6302          struct __attribute__ ((packed)) S {
6303            struct S8 s8;
6304          };
6305
6306     This warning is enabled by '-Wall'.
6307
6308'-Wpadded'
6309     Warn if padding is included in a structure, either to align an
6310     element of the structure or to align the whole structure.
6311     Sometimes when this happens it is possible to rearrange the fields
6312     of the structure to reduce the padding and so make the structure
6313     smaller.
6314
6315'-Wredundant-decls'
6316     Warn if anything is declared more than once in the same scope, even
6317     in cases where multiple declaration is valid and changes nothing.
6318
6319'-Wno-restrict'
6320     Warn when an object referenced by a 'restrict'-qualified parameter
6321     (or, in C++, a '__restrict'-qualified parameter) is aliased by
6322     another argument, or when copies between such objects overlap.  For
6323     example, the call to the 'strcpy' function below attempts to
6324     truncate the string by replacing its initial characters with the
6325     last four.  However, because the call writes the terminating NUL
6326     into 'a[4]', the copies overlap and the call is diagnosed.
6327
6328          void foo (void)
6329          {
6330            char a[] = "abcd1234";
6331            strcpy (a, a + 4);
6332            ...
6333          }
6334     The '-Wrestrict' option detects some instances of simple overlap
6335     even without optimization but works best at '-O2' and above.  It is
6336     included in '-Wall'.
6337
6338'-Wnested-externs (C and Objective-C only)'
6339     Warn if an 'extern' declaration is encountered within a function.
6340
6341'-Wno-inherited-variadic-ctor'
6342     Suppress warnings about use of C++11 inheriting constructors when
6343     the base class inherited from has a C variadic constructor; the
6344     warning is on by default because the ellipsis is not inherited.
6345
6346'-Winline'
6347     Warn if a function that is declared as inline cannot be inlined.
6348     Even with this option, the compiler does not warn about failures to
6349     inline functions declared in system headers.
6350
6351     The compiler uses a variety of heuristics to determine whether or
6352     not to inline a function.  For example, the compiler takes into
6353     account the size of the function being inlined and the amount of
6354     inlining that has already been done in the current function.
6355     Therefore, seemingly insignificant changes in the source program
6356     can cause the warnings produced by '-Winline' to appear or
6357     disappear.
6358
6359'-Wno-invalid-offsetof (C++ and Objective-C++ only)'
6360     Suppress warnings from applying the 'offsetof' macro to a non-POD
6361     type.  According to the 2014 ISO C++ standard, applying 'offsetof'
6362     to a non-standard-layout type is undefined.  In existing C++
6363     implementations, however, 'offsetof' typically gives meaningful
6364     results.  This flag is for users who are aware that they are
6365     writing nonportable code and who have deliberately chosen to ignore
6366     the warning about it.
6367
6368     The restrictions on 'offsetof' may be relaxed in a future version
6369     of the C++ standard.
6370
6371'-Wint-in-bool-context'
6372     Warn for suspicious use of integer values where boolean values are
6373     expected, such as conditional expressions (?:) using non-boolean
6374     integer constants in boolean context, like 'if (a <= b ? 2 : 3)'.
6375     Or left shifting of signed integers in boolean context, like 'for
6376     (a = 0; 1 << a; a++);'.  Likewise for all kinds of multiplications
6377     regardless of the data type.  This warning is enabled by '-Wall'.
6378
6379'-Wno-int-to-pointer-cast'
6380     Suppress warnings from casts to pointer type of an integer of a
6381     different size.  In C++, casting to a pointer type of smaller size
6382     is an error.  'Wint-to-pointer-cast' is enabled by default.
6383
6384'-Wno-pointer-to-int-cast (C and Objective-C only)'
6385     Suppress warnings from casts from a pointer to an integer type of a
6386     different size.
6387
6388'-Winvalid-pch'
6389     Warn if a precompiled header (*note Precompiled Headers::) is found
6390     in the search path but cannot be used.
6391
6392'-Wlong-long'
6393     Warn if 'long long' type is used.  This is enabled by either
6394     '-Wpedantic' or '-Wtraditional' in ISO C90 and C++98 modes.  To
6395     inhibit the warning messages, use '-Wno-long-long'.
6396
6397'-Wvariadic-macros'
6398     Warn if variadic macros are used in ISO C90 mode, or if the GNU
6399     alternate syntax is used in ISO C99 mode.  This is enabled by
6400     either '-Wpedantic' or '-Wtraditional'.  To inhibit the warning
6401     messages, use '-Wno-variadic-macros'.
6402
6403'-Wvarargs'
6404     Warn upon questionable usage of the macros used to handle variable
6405     arguments like 'va_start'.  This is default.  To inhibit the
6406     warning messages, use '-Wno-varargs'.
6407
6408'-Wvector-operation-performance'
6409     Warn if vector operation is not implemented via SIMD capabilities
6410     of the architecture.  Mainly useful for the performance tuning.
6411     Vector operation can be implemented 'piecewise', which means that
6412     the scalar operation is performed on every vector element; 'in
6413     parallel', which means that the vector operation is implemented
6414     using scalars of wider type, which normally is more performance
6415     efficient; and 'as a single scalar', which means that vector fits
6416     into a scalar type.
6417
6418'-Wno-virtual-move-assign'
6419     Suppress warnings about inheriting from a virtual base with a
6420     non-trivial C++11 move assignment operator.  This is dangerous
6421     because if the virtual base is reachable along more than one path,
6422     it is moved multiple times, which can mean both objects end up in
6423     the moved-from state.  If the move assignment operator is written
6424     to avoid moving from a moved-from object, this warning can be
6425     disabled.
6426
6427'-Wvla'
6428     Warn if a variable-length array is used in the code.  '-Wno-vla'
6429     prevents the '-Wpedantic' warning of the variable-length array.
6430
6431'-Wvla-larger-than=N'
6432     If this option is used, the compiler will warn on uses of
6433     variable-length arrays where the size is either unbounded, or
6434     bounded by an argument that can be larger than N bytes.  This is
6435     similar to how '-Walloca-larger-than=N' works, but with
6436     variable-length arrays.
6437
6438     Note that GCC may optimize small variable-length arrays of a known
6439     value into plain arrays, so this warning may not get triggered for
6440     such arrays.
6441
6442     This warning is not enabled by '-Wall', and is only active when
6443     '-ftree-vrp' is active (default for '-O2' and above).
6444
6445     See also '-Walloca-larger-than=N'.
6446
6447'-Wvolatile-register-var'
6448     Warn if a register variable is declared volatile.  The volatile
6449     modifier does not inhibit all optimizations that may eliminate
6450     reads and/or writes to register variables.  This warning is enabled
6451     by '-Wall'.
6452
6453'-Wdisabled-optimization'
6454     Warn if a requested optimization pass is disabled.  This warning
6455     does not generally indicate that there is anything wrong with your
6456     code; it merely indicates that GCC's optimizers are unable to
6457     handle the code effectively.  Often, the problem is that your code
6458     is too big or too complex; GCC refuses to optimize programs when
6459     the optimization itself is likely to take inordinate amounts of
6460     time.
6461
6462'-Wpointer-sign (C and Objective-C only)'
6463     Warn for pointer argument passing or assignment with different
6464     signedness.  This option is only supported for C and Objective-C.
6465     It is implied by '-Wall' and by '-Wpedantic', which can be disabled
6466     with '-Wno-pointer-sign'.
6467
6468'-Wstack-protector'
6469     This option is only active when '-fstack-protector' is active.  It
6470     warns about functions that are not protected against stack
6471     smashing.
6472
6473'-Woverlength-strings'
6474     Warn about string constants that are longer than the "minimum
6475     maximum" length specified in the C standard.  Modern compilers
6476     generally allow string constants that are much longer than the
6477     standard's minimum limit, but very portable programs should avoid
6478     using longer strings.
6479
6480     The limit applies _after_ string constant concatenation, and does
6481     not count the trailing NUL.  In C90, the limit was 509 characters;
6482     in C99, it was raised to 4095.  C++98 does not specify a normative
6483     minimum maximum, so we do not diagnose overlength strings in C++.
6484
6485     This option is implied by '-Wpedantic', and can be disabled with
6486     '-Wno-overlength-strings'.
6487
6488'-Wunsuffixed-float-constants (C and Objective-C only)'
6489
6490     Issue a warning for any floating constant that does not have a
6491     suffix.  When used together with '-Wsystem-headers' it warns about
6492     such constants in system header files.  This can be useful when
6493     preparing code to use with the 'FLOAT_CONST_DECIMAL64' pragma from
6494     the decimal floating-point extension to C99.
6495
6496'-Wno-designated-init (C and Objective-C only)'
6497     Suppress warnings when a positional initializer is used to
6498     initialize a structure that has been marked with the
6499     'designated_init' attribute.
6500
6501'-Whsa'
6502     Issue a warning when HSAIL cannot be emitted for the compiled
6503     function or OpenMP construct.
6504
6505
6506File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
6507
65083.9 Options for Debugging Your Program
6509======================================
6510
6511To tell GCC to emit extra information for use by a debugger, in almost
6512all cases you need only to add '-g' to your other options.
6513
6514 GCC allows you to use '-g' with '-O'.  The shortcuts taken by optimized
6515code may occasionally be surprising: some variables you declared may not
6516exist at all; flow of control may briefly move where you did not expect
6517it; some statements may not be executed because they compute constant
6518results or their values are already at hand; some statements may execute
6519in different places because they have been moved out of loops.
6520Nevertheless it is possible to debug optimized output.  This makes it
6521reasonable to use the optimizer for programs that might have bugs.
6522
6523 If you are not using some other optimization option, consider using
6524'-Og' (*note Optimize Options::) with '-g'.  With no '-O' option at all,
6525some compiler passes that collect information useful for debugging do
6526not run at all, so that '-Og' may result in a better debugging
6527experience.
6528
6529'-g'
6530     Produce debugging information in the operating system's native
6531     format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this
6532     debugging information.
6533
6534     On most systems that use stabs format, '-g' enables use of extra
6535     debugging information that only GDB can use; this extra information
6536     makes debugging work better in GDB but probably makes other
6537     debuggers crash or refuse to read the program.  If you want to
6538     control for certain whether to generate the extra information, use
6539     '-gstabs+', '-gstabs', '-gxcoff+', '-gxcoff', or '-gvms' (see
6540     below).
6541
6542'-ggdb'
6543     Produce debugging information for use by GDB.  This means to use
6544     the most expressive format available (DWARF, stabs, or the native
6545     format if neither of those are supported), including GDB extensions
6546     if at all possible.
6547
6548'-gdwarf'
6549'-gdwarf-VERSION'
6550     Produce debugging information in DWARF format (if that is
6551     supported).  The value of VERSION may be either 2, 3, 4 or 5; the
6552     default version for most targets is 4.  DWARF Version 5 is only
6553     experimental.
6554
6555     Note that with DWARF Version 2, some ports require and always use
6556     some non-conflicting DWARF 3 extensions in the unwind tables.
6557
6558     Version 4 may require GDB 7.0 and '-fvar-tracking-assignments' for
6559     maximum benefit.
6560
6561     GCC no longer supports DWARF Version 1, which is substantially
6562     different than Version 2 and later.  For historical reasons, some
6563     other DWARF-related options such as '-fno-dwarf2-cfi-asm') retain a
6564     reference to DWARF Version 2 in their names, but apply to all
6565     currently-supported versions of DWARF.
6566
6567'-gstabs'
6568     Produce debugging information in stabs format (if that is
6569     supported), without GDB extensions.  This is the format used by DBX
6570     on most BSD systems.  On MIPS, Alpha and System V Release 4 systems
6571     this option produces stabs debugging output that is not understood
6572     by DBX.  On System V Release 4 systems this option requires the GNU
6573     assembler.
6574
6575'-gstabs+'
6576     Produce debugging information in stabs format (if that is
6577     supported), using GNU extensions understood only by the GNU
6578     debugger (GDB).  The use of these extensions is likely to make
6579     other debuggers crash or refuse to read the program.
6580
6581'-gxcoff'
6582     Produce debugging information in XCOFF format (if that is
6583     supported).  This is the format used by the DBX debugger on IBM
6584     RS/6000 systems.
6585
6586'-gxcoff+'
6587     Produce debugging information in XCOFF format (if that is
6588     supported), using GNU extensions understood only by the GNU
6589     debugger (GDB).  The use of these extensions is likely to make
6590     other debuggers crash or refuse to read the program, and may cause
6591     assemblers other than the GNU assembler (GAS) to fail with an
6592     error.
6593
6594'-gvms'
6595     Produce debugging information in Alpha/VMS debug format (if that is
6596     supported).  This is the format used by DEBUG on Alpha/VMS systems.
6597
6598'-gLEVEL'
6599'-ggdbLEVEL'
6600'-gstabsLEVEL'
6601'-gxcoffLEVEL'
6602'-gvmsLEVEL'
6603     Request debugging information and also use LEVEL to specify how
6604     much information.  The default level is 2.
6605
6606     Level 0 produces no debug information at all.  Thus, '-g0' negates
6607     '-g'.
6608
6609     Level 1 produces minimal information, enough for making backtraces
6610     in parts of the program that you don't plan to debug.  This
6611     includes descriptions of functions and external variables, and line
6612     number tables, but no information about local variables.
6613
6614     Level 3 includes extra information, such as all the macro
6615     definitions present in the program.  Some debuggers support macro
6616     expansion when you use '-g3'.
6617
6618     '-gdwarf' does not accept a concatenated debug level, to avoid
6619     confusion with '-gdwarf-LEVEL'.  Instead use an additional
6620     '-gLEVEL' option to change the debug level for DWARF.
6621
6622'-feliminate-unused-debug-symbols'
6623     Produce debugging information in stabs format (if that is
6624     supported), for only symbols that are actually used.
6625
6626'-femit-class-debug-always'
6627     Instead of emitting debugging information for a C++ class in only
6628     one object file, emit it in all object files using the class.  This
6629     option should be used only with debuggers that are unable to handle
6630     the way GCC normally emits debugging information for classes
6631     because using this option increases the size of debugging
6632     information by as much as a factor of two.
6633
6634'-fno-merge-debug-strings'
6635     Direct the linker to not merge together strings in the debugging
6636     information that are identical in different object files.  Merging
6637     is not supported by all assemblers or linkers.  Merging decreases
6638     the size of the debug information in the output file at the cost of
6639     increasing link processing time.  Merging is enabled by default.
6640
6641'-fdebug-prefix-map=OLD=NEW'
6642     When compiling files residing in directory 'OLD', record debugging
6643     information describing them as if the files resided in directory
6644     'NEW' instead.  This can be used to replace a build-time path with
6645     an install-time path in the debug info.  It can also be used to
6646     change an absolute path to a relative path by using '.' for NEW.
6647     This can give more reproducible builds, which are location
6648     independent, but may require an extra command to tell GDB where to
6649     find the source files.  See also '-ffile-prefix-map'.
6650
6651'-fvar-tracking'
6652     Run variable tracking pass.  It computes where variables are stored
6653     at each position in code.  Better debugging information is then
6654     generated (if the debugging information format supports this
6655     information).
6656
6657     It is enabled by default when compiling with optimization ('-Os',
6658     '-O', '-O2', ...), debugging information ('-g') and the debug info
6659     format supports it.
6660
6661'-fvar-tracking-assignments'
6662     Annotate assignments to user variables early in the compilation and
6663     attempt to carry the annotations over throughout the compilation
6664     all the way to the end, in an attempt to improve debug information
6665     while optimizing.  Use of '-gdwarf-4' is recommended along with it.
6666
6667     It can be enabled even if var-tracking is disabled, in which case
6668     annotations are created and maintained, but discarded at the end.
6669     By default, this flag is enabled together with '-fvar-tracking',
6670     except when selective scheduling is enabled.
6671
6672'-gsplit-dwarf'
6673     Separate as much DWARF debugging information as possible into a
6674     separate output file with the extension '.dwo'.  This option allows
6675     the build system to avoid linking files with debug information.  To
6676     be useful, this option requires a debugger capable of reading
6677     '.dwo' files.
6678
6679'-gpubnames'
6680     Generate DWARF '.debug_pubnames' and '.debug_pubtypes' sections.
6681
6682'-ggnu-pubnames'
6683     Generate '.debug_pubnames' and '.debug_pubtypes' sections in a
6684     format suitable for conversion into a GDB index.  This option is
6685     only useful with a linker that can produce GDB index version 7.
6686
6687'-fdebug-types-section'
6688     When using DWARF Version 4 or higher, type DIEs can be put into
6689     their own '.debug_types' section instead of making them part of the
6690     '.debug_info' section.  It is more efficient to put them in a
6691     separate comdat sections since the linker can then remove
6692     duplicates.  But not all DWARF consumers support '.debug_types'
6693     sections yet and on some objects '.debug_types' produces larger
6694     instead of smaller debugging information.
6695
6696'-grecord-gcc-switches'
6697'-gno-record-gcc-switches'
6698     This switch causes the command-line options used to invoke the
6699     compiler that may affect code generation to be appended to the
6700     DW_AT_producer attribute in DWARF debugging information.  The
6701     options are concatenated with spaces separating them from each
6702     other and from the compiler version.  It is enabled by default.
6703     See also '-frecord-gcc-switches' for another way of storing
6704     compiler options into the object file.
6705
6706'-gstrict-dwarf'
6707     Disallow using extensions of later DWARF standard version than
6708     selected with '-gdwarf-VERSION'.  On most targets using
6709     non-conflicting DWARF extensions from later standard versions is
6710     allowed.
6711
6712'-gno-strict-dwarf'
6713     Allow using extensions of later DWARF standard version than
6714     selected with '-gdwarf-VERSION'.
6715
6716'-gas-loc-support'
6717     Inform the compiler that the assembler supports '.loc' directives.
6718     It may then use them for the assembler to generate DWARF2+ line
6719     number tables.
6720
6721     This is generally desirable, because assembler-generated
6722     line-number tables are a lot more compact than those the compiler
6723     can generate itself.
6724
6725     This option will be enabled by default if, at GCC configure time,
6726     the assembler was found to support such directives.
6727
6728'-gno-as-loc-support'
6729     Force GCC to generate DWARF2+ line number tables internally, if
6730     DWARF2+ line number tables are to be generated.
6731
6732'gas-locview-support'
6733     Inform the compiler that the assembler supports 'view' assignment
6734     and reset assertion checking in '.loc' directives.
6735
6736     This option will be enabled by default if, at GCC configure time,
6737     the assembler was found to support them.
6738
6739'gno-as-locview-support'
6740     Force GCC to assign view numbers internally, if
6741     '-gvariable-location-views' are explicitly requested.
6742
6743'-gcolumn-info'
6744'-gno-column-info'
6745     Emit location column information into DWARF debugging information,
6746     rather than just file and line.  This option is enabled by default.
6747
6748'-gstatement-frontiers'
6749'-gno-statement-frontiers'
6750     This option causes GCC to create markers in the internal
6751     representation at the beginning of statements, and to keep them
6752     roughly in place throughout compilation, using them to guide the
6753     output of 'is_stmt' markers in the line number table.  This is
6754     enabled by default when compiling with optimization ('-Os', '-O',
6755     '-O2', ...), and outputting DWARF 2 debug information at the normal
6756     level.
6757
6758'-gvariable-location-views'
6759'-gvariable-location-views=incompat5'
6760'-gno-variable-location-views'
6761     Augment variable location lists with progressive view numbers
6762     implied from the line number table.  This enables debug information
6763     consumers to inspect state at certain points of the program, even
6764     if no instructions associated with the corresponding source
6765     locations are present at that point.  If the assembler lacks
6766     support for view numbers in line number tables, this will cause the
6767     compiler to emit the line number table, which generally makes them
6768     somewhat less compact.  The augmented line number tables and
6769     location lists are fully backward-compatible, so they can be
6770     consumed by debug information consumers that are not aware of these
6771     augmentations, but they won't derive any benefit from them either.
6772
6773     This is enabled by default when outputting DWARF 2 debug
6774     information at the normal level, as long as there is assembler
6775     support, '-fvar-tracking-assignments' is enabled and
6776     '-gstrict-dwarf' is not.  When assembler support is not available,
6777     this may still be enabled, but it will force GCC to output internal
6778     line number tables, and if '-ginternal-reset-location-views' is not
6779     enabled, that will most certainly lead to silently mismatching
6780     location views.
6781
6782     There is a proposed representation for view numbers that is not
6783     backward compatible with the location list format introduced in
6784     DWARF 5, that can be enabled with
6785     '-gvariable-location-views=incompat5'.  This option may be removed
6786     in the future, is only provided as a reference implementation of
6787     the proposed representation.  Debug information consumers are not
6788     expected to support this extended format, and they would be
6789     rendered unable to decode location lists using it.
6790
6791'-ginternal-reset-location-views'
6792'-gno-internal-reset-location-views'
6793     Attempt to determine location views that can be omitted from
6794     location view lists.  This requires the compiler to have very
6795     accurate insn length estimates, which isn't always the case, and it
6796     may cause incorrect view lists to be generated silently when using
6797     an assembler that does not support location view lists.  The GNU
6798     assembler will flag any such error as a 'view number mismatch'.
6799     This is only enabled on ports that define a reliable estimation
6800     function.
6801
6802'-ginline-points'
6803'-gno-inline-points'
6804     Generate extended debug information for inlined functions.
6805     Location view tracking markers are inserted at inlined entry
6806     points, so that address and view numbers can be computed and output
6807     in debug information.  This can be enabled independently of
6808     location views, in which case the view numbers won't be output, but
6809     it can only be enabled along with statement frontiers, and it is
6810     only enabled by default if location views are enabled.
6811
6812'-gz[=TYPE]'
6813     Produce compressed debug sections in DWARF format, if that is
6814     supported.  If TYPE is not given, the default type depends on the
6815     capabilities of the assembler and linker used.  TYPE may be one of
6816     'none' (don't compress debug sections), 'zlib' (use zlib
6817     compression in ELF gABI format), or 'zlib-gnu' (use zlib
6818     compression in traditional GNU format).  If the linker doesn't
6819     support writing compressed debug sections, the option is rejected.
6820     Otherwise, if the assembler does not support them, '-gz' is
6821     silently ignored when producing object files.
6822
6823'-femit-struct-debug-baseonly'
6824     Emit debug information for struct-like types only when the base
6825     name of the compilation source file matches the base name of file
6826     in which the struct is defined.
6827
6828     This option substantially reduces the size of debugging
6829     information, but at significant potential loss in type information
6830     to the debugger.  See '-femit-struct-debug-reduced' for a less
6831     aggressive option.  See '-femit-struct-debug-detailed' for more
6832     detailed control.
6833
6834     This option works only with DWARF debug output.
6835
6836'-femit-struct-debug-reduced'
6837     Emit debug information for struct-like types only when the base
6838     name of the compilation source file matches the base name of file
6839     in which the type is defined, unless the struct is a template or
6840     defined in a system header.
6841
6842     This option significantly reduces the size of debugging
6843     information, with some potential loss in type information to the
6844     debugger.  See '-femit-struct-debug-baseonly' for a more aggressive
6845     option.  See '-femit-struct-debug-detailed' for more detailed
6846     control.
6847
6848     This option works only with DWARF debug output.
6849
6850'-femit-struct-debug-detailed[=SPEC-LIST]'
6851     Specify the struct-like types for which the compiler generates
6852     debug information.  The intent is to reduce duplicate struct debug
6853     information between different object files within the same program.
6854
6855     This option is a detailed version of '-femit-struct-debug-reduced'
6856     and '-femit-struct-debug-baseonly', which serves for most needs.
6857
6858     A specification has the syntax
6859     ['dir:'|'ind:']['ord:'|'gen:']('any'|'sys'|'base'|'none')
6860
6861     The optional first word limits the specification to structs that
6862     are used directly ('dir:') or used indirectly ('ind:').  A struct
6863     type is used directly when it is the type of a variable, member.
6864     Indirect uses arise through pointers to structs.  That is, when use
6865     of an incomplete struct is valid, the use is indirect.  An example
6866     is 'struct one direct; struct two * indirect;'.
6867
6868     The optional second word limits the specification to ordinary
6869     structs ('ord:') or generic structs ('gen:').  Generic structs are
6870     a bit complicated to explain.  For C++, these are non-explicit
6871     specializations of template classes, or non-template classes within
6872     the above.  Other programming languages have generics, but
6873     '-femit-struct-debug-detailed' does not yet implement them.
6874
6875     The third word specifies the source files for those structs for
6876     which the compiler should emit debug information.  The values
6877     'none' and 'any' have the normal meaning.  The value 'base' means
6878     that the base of name of the file in which the type declaration
6879     appears must match the base of the name of the main compilation
6880     file.  In practice, this means that when compiling 'foo.c', debug
6881     information is generated for types declared in that file and
6882     'foo.h', but not other header files.  The value 'sys' means those
6883     types satisfying 'base' or declared in system or compiler headers.
6884
6885     You may need to experiment to determine the best settings for your
6886     application.
6887
6888     The default is '-femit-struct-debug-detailed=all'.
6889
6890     This option works only with DWARF debug output.
6891
6892'-fno-dwarf2-cfi-asm'
6893     Emit DWARF unwind info as compiler generated '.eh_frame' section
6894     instead of using GAS '.cfi_*' directives.
6895
6896'-fno-eliminate-unused-debug-types'
6897     Normally, when producing DWARF output, GCC avoids producing debug
6898     symbol output for types that are nowhere used in the source file
6899     being compiled.  Sometimes it is useful to have GCC emit debugging
6900     information for all types declared in a compilation unit,
6901     regardless of whether or not they are actually used in that
6902     compilation unit, for example if, in the debugger, you want to cast
6903     a value to a type that is not actually used in your program (but is
6904     declared).  More often, however, this results in a significant
6905     amount of wasted space.
6906
6907
6908File: gcc.info,  Node: Optimize Options,  Next: Instrumentation Options,  Prev: Debugging Options,  Up: Invoking GCC
6909
69103.10 Options That Control Optimization
6911======================================
6912
6913These options control various sorts of optimizations.
6914
6915 Without any optimization option, the compiler's goal is to reduce the
6916cost of compilation and to make debugging produce the expected results.
6917Statements are independent: if you stop the program with a breakpoint
6918between statements, you can then assign a new value to any variable or
6919change the program counter to any other statement in the function and
6920get exactly the results you expect from the source code.
6921
6922 Turning on optimization flags makes the compiler attempt to improve the
6923performance and/or code size at the expense of compilation time and
6924possibly the ability to debug the program.
6925
6926 The compiler performs optimization based on the knowledge it has of the
6927program.  Compiling multiple files at once to a single output file mode
6928allows the compiler to use information gained from all of the files when
6929compiling each of them.
6930
6931 Not all optimizations are controlled directly by a flag.  Only
6932optimizations that have a flag are listed in this section.
6933
6934 Most optimizations are only enabled if an '-O' level is set on the
6935command line.  Otherwise they are disabled, even if individual
6936optimization flags are specified.
6937
6938 Depending on the target and how GCC was configured, a slightly
6939different set of optimizations may be enabled at each '-O' level than
6940those listed here.  You can invoke GCC with '-Q --help=optimizers' to
6941find out the exact set of optimizations that are enabled at each level.
6942*Note Overall Options::, for examples.
6943
6944'-O'
6945'-O1'
6946     Optimize.  Optimizing compilation takes somewhat more time, and a
6947     lot more memory for a large function.
6948
6949     With '-O', the compiler tries to reduce code size and execution
6950     time, without performing any optimizations that take a great deal
6951     of compilation time.
6952
6953     '-O' turns on the following optimization flags:
6954          -fauto-inc-dec
6955          -fbranch-count-reg
6956          -fcombine-stack-adjustments
6957          -fcompare-elim
6958          -fcprop-registers
6959          -fdce
6960          -fdefer-pop
6961          -fdelayed-branch
6962          -fdse
6963          -fforward-propagate
6964          -fguess-branch-probability
6965          -fif-conversion2
6966          -fif-conversion
6967          -finline-functions-called-once
6968          -fipa-pure-const
6969          -fipa-profile
6970          -fipa-reference
6971          -fmerge-constants
6972          -fmove-loop-invariants
6973          -fomit-frame-pointer
6974          -freorder-blocks
6975          -fshrink-wrap
6976          -fshrink-wrap-separate
6977          -fsplit-wide-types
6978          -fssa-backprop
6979          -fssa-phiopt
6980          -ftree-bit-ccp
6981          -ftree-ccp
6982          -ftree-ch
6983          -ftree-coalesce-vars
6984          -ftree-copy-prop
6985          -ftree-dce
6986          -ftree-dominator-opts
6987          -ftree-dse
6988          -ftree-forwprop
6989          -ftree-fre
6990          -ftree-phiprop
6991          -ftree-sink
6992          -ftree-slsr
6993          -ftree-sra
6994          -ftree-pta
6995          -ftree-ter
6996          -funit-at-a-time
6997
6998'-O2'
6999     Optimize even more.  GCC performs nearly all supported
7000     optimizations that do not involve a space-speed tradeoff.  As
7001     compared to '-O', this option increases both compilation time and
7002     the performance of the generated code.
7003
7004     '-O2' turns on all optimization flags specified by '-O'.  It also
7005     turns on the following optimization flags:
7006          -fthread-jumps
7007          -falign-functions  -falign-jumps
7008          -falign-loops  -falign-labels
7009          -fcaller-saves
7010          -fcrossjumping
7011          -fcse-follow-jumps  -fcse-skip-blocks
7012          -fdelete-null-pointer-checks
7013          -fdevirtualize -fdevirtualize-speculatively
7014          -fexpensive-optimizations
7015          -fgcse  -fgcse-lm
7016          -fhoist-adjacent-loads
7017          -finline-small-functions
7018          -findirect-inlining
7019          -fipa-cp
7020          -fipa-bit-cp
7021          -fipa-vrp
7022          -fipa-sra
7023          -fipa-icf
7024          -fisolate-erroneous-paths-dereference
7025          -flra-remat
7026          -foptimize-sibling-calls
7027          -foptimize-strlen
7028          -fpartial-inlining
7029          -fpeephole2
7030          -freorder-blocks-algorithm=stc
7031          -freorder-blocks-and-partition -freorder-functions
7032          -frerun-cse-after-loop
7033          -fsched-interblock  -fsched-spec
7034          -fschedule-insns  -fschedule-insns2
7035          -fstore-merging
7036          -fstrict-aliasing
7037          -ftree-builtin-call-dce
7038          -ftree-switch-conversion -ftree-tail-merge
7039          -fcode-hoisting
7040          -ftree-pre
7041          -ftree-vrp
7042          -fipa-ra
7043
7044     Please note the warning under '-fgcse' about invoking '-O2' on
7045     programs that use computed gotos.
7046
7047'-O3'
7048     Optimize yet more.  '-O3' turns on all optimizations specified by
7049     '-O2' and also turns on the following optimization flags:
7050          -finline-functions
7051          -funswitch-loops
7052          -fpredictive-commoning
7053          -fgcse-after-reload
7054          -ftree-loop-vectorize
7055          -ftree-loop-distribution
7056          -ftree-loop-distribute-patterns
7057          -floop-interchange
7058          -floop-unroll-and-jam
7059          -fsplit-paths
7060          -ftree-slp-vectorize
7061          -fvect-cost-model
7062          -ftree-partial-pre
7063          -fpeel-loops
7064          -fipa-cp-clone
7065
7066'-O0'
7067     Reduce compilation time and make debugging produce the expected
7068     results.  This is the default.
7069
7070'-Os'
7071     Optimize for size.  '-Os' enables all '-O2' optimizations that do
7072     not typically increase code size.
7073
7074     '-Os' disables the following optimization flags:
7075          -falign-functions  -falign-jumps  -falign-loops
7076          -falign-labels  -fprefetch-loop-arrays
7077
7078     It also enables '-finline-functions', causes the compiler to tune
7079     for code size rather than execution speed, and performs further
7080     optimizations designed to reduce code size.
7081
7082'-Ofast'
7083     Disregard strict standards compliance.  '-Ofast' enables all '-O3'
7084     optimizations.  It also enables optimizations that are not valid
7085     for all standard-compliant programs.  It turns on '-ffast-math' and
7086     the Fortran-specific '-fstack-arrays', unless
7087     '-fmax-stack-var-size' is specified, and '-fno-protect-parens'.
7088
7089'-Og'
7090     Optimize debugging experience.  '-Og' enables optimizations that do
7091     not interfere with debugging.  It should be the optimization level
7092     of choice for the standard edit-compile-debug cycle, offering a
7093     reasonable level of optimization while maintaining fast compilation
7094     and a good debugging experience.
7095
7096 If you use multiple '-O' options, with or without level numbers, the
7097last such option is the one that is effective.
7098
7099 Options of the form '-fFLAG' specify machine-independent flags.  Most
7100flags have both positive and negative forms; the negative form of
7101'-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
7102listed--the one you typically use.  You can figure out the other form by
7103either removing 'no-' or adding it.
7104
7105 The following options control specific optimizations.  They are either
7106activated by '-O' options or are related to ones that are.  You can use
7107the following flags in the rare cases when "fine-tuning" of
7108optimizations to be performed is desired.
7109
7110'-fno-defer-pop'
7111     Always pop the arguments to each function call as soon as that
7112     function returns.  For machines that must pop arguments after a
7113     function call, the compiler normally lets arguments accumulate on
7114     the stack for several function calls and pops them all at once.
7115
7116     Disabled at levels '-O', '-O2', '-O3', '-Os'.
7117
7118'-fforward-propagate'
7119     Perform a forward propagation pass on RTL.  The pass tries to
7120     combine two instructions and checks if the result can be
7121     simplified.  If loop unrolling is active, two passes are performed
7122     and the second is scheduled after loop unrolling.
7123
7124     This option is enabled by default at optimization levels '-O',
7125     '-O2', '-O3', '-Os'.
7126
7127'-ffp-contract=STYLE'
7128     '-ffp-contract=off' disables floating-point expression contraction.
7129     '-ffp-contract=fast' enables floating-point expression contraction
7130     such as forming of fused multiply-add operations if the target has
7131     native support for them.  '-ffp-contract=on' enables floating-point
7132     expression contraction if allowed by the language standard.  This
7133     is currently not implemented and treated equal to
7134     '-ffp-contract=off'.
7135
7136     The default is '-ffp-contract=fast'.
7137
7138'-fomit-frame-pointer'
7139     Omit the frame pointer in functions that don't need one.  This
7140     avoids the instructions to save, set up and restore the frame
7141     pointer; on many targets it also makes an extra register available.
7142
7143     On some targets this flag has no effect because the standard
7144     calling sequence always uses a frame pointer, so it cannot be
7145     omitted.
7146
7147     Note that '-fno-omit-frame-pointer' doesn't guarantee the frame
7148     pointer is used in all functions.  Several targets always omit the
7149     frame pointer in leaf functions.
7150
7151     Enabled by default at '-O' and higher.
7152
7153'-foptimize-sibling-calls'
7154     Optimize sibling and tail recursive calls.
7155
7156     Enabled at levels '-O2', '-O3', '-Os'.
7157
7158'-foptimize-strlen'
7159     Optimize various standard C string functions (e.g.  'strlen',
7160     'strchr' or 'strcpy') and their '_FORTIFY_SOURCE' counterparts into
7161     faster alternatives.
7162
7163     Enabled at levels '-O2', '-O3'.
7164
7165'-fno-inline'
7166     Do not expand any functions inline apart from those marked with the
7167     'always_inline' attribute.  This is the default when not
7168     optimizing.
7169
7170     Single functions can be exempted from inlining by marking them with
7171     the 'noinline' attribute.
7172
7173'-finline-small-functions'
7174     Integrate functions into their callers when their body is smaller
7175     than expected function call code (so overall size of program gets
7176     smaller).  The compiler heuristically decides which functions are
7177     simple enough to be worth integrating in this way.  This inlining
7178     applies to all functions, even those not declared inline.
7179
7180     Enabled at levels '-O2', '-O3', '-Os'.
7181
7182'-findirect-inlining'
7183     Inline also indirect calls that are discovered to be known at
7184     compile time thanks to previous inlining.  This option has any
7185     effect only when inlining itself is turned on by the
7186     '-finline-functions' or '-finline-small-functions' options.
7187
7188     Enabled at levels '-O3', '-Os'.  Also enabled by '-fprofile-use'
7189     and '-fauto-profile'.
7190
7191'-finline-functions'
7192     Consider all functions for inlining, even if they are not declared
7193     inline.  The compiler heuristically decides which functions are
7194     worth integrating in this way.
7195
7196     If all calls to a given function are integrated, and the function
7197     is declared 'static', then the function is normally not output as
7198     assembler code in its own right.
7199
7200     Enabled at levels '-O2', '-O3', '-Os'.
7201
7202'-finline-functions-called-once'
7203     Consider all 'static' functions called once for inlining into their
7204     caller even if they are not marked 'inline'.  If a call to a given
7205     function is integrated, then the function is not output as
7206     assembler code in its own right.
7207
7208     Enabled at levels '-O1', '-O2', '-O3' and '-Os'.
7209
7210'-fearly-inlining'
7211     Inline functions marked by 'always_inline' and functions whose body
7212     seems smaller than the function call overhead early before doing
7213     '-fprofile-generate' instrumentation and real inlining pass.  Doing
7214     so makes profiling significantly cheaper and usually inlining
7215     faster on programs having large chains of nested wrapper functions.
7216
7217     Enabled by default.
7218
7219'-fipa-sra'
7220     Perform interprocedural scalar replacement of aggregates, removal
7221     of unused parameters and replacement of parameters passed by
7222     reference by parameters passed by value.
7223
7224     Enabled at levels '-O2', '-O3' and '-Os'.
7225
7226'-finline-limit=N'
7227     By default, GCC limits the size of functions that can be inlined.
7228     This flag allows coarse control of this limit.  N is the size of
7229     functions that can be inlined in number of pseudo instructions.
7230
7231     Inlining is actually controlled by a number of parameters, which
7232     may be specified individually by using '--param NAME=VALUE'.  The
7233     '-finline-limit=N' option sets some of these parameters as follows:
7234
7235     'max-inline-insns-single'
7236          is set to N/2.
7237     'max-inline-insns-auto'
7238          is set to N/2.
7239
7240     See below for a documentation of the individual parameters
7241     controlling inlining and for the defaults of these parameters.
7242
7243     _Note:_ there may be no value to '-finline-limit' that results in
7244     default behavior.
7245
7246     _Note:_ pseudo instruction represents, in this particular context,
7247     an abstract measurement of function's size.  In no way does it
7248     represent a count of assembly instructions and as such its exact
7249     meaning might change from one release to an another.
7250
7251'-fno-keep-inline-dllexport'
7252     This is a more fine-grained version of '-fkeep-inline-functions',
7253     which applies only to functions that are declared using the
7254     'dllexport' attribute or declspec.  *Note Declaring Attributes of
7255     Functions: Function Attributes.
7256
7257'-fkeep-inline-functions'
7258     In C, emit 'static' functions that are declared 'inline' into the
7259     object file, even if the function has been inlined into all of its
7260     callers.  This switch does not affect functions using the 'extern
7261     inline' extension in GNU C90.  In C++, emit any and all inline
7262     functions into the object file.
7263
7264'-fkeep-static-functions'
7265     Emit 'static' functions into the object file, even if the function
7266     is never used.
7267
7268'-fkeep-static-consts'
7269     Emit variables declared 'static const' when optimization isn't
7270     turned on, even if the variables aren't referenced.
7271
7272     GCC enables this option by default.  If you want to force the
7273     compiler to check if a variable is referenced, regardless of
7274     whether or not optimization is turned on, use the
7275     '-fno-keep-static-consts' option.
7276
7277'-fmerge-constants'
7278     Attempt to merge identical constants (string constants and
7279     floating-point constants) across compilation units.
7280
7281     This option is the default for optimized compilation if the
7282     assembler and linker support it.  Use '-fno-merge-constants' to
7283     inhibit this behavior.
7284
7285     Enabled at levels '-O', '-O2', '-O3', '-Os'.
7286
7287'-fmerge-all-constants'
7288     Attempt to merge identical constants and identical variables.
7289
7290     This option implies '-fmerge-constants'.  In addition to
7291     '-fmerge-constants' this considers e.g. even constant initialized
7292     arrays or initialized constant variables with integral or
7293     floating-point types.  Languages like C or C++ require each
7294     variable, including multiple instances of the same variable in
7295     recursive calls, to have distinct locations, so using this option
7296     results in non-conforming behavior.
7297
7298'-fmodulo-sched'
7299     Perform swing modulo scheduling immediately before the first
7300     scheduling pass.  This pass looks at innermost loops and reorders
7301     their instructions by overlapping different iterations.
7302
7303'-fmodulo-sched-allow-regmoves'
7304     Perform more aggressive SMS-based modulo scheduling with register
7305     moves allowed.  By setting this flag certain anti-dependences edges
7306     are deleted, which triggers the generation of reg-moves based on
7307     the life-range analysis.  This option is effective only with
7308     '-fmodulo-sched' enabled.
7309
7310'-fno-branch-count-reg'
7311     Avoid running a pass scanning for opportunities to use "decrement
7312     and branch" instructions on a count register instead of generating
7313     sequences of instructions that decrement a register, compare it
7314     against zero, and then branch based upon the result.  This option
7315     is only meaningful on architectures that support such instructions,
7316     which include x86, PowerPC, IA-64 and S/390.  Note that the
7317     '-fno-branch-count-reg' option doesn't remove the decrement and
7318     branch instructions from the generated instruction stream
7319     introduced by other optimization passes.
7320
7321     Enabled by default at '-O1' and higher.
7322
7323     The default is '-fbranch-count-reg'.
7324
7325'-fno-function-cse'
7326     Do not put function addresses in registers; make each instruction
7327     that calls a constant function contain the function's address
7328     explicitly.
7329
7330     This option results in less efficient code, but some strange hacks
7331     that alter the assembler output may be confused by the
7332     optimizations performed when this option is not used.
7333
7334     The default is '-ffunction-cse'
7335
7336'-fno-zero-initialized-in-bss'
7337     If the target supports a BSS section, GCC by default puts variables
7338     that are initialized to zero into BSS.  This can save space in the
7339     resulting code.
7340
7341     This option turns off this behavior because some programs
7342     explicitly rely on variables going to the data section--e.g., so
7343     that the resulting executable can find the beginning of that
7344     section and/or make assumptions based on that.
7345
7346     The default is '-fzero-initialized-in-bss'.
7347
7348'-fthread-jumps'
7349     Perform optimizations that check to see if a jump branches to a
7350     location where another comparison subsumed by the first is found.
7351     If so, the first branch is redirected to either the destination of
7352     the second branch or a point immediately following it, depending on
7353     whether the condition is known to be true or false.
7354
7355     Enabled at levels '-O2', '-O3', '-Os'.
7356
7357'-fsplit-wide-types'
7358     When using a type that occupies multiple registers, such as 'long
7359     long' on a 32-bit system, split the registers apart and allocate
7360     them independently.  This normally generates better code for those
7361     types, but may make debugging more difficult.
7362
7363     Enabled at levels '-O', '-O2', '-O3', '-Os'.
7364
7365'-fcse-follow-jumps'
7366     In common subexpression elimination (CSE), scan through jump
7367     instructions when the target of the jump is not reached by any
7368     other path.  For example, when CSE encounters an 'if' statement
7369     with an 'else' clause, CSE follows the jump when the condition
7370     tested is false.
7371
7372     Enabled at levels '-O2', '-O3', '-Os'.
7373
7374'-fcse-skip-blocks'
7375     This is similar to '-fcse-follow-jumps', but causes CSE to follow
7376     jumps that conditionally skip over blocks.  When CSE encounters a
7377     simple 'if' statement with no else clause, '-fcse-skip-blocks'
7378     causes CSE to follow the jump around the body of the 'if'.
7379
7380     Enabled at levels '-O2', '-O3', '-Os'.
7381
7382'-frerun-cse-after-loop'
7383     Re-run common subexpression elimination after loop optimizations
7384     are performed.
7385
7386     Enabled at levels '-O2', '-O3', '-Os'.
7387
7388'-fgcse'
7389     Perform a global common subexpression elimination pass.  This pass
7390     also performs global constant and copy propagation.
7391
7392     _Note:_ When compiling a program using computed gotos, a GCC
7393     extension, you may get better run-time performance if you disable
7394     the global common subexpression elimination pass by adding
7395     '-fno-gcse' to the command line.
7396
7397     Enabled at levels '-O2', '-O3', '-Os'.
7398
7399'-fgcse-lm'
7400     When '-fgcse-lm' is enabled, global common subexpression
7401     elimination attempts to move loads that are only killed by stores
7402     into themselves.  This allows a loop containing a load/store
7403     sequence to be changed to a load outside the loop, and a copy/store
7404     within the loop.
7405
7406     Enabled by default when '-fgcse' is enabled.
7407
7408'-fgcse-sm'
7409     When '-fgcse-sm' is enabled, a store motion pass is run after
7410     global common subexpression elimination.  This pass attempts to
7411     move stores out of loops.  When used in conjunction with
7412     '-fgcse-lm', loops containing a load/store sequence can be changed
7413     to a load before the loop and a store after the loop.
7414
7415     Not enabled at any optimization level.
7416
7417'-fgcse-las'
7418     When '-fgcse-las' is enabled, the global common subexpression
7419     elimination pass eliminates redundant loads that come after stores
7420     to the same memory location (both partial and full redundancies).
7421
7422     Not enabled at any optimization level.
7423
7424'-fgcse-after-reload'
7425     When '-fgcse-after-reload' is enabled, a redundant load elimination
7426     pass is performed after reload.  The purpose of this pass is to
7427     clean up redundant spilling.
7428
7429'-faggressive-loop-optimizations'
7430     This option tells the loop optimizer to use language constraints to
7431     derive bounds for the number of iterations of a loop.  This assumes
7432     that loop code does not invoke undefined behavior by for example
7433     causing signed integer overflows or out-of-bound array accesses.
7434     The bounds for the number of iterations of a loop are used to guide
7435     loop unrolling and peeling and loop exit test optimizations.  This
7436     option is enabled by default.
7437
7438'-funconstrained-commons'
7439     This option tells the compiler that variables declared in common
7440     blocks (e.g.  Fortran) may later be overridden with longer trailing
7441     arrays.  This prevents certain optimizations that depend on knowing
7442     the array bounds.
7443
7444'-fcrossjumping'
7445     Perform cross-jumping transformation.  This transformation unifies
7446     equivalent code and saves code size.  The resulting code may or may
7447     not perform better than without cross-jumping.
7448
7449     Enabled at levels '-O2', '-O3', '-Os'.
7450
7451'-fauto-inc-dec'
7452     Combine increments or decrements of addresses with memory accesses.
7453     This pass is always skipped on architectures that do not have
7454     instructions to support this.  Enabled by default at '-O' and
7455     higher on architectures that support this.
7456
7457'-fdce'
7458     Perform dead code elimination (DCE) on RTL.  Enabled by default at
7459     '-O' and higher.
7460
7461'-fdse'
7462     Perform dead store elimination (DSE) on RTL.  Enabled by default at
7463     '-O' and higher.
7464
7465'-fif-conversion'
7466     Attempt to transform conditional jumps into branch-less
7467     equivalents.  This includes use of conditional moves, min, max, set
7468     flags and abs instructions, and some tricks doable by standard
7469     arithmetics.  The use of conditional execution on chips where it is
7470     available is controlled by '-fif-conversion2'.
7471
7472     Enabled at levels '-O', '-O2', '-O3', '-Os'.
7473
7474'-fif-conversion2'
7475     Use conditional execution (where available) to transform
7476     conditional jumps into branch-less equivalents.
7477
7478     Enabled at levels '-O', '-O2', '-O3', '-Os'.
7479
7480'-fdeclone-ctor-dtor'
7481     The C++ ABI requires multiple entry points for constructors and
7482     destructors: one for a base subobject, one for a complete object,
7483     and one for a virtual destructor that calls operator delete
7484     afterwards.  For a hierarchy with virtual bases, the base and
7485     complete variants are clones, which means two copies of the
7486     function.  With this option, the base and complete variants are
7487     changed to be thunks that call a common implementation.
7488
7489     Enabled by '-Os'.
7490
7491'-fdelete-null-pointer-checks'
7492     Assume that programs cannot safely dereference null pointers, and
7493     that no code or data element resides at address zero.  This option
7494     enables simple constant folding optimizations at all optimization
7495     levels.  In addition, other optimization passes in GCC use this
7496     flag to control global dataflow analyses that eliminate useless
7497     checks for null pointers; these assume that a memory access to
7498     address zero always results in a trap, so that if a pointer is
7499     checked after it has already been dereferenced, it cannot be null.
7500
7501     Note however that in some environments this assumption is not true.
7502     Use '-fno-delete-null-pointer-checks' to disable this optimization
7503     for programs that depend on that behavior.
7504
7505     This option is enabled by default on most targets.  On Nios II ELF,
7506     it defaults to off.  On AVR, CR16, and MSP430, this option is
7507     completely disabled.
7508
7509     Passes that use the dataflow information are enabled independently
7510     at different optimization levels.
7511
7512'-fdevirtualize'
7513     Attempt to convert calls to virtual functions to direct calls.
7514     This is done both within a procedure and interprocedurally as part
7515     of indirect inlining ('-findirect-inlining') and interprocedural
7516     constant propagation ('-fipa-cp').  Enabled at levels '-O2', '-O3',
7517     '-Os'.
7518
7519'-fdevirtualize-speculatively'
7520     Attempt to convert calls to virtual functions to speculative direct
7521     calls.  Based on the analysis of the type inheritance graph,
7522     determine for a given call the set of likely targets.  If the set
7523     is small, preferably of size 1, change the call into a conditional
7524     deciding between direct and indirect calls.  The speculative calls
7525     enable more optimizations, such as inlining.  When they seem
7526     useless after further optimization, they are converted back into
7527     original form.
7528
7529'-fdevirtualize-at-ltrans'
7530     Stream extra information needed for aggressive devirtualization
7531     when running the link-time optimizer in local transformation mode.
7532     This option enables more devirtualization but significantly
7533     increases the size of streamed data.  For this reason it is
7534     disabled by default.
7535
7536'-fexpensive-optimizations'
7537     Perform a number of minor optimizations that are relatively
7538     expensive.
7539
7540     Enabled at levels '-O2', '-O3', '-Os'.
7541
7542'-free'
7543     Attempt to remove redundant extension instructions.  This is
7544     especially helpful for the x86-64 architecture, which implicitly
7545     zero-extends in 64-bit registers after writing to their lower
7546     32-bit half.
7547
7548     Enabled for Alpha, AArch64 and x86 at levels '-O2', '-O3', '-Os'.
7549
7550'-fno-lifetime-dse'
7551     In C++ the value of an object is only affected by changes within
7552     its lifetime: when the constructor begins, the object has an
7553     indeterminate value, and any changes during the lifetime of the
7554     object are dead when the object is destroyed.  Normally dead store
7555     elimination will take advantage of this; if your code relies on the
7556     value of the object storage persisting beyond the lifetime of the
7557     object, you can use this flag to disable this optimization.  To
7558     preserve stores before the constructor starts (e.g.  because your
7559     operator new clears the object storage) but still treat the object
7560     as dead after the destructor you, can use '-flifetime-dse=1'.  The
7561     default behavior can be explicitly selected with
7562     '-flifetime-dse=2'.  '-flifetime-dse=0' is equivalent to
7563     '-fno-lifetime-dse'.
7564
7565'-flive-range-shrinkage'
7566     Attempt to decrease register pressure through register live range
7567     shrinkage.  This is helpful for fast processors with small or
7568     moderate size register sets.
7569
7570'-fira-algorithm=ALGORITHM'
7571     Use the specified coloring algorithm for the integrated register
7572     allocator.  The ALGORITHM argument can be 'priority', which
7573     specifies Chow's priority coloring, or 'CB', which specifies
7574     Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not
7575     implemented for all architectures, but for those targets that do
7576     support it, it is the default because it generates better code.
7577
7578'-fira-region=REGION'
7579     Use specified regions for the integrated register allocator.  The
7580     REGION argument should be one of the following:
7581
7582     'all'
7583          Use all loops as register allocation regions.  This can give
7584          the best results for machines with a small and/or irregular
7585          register set.
7586
7587     'mixed'
7588          Use all loops except for loops with small register pressure as
7589          the regions.  This value usually gives the best results in
7590          most cases and for most architectures, and is enabled by
7591          default when compiling with optimization for speed ('-O',
7592          '-O2', ...).
7593
7594     'one'
7595          Use all functions as a single region.  This typically results
7596          in the smallest code size, and is enabled by default for '-Os'
7597          or '-O0'.
7598
7599'-fira-hoist-pressure'
7600     Use IRA to evaluate register pressure in the code hoisting pass for
7601     decisions to hoist expressions.  This option usually results in
7602     smaller code, but it can slow the compiler down.
7603
7604     This option is enabled at level '-Os' for all targets.
7605
7606'-fira-loop-pressure'
7607     Use IRA to evaluate register pressure in loops for decisions to
7608     move loop invariants.  This option usually results in generation of
7609     faster and smaller code on machines with large register files (>=
7610     32 registers), but it can slow the compiler down.
7611
7612     This option is enabled at level '-O3' for some targets.
7613
7614'-fno-ira-share-save-slots'
7615     Disable sharing of stack slots used for saving call-used hard
7616     registers living through a call.  Each hard register gets a
7617     separate stack slot, and as a result function stack frames are
7618     larger.
7619
7620'-fno-ira-share-spill-slots'
7621     Disable sharing of stack slots allocated for pseudo-registers.
7622     Each pseudo-register that does not get a hard register gets a
7623     separate stack slot, and as a result function stack frames are
7624     larger.
7625
7626'-flra-remat'
7627     Enable CFG-sensitive rematerialization in LRA. Instead of loading
7628     values of spilled pseudos, LRA tries to rematerialize (recalculate)
7629     values if it is profitable.
7630
7631     Enabled at levels '-O2', '-O3', '-Os'.
7632
7633'-fdelayed-branch'
7634     If supported for the target machine, attempt to reorder
7635     instructions to exploit instruction slots available after delayed
7636     branch instructions.
7637
7638     Enabled at levels '-O', '-O2', '-O3', '-Os'.
7639
7640'-fschedule-insns'
7641     If supported for the target machine, attempt to reorder
7642     instructions to eliminate execution stalls due to required data
7643     being unavailable.  This helps machines that have slow floating
7644     point or memory load instructions by allowing other instructions to
7645     be issued until the result of the load or floating-point
7646     instruction is required.
7647
7648     Enabled at levels '-O2', '-O3'.
7649
7650'-fschedule-insns2'
7651     Similar to '-fschedule-insns', but requests an additional pass of
7652     instruction scheduling after register allocation has been done.
7653     This is especially useful on machines with a relatively small
7654     number of registers and where memory load instructions take more
7655     than one cycle.
7656
7657     Enabled at levels '-O2', '-O3', '-Os'.
7658
7659'-fno-sched-interblock'
7660     Don't schedule instructions across basic blocks.  This is normally
7661     enabled by default when scheduling before register allocation, i.e.
7662     with '-fschedule-insns' or at '-O2' or higher.
7663
7664'-fno-sched-spec'
7665     Don't allow speculative motion of non-load instructions.  This is
7666     normally enabled by default when scheduling before register
7667     allocation, i.e. with '-fschedule-insns' or at '-O2' or higher.
7668
7669'-fsched-pressure'
7670     Enable register pressure sensitive insn scheduling before register
7671     allocation.  This only makes sense when scheduling before register
7672     allocation is enabled, i.e. with '-fschedule-insns' or at '-O2' or
7673     higher.  Usage of this option can improve the generated code and
7674     decrease its size by preventing register pressure increase above
7675     the number of available hard registers and subsequent spills in
7676     register allocation.
7677
7678'-fsched-spec-load'
7679     Allow speculative motion of some load instructions.  This only
7680     makes sense when scheduling before register allocation, i.e. with
7681     '-fschedule-insns' or at '-O2' or higher.
7682
7683'-fsched-spec-load-dangerous'
7684     Allow speculative motion of more load instructions.  This only
7685     makes sense when scheduling before register allocation, i.e. with
7686     '-fschedule-insns' or at '-O2' or higher.
7687
7688'-fsched-stalled-insns'
7689'-fsched-stalled-insns=N'
7690     Define how many insns (if any) can be moved prematurely from the
7691     queue of stalled insns into the ready list during the second
7692     scheduling pass.  '-fno-sched-stalled-insns' means that no insns
7693     are moved prematurely, '-fsched-stalled-insns=0' means there is no
7694     limit on how many queued insns can be moved prematurely.
7695     '-fsched-stalled-insns' without a value is equivalent to
7696     '-fsched-stalled-insns=1'.
7697
7698'-fsched-stalled-insns-dep'
7699'-fsched-stalled-insns-dep=N'
7700     Define how many insn groups (cycles) are examined for a dependency
7701     on a stalled insn that is a candidate for premature removal from
7702     the queue of stalled insns.  This has an effect only during the
7703     second scheduling pass, and only if '-fsched-stalled-insns' is
7704     used.  '-fno-sched-stalled-insns-dep' is equivalent to
7705     '-fsched-stalled-insns-dep=0'.  '-fsched-stalled-insns-dep' without
7706     a value is equivalent to '-fsched-stalled-insns-dep=1'.
7707
7708'-fsched2-use-superblocks'
7709     When scheduling after register allocation, use superblock
7710     scheduling.  This allows motion across basic block boundaries,
7711     resulting in faster schedules.  This option is experimental, as not
7712     all machine descriptions used by GCC model the CPU closely enough
7713     to avoid unreliable results from the algorithm.
7714
7715     This only makes sense when scheduling after register allocation,
7716     i.e. with '-fschedule-insns2' or at '-O2' or higher.
7717
7718'-fsched-group-heuristic'
7719     Enable the group heuristic in the scheduler.  This heuristic favors
7720     the instruction that belongs to a schedule group.  This is enabled
7721     by default when scheduling is enabled, i.e. with '-fschedule-insns'
7722     or '-fschedule-insns2' or at '-O2' or higher.
7723
7724'-fsched-critical-path-heuristic'
7725     Enable the critical-path heuristic in the scheduler.  This
7726     heuristic favors instructions on the critical path.  This is
7727     enabled by default when scheduling is enabled, i.e. with
7728     '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or higher.
7729
7730'-fsched-spec-insn-heuristic'
7731     Enable the speculative instruction heuristic in the scheduler.
7732     This heuristic favors speculative instructions with greater
7733     dependency weakness.  This is enabled by default when scheduling is
7734     enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
7735     '-O2' or higher.
7736
7737'-fsched-rank-heuristic'
7738     Enable the rank heuristic in the scheduler.  This heuristic favors
7739     the instruction belonging to a basic block with greater size or
7740     frequency.  This is enabled by default when scheduling is enabled,
7741     i.e. with '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or
7742     higher.
7743
7744'-fsched-last-insn-heuristic'
7745     Enable the last-instruction heuristic in the scheduler.  This
7746     heuristic favors the instruction that is less dependent on the last
7747     instruction scheduled.  This is enabled by default when scheduling
7748     is enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or
7749     at '-O2' or higher.
7750
7751'-fsched-dep-count-heuristic'
7752     Enable the dependent-count heuristic in the scheduler.  This
7753     heuristic favors the instruction that has more instructions
7754     depending on it.  This is enabled by default when scheduling is
7755     enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
7756     '-O2' or higher.
7757
7758'-freschedule-modulo-scheduled-loops'
7759     Modulo scheduling is performed before traditional scheduling.  If a
7760     loop is modulo scheduled, later scheduling passes may change its
7761     schedule.  Use this option to control that behavior.
7762
7763'-fselective-scheduling'
7764     Schedule instructions using selective scheduling algorithm.
7765     Selective scheduling runs instead of the first scheduler pass.
7766
7767'-fselective-scheduling2'
7768     Schedule instructions using selective scheduling algorithm.
7769     Selective scheduling runs instead of the second scheduler pass.
7770
7771'-fsel-sched-pipelining'
7772     Enable software pipelining of innermost loops during selective
7773     scheduling.  This option has no effect unless one of
7774     '-fselective-scheduling' or '-fselective-scheduling2' is turned on.
7775
7776'-fsel-sched-pipelining-outer-loops'
7777     When pipelining loops during selective scheduling, also pipeline
7778     outer loops.  This option has no effect unless
7779     '-fsel-sched-pipelining' is turned on.
7780
7781'-fsemantic-interposition'
7782     Some object formats, like ELF, allow interposing of symbols by the
7783     dynamic linker.  This means that for symbols exported from the DSO,
7784     the compiler cannot perform interprocedural propagation, inlining
7785     and other optimizations in anticipation that the function or
7786     variable in question may change.  While this feature is useful, for
7787     example, to rewrite memory allocation functions by a debugging
7788     implementation, it is expensive in the terms of code quality.  With
7789     '-fno-semantic-interposition' the compiler assumes that if
7790     interposition happens for functions the overwriting function will
7791     have precisely the same semantics (and side effects).  Similarly if
7792     interposition happens for variables, the constructor of the
7793     variable will be the same.  The flag has no effect for functions
7794     explicitly declared inline (where it is never allowed for
7795     interposition to change semantics) and for symbols explicitly
7796     declared weak.
7797
7798'-fshrink-wrap'
7799     Emit function prologues only before parts of the function that need
7800     it, rather than at the top of the function.  This flag is enabled
7801     by default at '-O' and higher.
7802
7803'-fshrink-wrap-separate'
7804     Shrink-wrap separate parts of the prologue and epilogue separately,
7805     so that those parts are only executed when needed.  This option is
7806     on by default, but has no effect unless '-fshrink-wrap' is also
7807     turned on and the target supports this.
7808
7809'-fcaller-saves'
7810     Enable allocation of values to registers that are clobbered by
7811     function calls, by emitting extra instructions to save and restore
7812     the registers around such calls.  Such allocation is done only when
7813     it seems to result in better code.
7814
7815     This option is always enabled by default on certain machines,
7816     usually those which have no call-preserved registers to use
7817     instead.
7818
7819     Enabled at levels '-O2', '-O3', '-Os'.
7820
7821'-fcombine-stack-adjustments'
7822     Tracks stack adjustments (pushes and pops) and stack memory
7823     references and then tries to find ways to combine them.
7824
7825     Enabled by default at '-O1' and higher.
7826
7827'-fipa-ra'
7828     Use caller save registers for allocation if those registers are not
7829     used by any called function.  In that case it is not necessary to
7830     save and restore them around calls.  This is only possible if
7831     called functions are part of same compilation unit as current
7832     function and they are compiled before it.
7833
7834     Enabled at levels '-O2', '-O3', '-Os', however the option is
7835     disabled if generated code will be instrumented for profiling
7836     ('-p', or '-pg') or if callee's register usage cannot be known
7837     exactly (this happens on targets that do not expose prologues and
7838     epilogues in RTL).
7839
7840'-fconserve-stack'
7841     Attempt to minimize stack usage.  The compiler attempts to use less
7842     stack space, even if that makes the program slower.  This option
7843     implies setting the 'large-stack-frame' parameter to 100 and the
7844     'large-stack-frame-growth' parameter to 400.
7845
7846'-ftree-reassoc'
7847     Perform reassociation on trees.  This flag is enabled by default at
7848     '-O' and higher.
7849
7850'-fcode-hoisting'
7851     Perform code hoisting.  Code hoisting tries to move the evaluation
7852     of expressions executed on all paths to the function exit as early
7853     as possible.  This is especially useful as a code size
7854     optimization, but it often helps for code speed as well.  This flag
7855     is enabled by default at '-O2' and higher.
7856
7857'-ftree-pre'
7858     Perform partial redundancy elimination (PRE) on trees.  This flag
7859     is enabled by default at '-O2' and '-O3'.
7860
7861'-ftree-partial-pre'
7862     Make partial redundancy elimination (PRE) more aggressive.  This
7863     flag is enabled by default at '-O3'.
7864
7865'-ftree-forwprop'
7866     Perform forward propagation on trees.  This flag is enabled by
7867     default at '-O' and higher.
7868
7869'-ftree-fre'
7870     Perform full redundancy elimination (FRE) on trees.  The difference
7871     between FRE and PRE is that FRE only considers expressions that are
7872     computed on all paths leading to the redundant computation.  This
7873     analysis is faster than PRE, though it exposes fewer redundancies.
7874     This flag is enabled by default at '-O' and higher.
7875
7876'-ftree-phiprop'
7877     Perform hoisting of loads from conditional pointers on trees.  This
7878     pass is enabled by default at '-O' and higher.
7879
7880'-fhoist-adjacent-loads'
7881     Speculatively hoist loads from both branches of an if-then-else if
7882     the loads are from adjacent locations in the same structure and the
7883     target architecture has a conditional move instruction.  This flag
7884     is enabled by default at '-O2' and higher.
7885
7886'-ftree-copy-prop'
7887     Perform copy propagation on trees.  This pass eliminates
7888     unnecessary copy operations.  This flag is enabled by default at
7889     '-O' and higher.
7890
7891'-fipa-pure-const'
7892     Discover which functions are pure or constant.  Enabled by default
7893     at '-O' and higher.
7894
7895'-fipa-reference'
7896     Discover which static variables do not escape the compilation unit.
7897     Enabled by default at '-O' and higher.
7898
7899'-fipa-pta'
7900     Perform interprocedural pointer analysis and interprocedural
7901     modification and reference analysis.  This option can cause
7902     excessive memory and compile-time usage on large compilation units.
7903     It is not enabled by default at any optimization level.
7904
7905'-fipa-profile'
7906     Perform interprocedural profile propagation.  The functions called
7907     only from cold functions are marked as cold.  Also functions
7908     executed once (such as 'cold', 'noreturn', static constructors or
7909     destructors) are identified.  Cold functions and loop less parts of
7910     functions executed once are then optimized for size.  Enabled by
7911     default at '-O' and higher.
7912
7913'-fipa-cp'
7914     Perform interprocedural constant propagation.  This optimization
7915     analyzes the program to determine when values passed to functions
7916     are constants and then optimizes accordingly.  This optimization
7917     can substantially increase performance if the application has
7918     constants passed to functions.  This flag is enabled by default at
7919     '-O2', '-Os' and '-O3'.
7920
7921'-fipa-cp-clone'
7922     Perform function cloning to make interprocedural constant
7923     propagation stronger.  When enabled, interprocedural constant
7924     propagation performs function cloning when externally visible
7925     function can be called with constant arguments.  Because this
7926     optimization can create multiple copies of functions, it may
7927     significantly increase code size (see '--param
7928     ipcp-unit-growth=VALUE').  This flag is enabled by default at
7929     '-O3'.
7930
7931'-fipa-bit-cp'
7932     When enabled, perform interprocedural bitwise constant propagation.
7933     This flag is enabled by default at '-O2'.  It requires that
7934     '-fipa-cp' is enabled.
7935
7936'-fipa-vrp'
7937     When enabled, perform interprocedural propagation of value ranges.
7938     This flag is enabled by default at '-O2'.  It requires that
7939     '-fipa-cp' is enabled.
7940
7941'-fipa-icf'
7942     Perform Identical Code Folding for functions and read-only
7943     variables.  The optimization reduces code size and may disturb
7944     unwind stacks by replacing a function by equivalent one with a
7945     different name.  The optimization works more effectively with
7946     link-time optimization enabled.
7947
7948     Nevertheless the behavior is similar to Gold Linker ICF
7949     optimization, GCC ICF works on different levels and thus the
7950     optimizations are not same - there are equivalences that are found
7951     only by GCC and equivalences found only by Gold.
7952
7953     This flag is enabled by default at '-O2' and '-Os'.
7954
7955'-fisolate-erroneous-paths-dereference'
7956     Detect paths that trigger erroneous or undefined behavior due to
7957     dereferencing a null pointer.  Isolate those paths from the main
7958     control flow and turn the statement with erroneous or undefined
7959     behavior into a trap.  This flag is enabled by default at '-O2' and
7960     higher and depends on '-fdelete-null-pointer-checks' also being
7961     enabled.
7962
7963'-fisolate-erroneous-paths-attribute'
7964     Detect paths that trigger erroneous or undefined behavior due to a
7965     null value being used in a way forbidden by a 'returns_nonnull' or
7966     'nonnull' attribute.  Isolate those paths from the main control
7967     flow and turn the statement with erroneous or undefined behavior
7968     into a trap.  This is not currently enabled, but may be enabled by
7969     '-O2' in the future.
7970
7971'-ftree-sink'
7972     Perform forward store motion on trees.  This flag is enabled by
7973     default at '-O' and higher.
7974
7975'-ftree-bit-ccp'
7976     Perform sparse conditional bit constant propagation on trees and
7977     propagate pointer alignment information.  This pass only operates
7978     on local scalar variables and is enabled by default at '-O' and
7979     higher.  It requires that '-ftree-ccp' is enabled.
7980
7981'-ftree-ccp'
7982     Perform sparse conditional constant propagation (CCP) on trees.
7983     This pass only operates on local scalar variables and is enabled by
7984     default at '-O' and higher.
7985
7986'-fssa-backprop'
7987     Propagate information about uses of a value up the definition chain
7988     in order to simplify the definitions.  For example, this pass
7989     strips sign operations if the sign of a value never matters.  The
7990     flag is enabled by default at '-O' and higher.
7991
7992'-fssa-phiopt'
7993     Perform pattern matching on SSA PHI nodes to optimize conditional
7994     code.  This pass is enabled by default at '-O' and higher.
7995
7996'-ftree-switch-conversion'
7997     Perform conversion of simple initializations in a switch to
7998     initializations from a scalar array.  This flag is enabled by
7999     default at '-O2' and higher.
8000
8001'-ftree-tail-merge'
8002     Look for identical code sequences.  When found, replace one with a
8003     jump to the other.  This optimization is known as tail merging or
8004     cross jumping.  This flag is enabled by default at '-O2' and
8005     higher.  The compilation time in this pass can be limited using
8006     'max-tail-merge-comparisons' parameter and
8007     'max-tail-merge-iterations' parameter.
8008
8009'-ftree-dce'
8010     Perform dead code elimination (DCE) on trees.  This flag is enabled
8011     by default at '-O' and higher.
8012
8013'-ftree-builtin-call-dce'
8014     Perform conditional dead code elimination (DCE) for calls to
8015     built-in functions that may set 'errno' but are otherwise free of
8016     side effects.  This flag is enabled by default at '-O2' and higher
8017     if '-Os' is not also specified.
8018
8019'-ftree-dominator-opts'
8020     Perform a variety of simple scalar cleanups (constant/copy
8021     propagation, redundancy elimination, range propagation and
8022     expression simplification) based on a dominator tree traversal.
8023     This also performs jump threading (to reduce jumps to jumps).  This
8024     flag is enabled by default at '-O' and higher.
8025
8026'-ftree-dse'
8027     Perform dead store elimination (DSE) on trees.  A dead store is a
8028     store into a memory location that is later overwritten by another
8029     store without any intervening loads.  In this case the earlier
8030     store can be deleted.  This flag is enabled by default at '-O' and
8031     higher.
8032
8033'-ftree-ch'
8034     Perform loop header copying on trees.  This is beneficial since it
8035     increases effectiveness of code motion optimizations.  It also
8036     saves one jump.  This flag is enabled by default at '-O' and
8037     higher.  It is not enabled for '-Os', since it usually increases
8038     code size.
8039
8040'-ftree-loop-optimize'
8041     Perform loop optimizations on trees.  This flag is enabled by
8042     default at '-O' and higher.
8043
8044'-ftree-loop-linear'
8045'-floop-strip-mine'
8046'-floop-block'
8047     Perform loop nest optimizations.  Same as '-floop-nest-optimize'.
8048     To use this code transformation, GCC has to be configured with
8049     '--with-isl' to enable the Graphite loop transformation
8050     infrastructure.
8051
8052'-fgraphite-identity'
8053     Enable the identity transformation for graphite.  For every SCoP we
8054     generate the polyhedral representation and transform it back to
8055     gimple.  Using '-fgraphite-identity' we can check the costs or
8056     benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
8057     minimal optimizations are also performed by the code generator isl,
8058     like index splitting and dead code elimination in loops.
8059
8060'-floop-nest-optimize'
8061     Enable the isl based loop nest optimizer.  This is a generic loop
8062     nest optimizer based on the Pluto optimization algorithms.  It
8063     calculates a loop structure optimized for data-locality and
8064     parallelism.  This option is experimental.
8065
8066'-floop-parallelize-all'
8067     Use the Graphite data dependence analysis to identify loops that
8068     can be parallelized.  Parallelize all the loops that can be
8069     analyzed to not contain loop carried dependences without checking
8070     that it is profitable to parallelize the loops.
8071
8072'-ftree-coalesce-vars'
8073     While transforming the program out of the SSA representation,
8074     attempt to reduce copying by coalescing versions of different
8075     user-defined variables, instead of just compiler temporaries.  This
8076     may severely limit the ability to debug an optimized program
8077     compiled with '-fno-var-tracking-assignments'.  In the negated
8078     form, this flag prevents SSA coalescing of user variables.  This
8079     option is enabled by default if optimization is enabled, and it
8080     does very little otherwise.
8081
8082'-ftree-loop-if-convert'
8083     Attempt to transform conditional jumps in the innermost loops to
8084     branch-less equivalents.  The intent is to remove control-flow from
8085     the innermost loops in order to improve the ability of the
8086     vectorization pass to handle these loops.  This is enabled by
8087     default if vectorization is enabled.
8088
8089'-ftree-loop-distribution'
8090     Perform loop distribution.  This flag can improve cache performance
8091     on big loop bodies and allow further loop optimizations, like
8092     parallelization or vectorization, to take place.  For example, the
8093     loop
8094          DO I = 1, N
8095            A(I) = B(I) + C
8096            D(I) = E(I) * F
8097          ENDDO
8098     is transformed to
8099          DO I = 1, N
8100             A(I) = B(I) + C
8101          ENDDO
8102          DO I = 1, N
8103             D(I) = E(I) * F
8104          ENDDO
8105
8106'-ftree-loop-distribute-patterns'
8107     Perform loop distribution of patterns that can be code generated
8108     with calls to a library.  This flag is enabled by default at '-O3'.
8109
8110     This pass distributes the initialization loops and generates a call
8111     to memset zero.  For example, the loop
8112          DO I = 1, N
8113            A(I) = 0
8114            B(I) = A(I) + I
8115          ENDDO
8116     is transformed to
8117          DO I = 1, N
8118             A(I) = 0
8119          ENDDO
8120          DO I = 1, N
8121             B(I) = A(I) + I
8122          ENDDO
8123     and the initialization loop is transformed into a call to memset
8124     zero.
8125
8126'-floop-interchange'
8127     Perform loop interchange outside of graphite.  This flag can
8128     improve cache performance on loop nest and allow further loop
8129     optimizations, like vectorization, to take place.  For example, the
8130     loop
8131          for (int i = 0; i < N; i++)
8132            for (int j = 0; j < N; j++)
8133              for (int k = 0; k < N; k++)
8134                c[i][j] = c[i][j] + a[i][k]*b[k][j];
8135     is transformed to
8136          for (int i = 0; i < N; i++)
8137            for (int k = 0; k < N; k++)
8138              for (int j = 0; j < N; j++)
8139                c[i][j] = c[i][j] + a[i][k]*b[k][j];
8140     This flag is enabled by default at '-O3'.
8141
8142'-floop-unroll-and-jam'
8143     Apply unroll and jam transformations on feasible loops.  In a loop
8144     nest this unrolls the outer loop by some factor and fuses the
8145     resulting multiple inner loops.  This flag is enabled by default at
8146     '-O3'.
8147
8148'-ftree-loop-im'
8149     Perform loop invariant motion on trees.  This pass moves only
8150     invariants that are hard to handle at RTL level (function calls,
8151     operations that expand to nontrivial sequences of insns).  With
8152     '-funswitch-loops' it also moves operands of conditions that are
8153     invariant out of the loop, so that we can use just trivial
8154     invariantness analysis in loop unswitching.  The pass also includes
8155     store motion.
8156
8157'-ftree-loop-ivcanon'
8158     Create a canonical counter for number of iterations in loops for
8159     which determining number of iterations requires complicated
8160     analysis.  Later optimizations then may determine the number
8161     easily.  Useful especially in connection with unrolling.
8162
8163'-fivopts'
8164     Perform induction variable optimizations (strength reduction,
8165     induction variable merging and induction variable elimination) on
8166     trees.
8167
8168'-ftree-parallelize-loops=n'
8169     Parallelize loops, i.e., split their iteration space to run in n
8170     threads.  This is only possible for loops whose iterations are
8171     independent and can be arbitrarily reordered.  The optimization is
8172     only profitable on multiprocessor machines, for loops that are
8173     CPU-intensive, rather than constrained e.g. by memory bandwidth.
8174     This option implies '-pthread', and thus is only supported on
8175     targets that have support for '-pthread'.
8176
8177'-ftree-pta'
8178     Perform function-local points-to analysis on trees.  This flag is
8179     enabled by default at '-O' and higher.
8180
8181'-ftree-sra'
8182     Perform scalar replacement of aggregates.  This pass replaces
8183     structure references with scalars to prevent committing structures
8184     to memory too early.  This flag is enabled by default at '-O' and
8185     higher.
8186
8187'-fstore-merging'
8188     Perform merging of narrow stores to consecutive memory addresses.
8189     This pass merges contiguous stores of immediate values narrower
8190     than a word into fewer wider stores to reduce the number of
8191     instructions.  This is enabled by default at '-O2' and higher as
8192     well as '-Os'.
8193
8194'-ftree-ter'
8195     Perform temporary expression replacement during the SSA->normal
8196     phase.  Single use/single def temporaries are replaced at their use
8197     location with their defining expression.  This results in
8198     non-GIMPLE code, but gives the expanders much more complex trees to
8199     work on resulting in better RTL generation.  This is enabled by
8200     default at '-O' and higher.
8201
8202'-ftree-slsr'
8203     Perform straight-line strength reduction on trees.  This recognizes
8204     related expressions involving multiplications and replaces them by
8205     less expensive calculations when possible.  This is enabled by
8206     default at '-O' and higher.
8207
8208'-ftree-vectorize'
8209     Perform vectorization on trees.  This flag enables
8210     '-ftree-loop-vectorize' and '-ftree-slp-vectorize' if not
8211     explicitly specified.
8212
8213'-ftree-loop-vectorize'
8214     Perform loop vectorization on trees.  This flag is enabled by
8215     default at '-O3' and when '-ftree-vectorize' is enabled.
8216
8217'-ftree-slp-vectorize'
8218     Perform basic block vectorization on trees.  This flag is enabled
8219     by default at '-O3' and when '-ftree-vectorize' is enabled.
8220
8221'-fvect-cost-model=MODEL'
8222     Alter the cost model used for vectorization.  The MODEL argument
8223     should be one of 'unlimited', 'dynamic' or 'cheap'.  With the
8224     'unlimited' model the vectorized code-path is assumed to be
8225     profitable while with the 'dynamic' model a runtime check guards
8226     the vectorized code-path to enable it only for iteration counts
8227     that will likely execute faster than when executing the original
8228     scalar loop.  The 'cheap' model disables vectorization of loops
8229     where doing so would be cost prohibitive for example due to
8230     required runtime checks for data dependence or alignment but
8231     otherwise is equal to the 'dynamic' model.  The default cost model
8232     depends on other optimization flags and is either 'dynamic' or
8233     'cheap'.
8234
8235'-fsimd-cost-model=MODEL'
8236     Alter the cost model used for vectorization of loops marked with
8237     the OpenMP simd directive.  The MODEL argument should be one of
8238     'unlimited', 'dynamic', 'cheap'.  All values of MODEL have the same
8239     meaning as described in '-fvect-cost-model' and by default a cost
8240     model defined with '-fvect-cost-model' is used.
8241
8242'-ftree-vrp'
8243     Perform Value Range Propagation on trees.  This is similar to the
8244     constant propagation pass, but instead of values, ranges of values
8245     are propagated.  This allows the optimizers to remove unnecessary
8246     range checks like array bound checks and null pointer checks.  This
8247     is enabled by default at '-O2' and higher.  Null pointer check
8248     elimination is only done if '-fdelete-null-pointer-checks' is
8249     enabled.
8250
8251'-fsplit-paths'
8252     Split paths leading to loop backedges.  This can improve dead code
8253     elimination and common subexpression elimination.  This is enabled
8254     by default at '-O2' and above.
8255
8256'-fsplit-ivs-in-unroller'
8257     Enables expression of values of induction variables in later
8258     iterations of the unrolled loop using the value in the first
8259     iteration.  This breaks long dependency chains, thus improving
8260     efficiency of the scheduling passes.
8261
8262     A combination of '-fweb' and CSE is often sufficient to obtain the
8263     same effect.  However, that is not reliable in cases where the loop
8264     body is more complicated than a single basic block.  It also does
8265     not work at all on some architectures due to restrictions in the
8266     CSE pass.
8267
8268     This optimization is enabled by default.
8269
8270'-fvariable-expansion-in-unroller'
8271     With this option, the compiler creates multiple copies of some
8272     local variables when unrolling a loop, which can result in superior
8273     code.
8274
8275'-fpartial-inlining'
8276     Inline parts of functions.  This option has any effect only when
8277     inlining itself is turned on by the '-finline-functions' or
8278     '-finline-small-functions' options.
8279
8280     Enabled at levels '-O2', '-O3', '-Os'.
8281
8282'-fpredictive-commoning'
8283     Perform predictive commoning optimization, i.e., reusing
8284     computations (especially memory loads and stores) performed in
8285     previous iterations of loops.
8286
8287     This option is enabled at level '-O3'.
8288
8289'-fprefetch-loop-arrays'
8290     If supported by the target machine, generate instructions to
8291     prefetch memory to improve the performance of loops that access
8292     large arrays.
8293
8294     This option may generate better or worse code; results are highly
8295     dependent on the structure of loops within the source code.
8296
8297     Disabled at level '-Os'.
8298
8299'-fno-printf-return-value'
8300     Do not substitute constants for known return value of formatted
8301     output functions such as 'sprintf', 'snprintf', 'vsprintf', and
8302     'vsnprintf' (but not 'printf' of 'fprintf').  This transformation
8303     allows GCC to optimize or even eliminate branches based on the
8304     known return value of these functions called with arguments that
8305     are either constant, or whose values are known to be in a range
8306     that makes determining the exact return value possible.  For
8307     example, when '-fprintf-return-value' is in effect, both the branch
8308     and the body of the 'if' statement (but not the call to 'snprint')
8309     can be optimized away when 'i' is a 32-bit or smaller integer
8310     because the return value is guaranteed to be at most 8.
8311
8312          char buf[9];
8313          if (snprintf (buf, "%08x", i) >= sizeof buf)
8314            ...
8315
8316     The '-fprintf-return-value' option relies on other optimizations
8317     and yields best results with '-O2' and above.  It works in tandem
8318     with the '-Wformat-overflow' and '-Wformat-truncation' options.
8319     The '-fprintf-return-value' option is enabled by default.
8320
8321'-fno-peephole'
8322'-fno-peephole2'
8323     Disable any machine-specific peephole optimizations.  The
8324     difference between '-fno-peephole' and '-fno-peephole2' is in how
8325     they are implemented in the compiler; some targets use one, some
8326     use the other, a few use both.
8327
8328     '-fpeephole' is enabled by default.  '-fpeephole2' enabled at
8329     levels '-O2', '-O3', '-Os'.
8330
8331'-fno-guess-branch-probability'
8332     Do not guess branch probabilities using heuristics.
8333
8334     GCC uses heuristics to guess branch probabilities if they are not
8335     provided by profiling feedback ('-fprofile-arcs').  These
8336     heuristics are based on the control flow graph.  If some branch
8337     probabilities are specified by '__builtin_expect', then the
8338     heuristics are used to guess branch probabilities for the rest of
8339     the control flow graph, taking the '__builtin_expect' info into
8340     account.  The interactions between the heuristics and
8341     '__builtin_expect' can be complex, and in some cases, it may be
8342     useful to disable the heuristics so that the effects of
8343     '__builtin_expect' are easier to understand.
8344
8345     The default is '-fguess-branch-probability' at levels '-O', '-O2',
8346     '-O3', '-Os'.
8347
8348'-freorder-blocks'
8349     Reorder basic blocks in the compiled function in order to reduce
8350     number of taken branches and improve code locality.
8351
8352     Enabled at levels '-O', '-O2', '-O3', '-Os'.
8353
8354'-freorder-blocks-algorithm=ALGORITHM'
8355     Use the specified algorithm for basic block reordering.  The
8356     ALGORITHM argument can be 'simple', which does not increase code
8357     size (except sometimes due to secondary effects like alignment), or
8358     'stc', the "software trace cache" algorithm, which tries to put all
8359     often executed code together, minimizing the number of branches
8360     executed by making extra copies of code.
8361
8362     The default is 'simple' at levels '-O', '-Os', and 'stc' at levels
8363     '-O2', '-O3'.
8364
8365'-freorder-blocks-and-partition'
8366     In addition to reordering basic blocks in the compiled function, in
8367     order to reduce number of taken branches, partitions hot and cold
8368     basic blocks into separate sections of the assembly and '.o' files,
8369     to improve paging and cache locality performance.
8370
8371     This optimization is automatically turned off in the presence of
8372     exception handling or unwind tables (on targets using
8373     setjump/longjump or target specific scheme), for linkonce sections,
8374     for functions with a user-defined section attribute and on any
8375     architecture that does not support named sections.  When
8376     '-fsplit-stack' is used this option is not enabled by default (to
8377     avoid linker errors), but may be enabled explicitly (if using a
8378     working linker).
8379
8380     Enabled for x86 at levels '-O2', '-O3', '-Os'.
8381
8382'-freorder-functions'
8383     Reorder functions in the object file in order to improve code
8384     locality.  This is implemented by using special subsections
8385     '.text.hot' for most frequently executed functions and
8386     '.text.unlikely' for unlikely executed functions.  Reordering is
8387     done by the linker so object file format must support named
8388     sections and linker must place them in a reasonable way.
8389
8390     Also profile feedback must be available to make this option
8391     effective.  See '-fprofile-arcs' for details.
8392
8393     Enabled at levels '-O2', '-O3', '-Os'.
8394
8395'-fstrict-aliasing'
8396     Allow the compiler to assume the strictest aliasing rules
8397     applicable to the language being compiled.  For C (and C++), this
8398     activates optimizations based on the type of expressions.  In
8399     particular, an object of one type is assumed never to reside at the
8400     same address as an object of a different type, unless the types are
8401     almost the same.  For example, an 'unsigned int' can alias an
8402     'int', but not a 'void*' or a 'double'.  A character type may alias
8403     any other type.
8404
8405     Pay special attention to code like this:
8406          union a_union {
8407            int i;
8408            double d;
8409          };
8410
8411          int f() {
8412            union a_union t;
8413            t.d = 3.0;
8414            return t.i;
8415          }
8416     The practice of reading from a different union member than the one
8417     most recently written to (called "type-punning") is common.  Even
8418     with '-fstrict-aliasing', type-punning is allowed, provided the
8419     memory is accessed through the union type.  So, the code above
8420     works as expected.  *Note Structures unions enumerations and
8421     bit-fields implementation::.  However, this code might not:
8422          int f() {
8423            union a_union t;
8424            int* ip;
8425            t.d = 3.0;
8426            ip = &t.i;
8427            return *ip;
8428          }
8429
8430     Similarly, access by taking the address, casting the resulting
8431     pointer and dereferencing the result has undefined behavior, even
8432     if the cast uses a union type, e.g.:
8433          int f() {
8434            double d = 3.0;
8435            return ((union a_union *) &d)->i;
8436          }
8437
8438     The '-fstrict-aliasing' option is enabled at levels '-O2', '-O3',
8439     '-Os'.
8440
8441'-falign-functions'
8442'-falign-functions=N'
8443     Align the start of functions to the next power-of-two greater than
8444     N, skipping up to N bytes.  For instance, '-falign-functions=32'
8445     aligns functions to the next 32-byte boundary, but
8446     '-falign-functions=24' aligns to the next 32-byte boundary only if
8447     this can be done by skipping 23 bytes or less.
8448
8449     '-fno-align-functions' and '-falign-functions=1' are equivalent and
8450     mean that functions are not aligned.
8451
8452     Some assemblers only support this flag when N is a power of two; in
8453     that case, it is rounded up.
8454
8455     If N is not specified or is zero, use a machine-dependent default.
8456     The maximum allowed N option value is 65536.
8457
8458     Enabled at levels '-O2', '-O3'.
8459
8460'-flimit-function-alignment'
8461     If this option is enabled, the compiler tries to avoid
8462     unnecessarily overaligning functions.  It attempts to instruct the
8463     assembler to align by the amount specified by '-falign-functions',
8464     but not to skip more bytes than the size of the function.
8465
8466'-falign-labels'
8467'-falign-labels=N'
8468     Align all branch targets to a power-of-two boundary, skipping up to
8469     N bytes like '-falign-functions'.  This option can easily make code
8470     slower, because it must insert dummy operations for when the branch
8471     target is reached in the usual flow of the code.
8472
8473     '-fno-align-labels' and '-falign-labels=1' are equivalent and mean
8474     that labels are not aligned.
8475
8476     If '-falign-loops' or '-falign-jumps' are applicable and are
8477     greater than this value, then their values are used instead.
8478
8479     If N is not specified or is zero, use a machine-dependent default
8480     which is very likely to be '1', meaning no alignment.  The maximum
8481     allowed N option value is 65536.
8482
8483     Enabled at levels '-O2', '-O3'.
8484
8485'-falign-loops'
8486'-falign-loops=N'
8487     Align loops to a power-of-two boundary, skipping up to N bytes like
8488     '-falign-functions'.  If the loops are executed many times, this
8489     makes up for any execution of the dummy operations.
8490
8491     '-fno-align-loops' and '-falign-loops=1' are equivalent and mean
8492     that loops are not aligned.  The maximum allowed N option value is
8493     65536.
8494
8495     If N is not specified or is zero, use a machine-dependent default.
8496
8497     Enabled at levels '-O2', '-O3'.
8498
8499'-falign-jumps'
8500'-falign-jumps=N'
8501     Align branch targets to a power-of-two boundary, for branch targets
8502     where the targets can only be reached by jumping, skipping up to N
8503     bytes like '-falign-functions'.  In this case, no dummy operations
8504     need be executed.
8505
8506     '-fno-align-jumps' and '-falign-jumps=1' are equivalent and mean
8507     that loops are not aligned.
8508
8509     If N is not specified or is zero, use a machine-dependent default.
8510     The maximum allowed N option value is 65536.
8511
8512     Enabled at levels '-O2', '-O3'.
8513
8514'-funit-at-a-time'
8515     This option is left for compatibility reasons.  '-funit-at-a-time'
8516     has no effect, while '-fno-unit-at-a-time' implies
8517     '-fno-toplevel-reorder' and '-fno-section-anchors'.
8518
8519     Enabled by default.
8520
8521'-fno-toplevel-reorder'
8522     Do not reorder top-level functions, variables, and 'asm'
8523     statements.  Output them in the same order that they appear in the
8524     input file.  When this option is used, unreferenced static
8525     variables are not removed.  This option is intended to support
8526     existing code that relies on a particular ordering.  For new code,
8527     it is better to use attributes when possible.
8528
8529     Enabled at level '-O0'.  When disabled explicitly, it also implies
8530     '-fno-section-anchors', which is otherwise enabled at '-O0' on some
8531     targets.
8532
8533'-fweb'
8534     Constructs webs as commonly used for register allocation purposes
8535     and assign each web individual pseudo register.  This allows the
8536     register allocation pass to operate on pseudos directly, but also
8537     strengthens several other optimization passes, such as CSE, loop
8538     optimizer and trivial dead code remover.  It can, however, make
8539     debugging impossible, since variables no longer stay in a "home
8540     register".
8541
8542     Enabled by default with '-funroll-loops'.
8543
8544'-fwhole-program'
8545     Assume that the current compilation unit represents the whole
8546     program being compiled.  All public functions and variables with
8547     the exception of 'main' and those merged by attribute
8548     'externally_visible' become static functions and in effect are
8549     optimized more aggressively by interprocedural optimizers.
8550
8551     This option should not be used in combination with '-flto'.
8552     Instead relying on a linker plugin should provide safer and more
8553     precise information.
8554
8555'-flto[=N]'
8556     This option runs the standard link-time optimizer.  When invoked
8557     with source code, it generates GIMPLE (one of GCC's internal
8558     representations) and writes it to special ELF sections in the
8559     object file.  When the object files are linked together, all the
8560     function bodies are read from these ELF sections and instantiated
8561     as if they had been part of the same translation unit.
8562
8563     To use the link-time optimizer, '-flto' and optimization options
8564     should be specified at compile time and during the final link.  It
8565     is recommended that you compile all the files participating in the
8566     same link with the same options and also specify those options at
8567     link time.  For example:
8568
8569          gcc -c -O2 -flto foo.c
8570          gcc -c -O2 -flto bar.c
8571          gcc -o myprog -flto -O2 foo.o bar.o
8572
8573     The first two invocations to GCC save a bytecode representation of
8574     GIMPLE into special ELF sections inside 'foo.o' and 'bar.o'.  The
8575     final invocation reads the GIMPLE bytecode from 'foo.o' and
8576     'bar.o', merges the two files into a single internal image, and
8577     compiles the result as usual.  Since both 'foo.o' and 'bar.o' are
8578     merged into a single image, this causes all the interprocedural
8579     analyses and optimizations in GCC to work across the two files as
8580     if they were a single one.  This means, for example, that the
8581     inliner is able to inline functions in 'bar.o' into functions in
8582     'foo.o' and vice-versa.
8583
8584     Another (simpler) way to enable link-time optimization is:
8585
8586          gcc -o myprog -flto -O2 foo.c bar.c
8587
8588     The above generates bytecode for 'foo.c' and 'bar.c', merges them
8589     together into a single GIMPLE representation and optimizes them as
8590     usual to produce 'myprog'.
8591
8592     The only important thing to keep in mind is that to enable
8593     link-time optimizations you need to use the GCC driver to perform
8594     the link step.  GCC then automatically performs link-time
8595     optimization if any of the objects involved were compiled with the
8596     '-flto' command-line option.  You generally should specify the
8597     optimization options to be used for link-time optimization though
8598     GCC tries to be clever at guessing an optimization level to use
8599     from the options used at compile time if you fail to specify one at
8600     link time.  You can always override the automatic decision to do
8601     link-time optimization by passing '-fno-lto' to the link command.
8602
8603     To make whole program optimization effective, it is necessary to
8604     make certain whole program assumptions.  The compiler needs to know
8605     what functions and variables can be accessed by libraries and
8606     runtime outside of the link-time optimized unit.  When supported by
8607     the linker, the linker plugin (see '-fuse-linker-plugin') passes
8608     information to the compiler about used and externally visible
8609     symbols.  When the linker plugin is not available,
8610     '-fwhole-program' should be used to allow the compiler to make
8611     these assumptions, which leads to more aggressive optimization
8612     decisions.
8613
8614     When '-fuse-linker-plugin' is not enabled, when a file is compiled
8615     with '-flto', the generated object file is larger than a regular
8616     object file because it contains GIMPLE bytecodes and the usual
8617     final code (see '-ffat-lto-objects'.  This means that object files
8618     with LTO information can be linked as normal object files; if
8619     '-fno-lto' is passed to the linker, no interprocedural
8620     optimizations are applied.  Note that when '-fno-fat-lto-objects'
8621     is enabled the compile stage is faster but you cannot perform a
8622     regular, non-LTO link on them.
8623
8624     Additionally, the optimization flags used to compile individual
8625     files are not necessarily related to those used at link time.  For
8626     instance,
8627
8628          gcc -c -O0 -ffat-lto-objects -flto foo.c
8629          gcc -c -O0 -ffat-lto-objects -flto bar.c
8630          gcc -o myprog -O3 foo.o bar.o
8631
8632     This produces individual object files with unoptimized assembler
8633     code, but the resulting binary 'myprog' is optimized at '-O3'.  If,
8634     instead, the final binary is generated with '-fno-lto', then
8635     'myprog' is not optimized.
8636
8637     When producing the final binary, GCC only applies link-time
8638     optimizations to those files that contain bytecode.  Therefore, you
8639     can mix and match object files and libraries with GIMPLE bytecodes
8640     and final object code.  GCC automatically selects which files to
8641     optimize in LTO mode and which files to link without further
8642     processing.
8643
8644     There are some code generation flags preserved by GCC when
8645     generating bytecodes, as they need to be used during the final link
8646     stage.  Generally options specified at link time override those
8647     specified at compile time.
8648
8649     If you do not specify an optimization level option '-O' at link
8650     time, then GCC uses the highest optimization level used when
8651     compiling the object files.
8652
8653     Currently, the following options and their settings are taken from
8654     the first object file that explicitly specifies them: '-fPIC',
8655     '-fpic', '-fpie', '-fcommon', '-fexceptions',
8656     '-fnon-call-exceptions', '-fgnu-tm' and all the '-m' target flags.
8657
8658     Certain ABI-changing flags are required to match in all compilation
8659     units, and trying to override this at link time with a conflicting
8660     value is ignored.  This includes options such as
8661     '-freg-struct-return' and '-fpcc-struct-return'.
8662
8663     Other options such as '-ffp-contract', '-fno-strict-overflow',
8664     '-fwrapv', '-fno-trapv' or '-fno-strict-aliasing' are passed
8665     through to the link stage and merged conservatively for conflicting
8666     translation units.  Specifically '-fno-strict-overflow', '-fwrapv'
8667     and '-fno-trapv' take precedence; and for example
8668     '-ffp-contract=off' takes precedence over '-ffp-contract=fast'.
8669     You can override them at link time.
8670
8671     If LTO encounters objects with C linkage declared with incompatible
8672     types in separate translation units to be linked together
8673     (undefined behavior according to ISO C99 6.2.7), a non-fatal
8674     diagnostic may be issued.  The behavior is still undefined at run
8675     time.  Similar diagnostics may be raised for other languages.
8676
8677     Another feature of LTO is that it is possible to apply
8678     interprocedural optimizations on files written in different
8679     languages:
8680
8681          gcc -c -flto foo.c
8682          g++ -c -flto bar.cc
8683          gfortran -c -flto baz.f90
8684          g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
8685
8686     Notice that the final link is done with 'g++' to get the C++
8687     runtime libraries and '-lgfortran' is added to get the Fortran
8688     runtime libraries.  In general, when mixing languages in LTO mode,
8689     you should use the same link command options as when mixing
8690     languages in a regular (non-LTO) compilation.
8691
8692     If object files containing GIMPLE bytecode are stored in a library
8693     archive, say 'libfoo.a', it is possible to extract and use them in
8694     an LTO link if you are using a linker with plugin support.  To
8695     create static libraries suitable for LTO, use 'gcc-ar' and
8696     'gcc-ranlib' instead of 'ar' and 'ranlib'; to show the symbols of
8697     object files with GIMPLE bytecode, use 'gcc-nm'.  Those commands
8698     require that 'ar', 'ranlib' and 'nm' have been compiled with plugin
8699     support.  At link time, use the flag '-fuse-linker-plugin' to
8700     ensure that the library participates in the LTO optimization
8701     process:
8702
8703          gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
8704
8705     With the linker plugin enabled, the linker extracts the needed
8706     GIMPLE files from 'libfoo.a' and passes them on to the running GCC
8707     to make them part of the aggregated GIMPLE image to be optimized.
8708
8709     If you are not using a linker with plugin support and/or do not
8710     enable the linker plugin, then the objects inside 'libfoo.a' are
8711     extracted and linked as usual, but they do not participate in the
8712     LTO optimization process.  In order to make a static library
8713     suitable for both LTO optimization and usual linkage, compile its
8714     object files with '-flto' '-ffat-lto-objects'.
8715
8716     Link-time optimizations do not require the presence of the whole
8717     program to operate.  If the program does not require any symbols to
8718     be exported, it is possible to combine '-flto' and
8719     '-fwhole-program' to allow the interprocedural optimizers to use
8720     more aggressive assumptions which may lead to improved optimization
8721     opportunities.  Use of '-fwhole-program' is not needed when linker
8722     plugin is active (see '-fuse-linker-plugin').
8723
8724     The current implementation of LTO makes no attempt to generate
8725     bytecode that is portable between different types of hosts.  The
8726     bytecode files are versioned and there is a strict version check,
8727     so bytecode files generated in one version of GCC do not work with
8728     an older or newer version of GCC.
8729
8730     Link-time optimization does not work well with generation of
8731     debugging information on systems other than those using a
8732     combination of ELF and DWARF.
8733
8734     If you specify the optional N, the optimization and code generation
8735     done at link time is executed in parallel using N parallel jobs by
8736     utilizing an installed 'make' program.  The environment variable
8737     'MAKE' may be used to override the program used.  The default value
8738     for N is 1.
8739
8740     You can also specify '-flto=jobserver' to use GNU make's job server
8741     mode to determine the number of parallel jobs.  This is useful when
8742     the Makefile calling GCC is already executing in parallel.  You
8743     must prepend a '+' to the command recipe in the parent Makefile for
8744     this to work.  This option likely only works if 'MAKE' is GNU make.
8745
8746'-flto-partition=ALG'
8747     Specify the partitioning algorithm used by the link-time optimizer.
8748     The value is either '1to1' to specify a partitioning mirroring the
8749     original source files or 'balanced' to specify partitioning into
8750     equally sized chunks (whenever possible) or 'max' to create new
8751     partition for every symbol where possible.  Specifying 'none' as an
8752     algorithm disables partitioning and streaming completely.  The
8753     default value is 'balanced'.  While '1to1' can be used as an
8754     workaround for various code ordering issues, the 'max' partitioning
8755     is intended for internal testing only.  The value 'one' specifies
8756     that exactly one partition should be used while the value 'none'
8757     bypasses partitioning and executes the link-time optimization step
8758     directly from the WPA phase.
8759
8760'-flto-odr-type-merging'
8761     Enable streaming of mangled types names of C++ types and their
8762     unification at link time.  This increases size of LTO object files,
8763     but enables diagnostics about One Definition Rule violations.
8764
8765'-flto-compression-level=N'
8766     This option specifies the level of compression used for
8767     intermediate language written to LTO object files, and is only
8768     meaningful in conjunction with LTO mode ('-flto').  Valid values
8769     are 0 (no compression) to 9 (maximum compression).  Values outside
8770     this range are clamped to either 0 or 9.  If the option is not
8771     given, a default balanced compression setting is used.
8772
8773'-fuse-linker-plugin'
8774     Enables the use of a linker plugin during link-time optimization.
8775     This option relies on plugin support in the linker, which is
8776     available in gold or in GNU ld 2.21 or newer.
8777
8778     This option enables the extraction of object files with GIMPLE
8779     bytecode out of library archives.  This improves the quality of
8780     optimization by exposing more code to the link-time optimizer.
8781     This information specifies what symbols can be accessed externally
8782     (by non-LTO object or during dynamic linking).  Resulting code
8783     quality improvements on binaries (and shared libraries that use
8784     hidden visibility) are similar to '-fwhole-program'.  See '-flto'
8785     for a description of the effect of this flag and how to use it.
8786
8787     This option is enabled by default when LTO support in GCC is
8788     enabled and GCC was configured for use with a linker supporting
8789     plugins (GNU ld 2.21 or newer or gold).
8790
8791'-ffat-lto-objects'
8792     Fat LTO objects are object files that contain both the intermediate
8793     language and the object code.  This makes them usable for both LTO
8794     linking and normal linking.  This option is effective only when
8795     compiling with '-flto' and is ignored at link time.
8796
8797     '-fno-fat-lto-objects' improves compilation time over plain LTO,
8798     but requires the complete toolchain to be aware of LTO. It requires
8799     a linker with linker plugin support for basic functionality.
8800     Additionally, 'nm', 'ar' and 'ranlib' need to support linker
8801     plugins to allow a full-featured build environment (capable of
8802     building static libraries etc).  GCC provides the 'gcc-ar',
8803     'gcc-nm', 'gcc-ranlib' wrappers to pass the right options to these
8804     tools.  With non fat LTO makefiles need to be modified to use them.
8805
8806     Note that modern binutils provide plugin auto-load mechanism.
8807     Installing the linker plugin into '$libdir/bfd-plugins' has the
8808     same effect as usage of the command wrappers ('gcc-ar', 'gcc-nm'
8809     and 'gcc-ranlib').
8810
8811     The default is '-fno-fat-lto-objects' on targets with linker plugin
8812     support.
8813
8814'-fcompare-elim'
8815     After register allocation and post-register allocation instruction
8816     splitting, identify arithmetic instructions that compute processor
8817     flags similar to a comparison operation based on that arithmetic.
8818     If possible, eliminate the explicit comparison operation.
8819
8820     This pass only applies to certain targets that cannot explicitly
8821     represent the comparison operation before register allocation is
8822     complete.
8823
8824     Enabled at levels '-O', '-O2', '-O3', '-Os'.
8825
8826'-fcprop-registers'
8827     After register allocation and post-register allocation instruction
8828     splitting, perform a copy-propagation pass to try to reduce
8829     scheduling dependencies and occasionally eliminate the copy.
8830
8831     Enabled at levels '-O', '-O2', '-O3', '-Os'.
8832
8833'-fprofile-correction'
8834     Profiles collected using an instrumented binary for multi-threaded
8835     programs may be inconsistent due to missed counter updates.  When
8836     this option is specified, GCC uses heuristics to correct or smooth
8837     out such inconsistencies.  By default, GCC emits an error message
8838     when an inconsistent profile is detected.
8839
8840'-fprofile-use'
8841'-fprofile-use=PATH'
8842     Enable profile feedback-directed optimizations, and the following
8843     optimizations which are generally profitable only with profile
8844     feedback available: '-fbranch-probabilities', '-fvpt',
8845     '-funroll-loops', '-fpeel-loops', '-ftracer', '-ftree-vectorize',
8846     and 'ftree-loop-distribute-patterns'.
8847
8848     Before you can use this option, you must first generate profiling
8849     information.  *Note Instrumentation Options::, for information
8850     about the '-fprofile-generate' option.
8851
8852     By default, GCC emits an error message if the feedback profiles do
8853     not match the source code.  This error can be turned into a warning
8854     by using '-Wcoverage-mismatch'.  Note this may result in poorly
8855     optimized code.
8856
8857     If PATH is specified, GCC looks at the PATH to find the profile
8858     feedback data files.  See '-fprofile-dir'.
8859
8860'-fauto-profile'
8861'-fauto-profile=PATH'
8862     Enable sampling-based feedback-directed optimizations, and the
8863     following optimizations which are generally profitable only with
8864     profile feedback available: '-fbranch-probabilities', '-fvpt',
8865     '-funroll-loops', '-fpeel-loops', '-ftracer', '-ftree-vectorize',
8866     '-finline-functions', '-fipa-cp', '-fipa-cp-clone',
8867     '-fpredictive-commoning', '-funswitch-loops',
8868     '-fgcse-after-reload', and '-ftree-loop-distribute-patterns'.
8869
8870     PATH is the name of a file containing AutoFDO profile information.
8871     If omitted, it defaults to 'fbdata.afdo' in the current directory.
8872
8873     Producing an AutoFDO profile data file requires running your
8874     program with the 'perf' utility on a supported GNU/Linux target
8875     system.  For more information, see <https://perf.wiki.kernel.org/>.
8876
8877     E.g.
8878          perf record -e br_inst_retired:near_taken -b -o perf.data \
8879              -- your_program
8880
8881     Then use the 'create_gcov' tool to convert the raw profile data to
8882     a format that can be used by GCC.  You must also supply the
8883     unstripped binary for your program to this tool.  See
8884     <https://github.com/google/autofdo>.
8885
8886     E.g.
8887          create_gcov --binary=your_program.unstripped --profile=perf.data \
8888              --gcov=profile.afdo
8889
8890 The following options control compiler behavior regarding
8891floating-point arithmetic.  These options trade off between speed and
8892correctness.  All must be specifically enabled.
8893
8894'-ffloat-store'
8895     Do not store floating-point variables in registers, and inhibit
8896     other options that might change whether a floating-point value is
8897     taken from a register or memory.
8898
8899     This option prevents undesirable excess precision on machines such
8900     as the 68000 where the floating registers (of the 68881) keep more
8901     precision than a 'double' is supposed to have.  Similarly for the
8902     x86 architecture.  For most programs, the excess precision does
8903     only good, but a few programs rely on the precise definition of
8904     IEEE floating point.  Use '-ffloat-store' for such programs, after
8905     modifying them to store all pertinent intermediate computations
8906     into variables.
8907
8908'-fexcess-precision=STYLE'
8909     This option allows further control over excess precision on
8910     machines where floating-point operations occur in a format with
8911     more precision or range than the IEEE standard and interchange
8912     floating-point types.  By default, '-fexcess-precision=fast' is in
8913     effect; this means that operations may be carried out in a wider
8914     precision than the types specified in the source if that would
8915     result in faster code, and it is unpredictable when rounding to the
8916     types specified in the source code takes place.  When compiling C,
8917     if '-fexcess-precision=standard' is specified then excess precision
8918     follows the rules specified in ISO C99; in particular, both casts
8919     and assignments cause values to be rounded to their semantic types
8920     (whereas '-ffloat-store' only affects assignments).  This option is
8921     enabled by default for C if a strict conformance option such as
8922     '-std=c99' is used.  '-ffast-math' enables
8923     '-fexcess-precision=fast' by default regardless of whether a strict
8924     conformance option is used.
8925
8926     '-fexcess-precision=standard' is not implemented for languages
8927     other than C. On the x86, it has no effect if '-mfpmath=sse' or
8928     '-mfpmath=sse+387' is specified; in the former case, IEEE semantics
8929     apply without excess precision, and in the latter, rounding is
8930     unpredictable.
8931
8932'-ffast-math'
8933     Sets the options '-fno-math-errno', '-funsafe-math-optimizations',
8934     '-ffinite-math-only', '-fno-rounding-math', '-fno-signaling-nans',
8935     '-fcx-limited-range' and '-fexcess-precision=fast'.
8936
8937     This option causes the preprocessor macro '__FAST_MATH__' to be
8938     defined.
8939
8940     This option is not turned on by any '-O' option besides '-Ofast'
8941     since it can result in incorrect output for programs that depend on
8942     an exact implementation of IEEE or ISO rules/specifications for
8943     math functions.  It may, however, yield faster code for programs
8944     that do not require the guarantees of these specifications.
8945
8946'-fno-math-errno'
8947     Do not set 'errno' after calling math functions that are executed
8948     with a single instruction, e.g., 'sqrt'.  A program that relies on
8949     IEEE exceptions for math error handling may want to use this flag
8950     for speed while maintaining IEEE arithmetic compatibility.
8951
8952     This option is not turned on by any '-O' option since it can result
8953     in incorrect output for programs that depend on an exact
8954     implementation of IEEE or ISO rules/specifications for math
8955     functions.  It may, however, yield faster code for programs that do
8956     not require the guarantees of these specifications.
8957
8958     The default is '-fmath-errno'.
8959
8960     On Darwin systems, the math library never sets 'errno'.  There is
8961     therefore no reason for the compiler to consider the possibility
8962     that it might, and '-fno-math-errno' is the default.
8963
8964'-funsafe-math-optimizations'
8965
8966     Allow optimizations for floating-point arithmetic that (a) assume
8967     that arguments and results are valid and (b) may violate IEEE or
8968     ANSI standards.  When used at link time, it may include libraries
8969     or startup files that change the default FPU control word or other
8970     similar optimizations.
8971
8972     This option is not turned on by any '-O' option since it can result
8973     in incorrect output for programs that depend on an exact
8974     implementation of IEEE or ISO rules/specifications for math
8975     functions.  It may, however, yield faster code for programs that do
8976     not require the guarantees of these specifications.  Enables
8977     '-fno-signed-zeros', '-fno-trapping-math', '-fassociative-math' and
8978     '-freciprocal-math'.
8979
8980     The default is '-fno-unsafe-math-optimizations'.
8981
8982'-fassociative-math'
8983
8984     Allow re-association of operands in series of floating-point
8985     operations.  This violates the ISO C and C++ language standard by
8986     possibly changing computation result.  NOTE: re-ordering may change
8987     the sign of zero as well as ignore NaNs and inhibit or create
8988     underflow or overflow (and thus cannot be used on code that relies
8989     on rounding behavior like '(x + 2**52) - 2**52'.  May also reorder
8990     floating-point comparisons and thus may not be used when ordered
8991     comparisons are required.  This option requires that both
8992     '-fno-signed-zeros' and '-fno-trapping-math' be in effect.
8993     Moreover, it doesn't make much sense with '-frounding-math'.  For
8994     Fortran the option is automatically enabled when both
8995     '-fno-signed-zeros' and '-fno-trapping-math' are in effect.
8996
8997     The default is '-fno-associative-math'.
8998
8999'-freciprocal-math'
9000
9001     Allow the reciprocal of a value to be used instead of dividing by
9002     the value if this enables optimizations.  For example 'x / y' can
9003     be replaced with 'x * (1/y)', which is useful if '(1/y)' is subject
9004     to common subexpression elimination.  Note that this loses
9005     precision and increases the number of flops operating on the value.
9006
9007     The default is '-fno-reciprocal-math'.
9008
9009'-ffinite-math-only'
9010     Allow optimizations for floating-point arithmetic that assume that
9011     arguments and results are not NaNs or +-Infs.
9012
9013     This option is not turned on by any '-O' option since it can result
9014     in incorrect output for programs that depend on an exact
9015     implementation of IEEE or ISO rules/specifications for math
9016     functions.  It may, however, yield faster code for programs that do
9017     not require the guarantees of these specifications.
9018
9019     The default is '-fno-finite-math-only'.
9020
9021'-fno-signed-zeros'
9022     Allow optimizations for floating-point arithmetic that ignore the
9023     signedness of zero.  IEEE arithmetic specifies the behavior of
9024     distinct +0.0 and -0.0 values, which then prohibits simplification
9025     of expressions such as x+0.0 or 0.0*x (even with
9026     '-ffinite-math-only').  This option implies that the sign of a zero
9027     result isn't significant.
9028
9029     The default is '-fsigned-zeros'.
9030
9031'-fno-trapping-math'
9032     Compile code assuming that floating-point operations cannot
9033     generate user-visible traps.  These traps include division by zero,
9034     overflow, underflow, inexact result and invalid operation.  This
9035     option requires that '-fno-signaling-nans' be in effect.  Setting
9036     this option may allow faster code if one relies on "non-stop" IEEE
9037     arithmetic, for example.
9038
9039     This option should never be turned on by any '-O' option since it
9040     can result in incorrect output for programs that depend on an exact
9041     implementation of IEEE or ISO rules/specifications for math
9042     functions.
9043
9044     The default is '-ftrapping-math'.
9045
9046'-frounding-math'
9047     Disable transformations and optimizations that assume default
9048     floating-point rounding behavior.  This is round-to-zero for all
9049     floating point to integer conversions, and round-to-nearest for all
9050     other arithmetic truncations.  This option should be specified for
9051     programs that change the FP rounding mode dynamically, or that may
9052     be executed with a non-default rounding mode.  This option disables
9053     constant folding of floating-point expressions at compile time
9054     (which may be affected by rounding mode) and arithmetic
9055     transformations that are unsafe in the presence of sign-dependent
9056     rounding modes.
9057
9058     The default is '-fno-rounding-math'.
9059
9060     This option is experimental and does not currently guarantee to
9061     disable all GCC optimizations that are affected by rounding mode.
9062     Future versions of GCC may provide finer control of this setting
9063     using C99's 'FENV_ACCESS' pragma.  This command-line option will be
9064     used to specify the default state for 'FENV_ACCESS'.
9065
9066'-fsignaling-nans'
9067     Compile code assuming that IEEE signaling NaNs may generate
9068     user-visible traps during floating-point operations.  Setting this
9069     option disables optimizations that may change the number of
9070     exceptions visible with signaling NaNs.  This option implies
9071     '-ftrapping-math'.
9072
9073     This option causes the preprocessor macro '__SUPPORT_SNAN__' to be
9074     defined.
9075
9076     The default is '-fno-signaling-nans'.
9077
9078     This option is experimental and does not currently guarantee to
9079     disable all GCC optimizations that affect signaling NaN behavior.
9080
9081'-fno-fp-int-builtin-inexact'
9082     Do not allow the built-in functions 'ceil', 'floor', 'round' and
9083     'trunc', and their 'float' and 'long double' variants, to generate
9084     code that raises the "inexact" floating-point exception for
9085     noninteger arguments.  ISO C99 and C11 allow these functions to
9086     raise the "inexact" exception, but ISO/IEC TS 18661-1:2014, the C
9087     bindings to IEEE 754-2008, does not allow these functions to do so.
9088
9089     The default is '-ffp-int-builtin-inexact', allowing the exception
9090     to be raised.  This option does nothing unless '-ftrapping-math' is
9091     in effect.
9092
9093     Even if '-fno-fp-int-builtin-inexact' is used, if the functions
9094     generate a call to a library function then the "inexact" exception
9095     may be raised if the library implementation does not follow TS
9096     18661.
9097
9098'-fsingle-precision-constant'
9099     Treat floating-point constants as single precision instead of
9100     implicitly converting them to double-precision constants.
9101
9102'-fcx-limited-range'
9103     When enabled, this option states that a range reduction step is not
9104     needed when performing complex division.  Also, there is no
9105     checking whether the result of a complex multiplication or division
9106     is 'NaN + I*NaN', with an attempt to rescue the situation in that
9107     case.  The default is '-fno-cx-limited-range', but is enabled by
9108     '-ffast-math'.
9109
9110     This option controls the default setting of the ISO C99
9111     'CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to all
9112     languages.
9113
9114'-fcx-fortran-rules'
9115     Complex multiplication and division follow Fortran rules.  Range
9116     reduction is done as part of complex division, but there is no
9117     checking whether the result of a complex multiplication or division
9118     is 'NaN + I*NaN', with an attempt to rescue the situation in that
9119     case.
9120
9121     The default is '-fno-cx-fortran-rules'.
9122
9123 The following options control optimizations that may improve
9124performance, but are not enabled by any '-O' options.  This section
9125includes experimental options that may produce broken code.
9126
9127'-fbranch-probabilities'
9128     After running a program compiled with '-fprofile-arcs' (*note
9129     Instrumentation Options::), you can compile it a second time using
9130     '-fbranch-probabilities', to improve optimizations based on the
9131     number of times each branch was taken.  When a program compiled
9132     with '-fprofile-arcs' exits, it saves arc execution counts to a
9133     file called 'SOURCENAME.gcda' for each source file.  The
9134     information in this data file is very dependent on the structure of
9135     the generated code, so you must use the same source code and the
9136     same optimization options for both compilations.
9137
9138     With '-fbranch-probabilities', GCC puts a 'REG_BR_PROB' note on
9139     each 'JUMP_INSN' and 'CALL_INSN'.  These can be used to improve
9140     optimization.  Currently, they are only used in one place: in
9141     'reorg.c', instead of guessing which path a branch is most likely
9142     to take, the 'REG_BR_PROB' values are used to exactly determine
9143     which path is taken more often.
9144
9145'-fprofile-values'
9146     If combined with '-fprofile-arcs', it adds code so that some data
9147     about values of expressions in the program is gathered.
9148
9149     With '-fbranch-probabilities', it reads back the data gathered from
9150     profiling values of expressions for usage in optimizations.
9151
9152     Enabled with '-fprofile-generate' and '-fprofile-use'.
9153
9154'-fprofile-reorder-functions'
9155     Function reordering based on profile instrumentation collects first
9156     time of execution of a function and orders these functions in
9157     ascending order.
9158
9159     Enabled with '-fprofile-use'.
9160
9161'-fvpt'
9162     If combined with '-fprofile-arcs', this option instructs the
9163     compiler to add code to gather information about values of
9164     expressions.
9165
9166     With '-fbranch-probabilities', it reads back the data gathered and
9167     actually performs the optimizations based on them.  Currently the
9168     optimizations include specialization of division operations using
9169     the knowledge about the value of the denominator.
9170
9171'-frename-registers'
9172     Attempt to avoid false dependencies in scheduled code by making use
9173     of registers left over after register allocation.  This
9174     optimization most benefits processors with lots of registers.
9175     Depending on the debug information format adopted by the target,
9176     however, it can make debugging impossible, since variables no
9177     longer stay in a "home register".
9178
9179     Enabled by default with '-funroll-loops'.
9180
9181'-fschedule-fusion'
9182     Performs a target dependent pass over the instruction stream to
9183     schedule instructions of same type together because target machine
9184     can execute them more efficiently if they are adjacent to each
9185     other in the instruction flow.
9186
9187     Enabled at levels '-O2', '-O3', '-Os'.
9188
9189'-ftracer'
9190     Perform tail duplication to enlarge superblock size.  This
9191     transformation simplifies the control flow of the function allowing
9192     other optimizations to do a better job.
9193
9194     Enabled with '-fprofile-use'.
9195
9196'-funroll-loops'
9197     Unroll loops whose number of iterations can be determined at
9198     compile time or upon entry to the loop.  '-funroll-loops' implies
9199     '-frerun-cse-after-loop', '-fweb' and '-frename-registers'.  It
9200     also turns on complete loop peeling (i.e. complete removal of loops
9201     with a small constant number of iterations).  This option makes
9202     code larger, and may or may not make it run faster.
9203
9204     Enabled with '-fprofile-use'.
9205
9206'-funroll-all-loops'
9207     Unroll all loops, even if their number of iterations is uncertain
9208     when the loop is entered.  This usually makes programs run more
9209     slowly.  '-funroll-all-loops' implies the same options as
9210     '-funroll-loops'.
9211
9212'-fpeel-loops'
9213     Peels loops for which there is enough information that they do not
9214     roll much (from profile feedback or static analysis).  It also
9215     turns on complete loop peeling (i.e. complete removal of loops with
9216     small constant number of iterations).
9217
9218     Enabled with '-O3' and/or '-fprofile-use'.
9219
9220'-fmove-loop-invariants'
9221     Enables the loop invariant motion pass in the RTL loop optimizer.
9222     Enabled at level '-O1'
9223
9224'-fsplit-loops'
9225     Split a loop into two if it contains a condition that's always true
9226     for one side of the iteration space and false for the other.
9227
9228'-funswitch-loops'
9229     Move branches with loop invariant conditions out of the loop, with
9230     duplicates of the loop on both branches (modified according to
9231     result of the condition).
9232
9233'-ffunction-sections'
9234'-fdata-sections'
9235     Place each function or data item into its own section in the output
9236     file if the target supports arbitrary sections.  The name of the
9237     function or the name of the data item determines the section's name
9238     in the output file.
9239
9240     Use these options on systems where the linker can perform
9241     optimizations to improve locality of reference in the instruction
9242     space.  Most systems using the ELF object format have linkers with
9243     such optimizations.  On AIX, the linker rearranges sections
9244     (CSECTs) based on the call graph.  The performance impact varies.
9245
9246     Together with a linker garbage collection (linker '--gc-sections'
9247     option) these options may lead to smaller statically-linked
9248     executables (after stripping).
9249
9250     On ELF/DWARF systems these options do not degenerate the quality of
9251     the debug information.  There could be issues with other object
9252     files/debug info formats.
9253
9254     Only use these options when there are significant benefits from
9255     doing so.  When you specify these options, the assembler and linker
9256     create larger object and executable files and are also slower.
9257     These options affect code generation.  They prevent optimizations
9258     by the compiler and assembler using relative locations inside a
9259     translation unit since the locations are unknown until link time.
9260     An example of such an optimization is relaxing calls to short call
9261     instructions.
9262
9263'-fbranch-target-load-optimize'
9264     Perform branch target register load optimization before prologue /
9265     epilogue threading.  The use of target registers can typically be
9266     exposed only during reload, thus hoisting loads out of loops and
9267     doing inter-block scheduling needs a separate optimization pass.
9268
9269'-fbranch-target-load-optimize2'
9270     Perform branch target register load optimization after prologue /
9271     epilogue threading.
9272
9273'-fbtr-bb-exclusive'
9274     When performing branch target register load optimization, don't
9275     reuse branch target registers within any basic block.
9276
9277'-fstdarg-opt'
9278     Optimize the prologue of variadic argument functions with respect
9279     to usage of those arguments.
9280
9281'-fsection-anchors'
9282     Try to reduce the number of symbolic address calculations by using
9283     shared "anchor" symbols to address nearby objects.  This
9284     transformation can help to reduce the number of GOT entries and GOT
9285     accesses on some targets.
9286
9287     For example, the implementation of the following function 'foo':
9288
9289          static int a, b, c;
9290          int foo (void) { return a + b + c; }
9291
9292     usually calculates the addresses of all three variables, but if you
9293     compile it with '-fsection-anchors', it accesses the variables from
9294     a common anchor point instead.  The effect is similar to the
9295     following pseudocode (which isn't valid C):
9296
9297          int foo (void)
9298          {
9299            register int *xr = &x;
9300            return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
9301          }
9302
9303     Not all targets support this option.
9304
9305'--param NAME=VALUE'
9306     In some places, GCC uses various constants to control the amount of
9307     optimization that is done.  For example, GCC does not inline
9308     functions that contain more than a certain number of instructions.
9309     You can control some of these constants on the command line using
9310     the '--param' option.
9311
9312     The names of specific parameters, and the meaning of the values,
9313     are tied to the internals of the compiler, and are subject to
9314     change without notice in future releases.
9315
9316     In each case, the VALUE is an integer.  The allowable choices for
9317     NAME are:
9318
9319     'predictable-branch-outcome'
9320          When branch is predicted to be taken with probability lower
9321          than this threshold (in percent), then it is considered well
9322          predictable.  The default is 10.
9323
9324     'max-rtl-if-conversion-insns'
9325          RTL if-conversion tries to remove conditional branches around
9326          a block and replace them with conditionally executed
9327          instructions.  This parameter gives the maximum number of
9328          instructions in a block which should be considered for
9329          if-conversion.  The default is 10, though the compiler will
9330          also use other heuristics to decide whether if-conversion is
9331          likely to be profitable.
9332
9333     'max-rtl-if-conversion-predictable-cost'
9334     'max-rtl-if-conversion-unpredictable-cost'
9335          RTL if-conversion will try to remove conditional branches
9336          around a block and replace them with conditionally executed
9337          instructions.  These parameters give the maximum permissible
9338          cost for the sequence that would be generated by if-conversion
9339          depending on whether the branch is statically determined to be
9340          predictable or not.  The units for this parameter are the same
9341          as those for the GCC internal seq_cost metric.  The compiler
9342          will try to provide a reasonable default for this parameter
9343          using the BRANCH_COST target macro.
9344
9345     'max-crossjump-edges'
9346          The maximum number of incoming edges to consider for
9347          cross-jumping.  The algorithm used by '-fcrossjumping' is
9348          O(N^2) in the number of edges incoming to each block.
9349          Increasing values mean more aggressive optimization, making
9350          the compilation time increase with probably small improvement
9351          in executable size.
9352
9353     'min-crossjump-insns'
9354          The minimum number of instructions that must be matched at the
9355          end of two blocks before cross-jumping is performed on them.
9356          This value is ignored in the case where all instructions in
9357          the block being cross-jumped from are matched.  The default
9358          value is 5.
9359
9360     'max-grow-copy-bb-insns'
9361          The maximum code size expansion factor when copying basic
9362          blocks instead of jumping.  The expansion is relative to a
9363          jump instruction.  The default value is 8.
9364
9365     'max-goto-duplication-insns'
9366          The maximum number of instructions to duplicate to a block
9367          that jumps to a computed goto.  To avoid O(N^2) behavior in a
9368          number of passes, GCC factors computed gotos early in the
9369          compilation process, and unfactors them as late as possible.
9370          Only computed jumps at the end of a basic blocks with no more
9371          than max-goto-duplication-insns are unfactored.  The default
9372          value is 8.
9373
9374     'max-delay-slot-insn-search'
9375          The maximum number of instructions to consider when looking
9376          for an instruction to fill a delay slot.  If more than this
9377          arbitrary number of instructions are searched, the time
9378          savings from filling the delay slot are minimal, so stop
9379          searching.  Increasing values mean more aggressive
9380          optimization, making the compilation time increase with
9381          probably small improvement in execution time.
9382
9383     'max-delay-slot-live-search'
9384          When trying to fill delay slots, the maximum number of
9385          instructions to consider when searching for a block with valid
9386          live register information.  Increasing this arbitrarily chosen
9387          value means more aggressive optimization, increasing the
9388          compilation time.  This parameter should be removed when the
9389          delay slot code is rewritten to maintain the control-flow
9390          graph.
9391
9392     'max-gcse-memory'
9393          The approximate maximum amount of memory that can be allocated
9394          in order to perform the global common subexpression
9395          elimination optimization.  If more memory than specified is
9396          required, the optimization is not done.
9397
9398     'max-gcse-insertion-ratio'
9399          If the ratio of expression insertions to deletions is larger
9400          than this value for any expression, then RTL PRE inserts or
9401          removes the expression and thus leaves partially redundant
9402          computations in the instruction stream.  The default value is
9403          20.
9404
9405     'max-pending-list-length'
9406          The maximum number of pending dependencies scheduling allows
9407          before flushing the current state and starting over.  Large
9408          functions with few branches or calls can create excessively
9409          large lists which needlessly consume memory and resources.
9410
9411     'max-modulo-backtrack-attempts'
9412          The maximum number of backtrack attempts the scheduler should
9413          make when modulo scheduling a loop.  Larger values can
9414          exponentially increase compilation time.
9415
9416     'max-inline-insns-single'
9417          Several parameters control the tree inliner used in GCC.  This
9418          number sets the maximum number of instructions (counted in
9419          GCC's internal representation) in a single function that the
9420          tree inliner considers for inlining.  This only affects
9421          functions declared inline and methods implemented in a class
9422          declaration (C++).  The default value is 400.
9423
9424     'max-inline-insns-auto'
9425          When you use '-finline-functions' (included in '-O3'), a lot
9426          of functions that would otherwise not be considered for
9427          inlining by the compiler are investigated.  To those
9428          functions, a different (more restrictive) limit compared to
9429          functions declared inline can be applied.  The default value
9430          is 30.
9431
9432     'inline-min-speedup'
9433          When estimated performance improvement of caller + callee
9434          runtime exceeds this threshold (in percent), the function can
9435          be inlined regardless of the limit on '--param
9436          max-inline-insns-single' and '--param max-inline-insns-auto'.
9437          The default value is 15.
9438
9439     'large-function-insns'
9440          The limit specifying really large functions.  For functions
9441          larger than this limit after inlining, inlining is constrained
9442          by '--param large-function-growth'.  This parameter is useful
9443          primarily to avoid extreme compilation time caused by
9444          non-linear algorithms used by the back end.  The default value
9445          is 2700.
9446
9447     'large-function-growth'
9448          Specifies maximal growth of large function caused by inlining
9449          in percents.  The default value is 100 which limits large
9450          function growth to 2.0 times the original size.
9451
9452     'large-unit-insns'
9453          The limit specifying large translation unit.  Growth caused by
9454          inlining of units larger than this limit is limited by
9455          '--param inline-unit-growth'.  For small units this might be
9456          too tight.  For example, consider a unit consisting of
9457          function A that is inline and B that just calls A three times.
9458          If B is small relative to A, the growth of unit is 300\% and
9459          yet such inlining is very sane.  For very large units
9460          consisting of small inlineable functions, however, the overall
9461          unit growth limit is needed to avoid exponential explosion of
9462          code size.  Thus for smaller units, the size is increased to
9463          '--param large-unit-insns' before applying '--param
9464          inline-unit-growth'.  The default is 10000.
9465
9466     'inline-unit-growth'
9467          Specifies maximal overall growth of the compilation unit
9468          caused by inlining.  The default value is 20 which limits unit
9469          growth to 1.2 times the original size.  Cold functions (either
9470          marked cold via an attribute or by profile feedback) are not
9471          accounted into the unit size.
9472
9473     'ipcp-unit-growth'
9474          Specifies maximal overall growth of the compilation unit
9475          caused by interprocedural constant propagation.  The default
9476          value is 10 which limits unit growth to 1.1 times the original
9477          size.
9478
9479     'large-stack-frame'
9480          The limit specifying large stack frames.  While inlining the
9481          algorithm is trying to not grow past this limit too much.  The
9482          default value is 256 bytes.
9483
9484     'large-stack-frame-growth'
9485          Specifies maximal growth of large stack frames caused by
9486          inlining in percents.  The default value is 1000 which limits
9487          large stack frame growth to 11 times the original size.
9488
9489     'max-inline-insns-recursive'
9490     'max-inline-insns-recursive-auto'
9491          Specifies the maximum number of instructions an out-of-line
9492          copy of a self-recursive inline function can grow into by
9493          performing recursive inlining.
9494
9495          '--param max-inline-insns-recursive' applies to functions
9496          declared inline.  For functions not declared inline, recursive
9497          inlining happens only when '-finline-functions' (included in
9498          '-O3') is enabled; '--param max-inline-insns-recursive-auto'
9499          applies instead.  The default value is 450.
9500
9501     'max-inline-recursive-depth'
9502     'max-inline-recursive-depth-auto'
9503          Specifies the maximum recursion depth used for recursive
9504          inlining.
9505
9506          '--param max-inline-recursive-depth' applies to functions
9507          declared inline.  For functions not declared inline, recursive
9508          inlining happens only when '-finline-functions' (included in
9509          '-O3') is enabled; '--param max-inline-recursive-depth-auto'
9510          applies instead.  The default value is 8.
9511
9512     'min-inline-recursive-probability'
9513          Recursive inlining is profitable only for function having deep
9514          recursion in average and can hurt for function having little
9515          recursion depth by increasing the prologue size or complexity
9516          of function body to other optimizers.
9517
9518          When profile feedback is available (see '-fprofile-generate')
9519          the actual recursion depth can be guessed from the probability
9520          that function recurses via a given call expression.  This
9521          parameter limits inlining only to call expressions whose
9522          probability exceeds the given threshold (in percents).  The
9523          default value is 10.
9524
9525     'early-inlining-insns'
9526          Specify growth that the early inliner can make.  In effect it
9527          increases the amount of inlining for code having a large
9528          abstraction penalty.  The default value is 14.
9529
9530     'max-early-inliner-iterations'
9531          Limit of iterations of the early inliner.  This basically
9532          bounds the number of nested indirect calls the early inliner
9533          can resolve.  Deeper chains are still handled by late
9534          inlining.
9535
9536     'comdat-sharing-probability'
9537          Probability (in percent) that C++ inline function with comdat
9538          visibility are shared across multiple compilation units.  The
9539          default value is 20.
9540
9541     'profile-func-internal-id'
9542          A parameter to control whether to use function internal id in
9543          profile database lookup.  If the value is 0, the compiler uses
9544          an id that is based on function assembler name and filename,
9545          which makes old profile data more tolerant to source changes
9546          such as function reordering etc.  The default value is 0.
9547
9548     'min-vect-loop-bound'
9549          The minimum number of iterations under which loops are not
9550          vectorized when '-ftree-vectorize' is used.  The number of
9551          iterations after vectorization needs to be greater than the
9552          value specified by this option to allow vectorization.  The
9553          default value is 0.
9554
9555     'gcse-cost-distance-ratio'
9556          Scaling factor in calculation of maximum distance an
9557          expression can be moved by GCSE optimizations.  This is
9558          currently supported only in the code hoisting pass.  The
9559          bigger the ratio, the more aggressive code hoisting is with
9560          simple expressions, i.e., the expressions that have cost less
9561          than 'gcse-unrestricted-cost'.  Specifying 0 disables hoisting
9562          of simple expressions.  The default value is 10.
9563
9564     'gcse-unrestricted-cost'
9565          Cost, roughly measured as the cost of a single typical machine
9566          instruction, at which GCSE optimizations do not constrain the
9567          distance an expression can travel.  This is currently
9568          supported only in the code hoisting pass.  The lesser the
9569          cost, the more aggressive code hoisting is.  Specifying 0
9570          allows all expressions to travel unrestricted distances.  The
9571          default value is 3.
9572
9573     'max-hoist-depth'
9574          The depth of search in the dominator tree for expressions to
9575          hoist.  This is used to avoid quadratic behavior in hoisting
9576          algorithm.  The value of 0 does not limit on the search, but
9577          may slow down compilation of huge functions.  The default
9578          value is 30.
9579
9580     'max-tail-merge-comparisons'
9581          The maximum amount of similar bbs to compare a bb with.  This
9582          is used to avoid quadratic behavior in tree tail merging.  The
9583          default value is 10.
9584
9585     'max-tail-merge-iterations'
9586          The maximum amount of iterations of the pass over the
9587          function.  This is used to limit compilation time in tree tail
9588          merging.  The default value is 2.
9589
9590     'store-merging-allow-unaligned'
9591          Allow the store merging pass to introduce unaligned stores if
9592          it is legal to do so.  The default value is 1.
9593
9594     'max-stores-to-merge'
9595          The maximum number of stores to attempt to merge into wider
9596          stores in the store merging pass.  The minimum value is 2 and
9597          the default is 64.
9598
9599     'max-unrolled-insns'
9600          The maximum number of instructions that a loop may have to be
9601          unrolled.  If a loop is unrolled, this parameter also
9602          determines how many times the loop code is unrolled.
9603
9604     'max-average-unrolled-insns'
9605          The maximum number of instructions biased by probabilities of
9606          their execution that a loop may have to be unrolled.  If a
9607          loop is unrolled, this parameter also determines how many
9608          times the loop code is unrolled.
9609
9610     'max-unroll-times'
9611          The maximum number of unrollings of a single loop.
9612
9613     'max-peeled-insns'
9614          The maximum number of instructions that a loop may have to be
9615          peeled.  If a loop is peeled, this parameter also determines
9616          how many times the loop code is peeled.
9617
9618     'max-peel-times'
9619          The maximum number of peelings of a single loop.
9620
9621     'max-peel-branches'
9622          The maximum number of branches on the hot path through the
9623          peeled sequence.
9624
9625     'max-completely-peeled-insns'
9626          The maximum number of insns of a completely peeled loop.
9627
9628     'max-completely-peel-times'
9629          The maximum number of iterations of a loop to be suitable for
9630          complete peeling.
9631
9632     'max-completely-peel-loop-nest-depth'
9633          The maximum depth of a loop nest suitable for complete
9634          peeling.
9635
9636     'max-unswitch-insns'
9637          The maximum number of insns of an unswitched loop.
9638
9639     'max-unswitch-level'
9640          The maximum number of branches unswitched in a single loop.
9641
9642     'max-loop-headers-insns'
9643          The maximum number of insns in loop header duplicated by the
9644          copy loop headers pass.
9645
9646     'lim-expensive'
9647          The minimum cost of an expensive expression in the loop
9648          invariant motion.
9649
9650     'iv-consider-all-candidates-bound'
9651          Bound on number of candidates for induction variables, below
9652          which all candidates are considered for each use in induction
9653          variable optimizations.  If there are more candidates than
9654          this, only the most relevant ones are considered to avoid
9655          quadratic time complexity.
9656
9657     'iv-max-considered-uses'
9658          The induction variable optimizations give up on loops that
9659          contain more induction variable uses.
9660
9661     'iv-always-prune-cand-set-bound'
9662          If the number of candidates in the set is smaller than this
9663          value, always try to remove unnecessary ivs from the set when
9664          adding a new one.
9665
9666     'avg-loop-niter'
9667          Average number of iterations of a loop.
9668
9669     'dse-max-object-size'
9670          Maximum size (in bytes) of objects tracked bytewise by dead
9671          store elimination.  Larger values may result in larger
9672          compilation times.
9673
9674     'scev-max-expr-size'
9675          Bound on size of expressions used in the scalar evolutions
9676          analyzer.  Large expressions slow the analyzer.
9677
9678     'scev-max-expr-complexity'
9679          Bound on the complexity of the expressions in the scalar
9680          evolutions analyzer.  Complex expressions slow the analyzer.
9681
9682     'max-tree-if-conversion-phi-args'
9683          Maximum number of arguments in a PHI supported by TREE if
9684          conversion unless the loop is marked with simd pragma.
9685
9686     'vect-max-version-for-alignment-checks'
9687          The maximum number of run-time checks that can be performed
9688          when doing loop versioning for alignment in the vectorizer.
9689
9690     'vect-max-version-for-alias-checks'
9691          The maximum number of run-time checks that can be performed
9692          when doing loop versioning for alias in the vectorizer.
9693
9694     'vect-max-peeling-for-alignment'
9695          The maximum number of loop peels to enhance access alignment
9696          for vectorizer.  Value -1 means no limit.
9697
9698     'max-iterations-to-track'
9699          The maximum number of iterations of a loop the brute-force
9700          algorithm for analysis of the number of iterations of the loop
9701          tries to evaluate.
9702
9703     'hot-bb-count-ws-permille'
9704          A basic block profile count is considered hot if it
9705          contributes to the given permillage (i.e.  0...1000) of the
9706          entire profiled execution.
9707
9708     'hot-bb-frequency-fraction'
9709          Select fraction of the entry block frequency of executions of
9710          basic block in function given basic block needs to have to be
9711          considered hot.
9712
9713     'max-predicted-iterations'
9714          The maximum number of loop iterations we predict statically.
9715          This is useful in cases where a function contains a single
9716          loop with known bound and another loop with unknown bound.
9717          The known number of iterations is predicted correctly, while
9718          the unknown number of iterations average to roughly 10.  This
9719          means that the loop without bounds appears artificially cold
9720          relative to the other one.
9721
9722     'builtin-expect-probability'
9723          Control the probability of the expression having the specified
9724          value.  This parameter takes a percentage (i.e.  0 ...  100)
9725          as input.  The default probability of 90 is obtained
9726          empirically.
9727
9728     'align-threshold'
9729
9730          Select fraction of the maximal frequency of executions of a
9731          basic block in a function to align the basic block.
9732
9733     'align-loop-iterations'
9734
9735          A loop expected to iterate at least the selected number of
9736          iterations is aligned.
9737
9738     'tracer-dynamic-coverage'
9739     'tracer-dynamic-coverage-feedback'
9740
9741          This value is used to limit superblock formation once the
9742          given percentage of executed instructions is covered.  This
9743          limits unnecessary code size expansion.
9744
9745          The 'tracer-dynamic-coverage-feedback' parameter is used only
9746          when profile feedback is available.  The real profiles (as
9747          opposed to statically estimated ones) are much less balanced
9748          allowing the threshold to be larger value.
9749
9750     'tracer-max-code-growth'
9751          Stop tail duplication once code growth has reached given
9752          percentage.  This is a rather artificial limit, as most of the
9753          duplicates are eliminated later in cross jumping, so it may be
9754          set to much higher values than is the desired code growth.
9755
9756     'tracer-min-branch-ratio'
9757
9758          Stop reverse growth when the reverse probability of best edge
9759          is less than this threshold (in percent).
9760
9761     'tracer-min-branch-probability'
9762     'tracer-min-branch-probability-feedback'
9763
9764          Stop forward growth if the best edge has probability lower
9765          than this threshold.
9766
9767          Similarly to 'tracer-dynamic-coverage' two parameters are
9768          provided.  'tracer-min-branch-probability-feedback' is used
9769          for compilation with profile feedback and
9770          'tracer-min-branch-probability' compilation without.  The
9771          value for compilation with profile feedback needs to be more
9772          conservative (higher) in order to make tracer effective.
9773
9774     'stack-clash-protection-guard-size'
9775          Specify the size of the operating system provided stack guard
9776          as 2 raised to NUM bytes.  The default value is 12 (4096
9777          bytes).  Acceptable values are between 12 and 30.  Higher
9778          values may reduce the number of explicit probes, but a value
9779          larger than the operating system provided guard will leave
9780          code vulnerable to stack clash style attacks.
9781
9782     'stack-clash-protection-probe-interval'
9783          Stack clash protection involves probing stack space as it is
9784          allocated.  This param controls the maximum distance between
9785          probes into the stack as 2 raised to NUM bytes.  Acceptable
9786          values are between 10 and 16 and defaults to 12.  Higher
9787          values may reduce the number of explicit probes, but a value
9788          larger than the operating system provided guard will leave
9789          code vulnerable to stack clash style attacks.
9790
9791     'max-cse-path-length'
9792
9793          The maximum number of basic blocks on path that CSE considers.
9794          The default is 10.
9795
9796     'max-cse-insns'
9797          The maximum number of instructions CSE processes before
9798          flushing.  The default is 1000.
9799
9800     'ggc-min-expand'
9801
9802          GCC uses a garbage collector to manage its own memory
9803          allocation.  This parameter specifies the minimum percentage
9804          by which the garbage collector's heap should be allowed to
9805          expand between collections.  Tuning this may improve
9806          compilation speed; it has no effect on code generation.
9807
9808          The default is 30% + 70% * (RAM/1GB) with an upper bound of
9809          100% when RAM >= 1GB.  If 'getrlimit' is available, the notion
9810          of "RAM" is the smallest of actual RAM and 'RLIMIT_DATA' or
9811          'RLIMIT_AS'.  If GCC is not able to calculate RAM on a
9812          particular platform, the lower bound of 30% is used.  Setting
9813          this parameter and 'ggc-min-heapsize' to zero causes a full
9814          collection to occur at every opportunity.  This is extremely
9815          slow, but can be useful for debugging.
9816
9817     'ggc-min-heapsize'
9818
9819          Minimum size of the garbage collector's heap before it begins
9820          bothering to collect garbage.  The first collection occurs
9821          after the heap expands by 'ggc-min-expand'% beyond
9822          'ggc-min-heapsize'.  Again, tuning this may improve
9823          compilation speed, and has no effect on code generation.
9824
9825          The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
9826          that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
9827          exceeded, but with a lower bound of 4096 (four megabytes) and
9828          an upper bound of 131072 (128 megabytes).  If GCC is not able
9829          to calculate RAM on a particular platform, the lower bound is
9830          used.  Setting this parameter very large effectively disables
9831          garbage collection.  Setting this parameter and
9832          'ggc-min-expand' to zero causes a full collection to occur at
9833          every opportunity.
9834
9835     'max-reload-search-insns'
9836          The maximum number of instruction reload should look backward
9837          for equivalent register.  Increasing values mean more
9838          aggressive optimization, making the compilation time increase
9839          with probably slightly better performance.  The default value
9840          is 100.
9841
9842     'max-cselib-memory-locations'
9843          The maximum number of memory locations cselib should take into
9844          account.  Increasing values mean more aggressive optimization,
9845          making the compilation time increase with probably slightly
9846          better performance.  The default value is 500.
9847
9848     'max-sched-ready-insns'
9849          The maximum number of instructions ready to be issued the
9850          scheduler should consider at any given time during the first
9851          scheduling pass.  Increasing values mean more thorough
9852          searches, making the compilation time increase with probably
9853          little benefit.  The default value is 100.
9854
9855     'max-sched-region-blocks'
9856          The maximum number of blocks in a region to be considered for
9857          interblock scheduling.  The default value is 10.
9858
9859     'max-pipeline-region-blocks'
9860          The maximum number of blocks in a region to be considered for
9861          pipelining in the selective scheduler.  The default value is
9862          15.
9863
9864     'max-sched-region-insns'
9865          The maximum number of insns in a region to be considered for
9866          interblock scheduling.  The default value is 100.
9867
9868     'max-pipeline-region-insns'
9869          The maximum number of insns in a region to be considered for
9870          pipelining in the selective scheduler.  The default value is
9871          200.
9872
9873     'min-spec-prob'
9874          The minimum probability (in percents) of reaching a source
9875          block for interblock speculative scheduling.  The default
9876          value is 40.
9877
9878     'max-sched-extend-regions-iters'
9879          The maximum number of iterations through CFG to extend
9880          regions.  A value of 0 (the default) disables region
9881          extensions.
9882
9883     'max-sched-insn-conflict-delay'
9884          The maximum conflict delay for an insn to be considered for
9885          speculative motion.  The default value is 3.
9886
9887     'sched-spec-prob-cutoff'
9888          The minimal probability of speculation success (in percents),
9889          so that speculative insns are scheduled.  The default value is
9890          40.
9891
9892     'sched-state-edge-prob-cutoff'
9893          The minimum probability an edge must have for the scheduler to
9894          save its state across it.  The default value is 10.
9895
9896     'sched-mem-true-dep-cost'
9897          Minimal distance (in CPU cycles) between store and load
9898          targeting same memory locations.  The default value is 1.
9899
9900     'selsched-max-lookahead'
9901          The maximum size of the lookahead window of selective
9902          scheduling.  It is a depth of search for available
9903          instructions.  The default value is 50.
9904
9905     'selsched-max-sched-times'
9906          The maximum number of times that an instruction is scheduled
9907          during selective scheduling.  This is the limit on the number
9908          of iterations through which the instruction may be pipelined.
9909          The default value is 2.
9910
9911     'selsched-insns-to-rename'
9912          The maximum number of best instructions in the ready list that
9913          are considered for renaming in the selective scheduler.  The
9914          default value is 2.
9915
9916     'sms-min-sc'
9917          The minimum value of stage count that swing modulo scheduler
9918          generates.  The default value is 2.
9919
9920     'max-last-value-rtl'
9921          The maximum size measured as number of RTLs that can be
9922          recorded in an expression in combiner for a pseudo register as
9923          last known value of that register.  The default is 10000.
9924
9925     'max-combine-insns'
9926          The maximum number of instructions the RTL combiner tries to
9927          combine.  The default value is 2 at '-Og' and 4 otherwise.
9928
9929     'integer-share-limit'
9930          Small integer constants can use a shared data structure,
9931          reducing the compiler's memory usage and increasing its speed.
9932          This sets the maximum value of a shared integer constant.  The
9933          default value is 256.
9934
9935     'ssp-buffer-size'
9936          The minimum size of buffers (i.e. arrays) that receive stack
9937          smashing protection when '-fstack-protection' is used.
9938
9939     'min-size-for-stack-sharing'
9940          The minimum size of variables taking part in stack slot
9941          sharing when not optimizing.  The default value is 32.
9942
9943     'max-jump-thread-duplication-stmts'
9944          Maximum number of statements allowed in a block that needs to
9945          be duplicated when threading jumps.
9946
9947     'max-fields-for-field-sensitive'
9948          Maximum number of fields in a structure treated in a field
9949          sensitive manner during pointer analysis.  The default is zero
9950          for '-O0' and '-O1', and 100 for '-Os', '-O2', and '-O3'.
9951
9952     'prefetch-latency'
9953          Estimate on average number of instructions that are executed
9954          before prefetch finishes.  The distance prefetched ahead is
9955          proportional to this constant.  Increasing this number may
9956          also lead to less streams being prefetched (see
9957          'simultaneous-prefetches').
9958
9959     'simultaneous-prefetches'
9960          Maximum number of prefetches that can run at the same time.
9961
9962     'l1-cache-line-size'
9963          The size of cache line in L1 cache, in bytes.
9964
9965     'l1-cache-size'
9966          The size of L1 cache, in kilobytes.
9967
9968     'l2-cache-size'
9969          The size of L2 cache, in kilobytes.
9970
9971     'loop-interchange-max-num-stmts'
9972          The maximum number of stmts in a loop to be interchanged.
9973
9974     'loop-interchange-stride-ratio'
9975          The minimum ratio between stride of two loops for interchange
9976          to be profitable.
9977
9978     'min-insn-to-prefetch-ratio'
9979          The minimum ratio between the number of instructions and the
9980          number of prefetches to enable prefetching in a loop.
9981
9982     'prefetch-min-insn-to-mem-ratio'
9983          The minimum ratio between the number of instructions and the
9984          number of memory references to enable prefetching in a loop.
9985
9986     'use-canonical-types'
9987          Whether the compiler should use the "canonical" type system.
9988          By default, this should always be 1, which uses a more
9989          efficient internal mechanism for comparing types in C++ and
9990          Objective-C++.  However, if bugs in the canonical type system
9991          are causing compilation failures, set this value to 0 to
9992          disable canonical types.
9993
9994     'switch-conversion-max-branch-ratio'
9995          Switch initialization conversion refuses to create arrays that
9996          are bigger than 'switch-conversion-max-branch-ratio' times the
9997          number of branches in the switch.
9998
9999     'max-partial-antic-length'
10000          Maximum length of the partial antic set computed during the
10001          tree partial redundancy elimination optimization
10002          ('-ftree-pre') when optimizing at '-O3' and above.  For some
10003          sorts of source code the enhanced partial redundancy
10004          elimination optimization can run away, consuming all of the
10005          memory available on the host machine.  This parameter sets a
10006          limit on the length of the sets that are computed, which
10007          prevents the runaway behavior.  Setting a value of 0 for this
10008          parameter allows an unlimited set length.
10009
10010     'sccvn-max-scc-size'
10011          Maximum size of a strongly connected component (SCC) during
10012          SCCVN processing.  If this limit is hit, SCCVN processing for
10013          the whole function is not done and optimizations depending on
10014          it are disabled.  The default maximum SCC size is 10000.
10015
10016     'sccvn-max-alias-queries-per-access'
10017          Maximum number of alias-oracle queries we perform when looking
10018          for redundancies for loads and stores.  If this limit is hit
10019          the search is aborted and the load or store is not considered
10020          redundant.  The number of queries is algorithmically limited
10021          to the number of stores on all paths from the load to the
10022          function entry.  The default maximum number of queries is
10023          1000.
10024
10025     'ira-max-loops-num'
10026          IRA uses regional register allocation by default.  If a
10027          function contains more loops than the number given by this
10028          parameter, only at most the given number of the most
10029          frequently-executed loops form regions for regional register
10030          allocation.  The default value of the parameter is 100.
10031
10032     'ira-max-conflict-table-size'
10033          Although IRA uses a sophisticated algorithm to compress the
10034          conflict table, the table can still require excessive amounts
10035          of memory for huge functions.  If the conflict table for a
10036          function could be more than the size in MB given by this
10037          parameter, the register allocator instead uses a faster,
10038          simpler, and lower-quality algorithm that does not require
10039          building a pseudo-register conflict table.  The default value
10040          of the parameter is 2000.
10041
10042     'ira-loop-reserved-regs'
10043          IRA can be used to evaluate more accurate register pressure in
10044          loops for decisions to move loop invariants (see '-O3').  The
10045          number of available registers reserved for some other purposes
10046          is given by this parameter.  The default value of the
10047          parameter is 2, which is the minimal number of registers
10048          needed by typical instructions.  This value is the best found
10049          from numerous experiments.
10050
10051     'lra-inheritance-ebb-probability-cutoff'
10052          LRA tries to reuse values reloaded in registers in subsequent
10053          insns.  This optimization is called inheritance.  EBB is used
10054          as a region to do this optimization.  The parameter defines a
10055          minimal fall-through edge probability in percentage used to
10056          add BB to inheritance EBB in LRA. The default value of the
10057          parameter is 40.  The value was chosen from numerous runs of
10058          SPEC2000 on x86-64.
10059
10060     'loop-invariant-max-bbs-in-loop'
10061          Loop invariant motion can be very expensive, both in
10062          compilation time and in amount of needed compile-time memory,
10063          with very large loops.  Loops with more basic blocks than this
10064          parameter won't have loop invariant motion optimization
10065          performed on them.  The default value of the parameter is 1000
10066          for '-O1' and 10000 for '-O2' and above.
10067
10068     'loop-max-datarefs-for-datadeps'
10069          Building data dependencies is expensive for very large loops.
10070          This parameter limits the number of data references in loops
10071          that are considered for data dependence analysis.  These large
10072          loops are no handled by the optimizations using loop data
10073          dependencies.  The default value is 1000.
10074
10075     'max-vartrack-size'
10076          Sets a maximum number of hash table slots to use during
10077          variable tracking dataflow analysis of any function.  If this
10078          limit is exceeded with variable tracking at assignments
10079          enabled, analysis for that function is retried without it,
10080          after removing all debug insns from the function.  If the
10081          limit is exceeded even without debug insns, var tracking
10082          analysis is completely disabled for the function.  Setting the
10083          parameter to zero makes it unlimited.
10084
10085     'max-vartrack-expr-depth'
10086          Sets a maximum number of recursion levels when attempting to
10087          map variable names or debug temporaries to value expressions.
10088          This trades compilation time for more complete debug
10089          information.  If this is set too low, value expressions that
10090          are available and could be represented in debug information
10091          may end up not being used; setting this higher may enable the
10092          compiler to find more complex debug expressions, but compile
10093          time and memory use may grow.  The default is 12.
10094
10095     'max-debug-marker-count'
10096          Sets a threshold on the number of debug markers (e.g.  begin
10097          stmt markers) to avoid complexity explosion at inlining or
10098          expanding to RTL. If a function has more such gimple stmts
10099          than the set limit, such stmts will be dropped from the
10100          inlined copy of a function, and from its RTL expansion.  The
10101          default is 100000.
10102
10103     'min-nondebug-insn-uid'
10104          Use uids starting at this parameter for nondebug insns.  The
10105          range below the parameter is reserved exclusively for debug
10106          insns created by '-fvar-tracking-assignments', but debug insns
10107          may get (non-overlapping) uids above it if the reserved range
10108          is exhausted.
10109
10110     'ipa-sra-ptr-growth-factor'
10111          IPA-SRA replaces a pointer to an aggregate with one or more
10112          new parameters only when their cumulative size is less or
10113          equal to 'ipa-sra-ptr-growth-factor' times the size of the
10114          original pointer parameter.
10115
10116     'sra-max-scalarization-size-Ospeed'
10117     'sra-max-scalarization-size-Osize'
10118          The two Scalar Reduction of Aggregates passes (SRA and
10119          IPA-SRA) aim to replace scalar parts of aggregates with uses
10120          of independent scalar variables.  These parameters control the
10121          maximum size, in storage units, of aggregate which is
10122          considered for replacement when compiling for speed
10123          ('sra-max-scalarization-size-Ospeed') or size
10124          ('sra-max-scalarization-size-Osize') respectively.
10125
10126     'tm-max-aggregate-size'
10127          When making copies of thread-local variables in a transaction,
10128          this parameter specifies the size in bytes after which
10129          variables are saved with the logging functions as opposed to
10130          save/restore code sequence pairs.  This option only applies
10131          when using '-fgnu-tm'.
10132
10133     'graphite-max-nb-scop-params'
10134          To avoid exponential effects in the Graphite loop transforms,
10135          the number of parameters in a Static Control Part (SCoP) is
10136          bounded.  The default value is 10 parameters, a value of zero
10137          can be used to lift the bound.  A variable whose value is
10138          unknown at compilation time and defined outside a SCoP is a
10139          parameter of the SCoP.
10140
10141     'loop-block-tile-size'
10142          Loop blocking or strip mining transforms, enabled with
10143          '-floop-block' or '-floop-strip-mine', strip mine each loop in
10144          the loop nest by a given number of iterations.  The strip
10145          length can be changed using the 'loop-block-tile-size'
10146          parameter.  The default value is 51 iterations.
10147
10148     'loop-unroll-jam-size'
10149          Specify the unroll factor for the '-floop-unroll-and-jam'
10150          option.  The default value is 4.
10151
10152     'loop-unroll-jam-depth'
10153          Specify the dimension to be unrolled (counting from the most
10154          inner loop) for the '-floop-unroll-and-jam'.  The default
10155          value is 2.
10156
10157     'ipa-cp-value-list-size'
10158          IPA-CP attempts to track all possible values and types passed
10159          to a function's parameter in order to propagate them and
10160          perform devirtualization.  'ipa-cp-value-list-size' is the
10161          maximum number of values and types it stores per one formal
10162          parameter of a function.
10163
10164     'ipa-cp-eval-threshold'
10165          IPA-CP calculates its own score of cloning profitability
10166          heuristics and performs those cloning opportunities with
10167          scores that exceed 'ipa-cp-eval-threshold'.
10168
10169     'ipa-cp-recursion-penalty'
10170          Percentage penalty the recursive functions will receive when
10171          they are evaluated for cloning.
10172
10173     'ipa-cp-single-call-penalty'
10174          Percentage penalty functions containing a single call to
10175          another function will receive when they are evaluated for
10176          cloning.
10177
10178     'ipa-max-agg-items'
10179          IPA-CP is also capable to propagate a number of scalar values
10180          passed in an aggregate.  'ipa-max-agg-items' controls the
10181          maximum number of such values per one parameter.
10182
10183     'ipa-cp-loop-hint-bonus'
10184          When IPA-CP determines that a cloning candidate would make the
10185          number of iterations of a loop known, it adds a bonus of
10186          'ipa-cp-loop-hint-bonus' to the profitability score of the
10187          candidate.
10188
10189     'ipa-cp-array-index-hint-bonus'
10190          When IPA-CP determines that a cloning candidate would make the
10191          index of an array access known, it adds a bonus of
10192          'ipa-cp-array-index-hint-bonus' to the profitability score of
10193          the candidate.
10194
10195     'ipa-max-aa-steps'
10196          During its analysis of function bodies, IPA-CP employs alias
10197          analysis in order to track values pointed to by function
10198          parameters.  In order not spend too much time analyzing huge
10199          functions, it gives up and consider all memory clobbered after
10200          examining 'ipa-max-aa-steps' statements modifying memory.
10201
10202     'lto-partitions'
10203          Specify desired number of partitions produced during WHOPR
10204          compilation.  The number of partitions should exceed the
10205          number of CPUs used for compilation.  The default value is 32.
10206
10207     'lto-min-partition'
10208          Size of minimal partition for WHOPR (in estimated
10209          instructions).  This prevents expenses of splitting very small
10210          programs into too many partitions.
10211
10212     'lto-max-partition'
10213          Size of max partition for WHOPR (in estimated instructions).
10214          to provide an upper bound for individual size of partition.
10215          Meant to be used only with balanced partitioning.
10216
10217     'cxx-max-namespaces-for-diagnostic-help'
10218          The maximum number of namespaces to consult for suggestions
10219          when C++ name lookup fails for an identifier.  The default is
10220          1000.
10221
10222     'sink-frequency-threshold'
10223          The maximum relative execution frequency (in percents) of the
10224          target block relative to a statement's original block to allow
10225          statement sinking of a statement.  Larger numbers result in
10226          more aggressive statement sinking.  The default value is 75.
10227          A small positive adjustment is applied for statements with
10228          memory operands as those are even more profitable so sink.
10229
10230     'max-stores-to-sink'
10231          The maximum number of conditional store pairs that can be
10232          sunk.  Set to 0 if either vectorization ('-ftree-vectorize')
10233          or if-conversion ('-ftree-loop-if-convert') is disabled.  The
10234          default is 2.
10235
10236     'allow-store-data-races'
10237          Allow optimizers to introduce new data races on stores.  Set
10238          to 1 to allow, otherwise to 0.  This option is enabled by
10239          default at optimization level '-Ofast'.
10240
10241     'case-values-threshold'
10242          The smallest number of different values for which it is best
10243          to use a jump-table instead of a tree of conditional branches.
10244          If the value is 0, use the default for the machine.  The
10245          default is 0.
10246
10247     'tree-reassoc-width'
10248          Set the maximum number of instructions executed in parallel in
10249          reassociated tree.  This parameter overrides target dependent
10250          heuristics used by default if has non zero value.
10251
10252     'sched-pressure-algorithm'
10253          Choose between the two available implementations of
10254          '-fsched-pressure'.  Algorithm 1 is the original
10255          implementation and is the more likely to prevent instructions
10256          from being reordered.  Algorithm 2 was designed to be a
10257          compromise between the relatively conservative approach taken
10258          by algorithm 1 and the rather aggressive approach taken by the
10259          default scheduler.  It relies more heavily on having a regular
10260          register file and accurate register pressure classes.  See
10261          'haifa-sched.c' in the GCC sources for more details.
10262
10263          The default choice depends on the target.
10264
10265     'max-slsr-cand-scan'
10266          Set the maximum number of existing candidates that are
10267          considered when seeking a basis for a new straight-line
10268          strength reduction candidate.
10269
10270     'asan-globals'
10271          Enable buffer overflow detection for global objects.  This
10272          kind of protection is enabled by default if you are using
10273          '-fsanitize=address' option.  To disable global objects
10274          protection use '--param asan-globals=0'.
10275
10276     'asan-stack'
10277          Enable buffer overflow detection for stack objects.  This kind
10278          of protection is enabled by default when using
10279          '-fsanitize=address'.  To disable stack protection use
10280          '--param asan-stack=0' option.
10281
10282     'asan-instrument-reads'
10283          Enable buffer overflow detection for memory reads.  This kind
10284          of protection is enabled by default when using
10285          '-fsanitize=address'.  To disable memory reads protection use
10286          '--param asan-instrument-reads=0'.
10287
10288     'asan-instrument-writes'
10289          Enable buffer overflow detection for memory writes.  This kind
10290          of protection is enabled by default when using
10291          '-fsanitize=address'.  To disable memory writes protection use
10292          '--param asan-instrument-writes=0' option.
10293
10294     'asan-memintrin'
10295          Enable detection for built-in functions.  This kind of
10296          protection is enabled by default when using
10297          '-fsanitize=address'.  To disable built-in functions
10298          protection use '--param asan-memintrin=0'.
10299
10300     'asan-use-after-return'
10301          Enable detection of use-after-return.  This kind of protection
10302          is enabled by default when using the '-fsanitize=address'
10303          option.  To disable it use '--param asan-use-after-return=0'.
10304
10305          Note: By default the check is disabled at run time.  To enable
10306          it, add 'detect_stack_use_after_return=1' to the environment
10307          variable 'ASAN_OPTIONS'.
10308
10309     'asan-instrumentation-with-call-threshold'
10310          If number of memory accesses in function being instrumented is
10311          greater or equal to this number, use callbacks instead of
10312          inline checks.  E.g.  to disable inline code use '--param
10313          asan-instrumentation-with-call-threshold=0'.
10314
10315     'use-after-scope-direct-emission-threshold'
10316          If the size of a local variable in bytes is smaller or equal
10317          to this number, directly poison (or unpoison) shadow memory
10318          instead of using run-time callbacks.  The default value is
10319          256.
10320
10321     'chkp-max-ctor-size'
10322          Static constructors generated by Pointer Bounds Checker may
10323          become very large and significantly increase compile time at
10324          optimization level '-O1' and higher.  This parameter is a
10325          maximum number of statements in a single generated
10326          constructor.  Default value is 5000.
10327
10328     'max-fsm-thread-path-insns'
10329          Maximum number of instructions to copy when duplicating blocks
10330          on a finite state automaton jump thread path.  The default is
10331          100.
10332
10333     'max-fsm-thread-length'
10334          Maximum number of basic blocks on a finite state automaton
10335          jump thread path.  The default is 10.
10336
10337     'max-fsm-thread-paths'
10338          Maximum number of new jump thread paths to create for a finite
10339          state automaton.  The default is 50.
10340
10341     'parloops-chunk-size'
10342          Chunk size of omp schedule for loops parallelized by parloops.
10343          The default is 0.
10344
10345     'parloops-schedule'
10346          Schedule type of omp schedule for loops parallelized by
10347          parloops (static, dynamic, guided, auto, runtime).  The
10348          default is static.
10349
10350     'parloops-min-per-thread'
10351          The minimum number of iterations per thread of an innermost
10352          parallelized loop for which the parallelized variant is
10353          prefered over the single threaded one.  The default is 100.
10354          Note that for a parallelized loop nest the minimum number of
10355          iterations of the outermost loop per thread is two.
10356
10357     'max-ssa-name-query-depth'
10358          Maximum depth of recursion when querying properties of SSA
10359          names in things like fold routines.  One level of recursion
10360          corresponds to following a use-def chain.
10361
10362     'hsa-gen-debug-stores'
10363          Enable emission of special debug stores within HSA kernels
10364          which are then read and reported by libgomp plugin.
10365          Generation of these stores is disabled by default, use
10366          '--param hsa-gen-debug-stores=1' to enable it.
10367
10368     'max-speculative-devirt-maydefs'
10369          The maximum number of may-defs we analyze when looking for a
10370          must-def specifying the dynamic type of an object that invokes
10371          a virtual call we may be able to devirtualize speculatively.
10372
10373     'max-vrp-switch-assertions'
10374          The maximum number of assertions to add along the default edge
10375          of a switch statement during VRP. The default is 10.
10376
10377     'unroll-jam-min-percent'
10378          The minimum percentage of memory references that must be
10379          optimized away for the unroll-and-jam transformation to be
10380          considered profitable.
10381
10382     'unroll-jam-max-unroll'
10383          The maximum number of times the outer loop should be unrolled
10384          by the unroll-and-jam transformation.
10385
10386
10387File: gcc.info,  Node: Instrumentation Options,  Next: Preprocessor Options,  Prev: Optimize Options,  Up: Invoking GCC
10388
103893.11 Program Instrumentation Options
10390====================================
10391
10392GCC supports a number of command-line options that control adding
10393run-time instrumentation to the code it normally generates.  For
10394example, one purpose of instrumentation is collect profiling statistics
10395for use in finding program hot spots, code coverage analysis, or
10396profile-guided optimizations.  Another class of program instrumentation
10397is adding run-time checking to detect programming errors like invalid
10398pointer dereferences or out-of-bounds array accesses, as well as
10399deliberately hostile attacks such as stack smashing or C++ vtable
10400hijacking.  There is also a general hook which can be used to implement
10401other forms of tracing or function-level instrumentation for debug or
10402program analysis purposes.
10403
10404'-p'
10405     Generate extra code to write profile information suitable for the
10406     analysis program 'prof'.  You must use this option when compiling
10407     the source files you want data about, and you must also use it when
10408     linking.
10409
10410'-pg'
10411     Generate extra code to write profile information suitable for the
10412     analysis program 'gprof'.  You must use this option when compiling
10413     the source files you want data about, and you must also use it when
10414     linking.
10415
10416'-fprofile-arcs'
10417     Add code so that program flow "arcs" are instrumented.  During
10418     execution the program records how many times each branch and call
10419     is executed and how many times it is taken or returns.  On targets
10420     that support constructors with priority support, profiling properly
10421     handles constructors, destructors and C++ constructors (and
10422     destructors) of classes which are used as a type of a global
10423     variable.
10424
10425     When the compiled program exits it saves this data to a file called
10426     'AUXNAME.gcda' for each source file.  The data may be used for
10427     profile-directed optimizations ('-fbranch-probabilities'), or for
10428     test coverage analysis ('-ftest-coverage').  Each object file's
10429     AUXNAME is generated from the name of the output file, if
10430     explicitly specified and it is not the final executable, otherwise
10431     it is the basename of the source file.  In both cases any suffix is
10432     removed (e.g. 'foo.gcda' for input file 'dir/foo.c', or
10433     'dir/foo.gcda' for output file specified as '-o dir/foo.o').  *Note
10434     Cross-profiling::.
10435
10436'--coverage'
10437
10438     This option is used to compile and link code instrumented for
10439     coverage analysis.  The option is a synonym for '-fprofile-arcs'
10440     '-ftest-coverage' (when compiling) and '-lgcov' (when linking).
10441     See the documentation for those options for more details.
10442
10443        * Compile the source files with '-fprofile-arcs' plus
10444          optimization and code generation options.  For test coverage
10445          analysis, use the additional '-ftest-coverage' option.  You do
10446          not need to profile every source file in a program.
10447
10448        * Compile the source files additionally with
10449          '-fprofile-abs-path' to create absolute path names in the
10450          '.gcno' files.  This allows 'gcov' to find the correct sources
10451          in projects where compilations occur with different working
10452          directories.
10453
10454        * Link your object files with '-lgcov' or '-fprofile-arcs' (the
10455          latter implies the former).
10456
10457        * Run the program on a representative workload to generate the
10458          arc profile information.  This may be repeated any number of
10459          times.  You can run concurrent instances of your program, and
10460          provided that the file system supports locking, the data files
10461          will be correctly updated.  Unless a strict ISO C dialect
10462          option is in effect, 'fork' calls are detected and correctly
10463          handled without double counting.
10464
10465        * For profile-directed optimizations, compile the source files
10466          again with the same optimization and code generation options
10467          plus '-fbranch-probabilities' (*note Options that Control
10468          Optimization: Optimize Options.).
10469
10470        * For test coverage analysis, use 'gcov' to produce human
10471          readable information from the '.gcno' and '.gcda' files.
10472          Refer to the 'gcov' documentation for further information.
10473
10474     With '-fprofile-arcs', for each function of your program GCC
10475     creates a program flow graph, then finds a spanning tree for the
10476     graph.  Only arcs that are not on the spanning tree have to be
10477     instrumented: the compiler adds code to count the number of times
10478     that these arcs are executed.  When an arc is the only exit or only
10479     entrance to a block, the instrumentation code can be added to the
10480     block; otherwise, a new basic block must be created to hold the
10481     instrumentation code.
10482
10483'-ftest-coverage'
10484     Produce a notes file that the 'gcov' code-coverage utility (*note
10485     'gcov'--a Test Coverage Program: Gcov.) can use to show program
10486     coverage.  Each source file's note file is called 'AUXNAME.gcno'.
10487     Refer to the '-fprofile-arcs' option above for a description of
10488     AUXNAME and instructions on how to generate test coverage data.
10489     Coverage data matches the source files more closely if you do not
10490     optimize.
10491
10492'-fprofile-abs-path'
10493     Automatically convert relative source file names to absolute path
10494     names in the '.gcno' files.  This allows 'gcov' to find the correct
10495     sources in projects where compilations occur with different working
10496     directories.
10497
10498'-fprofile-dir=PATH'
10499
10500     Set the directory to search for the profile data files in to PATH.
10501     This option affects only the profile data generated by
10502     '-fprofile-generate', '-ftest-coverage', '-fprofile-arcs' and used
10503     by '-fprofile-use' and '-fbranch-probabilities' and its related
10504     options.  Both absolute and relative paths can be used.  By
10505     default, GCC uses the current directory as PATH, thus the profile
10506     data file appears in the same directory as the object file.
10507
10508'-fprofile-generate'
10509'-fprofile-generate=PATH'
10510
10511     Enable options usually used for instrumenting application to
10512     produce profile useful for later recompilation with profile
10513     feedback based optimization.  You must use '-fprofile-generate'
10514     both when compiling and when linking your program.
10515
10516     The following options are enabled: '-fprofile-arcs',
10517     '-fprofile-values', '-fvpt'.
10518
10519     If PATH is specified, GCC looks at the PATH to find the profile
10520     feedback data files.  See '-fprofile-dir'.
10521
10522     To optimize the program based on the collected profile information,
10523     use '-fprofile-use'.  *Note Optimize Options::, for more
10524     information.
10525
10526'-fprofile-update=METHOD'
10527
10528     Alter the update method for an application instrumented for profile
10529     feedback based optimization.  The METHOD argument should be one of
10530     'single', 'atomic' or 'prefer-atomic'.  The first one is useful for
10531     single-threaded applications, while the second one prevents profile
10532     corruption by emitting thread-safe code.
10533
10534     *Warning:* When an application does not properly join all threads
10535     (or creates an detached thread), a profile file can be still
10536     corrupted.
10537
10538     Using 'prefer-atomic' would be transformed either to 'atomic', when
10539     supported by a target, or to 'single' otherwise.  The GCC driver
10540     automatically selects 'prefer-atomic' when '-pthread' is present in
10541     the command line.
10542
10543'-fsanitize=address'
10544     Enable AddressSanitizer, a fast memory error detector.  Memory
10545     access instructions are instrumented to detect out-of-bounds and
10546     use-after-free bugs.  The option enables
10547     '-fsanitize-address-use-after-scope'.  See
10548     <https://github.com/google/sanitizers/wiki/AddressSanitizer> for
10549     more details.  The run-time behavior can be influenced using the
10550     'ASAN_OPTIONS' environment variable.  When set to 'help=1', the
10551     available options are shown at startup of the instrumented program.
10552     See
10553     <https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags>
10554     for a list of supported options.  The option cannot be combined
10555     with '-fsanitize=thread' and/or '-fcheck-pointer-bounds'.
10556
10557'-fsanitize=kernel-address'
10558     Enable AddressSanitizer for Linux kernel.  See
10559     <https://github.com/google/kasan/wiki> for more details.  The
10560     option cannot be combined with '-fcheck-pointer-bounds'.
10561
10562'-fsanitize=pointer-compare'
10563     Instrument comparison operation (<, <=, >, >=) with pointer
10564     operands.  The option must be combined with either
10565     '-fsanitize=kernel-address' or '-fsanitize=address' The option
10566     cannot be combined with '-fsanitize=thread' and/or
10567     '-fcheck-pointer-bounds'.  Note: By default the check is disabled
10568     at run time.  To enable it, add 'detect_invalid_pointer_pairs=2' to
10569     the environment variable 'ASAN_OPTIONS'.  Using
10570     'detect_invalid_pointer_pairs=1' detects invalid operation only
10571     when both pointers are non-null.
10572
10573'-fsanitize=pointer-subtract'
10574     Instrument subtraction with pointer operands.  The option must be
10575     combined with either '-fsanitize=kernel-address' or
10576     '-fsanitize=address' The option cannot be combined with
10577     '-fsanitize=thread' and/or '-fcheck-pointer-bounds'.  Note: By
10578     default the check is disabled at run time.  To enable it, add
10579     'detect_invalid_pointer_pairs=2' to the environment variable
10580     'ASAN_OPTIONS'.  Using 'detect_invalid_pointer_pairs=1' detects
10581     invalid operation only when both pointers are non-null.
10582
10583'-fsanitize=thread'
10584     Enable ThreadSanitizer, a fast data race detector.  Memory access
10585     instructions are instrumented to detect data race bugs.  See
10586     <https://github.com/google/sanitizers/wiki#threadsanitizer> for
10587     more details.  The run-time behavior can be influenced using the
10588     'TSAN_OPTIONS' environment variable; see
10589     <https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags>
10590     for a list of supported options.  The option cannot be combined
10591     with '-fsanitize=address', '-fsanitize=leak' and/or
10592     '-fcheck-pointer-bounds'.
10593
10594     Note that sanitized atomic builtins cannot throw exceptions when
10595     operating on invalid memory addresses with non-call exceptions
10596     ('-fnon-call-exceptions').
10597
10598'-fsanitize=leak'
10599     Enable LeakSanitizer, a memory leak detector.  This option only
10600     matters for linking of executables and the executable is linked
10601     against a library that overrides 'malloc' and other allocator
10602     functions.  See
10603     <https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer>
10604     for more details.  The run-time behavior can be influenced using
10605     the 'LSAN_OPTIONS' environment variable.  The option cannot be
10606     combined with '-fsanitize=thread'.
10607
10608'-fsanitize=undefined'
10609     Enable UndefinedBehaviorSanitizer, a fast undefined behavior
10610     detector.  Various computations are instrumented to detect
10611     undefined behavior at runtime.  Current suboptions are:
10612
10613     '-fsanitize=shift'
10614          This option enables checking that the result of a shift
10615          operation is not undefined.  Note that what exactly is
10616          considered undefined differs slightly between C and C++, as
10617          well as between ISO C90 and C99, etc.  This option has two
10618          suboptions, '-fsanitize=shift-base' and
10619          '-fsanitize=shift-exponent'.
10620
10621     '-fsanitize=shift-exponent'
10622          This option enables checking that the second argument of a
10623          shift operation is not negative and is smaller than the
10624          precision of the promoted first argument.
10625
10626     '-fsanitize=shift-base'
10627          If the second argument of a shift operation is within range,
10628          check that the result of a shift operation is not undefined.
10629          Note that what exactly is considered undefined differs
10630          slightly between C and C++, as well as between ISO C90 and
10631          C99, etc.
10632
10633     '-fsanitize=integer-divide-by-zero'
10634          Detect integer division by zero as well as 'INT_MIN / -1'
10635          division.
10636
10637     '-fsanitize=unreachable'
10638          With this option, the compiler turns the
10639          '__builtin_unreachable' call into a diagnostics message call
10640          instead.  When reaching the '__builtin_unreachable' call, the
10641          behavior is undefined.
10642
10643     '-fsanitize=vla-bound'
10644          This option instructs the compiler to check that the size of a
10645          variable length array is positive.
10646
10647     '-fsanitize=null'
10648          This option enables pointer checking.  Particularly, the
10649          application built with this option turned on will issue an
10650          error message when it tries to dereference a NULL pointer, or
10651          if a reference (possibly an rvalue reference) is bound to a
10652          NULL pointer, or if a method is invoked on an object pointed
10653          by a NULL pointer.
10654
10655     '-fsanitize=return'
10656          This option enables return statement checking.  Programs built
10657          with this option turned on will issue an error message when
10658          the end of a non-void function is reached without actually
10659          returning a value.  This option works in C++ only.
10660
10661     '-fsanitize=signed-integer-overflow'
10662          This option enables signed integer overflow checking.  We
10663          check that the result of '+', '*', and both unary and binary
10664          '-' does not overflow in the signed arithmetics.  Note,
10665          integer promotion rules must be taken into account.  That is,
10666          the following is not an overflow:
10667               signed char a = SCHAR_MAX;
10668               a++;
10669
10670     '-fsanitize=bounds'
10671          This option enables instrumentation of array bounds.  Various
10672          out of bounds accesses are detected.  Flexible array members,
10673          flexible array member-like arrays, and initializers of
10674          variables with static storage are not instrumented.  The
10675          option cannot be combined with '-fcheck-pointer-bounds'.
10676
10677     '-fsanitize=bounds-strict'
10678          This option enables strict instrumentation of array bounds.
10679          Most out of bounds accesses are detected, including flexible
10680          array members and flexible array member-like arrays.
10681          Initializers of variables with static storage are not
10682          instrumented.  The option cannot be combined with
10683          '-fcheck-pointer-bounds'.
10684
10685     '-fsanitize=alignment'
10686
10687          This option enables checking of alignment of pointers when
10688          they are dereferenced, or when a reference is bound to
10689          insufficiently aligned target, or when a method or constructor
10690          is invoked on insufficiently aligned object.
10691
10692     '-fsanitize=object-size'
10693          This option enables instrumentation of memory references using
10694          the '__builtin_object_size' function.  Various out of bounds
10695          pointer accesses are detected.
10696
10697     '-fsanitize=float-divide-by-zero'
10698          Detect floating-point division by zero.  Unlike other similar
10699          options, '-fsanitize=float-divide-by-zero' is not enabled by
10700          '-fsanitize=undefined', since floating-point division by zero
10701          can be a legitimate way of obtaining infinities and NaNs.
10702
10703     '-fsanitize=float-cast-overflow'
10704          This option enables floating-point type to integer conversion
10705          checking.  We check that the result of the conversion does not
10706          overflow.  Unlike other similar options,
10707          '-fsanitize=float-cast-overflow' is not enabled by
10708          '-fsanitize=undefined'.  This option does not work well with
10709          'FE_INVALID' exceptions enabled.
10710
10711     '-fsanitize=nonnull-attribute'
10712
10713          This option enables instrumentation of calls, checking whether
10714          null values are not passed to arguments marked as requiring a
10715          non-null value by the 'nonnull' function attribute.
10716
10717     '-fsanitize=returns-nonnull-attribute'
10718
10719          This option enables instrumentation of return statements in
10720          functions marked with 'returns_nonnull' function attribute, to
10721          detect returning of null values from such functions.
10722
10723     '-fsanitize=bool'
10724
10725          This option enables instrumentation of loads from bool.  If a
10726          value other than 0/1 is loaded, a run-time error is issued.
10727
10728     '-fsanitize=enum'
10729
10730          This option enables instrumentation of loads from an enum
10731          type.  If a value outside the range of values for the enum
10732          type is loaded, a run-time error is issued.
10733
10734     '-fsanitize=vptr'
10735
10736          This option enables instrumentation of C++ member function
10737          calls, member accesses and some conversions between pointers
10738          to base and derived classes, to verify the referenced object
10739          has the correct dynamic type.
10740
10741     '-fsanitize=pointer-overflow'
10742
10743          This option enables instrumentation of pointer arithmetics.
10744          If the pointer arithmetics overflows, a run-time error is
10745          issued.
10746
10747     '-fsanitize=builtin'
10748
10749          This option enables instrumentation of arguments to selected
10750          builtin functions.  If an invalid value is passed to such
10751          arguments, a run-time error is issued.  E.g. passing 0 as the
10752          argument to '__builtin_ctz' or '__builtin_clz' invokes
10753          undefined behavior and is diagnosed by this option.
10754
10755     While '-ftrapv' causes traps for signed overflows to be emitted,
10756     '-fsanitize=undefined' gives a diagnostic message.  This currently
10757     works only for the C family of languages.
10758
10759'-fno-sanitize=all'
10760
10761     This option disables all previously enabled sanitizers.
10762     '-fsanitize=all' is not allowed, as some sanitizers cannot be used
10763     together.
10764
10765'-fasan-shadow-offset=NUMBER'
10766     This option forces GCC to use custom shadow offset in
10767     AddressSanitizer checks.  It is useful for experimenting with
10768     different shadow memory layouts in Kernel AddressSanitizer.
10769
10770'-fsanitize-sections=S1,S2,...'
10771     Sanitize global variables in selected user-defined sections.  SI
10772     may contain wildcards.
10773
10774'-fsanitize-recover[=OPTS]'
10775     '-fsanitize-recover=' controls error recovery mode for sanitizers
10776     mentioned in comma-separated list of OPTS.  Enabling this option
10777     for a sanitizer component causes it to attempt to continue running
10778     the program as if no error happened.  This means multiple runtime
10779     errors can be reported in a single program run, and the exit code
10780     of the program may indicate success even when errors have been
10781     reported.  The '-fno-sanitize-recover=' option can be used to alter
10782     this behavior: only the first detected error is reported and
10783     program then exits with a non-zero exit code.
10784
10785     Currently this feature only works for '-fsanitize=undefined' (and
10786     its suboptions except for '-fsanitize=unreachable' and
10787     '-fsanitize=return'), '-fsanitize=float-cast-overflow',
10788     '-fsanitize=float-divide-by-zero', '-fsanitize=bounds-strict',
10789     '-fsanitize=kernel-address' and '-fsanitize=address'.  For these
10790     sanitizers error recovery is turned on by default, except
10791     '-fsanitize=address', for which this feature is experimental.
10792     '-fsanitize-recover=all' and '-fno-sanitize-recover=all' is also
10793     accepted, the former enables recovery for all sanitizers that
10794     support it, the latter disables recovery for all sanitizers that
10795     support it.
10796
10797     Even if a recovery mode is turned on the compiler side, it needs to
10798     be also enabled on the runtime library side, otherwise the failures
10799     are still fatal.  The runtime library defaults to 'halt_on_error=0'
10800     for ThreadSanitizer and UndefinedBehaviorSanitizer, while default
10801     value for AddressSanitizer is 'halt_on_error=1'.  This can be
10802     overridden through setting the 'halt_on_error' flag in the
10803     corresponding environment variable.
10804
10805     Syntax without an explicit OPTS parameter is deprecated.  It is
10806     equivalent to specifying an OPTS list of:
10807
10808          undefined,float-cast-overflow,float-divide-by-zero,bounds-strict
10809
10810'-fsanitize-address-use-after-scope'
10811     Enable sanitization of local variables to detect use-after-scope
10812     bugs.  The option sets '-fstack-reuse' to 'none'.
10813
10814'-fsanitize-undefined-trap-on-error'
10815     The '-fsanitize-undefined-trap-on-error' option instructs the
10816     compiler to report undefined behavior using '__builtin_trap' rather
10817     than a 'libubsan' library routine.  The advantage of this is that
10818     the 'libubsan' library is not needed and is not linked in, so this
10819     is usable even in freestanding environments.
10820
10821'-fsanitize-coverage=trace-pc'
10822     Enable coverage-guided fuzzing code instrumentation.  Inserts a
10823     call to '__sanitizer_cov_trace_pc' into every basic block.
10824
10825'-fsanitize-coverage=trace-cmp'
10826     Enable dataflow guided fuzzing code instrumentation.  Inserts a
10827     call to '__sanitizer_cov_trace_cmp1', '__sanitizer_cov_trace_cmp2',
10828     '__sanitizer_cov_trace_cmp4' or '__sanitizer_cov_trace_cmp8' for
10829     integral comparison with both operands variable or
10830     '__sanitizer_cov_trace_const_cmp1',
10831     '__sanitizer_cov_trace_const_cmp2',
10832     '__sanitizer_cov_trace_const_cmp4' or
10833     '__sanitizer_cov_trace_const_cmp8' for integral comparison with one
10834     operand constant, '__sanitizer_cov_trace_cmpf' or
10835     '__sanitizer_cov_trace_cmpd' for float or double comparisons and
10836     '__sanitizer_cov_trace_switch' for switch statements.
10837
10838'-fbounds-check'
10839     For front ends that support it, generate additional code to check
10840     that indices used to access arrays are within the declared range.
10841     This is currently only supported by the Fortran front end, where
10842     this option defaults to false.
10843
10844'-fcheck-pointer-bounds'
10845     Enable Pointer Bounds Checker instrumentation.  Each memory
10846     reference is instrumented with checks of the pointer used for
10847     memory access against bounds associated with that pointer.
10848
10849     Currently there is only an implementation for Intel MPX available,
10850     thus x86 GNU/Linux target and '-mmpx' are required to enable this
10851     feature.  MPX-based instrumentation requires a runtime library to
10852     enable MPX in hardware and handle bounds violation signals.  By
10853     default when '-fcheck-pointer-bounds' and '-mmpx' options are used
10854     to link a program, the GCC driver links against the 'libmpx' and
10855     'libmpxwrappers' libraries.  Bounds checking on calls to dynamic
10856     libraries requires a linker with '-z bndplt' support; if GCC was
10857     configured with a linker without support for this option (including
10858     the Gold linker and older versions of ld), a warning is given if
10859     you link with '-mmpx' without also specifying '-static', since the
10860     overall effectiveness of the bounds checking protection is reduced.
10861     See also '-static-libmpxwrappers'.
10862
10863     MPX-based instrumentation may be used for debugging and also may be
10864     included in production code to increase program security.
10865     Depending on usage, you may have different requirements for the
10866     runtime library.  The current version of the MPX runtime library is
10867     more oriented for use as a debugging tool.  MPX runtime library
10868     usage implies '-lpthread'.  See also '-static-libmpx'.  The runtime
10869     library behavior can be influenced using various 'CHKP_RT_*'
10870     environment variables.  See
10871     <https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler>
10872     for more details.
10873
10874     Generated instrumentation may be controlled by various '-fchkp-*'
10875     options and by the 'bnd_variable_size' structure field attribute
10876     (*note Type Attributes::) and 'bnd_legacy', and 'bnd_instrument'
10877     function attributes (*note Function Attributes::).  GCC also
10878     provides a number of built-in functions for controlling the Pointer
10879     Bounds Checker.  *Note Pointer Bounds Checker builtins::, for more
10880     information.
10881
10882'-fchkp-check-incomplete-type'
10883     Generate pointer bounds checks for variables with incomplete type.
10884     Enabled by default.
10885
10886'-fchkp-narrow-bounds'
10887     Controls bounds used by Pointer Bounds Checker for pointers to
10888     object fields.  If narrowing is enabled then field bounds are used.
10889     Otherwise object bounds are used.  See also
10890     '-fchkp-narrow-to-innermost-array' and
10891     '-fchkp-first-field-has-own-bounds'.  Enabled by default.
10892
10893'-fchkp-first-field-has-own-bounds'
10894     Forces Pointer Bounds Checker to use narrowed bounds for the
10895     address of the first field in the structure.  By default a pointer
10896     to the first field has the same bounds as a pointer to the whole
10897     structure.
10898
10899'-fchkp-flexible-struct-trailing-arrays'
10900     Forces Pointer Bounds Checker to treat all trailing arrays in
10901     structures as possibly flexible.  By default only array fields with
10902     zero length or that are marked with attribute bnd_variable_size are
10903     treated as flexible.
10904
10905'-fchkp-narrow-to-innermost-array'
10906     Forces Pointer Bounds Checker to use bounds of the innermost arrays
10907     in case of nested static array access.  By default this option is
10908     disabled and bounds of the outermost array are used.
10909
10910'-fchkp-optimize'
10911     Enables Pointer Bounds Checker optimizations.  Enabled by default
10912     at optimization levels '-O', '-O2', '-O3'.
10913
10914'-fchkp-use-fast-string-functions'
10915     Enables use of '*_nobnd' versions of string functions (not copying
10916     bounds) by Pointer Bounds Checker.  Disabled by default.
10917
10918'-fchkp-use-nochk-string-functions'
10919     Enables use of '*_nochk' versions of string functions (not checking
10920     bounds) by Pointer Bounds Checker.  Disabled by default.
10921
10922'-fchkp-use-static-bounds'
10923     Allow Pointer Bounds Checker to generate static bounds holding
10924     bounds of static variables.  Enabled by default.
10925
10926'-fchkp-use-static-const-bounds'
10927     Use statically-initialized bounds for constant bounds instead of
10928     generating them each time they are required.  By default enabled
10929     when '-fchkp-use-static-bounds' is enabled.
10930
10931'-fchkp-treat-zero-dynamic-size-as-infinite'
10932     With this option, objects with incomplete type whose
10933     dynamically-obtained size is zero are treated as having infinite
10934     size instead by Pointer Bounds Checker.  This option may be helpful
10935     if a program is linked with a library missing size information for
10936     some symbols.  Disabled by default.
10937
10938'-fchkp-check-read'
10939     Instructs Pointer Bounds Checker to generate checks for all read
10940     accesses to memory.  Enabled by default.
10941
10942'-fchkp-check-write'
10943     Instructs Pointer Bounds Checker to generate checks for all write
10944     accesses to memory.  Enabled by default.
10945
10946'-fchkp-store-bounds'
10947     Instructs Pointer Bounds Checker to generate bounds stores for
10948     pointer writes.  Enabled by default.
10949
10950'-fchkp-instrument-calls'
10951     Instructs Pointer Bounds Checker to pass pointer bounds to calls.
10952     Enabled by default.
10953
10954'-fchkp-instrument-marked-only'
10955     Instructs Pointer Bounds Checker to instrument only functions
10956     marked with the 'bnd_instrument' attribute (*note Function
10957     Attributes::).  Disabled by default.
10958
10959'-fchkp-use-wrappers'
10960     Allows Pointer Bounds Checker to replace calls to built-in
10961     functions with calls to wrapper functions.  When
10962     '-fchkp-use-wrappers' is used to link a program, the GCC driver
10963     automatically links against 'libmpxwrappers'.  See also
10964     '-static-libmpxwrappers'.  Enabled by default.
10965
10966'-fcf-protection=[full|branch|return|none]'
10967     Enable code instrumentation of control-flow transfers to increase
10968     program security by checking that target addresses of control-flow
10969     transfer instructions (such as indirect function call, function
10970     return, indirect jump) are valid.  This prevents diverting the flow
10971     of control to an unexpected target.  This is intended to protect
10972     against such threats as Return-oriented Programming (ROP), and
10973     similarly call/jmp-oriented programming (COP/JOP).
10974
10975     The value 'branch' tells the compiler to implement checking of
10976     validity of control-flow transfer at the point of indirect branch
10977     instructions, i.e.  call/jmp instructions.  The value 'return'
10978     implements checking of validity at the point of returning from a
10979     function.  The value 'full' is an alias for specifying both
10980     'branch' and 'return'.  The value 'none' turns off instrumentation.
10981
10982     The macro '__CET__' is defined when '-fcf-protection' is used.  The
10983     first bit of '__CET__' is set to 1 for the value 'branch' and the
10984     second bit of '__CET__' is set to 1 for the 'return'.
10985
10986     You can also use the 'nocf_check' attribute to identify which
10987     functions and calls should be skipped from instrumentation (*note
10988     Function Attributes::).
10989
10990     Currently the x86 GNU/Linux target provides an implementation based
10991     on Intel Control-flow Enforcement Technology (CET).
10992
10993'-fstack-protector'
10994     Emit extra code to check for buffer overflows, such as stack
10995     smashing attacks.  This is done by adding a guard variable to
10996     functions with vulnerable objects.  This includes functions that
10997     call 'alloca', and functions with buffers larger than 8 bytes.  The
10998     guards are initialized when a function is entered and then checked
10999     when the function exits.  If a guard check fails, an error message
11000     is printed and the program exits.
11001
11002'-fstack-protector-all'
11003     Like '-fstack-protector' except that all functions are protected.
11004
11005'-fstack-protector-strong'
11006     Like '-fstack-protector' but includes additional functions to be
11007     protected -- those that have local array definitions, or have
11008     references to local frame addresses.
11009
11010'-fstack-protector-explicit'
11011     Like '-fstack-protector' but only protects those functions which
11012     have the 'stack_protect' attribute.
11013
11014'-fstack-check'
11015     Generate code to verify that you do not go beyond the boundary of
11016     the stack.  You should specify this flag if you are running in an
11017     environment with multiple threads, but you only rarely need to
11018     specify it in a single-threaded environment since stack overflow is
11019     automatically detected on nearly all systems if there is only one
11020     stack.
11021
11022     Note that this switch does not actually cause checking to be done;
11023     the operating system or the language runtime must do that.  The
11024     switch causes generation of code to ensure that they see the stack
11025     being extended.
11026
11027     You can additionally specify a string parameter: 'no' means no
11028     checking, 'generic' means force the use of old-style checking,
11029     'specific' means use the best checking method and is equivalent to
11030     bare '-fstack-check'.
11031
11032     Old-style checking is a generic mechanism that requires no specific
11033     target support in the compiler but comes with the following
11034     drawbacks:
11035
11036       1. Modified allocation strategy for large objects: they are
11037          always allocated dynamically if their size exceeds a fixed
11038          threshold.  Note this may change the semantics of some code.
11039
11040       2. Fixed limit on the size of the static frame of functions: when
11041          it is topped by a particular function, stack checking is not
11042          reliable and a warning is issued by the compiler.
11043
11044       3. Inefficiency: because of both the modified allocation strategy
11045          and the generic implementation, code performance is hampered.
11046
11047     Note that old-style stack checking is also the fallback method for
11048     'specific' if no target support has been added in the compiler.
11049
11050     '-fstack-check=' is designed for Ada's needs to detect infinite
11051     recursion and stack overflows.  'specific' is an excellent choice
11052     when compiling Ada code.  It is not generally sufficient to protect
11053     against stack-clash attacks.  To protect against those you want
11054     '-fstack-clash-protection'.
11055
11056'-fstack-clash-protection'
11057     Generate code to prevent stack clash style attacks.  When this
11058     option is enabled, the compiler will only allocate one page of
11059     stack space at a time and each page is accessed immediately after
11060     allocation.  Thus, it prevents allocations from jumping over any
11061     stack guard page provided by the operating system.
11062
11063     Most targets do not fully support stack clash protection.  However,
11064     on those targets '-fstack-clash-protection' will protect dynamic
11065     stack allocations.  '-fstack-clash-protection' may also provide
11066     limited protection for static stack allocations if the target
11067     supports '-fstack-check=specific'.
11068
11069'-fstack-limit-register=REG'
11070'-fstack-limit-symbol=SYM'
11071'-fno-stack-limit'
11072     Generate code to ensure that the stack does not grow beyond a
11073     certain value, either the value of a register or the address of a
11074     symbol.  If a larger stack is required, a signal is raised at run
11075     time.  For most targets, the signal is raised before the stack
11076     overruns the boundary, so it is possible to catch the signal
11077     without taking special precautions.
11078
11079     For instance, if the stack starts at absolute address '0x80000000'
11080     and grows downwards, you can use the flags
11081     '-fstack-limit-symbol=__stack_limit' and
11082     '-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit of
11083     128KB.  Note that this may only work with the GNU linker.
11084
11085     You can locally override stack limit checking by using the
11086     'no_stack_limit' function attribute (*note Function Attributes::).
11087
11088'-fsplit-stack'
11089     Generate code to automatically split the stack before it overflows.
11090     The resulting program has a discontiguous stack which can only
11091     overflow if the program is unable to allocate any more memory.
11092     This is most useful when running threaded programs, as it is no
11093     longer necessary to calculate a good stack size to use for each
11094     thread.  This is currently only implemented for the x86 targets
11095     running GNU/Linux.
11096
11097     When code compiled with '-fsplit-stack' calls code compiled without
11098     '-fsplit-stack', there may not be much stack space available for
11099     the latter code to run.  If compiling all code, including library
11100     code, with '-fsplit-stack' is not an option, then the linker can
11101     fix up these calls so that the code compiled without
11102     '-fsplit-stack' always has a large stack.  Support for this is
11103     implemented in the gold linker in GNU binutils release 2.21 and
11104     later.
11105
11106'-fvtable-verify=[std|preinit|none]'
11107     This option is only available when compiling C++ code.  It turns on
11108     (or off, if using '-fvtable-verify=none') the security feature that
11109     verifies at run time, for every virtual call, that the vtable
11110     pointer through which the call is made is valid for the type of the
11111     object, and has not been corrupted or overwritten.  If an invalid
11112     vtable pointer is detected at run time, an error is reported and
11113     execution of the program is immediately halted.
11114
11115     This option causes run-time data structures to be built at program
11116     startup, which are used for verifying the vtable pointers.  The
11117     options 'std' and 'preinit' control the timing of when these data
11118     structures are built.  In both cases the data structures are built
11119     before execution reaches 'main'.  Using '-fvtable-verify=std'
11120     causes the data structures to be built after shared libraries have
11121     been loaded and initialized.  '-fvtable-verify=preinit' causes them
11122     to be built before shared libraries have been loaded and
11123     initialized.
11124
11125     If this option appears multiple times in the command line with
11126     different values specified, 'none' takes highest priority over both
11127     'std' and 'preinit'; 'preinit' takes priority over 'std'.
11128
11129'-fvtv-debug'
11130     When used in conjunction with '-fvtable-verify=std' or
11131     '-fvtable-verify=preinit', causes debug versions of the runtime
11132     functions for the vtable verification feature to be called.  This
11133     flag also causes the compiler to log information about which vtable
11134     pointers it finds for each class.  This information is written to a
11135     file named 'vtv_set_ptr_data.log' in the directory named by the
11136     environment variable 'VTV_LOGS_DIR' if that is defined or the
11137     current working directory otherwise.
11138
11139     Note: This feature _appends_ data to the log file.  If you want a
11140     fresh log file, be sure to delete any existing one.
11141
11142'-fvtv-counts'
11143     This is a debugging flag.  When used in conjunction with
11144     '-fvtable-verify=std' or '-fvtable-verify=preinit', this causes the
11145     compiler to keep track of the total number of virtual calls it
11146     encounters and the number of verifications it inserts.  It also
11147     counts the number of calls to certain run-time library functions
11148     that it inserts and logs this information for each compilation
11149     unit.  The compiler writes this information to a file named
11150     'vtv_count_data.log' in the directory named by the environment
11151     variable 'VTV_LOGS_DIR' if that is defined or the current working
11152     directory otherwise.  It also counts the size of the vtable pointer
11153     sets for each class, and writes this information to
11154     'vtv_class_set_sizes.log' in the same directory.
11155
11156     Note: This feature _appends_ data to the log files.  To get fresh
11157     log files, be sure to delete any existing ones.
11158
11159'-finstrument-functions'
11160     Generate instrumentation calls for entry and exit to functions.
11161     Just after function entry and just before function exit, the
11162     following profiling functions are called with the address of the
11163     current function and its call site.  (On some platforms,
11164     '__builtin_return_address' does not work beyond the current
11165     function, so the call site information may not be available to the
11166     profiling functions otherwise.)
11167
11168          void __cyg_profile_func_enter (void *this_fn,
11169                                         void *call_site);
11170          void __cyg_profile_func_exit  (void *this_fn,
11171                                         void *call_site);
11172
11173     The first argument is the address of the start of the current
11174     function, which may be looked up exactly in the symbol table.
11175
11176     This instrumentation is also done for functions expanded inline in
11177     other functions.  The profiling calls indicate where, conceptually,
11178     the inline function is entered and exited.  This means that
11179     addressable versions of such functions must be available.  If all
11180     your uses of a function are expanded inline, this may mean an
11181     additional expansion of code size.  If you use 'extern inline' in
11182     your C code, an addressable version of such functions must be
11183     provided.  (This is normally the case anyway, but if you get lucky
11184     and the optimizer always expands the functions inline, you might
11185     have gotten away without providing static copies.)
11186
11187     A function may be given the attribute 'no_instrument_function', in
11188     which case this instrumentation is not done.  This can be used, for
11189     example, for the profiling functions listed above, high-priority
11190     interrupt routines, and any functions from which the profiling
11191     functions cannot safely be called (perhaps signal handlers, if the
11192     profiling routines generate output or allocate memory).
11193
11194'-finstrument-functions-exclude-file-list=FILE,FILE,...'
11195
11196     Set the list of functions that are excluded from instrumentation
11197     (see the description of '-finstrument-functions').  If the file
11198     that contains a function definition matches with one of FILE, then
11199     that function is not instrumented.  The match is done on
11200     substrings: if the FILE parameter is a substring of the file name,
11201     it is considered to be a match.
11202
11203     For example:
11204
11205          -finstrument-functions-exclude-file-list=/bits/stl,include/sys
11206
11207     excludes any inline function defined in files whose pathnames
11208     contain '/bits/stl' or 'include/sys'.
11209
11210     If, for some reason, you want to include letter ',' in one of SYM,
11211     write '\,'.  For example,
11212     '-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
11213     single quote surrounding the option).
11214
11215'-finstrument-functions-exclude-function-list=SYM,SYM,...'
11216
11217     This is similar to '-finstrument-functions-exclude-file-list', but
11218     this option sets the list of function names to be excluded from
11219     instrumentation.  The function name to be matched is its
11220     user-visible name, such as 'vector<int> blah(const vector<int> &)',
11221     not the internal mangled name (e.g., '_Z4blahRSt6vectorIiSaIiEE').
11222     The match is done on substrings: if the SYM parameter is a
11223     substring of the function name, it is considered to be a match.
11224     For C99 and C++ extended identifiers, the function name must be
11225     given in UTF-8, not using universal character names.
11226
11227'-fpatchable-function-entry=N[,M]'
11228     Generate N NOPs right at the beginning of each function, with the
11229     function entry point before the Mth NOP. If M is omitted, it
11230     defaults to '0' so the function entry points to the address just at
11231     the first NOP. The NOP instructions reserve extra space which can
11232     be used to patch in any desired instrumentation at run time,
11233     provided that the code segment is writable.  The amount of space is
11234     controllable indirectly via the number of NOPs; the NOP instruction
11235     used corresponds to the instruction emitted by the internal GCC
11236     back-end interface 'gen_nop'.  This behavior is target-specific and
11237     may also depend on the architecture variant and/or other
11238     compilation options.
11239
11240     For run-time identification, the starting addresses of these areas,
11241     which correspond to their respective function entries minus M, are
11242     additionally collected in the '__patchable_function_entries'
11243     section of the resulting binary.
11244
11245     Note that the value of '__attribute__ ((patchable_function_entry
11246     (N,M)))' takes precedence over command-line option
11247     '-fpatchable-function-entry=N,M'.  This can be used to increase the
11248     area size or to remove it completely on a single function.  If
11249     'N=0', no pad location is recorded.
11250
11251     The NOP instructions are inserted at--and maybe before, depending
11252     on M--the function entry address, even before the prologue.
11253
11254
11255File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Instrumentation Options,  Up: Invoking GCC
11256
112573.12 Options Controlling the Preprocessor
11258=========================================
11259
11260These options control the C preprocessor, which is run on each C source
11261file before actual compilation.
11262
11263 If you use the '-E' option, nothing is done except preprocessing.  Some
11264of these options make sense only together with '-E' because they cause
11265the preprocessor output to be unsuitable for actual compilation.
11266
11267 In addition to the options listed here, there are a number of options
11268to control search paths for include files documented in *note Directory
11269Options::.  Options to control preprocessor diagnostics are listed in
11270*note Warning Options::.
11271
11272'-D NAME'
11273     Predefine NAME as a macro, with definition '1'.
11274
11275'-D NAME=DEFINITION'
11276     The contents of DEFINITION are tokenized and processed as if they
11277     appeared during translation phase three in a '#define' directive.
11278     In particular, the definition is truncated by embedded newline
11279     characters.
11280
11281     If you are invoking the preprocessor from a shell or shell-like
11282     program you may need to use the shell's quoting syntax to protect
11283     characters such as spaces that have a meaning in the shell syntax.
11284
11285     If you wish to define a function-like macro on the command line,
11286     write its argument list with surrounding parentheses before the
11287     equals sign (if any).  Parentheses are meaningful to most shells,
11288     so you should quote the option.  With 'sh' and 'csh',
11289     '-D'NAME(ARGS...)=DEFINITION'' works.
11290
11291     '-D' and '-U' options are processed in the order they are given on
11292     the command line.  All '-imacros FILE' and '-include FILE' options
11293     are processed after all '-D' and '-U' options.
11294
11295'-U NAME'
11296     Cancel any previous definition of NAME, either built in or provided
11297     with a '-D' option.
11298
11299'-include FILE'
11300     Process FILE as if '#include "file"' appeared as the first line of
11301     the primary source file.  However, the first directory searched for
11302     FILE is the preprocessor's working directory _instead of_ the
11303     directory containing the main source file.  If not found there, it
11304     is searched for in the remainder of the '#include "..."' search
11305     chain as normal.
11306
11307     If multiple '-include' options are given, the files are included in
11308     the order they appear on the command line.
11309
11310'-imacros FILE'
11311     Exactly like '-include', except that any output produced by
11312     scanning FILE is thrown away.  Macros it defines remain defined.
11313     This allows you to acquire all the macros from a header without
11314     also processing its declarations.
11315
11316     All files specified by '-imacros' are processed before all files
11317     specified by '-include'.
11318
11319'-undef'
11320     Do not predefine any system-specific or GCC-specific macros.  The
11321     standard predefined macros remain defined.
11322
11323'-pthread'
11324     Define additional macros required for using the POSIX threads
11325     library.  You should use this option consistently for both
11326     compilation and linking.  This option is supported on GNU/Linux
11327     targets, most other Unix derivatives, and also on x86 Cygwin and
11328     MinGW targets.
11329
11330'-M'
11331     Instead of outputting the result of preprocessing, output a rule
11332     suitable for 'make' describing the dependencies of the main source
11333     file.  The preprocessor outputs one 'make' rule containing the
11334     object file name for that source file, a colon, and the names of
11335     all the included files, including those coming from '-include' or
11336     '-imacros' command-line options.
11337
11338     Unless specified explicitly (with '-MT' or '-MQ'), the object file
11339     name consists of the name of the source file with any suffix
11340     replaced with object file suffix and with any leading directory
11341     parts removed.  If there are many included files then the rule is
11342     split into several lines using '\'-newline.  The rule has no
11343     commands.
11344
11345     This option does not suppress the preprocessor's debug output, such
11346     as '-dM'.  To avoid mixing such debug output with the dependency
11347     rules you should explicitly specify the dependency output file with
11348     '-MF', or use an environment variable like 'DEPENDENCIES_OUTPUT'
11349     (*note Environment Variables::).  Debug output is still sent to the
11350     regular output stream as normal.
11351
11352     Passing '-M' to the driver implies '-E', and suppresses warnings
11353     with an implicit '-w'.
11354
11355'-MM'
11356     Like '-M' but do not mention header files that are found in system
11357     header directories, nor header files that are included, directly or
11358     indirectly, from such a header.
11359
11360     This implies that the choice of angle brackets or double quotes in
11361     an '#include' directive does not in itself determine whether that
11362     header appears in '-MM' dependency output.
11363
11364'-MF FILE'
11365     When used with '-M' or '-MM', specifies a file to write the
11366     dependencies to.  If no '-MF' switch is given the preprocessor
11367     sends the rules to the same place it would send preprocessed
11368     output.
11369
11370     When used with the driver options '-MD' or '-MMD', '-MF' overrides
11371     the default dependency output file.
11372
11373     If FILE is '-', then the dependencies are written to 'stdout'.
11374
11375'-MG'
11376     In conjunction with an option such as '-M' requesting dependency
11377     generation, '-MG' assumes missing header files are generated files
11378     and adds them to the dependency list without raising an error.  The
11379     dependency filename is taken directly from the '#include' directive
11380     without prepending any path.  '-MG' also suppresses preprocessed
11381     output, as a missing header file renders this useless.
11382
11383     This feature is used in automatic updating of makefiles.
11384
11385'-MP'
11386     This option instructs CPP to add a phony target for each dependency
11387     other than the main file, causing each to depend on nothing.  These
11388     dummy rules work around errors 'make' gives if you remove header
11389     files without updating the 'Makefile' to match.
11390
11391     This is typical output:
11392
11393          test.o: test.c test.h
11394
11395          test.h:
11396
11397'-MT TARGET'
11398
11399     Change the target of the rule emitted by dependency generation.  By
11400     default CPP takes the name of the main input file, deletes any
11401     directory components and any file suffix such as '.c', and appends
11402     the platform's usual object suffix.  The result is the target.
11403
11404     An '-MT' option sets the target to be exactly the string you
11405     specify.  If you want multiple targets, you can specify them as a
11406     single argument to '-MT', or use multiple '-MT' options.
11407
11408     For example, '-MT '$(objpfx)foo.o'' might give
11409
11410          $(objpfx)foo.o: foo.c
11411
11412'-MQ TARGET'
11413
11414     Same as '-MT', but it quotes any characters which are special to
11415     Make.  '-MQ '$(objpfx)foo.o'' gives
11416
11417          $$(objpfx)foo.o: foo.c
11418
11419     The default target is automatically quoted, as if it were given
11420     with '-MQ'.
11421
11422'-MD'
11423     '-MD' is equivalent to '-M -MF FILE', except that '-E' is not
11424     implied.  The driver determines FILE based on whether an '-o'
11425     option is given.  If it is, the driver uses its argument but with a
11426     suffix of '.d', otherwise it takes the name of the input file,
11427     removes any directory components and suffix, and applies a '.d'
11428     suffix.
11429
11430     If '-MD' is used in conjunction with '-E', any '-o' switch is
11431     understood to specify the dependency output file (*note -MF:
11432     dashMF.), but if used without '-E', each '-o' is understood to
11433     specify a target object file.
11434
11435     Since '-E' is not implied, '-MD' can be used to generate a
11436     dependency output file as a side effect of the compilation process.
11437
11438'-MMD'
11439     Like '-MD' except mention only user header files, not system header
11440     files.
11441
11442'-fpreprocessed'
11443     Indicate to the preprocessor that the input file has already been
11444     preprocessed.  This suppresses things like macro expansion,
11445     trigraph conversion, escaped newline splicing, and processing of
11446     most directives.  The preprocessor still recognizes and removes
11447     comments, so that you can pass a file preprocessed with '-C' to the
11448     compiler without problems.  In this mode the integrated
11449     preprocessor is little more than a tokenizer for the front ends.
11450
11451     '-fpreprocessed' is implicit if the input file has one of the
11452     extensions '.i', '.ii' or '.mi'.  These are the extensions that GCC
11453     uses for preprocessed files created by '-save-temps'.
11454
11455'-fdirectives-only'
11456     When preprocessing, handle directives, but do not expand macros.
11457
11458     The option's behavior depends on the '-E' and '-fpreprocessed'
11459     options.
11460
11461     With '-E', preprocessing is limited to the handling of directives
11462     such as '#define', '#ifdef', and '#error'.  Other preprocessor
11463     operations, such as macro expansion and trigraph conversion are not
11464     performed.  In addition, the '-dD' option is implicitly enabled.
11465
11466     With '-fpreprocessed', predefinition of command line and most
11467     builtin macros is disabled.  Macros such as '__LINE__', which are
11468     contextually dependent, are handled normally.  This enables
11469     compilation of files previously preprocessed with '-E
11470     -fdirectives-only'.
11471
11472     With both '-E' and '-fpreprocessed', the rules for '-fpreprocessed'
11473     take precedence.  This enables full preprocessing of files
11474     previously preprocessed with '-E -fdirectives-only'.
11475
11476'-fdollars-in-identifiers'
11477     Accept '$' in identifiers.
11478
11479'-fextended-identifiers'
11480     Accept universal character names in identifiers.  This option is
11481     enabled by default for C99 (and later C standard versions) and C++.
11482
11483'-fno-canonical-system-headers'
11484     When preprocessing, do not shorten system header paths with
11485     canonicalization.
11486
11487'-ftabstop=WIDTH'
11488     Set the distance between tab stops.  This helps the preprocessor
11489     report correct column numbers in warnings or errors, even if tabs
11490     appear on the line.  If the value is less than 1 or greater than
11491     100, the option is ignored.  The default is 8.
11492
11493'-ftrack-macro-expansion[=LEVEL]'
11494     Track locations of tokens across macro expansions.  This allows the
11495     compiler to emit diagnostic about the current macro expansion stack
11496     when a compilation error occurs in a macro expansion.  Using this
11497     option makes the preprocessor and the compiler consume more memory.
11498     The LEVEL parameter can be used to choose the level of precision of
11499     token location tracking thus decreasing the memory consumption if
11500     necessary.  Value '0' of LEVEL de-activates this option.  Value '1'
11501     tracks tokens locations in a degraded mode for the sake of minimal
11502     memory overhead.  In this mode all tokens resulting from the
11503     expansion of an argument of a function-like macro have the same
11504     location.  Value '2' tracks tokens locations completely.  This
11505     value is the most memory hungry.  When this option is given no
11506     argument, the default parameter value is '2'.
11507
11508     Note that '-ftrack-macro-expansion=2' is activated by default.
11509
11510'-fmacro-prefix-map=OLD=NEW'
11511     When preprocessing files residing in directory 'OLD', expand the
11512     '__FILE__' and '__BASE_FILE__' macros as if the files resided in
11513     directory 'NEW' instead.  This can be used to change an absolute
11514     path to a relative path by using '.' for NEW which can result in
11515     more reproducible builds that are location independent.  This
11516     option also affects '__builtin_FILE()' during compilation.  See
11517     also '-ffile-prefix-map'.
11518
11519'-fexec-charset=CHARSET'
11520     Set the execution character set, used for string and character
11521     constants.  The default is UTF-8.  CHARSET can be any encoding
11522     supported by the system's 'iconv' library routine.
11523
11524'-fwide-exec-charset=CHARSET'
11525     Set the wide execution character set, used for wide string and
11526     character constants.  The default is UTF-32 or UTF-16, whichever
11527     corresponds to the width of 'wchar_t'.  As with '-fexec-charset',
11528     CHARSET can be any encoding supported by the system's 'iconv'
11529     library routine; however, you will have problems with encodings
11530     that do not fit exactly in 'wchar_t'.
11531
11532'-finput-charset=CHARSET'
11533     Set the input character set, used for translation from the
11534     character set of the input file to the source character set used by
11535     GCC.  If the locale does not specify, or GCC cannot get this
11536     information from the locale, the default is UTF-8.  This can be
11537     overridden by either the locale or this command-line option.
11538     Currently the command-line option takes precedence if there's a
11539     conflict.  CHARSET can be any encoding supported by the system's
11540     'iconv' library routine.
11541
11542'-fpch-deps'
11543     When using precompiled headers (*note Precompiled Headers::), this
11544     flag causes the dependency-output flags to also list the files from
11545     the precompiled header's dependencies.  If not specified, only the
11546     precompiled header are listed and not the files that were used to
11547     create it, because those files are not consulted when a precompiled
11548     header is used.
11549
11550'-fpch-preprocess'
11551     This option allows use of a precompiled header (*note Precompiled
11552     Headers::) together with '-E'.  It inserts a special '#pragma',
11553     '#pragma GCC pch_preprocess "FILENAME"' in the output to mark the
11554     place where the precompiled header was found, and its FILENAME.
11555     When '-fpreprocessed' is in use, GCC recognizes this '#pragma' and
11556     loads the PCH.
11557
11558     This option is off by default, because the resulting preprocessed
11559     output is only really suitable as input to GCC.  It is switched on
11560     by '-save-temps'.
11561
11562     You should not write this '#pragma' in your own code, but it is
11563     safe to edit the filename if the PCH file is available in a
11564     different location.  The filename may be absolute or it may be
11565     relative to GCC's current directory.
11566
11567'-fworking-directory'
11568     Enable generation of linemarkers in the preprocessor output that
11569     let the compiler know the current working directory at the time of
11570     preprocessing.  When this option is enabled, the preprocessor
11571     emits, after the initial linemarker, a second linemarker with the
11572     current working directory followed by two slashes.  GCC uses this
11573     directory, when it's present in the preprocessed input, as the
11574     directory emitted as the current working directory in some
11575     debugging information formats.  This option is implicitly enabled
11576     if debugging information is enabled, but this can be inhibited with
11577     the negated form '-fno-working-directory'.  If the '-P' flag is
11578     present in the command line, this option has no effect, since no
11579     '#line' directives are emitted whatsoever.
11580
11581'-A PREDICATE=ANSWER'
11582     Make an assertion with the predicate PREDICATE and answer ANSWER.
11583     This form is preferred to the older form '-A PREDICATE(ANSWER)',
11584     which is still supported, because it does not use shell special
11585     characters.
11586
11587'-A -PREDICATE=ANSWER'
11588     Cancel an assertion with the predicate PREDICATE and answer ANSWER.
11589
11590'-C'
11591     Do not discard comments.  All comments are passed through to the
11592     output file, except for comments in processed directives, which are
11593     deleted along with the directive.
11594
11595     You should be prepared for side effects when using '-C'; it causes
11596     the preprocessor to treat comments as tokens in their own right.
11597     For example, comments appearing at the start of what would be a
11598     directive line have the effect of turning that line into an
11599     ordinary source line, since the first token on the line is no
11600     longer a '#'.
11601
11602'-CC'
11603     Do not discard comments, including during macro expansion.  This is
11604     like '-C', except that comments contained within macros are also
11605     passed through to the output file where the macro is expanded.
11606
11607     In addition to the side effects of the '-C' option, the '-CC'
11608     option causes all C++-style comments inside a macro to be converted
11609     to C-style comments.  This is to prevent later use of that macro
11610     from inadvertently commenting out the remainder of the source line.
11611
11612     The '-CC' option is generally used to support lint comments.
11613
11614'-P'
11615     Inhibit generation of linemarkers in the output from the
11616     preprocessor.  This might be useful when running the preprocessor
11617     on something that is not C code, and will be sent to a program
11618     which might be confused by the linemarkers.
11619
11620'-traditional'
11621'-traditional-cpp'
11622
11623     Try to imitate the behavior of pre-standard C preprocessors, as
11624     opposed to ISO C preprocessors.  See the GNU CPP manual for
11625     details.
11626
11627     Note that GCC does not otherwise attempt to emulate a pre-standard
11628     C compiler, and these options are only supported with the '-E'
11629     switch, or when invoking CPP explicitly.
11630
11631'-trigraphs'
11632     Support ISO C trigraphs.  These are three-character sequences, all
11633     starting with '??', that are defined by ISO C to stand for single
11634     characters.  For example, '??/' stands for '\', so ''??/n'' is a
11635     character constant for a newline.
11636
11637     The nine trigraphs and their replacements are
11638
11639          Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
11640          Replacement:      [    ]    {    }    #    \    ^    |    ~
11641
11642     By default, GCC ignores trigraphs, but in standard-conforming modes
11643     it converts them.  See the '-std' and '-ansi' options.
11644
11645'-remap'
11646     Enable special code to work around file systems which only permit
11647     very short file names, such as MS-DOS.
11648
11649'-H'
11650     Print the name of each header file used, in addition to other
11651     normal activities.  Each name is indented to show how deep in the
11652     '#include' stack it is.  Precompiled header files are also printed,
11653     even if they are found to be invalid; an invalid precompiled header
11654     file is printed with '...x' and a valid one with '...!' .
11655
11656'-dLETTERS'
11657     Says to make debugging dumps during compilation as specified by
11658     LETTERS.  The flags documented here are those relevant to the
11659     preprocessor.  Other LETTERS are interpreted by the compiler
11660     proper, or reserved for future versions of GCC, and so are silently
11661     ignored.  If you specify LETTERS whose behavior conflicts, the
11662     result is undefined.  *Note Developer Options::, for more
11663     information.
11664
11665     '-dM'
11666          Instead of the normal output, generate a list of '#define'
11667          directives for all the macros defined during the execution of
11668          the preprocessor, including predefined macros.  This gives you
11669          a way of finding out what is predefined in your version of the
11670          preprocessor.  Assuming you have no file 'foo.h', the command
11671
11672               touch foo.h; cpp -dM foo.h
11673
11674          shows all the predefined macros.
11675
11676          If you use '-dM' without the '-E' option, '-dM' is interpreted
11677          as a synonym for '-fdump-rtl-mach'.  *Note (gcc)Developer
11678          Options::.
11679
11680     '-dD'
11681          Like '-dM' except in two respects: it does _not_ include the
11682          predefined macros, and it outputs _both_ the '#define'
11683          directives and the result of preprocessing.  Both kinds of
11684          output go to the standard output file.
11685
11686     '-dN'
11687          Like '-dD', but emit only the macro names, not their
11688          expansions.
11689
11690     '-dI'
11691          Output '#include' directives in addition to the result of
11692          preprocessing.
11693
11694     '-dU'
11695          Like '-dD' except that only macros that are expanded, or whose
11696          definedness is tested in preprocessor directives, are output;
11697          the output is delayed until the use or test of the macro; and
11698          '#undef' directives are also output for macros tested but
11699          undefined at the time.
11700
11701'-fdebug-cpp'
11702     This option is only useful for debugging GCC. When used from CPP or
11703     with '-E', it dumps debugging information about location maps.
11704     Every token in the output is preceded by the dump of the map its
11705     location belongs to.
11706
11707     When used from GCC without '-E', this option has no effect.
11708
11709'-Wp,OPTION'
11710     You can use '-Wp,OPTION' to bypass the compiler driver and pass
11711     OPTION directly through to the preprocessor.  If OPTION contains
11712     commas, it is split into multiple options at the commas.  However,
11713     many options are modified, translated or interpreted by the
11714     compiler driver before being passed to the preprocessor, and '-Wp'
11715     forcibly bypasses this phase.  The preprocessor's direct interface
11716     is undocumented and subject to change, so whenever possible you
11717     should avoid using '-Wp' and let the driver handle the options
11718     instead.
11719
11720'-Xpreprocessor OPTION'
11721     Pass OPTION as an option to the preprocessor.  You can use this to
11722     supply system-specific preprocessor options that GCC does not
11723     recognize.
11724
11725     If you want to pass an option that takes an argument, you must use
11726     '-Xpreprocessor' twice, once for the option and once for the
11727     argument.
11728
11729'-no-integrated-cpp'
11730     Perform preprocessing as a separate pass before compilation.  By
11731     default, GCC performs preprocessing as an integrated part of input
11732     tokenization and parsing.  If this option is provided, the
11733     appropriate language front end ('cc1', 'cc1plus', or 'cc1obj' for
11734     C, C++, and Objective-C, respectively) is instead invoked twice,
11735     once for preprocessing only and once for actual compilation of the
11736     preprocessed input.  This option may be useful in conjunction with
11737     the '-B' or '-wrapper' options to specify an alternate preprocessor
11738     or perform additional processing of the program source between
11739     normal preprocessing and compilation.
11740
11741
11742File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
11743
117443.13 Passing Options to the Assembler
11745=====================================
11746
11747You can pass options to the assembler.
11748
11749'-Wa,OPTION'
11750     Pass OPTION as an option to the assembler.  If OPTION contains
11751     commas, it is split into multiple options at the commas.
11752
11753'-Xassembler OPTION'
11754     Pass OPTION as an option to the assembler.  You can use this to
11755     supply system-specific assembler options that GCC does not
11756     recognize.
11757
11758     If you want to pass an option that takes an argument, you must use
11759     '-Xassembler' twice, once for the option and once for the argument.
11760
11761
11762File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
11763
117643.14 Options for Linking
11765========================
11766
11767These options come into play when the compiler links object files into
11768an executable output file.  They are meaningless if the compiler is not
11769doing a link step.
11770
11771'OBJECT-FILE-NAME'
11772     A file name that does not end in a special recognized suffix is
11773     considered to name an object file or library.  (Object files are
11774     distinguished from libraries by the linker according to the file
11775     contents.)  If linking is done, these object files are used as
11776     input to the linker.
11777
11778'-c'
11779'-S'
11780'-E'
11781     If any of these options is used, then the linker is not run, and
11782     object file names should not be used as arguments.  *Note Overall
11783     Options::.
11784
11785'-fuse-ld=bfd'
11786     Use the 'bfd' linker instead of the default linker.
11787
11788'-fuse-ld=gold'
11789     Use the 'gold' linker instead of the default linker.
11790
11791'-lLIBRARY'
11792'-l LIBRARY'
11793     Search the library named LIBRARY when linking.  (The second
11794     alternative with the library as a separate argument is only for
11795     POSIX compliance and is not recommended.)
11796
11797     It makes a difference where in the command you write this option;
11798     the linker searches and processes libraries and object files in the
11799     order they are specified.  Thus, 'foo.o -lz bar.o' searches library
11800     'z' after file 'foo.o' but before 'bar.o'.  If 'bar.o' refers to
11801     functions in 'z', those functions may not be loaded.
11802
11803     The linker searches a standard list of directories for the library,
11804     which is actually a file named 'libLIBRARY.a'.  The linker then
11805     uses this file as if it had been specified precisely by name.
11806
11807     The directories searched include several standard system
11808     directories plus any that you specify with '-L'.
11809
11810     Normally the files found this way are library files--archive files
11811     whose members are object files.  The linker handles an archive file
11812     by scanning through it for members which define symbols that have
11813     so far been referenced but not defined.  But if the file that is
11814     found is an ordinary object file, it is linked in the usual
11815     fashion.  The only difference between using an '-l' option and
11816     specifying a file name is that '-l' surrounds LIBRARY with 'lib'
11817     and '.a' and searches several directories.
11818
11819'-lobjc'
11820     You need this special case of the '-l' option in order to link an
11821     Objective-C or Objective-C++ program.
11822
11823'-nostartfiles'
11824     Do not use the standard system startup files when linking.  The
11825     standard system libraries are used normally, unless '-nostdlib' or
11826     '-nodefaultlibs' is used.
11827
11828'-nodefaultlibs'
11829     Do not use the standard system libraries when linking.  Only the
11830     libraries you specify are passed to the linker, and options
11831     specifying linkage of the system libraries, such as
11832     '-static-libgcc' or '-shared-libgcc', are ignored.  The standard
11833     startup files are used normally, unless '-nostartfiles' is used.
11834
11835     The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
11836     'memmove'.  These entries are usually resolved by entries in libc.
11837     These entry points should be supplied through some other mechanism
11838     when this option is specified.
11839
11840'-nostdlib'
11841     Do not use the standard system startup files or libraries when
11842     linking.  No startup files and only the libraries you specify are
11843     passed to the linker, and options specifying linkage of the system
11844     libraries, such as '-static-libgcc' or '-shared-libgcc', are
11845     ignored.
11846
11847     The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
11848     'memmove'.  These entries are usually resolved by entries in libc.
11849     These entry points should be supplied through some other mechanism
11850     when this option is specified.
11851
11852     One of the standard libraries bypassed by '-nostdlib' and
11853     '-nodefaultlibs' is 'libgcc.a', a library of internal subroutines
11854     which GCC uses to overcome shortcomings of particular machines, or
11855     special needs for some languages.  (*Note Interfacing to GCC
11856     Output: (gccint)Interface, for more discussion of 'libgcc.a'.)  In
11857     most cases, you need 'libgcc.a' even when you want to avoid other
11858     standard libraries.  In other words, when you specify '-nostdlib'
11859     or '-nodefaultlibs' you should usually specify '-lgcc' as well.
11860     This ensures that you have no unresolved references to internal GCC
11861     library subroutines.  (An example of such an internal subroutine is
11862     '__main', used to ensure C++ constructors are called; *note
11863     'collect2': (gccint)Collect2.)
11864
11865'-pie'
11866     Produce a dynamically linked position independent executable on
11867     targets that support it.  For predictable results, you must also
11868     specify the same set of options used for compilation ('-fpie',
11869     '-fPIE', or model suboptions) when you specify this linker option.
11870
11871'-no-pie'
11872     Don't produce a dynamically linked position independent executable.
11873
11874'-static-pie'
11875     Produce a static position independent executable on targets that
11876     support it.  A static position independent executable is similar to
11877     a static executable, but can be loaded at any address without a
11878     dynamic linker.  For predictable results, you must also specify the
11879     same set of options used for compilation ('-fpie', '-fPIE', or
11880     model suboptions) when you specify this linker option.
11881
11882'-pthread'
11883     Link with the POSIX threads library.  This option is supported on
11884     GNU/Linux targets, most other Unix derivatives, and also on x86
11885     Cygwin and MinGW targets.  On some targets this option also sets
11886     flags for the preprocessor, so it should be used consistently for
11887     both compilation and linking.
11888
11889'-rdynamic'
11890     Pass the flag '-export-dynamic' to the ELF linker, on targets that
11891     support it.  This instructs the linker to add all symbols, not only
11892     used ones, to the dynamic symbol table.  This option is needed for
11893     some uses of 'dlopen' or to allow obtaining backtraces from within
11894     a program.
11895
11896'-s'
11897     Remove all symbol table and relocation information from the
11898     executable.
11899
11900'-static'
11901     On systems that support dynamic linking, this overrides '-pie' and
11902     prevents linking with the shared libraries.  On other systems, this
11903     option has no effect.
11904
11905'-shared'
11906     Produce a shared object which can then be linked with other objects
11907     to form an executable.  Not all systems support this option.  For
11908     predictable results, you must also specify the same set of options
11909     used for compilation ('-fpic', '-fPIC', or model suboptions) when
11910     you specify this linker option.(1)
11911
11912'-shared-libgcc'
11913'-static-libgcc'
11914     On systems that provide 'libgcc' as a shared library, these options
11915     force the use of either the shared or static version, respectively.
11916     If no shared version of 'libgcc' was built when the compiler was
11917     configured, these options have no effect.
11918
11919     There are several situations in which an application should use the
11920     shared 'libgcc' instead of the static version.  The most common of
11921     these is when the application wishes to throw and catch exceptions
11922     across different shared libraries.  In that case, each of the
11923     libraries as well as the application itself should use the shared
11924     'libgcc'.
11925
11926     Therefore, the G++ driver automatically adds '-shared-libgcc'
11927     whenever you build a shared library or a main executable, because
11928     C++ programs typically use exceptions, so this is the right thing
11929     to do.
11930
11931     If, instead, you use the GCC driver to create shared libraries, you
11932     may find that they are not always linked with the shared 'libgcc'.
11933     If GCC finds, at its configuration time, that you have a non-GNU
11934     linker or a GNU linker that does not support option
11935     '--eh-frame-hdr', it links the shared version of 'libgcc' into
11936     shared libraries by default.  Otherwise, it takes advantage of the
11937     linker and optimizes away the linking with the shared version of
11938     'libgcc', linking with the static version of libgcc by default.
11939     This allows exceptions to propagate through such shared libraries,
11940     without incurring relocation costs at library load time.
11941
11942     However, if a library or main executable is supposed to throw or
11943     catch exceptions, you must link it using the G++ driver, or using
11944     the option '-shared-libgcc', such that it is linked with the shared
11945     'libgcc'.
11946
11947'-static-libasan'
11948     When the '-fsanitize=address' option is used to link a program, the
11949     GCC driver automatically links against 'libasan'.  If 'libasan' is
11950     available as a shared library, and the '-static' option is not
11951     used, then this links against the shared version of 'libasan'.  The
11952     '-static-libasan' option directs the GCC driver to link 'libasan'
11953     statically, without necessarily linking other libraries statically.
11954
11955'-static-libtsan'
11956     When the '-fsanitize=thread' option is used to link a program, the
11957     GCC driver automatically links against 'libtsan'.  If 'libtsan' is
11958     available as a shared library, and the '-static' option is not
11959     used, then this links against the shared version of 'libtsan'.  The
11960     '-static-libtsan' option directs the GCC driver to link 'libtsan'
11961     statically, without necessarily linking other libraries statically.
11962
11963'-static-liblsan'
11964     When the '-fsanitize=leak' option is used to link a program, the
11965     GCC driver automatically links against 'liblsan'.  If 'liblsan' is
11966     available as a shared library, and the '-static' option is not
11967     used, then this links against the shared version of 'liblsan'.  The
11968     '-static-liblsan' option directs the GCC driver to link 'liblsan'
11969     statically, without necessarily linking other libraries statically.
11970
11971'-static-libubsan'
11972     When the '-fsanitize=undefined' option is used to link a program,
11973     the GCC driver automatically links against 'libubsan'.  If
11974     'libubsan' is available as a shared library, and the '-static'
11975     option is not used, then this links against the shared version of
11976     'libubsan'.  The '-static-libubsan' option directs the GCC driver
11977     to link 'libubsan' statically, without necessarily linking other
11978     libraries statically.
11979
11980'-static-libmpx'
11981     When the '-fcheck-pointer bounds' and '-mmpx' options are used to
11982     link a program, the GCC driver automatically links against
11983     'libmpx'.  If 'libmpx' is available as a shared library, and the
11984     '-static' option is not used, then this links against the shared
11985     version of 'libmpx'.  The '-static-libmpx' option directs the GCC
11986     driver to link 'libmpx' statically, without necessarily linking
11987     other libraries statically.
11988
11989'-static-libmpxwrappers'
11990     When the '-fcheck-pointer bounds' and '-mmpx' options are used to
11991     link a program without also using '-fno-chkp-use-wrappers', the GCC
11992     driver automatically links against 'libmpxwrappers'.  If
11993     'libmpxwrappers' is available as a shared library, and the
11994     '-static' option is not used, then this links against the shared
11995     version of 'libmpxwrappers'.  The '-static-libmpxwrappers' option
11996     directs the GCC driver to link 'libmpxwrappers' statically, without
11997     necessarily linking other libraries statically.
11998
11999'-static-libstdc++'
12000     When the 'g++' program is used to link a C++ program, it normally
12001     automatically links against 'libstdc++'.  If 'libstdc++' is
12002     available as a shared library, and the '-static' option is not
12003     used, then this links against the shared version of 'libstdc++'.
12004     That is normally fine.  However, it is sometimes useful to freeze
12005     the version of 'libstdc++' used by the program without going all
12006     the way to a fully static link.  The '-static-libstdc++' option
12007     directs the 'g++' driver to link 'libstdc++' statically, without
12008     necessarily linking other libraries statically.
12009
12010'-symbolic'
12011     Bind references to global symbols when building a shared object.
12012     Warn about any unresolved references (unless overridden by the link
12013     editor option '-Xlinker -z -Xlinker defs').  Only a few systems
12014     support this option.
12015
12016'-T SCRIPT'
12017     Use SCRIPT as the linker script.  This option is supported by most
12018     systems using the GNU linker.  On some targets, such as bare-board
12019     targets without an operating system, the '-T' option may be
12020     required when linking to avoid references to undefined symbols.
12021
12022'-Xlinker OPTION'
12023     Pass OPTION as an option to the linker.  You can use this to supply
12024     system-specific linker options that GCC does not recognize.
12025
12026     If you want to pass an option that takes a separate argument, you
12027     must use '-Xlinker' twice, once for the option and once for the
12028     argument.  For example, to pass '-assert definitions', you must
12029     write '-Xlinker -assert -Xlinker definitions'.  It does not work to
12030     write '-Xlinker "-assert definitions"', because this passes the
12031     entire string as a single argument, which is not what the linker
12032     expects.
12033
12034     When using the GNU linker, it is usually more convenient to pass
12035     arguments to linker options using the 'OPTION=VALUE' syntax than as
12036     separate arguments.  For example, you can specify '-Xlinker
12037     -Map=output.map' rather than '-Xlinker -Map -Xlinker output.map'.
12038     Other linkers may not support this syntax for command-line options.
12039
12040'-Wl,OPTION'
12041     Pass OPTION as an option to the linker.  If OPTION contains commas,
12042     it is split into multiple options at the commas.  You can use this
12043     syntax to pass an argument to the option.  For example,
12044     '-Wl,-Map,output.map' passes '-Map output.map' to the linker.  When
12045     using the GNU linker, you can also get the same effect with
12046     '-Wl,-Map=output.map'.
12047
12048'-u SYMBOL'
12049     Pretend the symbol SYMBOL is undefined, to force linking of library
12050     modules to define it.  You can use '-u' multiple times with
12051     different symbols to force loading of additional library modules.
12052
12053'-z KEYWORD'
12054     '-z' is passed directly on to the linker along with the keyword
12055     KEYWORD.  See the section in the documentation of your linker for
12056     permitted values and their meanings.
12057
12058   ---------- Footnotes ----------
12059
12060   (1) On some systems, 'gcc -shared' needs to build supplementary stub
12061code for constructors to work.  On multi-libbed systems, 'gcc -shared'
12062must select the correct support libraries to link against.  Failing to
12063supply the correct flags may lead to subtle defects.  Supplying them in
12064cases where they are not necessary is innocuous.
12065
12066
12067File: gcc.info,  Node: Directory Options,  Next: Code Gen Options,  Prev: Link Options,  Up: Invoking GCC
12068
120693.15 Options for Directory Search
12070=================================
12071
12072These options specify directories to search for header files, for
12073libraries and for parts of the compiler:
12074
12075'-I DIR'
12076'-iquote DIR'
12077'-isystem DIR'
12078'-idirafter DIR'
12079     Add the directory DIR to the list of directories to be searched for
12080     header files during preprocessing.  If DIR begins with '=' or
12081     '$SYSROOT', then the '=' or '$SYSROOT' is replaced by the sysroot
12082     prefix; see '--sysroot' and '-isysroot'.
12083
12084     Directories specified with '-iquote' apply only to the quote form
12085     of the directive, '#include "FILE"'.  Directories specified with
12086     '-I', '-isystem', or '-idirafter' apply to lookup for both the
12087     '#include "FILE"' and '#include <FILE>' directives.
12088
12089     You can specify any number or combination of these options on the
12090     command line to search for header files in several directories.
12091     The lookup order is as follows:
12092
12093       1. For the quote form of the include directive, the directory of
12094          the current file is searched first.
12095
12096       2. For the quote form of the include directive, the directories
12097          specified by '-iquote' options are searched in left-to-right
12098          order, as they appear on the command line.
12099
12100       3. Directories specified with '-I' options are scanned in
12101          left-to-right order.
12102
12103       4. Directories specified with '-isystem' options are scanned in
12104          left-to-right order.
12105
12106       5. Standard system directories are scanned.
12107
12108       6. Directories specified with '-idirafter' options are scanned in
12109          left-to-right order.
12110
12111     You can use '-I' to override a system header file, substituting
12112     your own version, since these directories are searched before the
12113     standard system header file directories.  However, you should not
12114     use this option to add directories that contain vendor-supplied
12115     system header files; use '-isystem' for that.
12116
12117     The '-isystem' and '-idirafter' options also mark the directory as
12118     a system directory, so that it gets the same special treatment that
12119     is applied to the standard system directories.
12120
12121     If a standard system include directory, or a directory specified
12122     with '-isystem', is also specified with '-I', the '-I' option is
12123     ignored.  The directory is still searched but as a system directory
12124     at its normal position in the system include chain.  This is to
12125     ensure that GCC's procedure to fix buggy system headers and the
12126     ordering for the '#include_next' directive are not inadvertently
12127     changed.  If you really need to change the search order for system
12128     directories, use the '-nostdinc' and/or '-isystem' options.
12129
12130'-I-'
12131     Split the include path.  This option has been deprecated.  Please
12132     use '-iquote' instead for '-I' directories before the '-I-' and
12133     remove the '-I-' option.
12134
12135     Any directories specified with '-I' options before '-I-' are
12136     searched only for headers requested with '#include "FILE"'; they
12137     are not searched for '#include <FILE>'.  If additional directories
12138     are specified with '-I' options after the '-I-', those directories
12139     are searched for all '#include' directives.
12140
12141     In addition, '-I-' inhibits the use of the directory of the current
12142     file directory as the first search directory for '#include "FILE"'.
12143     There is no way to override this effect of '-I-'.
12144
12145'-iprefix PREFIX'
12146     Specify PREFIX as the prefix for subsequent '-iwithprefix' options.
12147     If the prefix represents a directory, you should include the final
12148     '/'.
12149
12150'-iwithprefix DIR'
12151'-iwithprefixbefore DIR'
12152     Append DIR to the prefix specified previously with '-iprefix', and
12153     add the resulting directory to the include search path.
12154     '-iwithprefixbefore' puts it in the same place '-I' would;
12155     '-iwithprefix' puts it where '-idirafter' would.
12156
12157'-isysroot DIR'
12158     This option is like the '--sysroot' option, but applies only to
12159     header files (except for Darwin targets, where it applies to both
12160     header files and libraries).  See the '--sysroot' option for more
12161     information.
12162
12163'-imultilib DIR'
12164     Use DIR as a subdirectory of the directory containing
12165     target-specific C++ headers.
12166
12167'-nostdinc'
12168     Do not search the standard system directories for header files.
12169     Only the directories explicitly specified with '-I', '-iquote',
12170     '-isystem', and/or '-idirafter' options (and the directory of the
12171     current file, if appropriate) are searched.
12172
12173'-nostdinc++'
12174     Do not search for header files in the C++-specific standard
12175     directories, but do still search the other standard directories.
12176     (This option is used when building the C++ library.)
12177
12178'-iplugindir=DIR'
12179     Set the directory to search for plugins that are passed by
12180     '-fplugin=NAME' instead of '-fplugin=PATH/NAME.so'.  This option is
12181     not meant to be used by the user, but only passed by the driver.
12182
12183'-LDIR'
12184     Add directory DIR to the list of directories to be searched for
12185     '-l'.
12186
12187'-BPREFIX'
12188     This option specifies where to find the executables, libraries,
12189     include files, and data files of the compiler itself.
12190
12191     The compiler driver program runs one or more of the subprograms
12192     'cpp', 'cc1', 'as' and 'ld'.  It tries PREFIX as a prefix for each
12193     program it tries to run, both with and without 'MACHINE/VERSION/'
12194     for the corresponding target machine and compiler version.
12195
12196     For each subprogram to be run, the compiler driver first tries the
12197     '-B' prefix, if any.  If that name is not found, or if '-B' is not
12198     specified, the driver tries two standard prefixes, '/usr/lib/gcc/'
12199     and '/usr/local/lib/gcc/'.  If neither of those results in a file
12200     name that is found, the unmodified program name is searched for
12201     using the directories specified in your 'PATH' environment
12202     variable.
12203
12204     The compiler checks to see if the path provided by '-B' refers to a
12205     directory, and if necessary it adds a directory separator character
12206     at the end of the path.
12207
12208     '-B' prefixes that effectively specify directory names also apply
12209     to libraries in the linker, because the compiler translates these
12210     options into '-L' options for the linker.  They also apply to
12211     include files in the preprocessor, because the compiler translates
12212     these options into '-isystem' options for the preprocessor.  In
12213     this case, the compiler appends 'include' to the prefix.
12214
12215     The runtime support file 'libgcc.a' can also be searched for using
12216     the '-B' prefix, if needed.  If it is not found there, the two
12217     standard prefixes above are tried, and that is all.  The file is
12218     left out of the link if it is not found by those means.
12219
12220     Another way to specify a prefix much like the '-B' prefix is to use
12221     the environment variable 'GCC_EXEC_PREFIX'.  *Note Environment
12222     Variables::.
12223
12224     As a special kludge, if the path provided by '-B' is
12225     '[dir/]stageN/', where N is a number in the range 0 to 9, then it
12226     is replaced by '[dir/]include'.  This is to help with
12227     boot-strapping the compiler.
12228
12229'-no-canonical-prefixes'
12230     Do not expand any symbolic links, resolve references to '/../' or
12231     '/./', or make the path absolute when generating a relative prefix.
12232
12233'--sysroot=DIR'
12234     Use DIR as the logical root directory for headers and libraries.
12235     For example, if the compiler normally searches for headers in
12236     '/usr/include' and libraries in '/usr/lib', it instead searches
12237     'DIR/usr/include' and 'DIR/usr/lib'.
12238
12239     If you use both this option and the '-isysroot' option, then the
12240     '--sysroot' option applies to libraries, but the '-isysroot' option
12241     applies to header files.
12242
12243     The GNU linker (beginning with version 2.16) has the necessary
12244     support for this option.  If your linker does not support this
12245     option, the header file aspect of '--sysroot' still works, but the
12246     library aspect does not.
12247
12248'--no-sysroot-suffix'
12249     For some targets, a suffix is added to the root directory specified
12250     with '--sysroot', depending on the other options used, so that
12251     headers may for example be found in 'DIR/SUFFIX/usr/include'
12252     instead of 'DIR/usr/include'.  This option disables the addition of
12253     such a suffix.
12254
12255
12256File: gcc.info,  Node: Code Gen Options,  Next: Developer Options,  Prev: Directory Options,  Up: Invoking GCC
12257
122583.16 Options for Code Generation Conventions
12259============================================
12260
12261These machine-independent options control the interface conventions used
12262in code generation.
12263
12264 Most of them have both positive and negative forms; the negative form
12265of '-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
12266listed--the one that is not the default.  You can figure out the other
12267form by either removing 'no-' or adding it.
12268
12269'-fstack-reuse=REUSE-LEVEL'
12270     This option controls stack space reuse for user declared local/auto
12271     variables and compiler generated temporaries.  REUSE_LEVEL can be
12272     'all', 'named_vars', or 'none'.  'all' enables stack reuse for all
12273     local variables and temporaries, 'named_vars' enables the reuse
12274     only for user defined local variables with names, and 'none'
12275     disables stack reuse completely.  The default value is 'all'.  The
12276     option is needed when the program extends the lifetime of a scoped
12277     local variable or a compiler generated temporary beyond the end
12278     point defined by the language.  When a lifetime of a variable ends,
12279     and if the variable lives in memory, the optimizing compiler has
12280     the freedom to reuse its stack space with other temporaries or
12281     scoped local variables whose live range does not overlap with it.
12282     Legacy code extending local lifetime is likely to break with the
12283     stack reuse optimization.
12284
12285     For example,
12286
12287             int *p;
12288             {
12289               int local1;
12290
12291               p = &local1;
12292               local1 = 10;
12293               ....
12294             }
12295             {
12296                int local2;
12297                local2 = 20;
12298                ...
12299             }
12300
12301             if (*p == 10)  // out of scope use of local1
12302               {
12303
12304               }
12305
12306     Another example:
12307
12308             struct A
12309             {
12310                 A(int k) : i(k), j(k) { }
12311                 int i;
12312                 int j;
12313             };
12314
12315             A *ap;
12316
12317             void foo(const A& ar)
12318             {
12319                ap = &ar;
12320             }
12321
12322             void bar()
12323             {
12324                foo(A(10)); // temp object's lifetime ends when foo returns
12325
12326                {
12327                  A a(20);
12328                  ....
12329                }
12330                ap->i+= 10;  // ap references out of scope temp whose space
12331                             // is reused with a. What is the value of ap->i?
12332             }
12333
12334
12335     The lifetime of a compiler generated temporary is well defined by
12336     the C++ standard.  When a lifetime of a temporary ends, and if the
12337     temporary lives in memory, the optimizing compiler has the freedom
12338     to reuse its stack space with other temporaries or scoped local
12339     variables whose live range does not overlap with it.  However some
12340     of the legacy code relies on the behavior of older compilers in
12341     which temporaries' stack space is not reused, the aggressive stack
12342     reuse can lead to runtime errors.  This option is used to control
12343     the temporary stack reuse optimization.
12344
12345'-ftrapv'
12346     This option generates traps for signed overflow on addition,
12347     subtraction, multiplication operations.  The options '-ftrapv' and
12348     '-fwrapv' override each other, so using '-ftrapv' '-fwrapv' on the
12349     command-line results in '-fwrapv' being effective.  Note that only
12350     active options override, so using '-ftrapv' '-fwrapv' '-fno-wrapv'
12351     on the command-line results in '-ftrapv' being effective.
12352
12353'-fwrapv'
12354     This option instructs the compiler to assume that signed arithmetic
12355     overflow of addition, subtraction and multiplication wraps around
12356     using twos-complement representation.  This flag enables some
12357     optimizations and disables others.  The options '-ftrapv' and
12358     '-fwrapv' override each other, so using '-ftrapv' '-fwrapv' on the
12359     command-line results in '-fwrapv' being effective.  Note that only
12360     active options override, so using '-ftrapv' '-fwrapv' '-fno-wrapv'
12361     on the command-line results in '-ftrapv' being effective.
12362
12363'-fwrapv-pointer'
12364     This option instructs the compiler to assume that pointer
12365     arithmetic overflow on addition and subtraction wraps around using
12366     twos-complement representation.  This flag disables some
12367     optimizations which assume pointer overflow is invalid.
12368
12369'-fstrict-overflow'
12370     This option implies '-fno-wrapv' '-fno-wrapv-pointer' and when
12371     negated implies '-fwrapv' '-fwrapv-pointer'.
12372
12373'-fexceptions'
12374     Enable exception handling.  Generates extra code needed to
12375     propagate exceptions.  For some targets, this implies GCC generates
12376     frame unwind information for all functions, which can produce
12377     significant data size overhead, although it does not affect
12378     execution.  If you do not specify this option, GCC enables it by
12379     default for languages like C++ that normally require exception
12380     handling, and disables it for languages like C that do not normally
12381     require it.  However, you may need to enable this option when
12382     compiling C code that needs to interoperate properly with exception
12383     handlers written in C++.  You may also wish to disable this option
12384     if you are compiling older C++ programs that don't use exception
12385     handling.
12386
12387'-fnon-call-exceptions'
12388     Generate code that allows trapping instructions to throw
12389     exceptions.  Note that this requires platform-specific runtime
12390     support that does not exist everywhere.  Moreover, it only allows
12391     _trapping_ instructions to throw exceptions, i.e. memory references
12392     or floating-point instructions.  It does not allow exceptions to be
12393     thrown from arbitrary signal handlers such as 'SIGALRM'.
12394
12395'-fdelete-dead-exceptions'
12396     Consider that instructions that may throw exceptions but don't
12397     otherwise contribute to the execution of the program can be
12398     optimized away.  This option is enabled by default for the Ada
12399     front end, as permitted by the Ada language specification.
12400     Optimization passes that cause dead exceptions to be removed are
12401     enabled independently at different optimization levels.
12402
12403'-funwind-tables'
12404     Similar to '-fexceptions', except that it just generates any needed
12405     static data, but does not affect the generated code in any other
12406     way.  You normally do not need to enable this option; instead, a
12407     language processor that needs this handling enables it on your
12408     behalf.
12409
12410'-fasynchronous-unwind-tables'
12411     Generate unwind table in DWARF format, if supported by target
12412     machine.  The table is exact at each instruction boundary, so it
12413     can be used for stack unwinding from asynchronous events (such as
12414     debugger or garbage collector).
12415
12416'-fno-gnu-unique'
12417     On systems with recent GNU assembler and C library, the C++
12418     compiler uses the 'STB_GNU_UNIQUE' binding to make sure that
12419     definitions of template static data members and static local
12420     variables in inline functions are unique even in the presence of
12421     'RTLD_LOCAL'; this is necessary to avoid problems with a library
12422     used by two different 'RTLD_LOCAL' plugins depending on a
12423     definition in one of them and therefore disagreeing with the other
12424     one about the binding of the symbol.  But this causes 'dlclose' to
12425     be ignored for affected DSOs; if your program relies on
12426     reinitialization of a DSO via 'dlclose' and 'dlopen', you can use
12427     '-fno-gnu-unique'.
12428
12429'-fpcc-struct-return'
12430     Return "short" 'struct' and 'union' values in memory like longer
12431     ones, rather than in registers.  This convention is less efficient,
12432     but it has the advantage of allowing intercallability between
12433     GCC-compiled files and files compiled with other compilers,
12434     particularly the Portable C Compiler (pcc).
12435
12436     The precise convention for returning structures in memory depends
12437     on the target configuration macros.
12438
12439     Short structures and unions are those whose size and alignment
12440     match that of some integer type.
12441
12442     *Warning:* code compiled with the '-fpcc-struct-return' switch is
12443     not binary compatible with code compiled with the
12444     '-freg-struct-return' switch.  Use it to conform to a non-default
12445     application binary interface.
12446
12447'-freg-struct-return'
12448     Return 'struct' and 'union' values in registers when possible.
12449     This is more efficient for small structures than
12450     '-fpcc-struct-return'.
12451
12452     If you specify neither '-fpcc-struct-return' nor
12453     '-freg-struct-return', GCC defaults to whichever convention is
12454     standard for the target.  If there is no standard convention, GCC
12455     defaults to '-fpcc-struct-return', except on targets where GCC is
12456     the principal compiler.  In those cases, we can choose the
12457     standard, and we chose the more efficient register return
12458     alternative.
12459
12460     *Warning:* code compiled with the '-freg-struct-return' switch is
12461     not binary compatible with code compiled with the
12462     '-fpcc-struct-return' switch.  Use it to conform to a non-default
12463     application binary interface.
12464
12465'-fshort-enums'
12466     Allocate to an 'enum' type only as many bytes as it needs for the
12467     declared range of possible values.  Specifically, the 'enum' type
12468     is equivalent to the smallest integer type that has enough room.
12469
12470     *Warning:* the '-fshort-enums' switch causes GCC to generate code
12471     that is not binary compatible with code generated without that
12472     switch.  Use it to conform to a non-default application binary
12473     interface.
12474
12475'-fshort-wchar'
12476     Override the underlying type for 'wchar_t' to be 'short unsigned
12477     int' instead of the default for the target.  This option is useful
12478     for building programs to run under WINE.
12479
12480     *Warning:* the '-fshort-wchar' switch causes GCC to generate code
12481     that is not binary compatible with code generated without that
12482     switch.  Use it to conform to a non-default application binary
12483     interface.
12484
12485'-fno-common'
12486     In C code, this option controls the placement of global variables
12487     defined without an initializer, known as "tentative definitions" in
12488     the C standard.  Tentative definitions are distinct from
12489     declarations of a variable with the 'extern' keyword, which do not
12490     allocate storage.
12491
12492     Unix C compilers have traditionally allocated storage for
12493     uninitialized global variables in a common block.  This allows the
12494     linker to resolve all tentative definitions of the same variable in
12495     different compilation units to the same object, or to a
12496     non-tentative definition.  This is the behavior specified by
12497     '-fcommon', and is the default for GCC on most targets.  On the
12498     other hand, this behavior is not required by ISO C, and on some
12499     targets may carry a speed or code size penalty on variable
12500     references.
12501
12502     The '-fno-common' option specifies that the compiler should instead
12503     place uninitialized global variables in the data section of the
12504     object file.  This inhibits the merging of tentative definitions by
12505     the linker so you get a multiple-definition error if the same
12506     variable is defined in more than one compilation unit.  Compiling
12507     with '-fno-common' is useful on targets for which it provides
12508     better performance, or if you wish to verify that the program will
12509     work on other systems that always treat uninitialized variable
12510     definitions this way.
12511
12512'-fno-ident'
12513     Ignore the '#ident' directive.
12514
12515'-finhibit-size-directive'
12516     Don't output a '.size' assembler directive, or anything else that
12517     would cause trouble if the function is split in the middle, and the
12518     two halves are placed at locations far apart in memory.  This
12519     option is used when compiling 'crtstuff.c'; you should not need to
12520     use it for anything else.
12521
12522'-fverbose-asm'
12523     Put extra commentary information in the generated assembly code to
12524     make it more readable.  This option is generally only of use to
12525     those who actually need to read the generated assembly code
12526     (perhaps while debugging the compiler itself).
12527
12528     '-fno-verbose-asm', the default, causes the extra information to be
12529     omitted and is useful when comparing two assembler files.
12530
12531     The added comments include:
12532
12533        * information on the compiler version and command-line options,
12534
12535        * the source code lines associated with the assembly
12536          instructions, in the form FILENAME:LINENUMBER:CONTENT OF LINE,
12537
12538        * hints on which high-level expressions correspond to the
12539          various assembly instruction operands.
12540
12541     For example, given this C source file:
12542
12543          int test (int n)
12544          {
12545            int i;
12546            int total = 0;
12547
12548            for (i = 0; i < n; i++)
12549              total += i * i;
12550
12551            return total;
12552          }
12553
12554     compiling to (x86_64) assembly via '-S' and emitting the result
12555     direct to stdout via '-o' '-'
12556
12557          gcc -S test.c -fverbose-asm -Os -o -
12558
12559     gives output similar to this:
12560
12561          	.file	"test.c"
12562          # GNU C11 (GCC) version 7.0.0 20160809 (experimental) (x86_64-pc-linux-gnu)
12563            [...snip...]
12564          # options passed:
12565            [...snip...]
12566
12567          	.text
12568          	.globl	test
12569          	.type	test, @function
12570          test:
12571          .LFB0:
12572          	.cfi_startproc
12573          # test.c:4:   int total = 0;
12574          	xorl	%eax, %eax	# <retval>
12575          # test.c:6:   for (i = 0; i < n; i++)
12576          	xorl	%edx, %edx	# i
12577          .L2:
12578          # test.c:6:   for (i = 0; i < n; i++)
12579          	cmpl	%edi, %edx	# n, i
12580          	jge	.L5	#,
12581          # test.c:7:     total += i * i;
12582          	movl	%edx, %ecx	# i, tmp92
12583          	imull	%edx, %ecx	# i, tmp92
12584          # test.c:6:   for (i = 0; i < n; i++)
12585          	incl	%edx	# i
12586          # test.c:7:     total += i * i;
12587          	addl	%ecx, %eax	# tmp92, <retval>
12588          	jmp	.L2	#
12589          .L5:
12590          # test.c:10: }
12591          	ret
12592          	.cfi_endproc
12593          .LFE0:
12594          	.size	test, .-test
12595          	.ident	"GCC: (GNU) 7.0.0 20160809 (experimental)"
12596          	.section	.note.GNU-stack,"",@progbits
12597
12598     The comments are intended for humans rather than machines and hence
12599     the precise format of the comments is subject to change.
12600
12601'-frecord-gcc-switches'
12602     This switch causes the command line used to invoke the compiler to
12603     be recorded into the object file that is being created.  This
12604     switch is only implemented on some targets and the exact format of
12605     the recording is target and binary file format dependent, but it
12606     usually takes the form of a section containing ASCII text.  This
12607     switch is related to the '-fverbose-asm' switch, but that switch
12608     only records information in the assembler output file as comments,
12609     so it never reaches the object file.  See also
12610     '-grecord-gcc-switches' for another way of storing compiler options
12611     into the object file.
12612
12613'-fpic'
12614     Generate position-independent code (PIC) suitable for use in a
12615     shared library, if supported for the target machine.  Such code
12616     accesses all constant addresses through a global offset table
12617     (GOT).  The dynamic loader resolves the GOT entries when the
12618     program starts (the dynamic loader is not part of GCC; it is part
12619     of the operating system).  If the GOT size for the linked
12620     executable exceeds a machine-specific maximum size, you get an
12621     error message from the linker indicating that '-fpic' does not
12622     work; in that case, recompile with '-fPIC' instead.  (These
12623     maximums are 8k on the SPARC, 28k on AArch64 and 32k on the m68k
12624     and RS/6000.  The x86 has no such limit.)
12625
12626     Position-independent code requires special support, and therefore
12627     works only on certain machines.  For the x86, GCC supports PIC for
12628     System V but not for the Sun 386i.  Code generated for the IBM
12629     RS/6000 is always position-independent.
12630
12631     When this flag is set, the macros '__pic__' and '__PIC__' are
12632     defined to 1.
12633
12634'-fPIC'
12635     If supported for the target machine, emit position-independent
12636     code, suitable for dynamic linking and avoiding any limit on the
12637     size of the global offset table.  This option makes a difference on
12638     AArch64, m68k, PowerPC and SPARC.
12639
12640     Position-independent code requires special support, and therefore
12641     works only on certain machines.
12642
12643     When this flag is set, the macros '__pic__' and '__PIC__' are
12644     defined to 2.
12645
12646'-fpie'
12647'-fPIE'
12648     These options are similar to '-fpic' and '-fPIC', but generated
12649     position independent code can be only linked into executables.
12650     Usually these options are used when '-pie' GCC option is used
12651     during linking.
12652
12653     '-fpie' and '-fPIE' both define the macros '__pie__' and '__PIE__'.
12654     The macros have the value 1 for '-fpie' and 2 for '-fPIE'.
12655
12656'-fno-plt'
12657     Do not use the PLT for external function calls in
12658     position-independent code.  Instead, load the callee address at
12659     call sites from the GOT and branch to it.  This leads to more
12660     efficient code by eliminating PLT stubs and exposing GOT loads to
12661     optimizations.  On architectures such as 32-bit x86 where PLT stubs
12662     expect the GOT pointer in a specific register, this gives more
12663     register allocation freedom to the compiler.  Lazy binding requires
12664     use of the PLT; with '-fno-plt' all external symbols are resolved
12665     at load time.
12666
12667     Alternatively, the function attribute 'noplt' can be used to avoid
12668     calls through the PLT for specific external functions.
12669
12670     In position-dependent code, a few targets also convert calls to
12671     functions that are marked to not use the PLT to use the GOT
12672     instead.
12673
12674'-fno-jump-tables'
12675     Do not use jump tables for switch statements even where it would be
12676     more efficient than other code generation strategies.  This option
12677     is of use in conjunction with '-fpic' or '-fPIC' for building code
12678     that forms part of a dynamic linker and cannot reference the
12679     address of a jump table.  On some targets, jump tables do not
12680     require a GOT and this option is not needed.
12681
12682'-ffixed-REG'
12683     Treat the register named REG as a fixed register; generated code
12684     should never refer to it (except perhaps as a stack pointer, frame
12685     pointer or in some other fixed role).
12686
12687     REG must be the name of a register.  The register names accepted
12688     are machine-specific and are defined in the 'REGISTER_NAMES' macro
12689     in the machine description macro file.
12690
12691     This flag does not have a negative form, because it specifies a
12692     three-way choice.
12693
12694'-fcall-used-REG'
12695     Treat the register named REG as an allocable register that is
12696     clobbered by function calls.  It may be allocated for temporaries
12697     or variables that do not live across a call.  Functions compiled
12698     this way do not save and restore the register REG.
12699
12700     It is an error to use this flag with the frame pointer or stack
12701     pointer.  Use of this flag for other registers that have fixed
12702     pervasive roles in the machine's execution model produces
12703     disastrous results.
12704
12705     This flag does not have a negative form, because it specifies a
12706     three-way choice.
12707
12708'-fcall-saved-REG'
12709     Treat the register named REG as an allocable register saved by
12710     functions.  It may be allocated even for temporaries or variables
12711     that live across a call.  Functions compiled this way save and
12712     restore the register REG if they use it.
12713
12714     It is an error to use this flag with the frame pointer or stack
12715     pointer.  Use of this flag for other registers that have fixed
12716     pervasive roles in the machine's execution model produces
12717     disastrous results.
12718
12719     A different sort of disaster results from the use of this flag for
12720     a register in which function values may be returned.
12721
12722     This flag does not have a negative form, because it specifies a
12723     three-way choice.
12724
12725'-fpack-struct[=N]'
12726     Without a value specified, pack all structure members together
12727     without holes.  When a value is specified (which must be a small
12728     power of two), pack structure members according to this value,
12729     representing the maximum alignment (that is, objects with default
12730     alignment requirements larger than this are output potentially
12731     unaligned at the next fitting location.
12732
12733     *Warning:* the '-fpack-struct' switch causes GCC to generate code
12734     that is not binary compatible with code generated without that
12735     switch.  Additionally, it makes the code suboptimal.  Use it to
12736     conform to a non-default application binary interface.
12737
12738'-fleading-underscore'
12739     This option and its counterpart, '-fno-leading-underscore',
12740     forcibly change the way C symbols are represented in the object
12741     file.  One use is to help link with legacy assembly code.
12742
12743     *Warning:* the '-fleading-underscore' switch causes GCC to generate
12744     code that is not binary compatible with code generated without that
12745     switch.  Use it to conform to a non-default application binary
12746     interface.  Not all targets provide complete support for this
12747     switch.
12748
12749'-ftls-model=MODEL'
12750     Alter the thread-local storage model to be used (*note
12751     Thread-Local::).  The MODEL argument should be one of
12752     'global-dynamic', 'local-dynamic', 'initial-exec' or 'local-exec'.
12753     Note that the choice is subject to optimization: the compiler may
12754     use a more efficient model for symbols not visible outside of the
12755     translation unit, or if '-fpic' is not given on the command line.
12756
12757     The default without '-fpic' is 'initial-exec'; with '-fpic' the
12758     default is 'global-dynamic'.
12759
12760'-ftrampolines'
12761     For targets that normally need trampolines for nested functions,
12762     always generate them instead of using descriptors.  Otherwise, for
12763     targets that do not need them, like for example HP-PA or IA-64, do
12764     nothing.
12765
12766     A trampoline is a small piece of code that is created at run time
12767     on the stack when the address of a nested function is taken, and is
12768     used to call the nested function indirectly.  Therefore, it
12769     requires the stack to be made executable in order for the program
12770     to work properly.
12771
12772     '-fno-trampolines' is enabled by default on a language by language
12773     basis to let the compiler avoid generating them, if it computes
12774     that this is safe, and replace them with descriptors.  Descriptors
12775     are made up of data only, but the generated code must be prepared
12776     to deal with them.  As of this writing, '-fno-trampolines' is
12777     enabled by default only for Ada.
12778
12779     Moreover, code compiled with '-ftrampolines' and code compiled with
12780     '-fno-trampolines' are not binary compatible if nested functions
12781     are present.  This option must therefore be used on a program-wide
12782     basis and be manipulated with extreme care.
12783
12784'-fvisibility=[default|internal|hidden|protected]'
12785     Set the default ELF image symbol visibility to the specified
12786     option--all symbols are marked with this unless overridden within
12787     the code.  Using this feature can very substantially improve
12788     linking and load times of shared object libraries, produce more
12789     optimized code, provide near-perfect API export and prevent symbol
12790     clashes.  It is *strongly* recommended that you use this in any
12791     shared objects you distribute.
12792
12793     Despite the nomenclature, 'default' always means public; i.e.,
12794     available to be linked against from outside the shared object.
12795     'protected' and 'internal' are pretty useless in real-world usage
12796     so the only other commonly used option is 'hidden'.  The default if
12797     '-fvisibility' isn't specified is 'default', i.e., make every
12798     symbol public.
12799
12800     A good explanation of the benefits offered by ensuring ELF symbols
12801     have the correct visibility is given by "How To Write Shared
12802     Libraries" by Ulrich Drepper (which can be found at
12803     <https://www.akkadia.org/drepper/>)--however a superior solution
12804     made possible by this option to marking things hidden when the
12805     default is public is to make the default hidden and mark things
12806     public.  This is the norm with DLLs on Windows and with
12807     '-fvisibility=hidden' and '__attribute__ ((visibility("default")))'
12808     instead of '__declspec(dllexport)' you get almost identical
12809     semantics with identical syntax.  This is a great boon to those
12810     working with cross-platform projects.
12811
12812     For those adding visibility support to existing code, you may find
12813     '#pragma GCC visibility' of use.  This works by you enclosing the
12814     declarations you wish to set visibility for with (for example)
12815     '#pragma GCC visibility push(hidden)' and '#pragma GCC visibility
12816     pop'.  Bear in mind that symbol visibility should be viewed *as
12817     part of the API interface contract* and thus all new code should
12818     always specify visibility when it is not the default; i.e.,
12819     declarations only for use within the local DSO should *always* be
12820     marked explicitly as hidden as so to avoid PLT indirection
12821     overheads--making this abundantly clear also aids readability and
12822     self-documentation of the code.  Note that due to ISO C++
12823     specification requirements, 'operator new' and 'operator delete'
12824     must always be of default visibility.
12825
12826     Be aware that headers from outside your project, in particular
12827     system headers and headers from any other library you use, may not
12828     be expecting to be compiled with visibility other than the default.
12829     You may need to explicitly say '#pragma GCC visibility
12830     push(default)' before including any such headers.
12831
12832     'extern' declarations are not affected by '-fvisibility', so a lot
12833     of code can be recompiled with '-fvisibility=hidden' with no
12834     modifications.  However, this means that calls to 'extern'
12835     functions with no explicit visibility use the PLT, so it is more
12836     effective to use '__attribute ((visibility))' and/or '#pragma GCC
12837     visibility' to tell the compiler which 'extern' declarations should
12838     be treated as hidden.
12839
12840     Note that '-fvisibility' does affect C++ vague linkage entities.
12841     This means that, for instance, an exception class that is be thrown
12842     between DSOs must be explicitly marked with default visibility so
12843     that the 'type_info' nodes are unified between the DSOs.
12844
12845     An overview of these techniques, their benefits and how to use them
12846     is at <http://gcc.gnu.org/wiki/Visibility>.
12847
12848'-fstrict-volatile-bitfields'
12849     This option should be used if accesses to volatile bit-fields (or
12850     other structure fields, although the compiler usually honors those
12851     types anyway) should use a single access of the width of the
12852     field's type, aligned to a natural alignment if possible.  For
12853     example, targets with memory-mapped peripheral registers might
12854     require all such accesses to be 16 bits wide; with this flag you
12855     can declare all peripheral bit-fields as 'unsigned short' (assuming
12856     short is 16 bits on these targets) to force GCC to use 16-bit
12857     accesses instead of, perhaps, a more efficient 32-bit access.
12858
12859     If this option is disabled, the compiler uses the most efficient
12860     instruction.  In the previous example, that might be a 32-bit load
12861     instruction, even though that accesses bytes that do not contain
12862     any portion of the bit-field, or memory-mapped registers unrelated
12863     to the one being updated.
12864
12865     In some cases, such as when the 'packed' attribute is applied to a
12866     structure field, it may not be possible to access the field with a
12867     single read or write that is correctly aligned for the target
12868     machine.  In this case GCC falls back to generating multiple
12869     accesses rather than code that will fault or truncate the result at
12870     run time.
12871
12872     Note: Due to restrictions of the C/C++11 memory model, write
12873     accesses are not allowed to touch non bit-field members.  It is
12874     therefore recommended to define all bits of the field's type as
12875     bit-field members.
12876
12877     The default value of this option is determined by the application
12878     binary interface for the target processor.
12879
12880'-fsync-libcalls'
12881     This option controls whether any out-of-line instance of the
12882     '__sync' family of functions may be used to implement the C++11
12883     '__atomic' family of functions.
12884
12885     The default value of this option is enabled, thus the only useful
12886     form of the option is '-fno-sync-libcalls'.  This option is used in
12887     the implementation of the 'libatomic' runtime library.
12888
12889
12890File: gcc.info,  Node: Developer Options,  Next: Submodel Options,  Prev: Code Gen Options,  Up: Invoking GCC
12891
128923.17 GCC Developer Options
12893==========================
12894
12895This section describes command-line options that are primarily of
12896interest to GCC developers, including options to support compiler
12897testing and investigation of compiler bugs and compile-time performance
12898problems.  This includes options that produce debug dumps at various
12899points in the compilation; that print statistics such as memory use and
12900execution time; and that print information about GCC's configuration,
12901such as where it searches for libraries.  You should rarely need to use
12902any of these options for ordinary compilation and linking tasks.
12903
12904'-dLETTERS'
12905'-fdump-rtl-PASS'
12906'-fdump-rtl-PASS=FILENAME'
12907     Says to make debugging dumps during compilation at times specified
12908     by LETTERS.  This is used for debugging the RTL-based passes of the
12909     compiler.  The file names for most of the dumps are made by
12910     appending a pass number and a word to the DUMPNAME, and the files
12911     are created in the directory of the output file.  In case of
12912     '=FILENAME' option, the dump is output on the given file instead of
12913     the pass numbered dump files.  Note that the pass number is
12914     assigned as passes are registered into the pass manager.  Most
12915     passes are registered in the order that they will execute and for
12916     these passes the number corresponds to the pass execution order.
12917     However, passes registered by plugins, passes specific to
12918     compilation targets, or passes that are otherwise registered after
12919     all the other passes are numbered higher than a pass named "final",
12920     even if they are executed earlier.  DUMPNAME is generated from the
12921     name of the output file if explicitly specified and not an
12922     executable, otherwise it is the basename of the source file.
12923
12924     Some '-dLETTERS' switches have different meaning when '-E' is used
12925     for preprocessing.  *Note Preprocessor Options::, for information
12926     about preprocessor-specific dump options.
12927
12928     Debug dumps can be enabled with a '-fdump-rtl' switch or some '-d'
12929     option LETTERS.  Here are the possible letters for use in PASS and
12930     LETTERS, and their meanings:
12931
12932     '-fdump-rtl-alignments'
12933          Dump after branch alignments have been computed.
12934
12935     '-fdump-rtl-asmcons'
12936          Dump after fixing rtl statements that have unsatisfied in/out
12937          constraints.
12938
12939     '-fdump-rtl-auto_inc_dec'
12940          Dump after auto-inc-dec discovery.  This pass is only run on
12941          architectures that have auto inc or auto dec instructions.
12942
12943     '-fdump-rtl-barriers'
12944          Dump after cleaning up the barrier instructions.
12945
12946     '-fdump-rtl-bbpart'
12947          Dump after partitioning hot and cold basic blocks.
12948
12949     '-fdump-rtl-bbro'
12950          Dump after block reordering.
12951
12952     '-fdump-rtl-btl1'
12953     '-fdump-rtl-btl2'
12954          '-fdump-rtl-btl1' and '-fdump-rtl-btl2' enable dumping after
12955          the two branch target load optimization passes.
12956
12957     '-fdump-rtl-bypass'
12958          Dump after jump bypassing and control flow optimizations.
12959
12960     '-fdump-rtl-combine'
12961          Dump after the RTL instruction combination pass.
12962
12963     '-fdump-rtl-compgotos'
12964          Dump after duplicating the computed gotos.
12965
12966     '-fdump-rtl-ce1'
12967     '-fdump-rtl-ce2'
12968     '-fdump-rtl-ce3'
12969          '-fdump-rtl-ce1', '-fdump-rtl-ce2', and '-fdump-rtl-ce3'
12970          enable dumping after the three if conversion passes.
12971
12972     '-fdump-rtl-cprop_hardreg'
12973          Dump after hard register copy propagation.
12974
12975     '-fdump-rtl-csa'
12976          Dump after combining stack adjustments.
12977
12978     '-fdump-rtl-cse1'
12979     '-fdump-rtl-cse2'
12980          '-fdump-rtl-cse1' and '-fdump-rtl-cse2' enable dumping after
12981          the two common subexpression elimination passes.
12982
12983     '-fdump-rtl-dce'
12984          Dump after the standalone dead code elimination passes.
12985
12986     '-fdump-rtl-dbr'
12987          Dump after delayed branch scheduling.
12988
12989     '-fdump-rtl-dce1'
12990     '-fdump-rtl-dce2'
12991          '-fdump-rtl-dce1' and '-fdump-rtl-dce2' enable dumping after
12992          the two dead store elimination passes.
12993
12994     '-fdump-rtl-eh'
12995          Dump after finalization of EH handling code.
12996
12997     '-fdump-rtl-eh_ranges'
12998          Dump after conversion of EH handling range regions.
12999
13000     '-fdump-rtl-expand'
13001          Dump after RTL generation.
13002
13003     '-fdump-rtl-fwprop1'
13004     '-fdump-rtl-fwprop2'
13005          '-fdump-rtl-fwprop1' and '-fdump-rtl-fwprop2' enable dumping
13006          after the two forward propagation passes.
13007
13008     '-fdump-rtl-gcse1'
13009     '-fdump-rtl-gcse2'
13010          '-fdump-rtl-gcse1' and '-fdump-rtl-gcse2' enable dumping after
13011          global common subexpression elimination.
13012
13013     '-fdump-rtl-init-regs'
13014          Dump after the initialization of the registers.
13015
13016     '-fdump-rtl-initvals'
13017          Dump after the computation of the initial value sets.
13018
13019     '-fdump-rtl-into_cfglayout'
13020          Dump after converting to cfglayout mode.
13021
13022     '-fdump-rtl-ira'
13023          Dump after iterated register allocation.
13024
13025     '-fdump-rtl-jump'
13026          Dump after the second jump optimization.
13027
13028     '-fdump-rtl-loop2'
13029          '-fdump-rtl-loop2' enables dumping after the rtl loop
13030          optimization passes.
13031
13032     '-fdump-rtl-mach'
13033          Dump after performing the machine dependent reorganization
13034          pass, if that pass exists.
13035
13036     '-fdump-rtl-mode_sw'
13037          Dump after removing redundant mode switches.
13038
13039     '-fdump-rtl-rnreg'
13040          Dump after register renumbering.
13041
13042     '-fdump-rtl-outof_cfglayout'
13043          Dump after converting from cfglayout mode.
13044
13045     '-fdump-rtl-peephole2'
13046          Dump after the peephole pass.
13047
13048     '-fdump-rtl-postreload'
13049          Dump after post-reload optimizations.
13050
13051     '-fdump-rtl-pro_and_epilogue'
13052          Dump after generating the function prologues and epilogues.
13053
13054     '-fdump-rtl-sched1'
13055     '-fdump-rtl-sched2'
13056          '-fdump-rtl-sched1' and '-fdump-rtl-sched2' enable dumping
13057          after the basic block scheduling passes.
13058
13059     '-fdump-rtl-ree'
13060          Dump after sign/zero extension elimination.
13061
13062     '-fdump-rtl-seqabstr'
13063          Dump after common sequence discovery.
13064
13065     '-fdump-rtl-shorten'
13066          Dump after shortening branches.
13067
13068     '-fdump-rtl-sibling'
13069          Dump after sibling call optimizations.
13070
13071     '-fdump-rtl-split1'
13072     '-fdump-rtl-split2'
13073     '-fdump-rtl-split3'
13074     '-fdump-rtl-split4'
13075     '-fdump-rtl-split5'
13076          These options enable dumping after five rounds of instruction
13077          splitting.
13078
13079     '-fdump-rtl-sms'
13080          Dump after modulo scheduling.  This pass is only run on some
13081          architectures.
13082
13083     '-fdump-rtl-stack'
13084          Dump after conversion from GCC's "flat register file"
13085          registers to the x87's stack-like registers.  This pass is
13086          only run on x86 variants.
13087
13088     '-fdump-rtl-subreg1'
13089     '-fdump-rtl-subreg2'
13090          '-fdump-rtl-subreg1' and '-fdump-rtl-subreg2' enable dumping
13091          after the two subreg expansion passes.
13092
13093     '-fdump-rtl-unshare'
13094          Dump after all rtl has been unshared.
13095
13096     '-fdump-rtl-vartrack'
13097          Dump after variable tracking.
13098
13099     '-fdump-rtl-vregs'
13100          Dump after converting virtual registers to hard registers.
13101
13102     '-fdump-rtl-web'
13103          Dump after live range splitting.
13104
13105     '-fdump-rtl-regclass'
13106     '-fdump-rtl-subregs_of_mode_init'
13107     '-fdump-rtl-subregs_of_mode_finish'
13108     '-fdump-rtl-dfinit'
13109     '-fdump-rtl-dfinish'
13110          These dumps are defined but always produce empty files.
13111
13112     '-da'
13113     '-fdump-rtl-all'
13114          Produce all the dumps listed above.
13115
13116     '-dA'
13117          Annotate the assembler output with miscellaneous debugging
13118          information.
13119
13120     '-dD'
13121          Dump all macro definitions, at the end of preprocessing, in
13122          addition to normal output.
13123
13124     '-dH'
13125          Produce a core dump whenever an error occurs.
13126
13127     '-dp'
13128          Annotate the assembler output with a comment indicating which
13129          pattern and alternative is used.  The length and cost of each
13130          instruction are also printed.
13131
13132     '-dP'
13133          Dump the RTL in the assembler output as a comment before each
13134          instruction.  Also turns on '-dp' annotation.
13135
13136     '-dx'
13137          Just generate RTL for a function instead of compiling it.
13138          Usually used with '-fdump-rtl-expand'.
13139
13140'-fdump-noaddr'
13141     When doing debugging dumps, suppress address output.  This makes it
13142     more feasible to use diff on debugging dumps for compiler
13143     invocations with different compiler binaries and/or different text
13144     / bss / data / heap / stack / dso start locations.
13145
13146'-freport-bug'
13147     Collect and dump debug information into a temporary file if an
13148     internal compiler error (ICE) occurs.
13149
13150'-fdump-unnumbered'
13151     When doing debugging dumps, suppress instruction numbers and
13152     address output.  This makes it more feasible to use diff on
13153     debugging dumps for compiler invocations with different options, in
13154     particular with and without '-g'.
13155
13156'-fdump-unnumbered-links'
13157     When doing debugging dumps (see '-d' option above), suppress
13158     instruction numbers for the links to the previous and next
13159     instructions in a sequence.
13160
13161'-fdump-ipa-SWITCH'
13162     Control the dumping at various stages of inter-procedural analysis
13163     language tree to a file.  The file name is generated by appending a
13164     switch specific suffix to the source file name, and the file is
13165     created in the same directory as the output file.  The following
13166     dumps are possible:
13167
13168     'all'
13169          Enables all inter-procedural analysis dumps.
13170
13171     'cgraph'
13172          Dumps information about call-graph optimization, unused
13173          function removal, and inlining decisions.
13174
13175     'inline'
13176          Dump after function inlining.
13177
13178'-fdump-lang-all'
13179'-fdump-lang-SWITCH'
13180'-fdump-lang-SWITCH-OPTIONS'
13181'-fdump-lang-SWITCH-OPTIONS=FILENAME'
13182     Control the dumping of language-specific information.  The OPTIONS
13183     and FILENAME portions behave as described in the '-fdump-tree'
13184     option.  The following SWITCH values are accepted:
13185
13186     'all'
13187
13188          Enable all language-specific dumps.
13189
13190     'class'
13191          Dump class hierarchy information.  Virtual table information
13192          is emitted unless ''slim'' is specified.  This option is
13193          applicable to C++ only.
13194
13195     'raw'
13196          Dump the raw internal tree data.  This option is applicable to
13197          C++ only.
13198
13199'-fdump-passes'
13200     Print on 'stderr' the list of optimization passes that are turned
13201     on and off by the current command-line options.
13202
13203'-fdump-statistics-OPTION'
13204     Enable and control dumping of pass statistics in a separate file.
13205     The file name is generated by appending a suffix ending in
13206     '.statistics' to the source file name, and the file is created in
13207     the same directory as the output file.  If the '-OPTION' form is
13208     used, '-stats' causes counters to be summed over the whole
13209     compilation unit while '-details' dumps every event as the passes
13210     generate them.  The default with no option is to sum counters for
13211     each function compiled.
13212
13213'-fdump-tree-all'
13214'-fdump-tree-SWITCH'
13215'-fdump-tree-SWITCH-OPTIONS'
13216'-fdump-tree-SWITCH-OPTIONS=FILENAME'
13217     Control the dumping at various stages of processing the
13218     intermediate language tree to a file.  The file name is generated
13219     by appending a switch-specific suffix to the source file name, and
13220     the file is created in the same directory as the output file.  In
13221     case of '=FILENAME' option, the dump is output on the given file
13222     instead of the auto named dump files.  If the '-OPTIONS' form is
13223     used, OPTIONS is a list of '-' separated options which control the
13224     details of the dump.  Not all options are applicable to all dumps;
13225     those that are not meaningful are ignored.  The following options
13226     are available
13227
13228     'address'
13229          Print the address of each node.  Usually this is not
13230          meaningful as it changes according to the environment and
13231          source file.  Its primary use is for tying up a dump file with
13232          a debug environment.
13233     'asmname'
13234          If 'DECL_ASSEMBLER_NAME' has been set for a given decl, use
13235          that in the dump instead of 'DECL_NAME'.  Its primary use is
13236          ease of use working backward from mangled names in the
13237          assembly file.
13238     'slim'
13239          When dumping front-end intermediate representations, inhibit
13240          dumping of members of a scope or body of a function merely
13241          because that scope has been reached.  Only dump such items
13242          when they are directly reachable by some other path.
13243
13244          When dumping pretty-printed trees, this option inhibits
13245          dumping the bodies of control structures.
13246
13247          When dumping RTL, print the RTL in slim (condensed) form
13248          instead of the default LISP-like representation.
13249     'raw'
13250          Print a raw representation of the tree.  By default, trees are
13251          pretty-printed into a C-like representation.
13252     'details'
13253          Enable more detailed dumps (not honored by every dump option).
13254          Also include information from the optimization passes.
13255     'stats'
13256          Enable dumping various statistics about the pass (not honored
13257          by every dump option).
13258     'blocks'
13259          Enable showing basic block boundaries (disabled in raw dumps).
13260     'graph'
13261          For each of the other indicated dump files
13262          ('-fdump-rtl-PASS'), dump a representation of the control flow
13263          graph suitable for viewing with GraphViz to
13264          'FILE.PASSID.PASS.dot'.  Each function in the file is
13265          pretty-printed as a subgraph, so that GraphViz can render them
13266          all in a single plot.
13267
13268          This option currently only works for RTL dumps, and the RTL is
13269          always dumped in slim form.
13270     'vops'
13271          Enable showing virtual operands for every statement.
13272     'lineno'
13273          Enable showing line numbers for statements.
13274     'uid'
13275          Enable showing the unique ID ('DECL_UID') for each variable.
13276     'verbose'
13277          Enable showing the tree dump for each statement.
13278     'eh'
13279          Enable showing the EH region number holding each statement.
13280     'scev'
13281          Enable showing scalar evolution analysis details.
13282     'optimized'
13283          Enable showing optimization information (only available in
13284          certain passes).
13285     'missed'
13286          Enable showing missed optimization information (only available
13287          in certain passes).
13288     'note'
13289          Enable other detailed optimization information (only available
13290          in certain passes).
13291     '=FILENAME'
13292          Instead of an auto named dump file, output into the given file
13293          name.  The file names 'stdout' and 'stderr' are treated
13294          specially and are considered already open standard streams.
13295          For example,
13296
13297               gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
13298                    -fdump-tree-pre=/dev/stderr file.c
13299
13300          outputs vectorizer dump into 'foo.dump', while the PRE dump is
13301          output on to 'stderr'.  If two conflicting dump filenames are
13302          given for the same pass, then the latter option overrides the
13303          earlier one.
13304
13305     'all'
13306          Turn on all options, except 'raw', 'slim', 'verbose' and
13307          'lineno'.
13308
13309     'optall'
13310          Turn on all optimization options, i.e., 'optimized', 'missed',
13311          and 'note'.
13312
13313     To determine what tree dumps are available or find the dump for a
13314     pass of interest follow the steps below.
13315
13316       1. Invoke GCC with '-fdump-passes' and in the 'stderr' output
13317          look for a code that corresponds to the pass you are
13318          interested in.  For example, the codes 'tree-evrp',
13319          'tree-vrp1', and 'tree-vrp2' correspond to the three Value
13320          Range Propagation passes.  The number at the end distinguishes
13321          distinct invocations of the same pass.
13322       2. To enable the creation of the dump file, append the pass code
13323          to the '-fdump-' option prefix and invoke GCC with it.  For
13324          example, to enable the dump from the Early Value Range
13325          Propagation pass, invoke GCC with the '-fdump-tree-evrp'
13326          option.  Optionally, you may specify the name of the dump
13327          file.  If you don't specify one, GCC creates as described
13328          below.
13329       3. Find the pass dump in a file whose name is composed of three
13330          components separated by a period: the name of the source file
13331          GCC was invoked to compile, a numeric suffix indicating the
13332          pass number followed by the letter 't' for tree passes (and
13333          the letter 'r' for RTL passes), and finally the pass code.
13334          For example, the Early VRP pass dump might be in a file named
13335          'myfile.c.038t.evrp' in the current working directory.  Note
13336          that the numeric codes are not stable and may change from one
13337          version of GCC to another.
13338
13339'-fopt-info'
13340'-fopt-info-OPTIONS'
13341'-fopt-info-OPTIONS=FILENAME'
13342     Controls optimization dumps from various optimization passes.  If
13343     the '-OPTIONS' form is used, OPTIONS is a list of '-' separated
13344     option keywords to select the dump details and optimizations.
13345
13346     The OPTIONS can be divided into two groups: options describing the
13347     verbosity of the dump, and options describing which optimizations
13348     should be included.  The options from both the groups can be freely
13349     mixed as they are non-overlapping.  However, in case of any
13350     conflicts, the later options override the earlier options on the
13351     command line.
13352
13353     The following options control the dump verbosity:
13354
13355     'optimized'
13356          Print information when an optimization is successfully
13357          applied.  It is up to a pass to decide which information is
13358          relevant.  For example, the vectorizer passes print the source
13359          location of loops which are successfully vectorized.
13360     'missed'
13361          Print information about missed optimizations.  Individual
13362          passes control which information to include in the output.
13363     'note'
13364          Print verbose information about optimizations, such as certain
13365          transformations, more detailed messages about decisions etc.
13366     'all'
13367          Print detailed optimization information.  This includes
13368          'optimized', 'missed', and 'note'.
13369
13370     One or more of the following option keywords can be used to
13371     describe a group of optimizations:
13372
13373     'ipa'
13374          Enable dumps from all interprocedural optimizations.
13375     'loop'
13376          Enable dumps from all loop optimizations.
13377     'inline'
13378          Enable dumps from all inlining optimizations.
13379     'omp'
13380          Enable dumps from all OMP (Offloading and Multi Processing)
13381          optimizations.
13382     'vec'
13383          Enable dumps from all vectorization optimizations.
13384     'optall'
13385          Enable dumps from all optimizations.  This is a superset of
13386          the optimization groups listed above.
13387
13388     If OPTIONS is omitted, it defaults to 'optimized-optall', which
13389     means to dump all info about successful optimizations from all the
13390     passes.
13391
13392     If the FILENAME is provided, then the dumps from all the applicable
13393     optimizations are concatenated into the FILENAME.  Otherwise the
13394     dump is output onto 'stderr'.  Though multiple '-fopt-info' options
13395     are accepted, only one of them can include a FILENAME.  If other
13396     filenames are provided then all but the first such option are
13397     ignored.
13398
13399     Note that the output FILENAME is overwritten in case of multiple
13400     translation units.  If a combined output from multiple translation
13401     units is desired, 'stderr' should be used instead.
13402
13403     In the following example, the optimization info is output to
13404     'stderr':
13405
13406          gcc -O3 -fopt-info
13407
13408     This example:
13409          gcc -O3 -fopt-info-missed=missed.all
13410
13411     outputs missed optimization report from all the passes into
13412     'missed.all', and this one:
13413
13414          gcc -O2 -ftree-vectorize -fopt-info-vec-missed
13415
13416     prints information about missed optimization opportunities from
13417     vectorization passes on 'stderr'.  Note that
13418     '-fopt-info-vec-missed' is equivalent to '-fopt-info-missed-vec'.
13419     The order of the optimization group names and message types listed
13420     after '-fopt-info' does not matter.
13421
13422     As another example,
13423          gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
13424
13425     outputs information about missed optimizations as well as optimized
13426     locations from all the inlining passes into 'inline.txt'.
13427
13428     Finally, consider:
13429
13430          gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
13431
13432     Here the two output filenames 'vec.miss' and 'loop.opt' are in
13433     conflict since only one output file is allowed.  In this case, only
13434     the first option takes effect and the subsequent options are
13435     ignored.  Thus only 'vec.miss' is produced which contains dumps
13436     from the vectorizer about missed opportunities.
13437
13438'-fsched-verbose=N'
13439     On targets that use instruction scheduling, this option controls
13440     the amount of debugging output the scheduler prints to the dump
13441     files.
13442
13443     For N greater than zero, '-fsched-verbose' outputs the same
13444     information as '-fdump-rtl-sched1' and '-fdump-rtl-sched2'.  For N
13445     greater than one, it also output basic block probabilities,
13446     detailed ready list information and unit/insn info.  For N greater
13447     than two, it includes RTL at abort point, control-flow and regions
13448     info.  And for N over four, '-fsched-verbose' also includes
13449     dependence info.
13450
13451'-fenable-KIND-PASS'
13452'-fdisable-KIND-PASS=RANGE-LIST'
13453
13454     This is a set of options that are used to explicitly disable/enable
13455     optimization passes.  These options are intended for use for
13456     debugging GCC. Compiler users should use regular options for
13457     enabling/disabling passes instead.
13458
13459     '-fdisable-ipa-PASS'
13460          Disable IPA pass PASS.  PASS is the pass name.  If the same
13461          pass is statically invoked in the compiler multiple times, the
13462          pass name should be appended with a sequential number starting
13463          from 1.
13464
13465     '-fdisable-rtl-PASS'
13466     '-fdisable-rtl-PASS=RANGE-LIST'
13467          Disable RTL pass PASS.  PASS is the pass name.  If the same
13468          pass is statically invoked in the compiler multiple times, the
13469          pass name should be appended with a sequential number starting
13470          from 1.  RANGE-LIST is a comma-separated list of function
13471          ranges or assembler names.  Each range is a number pair
13472          separated by a colon.  The range is inclusive in both ends.
13473          If the range is trivial, the number pair can be simplified as
13474          a single number.  If the function's call graph node's UID
13475          falls within one of the specified ranges, the PASS is disabled
13476          for that function.  The UID is shown in the function header of
13477          a dump file, and the pass names can be dumped by using option
13478          '-fdump-passes'.
13479
13480     '-fdisable-tree-PASS'
13481     '-fdisable-tree-PASS=RANGE-LIST'
13482          Disable tree pass PASS.  See '-fdisable-rtl' for the
13483          description of option arguments.
13484
13485     '-fenable-ipa-PASS'
13486          Enable IPA pass PASS.  PASS is the pass name.  If the same
13487          pass is statically invoked in the compiler multiple times, the
13488          pass name should be appended with a sequential number starting
13489          from 1.
13490
13491     '-fenable-rtl-PASS'
13492     '-fenable-rtl-PASS=RANGE-LIST'
13493          Enable RTL pass PASS.  See '-fdisable-rtl' for option argument
13494          description and examples.
13495
13496     '-fenable-tree-PASS'
13497     '-fenable-tree-PASS=RANGE-LIST'
13498          Enable tree pass PASS.  See '-fdisable-rtl' for the
13499          description of option arguments.
13500
13501     Here are some examples showing uses of these options.
13502
13503
13504          # disable ccp1 for all functions
13505             -fdisable-tree-ccp1
13506          # disable complete unroll for function whose cgraph node uid is 1
13507             -fenable-tree-cunroll=1
13508          # disable gcse2 for functions at the following ranges [1,1],
13509          # [300,400], and [400,1000]
13510          # disable gcse2 for functions foo and foo2
13511             -fdisable-rtl-gcse2=foo,foo2
13512          # disable early inlining
13513             -fdisable-tree-einline
13514          # disable ipa inlining
13515             -fdisable-ipa-inline
13516          # enable tree full unroll
13517             -fenable-tree-unroll
13518
13519
13520'-fchecking'
13521'-fchecking=N'
13522     Enable internal consistency checking.  The default depends on the
13523     compiler configuration.  '-fchecking=2' enables further internal
13524     consistency checking that might affect code generation.
13525
13526'-frandom-seed=STRING'
13527     This option provides a seed that GCC uses in place of random
13528     numbers in generating certain symbol names that have to be
13529     different in every compiled file.  It is also used to place unique
13530     stamps in coverage data files and the object files that produce
13531     them.  You can use the '-frandom-seed' option to produce
13532     reproducibly identical object files.
13533
13534     The STRING can either be a number (decimal, octal or hex) or an
13535     arbitrary string (in which case it's converted to a number by
13536     computing CRC32).
13537
13538     The STRING should be different for every file you compile.
13539
13540'-save-temps'
13541'-save-temps=cwd'
13542     Store the usual "temporary" intermediate files permanently; place
13543     them in the current directory and name them based on the source
13544     file.  Thus, compiling 'foo.c' with '-c -save-temps' produces files
13545     'foo.i' and 'foo.s', as well as 'foo.o'.  This creates a
13546     preprocessed 'foo.i' output file even though the compiler now
13547     normally uses an integrated preprocessor.
13548
13549     When used in combination with the '-x' command-line option,
13550     '-save-temps' is sensible enough to avoid over writing an input
13551     source file with the same extension as an intermediate file.  The
13552     corresponding intermediate file may be obtained by renaming the
13553     source file before using '-save-temps'.
13554
13555     If you invoke GCC in parallel, compiling several different source
13556     files that share a common base name in different subdirectories or
13557     the same source file compiled for multiple output destinations, it
13558     is likely that the different parallel compilers will interfere with
13559     each other, and overwrite the temporary files.  For instance:
13560
13561          gcc -save-temps -o outdir1/foo.o indir1/foo.c&
13562          gcc -save-temps -o outdir2/foo.o indir2/foo.c&
13563
13564     may result in 'foo.i' and 'foo.o' being written to simultaneously
13565     by both compilers.
13566
13567'-save-temps=obj'
13568     Store the usual "temporary" intermediate files permanently.  If the
13569     '-o' option is used, the temporary files are based on the object
13570     file.  If the '-o' option is not used, the '-save-temps=obj' switch
13571     behaves like '-save-temps'.
13572
13573     For example:
13574
13575          gcc -save-temps=obj -c foo.c
13576          gcc -save-temps=obj -c bar.c -o dir/xbar.o
13577          gcc -save-temps=obj foobar.c -o dir2/yfoobar
13578
13579     creates 'foo.i', 'foo.s', 'dir/xbar.i', 'dir/xbar.s',
13580     'dir2/yfoobar.i', 'dir2/yfoobar.s', and 'dir2/yfoobar.o'.
13581
13582'-time[=FILE]'
13583     Report the CPU time taken by each subprocess in the compilation
13584     sequence.  For C source files, this is the compiler proper and
13585     assembler (plus the linker if linking is done).
13586
13587     Without the specification of an output file, the output looks like
13588     this:
13589
13590          # cc1 0.12 0.01
13591          # as 0.00 0.01
13592
13593     The first number on each line is the "user time", that is time
13594     spent executing the program itself.  The second number is "system
13595     time", time spent executing operating system routines on behalf of
13596     the program.  Both numbers are in seconds.
13597
13598     With the specification of an output file, the output is appended to
13599     the named file, and it looks like this:
13600
13601          0.12 0.01 cc1 OPTIONS
13602          0.00 0.01 as OPTIONS
13603
13604     The "user time" and the "system time" are moved before the program
13605     name, and the options passed to the program are displayed, so that
13606     one can later tell what file was being compiled, and with which
13607     options.
13608
13609'-fdump-final-insns[=FILE]'
13610     Dump the final internal representation (RTL) to FILE.  If the
13611     optional argument is omitted (or if FILE is '.'), the name of the
13612     dump file is determined by appending '.gkd' to the compilation
13613     output file name.
13614
13615'-fcompare-debug[=OPTS]'
13616     If no error occurs during compilation, run the compiler a second
13617     time, adding OPTS and '-fcompare-debug-second' to the arguments
13618     passed to the second compilation.  Dump the final internal
13619     representation in both compilations, and print an error if they
13620     differ.
13621
13622     If the equal sign is omitted, the default '-gtoggle' is used.
13623
13624     The environment variable 'GCC_COMPARE_DEBUG', if defined, non-empty
13625     and nonzero, implicitly enables '-fcompare-debug'.  If
13626     'GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
13627     then it is used for OPTS, otherwise the default '-gtoggle' is used.
13628
13629     '-fcompare-debug=', with the equal sign but without OPTS, is
13630     equivalent to '-fno-compare-debug', which disables the dumping of
13631     the final representation and the second compilation, preventing
13632     even 'GCC_COMPARE_DEBUG' from taking effect.
13633
13634     To verify full coverage during '-fcompare-debug' testing, set
13635     'GCC_COMPARE_DEBUG' to say '-fcompare-debug-not-overridden', which
13636     GCC rejects as an invalid option in any actual compilation (rather
13637     than preprocessing, assembly or linking).  To get just a warning,
13638     setting 'GCC_COMPARE_DEBUG' to '-w%n-fcompare-debug not overridden'
13639     will do.
13640
13641'-fcompare-debug-second'
13642     This option is implicitly passed to the compiler for the second
13643     compilation requested by '-fcompare-debug', along with options to
13644     silence warnings, and omitting other options that would cause the
13645     compiler to produce output to files or to standard output as a side
13646     effect.  Dump files and preserved temporary files are renamed so as
13647     to contain the '.gk' additional extension during the second
13648     compilation, to avoid overwriting those generated by the first.
13649
13650     When this option is passed to the compiler driver, it causes the
13651     _first_ compilation to be skipped, which makes it useful for little
13652     other than debugging the compiler proper.
13653
13654'-gtoggle'
13655     Turn off generation of debug info, if leaving out this option
13656     generates it, or turn it on at level 2 otherwise.  The position of
13657     this argument in the command line does not matter; it takes effect
13658     after all other options are processed, and it does so only once, no
13659     matter how many times it is given.  This is mainly intended to be
13660     used with '-fcompare-debug'.
13661
13662'-fvar-tracking-assignments-toggle'
13663     Toggle '-fvar-tracking-assignments', in the same way that
13664     '-gtoggle' toggles '-g'.
13665
13666'-Q'
13667     Makes the compiler print out each function name as it is compiled,
13668     and print some statistics about each pass when it finishes.
13669
13670'-ftime-report'
13671     Makes the compiler print some statistics about the time consumed by
13672     each pass when it finishes.
13673
13674'-ftime-report-details'
13675     Record the time consumed by infrastructure parts separately for
13676     each pass.
13677
13678'-fira-verbose=N'
13679     Control the verbosity of the dump file for the integrated register
13680     allocator.  The default value is 5.  If the value N is greater or
13681     equal to 10, the dump output is sent to stderr using the same
13682     format as N minus 10.
13683
13684'-flto-report'
13685     Prints a report with internal details on the workings of the
13686     link-time optimizer.  The contents of this report vary from version
13687     to version.  It is meant to be useful to GCC developers when
13688     processing object files in LTO mode (via '-flto').
13689
13690     Disabled by default.
13691
13692'-flto-report-wpa'
13693     Like '-flto-report', but only print for the WPA phase of Link Time
13694     Optimization.
13695
13696'-fmem-report'
13697     Makes the compiler print some statistics about permanent memory
13698     allocation when it finishes.
13699
13700'-fmem-report-wpa'
13701     Makes the compiler print some statistics about permanent memory
13702     allocation for the WPA phase only.
13703
13704'-fpre-ipa-mem-report'
13705'-fpost-ipa-mem-report'
13706     Makes the compiler print some statistics about permanent memory
13707     allocation before or after interprocedural optimization.
13708
13709'-fprofile-report'
13710     Makes the compiler print some statistics about consistency of the
13711     (estimated) profile and effect of individual passes.
13712
13713'-fstack-usage'
13714     Makes the compiler output stack usage information for the program,
13715     on a per-function basis.  The filename for the dump is made by
13716     appending '.su' to the AUXNAME.  AUXNAME is generated from the name
13717     of the output file, if explicitly specified and it is not an
13718     executable, otherwise it is the basename of the source file.  An
13719     entry is made up of three fields:
13720
13721        * The name of the function.
13722        * A number of bytes.
13723        * One or more qualifiers: 'static', 'dynamic', 'bounded'.
13724
13725     The qualifier 'static' means that the function manipulates the
13726     stack statically: a fixed number of bytes are allocated for the
13727     frame on function entry and released on function exit; no stack
13728     adjustments are otherwise made in the function.  The second field
13729     is this fixed number of bytes.
13730
13731     The qualifier 'dynamic' means that the function manipulates the
13732     stack dynamically: in addition to the static allocation described
13733     above, stack adjustments are made in the body of the function, for
13734     example to push/pop arguments around function calls.  If the
13735     qualifier 'bounded' is also present, the amount of these
13736     adjustments is bounded at compile time and the second field is an
13737     upper bound of the total amount of stack used by the function.  If
13738     it is not present, the amount of these adjustments is not bounded
13739     at compile time and the second field only represents the bounded
13740     part.
13741
13742'-fstats'
13743     Emit statistics about front-end processing at the end of the
13744     compilation.  This option is supported only by the C++ front end,
13745     and the information is generally only useful to the G++ development
13746     team.
13747
13748'-fdbg-cnt-list'
13749     Print the name and the counter upper bound for all debug counters.
13750
13751'-fdbg-cnt=COUNTER-VALUE-LIST'
13752     Set the internal debug counter upper bound.  COUNTER-VALUE-LIST is
13753     a comma-separated list of NAME:VALUE pairs which sets the upper
13754     bound of each debug counter NAME to VALUE.  All debug counters have
13755     the initial upper bound of 'UINT_MAX'; thus 'dbg_cnt' returns true
13756     always unless the upper bound is set by this option.  For example,
13757     with '-fdbg-cnt=dce:10,tail_call:0', 'dbg_cnt(dce)' returns true
13758     only for first 10 invocations.
13759
13760'-print-file-name=LIBRARY'
13761     Print the full absolute name of the library file LIBRARY that would
13762     be used when linking--and don't do anything else.  With this
13763     option, GCC does not compile or link anything; it just prints the
13764     file name.
13765
13766'-print-multi-directory'
13767     Print the directory name corresponding to the multilib selected by
13768     any other switches present in the command line.  This directory is
13769     supposed to exist in 'GCC_EXEC_PREFIX'.
13770
13771'-print-multi-lib'
13772     Print the mapping from multilib directory names to compiler
13773     switches that enable them.  The directory name is separated from
13774     the switches by ';', and each switch starts with an '@' instead of
13775     the '-', without spaces between multiple switches.  This is
13776     supposed to ease shell processing.
13777
13778'-print-multi-os-directory'
13779     Print the path to OS libraries for the selected multilib, relative
13780     to some 'lib' subdirectory.  If OS libraries are present in the
13781     'lib' subdirectory and no multilibs are used, this is usually just
13782     '.', if OS libraries are present in 'libSUFFIX' sibling directories
13783     this prints e.g. '../lib64', '../lib' or '../lib32', or if OS
13784     libraries are present in 'lib/SUBDIR' subdirectories it prints e.g.
13785     'amd64', 'sparcv9' or 'ev6'.
13786
13787'-print-multiarch'
13788     Print the path to OS libraries for the selected multiarch, relative
13789     to some 'lib' subdirectory.
13790
13791'-print-prog-name=PROGRAM'
13792     Like '-print-file-name', but searches for a program such as 'cpp'.
13793
13794'-print-libgcc-file-name'
13795     Same as '-print-file-name=libgcc.a'.
13796
13797     This is useful when you use '-nostdlib' or '-nodefaultlibs' but you
13798     do want to link with 'libgcc.a'.  You can do:
13799
13800          gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
13801
13802'-print-search-dirs'
13803     Print the name of the configured installation directory and a list
13804     of program and library directories 'gcc' searches--and don't do
13805     anything else.
13806
13807     This is useful when 'gcc' prints the error message 'installation
13808     problem, cannot exec cpp0: No such file or directory'.  To resolve
13809     this you either need to put 'cpp0' and the other compiler
13810     components where 'gcc' expects to find them, or you can set the
13811     environment variable 'GCC_EXEC_PREFIX' to the directory where you
13812     installed them.  Don't forget the trailing '/'.  *Note Environment
13813     Variables::.
13814
13815'-print-sysroot'
13816     Print the target sysroot directory that is used during compilation.
13817     This is the target sysroot specified either at configure time or
13818     using the '--sysroot' option, possibly with an extra suffix that
13819     depends on compilation options.  If no target sysroot is specified,
13820     the option prints nothing.
13821
13822'-print-sysroot-headers-suffix'
13823     Print the suffix added to the target sysroot when searching for
13824     headers, or give an error if the compiler is not configured with
13825     such a suffix--and don't do anything else.
13826
13827'-dumpmachine'
13828     Print the compiler's target machine (for example,
13829     'i686-pc-linux-gnu')--and don't do anything else.
13830
13831'-dumpversion'
13832     Print the compiler version (for example, '3.0', '6.3.0' or
13833     '7')--and don't do anything else.  This is the compiler version
13834     used in filesystem paths, specs, can be depending on how the
13835     compiler has been configured just a single number (major version),
13836     two numbers separated by dot (major and minor version) or three
13837     numbers separated by dots (major, minor and patchlevel version).
13838
13839'-dumpfullversion'
13840     Print the full compiler version, always 3 numbers separated by
13841     dots, major, minor and patchlevel version.
13842
13843'-dumpspecs'
13844     Print the compiler's built-in specs--and don't do anything else.
13845     (This is used when GCC itself is being built.)  *Note Spec Files::.
13846
13847
13848File: gcc.info,  Node: Submodel Options,  Next: Spec Files,  Prev: Developer Options,  Up: Invoking GCC
13849
138503.18 Machine-Dependent Options
13851==============================
13852
13853Each target machine supported by GCC can have its own options--for
13854example, to allow you to compile for a particular processor variant or
13855ABI, or to control optimizations specific to that machine.  By
13856convention, the names of machine-specific options start with '-m'.
13857
13858 Some configurations of the compiler also support additional
13859target-specific options, usually for compatibility with other compilers
13860on the same platform.
13861
13862* Menu:
13863
13864* AArch64 Options::
13865* Adapteva Epiphany Options::
13866* ARC Options::
13867* ARM Options::
13868* AVR Options::
13869* Blackfin Options::
13870* C6X Options::
13871* CRIS Options::
13872* CR16 Options::
13873* Darwin Options::
13874* DEC Alpha Options::
13875* FR30 Options::
13876* FT32 Options::
13877* FRV Options::
13878* GNU/Linux Options::
13879* H8/300 Options::
13880* HPPA Options::
13881* IA-64 Options::
13882* LM32 Options::
13883* M32C Options::
13884* M32R/D Options::
13885* M680x0 Options::
13886* MCore Options::
13887* MeP Options::
13888* MicroBlaze Options::
13889* MIPS Options::
13890* MMIX Options::
13891* MN10300 Options::
13892* Moxie Options::
13893* MSP430 Options::
13894* NDS32 Options::
13895* Nios II Options::
13896* Nvidia PTX Options::
13897* PDP-11 Options::
13898* picoChip Options::
13899* PowerPC Options::
13900* PowerPC SPE Options::
13901* RISC-V Options::
13902* RL78 Options::
13903* RS/6000 and PowerPC Options::
13904* RX Options::
13905* S/390 and zSeries Options::
13906* Score Options::
13907* SH Options::
13908* Solaris 2 Options::
13909* SPARC Options::
13910* SPU Options::
13911* System V Options::
13912* TILE-Gx Options::
13913* TILEPro Options::
13914* V850 Options::
13915* VAX Options::
13916* Visium Options::
13917* VMS Options::
13918* VxWorks Options::
13919* x86 Options::
13920* x86 Windows Options::
13921* Xstormy16 Options::
13922* Xtensa Options::
13923* zSeries Options::
13924
13925
13926File: gcc.info,  Node: AArch64 Options,  Next: Adapteva Epiphany Options,  Up: Submodel Options
13927
139283.18.1 AArch64 Options
13929----------------------
13930
13931These options are defined for AArch64 implementations:
13932
13933'-mabi=NAME'
13934     Generate code for the specified data model.  Permissible values are
13935     'ilp32' for SysV-like data model where int, long int and pointers
13936     are 32 bits, and 'lp64' for SysV-like data model where int is 32
13937     bits, but long int and pointers are 64 bits.
13938
13939     The default depends on the specific target configuration.  Note
13940     that the LP64 and ILP32 ABIs are not link-compatible; you must
13941     compile your entire program with the same ABI, and link with a
13942     compatible set of libraries.
13943
13944'-mbig-endian'
13945     Generate big-endian code.  This is the default when GCC is
13946     configured for an 'aarch64_be-*-*' target.
13947
13948'-mgeneral-regs-only'
13949     Generate code which uses only the general-purpose registers.  This
13950     will prevent the compiler from using floating-point and Advanced
13951     SIMD registers but will not impose any restrictions on the
13952     assembler.
13953
13954'-mlittle-endian'
13955     Generate little-endian code.  This is the default when GCC is
13956     configured for an 'aarch64-*-*' but not an 'aarch64_be-*-*' target.
13957
13958'-mcmodel=tiny'
13959     Generate code for the tiny code model.  The program and its
13960     statically defined symbols must be within 1MB of each other.
13961     Programs can be statically or dynamically linked.
13962
13963'-mcmodel=small'
13964     Generate code for the small code model.  The program and its
13965     statically defined symbols must be within 4GB of each other.
13966     Programs can be statically or dynamically linked.  This is the
13967     default code model.
13968
13969'-mcmodel=large'
13970     Generate code for the large code model.  This makes no assumptions
13971     about addresses and sizes of sections.  Programs can be statically
13972     linked only.
13973
13974'-mstrict-align'
13975     Avoid generating memory accesses that may not be aligned on a
13976     natural object boundary as described in the architecture
13977     specification.
13978
13979'-momit-leaf-frame-pointer'
13980'-mno-omit-leaf-frame-pointer'
13981     Omit or keep the frame pointer in leaf functions.  The former
13982     behavior is the default.
13983
13984'-mtls-dialect=desc'
13985     Use TLS descriptors as the thread-local storage mechanism for
13986     dynamic accesses of TLS variables.  This is the default.
13987
13988'-mtls-dialect=traditional'
13989     Use traditional TLS as the thread-local storage mechanism for
13990     dynamic accesses of TLS variables.
13991
13992'-mtls-size=SIZE'
13993     Specify bit size of immediate TLS offsets.  Valid values are 12,
13994     24, 32, 48.  This option requires binutils 2.26 or newer.
13995
13996'-mfix-cortex-a53-835769'
13997'-mno-fix-cortex-a53-835769'
13998     Enable or disable the workaround for the ARM Cortex-A53 erratum
13999     number 835769.  This involves inserting a NOP instruction between
14000     memory instructions and 64-bit integer multiply-accumulate
14001     instructions.
14002
14003'-mfix-cortex-a53-843419'
14004'-mno-fix-cortex-a53-843419'
14005     Enable or disable the workaround for the ARM Cortex-A53 erratum
14006     number 843419.  This erratum workaround is made at link time and
14007     this will only pass the corresponding flag to the linker.
14008
14009'-mlow-precision-recip-sqrt'
14010'-mno-low-precision-recip-sqrt'
14011     Enable or disable the reciprocal square root approximation.  This
14012     option only has an effect if '-ffast-math' or
14013     '-funsafe-math-optimizations' is used as well.  Enabling this
14014     reduces precision of reciprocal square root results to about 16
14015     bits for single precision and to 32 bits for double precision.
14016
14017'-mlow-precision-sqrt'
14018'-mno-low-precision-sqrt'
14019     Enable or disable the square root approximation.  This option only
14020     has an effect if '-ffast-math' or '-funsafe-math-optimizations' is
14021     used as well.  Enabling this reduces precision of square root
14022     results to about 16 bits for single precision and to 32 bits for
14023     double precision.  If enabled, it implies
14024     '-mlow-precision-recip-sqrt'.
14025
14026'-mlow-precision-div'
14027'-mno-low-precision-div'
14028     Enable or disable the division approximation.  This option only has
14029     an effect if '-ffast-math' or '-funsafe-math-optimizations' is used
14030     as well.  Enabling this reduces precision of division results to
14031     about 16 bits for single precision and to 32 bits for double
14032     precision.
14033
14034'-march=NAME'
14035     Specify the name of the target architecture and, optionally, one or
14036     more feature modifiers.  This option has the form
14037     '-march=ARCH{+[no]FEATURE}*'.
14038
14039     The permissible values for ARCH are 'armv8-a', 'armv8.1-a',
14040     'armv8.2-a', 'armv8.3-a' or 'armv8.4-a' or NATIVE.
14041
14042     The value 'armv8.4-a' implies 'armv8.3-a' and enables compiler
14043     support for the ARMv8.4-A architecture extensions.
14044
14045     The value 'armv8.3-a' implies 'armv8.2-a' and enables compiler
14046     support for the ARMv8.3-A architecture extensions.
14047
14048     The value 'armv8.2-a' implies 'armv8.1-a' and enables compiler
14049     support for the ARMv8.2-A architecture extensions.
14050
14051     The value 'armv8.1-a' implies 'armv8-a' and enables compiler
14052     support for the ARMv8.1-A architecture extension.  In particular,
14053     it enables the '+crc', '+lse', and '+rdma' features.
14054
14055     The value 'native' is available on native AArch64 GNU/Linux and
14056     causes the compiler to pick the architecture of the host system.
14057     This option has no effect if the compiler is unable to recognize
14058     the architecture of the host system,
14059
14060     The permissible values for FEATURE are listed in the sub-section on
14061     *note '-march' and '-mcpu' Feature Modifiers:
14062     aarch64-feature-modifiers.  Where conflicting feature modifiers are
14063     specified, the right-most feature is used.
14064
14065     GCC uses NAME to determine what kind of instructions it can emit
14066     when generating assembly code.  If '-march' is specified without
14067     either of '-mtune' or '-mcpu' also being specified, the code is
14068     tuned to perform well across a range of target processors
14069     implementing the target architecture.
14070
14071'-mtune=NAME'
14072     Specify the name of the target processor for which GCC should tune
14073     the performance of the code.  Permissible values for this option
14074     are: 'generic', 'cortex-a35', 'cortex-a53', 'cortex-a55',
14075     'cortex-a57', 'cortex-a72', 'cortex-a73', 'cortex-a75',
14076     'cortex-a76', 'ares', 'neoverse-n1' 'exynos-m1', 'falkor',
14077     'qdf24xx', 'saphira', 'xgene1', 'vulcan', 'thunderx',
14078     'thunderxt88', 'thunderxt88p1', 'thunderxt81', 'thunderxt83',
14079     'thunderx2t99', 'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
14080     'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53',
14081     'cortex-a75.cortex-a55', 'native'.
14082
14083     The values 'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
14084     'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53',
14085     'cortex-a75.cortex-a55' specify that GCC should tune for a
14086     big.LITTLE system.
14087
14088     Additionally on native AArch64 GNU/Linux systems the value 'native'
14089     tunes performance to the host system.  This option has no effect if
14090     the compiler is unable to recognize the processor of the host
14091     system.
14092
14093     Where none of '-mtune=', '-mcpu=' or '-march=' are specified, the
14094     code is tuned to perform well across a range of target processors.
14095
14096     This option cannot be suffixed by feature modifiers.
14097
14098'-mcpu=NAME'
14099     Specify the name of the target processor, optionally suffixed by
14100     one or more feature modifiers.  This option has the form
14101     '-mcpu=CPU{+[no]FEATURE}*', where the permissible values for CPU
14102     are the same as those available for '-mtune'.  The permissible
14103     values for FEATURE are documented in the sub-section on *note
14104     '-march' and '-mcpu' Feature Modifiers: aarch64-feature-modifiers.
14105     Where conflicting feature modifiers are specified, the right-most
14106     feature is used.
14107
14108     GCC uses NAME to determine what kind of instructions it can emit
14109     when generating assembly code (as if by '-march') and to determine
14110     the target processor for which to tune for performance (as if by
14111     '-mtune').  Where this option is used in conjunction with '-march'
14112     or '-mtune', those options take precedence over the appropriate
14113     part of this option.
14114
14115'-moverride=STRING'
14116     Override tuning decisions made by the back-end in response to a
14117     '-mtune=' switch.  The syntax, semantics, and accepted values for
14118     STRING in this option are not guaranteed to be consistent across
14119     releases.
14120
14121     This option is only intended to be useful when developing GCC.
14122
14123'-mverbose-cost-dump'
14124     Enable verbose cost model dumping in the debug dump files.  This
14125     option is provided for use in debugging the compiler.
14126
14127'-mpc-relative-literal-loads'
14128'-mno-pc-relative-literal-loads'
14129     Enable or disable PC-relative literal loads.  With this option
14130     literal pools are accessed using a single instruction and emitted
14131     after each function.  This limits the maximum size of functions to
14132     1MB. This is enabled by default for '-mcmodel=tiny'.
14133
14134'-msign-return-address=SCOPE'
14135     Select the function scope on which return address signing will be
14136     applied.  Permissible values are 'none', which disables return
14137     address signing, 'non-leaf', which enables pointer signing for
14138     functions which are not leaf functions, and 'all', which enables
14139     pointer signing for all functions.  The default value is 'none'.
14140
14141'-msve-vector-bits=BITS'
14142     Specify the number of bits in an SVE vector register.  This option
14143     only has an effect when SVE is enabled.
14144
14145     GCC supports two forms of SVE code generation: "vector-length
14146     agnostic" output that works with any size of vector register and
14147     "vector-length specific" output that allows GCC to make assumptions
14148     about the vector length when it is useful for optimization reasons.
14149     The possible values of 'bits' are: 'scalable', '128', '256', '512',
14150     '1024' and '2048'.  Specifying 'scalable' selects vector-length
14151     agnostic output.  At present '-msve-vector-bits=128' also generates
14152     vector-length agnostic output.  All other values generate
14153     vector-length specific code.  The behavior of these values may
14154     change in future releases and no value except 'scalable' should be
14155     relied on for producing code that is portable across different
14156     hardware SVE vector lengths.
14157
14158     The default is '-msve-vector-bits=scalable', which produces
14159     vector-length agnostic code.
14160
141613.18.1.1 '-march' and '-mcpu' Feature Modifiers
14162...............................................
14163
14164Feature modifiers used with '-march' and '-mcpu' can be any of the
14165following and their inverses 'noFEATURE':
14166
14167'crc'
14168     Enable CRC extension.  This is on by default for
14169     '-march=armv8.1-a'.
14170'crypto'
14171     Enable Crypto extension.  This also enables Advanced SIMD and
14172     floating-point instructions.
14173'fp'
14174     Enable floating-point instructions.  This is on by default for all
14175     possible values for options '-march' and '-mcpu'.
14176'simd'
14177     Enable Advanced SIMD instructions.  This also enables
14178     floating-point instructions.  This is on by default for all
14179     possible values for options '-march' and '-mcpu'.
14180'sve'
14181     Enable Scalable Vector Extension instructions.  This also enables
14182     Advanced SIMD and floating-point instructions.
14183'lse'
14184     Enable Large System Extension instructions.  This is on by default
14185     for '-march=armv8.1-a'.
14186'rdma'
14187     Enable Round Double Multiply Accumulate instructions.  This is on
14188     by default for '-march=armv8.1-a'.
14189'fp16'
14190     Enable FP16 extension.  This also enables floating-point
14191     instructions.
14192'fp16fml'
14193     Enable FP16 fmla extension.  This also enables FP16 extensions and
14194     floating-point instructions.  This option is enabled by default for
14195     '-march=armv8.4-a'.  Use of this option with architectures prior to
14196     Armv8.2-A is not supported.
14197
14198'rcpc'
14199     Enable the RcPc extension.  This does not change code generation
14200     from GCC, but is passed on to the assembler, enabling inline asm
14201     statements to use instructions from the RcPc extension.
14202'dotprod'
14203     Enable the Dot Product extension.  This also enables Advanced SIMD
14204     instructions.
14205'aes'
14206     Enable the Armv8-a aes and pmull crypto extension.  This also
14207     enables Advanced SIMD instructions.
14208'sha2'
14209     Enable the Armv8-a sha2 crypto extension.  This also enables
14210     Advanced SIMD instructions.
14211'sha3'
14212     Enable the sha512 and sha3 crypto extension.  This also enables
14213     Advanced SIMD instructions.  Use of this option with architectures
14214     prior to Armv8.2-A is not supported.
14215'sm4'
14216     Enable the sm3 and sm4 crypto extension.  This also enables
14217     Advanced SIMD instructions.  Use of this option with architectures
14218     prior to Armv8.2-A is not supported.
14219
14220 Feature 'crypto' implies 'aes', 'sha2', and 'simd', which implies 'fp'.
14221Conversely, 'nofp' implies 'nosimd', which implies 'nocrypto', 'noaes'
14222and 'nosha2'.
14223
14224
14225File: gcc.info,  Node: Adapteva Epiphany Options,  Next: ARC Options,  Prev: AArch64 Options,  Up: Submodel Options
14226
142273.18.2 Adapteva Epiphany Options
14228--------------------------------
14229
14230These '-m' options are defined for Adapteva Epiphany:
14231
14232'-mhalf-reg-file'
14233     Don't allocate any register in the range 'r32'...'r63'.  That
14234     allows code to run on hardware variants that lack these registers.
14235
14236'-mprefer-short-insn-regs'
14237     Preferentially allocate registers that allow short instruction
14238     generation.  This can result in increased instruction count, so
14239     this may either reduce or increase overall code size.
14240
14241'-mbranch-cost=NUM'
14242     Set the cost of branches to roughly NUM "simple" instructions.
14243     This cost is only a heuristic and is not guaranteed to produce
14244     consistent results across releases.
14245
14246'-mcmove'
14247     Enable the generation of conditional moves.
14248
14249'-mnops=NUM'
14250     Emit NUM NOPs before every other generated instruction.
14251
14252'-mno-soft-cmpsf'
14253     For single-precision floating-point comparisons, emit an 'fsub'
14254     instruction and test the flags.  This is faster than a software
14255     comparison, but can get incorrect results in the presence of NaNs,
14256     or when two different small numbers are compared such that their
14257     difference is calculated as zero.  The default is '-msoft-cmpsf',
14258     which uses slower, but IEEE-compliant, software comparisons.
14259
14260'-mstack-offset=NUM'
14261     Set the offset between the top of the stack and the stack pointer.
14262     E.g., a value of 8 means that the eight bytes in the range
14263     'sp+0...sp+7' can be used by leaf functions without stack
14264     allocation.  Values other than '8' or '16' are untested and
14265     unlikely to work.  Note also that this option changes the ABI;
14266     compiling a program with a different stack offset than the
14267     libraries have been compiled with generally does not work.  This
14268     option can be useful if you want to evaluate if a different stack
14269     offset would give you better code, but to actually use a different
14270     stack offset to build working programs, it is recommended to
14271     configure the toolchain with the appropriate
14272     '--with-stack-offset=NUM' option.
14273
14274'-mno-round-nearest'
14275     Make the scheduler assume that the rounding mode has been set to
14276     truncating.  The default is '-mround-nearest'.
14277
14278'-mlong-calls'
14279     If not otherwise specified by an attribute, assume all calls might
14280     be beyond the offset range of the 'b' / 'bl' instructions, and
14281     therefore load the function address into a register before
14282     performing a (otherwise direct) call.  This is the default.
14283
14284'-mshort-calls'
14285     If not otherwise specified by an attribute, assume all direct calls
14286     are in the range of the 'b' / 'bl' instructions, so use these
14287     instructions for direct calls.  The default is '-mlong-calls'.
14288
14289'-msmall16'
14290     Assume addresses can be loaded as 16-bit unsigned values.  This
14291     does not apply to function addresses for which '-mlong-calls'
14292     semantics are in effect.
14293
14294'-mfp-mode=MODE'
14295     Set the prevailing mode of the floating-point unit.  This
14296     determines the floating-point mode that is provided and expected at
14297     function call and return time.  Making this mode match the mode you
14298     predominantly need at function start can make your programs smaller
14299     and faster by avoiding unnecessary mode switches.
14300
14301     MODE can be set to one the following values:
14302
14303     'caller'
14304          Any mode at function entry is valid, and retained or restored
14305          when the function returns, and when it calls other functions.
14306          This mode is useful for compiling libraries or other
14307          compilation units you might want to incorporate into different
14308          programs with different prevailing FPU modes, and the
14309          convenience of being able to use a single object file
14310          outweighs the size and speed overhead for any extra mode
14311          switching that might be needed, compared with what would be
14312          needed with a more specific choice of prevailing FPU mode.
14313
14314     'truncate'
14315          This is the mode used for floating-point calculations with
14316          truncating (i.e. round towards zero) rounding mode.  That
14317          includes conversion from floating point to integer.
14318
14319     'round-nearest'
14320          This is the mode used for floating-point calculations with
14321          round-to-nearest-or-even rounding mode.
14322
14323     'int'
14324          This is the mode used to perform integer calculations in the
14325          FPU, e.g. integer multiply, or integer
14326          multiply-and-accumulate.
14327
14328     The default is '-mfp-mode=caller'
14329
14330'-mnosplit-lohi'
14331'-mno-postinc'
14332'-mno-postmodify'
14333     Code generation tweaks that disable, respectively, splitting of
14334     32-bit loads, generation of post-increment addresses, and
14335     generation of post-modify addresses.  The defaults are
14336     'msplit-lohi', '-mpost-inc', and '-mpost-modify'.
14337
14338'-mnovect-double'
14339     Change the preferred SIMD mode to SImode.  The default is
14340     '-mvect-double', which uses DImode as preferred SIMD mode.
14341
14342'-max-vect-align=NUM'
14343     The maximum alignment for SIMD vector mode types.  NUM may be 4 or
14344     8.  The default is 8.  Note that this is an ABI change, even though
14345     many library function interfaces are unaffected if they don't use
14346     SIMD vector modes in places that affect size and/or alignment of
14347     relevant types.
14348
14349'-msplit-vecmove-early'
14350     Split vector moves into single word moves before reload.  In theory
14351     this can give better register allocation, but so far the reverse
14352     seems to be generally the case.
14353
14354'-m1reg-REG'
14355     Specify a register to hold the constant -1, which makes loading
14356     small negative constants and certain bitmasks faster.  Allowable
14357     values for REG are 'r43' and 'r63', which specify use of that
14358     register as a fixed register, and 'none', which means that no
14359     register is used for this purpose.  The default is '-m1reg-none'.
14360
14361
14362File: gcc.info,  Node: ARC Options,  Next: ARM Options,  Prev: Adapteva Epiphany Options,  Up: Submodel Options
14363
143643.18.3 ARC Options
14365------------------
14366
14367The following options control the architecture variant for which code is
14368being compiled:
14369
14370'-mbarrel-shifter'
14371     Generate instructions supported by barrel shifter.  This is the
14372     default unless '-mcpu=ARC601' or '-mcpu=ARCEM' is in effect.
14373
14374'-mjli-always'
14375     Force to call a function using jli_s instruction.  This option is
14376     valid only for ARCv2 architecture.
14377
14378'-mcpu=CPU'
14379     Set architecture type, register usage, and instruction scheduling
14380     parameters for CPU.  There are also shortcut alias options
14381     available for backward compatibility and convenience.  Supported
14382     values for CPU are
14383
14384     'arc600'
14385          Compile for ARC600.  Aliases: '-mA6', '-mARC600'.
14386
14387     'arc601'
14388          Compile for ARC601.  Alias: '-mARC601'.
14389
14390     'arc700'
14391          Compile for ARC700.  Aliases: '-mA7', '-mARC700'.  This is the
14392          default when configured with '--with-cpu=arc700'.
14393
14394     'arcem'
14395          Compile for ARC EM.
14396
14397     'archs'
14398          Compile for ARC HS.
14399
14400     'em'
14401          Compile for ARC EM CPU with no hardware extensions.
14402
14403     'em4'
14404          Compile for ARC EM4 CPU.
14405
14406     'em4_dmips'
14407          Compile for ARC EM4 DMIPS CPU.
14408
14409     'em4_fpus'
14410          Compile for ARC EM4 DMIPS CPU with the single-precision
14411          floating-point extension.
14412
14413     'em4_fpuda'
14414          Compile for ARC EM4 DMIPS CPU with single-precision
14415          floating-point and double assist instructions.
14416
14417     'hs'
14418          Compile for ARC HS CPU with no hardware extensions except the
14419          atomic instructions.
14420
14421     'hs34'
14422          Compile for ARC HS34 CPU.
14423
14424     'hs38'
14425          Compile for ARC HS38 CPU.
14426
14427     'hs38_linux'
14428          Compile for ARC HS38 CPU with all hardware extensions on.
14429
14430     'arc600_norm'
14431          Compile for ARC 600 CPU with 'norm' instructions enabled.
14432
14433     'arc600_mul32x16'
14434          Compile for ARC 600 CPU with 'norm' and 32x16-bit multiply
14435          instructions enabled.
14436
14437     'arc600_mul64'
14438          Compile for ARC 600 CPU with 'norm' and 'mul64'-family
14439          instructions enabled.
14440
14441     'arc601_norm'
14442          Compile for ARC 601 CPU with 'norm' instructions enabled.
14443
14444     'arc601_mul32x16'
14445          Compile for ARC 601 CPU with 'norm' and 32x16-bit multiply
14446          instructions enabled.
14447
14448     'arc601_mul64'
14449          Compile for ARC 601 CPU with 'norm' and 'mul64'-family
14450          instructions enabled.
14451
14452     'nps400'
14453          Compile for ARC 700 on NPS400 chip.
14454
14455     'em_mini'
14456          Compile for ARC EM minimalist configuration featuring reduced
14457          register set.
14458
14459'-mdpfp'
14460'-mdpfp-compact'
14461     Generate double-precision FPX instructions, tuned for the compact
14462     implementation.
14463
14464'-mdpfp-fast'
14465     Generate double-precision FPX instructions, tuned for the fast
14466     implementation.
14467
14468'-mno-dpfp-lrsr'
14469     Disable 'lr' and 'sr' instructions from using FPX extension aux
14470     registers.
14471
14472'-mea'
14473     Generate extended arithmetic instructions.  Currently only 'divaw',
14474     'adds', 'subs', and 'sat16' are supported.  This is always enabled
14475     for '-mcpu=ARC700'.
14476
14477'-mno-mpy'
14478     Do not generate 'mpy'-family instructions for ARC700.  This option
14479     is deprecated.
14480
14481'-mmul32x16'
14482     Generate 32x16-bit multiply and multiply-accumulate instructions.
14483
14484'-mmul64'
14485     Generate 'mul64' and 'mulu64' instructions.  Only valid for
14486     '-mcpu=ARC600'.
14487
14488'-mnorm'
14489     Generate 'norm' instructions.  This is the default if
14490     '-mcpu=ARC700' is in effect.
14491
14492'-mspfp'
14493'-mspfp-compact'
14494     Generate single-precision FPX instructions, tuned for the compact
14495     implementation.
14496
14497'-mspfp-fast'
14498     Generate single-precision FPX instructions, tuned for the fast
14499     implementation.
14500
14501'-msimd'
14502     Enable generation of ARC SIMD instructions via target-specific
14503     builtins.  Only valid for '-mcpu=ARC700'.
14504
14505'-msoft-float'
14506     This option ignored; it is provided for compatibility purposes
14507     only.  Software floating-point code is emitted by default, and this
14508     default can overridden by FPX options; '-mspfp', '-mspfp-compact',
14509     or '-mspfp-fast' for single precision, and '-mdpfp',
14510     '-mdpfp-compact', or '-mdpfp-fast' for double precision.
14511
14512'-mswap'
14513     Generate 'swap' instructions.
14514
14515'-matomic'
14516     This enables use of the locked load/store conditional extension to
14517     implement atomic memory built-in functions.  Not available for ARC
14518     6xx or ARC EM cores.
14519
14520'-mdiv-rem'
14521     Enable 'div' and 'rem' instructions for ARCv2 cores.
14522
14523'-mcode-density'
14524     Enable code density instructions for ARC EM. This option is on by
14525     default for ARC HS.
14526
14527'-mll64'
14528     Enable double load/store operations for ARC HS cores.
14529
14530'-mtp-regno=REGNO'
14531     Specify thread pointer register number.
14532
14533'-mmpy-option=MULTO'
14534     Compile ARCv2 code with a multiplier design option.  You can
14535     specify the option using either a string or numeric value for
14536     MULTO.  'wlh1' is the default value.  The recognized values are:
14537
14538     '0'
14539     'none'
14540          No multiplier available.
14541
14542     '1'
14543     'w'
14544          16x16 multiplier, fully pipelined.  The following instructions
14545          are enabled: 'mpyw' and 'mpyuw'.
14546
14547     '2'
14548     'wlh1'
14549          32x32 multiplier, fully pipelined (1 stage).  The following
14550          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
14551          'mpymu', and 'mpy_s'.
14552
14553     '3'
14554     'wlh2'
14555          32x32 multiplier, fully pipelined (2 stages).  The following
14556          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
14557          'mpymu', and 'mpy_s'.
14558
14559     '4'
14560     'wlh3'
14561          Two 16x16 multipliers, blocking, sequential.  The following
14562          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
14563          'mpymu', and 'mpy_s'.
14564
14565     '5'
14566     'wlh4'
14567          One 16x16 multiplier, blocking, sequential.  The following
14568          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
14569          'mpymu', and 'mpy_s'.
14570
14571     '6'
14572     'wlh5'
14573          One 32x4 multiplier, blocking, sequential.  The following
14574          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
14575          'mpymu', and 'mpy_s'.
14576
14577     '7'
14578     'plus_dmpy'
14579          ARC HS SIMD support.
14580
14581     '8'
14582     'plus_macd'
14583          ARC HS SIMD support.
14584
14585     '9'
14586     'plus_qmacw'
14587          ARC HS SIMD support.
14588
14589     This option is only available for ARCv2 cores.
14590
14591'-mfpu=FPU'
14592     Enables support for specific floating-point hardware extensions for
14593     ARCv2 cores.  Supported values for FPU are:
14594
14595     'fpus'
14596          Enables support for single-precision floating-point hardware
14597          extensions.
14598
14599     'fpud'
14600          Enables support for double-precision floating-point hardware
14601          extensions.  The single-precision floating-point extension is
14602          also enabled.  Not available for ARC EM.
14603
14604     'fpuda'
14605          Enables support for double-precision floating-point hardware
14606          extensions using double-precision assist instructions.  The
14607          single-precision floating-point extension is also enabled.
14608          This option is only available for ARC EM.
14609
14610     'fpuda_div'
14611          Enables support for double-precision floating-point hardware
14612          extensions using double-precision assist instructions.  The
14613          single-precision floating-point, square-root, and divide
14614          extensions are also enabled.  This option is only available
14615          for ARC EM.
14616
14617     'fpuda_fma'
14618          Enables support for double-precision floating-point hardware
14619          extensions using double-precision assist instructions.  The
14620          single-precision floating-point and fused multiply and add
14621          hardware extensions are also enabled.  This option is only
14622          available for ARC EM.
14623
14624     'fpuda_all'
14625          Enables support for double-precision floating-point hardware
14626          extensions using double-precision assist instructions.  All
14627          single-precision floating-point hardware extensions are also
14628          enabled.  This option is only available for ARC EM.
14629
14630     'fpus_div'
14631          Enables support for single-precision floating-point,
14632          square-root and divide hardware extensions.
14633
14634     'fpud_div'
14635          Enables support for double-precision floating-point,
14636          square-root and divide hardware extensions.  This option
14637          includes option 'fpus_div'.  Not available for ARC EM.
14638
14639     'fpus_fma'
14640          Enables support for single-precision floating-point and fused
14641          multiply and add hardware extensions.
14642
14643     'fpud_fma'
14644          Enables support for double-precision floating-point and fused
14645          multiply and add hardware extensions.  This option includes
14646          option 'fpus_fma'.  Not available for ARC EM.
14647
14648     'fpus_all'
14649          Enables support for all single-precision floating-point
14650          hardware extensions.
14651
14652     'fpud_all'
14653          Enables support for all single- and double-precision
14654          floating-point hardware extensions.  Not available for ARC EM.
14655
14656'-mirq-ctrl-saved=REGISTER-RANGE, BLINK, LP_COUNT'
14657     Specifies general-purposes registers that the processor
14658     automatically saves/restores on interrupt entry and exit.
14659     REGISTER-RANGE is specified as two registers separated by a dash.
14660     The register range always starts with 'r0', the upper limit is 'fp'
14661     register.  BLINK and LP_COUNT are optional.  This option is only
14662     valid for ARC EM and ARC HS cores.
14663
14664'-mrgf-banked-regs=NUMBER'
14665     Specifies the number of registers replicated in second register
14666     bank on entry to fast interrupt.  Fast interrupts are interrupts
14667     with the highest priority level P0.  These interrupts save only PC
14668     and STATUS32 registers to avoid memory transactions during
14669     interrupt entry and exit sequences.  Use this option when you are
14670     using fast interrupts in an ARC V2 family processor.  Permitted
14671     values are 4, 8, 16, and 32.
14672
14673'-mlpc-width=WIDTH'
14674     Specify the width of the 'lp_count' register.  Valid values for
14675     WIDTH are 8, 16, 20, 24, 28 and 32 bits.  The default width is
14676     fixed to 32 bits.  If the width is less than 32, the compiler does
14677     not attempt to transform loops in your program to use the
14678     zero-delay loop mechanism unless it is known that the 'lp_count'
14679     register can hold the required loop-counter value.  Depending on
14680     the width specified, the compiler and run-time library might
14681     continue to use the loop mechanism for various needs.  This option
14682     defines macro '__ARC_LPC_WIDTH__' with the value of WIDTH.
14683
14684'-mrf16'
14685     This option instructs the compiler to generate code for a 16-entry
14686     register file.  This option defines the '__ARC_RF16__' preprocessor
14687     macro.
14688
14689 The following options are passed through to the assembler, and also
14690define preprocessor macro symbols.
14691
14692'-mdsp-packa'
14693     Passed down to the assembler to enable the DSP Pack A extensions.
14694     Also sets the preprocessor symbol '__Xdsp_packa'.  This option is
14695     deprecated.
14696
14697'-mdvbf'
14698     Passed down to the assembler to enable the dual Viterbi butterfly
14699     extension.  Also sets the preprocessor symbol '__Xdvbf'.  This
14700     option is deprecated.
14701
14702'-mlock'
14703     Passed down to the assembler to enable the locked load/store
14704     conditional extension.  Also sets the preprocessor symbol
14705     '__Xlock'.
14706
14707'-mmac-d16'
14708     Passed down to the assembler.  Also sets the preprocessor symbol
14709     '__Xxmac_d16'.  This option is deprecated.
14710
14711'-mmac-24'
14712     Passed down to the assembler.  Also sets the preprocessor symbol
14713     '__Xxmac_24'.  This option is deprecated.
14714
14715'-mrtsc'
14716     Passed down to the assembler to enable the 64-bit time-stamp
14717     counter extension instruction.  Also sets the preprocessor symbol
14718     '__Xrtsc'.  This option is deprecated.
14719
14720'-mswape'
14721     Passed down to the assembler to enable the swap byte ordering
14722     extension instruction.  Also sets the preprocessor symbol
14723     '__Xswape'.
14724
14725'-mtelephony'
14726     Passed down to the assembler to enable dual- and single-operand
14727     instructions for telephony.  Also sets the preprocessor symbol
14728     '__Xtelephony'.  This option is deprecated.
14729
14730'-mxy'
14731     Passed down to the assembler to enable the XY memory extension.
14732     Also sets the preprocessor symbol '__Xxy'.
14733
14734 The following options control how the assembly code is annotated:
14735
14736'-misize'
14737     Annotate assembler instructions with estimated addresses.
14738
14739'-mannotate-align'
14740     Explain what alignment considerations lead to the decision to make
14741     an instruction short or long.
14742
14743 The following options are passed through to the linker:
14744
14745'-marclinux'
14746     Passed through to the linker, to specify use of the 'arclinux'
14747     emulation.  This option is enabled by default in tool chains built
14748     for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when
14749     profiling is not requested.
14750
14751'-marclinux_prof'
14752     Passed through to the linker, to specify use of the 'arclinux_prof'
14753     emulation.  This option is enabled by default in tool chains built
14754     for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when
14755     profiling is requested.
14756
14757 The following options control the semantics of generated code:
14758
14759'-mlong-calls'
14760     Generate calls as register indirect calls, thus providing access to
14761     the full 32-bit address range.
14762
14763'-mmedium-calls'
14764     Don't use less than 25-bit addressing range for calls, which is the
14765     offset available for an unconditional branch-and-link instruction.
14766     Conditional execution of function calls is suppressed, to allow use
14767     of the 25-bit range, rather than the 21-bit range with conditional
14768     branch-and-link.  This is the default for tool chains built for
14769     'arc-linux-uclibc' and 'arceb-linux-uclibc' targets.
14770
14771'-G NUM'
14772     Put definitions of externally-visible data in a small data section
14773     if that data is no bigger than NUM bytes.  The default value of NUM
14774     is 4 for any ARC configuration, or 8 when we have double load/store
14775     operations.
14776
14777'-mno-sdata'
14778     Do not generate sdata references.  This is the default for tool
14779     chains built for 'arc-linux-uclibc' and 'arceb-linux-uclibc'
14780     targets.
14781
14782'-mvolatile-cache'
14783     Use ordinarily cached memory accesses for volatile references.
14784     This is the default.
14785
14786'-mno-volatile-cache'
14787     Enable cache bypass for volatile references.
14788
14789 The following options fine tune code generation:
14790'-malign-call'
14791     Do alignment optimizations for call instructions.
14792
14793'-mauto-modify-reg'
14794     Enable the use of pre/post modify with register displacement.
14795
14796'-mbbit-peephole'
14797     Enable bbit peephole2.
14798
14799'-mno-brcc'
14800     This option disables a target-specific pass in 'arc_reorg' to
14801     generate compare-and-branch ('brCC') instructions.  It has no
14802     effect on generation of these instructions driven by the combiner
14803     pass.
14804
14805'-mcase-vector-pcrel'
14806     Use PC-relative switch case tables to enable case table shortening.
14807     This is the default for '-Os'.
14808
14809'-mcompact-casesi'
14810     Enable compact 'casesi' pattern.  This is the default for '-Os',
14811     and only available for ARCv1 cores.
14812
14813'-mno-cond-exec'
14814     Disable the ARCompact-specific pass to generate conditional
14815     execution instructions.
14816
14817     Due to delay slot scheduling and interactions between operand
14818     numbers, literal sizes, instruction lengths, and the support for
14819     conditional execution, the target-independent pass to generate
14820     conditional execution is often lacking, so the ARC port has kept a
14821     special pass around that tries to find more conditional execution
14822     generation opportunities after register allocation, branch
14823     shortening, and delay slot scheduling have been done.  This pass
14824     generally, but not always, improves performance and code size, at
14825     the cost of extra compilation time, which is why there is an option
14826     to switch it off.  If you have a problem with call instructions
14827     exceeding their allowable offset range because they are
14828     conditionalized, you should consider using '-mmedium-calls'
14829     instead.
14830
14831'-mearly-cbranchsi'
14832     Enable pre-reload use of the 'cbranchsi' pattern.
14833
14834'-mexpand-adddi'
14835     Expand 'adddi3' and 'subdi3' at RTL generation time into 'add.f',
14836     'adc' etc.  This option is deprecated.
14837
14838'-mindexed-loads'
14839     Enable the use of indexed loads.  This can be problematic because
14840     some optimizers then assume that indexed stores exist, which is not
14841     the case.
14842
14843'-mlra'
14844     Enable Local Register Allocation.  This is still experimental for
14845     ARC, so by default the compiler uses standard reload (i.e.
14846     '-mno-lra').
14847
14848'-mlra-priority-none'
14849     Don't indicate any priority for target registers.
14850
14851'-mlra-priority-compact'
14852     Indicate target register priority for r0..r3 / r12..r15.
14853
14854'-mlra-priority-noncompact'
14855     Reduce target register priority for r0..r3 / r12..r15.
14856
14857'-mno-millicode'
14858     When optimizing for size (using '-Os'), prologues and epilogues
14859     that have to save or restore a large number of registers are often
14860     shortened by using call to a special function in libgcc; this is
14861     referred to as a _millicode_ call.  As these calls can pose
14862     performance issues, and/or cause linking issues when linking in a
14863     nonstandard way, this option is provided to turn off millicode call
14864     generation.
14865
14866'-mmixed-code'
14867     Tweak register allocation to help 16-bit instruction generation.
14868     This generally has the effect of decreasing the average instruction
14869     size while increasing the instruction count.
14870
14871'-mq-class'
14872     Enable 'q' instruction alternatives.  This is the default for
14873     '-Os'.
14874
14875'-mRcq'
14876     Enable 'Rcq' constraint handling.  Most short code generation
14877     depends on this.  This is the default.
14878
14879'-mRcw'
14880     Enable 'Rcw' constraint handling.  Most ccfsm condexec mostly
14881     depends on this.  This is the default.
14882
14883'-msize-level=LEVEL'
14884     Fine-tune size optimization with regards to instruction lengths and
14885     alignment.  The recognized values for LEVEL are:
14886     '0'
14887          No size optimization.  This level is deprecated and treated
14888          like '1'.
14889
14890     '1'
14891          Short instructions are used opportunistically.
14892
14893     '2'
14894          In addition, alignment of loops and of code after barriers are
14895          dropped.
14896
14897     '3'
14898          In addition, optional data alignment is dropped, and the
14899          option 'Os' is enabled.
14900
14901     This defaults to '3' when '-Os' is in effect.  Otherwise, the
14902     behavior when this is not set is equivalent to level '1'.
14903
14904'-mtune=CPU'
14905     Set instruction scheduling parameters for CPU, overriding any
14906     implied by '-mcpu='.
14907
14908     Supported values for CPU are
14909
14910     'ARC600'
14911          Tune for ARC600 CPU.
14912
14913     'ARC601'
14914          Tune for ARC601 CPU.
14915
14916     'ARC700'
14917          Tune for ARC700 CPU with standard multiplier block.
14918
14919     'ARC700-xmac'
14920          Tune for ARC700 CPU with XMAC block.
14921
14922     'ARC725D'
14923          Tune for ARC725D CPU.
14924
14925     'ARC750D'
14926          Tune for ARC750D CPU.
14927
14928'-mmultcost=NUM'
14929     Cost to assume for a multiply instruction, with '4' being equal to
14930     a normal instruction.
14931
14932'-munalign-prob-threshold=PROBABILITY'
14933     Set probability threshold for unaligning branches.  When tuning for
14934     'ARC700' and optimizing for speed, branches without filled delay
14935     slot are preferably emitted unaligned and long, unless profiling
14936     indicates that the probability for the branch to be taken is below
14937     PROBABILITY.  *Note Cross-profiling::.  The default is
14938     (REG_BR_PROB_BASE/2), i.e. 5000.
14939
14940 The following options are maintained for backward compatibility, but
14941are now deprecated and will be removed in a future release:
14942
14943'-margonaut'
14944     Obsolete FPX.
14945
14946'-mbig-endian'
14947'-EB'
14948     Compile code for big-endian targets.  Use of these options is now
14949     deprecated.  Big-endian code is supported by configuring GCC to
14950     build 'arceb-elf32' and 'arceb-linux-uclibc' targets, for which big
14951     endian is the default.
14952
14953'-mlittle-endian'
14954'-EL'
14955     Compile code for little-endian targets.  Use of these options is
14956     now deprecated.  Little-endian code is supported by configuring GCC
14957     to build 'arc-elf32' and 'arc-linux-uclibc' targets, for which
14958     little endian is the default.
14959
14960'-mbarrel_shifter'
14961     Replaced by '-mbarrel-shifter'.
14962
14963'-mdpfp_compact'
14964     Replaced by '-mdpfp-compact'.
14965
14966'-mdpfp_fast'
14967     Replaced by '-mdpfp-fast'.
14968
14969'-mdsp_packa'
14970     Replaced by '-mdsp-packa'.
14971
14972'-mEA'
14973     Replaced by '-mea'.
14974
14975'-mmac_24'
14976     Replaced by '-mmac-24'.
14977
14978'-mmac_d16'
14979     Replaced by '-mmac-d16'.
14980
14981'-mspfp_compact'
14982     Replaced by '-mspfp-compact'.
14983
14984'-mspfp_fast'
14985     Replaced by '-mspfp-fast'.
14986
14987'-mtune=CPU'
14988     Values 'arc600', 'arc601', 'arc700' and 'arc700-xmac' for CPU are
14989     replaced by 'ARC600', 'ARC601', 'ARC700' and 'ARC700-xmac'
14990     respectively.
14991
14992'-multcost=NUM'
14993     Replaced by '-mmultcost'.
14994
14995
14996File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
14997
149983.18.4 ARM Options
14999------------------
15000
15001These '-m' options are defined for the ARM port:
15002
15003'-mabi=NAME'
15004     Generate code for the specified ABI.  Permissible values are:
15005     'apcs-gnu', 'atpcs', 'aapcs', 'aapcs-linux' and 'iwmmxt'.
15006
15007'-mapcs-frame'
15008     Generate a stack frame that is compliant with the ARM Procedure
15009     Call Standard for all functions, even if this is not strictly
15010     necessary for correct execution of the code.  Specifying
15011     '-fomit-frame-pointer' with this option causes the stack frames not
15012     to be generated for leaf functions.  The default is
15013     '-mno-apcs-frame'.  This option is deprecated.
15014
15015'-mapcs'
15016     This is a synonym for '-mapcs-frame' and is deprecated.
15017
15018'-mthumb-interwork'
15019     Generate code that supports calling between the ARM and Thumb
15020     instruction sets.  Without this option, on pre-v5 architectures,
15021     the two instruction sets cannot be reliably used inside one
15022     program.  The default is '-mno-thumb-interwork', since slightly
15023     larger code is generated when '-mthumb-interwork' is specified.  In
15024     AAPCS configurations this option is meaningless.
15025
15026'-mno-sched-prolog'
15027     Prevent the reordering of instructions in the function prologue, or
15028     the merging of those instruction with the instructions in the
15029     function's body.  This means that all functions start with a
15030     recognizable set of instructions (or in fact one of a choice from a
15031     small set of different function prologues), and this information
15032     can be used to locate the start of functions inside an executable
15033     piece of code.  The default is '-msched-prolog'.
15034
15035'-mfloat-abi=NAME'
15036     Specifies which floating-point ABI to use.  Permissible values are:
15037     'soft', 'softfp' and 'hard'.
15038
15039     Specifying 'soft' causes GCC to generate output containing library
15040     calls for floating-point operations.  'softfp' allows the
15041     generation of code using hardware floating-point instructions, but
15042     still uses the soft-float calling conventions.  'hard' allows
15043     generation of floating-point instructions and uses FPU-specific
15044     calling conventions.
15045
15046     The default depends on the specific target configuration.  Note
15047     that the hard-float and soft-float ABIs are not link-compatible;
15048     you must compile your entire program with the same ABI, and link
15049     with a compatible set of libraries.
15050
15051'-mlittle-endian'
15052     Generate code for a processor running in little-endian mode.  This
15053     is the default for all standard configurations.
15054
15055'-mbig-endian'
15056     Generate code for a processor running in big-endian mode; the
15057     default is to compile code for a little-endian processor.
15058
15059'-mbe8'
15060'-mbe32'
15061     When linking a big-endian image select between BE8 and BE32
15062     formats.  The option has no effect for little-endian images and is
15063     ignored.  The default is dependent on the selected target
15064     architecture.  For ARMv6 and later architectures the default is
15065     BE8, for older architectures the default is BE32.  BE32 format has
15066     been deprecated by ARM.
15067
15068'-march=NAME[+extension...]'
15069     This specifies the name of the target ARM architecture.  GCC uses
15070     this name to determine what kind of instructions it can emit when
15071     generating assembly code.  This option can be used in conjunction
15072     with or instead of the '-mcpu=' option.
15073
15074     Permissible names are: 'armv4t', 'armv5t', 'armv5te', 'armv6',
15075     'armv6j', 'armv6k', 'armv6kz', 'armv6t2', 'armv6z', 'armv6zk',
15076     'armv7', 'armv7-a', 'armv7ve', 'armv8-a', 'armv8.1-a', 'armv8.2-a',
15077     'armv8.3-a', 'armv8.4-a', 'armv7-r', 'armv8-r', 'armv6-m',
15078     'armv6s-m', 'armv7-m', 'armv7e-m', 'armv8-m.base', 'armv8-m.main',
15079     'iwmmxt' and 'iwmmxt2'.
15080
15081     Additionally, the following architectures, which lack support for
15082     the Thumb execution state, are recognized but support is
15083     deprecated: 'armv2', 'armv2a', 'armv3', 'armv3m', 'armv4', 'armv5'
15084     and 'armv5e'.
15085
15086     Many of the architectures support extensions.  These can be added
15087     by appending '+EXTENSION' to the architecture name.  Extension
15088     options are processed in order and capabilities accumulate.  An
15089     extension will also enable any necessary base extensions upon which
15090     it depends.  For example, the '+crypto' extension will always
15091     enable the '+simd' extension.  The exception to the additive
15092     construction is for extensions that are prefixed with '+no...':
15093     these extensions disable the specified option and any other
15094     extensions that may depend on the presence of that extension.
15095
15096     For example, '-march=armv7-a+simd+nofp+vfpv4' is equivalent to
15097     writing '-march=armv7-a+vfpv4' since the '+simd' option is entirely
15098     disabled by the '+nofp' option that follows it.
15099
15100     Most extension names are generically named, but have an effect that
15101     is dependent upon the architecture to which it is applied.  For
15102     example, the '+simd' option can be applied to both 'armv7-a' and
15103     'armv8-a' architectures, but will enable the original ARMv7-A
15104     Advanced SIMD (Neon) extensions for 'armv7-a' and the ARMv8-A
15105     variant for 'armv8-a'.
15106
15107     The table below lists the supported extensions for each
15108     architecture.  Architectures not mentioned do not support any
15109     extensions.
15110
15111     'armv5e'
15112     'armv5te'
15113     'armv6'
15114     'armv6j'
15115     'armv6k'
15116     'armv6kz'
15117     'armv6t2'
15118     'armv6z'
15119     'armv6zk'
15120          '+fp'
15121               The VFPv2 floating-point instructions.  The extension
15122               '+vfpv2' can be used as an alias for this extension.
15123
15124          '+nofp'
15125               Disable the floating-point instructions.
15126
15127     'armv7'
15128          The common subset of the ARMv7-A, ARMv7-R and ARMv7-M
15129          architectures.
15130          '+fp'
15131               The VFPv3 floating-point instructions, with 16
15132               double-precision registers.  The extension '+vfpv3-d16'
15133               can be used as an alias for this extension.  Note that
15134               floating-point is not supported by the base ARMv7-M
15135               architecture, but is compatible with both the ARMv7-A and
15136               ARMv7-R architectures.
15137
15138          '+nofp'
15139               Disable the floating-point instructions.
15140
15141     'armv7-a'
15142          '+mp'
15143               The multiprocessing extension.
15144
15145          '+sec'
15146               The security extension.
15147
15148          '+fp'
15149               The VFPv3 floating-point instructions, with 16
15150               double-precision registers.  The extension '+vfpv3-d16'
15151               can be used as an alias for this extension.
15152
15153          '+simd'
15154               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
15155               instructions.  The extensions '+neon' and '+neon-vfpv3'
15156               can be used as aliases for this extension.
15157
15158          '+vfpv3'
15159               The VFPv3 floating-point instructions, with 32
15160               double-precision registers.
15161
15162          '+vfpv3-d16-fp16'
15163               The VFPv3 floating-point instructions, with 16
15164               double-precision registers and the half-precision
15165               floating-point conversion operations.
15166
15167          '+vfpv3-fp16'
15168               The VFPv3 floating-point instructions, with 32
15169               double-precision registers and the half-precision
15170               floating-point conversion operations.
15171
15172          '+vfpv4-d16'
15173               The VFPv4 floating-point instructions, with 16
15174               double-precision registers.
15175
15176          '+vfpv4'
15177               The VFPv4 floating-point instructions, with 32
15178               double-precision registers.
15179
15180          '+neon-fp16'
15181               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
15182               instructions, with the half-precision floating-point
15183               conversion operations.
15184
15185          '+neon-vfpv4'
15186               The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
15187               instructions.
15188
15189          '+nosimd'
15190               Disable the Advanced SIMD instructions (does not disable
15191               floating point).
15192
15193          '+nofp'
15194               Disable the floating-point and Advanced SIMD
15195               instructions.
15196
15197     'armv7ve'
15198          The extended version of the ARMv7-A architecture with support
15199          for virtualization.
15200          '+fp'
15201               The VFPv4 floating-point instructions, with 16
15202               double-precision registers.  The extension '+vfpv4-d16'
15203               can be used as an alias for this extension.
15204
15205          '+simd'
15206               The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
15207               instructions.  The extension '+neon-vfpv4' can be used as
15208               an alias for this extension.
15209
15210          '+vfpv3-d16'
15211               The VFPv3 floating-point instructions, with 16
15212               double-precision registers.
15213
15214          '+vfpv3'
15215               The VFPv3 floating-point instructions, with 32
15216               double-precision registers.
15217
15218          '+vfpv3-d16-fp16'
15219               The VFPv3 floating-point instructions, with 16
15220               double-precision registers and the half-precision
15221               floating-point conversion operations.
15222
15223          '+vfpv3-fp16'
15224               The VFPv3 floating-point instructions, with 32
15225               double-precision registers and the half-precision
15226               floating-point conversion operations.
15227
15228          '+vfpv4-d16'
15229               The VFPv4 floating-point instructions, with 16
15230               double-precision registers.
15231
15232          '+vfpv4'
15233               The VFPv4 floating-point instructions, with 32
15234               double-precision registers.
15235
15236          '+neon'
15237               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
15238               instructions.  The extension '+neon-vfpv3' can be used as
15239               an alias for this extension.
15240
15241          '+neon-fp16'
15242               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
15243               instructions, with the half-precision floating-point
15244               conversion operations.
15245
15246          '+nosimd'
15247               Disable the Advanced SIMD instructions (does not disable
15248               floating point).
15249
15250          '+nofp'
15251               Disable the floating-point and Advanced SIMD
15252               instructions.
15253
15254     'armv8-a'
15255          '+crc'
15256               The Cyclic Redundancy Check (CRC) instructions.
15257          '+simd'
15258               The ARMv8-A Advanced SIMD and floating-point
15259               instructions.
15260          '+crypto'
15261               The cryptographic instructions.
15262          '+nocrypto'
15263               Disable the cryptographic instructions.
15264          '+nofp'
15265               Disable the floating-point, Advanced SIMD and
15266               cryptographic instructions.
15267
15268     'armv8.1-a'
15269          '+simd'
15270               The ARMv8.1-A Advanced SIMD and floating-point
15271               instructions.
15272
15273          '+crypto'
15274               The cryptographic instructions.  This also enables the
15275               Advanced SIMD and floating-point instructions.
15276
15277          '+nocrypto'
15278               Disable the cryptographic instructions.
15279
15280          '+nofp'
15281               Disable the floating-point, Advanced SIMD and
15282               cryptographic instructions.
15283
15284     'armv8.2-a'
15285     'armv8.3-a'
15286          '+fp16'
15287               The half-precision floating-point data processing
15288               instructions.  This also enables the Advanced SIMD and
15289               floating-point instructions.
15290
15291          '+fp16fml'
15292               The half-precision floating-point fmla extension.  This
15293               also enables the half-precision floating-point extension
15294               and Advanced SIMD and floating-point instructions.
15295
15296          '+simd'
15297               The ARMv8.1-A Advanced SIMD and floating-point
15298               instructions.
15299
15300          '+crypto'
15301               The cryptographic instructions.  This also enables the
15302               Advanced SIMD and floating-point instructions.
15303
15304          '+dotprod'
15305               Enable the Dot Product extension.  This also enables
15306               Advanced SIMD instructions.
15307
15308          '+nocrypto'
15309               Disable the cryptographic extension.
15310
15311          '+nofp'
15312               Disable the floating-point, Advanced SIMD and
15313               cryptographic instructions.
15314
15315     'armv8.4-a'
15316          '+fp16'
15317               The half-precision floating-point data processing
15318               instructions.  This also enables the Advanced SIMD and
15319               floating-point instructions as well as the Dot Product
15320               extension and the half-precision floating-point fmla
15321               extension.
15322
15323          '+simd'
15324               The ARMv8.3-A Advanced SIMD and floating-point
15325               instructions as well as the Dot Product extension.
15326
15327          '+crypto'
15328               The cryptographic instructions.  This also enables the
15329               Advanced SIMD and floating-point instructions as well as
15330               the Dot Product extension.
15331
15332          '+nocrypto'
15333               Disable the cryptographic extension.
15334
15335          '+nofp'
15336               Disable the floating-point, Advanced SIMD and
15337               cryptographic instructions.
15338
15339     'armv7-r'
15340          '+fp.sp'
15341               The single-precision VFPv3 floating-point instructions.
15342               The extension '+vfpv3xd' can be used as an alias for this
15343               extension.
15344
15345          '+fp'
15346               The VFPv3 floating-point instructions with 16
15347               double-precision registers.  The extension +vfpv3-d16 can
15348               be used as an alias for this extension.
15349
15350          '+vfpv3xd-d16-fp16'
15351               The single-precision VFPv3 floating-point instructions
15352               with 16 double-precision registers and the half-precision
15353               floating-point conversion operations.
15354
15355          '+vfpv3-d16-fp16'
15356               The VFPv3 floating-point instructions, with 16
15357               double-precision registers and the half-precision
15358               floating-point conversion operations.
15359
15360          '+nofp'
15361               Disable the floating-point extension.
15362
15363          '+idiv'
15364               The ARM-state integer division instructions.
15365
15366          '+noidiv'
15367               Disable the ARM-state integer division extension.
15368
15369     'armv7e-m'
15370          '+fp'
15371               The single-precision VFPv4 floating-point instructions.
15372
15373          '+fpv5'
15374               The single-precision FPv5 floating-point instructions.
15375
15376          '+fp.dp'
15377               The single- and double-precision FPv5 floating-point
15378               instructions.
15379
15380          '+nofp'
15381               Disable the floating-point extensions.
15382
15383     'armv8-m.main'
15384          '+dsp'
15385               The DSP instructions.
15386
15387          '+nodsp'
15388               Disable the DSP extension.
15389
15390          '+fp'
15391               The single-precision floating-point instructions.
15392
15393          '+fp.dp'
15394               The single- and double-precision floating-point
15395               instructions.
15396
15397          '+nofp'
15398               Disable the floating-point extension.
15399
15400     'armv8-r'
15401          '+crc'
15402               The Cyclic Redundancy Check (CRC) instructions.
15403          '+fp.sp'
15404               The single-precision FPv5 floating-point instructions.
15405          '+simd'
15406               The ARMv8-A Advanced SIMD and floating-point
15407               instructions.
15408          '+crypto'
15409               The cryptographic instructions.
15410          '+nocrypto'
15411               Disable the cryptographic instructions.
15412          '+nofp'
15413               Disable the floating-point, Advanced SIMD and
15414               cryptographic instructions.
15415
15416     '-march=native' causes the compiler to auto-detect the architecture
15417     of the build computer.  At present, this feature is only supported
15418     on GNU/Linux, and not all architectures are recognized.  If the
15419     auto-detect is unsuccessful the option has no effect.
15420
15421'-mtune=NAME'
15422     This option specifies the name of the target ARM processor for
15423     which GCC should tune the performance of the code.  For some ARM
15424     implementations better performance can be obtained by using this
15425     option.  Permissible names are: 'arm2', 'arm250', 'arm3', 'arm6',
15426     'arm60', 'arm600', 'arm610', 'arm620', 'arm7', 'arm7m', 'arm7d',
15427     'arm7dm', 'arm7di', 'arm7dmi', 'arm70', 'arm700', 'arm700i',
15428     'arm710', 'arm710c', 'arm7100', 'arm720', 'arm7500', 'arm7500fe',
15429     'arm7tdmi', 'arm7tdmi-s', 'arm710t', 'arm720t', 'arm740t',
15430     'strongarm', 'strongarm110', 'strongarm1100', 'strongarm1110',
15431     'arm8', 'arm810', 'arm9', 'arm9e', 'arm920', 'arm920t', 'arm922t',
15432     'arm946e-s', 'arm966e-s', 'arm968e-s', 'arm926ej-s', 'arm940t',
15433     'arm9tdmi', 'arm10tdmi', 'arm1020t', 'arm1026ej-s', 'arm10e',
15434     'arm1020e', 'arm1022e', 'arm1136j-s', 'arm1136jf-s', 'mpcore',
15435     'mpcorenovfp', 'arm1156t2-s', 'arm1156t2f-s', 'arm1176jz-s',
15436     'arm1176jzf-s', 'generic-armv7-a', 'cortex-a5', 'cortex-a7',
15437     'cortex-a8', 'cortex-a9', 'cortex-a12', 'cortex-a15', 'cortex-a17',
15438     'cortex-a32', 'cortex-a35', 'cortex-a53', 'cortex-a55',
15439     'cortex-a57', 'cortex-a72', 'cortex-a73', 'cortex-a75',
15440     'cortex-r4', 'cortex-r4f', 'cortex-r5', 'cortex-r7', 'cortex-r8',
15441     'cortex-r52', 'cortex-m33', 'cortex-m23', 'cortex-m7', 'cortex-m4',
15442     'cortex-m3', 'cortex-m1', 'cortex-m0', 'cortex-m0plus',
15443     'cortex-m1.small-multiply', 'cortex-m0.small-multiply',
15444     'cortex-m0plus.small-multiply', 'exynos-m1', 'marvell-pj4',
15445     'xscale', 'iwmmxt', 'iwmmxt2', 'ep9312', 'fa526', 'fa626',
15446     'fa606te', 'fa626te', 'fmp626', 'fa726te', 'xgene1'.
15447
15448     Additionally, this option can specify that GCC should tune the
15449     performance of the code for a big.LITTLE system.  Permissible names
15450     are: 'cortex-a15.cortex-a7', 'cortex-a17.cortex-a7',
15451     'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
15452     'cortex-a72.cortex-a35', 'cortex-a73.cortex-a53',
15453     'cortex-a75.cortex-a55'.
15454
15455     '-mtune=generic-ARCH' specifies that GCC should tune the
15456     performance for a blend of processors within architecture ARCH.
15457     The aim is to generate code that run well on the current most
15458     popular processors, balancing between optimizations that benefit
15459     some CPUs in the range, and avoiding performance pitfalls of other
15460     CPUs.  The effects of this option may change in future GCC versions
15461     as CPU models come and go.
15462
15463     '-mtune' permits the same extension options as '-mcpu', but the
15464     extension options do not affect the tuning of the generated code.
15465
15466     '-mtune=native' causes the compiler to auto-detect the CPU of the
15467     build computer.  At present, this feature is only supported on
15468     GNU/Linux, and not all architectures are recognized.  If the
15469     auto-detect is unsuccessful the option has no effect.
15470
15471'-mcpu=NAME[+extension...]'
15472     This specifies the name of the target ARM processor.  GCC uses this
15473     name to derive the name of the target ARM architecture (as if
15474     specified by '-march') and the ARM processor type for which to tune
15475     for performance (as if specified by '-mtune').  Where this option
15476     is used in conjunction with '-march' or '-mtune', those options
15477     take precedence over the appropriate part of this option.
15478
15479     Many of the supported CPUs implement optional architectural
15480     extensions.  Where this is so the architectural extensions are
15481     normally enabled by default.  If implementations that lack the
15482     extension exist, then the extension syntax can be used to disable
15483     those extensions that have been omitted.  For floating-point and
15484     Advanced SIMD (Neon) instructions, the settings of the options
15485     '-mfloat-abi' and '-mfpu' must also be considered: floating-point
15486     and Advanced SIMD instructions will only be used if '-mfloat-abi'
15487     is not set to 'soft'; and any setting of '-mfpu' other than 'auto'
15488     will override the available floating-point and SIMD extension
15489     instructions.
15490
15491     For example, 'cortex-a9' can be found in three major
15492     configurations: integer only, with just a floating-point unit or
15493     with floating-point and Advanced SIMD. The default is to enable all
15494     the instructions, but the extensions '+nosimd' and '+nofp' can be
15495     used to disable just the SIMD or both the SIMD and floating-point
15496     instructions respectively.
15497
15498     Permissible names for this option are the same as those for
15499     '-mtune'.
15500
15501     The following extension options are common to the listed CPUs:
15502
15503     '+nodsp'
15504          Disable the DSP instructions on 'cortex-m33'.
15505
15506     '+nofp'
15507          Disables the floating-point instructions on 'arm9e',
15508          'arm946e-s', 'arm966e-s', 'arm968e-s', 'arm10e', 'arm1020e',
15509          'arm1022e', 'arm926ej-s', 'arm1026ej-s', 'cortex-r5',
15510          'cortex-r7', 'cortex-r8', 'cortex-m4', 'cortex-m7' and
15511          'cortex-m33'.  Disables the floating-point and SIMD
15512          instructions on 'generic-armv7-a', 'cortex-a5', 'cortex-a7',
15513          'cortex-a8', 'cortex-a9', 'cortex-a12', 'cortex-a15',
15514          'cortex-a17', 'cortex-a15.cortex-a7', 'cortex-a17.cortex-a7',
15515          'cortex-a32', 'cortex-a35', 'cortex-a53' and 'cortex-a55'.
15516
15517     '+nofp.dp'
15518          Disables the double-precision component of the floating-point
15519          instructions on 'cortex-r5', 'cortex-r7', 'cortex-r8',
15520          'cortex-r52' and 'cortex-m7'.
15521
15522     '+nosimd'
15523          Disables the SIMD (but not floating-point) instructions on
15524          'generic-armv7-a', 'cortex-a5', 'cortex-a7' and 'cortex-a9'.
15525
15526     '+crypto'
15527          Enables the cryptographic instructions on 'cortex-a32',
15528          'cortex-a35', 'cortex-a53', 'cortex-a55', 'cortex-a57',
15529          'cortex-a72', 'cortex-a73', 'cortex-a75', 'exynos-m1',
15530          'xgene1', 'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
15531          'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53' and
15532          'cortex-a75.cortex-a55'.
15533
15534     Additionally the 'generic-armv7-a' pseudo target defaults to VFPv3
15535     with 16 double-precision registers.  It supports the following
15536     extension options: 'mp', 'sec', 'vfpv3-d16', 'vfpv3',
15537     'vfpv3-d16-fp16', 'vfpv3-fp16', 'vfpv4-d16', 'vfpv4', 'neon',
15538     'neon-vfpv3', 'neon-fp16', 'neon-vfpv4'.  The meanings are the same
15539     as for the extensions to '-march=armv7-a'.
15540
15541     '-mcpu=generic-ARCH' is also permissible, and is equivalent to
15542     '-march=ARCH -mtune=generic-ARCH'.  See '-mtune' for more
15543     information.
15544
15545     '-mcpu=native' causes the compiler to auto-detect the CPU of the
15546     build computer.  At present, this feature is only supported on
15547     GNU/Linux, and not all architectures are recognized.  If the
15548     auto-detect is unsuccessful the option has no effect.
15549
15550'-mfpu=NAME'
15551     This specifies what floating-point hardware (or hardware emulation)
15552     is available on the target.  Permissible names are: 'auto',
15553     'vfpv2', 'vfpv3', 'vfpv3-fp16', 'vfpv3-d16', 'vfpv3-d16-fp16',
15554     'vfpv3xd', 'vfpv3xd-fp16', 'neon-vfpv3', 'neon-fp16', 'vfpv4',
15555     'vfpv4-d16', 'fpv4-sp-d16', 'neon-vfpv4', 'fpv5-d16',
15556     'fpv5-sp-d16', 'fp-armv8', 'neon-fp-armv8' and
15557     'crypto-neon-fp-armv8'.  Note that 'neon' is an alias for
15558     'neon-vfpv3' and 'vfp' is an alias for 'vfpv2'.
15559
15560     The setting 'auto' is the default and is special.  It causes the
15561     compiler to select the floating-point and Advanced SIMD
15562     instructions based on the settings of '-mcpu' and '-march'.
15563
15564     If the selected floating-point hardware includes the NEON extension
15565     (e.g.  '-mfpu=neon'), note that floating-point operations are not
15566     generated by GCC's auto-vectorization pass unless
15567     '-funsafe-math-optimizations' is also specified.  This is because
15568     NEON hardware does not fully implement the IEEE 754 standard for
15569     floating-point arithmetic (in particular denormal values are
15570     treated as zero), so the use of NEON instructions may lead to a
15571     loss of precision.
15572
15573     You can also set the fpu name at function level by using the
15574     'target("fpu=")' function attributes (*note ARM Function
15575     Attributes::) or pragmas (*note Function Specific Option
15576     Pragmas::).
15577
15578'-mfp16-format=NAME'
15579     Specify the format of the '__fp16' half-precision floating-point
15580     type.  Permissible names are 'none', 'ieee', and 'alternative'; the
15581     default is 'none', in which case the '__fp16' type is not defined.
15582     *Note Half-Precision::, for more information.
15583
15584'-mstructure-size-boundary=N'
15585     The sizes of all structures and unions are rounded up to a multiple
15586     of the number of bits set by this option.  Permissible values are
15587     8, 32 and 64.  The default value varies for different toolchains.
15588     For the COFF targeted toolchain the default value is 8.  A value of
15589     64 is only allowed if the underlying ABI supports it.
15590
15591     Specifying a larger number can produce faster, more efficient code,
15592     but can also increase the size of the program.  Different values
15593     are potentially incompatible.  Code compiled with one value cannot
15594     necessarily expect to work with code or libraries compiled with
15595     another value, if they exchange information using structures or
15596     unions.
15597
15598     This option is deprecated.
15599
15600'-mabort-on-noreturn'
15601     Generate a call to the function 'abort' at the end of a 'noreturn'
15602     function.  It is executed if the function tries to return.
15603
15604'-mlong-calls'
15605'-mno-long-calls'
15606     Tells the compiler to perform function calls by first loading the
15607     address of the function into a register and then performing a
15608     subroutine call on this register.  This switch is needed if the
15609     target function lies outside of the 64-megabyte addressing range of
15610     the offset-based version of subroutine call instruction.
15611
15612     Even if this switch is enabled, not all function calls are turned
15613     into long calls.  The heuristic is that static functions, functions
15614     that have the 'short_call' attribute, functions that are inside the
15615     scope of a '#pragma no_long_calls' directive, and functions whose
15616     definitions have already been compiled within the current
15617     compilation unit are not turned into long calls.  The exceptions to
15618     this rule are that weak function definitions, functions with the
15619     'long_call' attribute or the 'section' attribute, and functions
15620     that are within the scope of a '#pragma long_calls' directive are
15621     always turned into long calls.
15622
15623     This feature is not enabled by default.  Specifying
15624     '-mno-long-calls' restores the default behavior, as does placing
15625     the function calls within the scope of a '#pragma long_calls_off'
15626     directive.  Note these switches have no effect on how the compiler
15627     generates code to handle function calls via function pointers.
15628
15629'-msingle-pic-base'
15630     Treat the register used for PIC addressing as read-only, rather
15631     than loading it in the prologue for each function.  The runtime
15632     system is responsible for initializing this register with an
15633     appropriate value before execution begins.
15634
15635'-mpic-register=REG'
15636     Specify the register to be used for PIC addressing.  For standard
15637     PIC base case, the default is any suitable register determined by
15638     compiler.  For single PIC base case, the default is 'R9' if target
15639     is EABI based or stack-checking is enabled, otherwise the default
15640     is 'R10'.
15641
15642'-mpic-data-is-text-relative'
15643     Assume that the displacement between the text and data segments is
15644     fixed at static link time.  This permits using PC-relative
15645     addressing operations to access data known to be in the data
15646     segment.  For non-VxWorks RTP targets, this option is enabled by
15647     default.  When disabled on such targets, it will enable
15648     '-msingle-pic-base' by default.
15649
15650'-mpoke-function-name'
15651     Write the name of each function into the text section, directly
15652     preceding the function prologue.  The generated code is similar to
15653     this:
15654
15655               t0
15656                   .ascii "arm_poke_function_name", 0
15657                   .align
15658               t1
15659                   .word 0xff000000 + (t1 - t0)
15660               arm_poke_function_name
15661                   mov     ip, sp
15662                   stmfd   sp!, {fp, ip, lr, pc}
15663                   sub     fp, ip, #4
15664
15665     When performing a stack backtrace, code can inspect the value of
15666     'pc' stored at 'fp + 0'.  If the trace function then looks at
15667     location 'pc - 12' and the top 8 bits are set, then we know that
15668     there is a function name embedded immediately preceding this
15669     location and has length '((pc[-3]) & 0xff000000)'.
15670
15671'-mthumb'
15672'-marm'
15673
15674     Select between generating code that executes in ARM and Thumb
15675     states.  The default for most configurations is to generate code
15676     that executes in ARM state, but the default can be changed by
15677     configuring GCC with the '--with-mode='STATE configure option.
15678
15679     You can also override the ARM and Thumb mode for each function by
15680     using the 'target("thumb")' and 'target("arm")' function attributes
15681     (*note ARM Function Attributes::) or pragmas (*note Function
15682     Specific Option Pragmas::).
15683
15684'-mflip-thumb'
15685     Switch ARM/Thumb modes on alternating functions.  This option is
15686     provided for regression testing of mixed Thumb/ARM code generation,
15687     and is not intended for ordinary use in compiling code.
15688
15689'-mtpcs-frame'
15690     Generate a stack frame that is compliant with the Thumb Procedure
15691     Call Standard for all non-leaf functions.  (A leaf function is one
15692     that does not call any other functions.)  The default is
15693     '-mno-tpcs-frame'.
15694
15695'-mtpcs-leaf-frame'
15696     Generate a stack frame that is compliant with the Thumb Procedure
15697     Call Standard for all leaf functions.  (A leaf function is one that
15698     does not call any other functions.)  The default is
15699     '-mno-apcs-leaf-frame'.
15700
15701'-mcallee-super-interworking'
15702     Gives all externally visible functions in the file being compiled
15703     an ARM instruction set header which switches to Thumb mode before
15704     executing the rest of the function.  This allows these functions to
15705     be called from non-interworking code.  This option is not valid in
15706     AAPCS configurations because interworking is enabled by default.
15707
15708'-mcaller-super-interworking'
15709     Allows calls via function pointers (including virtual functions) to
15710     execute correctly regardless of whether the target code has been
15711     compiled for interworking or not.  There is a small overhead in the
15712     cost of executing a function pointer if this option is enabled.
15713     This option is not valid in AAPCS configurations because
15714     interworking is enabled by default.
15715
15716'-mtp=NAME'
15717     Specify the access model for the thread local storage pointer.  The
15718     valid models are 'soft', which generates calls to
15719     '__aeabi_read_tp', 'cp15', which fetches the thread pointer from
15720     'cp15' directly (supported in the arm6k architecture), and 'auto',
15721     which uses the best available method for the selected processor.
15722     The default setting is 'auto'.
15723
15724'-mtls-dialect=DIALECT'
15725     Specify the dialect to use for accessing thread local storage.  Two
15726     DIALECTs are supported--'gnu' and 'gnu2'.  The 'gnu' dialect
15727     selects the original GNU scheme for supporting local and global
15728     dynamic TLS models.  The 'gnu2' dialect selects the GNU descriptor
15729     scheme, which provides better performance for shared libraries.
15730     The GNU descriptor scheme is compatible with the original scheme,
15731     but does require new assembler, linker and library support.
15732     Initial and local exec TLS models are unaffected by this option and
15733     always use the original scheme.
15734
15735'-mword-relocations'
15736     Only generate absolute relocations on word-sized values (i.e.
15737     R_ARM_ABS32).  This is enabled by default on targets (uClinux,
15738     SymbianOS) where the runtime loader imposes this restriction, and
15739     when '-fpic' or '-fPIC' is specified.
15740
15741'-mfix-cortex-m3-ldrd'
15742     Some Cortex-M3 cores can cause data corruption when 'ldrd'
15743     instructions with overlapping destination and base registers are
15744     used.  This option avoids generating these instructions.  This
15745     option is enabled by default when '-mcpu=cortex-m3' is specified.
15746
15747'-munaligned-access'
15748'-mno-unaligned-access'
15749     Enables (or disables) reading and writing of 16- and 32- bit values
15750     from addresses that are not 16- or 32- bit aligned.  By default
15751     unaligned access is disabled for all pre-ARMv6, all ARMv6-M and for
15752     ARMv8-M Baseline architectures, and enabled for all other
15753     architectures.  If unaligned access is not enabled then words in
15754     packed data structures are accessed a byte at a time.
15755
15756     The ARM attribute 'Tag_CPU_unaligned_access' is set in the
15757     generated object file to either true or false, depending upon the
15758     setting of this option.  If unaligned access is enabled then the
15759     preprocessor symbol '__ARM_FEATURE_UNALIGNED' is also defined.
15760
15761'-mneon-for-64bits'
15762     Enables using Neon to handle scalar 64-bits operations.  This is
15763     disabled by default since the cost of moving data from core
15764     registers to Neon is high.
15765
15766'-mslow-flash-data'
15767     Assume loading data from flash is slower than fetching instruction.
15768     Therefore literal load is minimized for better performance.  This
15769     option is only supported when compiling for ARMv7 M-profile and off
15770     by default.
15771
15772'-masm-syntax-unified'
15773     Assume inline assembler is using unified asm syntax.  The default
15774     is currently off which implies divided syntax.  This option has no
15775     impact on Thumb2.  However, this may change in future releases of
15776     GCC. Divided syntax should be considered deprecated.
15777
15778'-mrestrict-it'
15779     Restricts generation of IT blocks to conform to the rules of
15780     ARMv8-A. IT blocks can only contain a single 16-bit instruction
15781     from a select set of instructions.  This option is on by default
15782     for ARMv8-A Thumb mode.
15783
15784'-mprint-tune-info'
15785     Print CPU tuning information as comment in assembler file.  This is
15786     an option used only for regression testing of the compiler and not
15787     intended for ordinary use in compiling code.  This option is
15788     disabled by default.
15789
15790'-mverbose-cost-dump'
15791     Enable verbose cost model dumping in the debug dump files.  This
15792     option is provided for use in debugging the compiler.
15793
15794'-mpure-code'
15795     Do not allow constant data to be placed in code sections.
15796     Additionally, when compiling for ELF object format give all text
15797     sections the ELF processor-specific section attribute
15798     'SHF_ARM_PURECODE'.  This option is only available when generating
15799     non-pic code for M-profile targets with the MOVT instruction.
15800
15801'-mcmse'
15802     Generate secure code as per the "ARMv8-M Security Extensions:
15803     Requirements on Development Tools Engineering Specification", which
15804     can be found on
15805     <http://infocenter.arm.com/help/topic/com.arm.doc.ecm0359818/ECM0359818_armv8m_security_extensions_reqs_on_dev_tools_1_0.pdf>.
15806
15807
15808File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
15809
158103.18.5 AVR Options
15811------------------
15812
15813These options are defined for AVR implementations:
15814
15815'-mmcu=MCU'
15816     Specify Atmel AVR instruction set architectures (ISA) or MCU type.
15817
15818     The default for this option is 'avr2'.
15819
15820     GCC supports the following AVR devices and ISAs:
15821
15822     'avr2'
15823          "Classic" devices with up to 8 KiB of program memory.
15824          MCU = 'attiny22', 'attiny26', 'at90s2313', 'at90s2323',
15825          'at90s2333', 'at90s2343', 'at90s4414', 'at90s4433',
15826          'at90s4434', 'at90c8534', 'at90s8515', 'at90s8535'.
15827
15828     'avr25'
15829          "Classic" devices with up to 8 KiB of program memory and with
15830          the 'MOVW' instruction.
15831          MCU = 'attiny13', 'attiny13a', 'attiny24', 'attiny24a',
15832          'attiny25', 'attiny261', 'attiny261a', 'attiny2313',
15833          'attiny2313a', 'attiny43u', 'attiny44', 'attiny44a',
15834          'attiny45', 'attiny48', 'attiny441', 'attiny461',
15835          'attiny461a', 'attiny4313', 'attiny84', 'attiny84a',
15836          'attiny85', 'attiny87', 'attiny88', 'attiny828', 'attiny841',
15837          'attiny861', 'attiny861a', 'ata5272', 'ata6616c', 'at86rf401'.
15838
15839     'avr3'
15840          "Classic" devices with 16 KiB up to 64 KiB of program memory.
15841          MCU = 'at76c711', 'at43usb355'.
15842
15843     'avr31'
15844          "Classic" devices with 128 KiB of program memory.
15845          MCU = 'atmega103', 'at43usb320'.
15846
15847     'avr35'
15848          "Classic" devices with 16 KiB up to 64 KiB of program memory
15849          and with the 'MOVW' instruction.
15850          MCU = 'attiny167', 'attiny1634', 'atmega8u2', 'atmega16u2',
15851          'atmega32u2', 'ata5505', 'ata6617c', 'ata664251', 'at90usb82',
15852          'at90usb162'.
15853
15854     'avr4'
15855          "Enhanced" devices with up to 8 KiB of program memory.
15856          MCU = 'atmega48', 'atmega48a', 'atmega48p', 'atmega48pa',
15857          'atmega48pb', 'atmega8', 'atmega8a', 'atmega8hva', 'atmega88',
15858          'atmega88a', 'atmega88p', 'atmega88pa', 'atmega88pb',
15859          'atmega8515', 'atmega8535', 'ata6285', 'ata6286', 'ata6289',
15860          'ata6612c', 'at90pwm1', 'at90pwm2', 'at90pwm2b', 'at90pwm3',
15861          'at90pwm3b', 'at90pwm81'.
15862
15863     'avr5'
15864          "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
15865
15866          MCU = 'atmega16', 'atmega16a', 'atmega16hva', 'atmega16hva2',
15867          'atmega16hvb', 'atmega16hvbrevb', 'atmega16m1', 'atmega16u4',
15868          'atmega161', 'atmega162', 'atmega163', 'atmega164a',
15869          'atmega164p', 'atmega164pa', 'atmega165', 'atmega165a',
15870          'atmega165p', 'atmega165pa', 'atmega168', 'atmega168a',
15871          'atmega168p', 'atmega168pa', 'atmega168pb', 'atmega169',
15872          'atmega169a', 'atmega169p', 'atmega169pa', 'atmega32',
15873          'atmega32a', 'atmega32c1', 'atmega32hvb', 'atmega32hvbrevb',
15874          'atmega32m1', 'atmega32u4', 'atmega32u6', 'atmega323',
15875          'atmega324a', 'atmega324p', 'atmega324pa', 'atmega325',
15876          'atmega325a', 'atmega325p', 'atmega325pa', 'atmega328',
15877          'atmega328p', 'atmega328pb', 'atmega329', 'atmega329a',
15878          'atmega329p', 'atmega329pa', 'atmega3250', 'atmega3250a',
15879          'atmega3250p', 'atmega3250pa', 'atmega3290', 'atmega3290a',
15880          'atmega3290p', 'atmega3290pa', 'atmega406', 'atmega64',
15881          'atmega64a', 'atmega64c1', 'atmega64hve', 'atmega64hve2',
15882          'atmega64m1', 'atmega64rfr2', 'atmega640', 'atmega644',
15883          'atmega644a', 'atmega644p', 'atmega644pa', 'atmega644rfr2',
15884          'atmega645', 'atmega645a', 'atmega645p', 'atmega649',
15885          'atmega649a', 'atmega649p', 'atmega6450', 'atmega6450a',
15886          'atmega6450p', 'atmega6490', 'atmega6490a', 'atmega6490p',
15887          'ata5795', 'ata5790', 'ata5790n', 'ata5791', 'ata6613c',
15888          'ata6614q', 'ata5782', 'ata5831', 'ata8210', 'ata8510',
15889          'ata5702m322', 'at90pwm161', 'at90pwm216', 'at90pwm316',
15890          'at90can32', 'at90can64', 'at90scr100', 'at90usb646',
15891          'at90usb647', 'at94k', 'm3000'.
15892
15893     'avr51'
15894          "Enhanced" devices with 128 KiB of program memory.
15895          MCU = 'atmega128', 'atmega128a', 'atmega128rfa1',
15896          'atmega128rfr2', 'atmega1280', 'atmega1281', 'atmega1284',
15897          'atmega1284p', 'atmega1284rfr2', 'at90can128', 'at90usb1286',
15898          'at90usb1287'.
15899
15900     'avr6'
15901          "Enhanced" devices with 3-byte PC, i.e. with more than 128 KiB
15902          of program memory.
15903          MCU = 'atmega256rfr2', 'atmega2560', 'atmega2561',
15904          'atmega2564rfr2'.
15905
15906     'avrxmega2'
15907          "XMEGA" devices with more than 8 KiB and up to 64 KiB of
15908          program memory.
15909          MCU = 'atxmega8e5', 'atxmega16a4', 'atxmega16a4u',
15910          'atxmega16c4', 'atxmega16d4', 'atxmega16e5', 'atxmega32a4',
15911          'atxmega32a4u', 'atxmega32c3', 'atxmega32c4', 'atxmega32d3',
15912          'atxmega32d4', 'atxmega32e5'.
15913
15914     'avrxmega3'
15915          "XMEGA" devices with up to 64 KiB of combined program memory
15916          and RAM, and with program memory visible in the RAM address
15917          space.
15918          MCU = 'attiny202', 'attiny204', 'attiny212', 'attiny214',
15919          'attiny402', 'attiny404', 'attiny406', 'attiny412',
15920          'attiny414', 'attiny416', 'attiny417', 'attiny804',
15921          'attiny806', 'attiny807', 'attiny814', 'attiny816',
15922          'attiny817', 'attiny1604', 'attiny1606', 'attiny1607',
15923          'attiny1614', 'attiny1616', 'attiny1617', 'attiny3214',
15924          'attiny3216', 'attiny3217', 'atmega808', 'atmega809',
15925          'atmega1608', 'atmega1609', 'atmega3208', 'atmega3209',
15926          'atmega4808', 'atmega4809'.
15927
15928     'avrxmega4'
15929          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
15930          program memory.
15931          MCU = 'atxmega64a3', 'atxmega64a3u', 'atxmega64a4u',
15932          'atxmega64b1', 'atxmega64b3', 'atxmega64c3', 'atxmega64d3',
15933          'atxmega64d4'.
15934
15935     'avrxmega5'
15936          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
15937          program memory and more than 64 KiB of RAM.
15938          MCU = 'atxmega64a1', 'atxmega64a1u'.
15939
15940     'avrxmega6'
15941          "XMEGA" devices with more than 128 KiB of program memory.
15942          MCU = 'atxmega128a3', 'atxmega128a3u', 'atxmega128b1',
15943          'atxmega128b3', 'atxmega128c3', 'atxmega128d3',
15944          'atxmega128d4', 'atxmega192a3', 'atxmega192a3u',
15945          'atxmega192c3', 'atxmega192d3', 'atxmega256a3',
15946          'atxmega256a3b', 'atxmega256a3bu', 'atxmega256a3u',
15947          'atxmega256c3', 'atxmega256d3', 'atxmega384c3',
15948          'atxmega384d3'.
15949
15950     'avrxmega7'
15951          "XMEGA" devices with more than 128 KiB of program memory and
15952          more than 64 KiB of RAM.
15953          MCU = 'atxmega128a1', 'atxmega128a1u', 'atxmega128a4u'.
15954
15955     'avrtiny'
15956          "TINY" Tiny core devices with 512 B up to 4 KiB of program
15957          memory.
15958          MCU = 'attiny4', 'attiny5', 'attiny9', 'attiny10', 'attiny20',
15959          'attiny40'.
15960
15961     'avr1'
15962          This ISA is implemented by the minimal AVR core and supported
15963          for assembler only.
15964          MCU = 'attiny11', 'attiny12', 'attiny15', 'attiny28',
15965          'at90s1200'.
15966
15967'-mabsdata'
15968
15969     Assume that all data in static storage can be accessed by LDS / STS
15970     instructions.  This option has only an effect on reduced Tiny
15971     devices like ATtiny40.  See also the 'absdata' *note variable
15972     attribute: AVR Variable Attributes.
15973
15974'-maccumulate-args'
15975     Accumulate outgoing function arguments and acquire/release the
15976     needed stack space for outgoing function arguments once in function
15977     prologue/epilogue.  Without this option, outgoing arguments are
15978     pushed before calling a function and popped afterwards.
15979
15980     Popping the arguments after the function call can be expensive on
15981     AVR so that accumulating the stack space might lead to smaller
15982     executables because arguments need not be removed from the stack
15983     after such a function call.
15984
15985     This option can lead to reduced code size for functions that
15986     perform several calls to functions that get their arguments on the
15987     stack like calls to printf-like functions.
15988
15989'-mbranch-cost=COST'
15990     Set the branch costs for conditional branch instructions to COST.
15991     Reasonable values for COST are small, non-negative integers.  The
15992     default branch cost is 0.
15993
15994'-mcall-prologues'
15995     Functions prologues/epilogues are expanded as calls to appropriate
15996     subroutines.  Code size is smaller.
15997
15998'-mgas-isr-prologues'
15999     Interrupt service routines (ISRs) may use the '__gcc_isr' pseudo
16000     instruction supported by GNU Binutils.  If this option is on, the
16001     feature can still be disabled for individual ISRs by means of the
16002     *note 'no_gccisr': AVR Function Attributes. function attribute.
16003     This feature is activated per default if optimization is on (but
16004     not with '-Og', *note Optimize Options::), and if GNU Binutils
16005     support PR21683 (https://sourceware.org/PR21683).
16006
16007'-mint8'
16008     Assume 'int' to be 8-bit integer.  This affects the sizes of all
16009     types: a 'char' is 1 byte, an 'int' is 1 byte, a 'long' is 2 bytes,
16010     and 'long long' is 4 bytes.  Please note that this option does not
16011     conform to the C standards, but it results in smaller code size.
16012
16013'-mmain-is-OS_task'
16014     Do not save registers in 'main'.  The effect is the same like
16015     attaching attribute *note 'OS_task': AVR Function Attributes. to
16016     'main'.  It is activated per default if optimization is on.
16017
16018'-mn-flash=NUM'
16019     Assume that the flash memory has a size of NUM times 64 KiB.
16020
16021'-mno-interrupts'
16022     Generated code is not compatible with hardware interrupts.  Code
16023     size is smaller.
16024
16025'-mrelax'
16026     Try to replace 'CALL' resp. 'JMP' instruction by the shorter
16027     'RCALL' resp. 'RJMP' instruction if applicable.  Setting '-mrelax'
16028     just adds the '--mlink-relax' option to the assembler's command
16029     line and the '--relax' option to the linker's command line.
16030
16031     Jump relaxing is performed by the linker because jump offsets are
16032     not known before code is located.  Therefore, the assembler code
16033     generated by the compiler is the same, but the instructions in the
16034     executable may differ from instructions in the assembler code.
16035
16036     Relaxing must be turned on if linker stubs are needed, see the
16037     section on 'EIND' and linker stubs below.
16038
16039'-mrmw'
16040     Assume that the device supports the Read-Modify-Write instructions
16041     'XCH', 'LAC', 'LAS' and 'LAT'.
16042
16043'-mshort-calls'
16044
16045     Assume that 'RJMP' and 'RCALL' can target the whole program memory.
16046
16047     This option is used internally for multilib selection.  It is not
16048     an optimization option, and you don't need to set it by hand.
16049
16050'-msp8'
16051     Treat the stack pointer register as an 8-bit register, i.e. assume
16052     the high byte of the stack pointer is zero.  In general, you don't
16053     need to set this option by hand.
16054
16055     This option is used internally by the compiler to select and build
16056     multilibs for architectures 'avr2' and 'avr25'.  These
16057     architectures mix devices with and without 'SPH'.  For any setting
16058     other than '-mmcu=avr2' or '-mmcu=avr25' the compiler driver adds
16059     or removes this option from the compiler proper's command line,
16060     because the compiler then knows if the device or architecture has
16061     an 8-bit stack pointer and thus no 'SPH' register or not.
16062
16063'-mstrict-X'
16064     Use address register 'X' in a way proposed by the hardware.  This
16065     means that 'X' is only used in indirect, post-increment or
16066     pre-decrement addressing.
16067
16068     Without this option, the 'X' register may be used in the same way
16069     as 'Y' or 'Z' which then is emulated by additional instructions.
16070     For example, loading a value with 'X+const' addressing with a small
16071     non-negative 'const < 64' to a register RN is performed as
16072
16073          adiw r26, const   ; X += const
16074          ld   RN, X        ; RN = *X
16075          sbiw r26, const   ; X -= const
16076
16077'-mtiny-stack'
16078     Only change the lower 8 bits of the stack pointer.
16079
16080'-mfract-convert-truncate'
16081     Allow to use truncation instead of rounding towards zero for
16082     fractional fixed-point types.
16083
16084'-nodevicelib'
16085     Don't link against AVR-LibC's device specific library 'lib<mcu>.a'.
16086
16087'-nodevicespecs'
16088     Don't add '-specs=device-specs/specs-<mcu>' to the compiler
16089     driver's command line.  The user takes responsibility for supplying
16090     the sub-processes like compiler proper, assembler and linker with
16091     appropriate command line options.
16092
16093'-Waddr-space-convert'
16094     Warn about conversions between address spaces in the case where the
16095     resulting address space is not contained in the incoming address
16096     space.
16097
16098'-Wmisspelled-isr'
16099     Warn if the ISR is misspelled, i.e.  without __vector prefix.
16100     Enabled by default.
16101
161023.18.5.1 'EIND' and Devices with More Than 128 Ki Bytes of Flash
16103................................................................
16104
16105Pointers in the implementation are 16 bits wide.  The address of a
16106function or label is represented as word address so that indirect jumps
16107and calls can target any code address in the range of 64 Ki words.
16108
16109 In order to facilitate indirect jump on devices with more than 128 Ki
16110bytes of program memory space, there is a special function register
16111called 'EIND' that serves as most significant part of the target address
16112when 'EICALL' or 'EIJMP' instructions are used.
16113
16114 Indirect jumps and calls on these devices are handled as follows by the
16115compiler and are subject to some limitations:
16116
16117   * The compiler never sets 'EIND'.
16118
16119   * The compiler uses 'EIND' implicitly in 'EICALL'/'EIJMP'
16120     instructions or might read 'EIND' directly in order to emulate an
16121     indirect call/jump by means of a 'RET' instruction.
16122
16123   * The compiler assumes that 'EIND' never changes during the startup
16124     code or during the application.  In particular, 'EIND' is not
16125     saved/restored in function or interrupt service routine
16126     prologue/epilogue.
16127
16128   * For indirect calls to functions and computed goto, the linker
16129     generates _stubs_.  Stubs are jump pads sometimes also called
16130     _trampolines_.  Thus, the indirect call/jump jumps to such a stub.
16131     The stub contains a direct jump to the desired address.
16132
16133   * Linker relaxation must be turned on so that the linker generates
16134     the stubs correctly in all situations.  See the compiler option
16135     '-mrelax' and the linker option '--relax'.  There are corner cases
16136     where the linker is supposed to generate stubs but aborts without
16137     relaxation and without a helpful error message.
16138
16139   * The default linker script is arranged for code with 'EIND = 0'.  If
16140     code is supposed to work for a setup with 'EIND != 0', a custom
16141     linker script has to be used in order to place the sections whose
16142     name start with '.trampolines' into the segment where 'EIND' points
16143     to.
16144
16145   * The startup code from libgcc never sets 'EIND'.  Notice that
16146     startup code is a blend of code from libgcc and AVR-LibC. For the
16147     impact of AVR-LibC on 'EIND', see the
16148     AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/).
16149
16150   * It is legitimate for user-specific startup code to set up 'EIND'
16151     early, for example by means of initialization code located in
16152     section '.init3'.  Such code runs prior to general startup code
16153     that initializes RAM and calls constructors, but after the bit of
16154     startup code from AVR-LibC that sets 'EIND' to the segment where
16155     the vector table is located.
16156          #include <avr/io.h>
16157
16158          static void
16159          __attribute__((section(".init3"),naked,used,no_instrument_function))
16160          init3_set_eind (void)
16161          {
16162            __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
16163                            "out %i0,r24" :: "n" (&EIND) : "r24","memory");
16164          }
16165
16166     The '__trampolines_start' symbol is defined in the linker script.
16167
16168   * Stubs are generated automatically by the linker if the following
16169     two conditions are met:
16170
16171        - The address of a label is taken by means of the 'gs' modifier
16172          (short for _generate stubs_) like so:
16173               LDI r24, lo8(gs(FUNC))
16174               LDI r25, hi8(gs(FUNC))
16175        - The final location of that label is in a code segment
16176          _outside_ the segment where the stubs are located.
16177
16178   * The compiler emits such 'gs' modifiers for code labels in the
16179     following situations:
16180        - Taking address of a function or code label.
16181        - Computed goto.
16182        - If prologue-save function is used, see '-mcall-prologues'
16183          command-line option.
16184        - Switch/case dispatch tables.  If you do not want such dispatch
16185          tables you can specify the '-fno-jump-tables' command-line
16186          option.
16187        - C and C++ constructors/destructors called during
16188          startup/shutdown.
16189        - If the tools hit a 'gs()' modifier explained above.
16190
16191   * Jumping to non-symbolic addresses like so is _not_ supported:
16192
16193          int main (void)
16194          {
16195              /* Call function at word address 0x2 */
16196              return ((int(*)(void)) 0x2)();
16197          }
16198
16199     Instead, a stub has to be set up, i.e. the function has to be
16200     called through a symbol ('func_4' in the example):
16201
16202          int main (void)
16203          {
16204              extern int func_4 (void);
16205
16206              /* Call function at byte address 0x4 */
16207              return func_4();
16208          }
16209
16210     and the application be linked with '-Wl,--defsym,func_4=0x4'.
16211     Alternatively, 'func_4' can be defined in the linker script.
16212
162133.18.5.2 Handling of the 'RAMPD', 'RAMPX', 'RAMPY' and 'RAMPZ' Special Function Registers
16214.........................................................................................
16215
16216Some AVR devices support memories larger than the 64 KiB range that can
16217be accessed with 16-bit pointers.  To access memory locations outside
16218this 64 KiB range, the content of a 'RAMP' register is used as high part
16219of the address: The 'X', 'Y', 'Z' address register is concatenated with
16220the 'RAMPX', 'RAMPY', 'RAMPZ' special function register, respectively,
16221to get a wide address.  Similarly, 'RAMPD' is used together with direct
16222addressing.
16223
16224   * The startup code initializes the 'RAMP' special function registers
16225     with zero.
16226
16227   * If a *note named address space: AVR Named Address Spaces. other
16228     than generic or '__flash' is used, then 'RAMPZ' is set as needed
16229     before the operation.
16230
16231   * If the device supports RAM larger than 64 KiB and the compiler
16232     needs to change 'RAMPZ' to accomplish an operation, 'RAMPZ' is
16233     reset to zero after the operation.
16234
16235   * If the device comes with a specific 'RAMP' register, the ISR
16236     prologue/epilogue saves/restores that SFR and initializes it with
16237     zero in case the ISR code might (implicitly) use it.
16238
16239   * RAM larger than 64 KiB is not supported by GCC for AVR targets.  If
16240     you use inline assembler to read from locations outside the 16-bit
16241     address range and change one of the 'RAMP' registers, you must
16242     reset it to zero after the access.
16243
162443.18.5.3 AVR Built-in Macros
16245............................
16246
16247GCC defines several built-in macros so that the user code can test for
16248the presence or absence of features.  Almost any of the following
16249built-in macros are deduced from device capabilities and thus triggered
16250by the '-mmcu=' command-line option.
16251
16252 For even more AVR-specific built-in macros see *note AVR Named Address
16253Spaces:: and *note AVR Built-in Functions::.
16254
16255'__AVR_ARCH__'
16256     Build-in macro that resolves to a decimal number that identifies
16257     the architecture and depends on the '-mmcu=MCU' option.  Possible
16258     values are:
16259
16260     '2', '25', '3', '31', '35', '4', '5', '51', '6'
16261
16262     for MCU='avr2', 'avr25', 'avr3', 'avr31', 'avr35', 'avr4', 'avr5',
16263     'avr51', 'avr6',
16264
16265     respectively and
16266
16267     '100', '102', '103', '104', '105', '106', '107'
16268
16269     for MCU='avrtiny', 'avrxmega2', 'avrxmega3', 'avrxmega4',
16270     'avrxmega5', 'avrxmega6', 'avrxmega7', respectively.  If MCU
16271     specifies a device, this built-in macro is set accordingly.  For
16272     example, with '-mmcu=atmega8' the macro is defined to '4'.
16273
16274'__AVR_DEVICE__'
16275     Setting '-mmcu=DEVICE' defines this built-in macro which reflects
16276     the device's name.  For example, '-mmcu=atmega8' defines the
16277     built-in macro '__AVR_ATmega8__', '-mmcu=attiny261a' defines
16278     '__AVR_ATtiny261A__', etc.
16279
16280     The built-in macros' names follow the scheme '__AVR_DEVICE__' where
16281     DEVICE is the device name as from the AVR user manual.  The
16282     difference between DEVICE in the built-in macro and DEVICE in
16283     '-mmcu=DEVICE' is that the latter is always lowercase.
16284
16285     If DEVICE is not a device but only a core architecture like
16286     'avr51', this macro is not defined.
16287
16288'__AVR_DEVICE_NAME__'
16289     Setting '-mmcu=DEVICE' defines this built-in macro to the device's
16290     name.  For example, with '-mmcu=atmega8' the macro is defined to
16291     'atmega8'.
16292
16293     If DEVICE is not a device but only a core architecture like
16294     'avr51', this macro is not defined.
16295
16296'__AVR_XMEGA__'
16297     The device / architecture belongs to the XMEGA family of devices.
16298
16299'__AVR_HAVE_ELPM__'
16300     The device has the 'ELPM' instruction.
16301
16302'__AVR_HAVE_ELPMX__'
16303     The device has the 'ELPM RN,Z' and 'ELPM RN,Z+' instructions.
16304
16305'__AVR_HAVE_MOVW__'
16306     The device has the 'MOVW' instruction to perform 16-bit
16307     register-register moves.
16308
16309'__AVR_HAVE_LPMX__'
16310     The device has the 'LPM RN,Z' and 'LPM RN,Z+' instructions.
16311
16312'__AVR_HAVE_MUL__'
16313     The device has a hardware multiplier.
16314
16315'__AVR_HAVE_JMP_CALL__'
16316     The device has the 'JMP' and 'CALL' instructions.  This is the case
16317     for devices with more than 8 KiB of program memory.
16318
16319'__AVR_HAVE_EIJMP_EICALL__'
16320'__AVR_3_BYTE_PC__'
16321     The device has the 'EIJMP' and 'EICALL' instructions.  This is the
16322     case for devices with more than 128 KiB of program memory.  This
16323     also means that the program counter (PC) is 3 bytes wide.
16324
16325'__AVR_2_BYTE_PC__'
16326     The program counter (PC) is 2 bytes wide.  This is the case for
16327     devices with up to 128 KiB of program memory.
16328
16329'__AVR_HAVE_8BIT_SP__'
16330'__AVR_HAVE_16BIT_SP__'
16331     The stack pointer (SP) register is treated as 8-bit respectively
16332     16-bit register by the compiler.  The definition of these macros is
16333     affected by '-mtiny-stack'.
16334
16335'__AVR_HAVE_SPH__'
16336'__AVR_SP8__'
16337     The device has the SPH (high part of stack pointer) special
16338     function register or has an 8-bit stack pointer, respectively.  The
16339     definition of these macros is affected by '-mmcu=' and in the cases
16340     of '-mmcu=avr2' and '-mmcu=avr25' also by '-msp8'.
16341
16342'__AVR_HAVE_RAMPD__'
16343'__AVR_HAVE_RAMPX__'
16344'__AVR_HAVE_RAMPY__'
16345'__AVR_HAVE_RAMPZ__'
16346     The device has the 'RAMPD', 'RAMPX', 'RAMPY', 'RAMPZ' special
16347     function register, respectively.
16348
16349'__NO_INTERRUPTS__'
16350     This macro reflects the '-mno-interrupts' command-line option.
16351
16352'__AVR_ERRATA_SKIP__'
16353'__AVR_ERRATA_SKIP_JMP_CALL__'
16354     Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
16355     instructions because of a hardware erratum.  Skip instructions are
16356     'SBRS', 'SBRC', 'SBIS', 'SBIC' and 'CPSE'.  The second macro is
16357     only defined if '__AVR_HAVE_JMP_CALL__' is also set.
16358
16359'__AVR_ISA_RMW__'
16360     The device has Read-Modify-Write instructions (XCH, LAC, LAS and
16361     LAT).
16362
16363'__AVR_SFR_OFFSET__=OFFSET'
16364     Instructions that can address I/O special function registers
16365     directly like 'IN', 'OUT', 'SBI', etc. may use a different address
16366     as if addressed by an instruction to access RAM like 'LD' or 'STS'.
16367     This offset depends on the device architecture and has to be
16368     subtracted from the RAM address in order to get the respective
16369     I/O address.
16370
16371'__AVR_SHORT_CALLS__'
16372     The '-mshort-calls' command line option is set.
16373
16374'__AVR_PM_BASE_ADDRESS__=ADDR'
16375     Some devices support reading from flash memory by means of 'LD*'
16376     instructions.  The flash memory is seen in the data address space
16377     at an offset of '__AVR_PM_BASE_ADDRESS__'.  If this macro is not
16378     defined, this feature is not available.  If defined, the address
16379     space is linear and there is no need to put '.rodata' into RAM.
16380     This is handled by the default linker description file, and is
16381     currently available for 'avrtiny' and 'avrxmega3'.  Even more
16382     convenient, there is no need to use address spaces like '__flash'
16383     or features like attribute 'progmem' and 'pgm_read_*'.
16384
16385'__WITH_AVRLIBC__'
16386     The compiler is configured to be used together with AVR-Libc.  See
16387     the '--with-avrlibc' configure option.
16388
16389
16390File: gcc.info,  Node: Blackfin Options,  Next: C6X Options,  Prev: AVR Options,  Up: Submodel Options
16391
163923.18.6 Blackfin Options
16393-----------------------
16394
16395'-mcpu=CPU[-SIREVISION]'
16396     Specifies the name of the target Blackfin processor.  Currently,
16397     CPU can be one of 'bf512', 'bf514', 'bf516', 'bf518', 'bf522',
16398     'bf523', 'bf524', 'bf525', 'bf526', 'bf527', 'bf531', 'bf532',
16399     'bf533', 'bf534', 'bf536', 'bf537', 'bf538', 'bf539', 'bf542',
16400     'bf544', 'bf547', 'bf548', 'bf549', 'bf542m', 'bf544m', 'bf547m',
16401     'bf548m', 'bf549m', 'bf561', 'bf592'.
16402
16403     The optional SIREVISION specifies the silicon revision of the
16404     target Blackfin processor.  Any workarounds available for the
16405     targeted silicon revision are enabled.  If SIREVISION is 'none', no
16406     workarounds are enabled.  If SIREVISION is 'any', all workarounds
16407     for the targeted processor are enabled.  The '__SILICON_REVISION__'
16408     macro is defined to two hexadecimal digits representing the major
16409     and minor numbers in the silicon revision.  If SIREVISION is
16410     'none', the '__SILICON_REVISION__' is not defined.  If SIREVISION
16411     is 'any', the '__SILICON_REVISION__' is defined to be '0xffff'.  If
16412     this optional SIREVISION is not used, GCC assumes the latest known
16413     silicon revision of the targeted Blackfin processor.
16414
16415     GCC defines a preprocessor macro for the specified CPU.  For the
16416     'bfin-elf' toolchain, this option causes the hardware BSP provided
16417     by libgloss to be linked in if '-msim' is not given.
16418
16419     Without this option, 'bf532' is used as the processor by default.
16420
16421     Note that support for 'bf561' is incomplete.  For 'bf561', only the
16422     preprocessor macro is defined.
16423
16424'-msim'
16425     Specifies that the program will be run on the simulator.  This
16426     causes the simulator BSP provided by libgloss to be linked in.
16427     This option has effect only for 'bfin-elf' toolchain.  Certain
16428     other options, such as '-mid-shared-library' and '-mfdpic', imply
16429     '-msim'.
16430
16431'-momit-leaf-frame-pointer'
16432     Don't keep the frame pointer in a register for leaf functions.
16433     This avoids the instructions to save, set up and restore frame
16434     pointers and makes an extra register available in leaf functions.
16435
16436'-mspecld-anomaly'
16437     When enabled, the compiler ensures that the generated code does not
16438     contain speculative loads after jump instructions.  If this option
16439     is used, '__WORKAROUND_SPECULATIVE_LOADS' is defined.
16440
16441'-mno-specld-anomaly'
16442     Don't generate extra code to prevent speculative loads from
16443     occurring.
16444
16445'-mcsync-anomaly'
16446     When enabled, the compiler ensures that the generated code does not
16447     contain CSYNC or SSYNC instructions too soon after conditional
16448     branches.  If this option is used, '__WORKAROUND_SPECULATIVE_SYNCS'
16449     is defined.
16450
16451'-mno-csync-anomaly'
16452     Don't generate extra code to prevent CSYNC or SSYNC instructions
16453     from occurring too soon after a conditional branch.
16454
16455'-mlow-64k'
16456     When enabled, the compiler is free to take advantage of the
16457     knowledge that the entire program fits into the low 64k of memory.
16458
16459'-mno-low-64k'
16460     Assume that the program is arbitrarily large.  This is the default.
16461
16462'-mstack-check-l1'
16463     Do stack checking using information placed into L1 scratchpad
16464     memory by the uClinux kernel.
16465
16466'-mid-shared-library'
16467     Generate code that supports shared libraries via the library ID
16468     method.  This allows for execute in place and shared libraries in
16469     an environment without virtual memory management.  This option
16470     implies '-fPIC'.  With a 'bfin-elf' target, this option implies
16471     '-msim'.
16472
16473'-mno-id-shared-library'
16474     Generate code that doesn't assume ID-based shared libraries are
16475     being used.  This is the default.
16476
16477'-mleaf-id-shared-library'
16478     Generate code that supports shared libraries via the library ID
16479     method, but assumes that this library or executable won't link
16480     against any other ID shared libraries.  That allows the compiler to
16481     use faster code for jumps and calls.
16482
16483'-mno-leaf-id-shared-library'
16484     Do not assume that the code being compiled won't link against any
16485     ID shared libraries.  Slower code is generated for jump and call
16486     insns.
16487
16488'-mshared-library-id=n'
16489     Specifies the identification number of the ID-based shared library
16490     being compiled.  Specifying a value of 0 generates more compact
16491     code; specifying other values forces the allocation of that number
16492     to the current library but is no more space- or time-efficient than
16493     omitting this option.
16494
16495'-msep-data'
16496     Generate code that allows the data segment to be located in a
16497     different area of memory from the text segment.  This allows for
16498     execute in place in an environment without virtual memory
16499     management by eliminating relocations against the text section.
16500
16501'-mno-sep-data'
16502     Generate code that assumes that the data segment follows the text
16503     segment.  This is the default.
16504
16505'-mlong-calls'
16506'-mno-long-calls'
16507     Tells the compiler to perform function calls by first loading the
16508     address of the function into a register and then performing a
16509     subroutine call on this register.  This switch is needed if the
16510     target function lies outside of the 24-bit addressing range of the
16511     offset-based version of subroutine call instruction.
16512
16513     This feature is not enabled by default.  Specifying
16514     '-mno-long-calls' restores the default behavior.  Note these
16515     switches have no effect on how the compiler generates code to
16516     handle function calls via function pointers.
16517
16518'-mfast-fp'
16519     Link with the fast floating-point library.  This library relaxes
16520     some of the IEEE floating-point standard's rules for checking
16521     inputs against Not-a-Number (NAN), in the interest of performance.
16522
16523'-minline-plt'
16524     Enable inlining of PLT entries in function calls to functions that
16525     are not known to bind locally.  It has no effect without '-mfdpic'.
16526
16527'-mmulticore'
16528     Build a standalone application for multicore Blackfin processors.
16529     This option causes proper start files and link scripts supporting
16530     multicore to be used, and defines the macro '__BFIN_MULTICORE'.  It
16531     can only be used with '-mcpu=bf561[-SIREVISION]'.
16532
16533     This option can be used with '-mcorea' or '-mcoreb', which selects
16534     the one-application-per-core programming model.  Without '-mcorea'
16535     or '-mcoreb', the single-application/dual-core programming model is
16536     used.  In this model, the main function of Core B should be named
16537     as 'coreb_main'.
16538
16539     If this option is not used, the single-core application programming
16540     model is used.
16541
16542'-mcorea'
16543     Build a standalone application for Core A of BF561 when using the
16544     one-application-per-core programming model.  Proper start files and
16545     link scripts are used to support Core A, and the macro
16546     '__BFIN_COREA' is defined.  This option can only be used in
16547     conjunction with '-mmulticore'.
16548
16549'-mcoreb'
16550     Build a standalone application for Core B of BF561 when using the
16551     one-application-per-core programming model.  Proper start files and
16552     link scripts are used to support Core B, and the macro
16553     '__BFIN_COREB' is defined.  When this option is used, 'coreb_main'
16554     should be used instead of 'main'.  This option can only be used in
16555     conjunction with '-mmulticore'.
16556
16557'-msdram'
16558     Build a standalone application for SDRAM. Proper start files and
16559     link scripts are used to put the application into SDRAM, and the
16560     macro '__BFIN_SDRAM' is defined.  The loader should initialize
16561     SDRAM before loading the application.
16562
16563'-micplb'
16564     Assume that ICPLBs are enabled at run time.  This has an effect on
16565     certain anomaly workarounds.  For Linux targets, the default is to
16566     assume ICPLBs are enabled; for standalone applications the default
16567     is off.
16568
16569
16570File: gcc.info,  Node: C6X Options,  Next: CRIS Options,  Prev: Blackfin Options,  Up: Submodel Options
16571
165723.18.7 C6X Options
16573------------------
16574
16575'-march=NAME'
16576     This specifies the name of the target architecture.  GCC uses this
16577     name to determine what kind of instructions it can emit when
16578     generating assembly code.  Permissible names are: 'c62x', 'c64x',
16579     'c64x+', 'c67x', 'c67x+', 'c674x'.
16580
16581'-mbig-endian'
16582     Generate code for a big-endian target.
16583
16584'-mlittle-endian'
16585     Generate code for a little-endian target.  This is the default.
16586
16587'-msim'
16588     Choose startup files and linker script suitable for the simulator.
16589
16590'-msdata=default'
16591     Put small global and static data in the '.neardata' section, which
16592     is pointed to by register 'B14'.  Put small uninitialized global
16593     and static data in the '.bss' section, which is adjacent to the
16594     '.neardata' section.  Put small read-only data into the '.rodata'
16595     section.  The corresponding sections used for large pieces of data
16596     are '.fardata', '.far' and '.const'.
16597
16598'-msdata=all'
16599     Put all data, not just small objects, into the sections reserved
16600     for small data, and use addressing relative to the 'B14' register
16601     to access them.
16602
16603'-msdata=none'
16604     Make no use of the sections reserved for small data, and use
16605     absolute addresses to access all data.  Put all initialized global
16606     and static data in the '.fardata' section, and all uninitialized
16607     data in the '.far' section.  Put all constant data into the
16608     '.const' section.
16609
16610
16611File: gcc.info,  Node: CRIS Options,  Next: CR16 Options,  Prev: C6X Options,  Up: Submodel Options
16612
166133.18.8 CRIS Options
16614-------------------
16615
16616These options are defined specifically for the CRIS ports.
16617
16618'-march=ARCHITECTURE-TYPE'
16619'-mcpu=ARCHITECTURE-TYPE'
16620     Generate code for the specified architecture.  The choices for
16621     ARCHITECTURE-TYPE are 'v3', 'v8' and 'v10' for respectively
16622     ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is 'v0' except for
16623     cris-axis-linux-gnu, where the default is 'v10'.
16624
16625'-mtune=ARCHITECTURE-TYPE'
16626     Tune to ARCHITECTURE-TYPE everything applicable about the generated
16627     code, except for the ABI and the set of available instructions.
16628     The choices for ARCHITECTURE-TYPE are the same as for
16629     '-march=ARCHITECTURE-TYPE'.
16630
16631'-mmax-stack-frame=N'
16632     Warn when the stack frame of a function exceeds N bytes.
16633
16634'-metrax4'
16635'-metrax100'
16636     The options '-metrax4' and '-metrax100' are synonyms for
16637     '-march=v3' and '-march=v8' respectively.
16638
16639'-mmul-bug-workaround'
16640'-mno-mul-bug-workaround'
16641     Work around a bug in the 'muls' and 'mulu' instructions for CPU
16642     models where it applies.  This option is active by default.
16643
16644'-mpdebug'
16645     Enable CRIS-specific verbose debug-related information in the
16646     assembly code.  This option also has the effect of turning off the
16647     '#NO_APP' formatted-code indicator to the assembler at the
16648     beginning of the assembly file.
16649
16650'-mcc-init'
16651     Do not use condition-code results from previous instruction; always
16652     emit compare and test instructions before use of condition codes.
16653
16654'-mno-side-effects'
16655     Do not emit instructions with side effects in addressing modes
16656     other than post-increment.
16657
16658'-mstack-align'
16659'-mno-stack-align'
16660'-mdata-align'
16661'-mno-data-align'
16662'-mconst-align'
16663'-mno-const-align'
16664     These options ('no-' options) arrange (eliminate arrangements) for
16665     the stack frame, individual data and constants to be aligned for
16666     the maximum single data access size for the chosen CPU model.  The
16667     default is to arrange for 32-bit alignment.  ABI details such as
16668     structure layout are not affected by these options.
16669
16670'-m32-bit'
16671'-m16-bit'
16672'-m8-bit'
16673     Similar to the stack- data- and const-align options above, these
16674     options arrange for stack frame, writable data and constants to all
16675     be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
16676     alignment.
16677
16678'-mno-prologue-epilogue'
16679'-mprologue-epilogue'
16680     With '-mno-prologue-epilogue', the normal function prologue and
16681     epilogue which set up the stack frame are omitted and no return
16682     instructions or return sequences are generated in the code.  Use
16683     this option only together with visual inspection of the compiled
16684     code: no warnings or errors are generated when call-saved registers
16685     must be saved, or storage for local variables needs to be
16686     allocated.
16687
16688'-mno-gotplt'
16689'-mgotplt'
16690     With '-fpic' and '-fPIC', don't generate (do generate) instruction
16691     sequences that load addresses for functions from the PLT part of
16692     the GOT rather than (traditional on other architectures) calls to
16693     the PLT.  The default is '-mgotplt'.
16694
16695'-melf'
16696     Legacy no-op option only recognized with the cris-axis-elf and
16697     cris-axis-linux-gnu targets.
16698
16699'-mlinux'
16700     Legacy no-op option only recognized with the cris-axis-linux-gnu
16701     target.
16702
16703'-sim'
16704     This option, recognized for the cris-axis-elf, arranges to link
16705     with input-output functions from a simulator library.  Code,
16706     initialized data and zero-initialized data are allocated
16707     consecutively.
16708
16709'-sim2'
16710     Like '-sim', but pass linker options to locate initialized data at
16711     0x40000000 and zero-initialized data at 0x80000000.
16712
16713
16714File: gcc.info,  Node: CR16 Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options
16715
167163.18.9 CR16 Options
16717-------------------
16718
16719These options are defined specifically for the CR16 ports.
16720
16721'-mmac'
16722     Enable the use of multiply-accumulate instructions.  Disabled by
16723     default.
16724
16725'-mcr16cplus'
16726'-mcr16c'
16727     Generate code for CR16C or CR16C+ architecture.  CR16C+
16728     architecture is default.
16729
16730'-msim'
16731     Links the library libsim.a which is in compatible with simulator.
16732     Applicable to ELF compiler only.
16733
16734'-mint32'
16735     Choose integer type as 32-bit wide.
16736
16737'-mbit-ops'
16738     Generates 'sbit'/'cbit' instructions for bit manipulations.
16739
16740'-mdata-model=MODEL'
16741     Choose a data model.  The choices for MODEL are 'near', 'far' or
16742     'medium'.  'medium' is default.  However, 'far' is not valid with
16743     '-mcr16c', as the CR16C architecture does not support the far data
16744     model.
16745
16746
16747File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CR16 Options,  Up: Submodel Options
16748
167493.18.10 Darwin Options
16750----------------------
16751
16752These options are defined for all architectures running the Darwin
16753operating system.
16754
16755 FSF GCC on Darwin does not create "fat" object files; it creates an
16756object file for the single architecture that GCC was built to target.
16757Apple's GCC on Darwin does create "fat" files if multiple '-arch'
16758options are used; it does so by running the compiler or linker multiple
16759times and joining the results together with 'lipo'.
16760
16761 The subtype of the file created (like 'ppc7400' or 'ppc970' or 'i686')
16762is determined by the flags that specify the ISA that GCC is targeting,
16763like '-mcpu' or '-march'.  The '-force_cpusubtype_ALL' option can be
16764used to override this.
16765
16766 The Darwin tools vary in their behavior when presented with an ISA
16767mismatch.  The assembler, 'as', only permits instructions to be used
16768that are valid for the subtype of the file it is generating, so you
16769cannot put 64-bit instructions in a 'ppc750' object file.  The linker
16770for shared libraries, '/usr/bin/libtool', fails and prints an error if
16771asked to create a shared library with a less restrictive subtype than
16772its input files (for instance, trying to put a 'ppc970' object file in a
16773'ppc7400' library).  The linker for executables, 'ld', quietly gives the
16774executable the most restrictive subtype of any of its input files.
16775
16776'-FDIR'
16777     Add the framework directory DIR to the head of the list of
16778     directories to be searched for header files.  These directories are
16779     interleaved with those specified by '-I' options and are scanned in
16780     a left-to-right order.
16781
16782     A framework directory is a directory with frameworks in it.  A
16783     framework is a directory with a 'Headers' and/or 'PrivateHeaders'
16784     directory contained directly in it that ends in '.framework'.  The
16785     name of a framework is the name of this directory excluding the
16786     '.framework'.  Headers associated with the framework are found in
16787     one of those two directories, with 'Headers' being searched first.
16788     A subframework is a framework directory that is in a framework's
16789     'Frameworks' directory.  Includes of subframework headers can only
16790     appear in a header of a framework that contains the subframework,
16791     or in a sibling subframework header.  Two subframeworks are
16792     siblings if they occur in the same framework.  A subframework
16793     should not have the same name as a framework; a warning is issued
16794     if this is violated.  Currently a subframework cannot have
16795     subframeworks; in the future, the mechanism may be extended to
16796     support this.  The standard frameworks can be found in
16797     '/System/Library/Frameworks' and '/Library/Frameworks'.  An example
16798     include looks like '#include <Framework/header.h>', where
16799     'Framework' denotes the name of the framework and 'header.h' is
16800     found in the 'PrivateHeaders' or 'Headers' directory.
16801
16802'-iframeworkDIR'
16803     Like '-F' except the directory is a treated as a system directory.
16804     The main difference between this '-iframework' and '-F' is that
16805     with '-iframework' the compiler does not warn about constructs
16806     contained within header files found via DIR.  This option is valid
16807     only for the C family of languages.
16808
16809'-gused'
16810     Emit debugging information for symbols that are used.  For stabs
16811     debugging format, this enables '-feliminate-unused-debug-symbols'.
16812     This is by default ON.
16813
16814'-gfull'
16815     Emit debugging information for all symbols and types.
16816
16817'-mmacosx-version-min=VERSION'
16818     The earliest version of MacOS X that this executable will run on is
16819     VERSION.  Typical values of VERSION include '10.1', '10.2', and
16820     '10.3.9'.
16821
16822     If the compiler was built to use the system's headers by default,
16823     then the default for this option is the system version on which the
16824     compiler is running, otherwise the default is to make choices that
16825     are compatible with as many systems and code bases as possible.
16826
16827'-mkernel'
16828     Enable kernel development mode.  The '-mkernel' option sets
16829     '-static', '-fno-common', '-fno-use-cxa-atexit', '-fno-exceptions',
16830     '-fno-non-call-exceptions', '-fapple-kext', '-fno-weak' and
16831     '-fno-rtti' where applicable.  This mode also sets '-mno-altivec',
16832     '-msoft-float', '-fno-builtin' and '-mlong-branch' for PowerPC
16833     targets.
16834
16835'-mone-byte-bool'
16836     Override the defaults for 'bool' so that 'sizeof(bool)==1'.  By
16837     default 'sizeof(bool)' is '4' when compiling for Darwin/PowerPC and
16838     '1' when compiling for Darwin/x86, so this option has no effect on
16839     x86.
16840
16841     *Warning:* The '-mone-byte-bool' switch causes GCC to generate code
16842     that is not binary compatible with code generated without that
16843     switch.  Using this switch may require recompiling all other
16844     modules in a program, including system libraries.  Use this switch
16845     to conform to a non-default data model.
16846
16847'-mfix-and-continue'
16848'-ffix-and-continue'
16849'-findirect-data'
16850     Generate code suitable for fast turnaround development, such as to
16851     allow GDB to dynamically load '.o' files into already-running
16852     programs.  '-findirect-data' and '-ffix-and-continue' are provided
16853     for backwards compatibility.
16854
16855'-all_load'
16856     Loads all members of static archive libraries.  See man ld(1) for
16857     more information.
16858
16859'-arch_errors_fatal'
16860     Cause the errors having to do with files that have the wrong
16861     architecture to be fatal.
16862
16863'-bind_at_load'
16864     Causes the output file to be marked such that the dynamic linker
16865     will bind all undefined references when the file is loaded or
16866     launched.
16867
16868'-bundle'
16869     Produce a Mach-o bundle format file.  See man ld(1) for more
16870     information.
16871
16872'-bundle_loader EXECUTABLE'
16873     This option specifies the EXECUTABLE that will load the build
16874     output file being linked.  See man ld(1) for more information.
16875
16876'-dynamiclib'
16877     When passed this option, GCC produces a dynamic library instead of
16878     an executable when linking, using the Darwin 'libtool' command.
16879
16880'-force_cpusubtype_ALL'
16881     This causes GCC's output file to have the 'ALL' subtype, instead of
16882     one controlled by the '-mcpu' or '-march' option.
16883
16884'-allowable_client CLIENT_NAME'
16885'-client_name'
16886'-compatibility_version'
16887'-current_version'
16888'-dead_strip'
16889'-dependency-file'
16890'-dylib_file'
16891'-dylinker_install_name'
16892'-dynamic'
16893'-exported_symbols_list'
16894'-filelist'
16895'-flat_namespace'
16896'-force_flat_namespace'
16897'-headerpad_max_install_names'
16898'-image_base'
16899'-init'
16900'-install_name'
16901'-keep_private_externs'
16902'-multi_module'
16903'-multiply_defined'
16904'-multiply_defined_unused'
16905'-noall_load'
16906'-no_dead_strip_inits_and_terms'
16907'-nofixprebinding'
16908'-nomultidefs'
16909'-noprebind'
16910'-noseglinkedit'
16911'-pagezero_size'
16912'-prebind'
16913'-prebind_all_twolevel_modules'
16914'-private_bundle'
16915'-read_only_relocs'
16916'-sectalign'
16917'-sectobjectsymbols'
16918'-whyload'
16919'-seg1addr'
16920'-sectcreate'
16921'-sectobjectsymbols'
16922'-sectorder'
16923'-segaddr'
16924'-segs_read_only_addr'
16925'-segs_read_write_addr'
16926'-seg_addr_table'
16927'-seg_addr_table_filename'
16928'-seglinkedit'
16929'-segprot'
16930'-segs_read_only_addr'
16931'-segs_read_write_addr'
16932'-single_module'
16933'-static'
16934'-sub_library'
16935'-sub_umbrella'
16936'-twolevel_namespace'
16937'-umbrella'
16938'-undefined'
16939'-unexported_symbols_list'
16940'-weak_reference_mismatches'
16941'-whatsloaded'
16942     These options are passed to the Darwin linker.  The Darwin linker
16943     man page describes them in detail.
16944
16945
16946File: gcc.info,  Node: DEC Alpha Options,  Next: FR30 Options,  Prev: Darwin Options,  Up: Submodel Options
16947
169483.18.11 DEC Alpha Options
16949-------------------------
16950
16951These '-m' options are defined for the DEC Alpha implementations:
16952
16953'-mno-soft-float'
16954'-msoft-float'
16955     Use (do not use) the hardware floating-point instructions for
16956     floating-point operations.  When '-msoft-float' is specified,
16957     functions in 'libgcc.a' are used to perform floating-point
16958     operations.  Unless they are replaced by routines that emulate the
16959     floating-point operations, or compiled in such a way as to call
16960     such emulations routines, these routines issue floating-point
16961     operations.  If you are compiling for an Alpha without
16962     floating-point operations, you must ensure that the library is
16963     built so as not to call them.
16964
16965     Note that Alpha implementations without floating-point operations
16966     are required to have floating-point registers.
16967
16968'-mfp-reg'
16969'-mno-fp-regs'
16970     Generate code that uses (does not use) the floating-point register
16971     set.  '-mno-fp-regs' implies '-msoft-float'.  If the floating-point
16972     register set is not used, floating-point operands are passed in
16973     integer registers as if they were integers and floating-point
16974     results are passed in '$0' instead of '$f0'.  This is a
16975     non-standard calling sequence, so any function with a
16976     floating-point argument or return value called by code compiled
16977     with '-mno-fp-regs' must also be compiled with that option.
16978
16979     A typical use of this option is building a kernel that does not
16980     use, and hence need not save and restore, any floating-point
16981     registers.
16982
16983'-mieee'
16984     The Alpha architecture implements floating-point hardware optimized
16985     for maximum performance.  It is mostly compliant with the IEEE
16986     floating-point standard.  However, for full compliance, software
16987     assistance is required.  This option generates code fully
16988     IEEE-compliant code _except_ that the INEXACT-FLAG is not
16989     maintained (see below).  If this option is turned on, the
16990     preprocessor macro '_IEEE_FP' is defined during compilation.  The
16991     resulting code is less efficient but is able to correctly support
16992     denormalized numbers and exceptional IEEE values such as
16993     not-a-number and plus/minus infinity.  Other Alpha compilers call
16994     this option '-ieee_with_no_inexact'.
16995
16996'-mieee-with-inexact'
16997     This is like '-mieee' except the generated code also maintains the
16998     IEEE INEXACT-FLAG.  Turning on this option causes the generated
16999     code to implement fully-compliant IEEE math.  In addition to
17000     '_IEEE_FP', '_IEEE_FP_EXACT' is defined as a preprocessor macro.
17001     On some Alpha implementations the resulting code may execute
17002     significantly slower than the code generated by default.  Since
17003     there is very little code that depends on the INEXACT-FLAG, you
17004     should normally not specify this option.  Other Alpha compilers
17005     call this option '-ieee_with_inexact'.
17006
17007'-mfp-trap-mode=TRAP-MODE'
17008     This option controls what floating-point related traps are enabled.
17009     Other Alpha compilers call this option '-fptm TRAP-MODE'.  The trap
17010     mode can be set to one of four values:
17011
17012     'n'
17013          This is the default (normal) setting.  The only traps that are
17014          enabled are the ones that cannot be disabled in software
17015          (e.g., division by zero trap).
17016
17017     'u'
17018          In addition to the traps enabled by 'n', underflow traps are
17019          enabled as well.
17020
17021     'su'
17022          Like 'u', but the instructions are marked to be safe for
17023          software completion (see Alpha architecture manual for
17024          details).
17025
17026     'sui'
17027          Like 'su', but inexact traps are enabled as well.
17028
17029'-mfp-rounding-mode=ROUNDING-MODE'
17030     Selects the IEEE rounding mode.  Other Alpha compilers call this
17031     option '-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
17032
17033     'n'
17034          Normal IEEE rounding mode.  Floating-point numbers are rounded
17035          towards the nearest machine number or towards the even machine
17036          number in case of a tie.
17037
17038     'm'
17039          Round towards minus infinity.
17040
17041     'c'
17042          Chopped rounding mode.  Floating-point numbers are rounded
17043          towards zero.
17044
17045     'd'
17046          Dynamic rounding mode.  A field in the floating-point control
17047          register (FPCR, see Alpha architecture reference manual)
17048          controls the rounding mode in effect.  The C library
17049          initializes this register for rounding towards plus infinity.
17050          Thus, unless your program modifies the FPCR, 'd' corresponds
17051          to round towards plus infinity.
17052
17053'-mtrap-precision=TRAP-PRECISION'
17054     In the Alpha architecture, floating-point traps are imprecise.
17055     This means without software assistance it is impossible to recover
17056     from a floating trap and program execution normally needs to be
17057     terminated.  GCC can generate code that can assist operating system
17058     trap handlers in determining the exact location that caused a
17059     floating-point trap.  Depending on the requirements of an
17060     application, different levels of precisions can be selected:
17061
17062     'p'
17063          Program precision.  This option is the default and means a
17064          trap handler can only identify which program caused a
17065          floating-point exception.
17066
17067     'f'
17068          Function precision.  The trap handler can determine the
17069          function that caused a floating-point exception.
17070
17071     'i'
17072          Instruction precision.  The trap handler can determine the
17073          exact instruction that caused a floating-point exception.
17074
17075     Other Alpha compilers provide the equivalent options called
17076     '-scope_safe' and '-resumption_safe'.
17077
17078'-mieee-conformant'
17079     This option marks the generated code as IEEE conformant.  You must
17080     not use this option unless you also specify '-mtrap-precision=i'
17081     and either '-mfp-trap-mode=su' or '-mfp-trap-mode=sui'.  Its only
17082     effect is to emit the line '.eflag 48' in the function prologue of
17083     the generated assembly file.
17084
17085'-mbuild-constants'
17086     Normally GCC examines a 32- or 64-bit integer constant to see if it
17087     can construct it from smaller constants in two or three
17088     instructions.  If it cannot, it outputs the constant as a literal
17089     and generates code to load it from the data segment at run time.
17090
17091     Use this option to require GCC to construct _all_ integer constants
17092     using code, even if it takes more instructions (the maximum is
17093     six).
17094
17095     You typically use this option to build a shared library dynamic
17096     loader.  Itself a shared library, it must relocate itself in memory
17097     before it can find the variables and constants in its own data
17098     segment.
17099
17100'-mbwx'
17101'-mno-bwx'
17102'-mcix'
17103'-mno-cix'
17104'-mfix'
17105'-mno-fix'
17106'-mmax'
17107'-mno-max'
17108     Indicate whether GCC should generate code to use the optional BWX,
17109     CIX, FIX and MAX instruction sets.  The default is to use the
17110     instruction sets supported by the CPU type specified via '-mcpu='
17111     option or that of the CPU on which GCC was built if none is
17112     specified.
17113
17114'-mfloat-vax'
17115'-mfloat-ieee'
17116     Generate code that uses (does not use) VAX F and G floating-point
17117     arithmetic instead of IEEE single and double precision.
17118
17119'-mexplicit-relocs'
17120'-mno-explicit-relocs'
17121     Older Alpha assemblers provided no way to generate symbol
17122     relocations except via assembler macros.  Use of these macros does
17123     not allow optimal instruction scheduling.  GNU binutils as of
17124     version 2.12 supports a new syntax that allows the compiler to
17125     explicitly mark which relocations should apply to which
17126     instructions.  This option is mostly useful for debugging, as GCC
17127     detects the capabilities of the assembler when it is built and sets
17128     the default accordingly.
17129
17130'-msmall-data'
17131'-mlarge-data'
17132     When '-mexplicit-relocs' is in effect, static data is accessed via
17133     "gp-relative" relocations.  When '-msmall-data' is used, objects 8
17134     bytes long or smaller are placed in a "small data area" (the
17135     '.sdata' and '.sbss' sections) and are accessed via 16-bit
17136     relocations off of the '$gp' register.  This limits the size of the
17137     small data area to 64KB, but allows the variables to be directly
17138     accessed via a single instruction.
17139
17140     The default is '-mlarge-data'.  With this option the data area is
17141     limited to just below 2GB.  Programs that require more than 2GB of
17142     data must use 'malloc' or 'mmap' to allocate the data in the heap
17143     instead of in the program's data segment.
17144
17145     When generating code for shared libraries, '-fpic' implies
17146     '-msmall-data' and '-fPIC' implies '-mlarge-data'.
17147
17148'-msmall-text'
17149'-mlarge-text'
17150     When '-msmall-text' is used, the compiler assumes that the code of
17151     the entire program (or shared library) fits in 4MB, and is thus
17152     reachable with a branch instruction.  When '-msmall-data' is used,
17153     the compiler can assume that all local symbols share the same '$gp'
17154     value, and thus reduce the number of instructions required for a
17155     function call from 4 to 1.
17156
17157     The default is '-mlarge-text'.
17158
17159'-mcpu=CPU_TYPE'
17160     Set the instruction set and instruction scheduling parameters for
17161     machine type CPU_TYPE.  You can specify either the 'EV' style name
17162     or the corresponding chip number.  GCC supports scheduling
17163     parameters for the EV4, EV5 and EV6 family of processors and
17164     chooses the default values for the instruction set from the
17165     processor you specify.  If you do not specify a processor type, GCC
17166     defaults to the processor on which the compiler was built.
17167
17168     Supported values for CPU_TYPE are
17169
17170     'ev4'
17171     'ev45'
17172     '21064'
17173          Schedules as an EV4 and has no instruction set extensions.
17174
17175     'ev5'
17176     '21164'
17177          Schedules as an EV5 and has no instruction set extensions.
17178
17179     'ev56'
17180     '21164a'
17181          Schedules as an EV5 and supports the BWX extension.
17182
17183     'pca56'
17184     '21164pc'
17185     '21164PC'
17186          Schedules as an EV5 and supports the BWX and MAX extensions.
17187
17188     'ev6'
17189     '21264'
17190          Schedules as an EV6 and supports the BWX, FIX, and MAX
17191          extensions.
17192
17193     'ev67'
17194     '21264a'
17195          Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
17196          extensions.
17197
17198     Native toolchains also support the value 'native', which selects
17199     the best architecture option for the host processor.
17200     '-mcpu=native' has no effect if GCC does not recognize the
17201     processor.
17202
17203'-mtune=CPU_TYPE'
17204     Set only the instruction scheduling parameters for machine type
17205     CPU_TYPE.  The instruction set is not changed.
17206
17207     Native toolchains also support the value 'native', which selects
17208     the best architecture option for the host processor.
17209     '-mtune=native' has no effect if GCC does not recognize the
17210     processor.
17211
17212'-mmemory-latency=TIME'
17213     Sets the latency the scheduler should assume for typical memory
17214     references as seen by the application.  This number is highly
17215     dependent on the memory access patterns used by the application and
17216     the size of the external cache on the machine.
17217
17218     Valid options for TIME are
17219
17220     'NUMBER'
17221          A decimal number representing clock cycles.
17222
17223     'L1'
17224     'L2'
17225     'L3'
17226     'main'
17227          The compiler contains estimates of the number of clock cycles
17228          for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
17229          (also called Dcache, Scache, and Bcache), as well as to main
17230          memory.  Note that L3 is only valid for EV5.
17231
17232
17233File: gcc.info,  Node: FR30 Options,  Next: FT32 Options,  Prev: DEC Alpha Options,  Up: Submodel Options
17234
172353.18.12 FR30 Options
17236--------------------
17237
17238These options are defined specifically for the FR30 port.
17239
17240'-msmall-model'
17241     Use the small address space model.  This can produce smaller code,
17242     but it does assume that all symbolic values and addresses fit into
17243     a 20-bit range.
17244
17245'-mno-lsim'
17246     Assume that runtime support has been provided and so there is no
17247     need to include the simulator library ('libsim.a') on the linker
17248     command line.
17249
17250
17251File: gcc.info,  Node: FT32 Options,  Next: FRV Options,  Prev: FR30 Options,  Up: Submodel Options
17252
172533.18.13 FT32 Options
17254--------------------
17255
17256These options are defined specifically for the FT32 port.
17257
17258'-msim'
17259     Specifies that the program will be run on the simulator.  This
17260     causes an alternate runtime startup and library to be linked.  You
17261     must not use this option when generating programs that will run on
17262     real hardware; you must provide your own runtime library for
17263     whatever I/O functions are needed.
17264
17265'-mlra'
17266     Enable Local Register Allocation.  This is still experimental for
17267     FT32, so by default the compiler uses standard reload.
17268
17269'-mnodiv'
17270     Do not use div and mod instructions.
17271
17272'-mft32b'
17273     Enable use of the extended instructions of the FT32B processor.
17274
17275'-mcompress'
17276     Compress all code using the Ft32B code compression scheme.
17277
17278'-mnopm'
17279     Do not generate code that reads program memory.
17280
17281
17282File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FT32 Options,  Up: Submodel Options
17283
172843.18.14 FRV Options
17285-------------------
17286
17287'-mgpr-32'
17288
17289     Only use the first 32 general-purpose registers.
17290
17291'-mgpr-64'
17292
17293     Use all 64 general-purpose registers.
17294
17295'-mfpr-32'
17296
17297     Use only the first 32 floating-point registers.
17298
17299'-mfpr-64'
17300
17301     Use all 64 floating-point registers.
17302
17303'-mhard-float'
17304
17305     Use hardware instructions for floating-point operations.
17306
17307'-msoft-float'
17308
17309     Use library routines for floating-point operations.
17310
17311'-malloc-cc'
17312
17313     Dynamically allocate condition code registers.
17314
17315'-mfixed-cc'
17316
17317     Do not try to dynamically allocate condition code registers, only
17318     use 'icc0' and 'fcc0'.
17319
17320'-mdword'
17321
17322     Change ABI to use double word insns.
17323
17324'-mno-dword'
17325
17326     Do not use double word instructions.
17327
17328'-mdouble'
17329
17330     Use floating-point double instructions.
17331
17332'-mno-double'
17333
17334     Do not use floating-point double instructions.
17335
17336'-mmedia'
17337
17338     Use media instructions.
17339
17340'-mno-media'
17341
17342     Do not use media instructions.
17343
17344'-mmuladd'
17345
17346     Use multiply and add/subtract instructions.
17347
17348'-mno-muladd'
17349
17350     Do not use multiply and add/subtract instructions.
17351
17352'-mfdpic'
17353
17354     Select the FDPIC ABI, which uses function descriptors to represent
17355     pointers to functions.  Without any PIC/PIE-related options, it
17356     implies '-fPIE'.  With '-fpic' or '-fpie', it assumes GOT entries
17357     and small data are within a 12-bit range from the GOT base address;
17358     with '-fPIC' or '-fPIE', GOT offsets are computed with 32 bits.
17359     With a 'bfin-elf' target, this option implies '-msim'.
17360
17361'-minline-plt'
17362
17363     Enable inlining of PLT entries in function calls to functions that
17364     are not known to bind locally.  It has no effect without '-mfdpic'.
17365     It's enabled by default if optimizing for speed and compiling for
17366     shared libraries (i.e., '-fPIC' or '-fpic'), or when an
17367     optimization option such as '-O3' or above is present in the
17368     command line.
17369
17370'-mTLS'
17371
17372     Assume a large TLS segment when generating thread-local code.
17373
17374'-mtls'
17375
17376     Do not assume a large TLS segment when generating thread-local
17377     code.
17378
17379'-mgprel-ro'
17380
17381     Enable the use of 'GPREL' relocations in the FDPIC ABI for data
17382     that is known to be in read-only sections.  It's enabled by
17383     default, except for '-fpic' or '-fpie': even though it may help
17384     make the global offset table smaller, it trades 1 instruction for
17385     4.  With '-fPIC' or '-fPIE', it trades 3 instructions for 4, one of
17386     which may be shared by multiple symbols, and it avoids the need for
17387     a GOT entry for the referenced symbol, so it's more likely to be a
17388     win.  If it is not, '-mno-gprel-ro' can be used to disable it.
17389
17390'-multilib-library-pic'
17391
17392     Link with the (library, not FD) pic libraries.  It's implied by
17393     '-mlibrary-pic', as well as by '-fPIC' and '-fpic' without
17394     '-mfdpic'.  You should never have to use it explicitly.
17395
17396'-mlinked-fp'
17397
17398     Follow the EABI requirement of always creating a frame pointer
17399     whenever a stack frame is allocated.  This option is enabled by
17400     default and can be disabled with '-mno-linked-fp'.
17401
17402'-mlong-calls'
17403
17404     Use indirect addressing to call functions outside the current
17405     compilation unit.  This allows the functions to be placed anywhere
17406     within the 32-bit address space.
17407
17408'-malign-labels'
17409
17410     Try to align labels to an 8-byte boundary by inserting NOPs into
17411     the previous packet.  This option only has an effect when VLIW
17412     packing is enabled.  It doesn't create new packets; it merely adds
17413     NOPs to existing ones.
17414
17415'-mlibrary-pic'
17416
17417     Generate position-independent EABI code.
17418
17419'-macc-4'
17420
17421     Use only the first four media accumulator registers.
17422
17423'-macc-8'
17424
17425     Use all eight media accumulator registers.
17426
17427'-mpack'
17428
17429     Pack VLIW instructions.
17430
17431'-mno-pack'
17432
17433     Do not pack VLIW instructions.
17434
17435'-mno-eflags'
17436
17437     Do not mark ABI switches in e_flags.
17438
17439'-mcond-move'
17440
17441     Enable the use of conditional-move instructions (default).
17442
17443     This switch is mainly for debugging the compiler and will likely be
17444     removed in a future version.
17445
17446'-mno-cond-move'
17447
17448     Disable the use of conditional-move instructions.
17449
17450     This switch is mainly for debugging the compiler and will likely be
17451     removed in a future version.
17452
17453'-mscc'
17454
17455     Enable the use of conditional set instructions (default).
17456
17457     This switch is mainly for debugging the compiler and will likely be
17458     removed in a future version.
17459
17460'-mno-scc'
17461
17462     Disable the use of conditional set instructions.
17463
17464     This switch is mainly for debugging the compiler and will likely be
17465     removed in a future version.
17466
17467'-mcond-exec'
17468
17469     Enable the use of conditional execution (default).
17470
17471     This switch is mainly for debugging the compiler and will likely be
17472     removed in a future version.
17473
17474'-mno-cond-exec'
17475
17476     Disable the use of conditional execution.
17477
17478     This switch is mainly for debugging the compiler and will likely be
17479     removed in a future version.
17480
17481'-mvliw-branch'
17482
17483     Run a pass to pack branches into VLIW instructions (default).
17484
17485     This switch is mainly for debugging the compiler and will likely be
17486     removed in a future version.
17487
17488'-mno-vliw-branch'
17489
17490     Do not run a pass to pack branches into VLIW instructions.
17491
17492     This switch is mainly for debugging the compiler and will likely be
17493     removed in a future version.
17494
17495'-mmulti-cond-exec'
17496
17497     Enable optimization of '&&' and '||' in conditional execution
17498     (default).
17499
17500     This switch is mainly for debugging the compiler and will likely be
17501     removed in a future version.
17502
17503'-mno-multi-cond-exec'
17504
17505     Disable optimization of '&&' and '||' in conditional execution.
17506
17507     This switch is mainly for debugging the compiler and will likely be
17508     removed in a future version.
17509
17510'-mnested-cond-exec'
17511
17512     Enable nested conditional execution optimizations (default).
17513
17514     This switch is mainly for debugging the compiler and will likely be
17515     removed in a future version.
17516
17517'-mno-nested-cond-exec'
17518
17519     Disable nested conditional execution optimizations.
17520
17521     This switch is mainly for debugging the compiler and will likely be
17522     removed in a future version.
17523
17524'-moptimize-membar'
17525
17526     This switch removes redundant 'membar' instructions from the
17527     compiler-generated code.  It is enabled by default.
17528
17529'-mno-optimize-membar'
17530
17531     This switch disables the automatic removal of redundant 'membar'
17532     instructions from the generated code.
17533
17534'-mtomcat-stats'
17535
17536     Cause gas to print out tomcat statistics.
17537
17538'-mcpu=CPU'
17539
17540     Select the processor type for which to generate code.  Possible
17541     values are 'frv', 'fr550', 'tomcat', 'fr500', 'fr450', 'fr405',
17542     'fr400', 'fr300' and 'simple'.
17543
17544
17545File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
17546
175473.18.15 GNU/Linux Options
17548-------------------------
17549
17550These '-m' options are defined for GNU/Linux targets:
17551
17552'-mglibc'
17553     Use the GNU C library.  This is the default except on
17554     '*-*-linux-*uclibc*', '*-*-linux-*musl*' and '*-*-linux-*android*'
17555     targets.
17556
17557'-muclibc'
17558     Use uClibc C library.  This is the default on '*-*-linux-*uclibc*'
17559     targets.
17560
17561'-mmusl'
17562     Use the musl C library.  This is the default on '*-*-linux-*musl*'
17563     targets.
17564
17565'-mbionic'
17566     Use Bionic C library.  This is the default on '*-*-linux-*android*'
17567     targets.
17568
17569'-mandroid'
17570     Compile code compatible with Android platform.  This is the default
17571     on '*-*-linux-*android*' targets.
17572
17573     When compiling, this option enables '-mbionic', '-fPIC',
17574     '-fno-exceptions' and '-fno-rtti' by default.  When linking, this
17575     option makes the GCC driver pass Android-specific options to the
17576     linker.  Finally, this option causes the preprocessor macro
17577     '__ANDROID__' to be defined.
17578
17579'-tno-android-cc'
17580     Disable compilation effects of '-mandroid', i.e., do not enable
17581     '-mbionic', '-fPIC', '-fno-exceptions' and '-fno-rtti' by default.
17582
17583'-tno-android-ld'
17584     Disable linking effects of '-mandroid', i.e., pass standard Linux
17585     linking options to the linker.
17586
17587
17588File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
17589
175903.18.16 H8/300 Options
17591----------------------
17592
17593These '-m' options are defined for the H8/300 implementations:
17594
17595'-mrelax'
17596     Shorten some address references at link time, when possible; uses
17597     the linker option '-relax'.  *Note 'ld' and the H8/300: (ld)H8/300,
17598     for a fuller description.
17599
17600'-mh'
17601     Generate code for the H8/300H.
17602
17603'-ms'
17604     Generate code for the H8S.
17605
17606'-mn'
17607     Generate code for the H8S and H8/300H in the normal mode.  This
17608     switch must be used either with '-mh' or '-ms'.
17609
17610'-ms2600'
17611     Generate code for the H8S/2600.  This switch must be used with
17612     '-ms'.
17613
17614'-mexr'
17615     Extended registers are stored on stack before execution of function
17616     with monitor attribute.  Default option is '-mexr'.  This option is
17617     valid only for H8S targets.
17618
17619'-mno-exr'
17620     Extended registers are not stored on stack before execution of
17621     function with monitor attribute.  Default option is '-mno-exr'.
17622     This option is valid only for H8S targets.
17623
17624'-mint32'
17625     Make 'int' data 32 bits by default.
17626
17627'-malign-300'
17628     On the H8/300H and H8S, use the same alignment rules as for the
17629     H8/300.  The default for the H8/300H and H8S is to align longs and
17630     floats on 4-byte boundaries.  '-malign-300' causes them to be
17631     aligned on 2-byte boundaries.  This option has no effect on the
17632     H8/300.
17633
17634
17635File: gcc.info,  Node: HPPA Options,  Next: IA-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
17636
176373.18.17 HPPA Options
17638--------------------
17639
17640These '-m' options are defined for the HPPA family of computers:
17641
17642'-march=ARCHITECTURE-TYPE'
17643     Generate code for the specified architecture.  The choices for
17644     ARCHITECTURE-TYPE are '1.0' for PA 1.0, '1.1' for PA 1.1, and '2.0'
17645     for PA 2.0 processors.  Refer to '/usr/lib/sched.models' on an
17646     HP-UX system to determine the proper architecture option for your
17647     machine.  Code compiled for lower numbered architectures runs on
17648     higher numbered architectures, but not the other way around.
17649
17650'-mpa-risc-1-0'
17651'-mpa-risc-1-1'
17652'-mpa-risc-2-0'
17653     Synonyms for '-march=1.0', '-march=1.1', and '-march=2.0'
17654     respectively.
17655
17656'-mcaller-copies'
17657     The caller copies function arguments passed by hidden reference.
17658     This option should be used with care as it is not compatible with
17659     the default 32-bit runtime.  However, only aggregates larger than
17660     eight bytes are passed by hidden reference and the option provides
17661     better compatibility with OpenMP.
17662
17663'-mjump-in-delay'
17664     This option is ignored and provided for compatibility purposes
17665     only.
17666
17667'-mdisable-fpregs'
17668     Prevent floating-point registers from being used in any manner.
17669     This is necessary for compiling kernels that perform lazy context
17670     switching of floating-point registers.  If you use this option and
17671     attempt to perform floating-point operations, the compiler aborts.
17672
17673'-mdisable-indexing'
17674     Prevent the compiler from using indexing address modes.  This
17675     avoids some rather obscure problems when compiling MIG generated
17676     code under MACH.
17677
17678'-mno-space-regs'
17679     Generate code that assumes the target has no space registers.  This
17680     allows GCC to generate faster indirect calls and use unscaled index
17681     address modes.
17682
17683     Such code is suitable for level 0 PA systems and kernels.
17684
17685'-mfast-indirect-calls'
17686     Generate code that assumes calls never cross space boundaries.
17687     This allows GCC to emit code that performs faster indirect calls.
17688
17689     This option does not work in the presence of shared libraries or
17690     nested functions.
17691
17692'-mfixed-range=REGISTER-RANGE'
17693     Generate code treating the given register range as fixed registers.
17694     A fixed register is one that the register allocator cannot use.
17695     This is useful when compiling kernel code.  A register range is
17696     specified as two registers separated by a dash.  Multiple register
17697     ranges can be specified separated by a comma.
17698
17699'-mlong-load-store'
17700     Generate 3-instruction load and store sequences as sometimes
17701     required by the HP-UX 10 linker.  This is equivalent to the '+k'
17702     option to the HP compilers.
17703
17704'-mportable-runtime'
17705     Use the portable calling conventions proposed by HP for ELF
17706     systems.
17707
17708'-mgas'
17709     Enable the use of assembler directives only GAS understands.
17710
17711'-mschedule=CPU-TYPE'
17712     Schedule code according to the constraints for the machine type
17713     CPU-TYPE.  The choices for CPU-TYPE are '700' '7100', '7100LC',
17714     '7200', '7300' and '8000'.  Refer to '/usr/lib/sched.models' on an
17715     HP-UX system to determine the proper scheduling option for your
17716     machine.  The default scheduling is '8000'.
17717
17718'-mlinker-opt'
17719     Enable the optimization pass in the HP-UX linker.  Note this makes
17720     symbolic debugging impossible.  It also triggers a bug in the HP-UX
17721     8 and HP-UX 9 linkers in which they give bogus error messages when
17722     linking some programs.
17723
17724'-msoft-float'
17725     Generate output containing library calls for floating point.
17726     *Warning:* the requisite libraries are not available for all HPPA
17727     targets.  Normally the facilities of the machine's usual C compiler
17728     are used, but this cannot be done directly in cross-compilation.
17729     You must make your own arrangements to provide suitable library
17730     functions for cross-compilation.
17731
17732     '-msoft-float' changes the calling convention in the output file;
17733     therefore, it is only useful if you compile _all_ of a program with
17734     this option.  In particular, you need to compile 'libgcc.a', the
17735     library that comes with GCC, with '-msoft-float' in order for this
17736     to work.
17737
17738'-msio'
17739     Generate the predefine, '_SIO', for server IO.  The default is
17740     '-mwsio'.  This generates the predefines, '__hp9000s700',
17741     '__hp9000s700__' and '_WSIO', for workstation IO.  These options
17742     are available under HP-UX and HI-UX.
17743
17744'-mgnu-ld'
17745     Use options specific to GNU 'ld'.  This passes '-shared' to 'ld'
17746     when building a shared library.  It is the default when GCC is
17747     configured, explicitly or implicitly, with the GNU linker.  This
17748     option does not affect which 'ld' is called; it only changes what
17749     parameters are passed to that 'ld'.  The 'ld' that is called is
17750     determined by the '--with-ld' configure option, GCC's program
17751     search path, and finally by the user's 'PATH'.  The linker used by
17752     GCC can be printed using 'which `gcc -print-prog-name=ld`'.  This
17753     option is only available on the 64-bit HP-UX GCC, i.e. configured
17754     with 'hppa*64*-*-hpux*'.
17755
17756'-mhp-ld'
17757     Use options specific to HP 'ld'.  This passes '-b' to 'ld' when
17758     building a shared library and passes '+Accept TypeMismatch' to 'ld'
17759     on all links.  It is the default when GCC is configured, explicitly
17760     or implicitly, with the HP linker.  This option does not affect
17761     which 'ld' is called; it only changes what parameters are passed to
17762     that 'ld'.  The 'ld' that is called is determined by the
17763     '--with-ld' configure option, GCC's program search path, and
17764     finally by the user's 'PATH'.  The linker used by GCC can be
17765     printed using 'which `gcc -print-prog-name=ld`'.  This option is
17766     only available on the 64-bit HP-UX GCC, i.e. configured with
17767     'hppa*64*-*-hpux*'.
17768
17769'-mlong-calls'
17770     Generate code that uses long call sequences.  This ensures that a
17771     call is always able to reach linker generated stubs.  The default
17772     is to generate long calls only when the distance from the call site
17773     to the beginning of the function or translation unit, as the case
17774     may be, exceeds a predefined limit set by the branch type being
17775     used.  The limits for normal calls are 7,600,000 and 240,000 bytes,
17776     respectively for the PA 2.0 and PA 1.X architectures.  Sibcalls are
17777     always limited at 240,000 bytes.
17778
17779     Distances are measured from the beginning of functions when using
17780     the '-ffunction-sections' option, or when using the '-mgas' and
17781     '-mno-portable-runtime' options together under HP-UX with the SOM
17782     linker.
17783
17784     It is normally not desirable to use this option as it degrades
17785     performance.  However, it may be useful in large applications,
17786     particularly when partial linking is used to build the application.
17787
17788     The types of long calls used depends on the capabilities of the
17789     assembler and linker, and the type of code being generated.  The
17790     impact on systems that support long absolute calls, and long pic
17791     symbol-difference or pc-relative calls should be relatively small.
17792     However, an indirect call is used on 32-bit ELF systems in pic code
17793     and it is quite long.
17794
17795'-munix=UNIX-STD'
17796     Generate compiler predefines and select a startfile for the
17797     specified UNIX standard.  The choices for UNIX-STD are '93', '95'
17798     and '98'.  '93' is supported on all HP-UX versions.  '95' is
17799     available on HP-UX 10.10 and later.  '98' is available on HP-UX
17800     11.11 and later.  The default values are '93' for HP-UX 10.00, '95'
17801     for HP-UX 10.10 though to 11.00, and '98' for HP-UX 11.11 and
17802     later.
17803
17804     '-munix=93' provides the same predefines as GCC 3.3 and 3.4.
17805     '-munix=95' provides additional predefines for 'XOPEN_UNIX' and
17806     '_XOPEN_SOURCE_EXTENDED', and the startfile 'unix95.o'.
17807     '-munix=98' provides additional predefines for '_XOPEN_UNIX',
17808     '_XOPEN_SOURCE_EXTENDED', '_INCLUDE__STDC_A1_SOURCE' and
17809     '_INCLUDE_XOPEN_SOURCE_500', and the startfile 'unix98.o'.
17810
17811     It is _important_ to note that this option changes the interfaces
17812     for various library routines.  It also affects the operational
17813     behavior of the C library.  Thus, _extreme_ care is needed in using
17814     this option.
17815
17816     Library code that is intended to operate with more than one UNIX
17817     standard must test, set and restore the variable
17818     '__xpg4_extended_mask' as appropriate.  Most GNU software doesn't
17819     provide this capability.
17820
17821'-nolibdld'
17822     Suppress the generation of link options to search libdld.sl when
17823     the '-static' option is specified on HP-UX 10 and later.
17824
17825'-static'
17826     The HP-UX implementation of setlocale in libc has a dependency on
17827     libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
17828     when the '-static' option is specified, special link options are
17829     needed to resolve this dependency.
17830
17831     On HP-UX 10 and later, the GCC driver adds the necessary options to
17832     link with libdld.sl when the '-static' option is specified.  This
17833     causes the resulting binary to be dynamic.  On the 64-bit port, the
17834     linkers generate dynamic binaries by default in any case.  The
17835     '-nolibdld' option can be used to prevent the GCC driver from
17836     adding these link options.
17837
17838'-threads'
17839     Add support for multithreading with the "dce thread" library under
17840     HP-UX.  This option sets flags for both the preprocessor and
17841     linker.
17842
17843
17844File: gcc.info,  Node: IA-64 Options,  Next: LM32 Options,  Prev: HPPA Options,  Up: Submodel Options
17845
178463.18.18 IA-64 Options
17847---------------------
17848
17849These are the '-m' options defined for the Intel IA-64 architecture.
17850
17851'-mbig-endian'
17852     Generate code for a big-endian target.  This is the default for
17853     HP-UX.
17854
17855'-mlittle-endian'
17856     Generate code for a little-endian target.  This is the default for
17857     AIX5 and GNU/Linux.
17858
17859'-mgnu-as'
17860'-mno-gnu-as'
17861     Generate (or don't) code for the GNU assembler.  This is the
17862     default.
17863
17864'-mgnu-ld'
17865'-mno-gnu-ld'
17866     Generate (or don't) code for the GNU linker.  This is the default.
17867
17868'-mno-pic'
17869     Generate code that does not use a global pointer register.  The
17870     result is not position independent code, and violates the IA-64
17871     ABI.
17872
17873'-mvolatile-asm-stop'
17874'-mno-volatile-asm-stop'
17875     Generate (or don't) a stop bit immediately before and after
17876     volatile asm statements.
17877
17878'-mregister-names'
17879'-mno-register-names'
17880     Generate (or don't) 'in', 'loc', and 'out' register names for the
17881     stacked registers.  This may make assembler output more readable.
17882
17883'-mno-sdata'
17884'-msdata'
17885     Disable (or enable) optimizations that use the small data section.
17886     This may be useful for working around optimizer bugs.
17887
17888'-mconstant-gp'
17889     Generate code that uses a single constant global pointer value.
17890     This is useful when compiling kernel code.
17891
17892'-mauto-pic'
17893     Generate code that is self-relocatable.  This implies
17894     '-mconstant-gp'.  This is useful when compiling firmware code.
17895
17896'-minline-float-divide-min-latency'
17897     Generate code for inline divides of floating-point values using the
17898     minimum latency algorithm.
17899
17900'-minline-float-divide-max-throughput'
17901     Generate code for inline divides of floating-point values using the
17902     maximum throughput algorithm.
17903
17904'-mno-inline-float-divide'
17905     Do not generate inline code for divides of floating-point values.
17906
17907'-minline-int-divide-min-latency'
17908     Generate code for inline divides of integer values using the
17909     minimum latency algorithm.
17910
17911'-minline-int-divide-max-throughput'
17912     Generate code for inline divides of integer values using the
17913     maximum throughput algorithm.
17914
17915'-mno-inline-int-divide'
17916     Do not generate inline code for divides of integer values.
17917
17918'-minline-sqrt-min-latency'
17919     Generate code for inline square roots using the minimum latency
17920     algorithm.
17921
17922'-minline-sqrt-max-throughput'
17923     Generate code for inline square roots using the maximum throughput
17924     algorithm.
17925
17926'-mno-inline-sqrt'
17927     Do not generate inline code for 'sqrt'.
17928
17929'-mfused-madd'
17930'-mno-fused-madd'
17931     Do (don't) generate code that uses the fused multiply/add or
17932     multiply/subtract instructions.  The default is to use these
17933     instructions.
17934
17935'-mno-dwarf2-asm'
17936'-mdwarf2-asm'
17937     Don't (or do) generate assembler code for the DWARF line number
17938     debugging info.  This may be useful when not using the GNU
17939     assembler.
17940
17941'-mearly-stop-bits'
17942'-mno-early-stop-bits'
17943     Allow stop bits to be placed earlier than immediately preceding the
17944     instruction that triggered the stop bit.  This can improve
17945     instruction scheduling, but does not always do so.
17946
17947'-mfixed-range=REGISTER-RANGE'
17948     Generate code treating the given register range as fixed registers.
17949     A fixed register is one that the register allocator cannot use.
17950     This is useful when compiling kernel code.  A register range is
17951     specified as two registers separated by a dash.  Multiple register
17952     ranges can be specified separated by a comma.
17953
17954'-mtls-size=TLS-SIZE'
17955     Specify bit size of immediate TLS offsets.  Valid values are 14,
17956     22, and 64.
17957
17958'-mtune=CPU-TYPE'
17959     Tune the instruction scheduling for a particular CPU, Valid values
17960     are 'itanium', 'itanium1', 'merced', 'itanium2', and 'mckinley'.
17961
17962'-milp32'
17963'-mlp64'
17964     Generate code for a 32-bit or 64-bit environment.  The 32-bit
17965     environment sets int, long and pointer to 32 bits.  The 64-bit
17966     environment sets int to 32 bits and long and pointer to 64 bits.
17967     These are HP-UX specific flags.
17968
17969'-mno-sched-br-data-spec'
17970'-msched-br-data-spec'
17971     (Dis/En)able data speculative scheduling before reload.  This
17972     results in generation of 'ld.a' instructions and the corresponding
17973     check instructions ('ld.c' / 'chk.a').  The default setting is
17974     disabled.
17975
17976'-msched-ar-data-spec'
17977'-mno-sched-ar-data-spec'
17978     (En/Dis)able data speculative scheduling after reload.  This
17979     results in generation of 'ld.a' instructions and the corresponding
17980     check instructions ('ld.c' / 'chk.a').  The default setting is
17981     enabled.
17982
17983'-mno-sched-control-spec'
17984'-msched-control-spec'
17985     (Dis/En)able control speculative scheduling.  This feature is
17986     available only during region scheduling (i.e. before reload).  This
17987     results in generation of the 'ld.s' instructions and the
17988     corresponding check instructions 'chk.s'.  The default setting is
17989     disabled.
17990
17991'-msched-br-in-data-spec'
17992'-mno-sched-br-in-data-spec'
17993     (En/Dis)able speculative scheduling of the instructions that are
17994     dependent on the data speculative loads before reload.  This is
17995     effective only with '-msched-br-data-spec' enabled.  The default
17996     setting is enabled.
17997
17998'-msched-ar-in-data-spec'
17999'-mno-sched-ar-in-data-spec'
18000     (En/Dis)able speculative scheduling of the instructions that are
18001     dependent on the data speculative loads after reload.  This is
18002     effective only with '-msched-ar-data-spec' enabled.  The default
18003     setting is enabled.
18004
18005'-msched-in-control-spec'
18006'-mno-sched-in-control-spec'
18007     (En/Dis)able speculative scheduling of the instructions that are
18008     dependent on the control speculative loads.  This is effective only
18009     with '-msched-control-spec' enabled.  The default setting is
18010     enabled.
18011
18012'-mno-sched-prefer-non-data-spec-insns'
18013'-msched-prefer-non-data-spec-insns'
18014     If enabled, data-speculative instructions are chosen for schedule
18015     only if there are no other choices at the moment.  This makes the
18016     use of the data speculation much more conservative.  The default
18017     setting is disabled.
18018
18019'-mno-sched-prefer-non-control-spec-insns'
18020'-msched-prefer-non-control-spec-insns'
18021     If enabled, control-speculative instructions are chosen for
18022     schedule only if there are no other choices at the moment.  This
18023     makes the use of the control speculation much more conservative.
18024     The default setting is disabled.
18025
18026'-mno-sched-count-spec-in-critical-path'
18027'-msched-count-spec-in-critical-path'
18028     If enabled, speculative dependencies are considered during
18029     computation of the instructions priorities.  This makes the use of
18030     the speculation a bit more conservative.  The default setting is
18031     disabled.
18032
18033'-msched-spec-ldc'
18034     Use a simple data speculation check.  This option is on by default.
18035
18036'-msched-control-spec-ldc'
18037     Use a simple check for control speculation.  This option is on by
18038     default.
18039
18040'-msched-stop-bits-after-every-cycle'
18041     Place a stop bit after every cycle when scheduling.  This option is
18042     on by default.
18043
18044'-msched-fp-mem-deps-zero-cost'
18045     Assume that floating-point stores and loads are not likely to cause
18046     a conflict when placed into the same instruction group.  This
18047     option is disabled by default.
18048
18049'-msel-sched-dont-check-control-spec'
18050     Generate checks for control speculation in selective scheduling.
18051     This flag is disabled by default.
18052
18053'-msched-max-memory-insns=MAX-INSNS'
18054     Limit on the number of memory insns per instruction group, giving
18055     lower priority to subsequent memory insns attempting to schedule in
18056     the same instruction group.  Frequently useful to prevent cache
18057     bank conflicts.  The default value is 1.
18058
18059'-msched-max-memory-insns-hard-limit'
18060     Makes the limit specified by 'msched-max-memory-insns' a hard
18061     limit, disallowing more than that number in an instruction group.
18062     Otherwise, the limit is "soft", meaning that non-memory operations
18063     are preferred when the limit is reached, but memory operations may
18064     still be scheduled.
18065
18066
18067File: gcc.info,  Node: LM32 Options,  Next: M32C Options,  Prev: IA-64 Options,  Up: Submodel Options
18068
180693.18.19 LM32 Options
18070--------------------
18071
18072These '-m' options are defined for the LatticeMico32 architecture:
18073
18074'-mbarrel-shift-enabled'
18075     Enable barrel-shift instructions.
18076
18077'-mdivide-enabled'
18078     Enable divide and modulus instructions.
18079
18080'-mmultiply-enabled'
18081     Enable multiply instructions.
18082
18083'-msign-extend-enabled'
18084     Enable sign extend instructions.
18085
18086'-muser-enabled'
18087     Enable user-defined instructions.
18088
18089
18090File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: LM32 Options,  Up: Submodel Options
18091
180923.18.20 M32C Options
18093--------------------
18094
18095'-mcpu=NAME'
18096     Select the CPU for which code is generated.  NAME may be one of
18097     'r8c' for the R8C/Tiny series, 'm16c' for the M16C (up to /60)
18098     series, 'm32cm' for the M16C/80 series, or 'm32c' for the M32C/80
18099     series.
18100
18101'-msim'
18102     Specifies that the program will be run on the simulator.  This
18103     causes an alternate runtime library to be linked in which supports,
18104     for example, file I/O.  You must not use this option when
18105     generating programs that will run on real hardware; you must
18106     provide your own runtime library for whatever I/O functions are
18107     needed.
18108
18109'-memregs=NUMBER'
18110     Specifies the number of memory-based pseudo-registers GCC uses
18111     during code generation.  These pseudo-registers are used like real
18112     registers, so there is a tradeoff between GCC's ability to fit the
18113     code into available registers, and the performance penalty of using
18114     memory instead of registers.  Note that all modules in a program
18115     must be compiled with the same value for this option.  Because of
18116     that, you must not use this option with GCC's default runtime
18117     libraries.
18118
18119
18120File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
18121
181223.18.21 M32R/D Options
18123----------------------
18124
18125These '-m' options are defined for Renesas M32R/D architectures:
18126
18127'-m32r2'
18128     Generate code for the M32R/2.
18129
18130'-m32rx'
18131     Generate code for the M32R/X.
18132
18133'-m32r'
18134     Generate code for the M32R.  This is the default.
18135
18136'-mmodel=small'
18137     Assume all objects live in the lower 16MB of memory (so that their
18138     addresses can be loaded with the 'ld24' instruction), and assume
18139     all subroutines are reachable with the 'bl' instruction.  This is
18140     the default.
18141
18142     The addressability of a particular object can be set with the
18143     'model' attribute.
18144
18145'-mmodel=medium'
18146     Assume objects may be anywhere in the 32-bit address space (the
18147     compiler generates 'seth/add3' instructions to load their
18148     addresses), and assume all subroutines are reachable with the 'bl'
18149     instruction.
18150
18151'-mmodel=large'
18152     Assume objects may be anywhere in the 32-bit address space (the
18153     compiler generates 'seth/add3' instructions to load their
18154     addresses), and assume subroutines may not be reachable with the
18155     'bl' instruction (the compiler generates the much slower
18156     'seth/add3/jl' instruction sequence).
18157
18158'-msdata=none'
18159     Disable use of the small data area.  Variables are put into one of
18160     '.data', '.bss', or '.rodata' (unless the 'section' attribute has
18161     been specified).  This is the default.
18162
18163     The small data area consists of sections '.sdata' and '.sbss'.
18164     Objects may be explicitly put in the small data area with the
18165     'section' attribute using one of these sections.
18166
18167'-msdata=sdata'
18168     Put small global and static data in the small data area, but do not
18169     generate special code to reference them.
18170
18171'-msdata=use'
18172     Put small global and static data in the small data area, and
18173     generate special instructions to reference them.
18174
18175'-G NUM'
18176     Put global and static objects less than or equal to NUM bytes into
18177     the small data or BSS sections instead of the normal data or BSS
18178     sections.  The default value of NUM is 8.  The '-msdata' option
18179     must be set to one of 'sdata' or 'use' for this option to have any
18180     effect.
18181
18182     All modules should be compiled with the same '-G NUM' value.
18183     Compiling with different values of NUM may or may not work; if it
18184     doesn't the linker gives an error message--incorrect code is not
18185     generated.
18186
18187'-mdebug'
18188     Makes the M32R-specific code in the compiler display some
18189     statistics that might help in debugging programs.
18190
18191'-malign-loops'
18192     Align all loops to a 32-byte boundary.
18193
18194'-mno-align-loops'
18195     Do not enforce a 32-byte alignment for loops.  This is the default.
18196
18197'-missue-rate=NUMBER'
18198     Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
18199
18200'-mbranch-cost=NUMBER'
18201     NUMBER can only be 1 or 2.  If it is 1 then branches are preferred
18202     over conditional code, if it is 2, then the opposite applies.
18203
18204'-mflush-trap=NUMBER'
18205     Specifies the trap number to use to flush the cache.  The default
18206     is 12.  Valid numbers are between 0 and 15 inclusive.
18207
18208'-mno-flush-trap'
18209     Specifies that the cache cannot be flushed by using a trap.
18210
18211'-mflush-func=NAME'
18212     Specifies the name of the operating system function to call to
18213     flush the cache.  The default is '_flush_cache', but a function
18214     call is only used if a trap is not available.
18215
18216'-mno-flush-func'
18217     Indicates that there is no OS function for flushing the cache.
18218
18219
18220File: gcc.info,  Node: M680x0 Options,  Next: MCore Options,  Prev: M32R/D Options,  Up: Submodel Options
18221
182223.18.22 M680x0 Options
18223----------------------
18224
18225These are the '-m' options defined for M680x0 and ColdFire processors.
18226The default settings depend on which architecture was selected when the
18227compiler was configured; the defaults for the most common choices are
18228given below.
18229
18230'-march=ARCH'
18231     Generate code for a specific M680x0 or ColdFire instruction set
18232     architecture.  Permissible values of ARCH for M680x0 architectures
18233     are: '68000', '68010', '68020', '68030', '68040', '68060' and
18234     'cpu32'.  ColdFire architectures are selected according to
18235     Freescale's ISA classification and the permissible values are:
18236     'isaa', 'isaaplus', 'isab' and 'isac'.
18237
18238     GCC defines a macro '__mcfARCH__' whenever it is generating code
18239     for a ColdFire target.  The ARCH in this macro is one of the
18240     '-march' arguments given above.
18241
18242     When used together, '-march' and '-mtune' select code that runs on
18243     a family of similar processors but that is optimized for a
18244     particular microarchitecture.
18245
18246'-mcpu=CPU'
18247     Generate code for a specific M680x0 or ColdFire processor.  The
18248     M680x0 CPUs are: '68000', '68010', '68020', '68030', '68040',
18249     '68060', '68302', '68332' and 'cpu32'.  The ColdFire CPUs are given
18250     by the table below, which also classifies the CPUs into families:
18251
18252     *Family*       *'-mcpu' arguments*
18253     '51'           '51' '51ac' '51ag' '51cn' '51em' '51je' '51jf' '51jg'
18254                    '51jm' '51mm' '51qe' '51qm'
18255     '5206'         '5202' '5204' '5206'
18256     '5206e'        '5206e'
18257     '5208'         '5207' '5208'
18258     '5211a'        '5210a' '5211a'
18259     '5213'         '5211' '5212' '5213'
18260     '5216'         '5214' '5216'
18261     '52235'        '52230' '52231' '52232' '52233' '52234' '52235'
18262     '5225'         '5224' '5225'
18263     '52259'        '52252' '52254' '52255' '52256' '52258' '52259'
18264     '5235'         '5232' '5233' '5234' '5235' '523x'
18265     '5249'         '5249'
18266     '5250'         '5250'
18267     '5271'         '5270' '5271'
18268     '5272'         '5272'
18269     '5275'         '5274' '5275'
18270     '5282'         '5280' '5281' '5282' '528x'
18271     '53017'        '53011' '53012' '53013' '53014' '53015' '53016' '53017'
18272     '5307'         '5307'
18273     '5329'         '5327' '5328' '5329' '532x'
18274     '5373'         '5372' '5373' '537x'
18275     '5407'         '5407'
18276     '5475'         '5470' '5471' '5472' '5473' '5474' '5475' '547x' '5480'
18277                    '5481' '5482' '5483' '5484' '5485'
18278
18279     '-mcpu=CPU' overrides '-march=ARCH' if ARCH is compatible with CPU.
18280     Other combinations of '-mcpu' and '-march' are rejected.
18281
18282     GCC defines the macro '__mcf_cpu_CPU' when ColdFire target CPU is
18283     selected.  It also defines '__mcf_family_FAMILY', where the value
18284     of FAMILY is given by the table above.
18285
18286'-mtune=TUNE'
18287     Tune the code for a particular microarchitecture within the
18288     constraints set by '-march' and '-mcpu'.  The M680x0
18289     microarchitectures are: '68000', '68010', '68020', '68030',
18290     '68040', '68060' and 'cpu32'.  The ColdFire microarchitectures are:
18291     'cfv1', 'cfv2', 'cfv3', 'cfv4' and 'cfv4e'.
18292
18293     You can also use '-mtune=68020-40' for code that needs to run
18294     relatively well on 68020, 68030 and 68040 targets.
18295     '-mtune=68020-60' is similar but includes 68060 targets as well.
18296     These two options select the same tuning decisions as '-m68020-40'
18297     and '-m68020-60' respectively.
18298
18299     GCC defines the macros '__mcARCH' and '__mcARCH__' when tuning for
18300     680x0 architecture ARCH.  It also defines 'mcARCH' unless either
18301     '-ansi' or a non-GNU '-std' option is used.  If GCC is tuning for a
18302     range of architectures, as selected by '-mtune=68020-40' or
18303     '-mtune=68020-60', it defines the macros for every architecture in
18304     the range.
18305
18306     GCC also defines the macro '__mUARCH__' when tuning for ColdFire
18307     microarchitecture UARCH, where UARCH is one of the arguments given
18308     above.
18309
18310'-m68000'
18311'-mc68000'
18312     Generate output for a 68000.  This is the default when the compiler
18313     is configured for 68000-based systems.  It is equivalent to
18314     '-march=68000'.
18315
18316     Use this option for microcontrollers with a 68000 or EC000 core,
18317     including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
18318
18319'-m68010'
18320     Generate output for a 68010.  This is the default when the compiler
18321     is configured for 68010-based systems.  It is equivalent to
18322     '-march=68010'.
18323
18324'-m68020'
18325'-mc68020'
18326     Generate output for a 68020.  This is the default when the compiler
18327     is configured for 68020-based systems.  It is equivalent to
18328     '-march=68020'.
18329
18330'-m68030'
18331     Generate output for a 68030.  This is the default when the compiler
18332     is configured for 68030-based systems.  It is equivalent to
18333     '-march=68030'.
18334
18335'-m68040'
18336     Generate output for a 68040.  This is the default when the compiler
18337     is configured for 68040-based systems.  It is equivalent to
18338     '-march=68040'.
18339
18340     This option inhibits the use of 68881/68882 instructions that have
18341     to be emulated by software on the 68040.  Use this option if your
18342     68040 does not have code to emulate those instructions.
18343
18344'-m68060'
18345     Generate output for a 68060.  This is the default when the compiler
18346     is configured for 68060-based systems.  It is equivalent to
18347     '-march=68060'.
18348
18349     This option inhibits the use of 68020 and 68881/68882 instructions
18350     that have to be emulated by software on the 68060.  Use this option
18351     if your 68060 does not have code to emulate those instructions.
18352
18353'-mcpu32'
18354     Generate output for a CPU32.  This is the default when the compiler
18355     is configured for CPU32-based systems.  It is equivalent to
18356     '-march=cpu32'.
18357
18358     Use this option for microcontrollers with a CPU32 or CPU32+ core,
18359     including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
18360     68341, 68349 and 68360.
18361
18362'-m5200'
18363     Generate output for a 520X ColdFire CPU.  This is the default when
18364     the compiler is configured for 520X-based systems.  It is
18365     equivalent to '-mcpu=5206', and is now deprecated in favor of that
18366     option.
18367
18368     Use this option for microcontroller with a 5200 core, including the
18369     MCF5202, MCF5203, MCF5204 and MCF5206.
18370
18371'-m5206e'
18372     Generate output for a 5206e ColdFire CPU.  The option is now
18373     deprecated in favor of the equivalent '-mcpu=5206e'.
18374
18375'-m528x'
18376     Generate output for a member of the ColdFire 528X family.  The
18377     option is now deprecated in favor of the equivalent '-mcpu=528x'.
18378
18379'-m5307'
18380     Generate output for a ColdFire 5307 CPU.  The option is now
18381     deprecated in favor of the equivalent '-mcpu=5307'.
18382
18383'-m5407'
18384     Generate output for a ColdFire 5407 CPU.  The option is now
18385     deprecated in favor of the equivalent '-mcpu=5407'.
18386
18387'-mcfv4e'
18388     Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
18389     This includes use of hardware floating-point instructions.  The
18390     option is equivalent to '-mcpu=547x', and is now deprecated in
18391     favor of that option.
18392
18393'-m68020-40'
18394     Generate output for a 68040, without using any of the new
18395     instructions.  This results in code that can run relatively
18396     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
18397     generated code does use the 68881 instructions that are emulated on
18398     the 68040.
18399
18400     The option is equivalent to '-march=68020' '-mtune=68020-40'.
18401
18402'-m68020-60'
18403     Generate output for a 68060, without using any of the new
18404     instructions.  This results in code that can run relatively
18405     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
18406     generated code does use the 68881 instructions that are emulated on
18407     the 68060.
18408
18409     The option is equivalent to '-march=68020' '-mtune=68020-60'.
18410
18411'-mhard-float'
18412'-m68881'
18413     Generate floating-point instructions.  This is the default for
18414     68020 and above, and for ColdFire devices that have an FPU.  It
18415     defines the macro '__HAVE_68881__' on M680x0 targets and
18416     '__mcffpu__' on ColdFire targets.
18417
18418'-msoft-float'
18419     Do not generate floating-point instructions; use library calls
18420     instead.  This is the default for 68000, 68010, and 68832 targets.
18421     It is also the default for ColdFire devices that have no FPU.
18422
18423'-mdiv'
18424'-mno-div'
18425     Generate (do not generate) ColdFire hardware divide and remainder
18426     instructions.  If '-march' is used without '-mcpu', the default is
18427     "on" for ColdFire architectures and "off" for M680x0 architectures.
18428     Otherwise, the default is taken from the target CPU (either the
18429     default CPU, or the one specified by '-mcpu').  For example, the
18430     default is "off" for '-mcpu=5206' and "on" for '-mcpu=5206e'.
18431
18432     GCC defines the macro '__mcfhwdiv__' when this option is enabled.
18433
18434'-mshort'
18435     Consider type 'int' to be 16 bits wide, like 'short int'.
18436     Additionally, parameters passed on the stack are also aligned to a
18437     16-bit boundary even on targets whose API mandates promotion to
18438     32-bit.
18439
18440'-mno-short'
18441     Do not consider type 'int' to be 16 bits wide.  This is the
18442     default.
18443
18444'-mnobitfield'
18445'-mno-bitfield'
18446     Do not use the bit-field instructions.  The '-m68000', '-mcpu32'
18447     and '-m5200' options imply '-mnobitfield'.
18448
18449'-mbitfield'
18450     Do use the bit-field instructions.  The '-m68020' option implies
18451     '-mbitfield'.  This is the default if you use a configuration
18452     designed for a 68020.
18453
18454'-mrtd'
18455     Use a different function-calling convention, in which functions
18456     that take a fixed number of arguments return with the 'rtd'
18457     instruction, which pops their arguments while returning.  This
18458     saves one instruction in the caller since there is no need to pop
18459     the arguments there.
18460
18461     This calling convention is incompatible with the one normally used
18462     on Unix, so you cannot use it if you need to call libraries
18463     compiled with the Unix compiler.
18464
18465     Also, you must provide function prototypes for all functions that
18466     take variable numbers of arguments (including 'printf'); otherwise
18467     incorrect code is generated for calls to those functions.
18468
18469     In addition, seriously incorrect code results if you call a
18470     function with too many arguments.  (Normally, extra arguments are
18471     harmlessly ignored.)
18472
18473     The 'rtd' instruction is supported by the 68010, 68020, 68030,
18474     68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
18475
18476'-mno-rtd'
18477     Do not use the calling conventions selected by '-mrtd'.  This is
18478     the default.
18479
18480'-malign-int'
18481'-mno-align-int'
18482     Control whether GCC aligns 'int', 'long', 'long long', 'float',
18483     'double', and 'long double' variables on a 32-bit boundary
18484     ('-malign-int') or a 16-bit boundary ('-mno-align-int').  Aligning
18485     variables on 32-bit boundaries produces code that runs somewhat
18486     faster on processors with 32-bit busses at the expense of more
18487     memory.
18488
18489     *Warning:* if you use the '-malign-int' switch, GCC aligns
18490     structures containing the above types differently than most
18491     published application binary interface specifications for the m68k.
18492
18493'-mpcrel'
18494     Use the pc-relative addressing mode of the 68000 directly, instead
18495     of using a global offset table.  At present, this option implies
18496     '-fpic', allowing at most a 16-bit offset for pc-relative
18497     addressing.  '-fPIC' is not presently supported with '-mpcrel',
18498     though this could be supported for 68020 and higher processors.
18499
18500'-mno-strict-align'
18501'-mstrict-align'
18502     Do not (do) assume that unaligned memory references are handled by
18503     the system.
18504
18505'-msep-data'
18506     Generate code that allows the data segment to be located in a
18507     different area of memory from the text segment.  This allows for
18508     execute-in-place in an environment without virtual memory
18509     management.  This option implies '-fPIC'.
18510
18511'-mno-sep-data'
18512     Generate code that assumes that the data segment follows the text
18513     segment.  This is the default.
18514
18515'-mid-shared-library'
18516     Generate code that supports shared libraries via the library ID
18517     method.  This allows for execute-in-place and shared libraries in
18518     an environment without virtual memory management.  This option
18519     implies '-fPIC'.
18520
18521'-mno-id-shared-library'
18522     Generate code that doesn't assume ID-based shared libraries are
18523     being used.  This is the default.
18524
18525'-mshared-library-id=n'
18526     Specifies the identification number of the ID-based shared library
18527     being compiled.  Specifying a value of 0 generates more compact
18528     code; specifying other values forces the allocation of that number
18529     to the current library, but is no more space- or time-efficient
18530     than omitting this option.
18531
18532'-mxgot'
18533'-mno-xgot'
18534     When generating position-independent code for ColdFire, generate
18535     code that works if the GOT has more than 8192 entries.  This code
18536     is larger and slower than code generated without this option.  On
18537     M680x0 processors, this option is not needed; '-fPIC' suffices.
18538
18539     GCC normally uses a single instruction to load values from the GOT.
18540     While this is relatively efficient, it only works if the GOT is
18541     smaller than about 64k.  Anything larger causes the linker to
18542     report an error such as:
18543
18544          relocation truncated to fit: R_68K_GOT16O foobar
18545
18546     If this happens, you should recompile your code with '-mxgot'.  It
18547     should then work with very large GOTs.  However, code generated
18548     with '-mxgot' is less efficient, since it takes 4 instructions to
18549     fetch the value of a global symbol.
18550
18551     Note that some linkers, including newer versions of the GNU linker,
18552     can create multiple GOTs and sort GOT entries.  If you have such a
18553     linker, you should only need to use '-mxgot' when compiling a
18554     single object file that accesses more than 8192 GOT entries.  Very
18555     few do.
18556
18557     These options have no effect unless GCC is generating
18558     position-independent code.
18559
18560'-mlong-jump-table-offsets'
18561     Use 32-bit offsets in 'switch' tables.  The default is to use
18562     16-bit offsets.
18563
18564
18565File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M680x0 Options,  Up: Submodel Options
18566
185673.18.23 MCore Options
18568---------------------
18569
18570These are the '-m' options defined for the Motorola M*Core processors.
18571
18572'-mhardlit'
18573'-mno-hardlit'
18574     Inline constants into the code stream if it can be done in two
18575     instructions or less.
18576
18577'-mdiv'
18578'-mno-div'
18579     Use the divide instruction.  (Enabled by default).
18580
18581'-mrelax-immediate'
18582'-mno-relax-immediate'
18583     Allow arbitrary-sized immediates in bit operations.
18584
18585'-mwide-bitfields'
18586'-mno-wide-bitfields'
18587     Always treat bit-fields as 'int'-sized.
18588
18589'-m4byte-functions'
18590'-mno-4byte-functions'
18591     Force all functions to be aligned to a 4-byte boundary.
18592
18593'-mcallgraph-data'
18594'-mno-callgraph-data'
18595     Emit callgraph information.
18596
18597'-mslow-bytes'
18598'-mno-slow-bytes'
18599     Prefer word access when reading byte quantities.
18600
18601'-mlittle-endian'
18602'-mbig-endian'
18603     Generate code for a little-endian target.
18604
18605'-m210'
18606'-m340'
18607     Generate code for the 210 processor.
18608
18609'-mno-lsim'
18610     Assume that runtime support has been provided and so omit the
18611     simulator library ('libsim.a)' from the linker command line.
18612
18613'-mstack-increment=SIZE'
18614     Set the maximum amount for a single stack increment operation.
18615     Large values can increase the speed of programs that contain
18616     functions that need a large amount of stack space, but they can
18617     also trigger a segmentation fault if the stack is extended too
18618     much.  The default value is 0x1000.
18619
18620
18621File: gcc.info,  Node: MeP Options,  Next: MicroBlaze Options,  Prev: MCore Options,  Up: Submodel Options
18622
186233.18.24 MeP Options
18624-------------------
18625
18626'-mabsdiff'
18627     Enables the 'abs' instruction, which is the absolute difference
18628     between two registers.
18629
18630'-mall-opts'
18631     Enables all the optional instructions--average, multiply, divide,
18632     bit operations, leading zero, absolute difference, min/max, clip,
18633     and saturation.
18634
18635'-maverage'
18636     Enables the 'ave' instruction, which computes the average of two
18637     registers.
18638
18639'-mbased=N'
18640     Variables of size N bytes or smaller are placed in the '.based'
18641     section by default.  Based variables use the '$tp' register as a
18642     base register, and there is a 128-byte limit to the '.based'
18643     section.
18644
18645'-mbitops'
18646     Enables the bit operation instructions--bit test ('btstm'), set
18647     ('bsetm'), clear ('bclrm'), invert ('bnotm'), and test-and-set
18648     ('tas').
18649
18650'-mc=NAME'
18651     Selects which section constant data is placed in.  NAME may be
18652     'tiny', 'near', or 'far'.
18653
18654'-mclip'
18655     Enables the 'clip' instruction.  Note that '-mclip' is not useful
18656     unless you also provide '-mminmax'.
18657
18658'-mconfig=NAME'
18659     Selects one of the built-in core configurations.  Each MeP chip has
18660     one or more modules in it; each module has a core CPU and a variety
18661     of coprocessors, optional instructions, and peripherals.  The
18662     'MeP-Integrator' tool, not part of GCC, provides these
18663     configurations through this option; using this option is the same
18664     as using all the corresponding command-line options.  The default
18665     configuration is 'default'.
18666
18667'-mcop'
18668     Enables the coprocessor instructions.  By default, this is a 32-bit
18669     coprocessor.  Note that the coprocessor is normally enabled via the
18670     '-mconfig=' option.
18671
18672'-mcop32'
18673     Enables the 32-bit coprocessor's instructions.
18674
18675'-mcop64'
18676     Enables the 64-bit coprocessor's instructions.
18677
18678'-mivc2'
18679     Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
18680
18681'-mdc'
18682     Causes constant variables to be placed in the '.near' section.
18683
18684'-mdiv'
18685     Enables the 'div' and 'divu' instructions.
18686
18687'-meb'
18688     Generate big-endian code.
18689
18690'-mel'
18691     Generate little-endian code.
18692
18693'-mio-volatile'
18694     Tells the compiler that any variable marked with the 'io' attribute
18695     is to be considered volatile.
18696
18697'-ml'
18698     Causes variables to be assigned to the '.far' section by default.
18699
18700'-mleadz'
18701     Enables the 'leadz' (leading zero) instruction.
18702
18703'-mm'
18704     Causes variables to be assigned to the '.near' section by default.
18705
18706'-mminmax'
18707     Enables the 'min' and 'max' instructions.
18708
18709'-mmult'
18710     Enables the multiplication and multiply-accumulate instructions.
18711
18712'-mno-opts'
18713     Disables all the optional instructions enabled by '-mall-opts'.
18714
18715'-mrepeat'
18716     Enables the 'repeat' and 'erepeat' instructions, used for
18717     low-overhead looping.
18718
18719'-ms'
18720     Causes all variables to default to the '.tiny' section.  Note that
18721     there is a 65536-byte limit to this section.  Accesses to these
18722     variables use the '%gp' base register.
18723
18724'-msatur'
18725     Enables the saturation instructions.  Note that the compiler does
18726     not currently generate these itself, but this option is included
18727     for compatibility with other tools, like 'as'.
18728
18729'-msdram'
18730     Link the SDRAM-based runtime instead of the default ROM-based
18731     runtime.
18732
18733'-msim'
18734     Link the simulator run-time libraries.
18735
18736'-msimnovec'
18737     Link the simulator runtime libraries, excluding built-in support
18738     for reset and exception vectors and tables.
18739
18740'-mtf'
18741     Causes all functions to default to the '.far' section.  Without
18742     this option, functions default to the '.near' section.
18743
18744'-mtiny=N'
18745     Variables that are N bytes or smaller are allocated to the '.tiny'
18746     section.  These variables use the '$gp' base register.  The default
18747     for this option is 4, but note that there's a 65536-byte limit to
18748     the '.tiny' section.
18749
18750
18751File: gcc.info,  Node: MicroBlaze Options,  Next: MIPS Options,  Prev: MeP Options,  Up: Submodel Options
18752
187533.18.25 MicroBlaze Options
18754--------------------------
18755
18756'-msoft-float'
18757     Use software emulation for floating point (default).
18758
18759'-mhard-float'
18760     Use hardware floating-point instructions.
18761
18762'-mmemcpy'
18763     Do not optimize block moves, use 'memcpy'.
18764
18765'-mno-clearbss'
18766     This option is deprecated.  Use '-fno-zero-initialized-in-bss'
18767     instead.
18768
18769'-mcpu=CPU-TYPE'
18770     Use features of, and schedule code for, the given CPU. Supported
18771     values are in the format 'vX.YY.Z', where X is a major version, YY
18772     is the minor version, and Z is compatibility code.  Example values
18773     are 'v3.00.a', 'v4.00.b', 'v5.00.a', 'v5.00.b', 'v6.00.a'.
18774
18775'-mxl-soft-mul'
18776     Use software multiply emulation (default).
18777
18778'-mxl-soft-div'
18779     Use software emulation for divides (default).
18780
18781'-mxl-barrel-shift'
18782     Use the hardware barrel shifter.
18783
18784'-mxl-pattern-compare'
18785     Use pattern compare instructions.
18786
18787'-msmall-divides'
18788     Use table lookup optimization for small signed integer divisions.
18789
18790'-mxl-stack-check'
18791     This option is deprecated.  Use '-fstack-check' instead.
18792
18793'-mxl-gp-opt'
18794     Use GP-relative '.sdata'/'.sbss' sections.
18795
18796'-mxl-multiply-high'
18797     Use multiply high instructions for high part of 32x32 multiply.
18798
18799'-mxl-float-convert'
18800     Use hardware floating-point conversion instructions.
18801
18802'-mxl-float-sqrt'
18803     Use hardware floating-point square root instruction.
18804
18805'-mbig-endian'
18806     Generate code for a big-endian target.
18807
18808'-mlittle-endian'
18809     Generate code for a little-endian target.
18810
18811'-mxl-reorder'
18812     Use reorder instructions (swap and byte reversed load/store).
18813
18814'-mxl-mode-APP-MODEL'
18815     Select application model APP-MODEL.  Valid models are
18816     'executable'
18817          normal executable (default), uses startup code 'crt0.o'.
18818
18819     'xmdstub'
18820          for use with Xilinx Microprocessor Debugger (XMD) based
18821          software intrusive debug agent called xmdstub.  This uses
18822          startup file 'crt1.o' and sets the start address of the
18823          program to 0x800.
18824
18825     'bootstrap'
18826          for applications that are loaded using a bootloader.  This
18827          model uses startup file 'crt2.o' which does not contain a
18828          processor reset vector handler.  This is suitable for
18829          transferring control on a processor reset to the bootloader
18830          rather than the application.
18831
18832     'novectors'
18833          for applications that do not require any of the MicroBlaze
18834          vectors.  This option may be useful for applications running
18835          within a monitoring application.  This model uses 'crt3.o' as
18836          a startup file.
18837
18838     Option '-xl-mode-APP-MODEL' is a deprecated alias for
18839     '-mxl-mode-APP-MODEL'.
18840
18841
18842File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MicroBlaze Options,  Up: Submodel Options
18843
188443.18.26 MIPS Options
18845--------------------
18846
18847'-EB'
18848     Generate big-endian code.
18849
18850'-EL'
18851     Generate little-endian code.  This is the default for 'mips*el-*-*'
18852     configurations.
18853
18854'-march=ARCH'
18855     Generate code that runs on ARCH, which can be the name of a generic
18856     MIPS ISA, or the name of a particular processor.  The ISA names
18857     are: 'mips1', 'mips2', 'mips3', 'mips4', 'mips32', 'mips32r2',
18858     'mips32r3', 'mips32r5', 'mips32r6', 'mips64', 'mips64r2',
18859     'mips64r3', 'mips64r5' and 'mips64r6'.  The processor names are:
18860     '4kc', '4km', '4kp', '4ksc', '4kec', '4kem', '4kep', '4ksd', '5kc',
18861     '5kf', '20kc', '24kc', '24kf2_1', '24kf1_1', '24kec', '24kef2_1',
18862     '24kef1_1', '34kc', '34kf2_1', '34kf1_1', '34kn', '74kc',
18863     '74kf2_1', '74kf1_1', '74kf3_2', '1004kc', '1004kf2_1',
18864     '1004kf1_1', 'i6400', 'interaptiv', 'loongson2e', 'loongson2f',
18865     'loongson3a', 'm4k', 'm14k', 'm14kc', 'm14ke', 'm14kec', 'm5100',
18866     'm5101', 'octeon', 'octeon+', 'octeon2', 'octeon3', 'orion',
18867     'p5600', 'r2000', 'r3000', 'r3900', 'r4000', 'r4400', 'r4600',
18868     'r4650', 'r4700', 'r6000', 'r8000', 'rm7000', 'rm9000', 'r10000',
18869     'r12000', 'r14000', 'r16000', 'sb1', 'sr71000', 'vr4100', 'vr4111',
18870     'vr4120', 'vr4130', 'vr4300', 'vr5000', 'vr5400', 'vr5500', 'xlr'
18871     and 'xlp'.  The special value 'from-abi' selects the most
18872     compatible architecture for the selected ABI (that is, 'mips1' for
18873     32-bit ABIs and 'mips3' for 64-bit ABIs).
18874
18875     The native Linux/GNU toolchain also supports the value 'native',
18876     which selects the best architecture option for the host processor.
18877     '-march=native' has no effect if GCC does not recognize the
18878     processor.
18879
18880     In processor names, a final '000' can be abbreviated as 'k' (for
18881     example, '-march=r2k').  Prefixes are optional, and 'vr' may be
18882     written 'r'.
18883
18884     Names of the form 'Nf2_1' refer to processors with FPUs clocked at
18885     half the rate of the core, names of the form 'Nf1_1' refer to
18886     processors with FPUs clocked at the same rate as the core, and
18887     names of the form 'Nf3_2' refer to processors with FPUs clocked a
18888     ratio of 3:2 with respect to the core.  For compatibility reasons,
18889     'Nf' is accepted as a synonym for 'Nf2_1' while 'Nx' and 'Bfx' are
18890     accepted as synonyms for 'Nf1_1'.
18891
18892     GCC defines two macros based on the value of this option.  The
18893     first is '_MIPS_ARCH', which gives the name of target architecture,
18894     as a string.  The second has the form '_MIPS_ARCH_FOO', where FOO
18895     is the capitalized value of '_MIPS_ARCH'.  For example,
18896     '-march=r2000' sets '_MIPS_ARCH' to '"r2000"' and defines the macro
18897     '_MIPS_ARCH_R2000'.
18898
18899     Note that the '_MIPS_ARCH' macro uses the processor names given
18900     above.  In other words, it has the full prefix and does not
18901     abbreviate '000' as 'k'.  In the case of 'from-abi', the macro
18902     names the resolved architecture (either '"mips1"' or '"mips3"').
18903     It names the default architecture when no '-march' option is given.
18904
18905'-mtune=ARCH'
18906     Optimize for ARCH.  Among other things, this option controls the
18907     way instructions are scheduled, and the perceived cost of
18908     arithmetic operations.  The list of ARCH values is the same as for
18909     '-march'.
18910
18911     When this option is not used, GCC optimizes for the processor
18912     specified by '-march'.  By using '-march' and '-mtune' together, it
18913     is possible to generate code that runs on a family of processors,
18914     but optimize the code for one particular member of that family.
18915
18916     '-mtune' defines the macros '_MIPS_TUNE' and '_MIPS_TUNE_FOO',
18917     which work in the same way as the '-march' ones described above.
18918
18919'-mips1'
18920     Equivalent to '-march=mips1'.
18921
18922'-mips2'
18923     Equivalent to '-march=mips2'.
18924
18925'-mips3'
18926     Equivalent to '-march=mips3'.
18927
18928'-mips4'
18929     Equivalent to '-march=mips4'.
18930
18931'-mips32'
18932     Equivalent to '-march=mips32'.
18933
18934'-mips32r3'
18935     Equivalent to '-march=mips32r3'.
18936
18937'-mips32r5'
18938     Equivalent to '-march=mips32r5'.
18939
18940'-mips32r6'
18941     Equivalent to '-march=mips32r6'.
18942
18943'-mips64'
18944     Equivalent to '-march=mips64'.
18945
18946'-mips64r2'
18947     Equivalent to '-march=mips64r2'.
18948
18949'-mips64r3'
18950     Equivalent to '-march=mips64r3'.
18951
18952'-mips64r5'
18953     Equivalent to '-march=mips64r5'.
18954
18955'-mips64r6'
18956     Equivalent to '-march=mips64r6'.
18957
18958'-mips16'
18959'-mno-mips16'
18960     Generate (do not generate) MIPS16 code.  If GCC is targeting a
18961     MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
18962
18963     MIPS16 code generation can also be controlled on a per-function
18964     basis by means of 'mips16' and 'nomips16' attributes.  *Note
18965     Function Attributes::, for more information.
18966
18967'-mflip-mips16'
18968     Generate MIPS16 code on alternating functions.  This option is
18969     provided for regression testing of mixed MIPS16/non-MIPS16 code
18970     generation, and is not intended for ordinary use in compiling user
18971     code.
18972
18973'-minterlink-compressed'
18974'-mno-interlink-compressed'
18975     Require (do not require) that code using the standard
18976     (uncompressed) MIPS ISA be link-compatible with MIPS16 and
18977     microMIPS code, and vice versa.
18978
18979     For example, code using the standard ISA encoding cannot jump
18980     directly to MIPS16 or microMIPS code; it must either use a call or
18981     an indirect jump.  '-minterlink-compressed' therefore disables
18982     direct jumps unless GCC knows that the target of the jump is not
18983     compressed.
18984
18985'-minterlink-mips16'
18986'-mno-interlink-mips16'
18987     Aliases of '-minterlink-compressed' and
18988     '-mno-interlink-compressed'.  These options predate the microMIPS
18989     ASE and are retained for backwards compatibility.
18990
18991'-mabi=32'
18992'-mabi=o64'
18993'-mabi=n32'
18994'-mabi=64'
18995'-mabi=eabi'
18996     Generate code for the given ABI.
18997
18998     Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
18999     generates 64-bit code when you select a 64-bit architecture, but
19000     you can use '-mgp32' to get 32-bit code instead.
19001
19002     For information about the O64 ABI, see
19003     <http://gcc.gnu.org/projects/mipso64-abi.html>.
19004
19005     GCC supports a variant of the o32 ABI in which floating-point
19006     registers are 64 rather than 32 bits wide.  You can select this
19007     combination with '-mabi=32' '-mfp64'.  This ABI relies on the
19008     'mthc1' and 'mfhc1' instructions and is therefore only supported
19009     for MIPS32R2, MIPS32R3 and MIPS32R5 processors.
19010
19011     The register assignments for arguments and return values remain the
19012     same, but each scalar value is passed in a single 64-bit register
19013     rather than a pair of 32-bit registers.  For example, scalar
19014     floating-point values are returned in '$f0' only, not a '$f0'/'$f1'
19015     pair.  The set of call-saved registers also remains the same in
19016     that the even-numbered double-precision registers are saved.
19017
19018     Two additional variants of the o32 ABI are supported to enable a
19019     transition from 32-bit to 64-bit registers.  These are FPXX
19020     ('-mfpxx') and FP64A ('-mfp64' '-mno-odd-spreg').  The FPXX
19021     extension mandates that all code must execute correctly when run
19022     using 32-bit or 64-bit registers.  The code can be interlinked with
19023     either FP32 or FP64, but not both.  The FP64A extension is similar
19024     to the FP64 extension but forbids the use of odd-numbered
19025     single-precision registers.  This can be used in conjunction with
19026     the 'FRE' mode of FPUs in MIPS32R5 processors and allows both FP32
19027     and FP64A code to interlink and run in the same process without
19028     changing FPU modes.
19029
19030'-mabicalls'
19031'-mno-abicalls'
19032     Generate (do not generate) code that is suitable for SVR4-style
19033     dynamic objects.  '-mabicalls' is the default for SVR4-based
19034     systems.
19035
19036'-mshared'
19037'-mno-shared'
19038     Generate (do not generate) code that is fully position-independent,
19039     and that can therefore be linked into shared libraries.  This
19040     option only affects '-mabicalls'.
19041
19042     All '-mabicalls' code has traditionally been position-independent,
19043     regardless of options like '-fPIC' and '-fpic'.  However, as an
19044     extension, the GNU toolchain allows executables to use absolute
19045     accesses for locally-binding symbols.  It can also use shorter GP
19046     initialization sequences and generate direct calls to
19047     locally-defined functions.  This mode is selected by '-mno-shared'.
19048
19049     '-mno-shared' depends on binutils 2.16 or higher and generates
19050     objects that can only be linked by the GNU linker.  However, the
19051     option does not affect the ABI of the final executable; it only
19052     affects the ABI of relocatable objects.  Using '-mno-shared'
19053     generally makes executables both smaller and quicker.
19054
19055     '-mshared' is the default.
19056
19057'-mplt'
19058'-mno-plt'
19059     Assume (do not assume) that the static and dynamic linkers support
19060     PLTs and copy relocations.  This option only affects '-mno-shared
19061     -mabicalls'.  For the n64 ABI, this option has no effect without
19062     '-msym32'.
19063
19064     You can make '-mplt' the default by configuring GCC with
19065     '--with-mips-plt'.  The default is '-mno-plt' otherwise.
19066
19067'-mxgot'
19068'-mno-xgot'
19069     Lift (do not lift) the usual restrictions on the size of the global
19070     offset table.
19071
19072     GCC normally uses a single instruction to load values from the GOT.
19073     While this is relatively efficient, it only works if the GOT is
19074     smaller than about 64k.  Anything larger causes the linker to
19075     report an error such as:
19076
19077          relocation truncated to fit: R_MIPS_GOT16 foobar
19078
19079     If this happens, you should recompile your code with '-mxgot'.
19080     This works with very large GOTs, although the code is also less
19081     efficient, since it takes three instructions to fetch the value of
19082     a global symbol.
19083
19084     Note that some linkers can create multiple GOTs.  If you have such
19085     a linker, you should only need to use '-mxgot' when a single object
19086     file accesses more than 64k's worth of GOT entries.  Very few do.
19087
19088     These options have no effect unless GCC is generating position
19089     independent code.
19090
19091'-mgp32'
19092     Assume that general-purpose registers are 32 bits wide.
19093
19094'-mgp64'
19095     Assume that general-purpose registers are 64 bits wide.
19096
19097'-mfp32'
19098     Assume that floating-point registers are 32 bits wide.
19099
19100'-mfp64'
19101     Assume that floating-point registers are 64 bits wide.
19102
19103'-mfpxx'
19104     Do not assume the width of floating-point registers.
19105
19106'-mhard-float'
19107     Use floating-point coprocessor instructions.
19108
19109'-msoft-float'
19110     Do not use floating-point coprocessor instructions.  Implement
19111     floating-point calculations using library calls instead.
19112
19113'-mno-float'
19114     Equivalent to '-msoft-float', but additionally asserts that the
19115     program being compiled does not perform any floating-point
19116     operations.  This option is presently supported only by some
19117     bare-metal MIPS configurations, where it may select a special set
19118     of libraries that lack all floating-point support (including, for
19119     example, the floating-point 'printf' formats).  If code compiled
19120     with '-mno-float' accidentally contains floating-point operations,
19121     it is likely to suffer a link-time or run-time failure.
19122
19123'-msingle-float'
19124     Assume that the floating-point coprocessor only supports
19125     single-precision operations.
19126
19127'-mdouble-float'
19128     Assume that the floating-point coprocessor supports
19129     double-precision operations.  This is the default.
19130
19131'-modd-spreg'
19132'-mno-odd-spreg'
19133     Enable the use of odd-numbered single-precision floating-point
19134     registers for the o32 ABI. This is the default for processors that
19135     are known to support these registers.  When using the o32 FPXX ABI,
19136     '-mno-odd-spreg' is set by default.
19137
19138'-mabs=2008'
19139'-mabs=legacy'
19140     These options control the treatment of the special not-a-number
19141     (NaN) IEEE 754 floating-point data with the 'abs.fmt' and 'neg.fmt'
19142     machine instructions.
19143
19144     By default or when '-mabs=legacy' is used the legacy treatment is
19145     selected.  In this case these instructions are considered
19146     arithmetic and avoided where correct operation is required and the
19147     input operand might be a NaN. A longer sequence of instructions
19148     that manipulate the sign bit of floating-point datum manually is
19149     used instead unless the '-ffinite-math-only' option has also been
19150     specified.
19151
19152     The '-mabs=2008' option selects the IEEE 754-2008 treatment.  In
19153     this case these instructions are considered non-arithmetic and
19154     therefore operating correctly in all cases, including in particular
19155     where the input operand is a NaN. These instructions are therefore
19156     always used for the respective operations.
19157
19158'-mnan=2008'
19159'-mnan=legacy'
19160     These options control the encoding of the special not-a-number
19161     (NaN) IEEE 754 floating-point data.
19162
19163     The '-mnan=legacy' option selects the legacy encoding.  In this
19164     case quiet NaNs (qNaNs) are denoted by the first bit of their
19165     trailing significand field being 0, whereas signaling NaNs (sNaNs)
19166     are denoted by the first bit of their trailing significand field
19167     being 1.
19168
19169     The '-mnan=2008' option selects the IEEE 754-2008 encoding.  In
19170     this case qNaNs are denoted by the first bit of their trailing
19171     significand field being 1, whereas sNaNs are denoted by the first
19172     bit of their trailing significand field being 0.
19173
19174     The default is '-mnan=legacy' unless GCC has been configured with
19175     '--with-nan=2008'.
19176
19177'-mllsc'
19178'-mno-llsc'
19179     Use (do not use) 'll', 'sc', and 'sync' instructions to implement
19180     atomic memory built-in functions.  When neither option is
19181     specified, GCC uses the instructions if the target architecture
19182     supports them.
19183
19184     '-mllsc' is useful if the runtime environment can emulate the
19185     instructions and '-mno-llsc' can be useful when compiling for
19186     nonstandard ISAs.  You can make either option the default by
19187     configuring GCC with '--with-llsc' and '--without-llsc'
19188     respectively.  '--with-llsc' is the default for some
19189     configurations; see the installation documentation for details.
19190
19191'-mdsp'
19192'-mno-dsp'
19193     Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
19194     Built-in Functions::.  This option defines the preprocessor macro
19195     '__mips_dsp'.  It also defines '__mips_dsp_rev' to 1.
19196
19197'-mdspr2'
19198'-mno-dspr2'
19199     Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
19200     Built-in Functions::.  This option defines the preprocessor macros
19201     '__mips_dsp' and '__mips_dspr2'.  It also defines '__mips_dsp_rev'
19202     to 2.
19203
19204'-msmartmips'
19205'-mno-smartmips'
19206     Use (do not use) the MIPS SmartMIPS ASE.
19207
19208'-mpaired-single'
19209'-mno-paired-single'
19210     Use (do not use) paired-single floating-point instructions.  *Note
19211     MIPS Paired-Single Support::.  This option requires hardware
19212     floating-point support to be enabled.
19213
19214'-mdmx'
19215'-mno-mdmx'
19216     Use (do not use) MIPS Digital Media Extension instructions.  This
19217     option can only be used when generating 64-bit code and requires
19218     hardware floating-point support to be enabled.
19219
19220'-mips3d'
19221'-mno-mips3d'
19222     Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
19223     Functions::.  The option '-mips3d' implies '-mpaired-single'.
19224
19225'-mmicromips'
19226'-mno-micromips'
19227     Generate (do not generate) microMIPS code.
19228
19229     MicroMIPS code generation can also be controlled on a per-function
19230     basis by means of 'micromips' and 'nomicromips' attributes.  *Note
19231     Function Attributes::, for more information.
19232
19233'-mmt'
19234'-mno-mt'
19235     Use (do not use) MT Multithreading instructions.
19236
19237'-mmcu'
19238'-mno-mcu'
19239     Use (do not use) the MIPS MCU ASE instructions.
19240
19241'-meva'
19242'-mno-eva'
19243     Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
19244
19245'-mvirt'
19246'-mno-virt'
19247     Use (do not use) the MIPS Virtualization (VZ) instructions.
19248
19249'-mxpa'
19250'-mno-xpa'
19251     Use (do not use) the MIPS eXtended Physical Address (XPA)
19252     instructions.
19253
19254'-mlong64'
19255     Force 'long' types to be 64 bits wide.  See '-mlong32' for an
19256     explanation of the default and the way that the pointer size is
19257     determined.
19258
19259'-mlong32'
19260     Force 'long', 'int', and pointer types to be 32 bits wide.
19261
19262     The default size of 'int's, 'long's and pointers depends on the
19263     ABI.  All the supported ABIs use 32-bit 'int's.  The n64 ABI uses
19264     64-bit 'long's, as does the 64-bit EABI; the others use 32-bit
19265     'long's.  Pointers are the same size as 'long's, or the same size
19266     as integer registers, whichever is smaller.
19267
19268'-msym32'
19269'-mno-sym32'
19270     Assume (do not assume) that all symbols have 32-bit values,
19271     regardless of the selected ABI.  This option is useful in
19272     combination with '-mabi=64' and '-mno-abicalls' because it allows
19273     GCC to generate shorter and faster references to symbolic
19274     addresses.
19275
19276'-G NUM'
19277     Put definitions of externally-visible data in a small data section
19278     if that data is no bigger than NUM bytes.  GCC can then generate
19279     more efficient accesses to the data; see '-mgpopt' for details.
19280
19281     The default '-G' option depends on the configuration.
19282
19283'-mlocal-sdata'
19284'-mno-local-sdata'
19285     Extend (do not extend) the '-G' behavior to local data too, such as
19286     to static variables in C.  '-mlocal-sdata' is the default for all
19287     configurations.
19288
19289     If the linker complains that an application is using too much small
19290     data, you might want to try rebuilding the less
19291     performance-critical parts with '-mno-local-sdata'.  You might also
19292     want to build large libraries with '-mno-local-sdata', so that the
19293     libraries leave more room for the main program.
19294
19295'-mextern-sdata'
19296'-mno-extern-sdata'
19297     Assume (do not assume) that externally-defined data is in a small
19298     data section if the size of that data is within the '-G' limit.
19299     '-mextern-sdata' is the default for all configurations.
19300
19301     If you compile a module MOD with '-mextern-sdata' '-G NUM'
19302     '-mgpopt', and MOD references a variable VAR that is no bigger than
19303     NUM bytes, you must make sure that VAR is placed in a small data
19304     section.  If VAR is defined by another module, you must either
19305     compile that module with a high-enough '-G' setting or attach a
19306     'section' attribute to VAR's definition.  If VAR is common, you
19307     must link the application with a high-enough '-G' setting.
19308
19309     The easiest way of satisfying these restrictions is to compile and
19310     link every module with the same '-G' option.  However, you may wish
19311     to build a library that supports several different small data
19312     limits.  You can do this by compiling the library with the highest
19313     supported '-G' setting and additionally using '-mno-extern-sdata'
19314     to stop the library from making assumptions about
19315     externally-defined data.
19316
19317'-mgpopt'
19318'-mno-gpopt'
19319     Use (do not use) GP-relative accesses for symbols that are known to
19320     be in a small data section; see '-G', '-mlocal-sdata' and
19321     '-mextern-sdata'.  '-mgpopt' is the default for all configurations.
19322
19323     '-mno-gpopt' is useful for cases where the '$gp' register might not
19324     hold the value of '_gp'.  For example, if the code is part of a
19325     library that might be used in a boot monitor, programs that call
19326     boot monitor routines pass an unknown value in '$gp'.  (In such
19327     situations, the boot monitor itself is usually compiled with
19328     '-G0'.)
19329
19330     '-mno-gpopt' implies '-mno-local-sdata' and '-mno-extern-sdata'.
19331
19332'-membedded-data'
19333'-mno-embedded-data'
19334     Allocate variables to the read-only data section first if possible,
19335     then next in the small data section if possible, otherwise in data.
19336     This gives slightly slower code than the default, but reduces the
19337     amount of RAM required when executing, and thus may be preferred
19338     for some embedded systems.
19339
19340'-muninit-const-in-rodata'
19341'-mno-uninit-const-in-rodata'
19342     Put uninitialized 'const' variables in the read-only data section.
19343     This option is only meaningful in conjunction with
19344     '-membedded-data'.
19345
19346'-mcode-readable=SETTING'
19347     Specify whether GCC may generate code that reads from executable
19348     sections.  There are three possible settings:
19349
19350     '-mcode-readable=yes'
19351          Instructions may freely access executable sections.  This is
19352          the default setting.
19353
19354     '-mcode-readable=pcrel'
19355          MIPS16 PC-relative load instructions can access executable
19356          sections, but other instructions must not do so.  This option
19357          is useful on 4KSc and 4KSd processors when the code TLBs have
19358          the Read Inhibit bit set.  It is also useful on processors
19359          that can be configured to have a dual instruction/data SRAM
19360          interface and that, like the M4K, automatically redirect
19361          PC-relative loads to the instruction RAM.
19362
19363     '-mcode-readable=no'
19364          Instructions must not access executable sections.  This option
19365          can be useful on targets that are configured to have a dual
19366          instruction/data SRAM interface but that (unlike the M4K) do
19367          not automatically redirect PC-relative loads to the
19368          instruction RAM.
19369
19370'-msplit-addresses'
19371'-mno-split-addresses'
19372     Enable (disable) use of the '%hi()' and '%lo()' assembler
19373     relocation operators.  This option has been superseded by
19374     '-mexplicit-relocs' but is retained for backwards compatibility.
19375
19376'-mexplicit-relocs'
19377'-mno-explicit-relocs'
19378     Use (do not use) assembler relocation operators when dealing with
19379     symbolic addresses.  The alternative, selected by
19380     '-mno-explicit-relocs', is to use assembler macros instead.
19381
19382     '-mexplicit-relocs' is the default if GCC was configured to use an
19383     assembler that supports relocation operators.
19384
19385'-mcheck-zero-division'
19386'-mno-check-zero-division'
19387     Trap (do not trap) on integer division by zero.
19388
19389     The default is '-mcheck-zero-division'.
19390
19391'-mdivide-traps'
19392'-mdivide-breaks'
19393     MIPS systems check for division by zero by generating either a
19394     conditional trap or a break instruction.  Using traps results in
19395     smaller code, but is only supported on MIPS II and later.  Also,
19396     some versions of the Linux kernel have a bug that prevents trap
19397     from generating the proper signal ('SIGFPE').  Use '-mdivide-traps'
19398     to allow conditional traps on architectures that support them and
19399     '-mdivide-breaks' to force the use of breaks.
19400
19401     The default is usually '-mdivide-traps', but this can be overridden
19402     at configure time using '--with-divide=breaks'.  Divide-by-zero
19403     checks can be completely disabled using '-mno-check-zero-division'.
19404
19405'-mload-store-pairs'
19406'-mno-load-store-pairs'
19407     Enable (disable) an optimization that pairs consecutive load or
19408     store instructions to enable load/store bonding.  This option is
19409     enabled by default but only takes effect when the selected
19410     architecture is known to support bonding.
19411
19412'-mmemcpy'
19413'-mno-memcpy'
19414     Force (do not force) the use of 'memcpy' for non-trivial block
19415     moves.  The default is '-mno-memcpy', which allows GCC to inline
19416     most constant-sized copies.
19417
19418'-mlong-calls'
19419'-mno-long-calls'
19420     Disable (do not disable) use of the 'jal' instruction.  Calling
19421     functions using 'jal' is more efficient but requires the caller and
19422     callee to be in the same 256 megabyte segment.
19423
19424     This option has no effect on abicalls code.  The default is
19425     '-mno-long-calls'.
19426
19427'-mmad'
19428'-mno-mad'
19429     Enable (disable) use of the 'mad', 'madu' and 'mul' instructions,
19430     as provided by the R4650 ISA.
19431
19432'-mimadd'
19433'-mno-imadd'
19434     Enable (disable) use of the 'madd' and 'msub' integer instructions.
19435     The default is '-mimadd' on architectures that support 'madd' and
19436     'msub' except for the 74k architecture where it was found to
19437     generate slower code.
19438
19439'-mfused-madd'
19440'-mno-fused-madd'
19441     Enable (disable) use of the floating-point multiply-accumulate
19442     instructions, when they are available.  The default is
19443     '-mfused-madd'.
19444
19445     On the R8000 CPU when multiply-accumulate instructions are used,
19446     the intermediate product is calculated to infinite precision and is
19447     not subject to the FCSR Flush to Zero bit.  This may be undesirable
19448     in some circumstances.  On other processors the result is
19449     numerically identical to the equivalent computation using separate
19450     multiply, add, subtract and negate instructions.
19451
19452'-nocpp'
19453     Tell the MIPS assembler to not run its preprocessor over user
19454     assembler files (with a '.s' suffix) when assembling them.
19455
19456'-mfix-24k'
19457'-mno-fix-24k'
19458     Work around the 24K E48 (lost data on stores during refill) errata.
19459     The workarounds are implemented by the assembler rather than by
19460     GCC.
19461
19462'-mfix-r4000'
19463'-mno-fix-r4000'
19464     Work around certain R4000 CPU errata:
19465        - A double-word or a variable shift may give an incorrect result
19466          if executed immediately after starting an integer division.
19467        - A double-word or a variable shift may give an incorrect result
19468          if executed while an integer multiplication is in progress.
19469        - An integer division may give an incorrect result if started in
19470          a delay slot of a taken branch or a jump.
19471
19472'-mfix-r4400'
19473'-mno-fix-r4400'
19474     Work around certain R4400 CPU errata:
19475        - A double-word or a variable shift may give an incorrect result
19476          if executed immediately after starting an integer division.
19477
19478'-mfix-r10000'
19479'-mno-fix-r10000'
19480     Work around certain R10000 errata:
19481        - 'll'/'sc' sequences may not behave atomically on revisions
19482          prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
19483
19484     This option can only be used if the target architecture supports
19485     branch-likely instructions.  '-mfix-r10000' is the default when
19486     '-march=r10000' is used; '-mno-fix-r10000' is the default
19487     otherwise.
19488
19489'-mfix-rm7000'
19490'-mno-fix-rm7000'
19491     Work around the RM7000 'dmult'/'dmultu' errata.  The workarounds
19492     are implemented by the assembler rather than by GCC.
19493
19494'-mfix-vr4120'
19495'-mno-fix-vr4120'
19496     Work around certain VR4120 errata:
19497        - 'dmultu' does not always produce the correct result.
19498        - 'div' and 'ddiv' do not always produce the correct result if
19499          one of the operands is negative.
19500     The workarounds for the division errata rely on special functions
19501     in 'libgcc.a'.  At present, these functions are only provided by
19502     the 'mips64vr*-elf' configurations.
19503
19504     Other VR4120 errata require a NOP to be inserted between certain
19505     pairs of instructions.  These errata are handled by the assembler,
19506     not by GCC itself.
19507
19508'-mfix-vr4130'
19509     Work around the VR4130 'mflo'/'mfhi' errata.  The workarounds are
19510     implemented by the assembler rather than by GCC, although GCC
19511     avoids using 'mflo' and 'mfhi' if the VR4130 'macc', 'macchi',
19512     'dmacc' and 'dmacchi' instructions are available instead.
19513
19514'-mfix-sb1'
19515'-mno-fix-sb1'
19516     Work around certain SB-1 CPU core errata.  (This flag currently
19517     works around the SB-1 revision 2 "F1" and "F2" floating-point
19518     errata.)
19519
19520'-mr10k-cache-barrier=SETTING'
19521     Specify whether GCC should insert cache barriers to avoid the side
19522     effects of speculation on R10K processors.
19523
19524     In common with many processors, the R10K tries to predict the
19525     outcome of a conditional branch and speculatively executes
19526     instructions from the "taken" branch.  It later aborts these
19527     instructions if the predicted outcome is wrong.  However, on the
19528     R10K, even aborted instructions can have side effects.
19529
19530     This problem only affects kernel stores and, depending on the
19531     system, kernel loads.  As an example, a speculatively-executed
19532     store may load the target memory into cache and mark the cache line
19533     as dirty, even if the store itself is later aborted.  If a DMA
19534     operation writes to the same area of memory before the "dirty" line
19535     is flushed, the cached data overwrites the DMA-ed data.  See the
19536     R10K processor manual for a full description, including other
19537     potential problems.
19538
19539     One workaround is to insert cache barrier instructions before every
19540     memory access that might be speculatively executed and that might
19541     have side effects even if aborted.  '-mr10k-cache-barrier=SETTING'
19542     controls GCC's implementation of this workaround.  It assumes that
19543     aborted accesses to any byte in the following regions does not have
19544     side effects:
19545
19546       1. the memory occupied by the current function's stack frame;
19547
19548       2. the memory occupied by an incoming stack argument;
19549
19550       3. the memory occupied by an object with a link-time-constant
19551          address.
19552
19553     It is the kernel's responsibility to ensure that speculative
19554     accesses to these regions are indeed safe.
19555
19556     If the input program contains a function declaration such as:
19557
19558          void foo (void);
19559
19560     then the implementation of 'foo' must allow 'j foo' and 'jal foo'
19561     to be executed speculatively.  GCC honors this restriction for
19562     functions it compiles itself.  It expects non-GCC functions (such
19563     as hand-written assembly code) to do the same.
19564
19565     The option has three forms:
19566
19567     '-mr10k-cache-barrier=load-store'
19568          Insert a cache barrier before a load or store that might be
19569          speculatively executed and that might have side effects even
19570          if aborted.
19571
19572     '-mr10k-cache-barrier=store'
19573          Insert a cache barrier before a store that might be
19574          speculatively executed and that might have side effects even
19575          if aborted.
19576
19577     '-mr10k-cache-barrier=none'
19578          Disable the insertion of cache barriers.  This is the default
19579          setting.
19580
19581'-mflush-func=FUNC'
19582'-mno-flush-func'
19583     Specifies the function to call to flush the I and D caches, or to
19584     not call any such function.  If called, the function must take the
19585     same arguments as the common '_flush_func', that is, the address of
19586     the memory range for which the cache is being flushed, the size of
19587     the memory range, and the number 3 (to flush both caches).  The
19588     default depends on the target GCC was configured for, but commonly
19589     is either '_flush_func' or '__cpu_flush'.
19590
19591'mbranch-cost=NUM'
19592     Set the cost of branches to roughly NUM "simple" instructions.
19593     This cost is only a heuristic and is not guaranteed to produce
19594     consistent results across releases.  A zero cost redundantly
19595     selects the default, which is based on the '-mtune' setting.
19596
19597'-mbranch-likely'
19598'-mno-branch-likely'
19599     Enable or disable use of Branch Likely instructions, regardless of
19600     the default for the selected architecture.  By default, Branch
19601     Likely instructions may be generated if they are supported by the
19602     selected architecture.  An exception is for the MIPS32 and MIPS64
19603     architectures and processors that implement those architectures;
19604     for those, Branch Likely instructions are not be generated by
19605     default because the MIPS32 and MIPS64 architectures specifically
19606     deprecate their use.
19607
19608'-mcompact-branches=never'
19609'-mcompact-branches=optimal'
19610'-mcompact-branches=always'
19611     These options control which form of branches will be generated.
19612     The default is '-mcompact-branches=optimal'.
19613
19614     The '-mcompact-branches=never' option ensures that compact branch
19615     instructions will never be generated.
19616
19617     The '-mcompact-branches=always' option ensures that a compact
19618     branch instruction will be generated if available.  If a compact
19619     branch instruction is not available, a delay slot form of the
19620     branch will be used instead.
19621
19622     This option is supported from MIPS Release 6 onwards.
19623
19624     The '-mcompact-branches=optimal' option will cause a delay slot
19625     branch to be used if one is available in the current ISA and the
19626     delay slot is successfully filled.  If the delay slot is not
19627     filled, a compact branch will be chosen if one is available.
19628
19629'-mfp-exceptions'
19630'-mno-fp-exceptions'
19631     Specifies whether FP exceptions are enabled.  This affects how FP
19632     instructions are scheduled for some processors.  The default is
19633     that FP exceptions are enabled.
19634
19635     For instance, on the SB-1, if FP exceptions are disabled, and we
19636     are emitting 64-bit code, then we can use both FP pipes.
19637     Otherwise, we can only use one FP pipe.
19638
19639'-mvr4130-align'
19640'-mno-vr4130-align'
19641     The VR4130 pipeline is two-way superscalar, but can only issue two
19642     instructions together if the first one is 8-byte aligned.  When
19643     this option is enabled, GCC aligns pairs of instructions that it
19644     thinks should execute in parallel.
19645
19646     This option only has an effect when optimizing for the VR4130.  It
19647     normally makes code faster, but at the expense of making it bigger.
19648     It is enabled by default at optimization level '-O3'.
19649
19650'-msynci'
19651'-mno-synci'
19652     Enable (disable) generation of 'synci' instructions on
19653     architectures that support it.  The 'synci' instructions (if
19654     enabled) are generated when '__builtin___clear_cache' is compiled.
19655
19656     This option defaults to '-mno-synci', but the default can be
19657     overridden by configuring GCC with '--with-synci'.
19658
19659     When compiling code for single processor systems, it is generally
19660     safe to use 'synci'.  However, on many multi-core (SMP) systems, it
19661     does not invalidate the instruction caches on all cores and may
19662     lead to undefined behavior.
19663
19664'-mrelax-pic-calls'
19665'-mno-relax-pic-calls'
19666     Try to turn PIC calls that are normally dispatched via register
19667     '$25' into direct calls.  This is only possible if the linker can
19668     resolve the destination at link time and if the destination is
19669     within range for a direct call.
19670
19671     '-mrelax-pic-calls' is the default if GCC was configured to use an
19672     assembler and a linker that support the '.reloc' assembly directive
19673     and '-mexplicit-relocs' is in effect.  With '-mno-explicit-relocs',
19674     this optimization can be performed by the assembler and the linker
19675     alone without help from the compiler.
19676
19677'-mmcount-ra-address'
19678'-mno-mcount-ra-address'
19679     Emit (do not emit) code that allows '_mcount' to modify the calling
19680     function's return address.  When enabled, this option extends the
19681     usual '_mcount' interface with a new RA-ADDRESS parameter, which
19682     has type 'intptr_t *' and is passed in register '$12'.  '_mcount'
19683     can then modify the return address by doing both of the following:
19684        * Returning the new address in register '$31'.
19685        * Storing the new address in '*RA-ADDRESS', if RA-ADDRESS is
19686          nonnull.
19687
19688     The default is '-mno-mcount-ra-address'.
19689
19690'-mframe-header-opt'
19691'-mno-frame-header-opt'
19692     Enable (disable) frame header optimization in the o32 ABI. When
19693     using the o32 ABI, calling functions will allocate 16 bytes on the
19694     stack for the called function to write out register arguments.
19695     When enabled, this optimization will suppress the allocation of the
19696     frame header if it can be determined that it is unused.
19697
19698     This optimization is off by default at all optimization levels.
19699
19700'-mlxc1-sxc1'
19701'-mno-lxc1-sxc1'
19702     When applicable, enable (disable) the generation of 'lwxc1',
19703     'swxc1', 'ldxc1', 'sdxc1' instructions.  Enabled by default.
19704
19705'-mmadd4'
19706'-mno-madd4'
19707     When applicable, enable (disable) the generation of 4-operand
19708     'madd.s', 'madd.d' and related instructions.  Enabled by default.
19709
19710
19711File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
19712
197133.18.27 MMIX Options
19714--------------------
19715
19716These options are defined for the MMIX:
19717
19718'-mlibfuncs'
19719'-mno-libfuncs'
19720     Specify that intrinsic library functions are being compiled,
19721     passing all values in registers, no matter the size.
19722
19723'-mepsilon'
19724'-mno-epsilon'
19725     Generate floating-point comparison instructions that compare with
19726     respect to the 'rE' epsilon register.
19727
19728'-mabi=mmixware'
19729'-mabi=gnu'
19730     Generate code that passes function parameters and return values
19731     that (in the called function) are seen as registers '$0' and up, as
19732     opposed to the GNU ABI which uses global registers '$231' and up.
19733
19734'-mzero-extend'
19735'-mno-zero-extend'
19736     When reading data from memory in sizes shorter than 64 bits, use
19737     (do not use) zero-extending load instructions by default, rather
19738     than sign-extending ones.
19739
19740'-mknuthdiv'
19741'-mno-knuthdiv'
19742     Make the result of a division yielding a remainder have the same
19743     sign as the divisor.  With the default, '-mno-knuthdiv', the sign
19744     of the remainder follows the sign of the dividend.  Both methods
19745     are arithmetically valid, the latter being almost exclusively used.
19746
19747'-mtoplevel-symbols'
19748'-mno-toplevel-symbols'
19749     Prepend (do not prepend) a ':' to all global symbols, so the
19750     assembly code can be used with the 'PREFIX' assembly directive.
19751
19752'-melf'
19753     Generate an executable in the ELF format, rather than the default
19754     'mmo' format used by the 'mmix' simulator.
19755
19756'-mbranch-predict'
19757'-mno-branch-predict'
19758     Use (do not use) the probable-branch instructions, when static
19759     branch prediction indicates a probable branch.
19760
19761'-mbase-addresses'
19762'-mno-base-addresses'
19763     Generate (do not generate) code that uses _base addresses_.  Using
19764     a base address automatically generates a request (handled by the
19765     assembler and the linker) for a constant to be set up in a global
19766     register.  The register is used for one or more base address
19767     requests within the range 0 to 255 from the value held in the
19768     register.  The generally leads to short and fast code, but the
19769     number of different data items that can be addressed is limited.
19770     This means that a program that uses lots of static data may require
19771     '-mno-base-addresses'.
19772
19773'-msingle-exit'
19774'-mno-single-exit'
19775     Force (do not force) generated code to have a single exit point in
19776     each function.
19777
19778
19779File: gcc.info,  Node: MN10300 Options,  Next: Moxie Options,  Prev: MMIX Options,  Up: Submodel Options
19780
197813.18.28 MN10300 Options
19782-----------------------
19783
19784These '-m' options are defined for Matsushita MN10300 architectures:
19785
19786'-mmult-bug'
19787     Generate code to avoid bugs in the multiply instructions for the
19788     MN10300 processors.  This is the default.
19789
19790'-mno-mult-bug'
19791     Do not generate code to avoid bugs in the multiply instructions for
19792     the MN10300 processors.
19793
19794'-mam33'
19795     Generate code using features specific to the AM33 processor.
19796
19797'-mno-am33'
19798     Do not generate code using features specific to the AM33 processor.
19799     This is the default.
19800
19801'-mam33-2'
19802     Generate code using features specific to the AM33/2.0 processor.
19803
19804'-mam34'
19805     Generate code using features specific to the AM34 processor.
19806
19807'-mtune=CPU-TYPE'
19808     Use the timing characteristics of the indicated CPU type when
19809     scheduling instructions.  This does not change the targeted
19810     processor type.  The CPU type must be one of 'mn10300', 'am33',
19811     'am33-2' or 'am34'.
19812
19813'-mreturn-pointer-on-d0'
19814     When generating a function that returns a pointer, return the
19815     pointer in both 'a0' and 'd0'.  Otherwise, the pointer is returned
19816     only in 'a0', and attempts to call such functions without a
19817     prototype result in errors.  Note that this option is on by
19818     default; use '-mno-return-pointer-on-d0' to disable it.
19819
19820'-mno-crt0'
19821     Do not link in the C run-time initialization object file.
19822
19823'-mrelax'
19824     Indicate to the linker that it should perform a relaxation
19825     optimization pass to shorten branches, calls and absolute memory
19826     addresses.  This option only has an effect when used on the command
19827     line for the final link step.
19828
19829     This option makes symbolic debugging impossible.
19830
19831'-mliw'
19832     Allow the compiler to generate _Long Instruction Word_ instructions
19833     if the target is the 'AM33' or later.  This is the default.  This
19834     option defines the preprocessor macro '__LIW__'.
19835
19836'-mnoliw'
19837     Do not allow the compiler to generate _Long Instruction Word_
19838     instructions.  This option defines the preprocessor macro
19839     '__NO_LIW__'.
19840
19841'-msetlb'
19842     Allow the compiler to generate the _SETLB_ and _Lcc_ instructions
19843     if the target is the 'AM33' or later.  This is the default.  This
19844     option defines the preprocessor macro '__SETLB__'.
19845
19846'-mnosetlb'
19847     Do not allow the compiler to generate _SETLB_ or _Lcc_
19848     instructions.  This option defines the preprocessor macro
19849     '__NO_SETLB__'.
19850
19851
19852File: gcc.info,  Node: Moxie Options,  Next: MSP430 Options,  Prev: MN10300 Options,  Up: Submodel Options
19853
198543.18.29 Moxie Options
19855---------------------
19856
19857'-meb'
19858     Generate big-endian code.  This is the default for 'moxie-*-*'
19859     configurations.
19860
19861'-mel'
19862     Generate little-endian code.
19863
19864'-mmul.x'
19865     Generate mul.x and umul.x instructions.  This is the default for
19866     'moxiebox-*-*' configurations.
19867
19868'-mno-crt0'
19869     Do not link in the C run-time initialization object file.
19870
19871
19872File: gcc.info,  Node: MSP430 Options,  Next: NDS32 Options,  Prev: Moxie Options,  Up: Submodel Options
19873
198743.18.30 MSP430 Options
19875----------------------
19876
19877These options are defined for the MSP430:
19878
19879'-masm-hex'
19880     Force assembly output to always use hex constants.  Normally such
19881     constants are signed decimals, but this option is available for
19882     testsuite and/or aesthetic purposes.
19883
19884'-mmcu='
19885     Select the MCU to target.  This is used to create a C preprocessor
19886     symbol based upon the MCU name, converted to upper case and pre-
19887     and post-fixed with '__'.  This in turn is used by the 'msp430.h'
19888     header file to select an MCU-specific supplementary header file.
19889
19890     The option also sets the ISA to use.  If the MCU name is one that
19891     is known to only support the 430 ISA then that is selected,
19892     otherwise the 430X ISA is selected.  A generic MCU name of 'msp430'
19893     can also be used to select the 430 ISA. Similarly the generic
19894     'msp430x' MCU name selects the 430X ISA.
19895
19896     In addition an MCU-specific linker script is added to the linker
19897     command line.  The script's name is the name of the MCU with '.ld'
19898     appended.  Thus specifying '-mmcu=xxx' on the 'gcc' command line
19899     defines the C preprocessor symbol '__XXX__' and cause the linker to
19900     search for a script called 'xxx.ld'.
19901
19902     This option is also passed on to the assembler.
19903
19904'-mwarn-mcu'
19905'-mno-warn-mcu'
19906     This option enables or disables warnings about conflicts between
19907     the MCU name specified by the '-mmcu' option and the ISA set by the
19908     '-mcpu' option and/or the hardware multiply support set by the
19909     '-mhwmult' option.  It also toggles warnings about unrecognized MCU
19910     names.  This option is on by default.
19911
19912'-mcpu='
19913     Specifies the ISA to use.  Accepted values are 'msp430', 'msp430x'
19914     and 'msp430xv2'.  This option is deprecated.  The '-mmcu=' option
19915     should be used to select the ISA.
19916
19917'-msim'
19918     Link to the simulator runtime libraries and linker script.
19919     Overrides any scripts that would be selected by the '-mmcu='
19920     option.
19921
19922'-mlarge'
19923     Use large-model addressing (20-bit pointers, 32-bit 'size_t').
19924
19925'-msmall'
19926     Use small-model addressing (16-bit pointers, 16-bit 'size_t').
19927
19928'-mrelax'
19929     This option is passed to the assembler and linker, and allows the
19930     linker to perform certain optimizations that cannot be done until
19931     the final link.
19932
19933'mhwmult='
19934     Describes the type of hardware multiply supported by the target.
19935     Accepted values are 'none' for no hardware multiply, '16bit' for
19936     the original 16-bit-only multiply supported by early MCUs.  '32bit'
19937     for the 16/32-bit multiply supported by later MCUs and 'f5series'
19938     for the 16/32-bit multiply supported by F5-series MCUs.  A value of
19939     'auto' can also be given.  This tells GCC to deduce the hardware
19940     multiply support based upon the MCU name provided by the '-mmcu'
19941     option.  If no '-mmcu' option is specified or if the MCU name is
19942     not recognized then no hardware multiply support is assumed.
19943     'auto' is the default setting.
19944
19945     Hardware multiplies are normally performed by calling a library
19946     routine.  This saves space in the generated code.  When compiling
19947     at '-O3' or higher however the hardware multiplier is invoked
19948     inline.  This makes for bigger, but faster code.
19949
19950     The hardware multiply routines disable interrupts whilst running
19951     and restore the previous interrupt state when they finish.  This
19952     makes them safe to use inside interrupt handlers as well as in
19953     normal code.
19954
19955'-minrt'
19956     Enable the use of a minimum runtime environment - no static
19957     initializers or constructors.  This is intended for
19958     memory-constrained devices.  The compiler includes special symbols
19959     in some objects that tell the linker and runtime which code
19960     fragments are required.
19961
19962'-mcode-region='
19963'-mdata-region='
19964     These options tell the compiler where to place functions and data
19965     that do not have one of the 'lower', 'upper', 'either' or 'section'
19966     attributes.  Possible values are 'lower', 'upper', 'either' or
19967     'any'.  The first three behave like the corresponding attribute.
19968     The fourth possible value - 'any' - is the default.  It leaves
19969     placement entirely up to the linker script and how it assigns the
19970     standard sections ('.text', '.data', etc) to the memory regions.
19971
19972'-msilicon-errata='
19973     This option passes on a request to assembler to enable the fixes
19974     for the named silicon errata.
19975
19976'-msilicon-errata-warn='
19977     This option passes on a request to the assembler to enable warning
19978     messages when a silicon errata might need to be applied.
19979
19980
19981File: gcc.info,  Node: NDS32 Options,  Next: Nios II Options,  Prev: MSP430 Options,  Up: Submodel Options
19982
199833.18.31 NDS32 Options
19984---------------------
19985
19986These options are defined for NDS32 implementations:
19987
19988'-mbig-endian'
19989     Generate code in big-endian mode.
19990
19991'-mlittle-endian'
19992     Generate code in little-endian mode.
19993
19994'-mreduced-regs'
19995     Use reduced-set registers for register allocation.
19996
19997'-mfull-regs'
19998     Use full-set registers for register allocation.
19999
20000'-mcmov'
20001     Generate conditional move instructions.
20002
20003'-mno-cmov'
20004     Do not generate conditional move instructions.
20005
20006'-mext-perf'
20007     Generate performance extension instructions.
20008
20009'-mno-ext-perf'
20010     Do not generate performance extension instructions.
20011
20012'-mext-perf2'
20013     Generate performance extension 2 instructions.
20014
20015'-mno-ext-perf2'
20016     Do not generate performance extension 2 instructions.
20017
20018'-mext-string'
20019     Generate string extension instructions.
20020
20021'-mno-ext-string'
20022     Do not generate string extension instructions.
20023
20024'-mv3push'
20025     Generate v3 push25/pop25 instructions.
20026
20027'-mno-v3push'
20028     Do not generate v3 push25/pop25 instructions.
20029
20030'-m16-bit'
20031     Generate 16-bit instructions.
20032
20033'-mno-16-bit'
20034     Do not generate 16-bit instructions.
20035
20036'-misr-vector-size=NUM'
20037     Specify the size of each interrupt vector, which must be 4 or 16.
20038
20039'-mcache-block-size=NUM'
20040     Specify the size of each cache block, which must be a power of 2
20041     between 4 and 512.
20042
20043'-march=ARCH'
20044     Specify the name of the target architecture.
20045
20046'-mcmodel=CODE-MODEL'
20047     Set the code model to one of
20048     'small'
20049          All the data and read-only data segments must be within 512KB
20050          addressing space.  The text segment must be within 16MB
20051          addressing space.
20052     'medium'
20053          The data segment must be within 512KB while the read-only data
20054          segment can be within 4GB addressing space.  The text segment
20055          should be still within 16MB addressing space.
20056     'large'
20057          All the text and data segments can be within 4GB addressing
20058          space.
20059
20060'-mctor-dtor'
20061     Enable constructor/destructor feature.
20062
20063'-mrelax'
20064     Guide linker to relax instructions.
20065
20066
20067File: gcc.info,  Node: Nios II Options,  Next: Nvidia PTX Options,  Prev: NDS32 Options,  Up: Submodel Options
20068
200693.18.32 Nios II Options
20070-----------------------
20071
20072These are the options defined for the Altera Nios II processor.
20073
20074'-G NUM'
20075     Put global and static objects less than or equal to NUM bytes into
20076     the small data or BSS sections instead of the normal data or BSS
20077     sections.  The default value of NUM is 8.
20078
20079'-mgpopt=OPTION'
20080'-mgpopt'
20081'-mno-gpopt'
20082     Generate (do not generate) GP-relative accesses.  The following
20083     OPTION names are recognized:
20084
20085     'none'
20086          Do not generate GP-relative accesses.
20087
20088     'local'
20089          Generate GP-relative accesses for small data objects that are
20090          not external, weak, or uninitialized common symbols.  Also use
20091          GP-relative addressing for objects that have been explicitly
20092          placed in a small data section via a 'section' attribute.
20093
20094     'global'
20095          As for 'local', but also generate GP-relative accesses for
20096          small data objects that are external, weak, or common.  If you
20097          use this option, you must ensure that all parts of your
20098          program (including libraries) are compiled with the same '-G'
20099          setting.
20100
20101     'data'
20102          Generate GP-relative accesses for all data objects in the
20103          program.  If you use this option, the entire data and BSS
20104          segments of your program must fit in 64K of memory and you
20105          must use an appropriate linker script to allocate them within
20106          the addressable range of the global pointer.
20107
20108     'all'
20109          Generate GP-relative addresses for function pointers as well
20110          as data pointers.  If you use this option, the entire text,
20111          data, and BSS segments of your program must fit in 64K of
20112          memory and you must use an appropriate linker script to
20113          allocate them within the addressable range of the global
20114          pointer.
20115
20116     '-mgpopt' is equivalent to '-mgpopt=local', and '-mno-gpopt' is
20117     equivalent to '-mgpopt=none'.
20118
20119     The default is '-mgpopt' except when '-fpic' or '-fPIC' is
20120     specified to generate position-independent code.  Note that the
20121     Nios II ABI does not permit GP-relative accesses from shared
20122     libraries.
20123
20124     You may need to specify '-mno-gpopt' explicitly when building
20125     programs that include large amounts of small data, including large
20126     GOT data sections.  In this case, the 16-bit offset for GP-relative
20127     addressing may not be large enough to allow access to the entire
20128     small data section.
20129
20130'-mgprel-sec=REGEXP'
20131     This option specifies additional section names that can be accessed
20132     via GP-relative addressing.  It is most useful in conjunction with
20133     'section' attributes on variable declarations (*note Common
20134     Variable Attributes::) and a custom linker script.  The REGEXP is a
20135     POSIX Extended Regular Expression.
20136
20137     This option does not affect the behavior of the '-G' option, and
20138     the specified sections are in addition to the standard '.sdata' and
20139     '.sbss' small-data sections that are recognized by '-mgpopt'.
20140
20141'-mr0rel-sec=REGEXP'
20142     This option specifies names of sections that can be accessed via a
20143     16-bit offset from 'r0'; that is, in the low 32K or high 32K of the
20144     32-bit address space.  It is most useful in conjunction with
20145     'section' attributes on variable declarations (*note Common
20146     Variable Attributes::) and a custom linker script.  The REGEXP is a
20147     POSIX Extended Regular Expression.
20148
20149     In contrast to the use of GP-relative addressing for small data,
20150     zero-based addressing is never generated by default and there are
20151     no conventional section names used in standard linker scripts for
20152     sections in the low or high areas of memory.
20153
20154'-mel'
20155'-meb'
20156     Generate little-endian (default) or big-endian (experimental) code,
20157     respectively.
20158
20159'-march=ARCH'
20160     This specifies the name of the target Nios II architecture.  GCC
20161     uses this name to determine what kind of instructions it can emit
20162     when generating assembly code.  Permissible names are: 'r1', 'r2'.
20163
20164     The preprocessor macro '__nios2_arch__' is available to programs,
20165     with value 1 or 2, indicating the targeted ISA level.
20166
20167'-mbypass-cache'
20168'-mno-bypass-cache'
20169     Force all load and store instructions to always bypass cache by
20170     using I/O variants of the instructions.  The default is not to
20171     bypass the cache.
20172
20173'-mno-cache-volatile'
20174'-mcache-volatile'
20175     Volatile memory access bypass the cache using the I/O variants of
20176     the load and store instructions.  The default is not to bypass the
20177     cache.
20178
20179'-mno-fast-sw-div'
20180'-mfast-sw-div'
20181     Do not use table-based fast divide for small numbers.  The default
20182     is to use the fast divide at '-O3' and above.
20183
20184'-mno-hw-mul'
20185'-mhw-mul'
20186'-mno-hw-mulx'
20187'-mhw-mulx'
20188'-mno-hw-div'
20189'-mhw-div'
20190     Enable or disable emitting 'mul', 'mulx' and 'div' family of
20191     instructions by the compiler.  The default is to emit 'mul' and not
20192     emit 'div' and 'mulx'.
20193
20194'-mbmx'
20195'-mno-bmx'
20196'-mcdx'
20197'-mno-cdx'
20198     Enable or disable generation of Nios II R2 BMX (bit manipulation)
20199     and CDX (code density) instructions.  Enabling these instructions
20200     also requires '-march=r2'.  Since these instructions are optional
20201     extensions to the R2 architecture, the default is not to emit them.
20202
20203'-mcustom-INSN=N'
20204'-mno-custom-INSN'
20205     Each '-mcustom-INSN=N' option enables use of a custom instruction
20206     with encoding N when generating code that uses INSN.  For example,
20207     '-mcustom-fadds=253' generates custom instruction 253 for
20208     single-precision floating-point add operations instead of the
20209     default behavior of using a library call.
20210
20211     The following values of INSN are supported.  Except as otherwise
20212     noted, floating-point operations are expected to be implemented
20213     with normal IEEE 754 semantics and correspond directly to the C
20214     operators or the equivalent GCC built-in functions (*note Other
20215     Builtins::).
20216
20217     Single-precision floating point:
20218
20219     'fadds', 'fsubs', 'fdivs', 'fmuls'
20220          Binary arithmetic operations.
20221
20222     'fnegs'
20223          Unary negation.
20224
20225     'fabss'
20226          Unary absolute value.
20227
20228     'fcmpeqs', 'fcmpges', 'fcmpgts', 'fcmples', 'fcmplts', 'fcmpnes'
20229          Comparison operations.
20230
20231     'fmins', 'fmaxs'
20232          Floating-point minimum and maximum.  These instructions are
20233          only generated if '-ffinite-math-only' is specified.
20234
20235     'fsqrts'
20236          Unary square root operation.
20237
20238     'fcoss', 'fsins', 'ftans', 'fatans', 'fexps', 'flogs'
20239          Floating-point trigonometric and exponential functions.  These
20240          instructions are only generated if
20241          '-funsafe-math-optimizations' is also specified.
20242
20243     Double-precision floating point:
20244
20245     'faddd', 'fsubd', 'fdivd', 'fmuld'
20246          Binary arithmetic operations.
20247
20248     'fnegd'
20249          Unary negation.
20250
20251     'fabsd'
20252          Unary absolute value.
20253
20254     'fcmpeqd', 'fcmpged', 'fcmpgtd', 'fcmpled', 'fcmpltd', 'fcmpned'
20255          Comparison operations.
20256
20257     'fmind', 'fmaxd'
20258          Double-precision minimum and maximum.  These instructions are
20259          only generated if '-ffinite-math-only' is specified.
20260
20261     'fsqrtd'
20262          Unary square root operation.
20263
20264     'fcosd', 'fsind', 'ftand', 'fatand', 'fexpd', 'flogd'
20265          Double-precision trigonometric and exponential functions.
20266          These instructions are only generated if
20267          '-funsafe-math-optimizations' is also specified.
20268
20269     Conversions:
20270     'fextsd'
20271          Conversion from single precision to double precision.
20272
20273     'ftruncds'
20274          Conversion from double precision to single precision.
20275
20276     'fixsi', 'fixsu', 'fixdi', 'fixdu'
20277          Conversion from floating point to signed or unsigned integer
20278          types, with truncation towards zero.
20279
20280     'round'
20281          Conversion from single-precision floating point to signed
20282          integer, rounding to the nearest integer and ties away from
20283          zero.  This corresponds to the '__builtin_lroundf' function
20284          when '-fno-math-errno' is used.
20285
20286     'floatis', 'floatus', 'floatid', 'floatud'
20287          Conversion from signed or unsigned integer types to
20288          floating-point types.
20289
20290     In addition, all of the following transfer instructions for
20291     internal registers X and Y must be provided to use any of the
20292     double-precision floating-point instructions.  Custom instructions
20293     taking two double-precision source operands expect the first
20294     operand in the 64-bit register X. The other operand (or only
20295     operand of a unary operation) is given to the custom arithmetic
20296     instruction with the least significant half in source register SRC1
20297     and the most significant half in SRC2.  A custom instruction that
20298     returns a double-precision result returns the most significant 32
20299     bits in the destination register and the other half in 32-bit
20300     register Y. GCC automatically generates the necessary code
20301     sequences to write register X and/or read register Y when
20302     double-precision floating-point instructions are used.
20303
20304     'fwrx'
20305          Write SRC1 into the least significant half of X and SRC2 into
20306          the most significant half of X.
20307
20308     'fwry'
20309          Write SRC1 into Y.
20310
20311     'frdxhi', 'frdxlo'
20312          Read the most or least (respectively) significant half of X
20313          and store it in DEST.
20314
20315     'frdy'
20316          Read the value of Y and store it into DEST.
20317
20318     Note that you can gain more local control over generation of Nios
20319     II custom instructions by using the 'target("custom-INSN=N")' and
20320     'target("no-custom-INSN")' function attributes (*note Function
20321     Attributes::) or pragmas (*note Function Specific Option
20322     Pragmas::).
20323
20324'-mcustom-fpu-cfg=NAME'
20325
20326     This option enables a predefined, named set of custom instruction
20327     encodings (see '-mcustom-INSN' above).  Currently, the following
20328     sets are defined:
20329
20330     '-mcustom-fpu-cfg=60-1' is equivalent to:
20331          -mcustom-fmuls=252
20332          -mcustom-fadds=253
20333          -mcustom-fsubs=254
20334          -fsingle-precision-constant
20335
20336     '-mcustom-fpu-cfg=60-2' is equivalent to:
20337          -mcustom-fmuls=252
20338          -mcustom-fadds=253
20339          -mcustom-fsubs=254
20340          -mcustom-fdivs=255
20341          -fsingle-precision-constant
20342
20343     '-mcustom-fpu-cfg=72-3' is equivalent to:
20344          -mcustom-floatus=243
20345          -mcustom-fixsi=244
20346          -mcustom-floatis=245
20347          -mcustom-fcmpgts=246
20348          -mcustom-fcmples=249
20349          -mcustom-fcmpeqs=250
20350          -mcustom-fcmpnes=251
20351          -mcustom-fmuls=252
20352          -mcustom-fadds=253
20353          -mcustom-fsubs=254
20354          -mcustom-fdivs=255
20355          -fsingle-precision-constant
20356
20357     Custom instruction assignments given by individual '-mcustom-INSN='
20358     options override those given by '-mcustom-fpu-cfg=', regardless of
20359     the order of the options on the command line.
20360
20361     Note that you can gain more local control over selection of a FPU
20362     configuration by using the 'target("custom-fpu-cfg=NAME")' function
20363     attribute (*note Function Attributes::) or pragma (*note Function
20364     Specific Option Pragmas::).
20365
20366 These additional '-m' options are available for the Altera Nios II ELF
20367(bare-metal) target:
20368
20369'-mhal'
20370     Link with HAL BSP. This suppresses linking with the GCC-provided C
20371     runtime startup and termination code, and is typically used in
20372     conjunction with '-msys-crt0=' to specify the location of the
20373     alternate startup code provided by the HAL BSP.
20374
20375'-msmallc'
20376     Link with a limited version of the C library, '-lsmallc', rather
20377     than Newlib.
20378
20379'-msys-crt0=STARTFILE'
20380     STARTFILE is the file name of the startfile (crt0) to use when
20381     linking.  This option is only useful in conjunction with '-mhal'.
20382
20383'-msys-lib=SYSTEMLIB'
20384     SYSTEMLIB is the library name of the library that provides
20385     low-level system calls required by the C library, e.g.  'read' and
20386     'write'.  This option is typically used to link with a library
20387     provided by a HAL BSP.
20388
20389
20390File: gcc.info,  Node: Nvidia PTX Options,  Next: PDP-11 Options,  Prev: Nios II Options,  Up: Submodel Options
20391
203923.18.33 Nvidia PTX Options
20393--------------------------
20394
20395These options are defined for Nvidia PTX:
20396
20397'-m32'
20398'-m64'
20399     Generate code for 32-bit or 64-bit ABI.
20400
20401'-mmainkernel'
20402     Link in code for a __main kernel.  This is for stand-alone instead
20403     of offloading execution.
20404
20405'-moptimize'
20406     Apply partitioned execution optimizations.  This is the default
20407     when any level of optimization is selected.
20408
20409'-msoft-stack'
20410     Generate code that does not use '.local' memory directly for stack
20411     storage.  Instead, a per-warp stack pointer is maintained
20412     explicitly.  This enables variable-length stack allocation (with
20413     variable-length arrays or 'alloca'), and when global memory is used
20414     for underlying storage, makes it possible to access automatic
20415     variables from other threads, or with atomic instructions.  This
20416     code generation variant is used for OpenMP offloading, but the
20417     option is exposed on its own for the purpose of testing the
20418     compiler; to generate code suitable for linking into programs using
20419     OpenMP offloading, use option '-mgomp'.
20420
20421'-muniform-simt'
20422     Switch to code generation variant that allows to execute all
20423     threads in each warp, while maintaining memory state and side
20424     effects as if only one thread in each warp was active outside of
20425     OpenMP SIMD regions.  All atomic operations and calls to runtime
20426     (malloc, free, vprintf) are conditionally executed (iff current
20427     lane index equals the master lane index), and the register being
20428     assigned is copied via a shuffle instruction from the master lane.
20429     Outside of SIMD regions lane 0 is the master; inside, each thread
20430     sees itself as the master.  Shared memory array 'int __nvptx_uni[]'
20431     stores all-zeros or all-ones bitmasks for each warp, indicating
20432     current mode (0 outside of SIMD regions).  Each thread can
20433     bitwise-and the bitmask at position 'tid.y' with current lane index
20434     to compute the master lane index.
20435
20436'-mgomp'
20437     Generate code for use in OpenMP offloading: enables '-msoft-stack'
20438     and '-muniform-simt' options, and selects corresponding multilib
20439     variant.
20440
20441
20442File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: Nvidia PTX Options,  Up: Submodel Options
20443
204443.18.34 PDP-11 Options
20445----------------------
20446
20447These options are defined for the PDP-11:
20448
20449'-mfpu'
20450     Use hardware FPP floating point.  This is the default.  (FIS
20451     floating point on the PDP-11/40 is not supported.)
20452
20453'-msoft-float'
20454     Do not use hardware floating point.
20455
20456'-mac0'
20457     Return floating-point results in ac0 (fr0 in Unix assembler
20458     syntax).
20459
20460'-mno-ac0'
20461     Return floating-point results in memory.  This is the default.
20462
20463'-m40'
20464     Generate code for a PDP-11/40.
20465
20466'-m45'
20467     Generate code for a PDP-11/45.  This is the default.
20468
20469'-m10'
20470     Generate code for a PDP-11/10.
20471
20472'-mbcopy-builtin'
20473     Use inline 'movmemhi' patterns for copying memory.  This is the
20474     default.
20475
20476'-mbcopy'
20477     Do not use inline 'movmemhi' patterns for copying memory.
20478
20479'-mint16'
20480'-mno-int32'
20481     Use 16-bit 'int'.  This is the default.
20482
20483'-mint32'
20484'-mno-int16'
20485     Use 32-bit 'int'.
20486
20487'-mfloat64'
20488'-mno-float32'
20489     Use 64-bit 'float'.  This is the default.
20490
20491'-mfloat32'
20492'-mno-float64'
20493     Use 32-bit 'float'.
20494
20495'-mabshi'
20496     Use 'abshi2' pattern.  This is the default.
20497
20498'-mno-abshi'
20499     Do not use 'abshi2' pattern.
20500
20501'-mbranch-expensive'
20502     Pretend that branches are expensive.  This is for experimenting
20503     with code generation only.
20504
20505'-mbranch-cheap'
20506     Do not pretend that branches are expensive.  This is the default.
20507
20508'-munix-asm'
20509     Use Unix assembler syntax.  This is the default when configured for
20510     'pdp11-*-bsd'.
20511
20512'-mdec-asm'
20513     Use DEC assembler syntax.  This is the default when configured for
20514     any PDP-11 target other than 'pdp11-*-bsd'.
20515
20516
20517File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
20518
205193.18.35 picoChip Options
20520------------------------
20521
20522These '-m' options are defined for picoChip implementations:
20523
20524'-mae=AE_TYPE'
20525     Set the instruction set, register set, and instruction scheduling
20526     parameters for array element type AE_TYPE.  Supported values for
20527     AE_TYPE are 'ANY', 'MUL', and 'MAC'.
20528
20529     '-mae=ANY' selects a completely generic AE type.  Code generated
20530     with this option runs on any of the other AE types.  The code is
20531     not as efficient as it would be if compiled for a specific AE type,
20532     and some types of operation (e.g., multiplication) do not work
20533     properly on all types of AE.
20534
20535     '-mae=MUL' selects a MUL AE type.  This is the most useful AE type
20536     for compiled code, and is the default.
20537
20538     '-mae=MAC' selects a DSP-style MAC AE. Code compiled with this
20539     option may suffer from poor performance of byte (char)
20540     manipulation, since the DSP AE does not provide hardware support
20541     for byte load/stores.
20542
20543'-msymbol-as-address'
20544     Enable the compiler to directly use a symbol name as an address in
20545     a load/store instruction, without first loading it into a register.
20546     Typically, the use of this option generates larger programs, which
20547     run faster than when the option isn't used.  However, the results
20548     vary from program to program, so it is left as a user option,
20549     rather than being permanently enabled.
20550
20551'-mno-inefficient-warnings'
20552     Disables warnings about the generation of inefficient code.  These
20553     warnings can be generated, for example, when compiling code that
20554     performs byte-level memory operations on the MAC AE type.  The MAC
20555     AE has no hardware support for byte-level memory operations, so all
20556     byte load/stores must be synthesized from word load/store
20557     operations.  This is inefficient and a warning is generated to
20558     indicate that you should rewrite the code to avoid byte operations,
20559     or to target an AE type that has the necessary hardware support.
20560     This option disables these warnings.
20561
20562
20563File: gcc.info,  Node: PowerPC Options,  Next: PowerPC SPE Options,  Prev: picoChip Options,  Up: Submodel Options
20564
205653.18.36 PowerPC Options
20566-----------------------
20567
20568These are listed under *Note RS/6000 and PowerPC Options::.
20569
20570
20571File: gcc.info,  Node: PowerPC SPE Options,  Next: RISC-V Options,  Prev: PowerPC Options,  Up: Submodel Options
20572
205733.18.37 PowerPC SPE Options
20574---------------------------
20575
20576These '-m' options are defined for PowerPC SPE:
20577'-mmfcrf'
20578'-mno-mfcrf'
20579'-mpopcntb'
20580'-mno-popcntb'
20581     You use these options to specify which instructions are available
20582     on the processor you are using.  The default value of these options
20583     is determined when configuring GCC.  Specifying the
20584     '-mcpu=CPU_TYPE' overrides the specification of these options.  We
20585     recommend you use the '-mcpu=CPU_TYPE' option rather than the
20586     options listed above.
20587
20588     The '-mmfcrf' option allows GCC to generate the move from condition
20589     register field instruction implemented on the POWER4 processor and
20590     other processors that support the PowerPC V2.01 architecture.  The
20591     '-mpopcntb' option allows GCC to generate the popcount and
20592     double-precision FP reciprocal estimate instruction implemented on
20593     the POWER5 processor and other processors that support the PowerPC
20594     V2.02 architecture.
20595
20596'-mcpu=CPU_TYPE'
20597     Set architecture type, register usage, and instruction scheduling
20598     parameters for machine type CPU_TYPE.  Supported values for
20599     CPU_TYPE are '8540', '8548', and 'native'.
20600
20601     '-mcpu=powerpc' specifies pure 32-bit PowerPC (either endian), with
20602     an appropriate, generic processor model assumed for scheduling
20603     purposes.
20604
20605     Specifying 'native' as cpu type detects and selects the
20606     architecture option that corresponds to the host processor of the
20607     system performing the compilation.  '-mcpu=native' has no effect if
20608     GCC does not recognize the processor.
20609
20610     The other options specify a specific processor.  Code generated
20611     under those options runs best on that processor, and may not run at
20612     all on others.
20613
20614     The '-mcpu' options automatically enable or disable the following
20615     options:
20616
20617          -mhard-float  -mmfcrf  -mmultiple
20618          -mpopcntb -mpopcntd
20619          -msingle-float -mdouble-float
20620          -mfloat128
20621
20622     The particular options set for any particular CPU varies between
20623     compiler versions, depending on what setting seems to produce
20624     optimal code for that CPU; it doesn't necessarily reflect the
20625     actual hardware's capabilities.  If you wish to set an individual
20626     option to a particular value, you may specify it after the '-mcpu'
20627     option, like '-mcpu=8548'.
20628
20629'-mtune=CPU_TYPE'
20630     Set the instruction scheduling parameters for machine type
20631     CPU_TYPE, but do not set the architecture type or register usage,
20632     as '-mcpu=CPU_TYPE' does.  The same values for CPU_TYPE are used
20633     for '-mtune' as for '-mcpu'.  If both are specified, the code
20634     generated uses the architecture and registers set by '-mcpu', but
20635     the scheduling parameters set by '-mtune'.
20636
20637'-msecure-plt'
20638     Generate code that allows 'ld' and 'ld.so' to build executables and
20639     shared libraries with non-executable '.plt' and '.got' sections.
20640     This is a PowerPC 32-bit SYSV ABI option.
20641
20642'-mbss-plt'
20643     Generate code that uses a BSS '.plt' section that 'ld.so' fills in,
20644     and requires '.plt' and '.got' sections that are both writable and
20645     executable.  This is a PowerPC 32-bit SYSV ABI option.
20646
20647'-misel'
20648'-mno-isel'
20649     This switch enables or disables the generation of ISEL
20650     instructions.
20651
20652'-misel=YES/NO'
20653     This switch has been deprecated.  Use '-misel' and '-mno-isel'
20654     instead.
20655
20656'-mspe'
20657'-mno-spe'
20658     This switch enables or disables the generation of SPE simd
20659     instructions.
20660
20661'-mspe=YES/NO'
20662     This option has been deprecated.  Use '-mspe' and '-mno-spe'
20663     instead.
20664
20665'-mfloat128'
20666'-mno-float128'
20667     Enable/disable the __FLOAT128 keyword for IEEE 128-bit floating
20668     point and use either software emulation for IEEE 128-bit floating
20669     point or hardware instructions.
20670
20671'-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
20672'-mfloat-gprs'
20673     This switch enables or disables the generation of floating-point
20674     operations on the general-purpose registers for architectures that
20675     support it.
20676
20677     The argument 'yes' or 'single' enables the use of single-precision
20678     floating-point operations.
20679
20680     The argument 'double' enables the use of single and
20681     double-precision floating-point operations.
20682
20683     The argument 'no' disables floating-point operations on the
20684     general-purpose registers.
20685
20686     This option is currently only available on the MPC854x.
20687
20688'-mfull-toc'
20689'-mno-fp-in-toc'
20690'-mno-sum-in-toc'
20691'-mminimal-toc'
20692     Modify generation of the TOC (Table Of Contents), which is created
20693     for every executable file.  The '-mfull-toc' option is selected by
20694     default.  In that case, GCC allocates at least one TOC entry for
20695     each unique non-automatic variable reference in your program.  GCC
20696     also places floating-point constants in the TOC.  However, only
20697     16,384 entries are available in the TOC.
20698
20699     If you receive a linker error message that saying you have
20700     overflowed the available TOC space, you can reduce the amount of
20701     TOC space used with the '-mno-fp-in-toc' and '-mno-sum-in-toc'
20702     options.  '-mno-fp-in-toc' prevents GCC from putting floating-point
20703     constants in the TOC and '-mno-sum-in-toc' forces GCC to generate
20704     code to calculate the sum of an address and a constant at run time
20705     instead of putting that sum into the TOC.  You may specify one or
20706     both of these options.  Each causes GCC to produce very slightly
20707     slower and larger code at the expense of conserving TOC space.
20708
20709     If you still run out of space in the TOC even when you specify both
20710     of these options, specify '-mminimal-toc' instead.  This option
20711     causes GCC to make only one TOC entry for every file.  When you
20712     specify this option, GCC produces code that is slower and larger
20713     but which uses extremely little TOC space.  You may wish to use
20714     this option only on files that contain less frequently-executed
20715     code.
20716
20717'-maix32'
20718     Disables the 64-bit ABI. GCC defaults to '-maix32'.
20719
20720'-mxl-compat'
20721'-mno-xl-compat'
20722     Produce code that conforms more closely to IBM XL compiler
20723     semantics when using AIX-compatible ABI.  Pass floating-point
20724     arguments to prototyped functions beyond the register save area
20725     (RSA) on the stack in addition to argument FPRs.  Do not assume
20726     that most significant double in 128-bit long double value is
20727     properly rounded when comparing values and converting to double.
20728     Use XL symbol names for long double support routines.
20729
20730     The AIX calling convention was extended but not initially
20731     documented to handle an obscure K&R C case of calling a function
20732     that takes the address of its arguments with fewer arguments than
20733     declared.  IBM XL compilers access floating-point arguments that do
20734     not fit in the RSA from the stack when a subroutine is compiled
20735     without optimization.  Because always storing floating-point
20736     arguments on the stack is inefficient and rarely needed, this
20737     option is not enabled by default and only is necessary when calling
20738     subroutines compiled by IBM XL compilers without optimization.
20739
20740'-malign-natural'
20741'-malign-power'
20742     On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
20743     '-malign-natural' overrides the ABI-defined alignment of larger
20744     types, such as floating-point doubles, on their natural size-based
20745     boundary.  The option '-malign-power' instructs GCC to follow the
20746     ABI-specified alignment rules.  GCC defaults to the standard
20747     alignment defined in the ABI.
20748
20749     On 64-bit Darwin, natural alignment is the default, and
20750     '-malign-power' is not supported.
20751
20752'-msoft-float'
20753'-mhard-float'
20754     Generate code that does not use (uses) the floating-point register
20755     set.  Software floating-point emulation is provided if you use the
20756     '-msoft-float' option, and pass the option to GCC when linking.
20757
20758'-msingle-float'
20759'-mdouble-float'
20760     Generate code for single- or double-precision floating-point
20761     operations.  '-mdouble-float' implies '-msingle-float'.
20762
20763'-mmultiple'
20764'-mno-multiple'
20765     Generate code that uses (does not use) the load multiple word
20766     instructions and the store multiple word instructions.  These
20767     instructions are generated by default on POWER systems, and not
20768     generated on PowerPC systems.  Do not use '-mmultiple' on
20769     little-endian PowerPC systems, since those instructions do not work
20770     when the processor is in little-endian mode.  The exceptions are
20771     PPC740 and PPC750 which permit these instructions in little-endian
20772     mode.
20773
20774'-mupdate'
20775'-mno-update'
20776     Generate code that uses (does not use) the load or store
20777     instructions that update the base register to the address of the
20778     calculated memory location.  These instructions are generated by
20779     default.  If you use '-mno-update', there is a small window between
20780     the time that the stack pointer is updated and the address of the
20781     previous frame is stored, which means code that walks the stack
20782     frame across interrupts or signals may get corrupted data.
20783
20784'-mavoid-indexed-addresses'
20785'-mno-avoid-indexed-addresses'
20786     Generate code that tries to avoid (not avoid) the use of indexed
20787     load or store instructions.  These instructions can incur a
20788     performance penalty on Power6 processors in certain situations,
20789     such as when stepping through large arrays that cross a 16M
20790     boundary.  This option is enabled by default when targeting Power6
20791     and disabled otherwise.
20792
20793'-mfused-madd'
20794'-mno-fused-madd'
20795     Generate code that uses (does not use) the floating-point multiply
20796     and accumulate instructions.  These instructions are generated by
20797     default if hardware floating point is used.  The machine-dependent
20798     '-mfused-madd' option is now mapped to the machine-independent
20799     '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
20800     '-ffp-contract=off'.
20801
20802'-mno-strict-align'
20803'-mstrict-align'
20804     On System V.4 and embedded PowerPC systems do not (do) assume that
20805     unaligned memory references are handled by the system.
20806
20807'-mrelocatable'
20808'-mno-relocatable'
20809     Generate code that allows (does not allow) a static executable to
20810     be relocated to a different address at run time.  A simple embedded
20811     PowerPC system loader should relocate the entire contents of
20812     '.got2' and 4-byte locations listed in the '.fixup' section, a
20813     table of 32-bit addresses generated by this option.  For this to
20814     work, all objects linked together must be compiled with
20815     '-mrelocatable' or '-mrelocatable-lib'.  '-mrelocatable' code
20816     aligns the stack to an 8-byte boundary.
20817
20818'-mrelocatable-lib'
20819'-mno-relocatable-lib'
20820     Like '-mrelocatable', '-mrelocatable-lib' generates a '.fixup'
20821     section to allow static executables to be relocated at run time,
20822     but '-mrelocatable-lib' does not use the smaller stack alignment of
20823     '-mrelocatable'.  Objects compiled with '-mrelocatable-lib' may be
20824     linked with objects compiled with any combination of the
20825     '-mrelocatable' options.
20826
20827'-mno-toc'
20828'-mtoc'
20829     On System V.4 and embedded PowerPC systems do not (do) assume that
20830     register 2 contains a pointer to a global area pointing to the
20831     addresses used in the program.
20832
20833'-mlittle'
20834'-mlittle-endian'
20835     On System V.4 and embedded PowerPC systems compile code for the
20836     processor in little-endian mode.  The '-mlittle-endian' option is
20837     the same as '-mlittle'.
20838
20839'-mbig'
20840'-mbig-endian'
20841     On System V.4 and embedded PowerPC systems compile code for the
20842     processor in big-endian mode.  The '-mbig-endian' option is the
20843     same as '-mbig'.
20844
20845'-mdynamic-no-pic'
20846     On Darwin and Mac OS X systems, compile code so that it is not
20847     relocatable, but that its external references are relocatable.  The
20848     resulting code is suitable for applications, but not shared
20849     libraries.
20850
20851'-msingle-pic-base'
20852     Treat the register used for PIC addressing as read-only, rather
20853     than loading it in the prologue for each function.  The runtime
20854     system is responsible for initializing this register with an
20855     appropriate value before execution begins.
20856
20857'-mprioritize-restricted-insns=PRIORITY'
20858     This option controls the priority that is assigned to dispatch-slot
20859     restricted instructions during the second scheduling pass.  The
20860     argument PRIORITY takes the value '0', '1', or '2' to assign no,
20861     highest, or second-highest (respectively) priority to dispatch-slot
20862     restricted instructions.
20863
20864'-msched-costly-dep=DEPENDENCE_TYPE'
20865     This option controls which dependences are considered costly by the
20866     target during instruction scheduling.  The argument DEPENDENCE_TYPE
20867     takes one of the following values:
20868
20869     'no'
20870          No dependence is costly.
20871
20872     'all'
20873          All dependences are costly.
20874
20875     'true_store_to_load'
20876          A true dependence from store to load is costly.
20877
20878     'store_to_load'
20879          Any dependence from store to load is costly.
20880
20881     NUMBER
20882          Any dependence for which the latency is greater than or equal
20883          to NUMBER is costly.
20884
20885'-minsert-sched-nops=SCHEME'
20886     This option controls which NOP insertion scheme is used during the
20887     second scheduling pass.  The argument SCHEME takes one of the
20888     following values:
20889
20890     'no'
20891          Don't insert NOPs.
20892
20893     'pad'
20894          Pad with NOPs any dispatch group that has vacant issue slots,
20895          according to the scheduler's grouping.
20896
20897     'regroup_exact'
20898          Insert NOPs to force costly dependent insns into separate
20899          groups.  Insert exactly as many NOPs as needed to force an
20900          insn to a new group, according to the estimated processor
20901          grouping.
20902
20903     NUMBER
20904          Insert NOPs to force costly dependent insns into separate
20905          groups.  Insert NUMBER NOPs to force an insn to a new group.
20906
20907'-mcall-sysv'
20908     On System V.4 and embedded PowerPC systems compile code using
20909     calling conventions that adhere to the March 1995 draft of the
20910     System V Application Binary Interface, PowerPC processor
20911     supplement.  This is the default unless you configured GCC using
20912     'powerpc-*-eabiaix'.
20913
20914'-mcall-sysv-eabi'
20915'-mcall-eabi'
20916     Specify both '-mcall-sysv' and '-meabi' options.
20917
20918'-mcall-sysv-noeabi'
20919     Specify both '-mcall-sysv' and '-mno-eabi' options.
20920
20921'-mcall-aixdesc'
20922     On System V.4 and embedded PowerPC systems compile code for the AIX
20923     operating system.
20924
20925'-mcall-linux'
20926     On System V.4 and embedded PowerPC systems compile code for the
20927     Linux-based GNU system.
20928
20929'-mcall-freebsd'
20930     On System V.4 and embedded PowerPC systems compile code for the
20931     FreeBSD operating system.
20932
20933'-mcall-netbsd'
20934     On System V.4 and embedded PowerPC systems compile code for the
20935     NetBSD operating system.
20936
20937'-mcall-openbsd'
20938     On System V.4 and embedded PowerPC systems compile code for the
20939     OpenBSD operating system.
20940
20941'-maix-struct-return'
20942     Return all structures in memory (as specified by the AIX ABI).
20943
20944'-msvr4-struct-return'
20945     Return structures smaller than 8 bytes in registers (as specified
20946     by the SVR4 ABI).
20947
20948'-mabi=ABI-TYPE'
20949     Extend the current ABI with a particular extension, or remove such
20950     extension.  Valid values are 'altivec', 'no-altivec', 'spe',
20951     'no-spe', 'ibmlongdouble', 'ieeelongdouble', 'elfv1', 'elfv2'.
20952
20953'-mabi=spe'
20954     Extend the current ABI with SPE ABI extensions.  This does not
20955     change the default ABI, instead it adds the SPE ABI extensions to
20956     the current ABI.
20957
20958'-mabi=no-spe'
20959     Disable Book-E SPE ABI extensions for the current ABI.
20960
20961'-mabi=ibmlongdouble'
20962     Change the current ABI to use IBM extended-precision long double.
20963     This is not likely to work if your system defaults to using IEEE
20964     extended-precision long double.  If you change the long double type
20965     from IEEE extended-precision, the compiler will issue a warning
20966     unless you use the '-Wno-psabi' option.  Requires
20967     '-mlong-double-128' to be enabled.
20968
20969'-mabi=ieeelongdouble'
20970     Change the current ABI to use IEEE extended-precision long double.
20971     This is not likely to work if your system defaults to using IBM
20972     extended-precision long double.  If you change the long double type
20973     from IBM extended-precision, the compiler will issue a warning
20974     unless you use the '-Wno-psabi' option.  Requires
20975     '-mlong-double-128' to be enabled.
20976
20977'-mabi=elfv1'
20978     Change the current ABI to use the ELFv1 ABI. This is the default
20979     ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
20980     ABI requires special system support and is likely to fail in
20981     spectacular ways.
20982
20983'-mabi=elfv2'
20984     Change the current ABI to use the ELFv2 ABI. This is the default
20985     ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
20986     ABI requires special system support and is likely to fail in
20987     spectacular ways.
20988
20989'-mgnu-attribute'
20990'-mno-gnu-attribute'
20991     Emit .gnu_attribute assembly directives to set tag/value pairs in a
20992     .gnu.attributes section that specify ABI variations in function
20993     parameters or return values.
20994
20995'-mprototype'
20996'-mno-prototype'
20997     On System V.4 and embedded PowerPC systems assume that all calls to
20998     variable argument functions are properly prototyped.  Otherwise,
20999     the compiler must insert an instruction before every non-prototyped
21000     call to set or clear bit 6 of the condition code register ('CR') to
21001     indicate whether floating-point values are passed in the
21002     floating-point registers in case the function takes variable
21003     arguments.  With '-mprototype', only calls to prototyped variable
21004     argument functions set or clear the bit.
21005
21006'-msim'
21007     On embedded PowerPC systems, assume that the startup module is
21008     called 'sim-crt0.o' and that the standard C libraries are
21009     'libsim.a' and 'libc.a'.  This is the default for
21010     'powerpc-*-eabisim' configurations.
21011
21012'-mmvme'
21013     On embedded PowerPC systems, assume that the startup module is
21014     called 'crt0.o' and the standard C libraries are 'libmvme.a' and
21015     'libc.a'.
21016
21017'-mads'
21018     On embedded PowerPC systems, assume that the startup module is
21019     called 'crt0.o' and the standard C libraries are 'libads.a' and
21020     'libc.a'.
21021
21022'-myellowknife'
21023     On embedded PowerPC systems, assume that the startup module is
21024     called 'crt0.o' and the standard C libraries are 'libyk.a' and
21025     'libc.a'.
21026
21027'-mvxworks'
21028     On System V.4 and embedded PowerPC systems, specify that you are
21029     compiling for a VxWorks system.
21030
21031'-memb'
21032     On embedded PowerPC systems, set the 'PPC_EMB' bit in the ELF flags
21033     header to indicate that 'eabi' extended relocations are used.
21034
21035'-meabi'
21036'-mno-eabi'
21037     On System V.4 and embedded PowerPC systems do (do not) adhere to
21038     the Embedded Applications Binary Interface (EABI), which is a set
21039     of modifications to the System V.4 specifications.  Selecting
21040     '-meabi' means that the stack is aligned to an 8-byte boundary, a
21041     function '__eabi' is called from 'main' to set up the EABI
21042     environment, and the '-msdata' option can use both 'r2' and 'r13'
21043     to point to two separate small data areas.  Selecting '-mno-eabi'
21044     means that the stack is aligned to a 16-byte boundary, no EABI
21045     initialization function is called from 'main', and the '-msdata'
21046     option only uses 'r13' to point to a single small data area.  The
21047     '-meabi' option is on by default if you configured GCC using one of
21048     the 'powerpc*-*-eabi*' options.
21049
21050'-msdata=eabi'
21051     On System V.4 and embedded PowerPC systems, put small initialized
21052     'const' global and static data in the '.sdata2' section, which is
21053     pointed to by register 'r2'.  Put small initialized non-'const'
21054     global and static data in the '.sdata' section, which is pointed to
21055     by register 'r13'.  Put small uninitialized global and static data
21056     in the '.sbss' section, which is adjacent to the '.sdata' section.
21057     The '-msdata=eabi' option is incompatible with the '-mrelocatable'
21058     option.  The '-msdata=eabi' option also sets the '-memb' option.
21059
21060'-msdata=sysv'
21061     On System V.4 and embedded PowerPC systems, put small global and
21062     static data in the '.sdata' section, which is pointed to by
21063     register 'r13'.  Put small uninitialized global and static data in
21064     the '.sbss' section, which is adjacent to the '.sdata' section.
21065     The '-msdata=sysv' option is incompatible with the '-mrelocatable'
21066     option.
21067
21068'-msdata=default'
21069'-msdata'
21070     On System V.4 and embedded PowerPC systems, if '-meabi' is used,
21071     compile code the same as '-msdata=eabi', otherwise compile code the
21072     same as '-msdata=sysv'.
21073
21074'-msdata=data'
21075     On System V.4 and embedded PowerPC systems, put small global data
21076     in the '.sdata' section.  Put small uninitialized global data in
21077     the '.sbss' section.  Do not use register 'r13' to address small
21078     data however.  This is the default behavior unless other '-msdata'
21079     options are used.
21080
21081'-msdata=none'
21082'-mno-sdata'
21083     On embedded PowerPC systems, put all initialized global and static
21084     data in the '.data' section, and all uninitialized data in the
21085     '.bss' section.
21086
21087'-mblock-move-inline-limit=NUM'
21088     Inline all block moves (such as calls to 'memcpy' or structure
21089     copies) less than or equal to NUM bytes.  The minimum value for NUM
21090     is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
21091     default value is target-specific.
21092
21093'-G NUM'
21094     On embedded PowerPC systems, put global and static items less than
21095     or equal to NUM bytes into the small data or BSS sections instead
21096     of the normal data or BSS section.  By default, NUM is 8.  The '-G
21097     NUM' switch is also passed to the linker.  All modules should be
21098     compiled with the same '-G NUM' value.
21099
21100'-mregnames'
21101'-mno-regnames'
21102     On System V.4 and embedded PowerPC systems do (do not) emit
21103     register names in the assembly language output using symbolic
21104     forms.
21105
21106'-mlongcall'
21107'-mno-longcall'
21108     By default assume that all calls are far away so that a longer and
21109     more expensive calling sequence is required.  This is required for
21110     calls farther than 32 megabytes (33,554,432 bytes) from the current
21111     location.  A short call is generated if the compiler knows the call
21112     cannot be that far away.  This setting can be overridden by the
21113     'shortcall' function attribute, or by '#pragma longcall(0)'.
21114
21115     Some linkers are capable of detecting out-of-range calls and
21116     generating glue code on the fly.  On these systems, long calls are
21117     unnecessary and generate slower code.  As of this writing, the AIX
21118     linker can do this, as can the GNU linker for PowerPC/64.  It is
21119     planned to add this feature to the GNU linker for 32-bit PowerPC
21120     systems as well.
21121
21122     In the future, GCC may ignore all longcall specifications when the
21123     linker is known to generate glue.
21124
21125'-mtls-markers'
21126'-mno-tls-markers'
21127     Mark (do not mark) calls to '__tls_get_addr' with a relocation
21128     specifying the function argument.  The relocation allows the linker
21129     to reliably associate function call with argument setup
21130     instructions for TLS optimization, which in turn allows GCC to
21131     better schedule the sequence.
21132
21133'-mrecip'
21134'-mno-recip'
21135     This option enables use of the reciprocal estimate and reciprocal
21136     square root estimate instructions with additional Newton-Raphson
21137     steps to increase precision instead of doing a divide or square
21138     root and divide for floating-point arguments.  You should use the
21139     '-ffast-math' option when using '-mrecip' (or at least
21140     '-funsafe-math-optimizations', '-ffinite-math-only',
21141     '-freciprocal-math' and '-fno-trapping-math').  Note that while the
21142     throughput of the sequence is generally higher than the throughput
21143     of the non-reciprocal instruction, the precision of the sequence
21144     can be decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
21145     0.99999994) for reciprocal square roots.
21146
21147'-mrecip=OPT'
21148     This option controls which reciprocal estimate instructions may be
21149     used.  OPT is a comma-separated list of options, which may be
21150     preceded by a '!' to invert the option:
21151
21152     'all'
21153          Enable all estimate instructions.
21154
21155     'default'
21156          Enable the default instructions, equivalent to '-mrecip'.
21157
21158     'none'
21159          Disable all estimate instructions, equivalent to '-mno-recip'.
21160
21161     'div'
21162          Enable the reciprocal approximation instructions for both
21163          single and double precision.
21164
21165     'divf'
21166          Enable the single-precision reciprocal approximation
21167          instructions.
21168
21169     'divd'
21170          Enable the double-precision reciprocal approximation
21171          instructions.
21172
21173     'rsqrt'
21174          Enable the reciprocal square root approximation instructions
21175          for both single and double precision.
21176
21177     'rsqrtf'
21178          Enable the single-precision reciprocal square root
21179          approximation instructions.
21180
21181     'rsqrtd'
21182          Enable the double-precision reciprocal square root
21183          approximation instructions.
21184
21185     So, for example, '-mrecip=all,!rsqrtd' enables all of the
21186     reciprocal estimate instructions, except for the 'FRSQRTE',
21187     'XSRSQRTEDP', and 'XVRSQRTEDP' instructions which handle the
21188     double-precision reciprocal square root calculations.
21189
21190'-mrecip-precision'
21191'-mno-recip-precision'
21192     Assume (do not assume) that the reciprocal estimate instructions
21193     provide higher-precision estimates than is mandated by the PowerPC
21194     ABI. Selecting '-mcpu=power6', '-mcpu=power7' or '-mcpu=power8'
21195     automatically selects '-mrecip-precision'.  The double-precision
21196     square root estimate instructions are not generated by default on
21197     low-precision machines, since they do not provide an estimate that
21198     converges after three steps.
21199
21200'-mpointers-to-nested-functions'
21201'-mno-pointers-to-nested-functions'
21202     Generate (do not generate) code to load up the static chain
21203     register ('r11') when calling through a pointer on AIX and 64-bit
21204     Linux systems where a function pointer points to a 3-word
21205     descriptor giving the function address, TOC value to be loaded in
21206     register 'r2', and static chain value to be loaded in register
21207     'r11'.  The '-mpointers-to-nested-functions' is on by default.  You
21208     cannot call through pointers to nested functions or pointers to
21209     functions compiled in other languages that use the static chain if
21210     you use '-mno-pointers-to-nested-functions'.
21211
21212'-msave-toc-indirect'
21213'-mno-save-toc-indirect'
21214     Generate (do not generate) code to save the TOC value in the
21215     reserved stack location in the function prologue if the function
21216     calls through a pointer on AIX and 64-bit Linux systems.  If the
21217     TOC value is not saved in the prologue, it is saved just before the
21218     call through the pointer.  The '-mno-save-toc-indirect' option is
21219     the default.
21220
21221'-mcompat-align-parm'
21222'-mno-compat-align-parm'
21223     Generate (do not generate) code to pass structure parameters with a
21224     maximum alignment of 64 bits, for compatibility with older versions
21225     of GCC.
21226
21227     Older versions of GCC (prior to 4.9.0) incorrectly did not align a
21228     structure parameter on a 128-bit boundary when that structure
21229     contained a member requiring 128-bit alignment.  This is corrected
21230     in more recent versions of GCC. This option may be used to generate
21231     code that is compatible with functions compiled with older versions
21232     of GCC.
21233
21234     The '-mno-compat-align-parm' option is the default.
21235
21236'-mstack-protector-guard=GUARD'
21237'-mstack-protector-guard-reg=REG'
21238'-mstack-protector-guard-offset=OFFSET'
21239'-mstack-protector-guard-symbol=SYMBOL'
21240     Generate stack protection code using canary at GUARD.  Supported
21241     locations are 'global' for global canary or 'tls' for per-thread
21242     canary in the TLS block (the default with GNU libc version 2.4 or
21243     later).
21244
21245     With the latter choice the options
21246     '-mstack-protector-guard-reg=REG' and
21247     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
21248     register to use as base register for reading the canary, and from
21249     what offset from that base register.  The default for those is as
21250     specified in the relevant ABI.
21251     '-mstack-protector-guard-symbol=SYMBOL' overrides the offset with a
21252     symbol reference to a canary in the TLS block.
21253
21254
21255File: gcc.info,  Node: RISC-V Options,  Next: RL78 Options,  Prev: PowerPC SPE Options,  Up: Submodel Options
21256
212573.18.38 RISC-V Options
21258----------------------
21259
21260These command-line options are defined for RISC-V targets:
21261
21262'-mbranch-cost=N'
21263     Set the cost of branches to roughly N instructions.
21264
21265'-mplt'
21266'-mno-plt'
21267     When generating PIC code, do or don't allow the use of PLTs.
21268     Ignored for non-PIC. The default is '-mplt'.
21269
21270'-mabi=ABI-STRING'
21271     Specify integer and floating-point calling convention.  ABI-STRING
21272     contains two parts: the size of integer types and the registers
21273     used for floating-point types.  For example '-march=rv64ifd
21274     -mabi=lp64d' means that 'long' and pointers are 64-bit (implicitly
21275     defining 'int' to be 32-bit), and that floating-point values up to
21276     64 bits wide are passed in F registers.  Contrast this with
21277     '-march=rv64ifd -mabi=lp64f', which still allows the compiler to
21278     generate code that uses the F and D extensions but only allows
21279     floating-point values up to 32 bits long to be passed in registers;
21280     or '-march=rv64ifd -mabi=lp64', in which no floating-point
21281     arguments will be passed in registers.
21282
21283     The default for this argument is system dependent, users who want a
21284     specific calling convention should specify one explicitly.  The
21285     valid calling conventions are: 'ilp32', 'ilp32f', 'ilp32d', 'lp64',
21286     'lp64f', and 'lp64d'.  Some calling conventions are impossible to
21287     implement on some ISAs: for example, '-march=rv32if -mabi=ilp32d'
21288     is invalid because the ABI requires 64-bit values be passed in F
21289     registers, but F registers are only 32 bits wide.
21290
21291'-mfdiv'
21292'-mno-fdiv'
21293     Do or don't use hardware floating-point divide and square root
21294     instructions.  This requires the F or D extensions for
21295     floating-point registers.  The default is to use them if the
21296     specified architecture has these instructions.
21297
21298'-mdiv'
21299'-mno-div'
21300     Do or don't use hardware instructions for integer division.  This
21301     requires the M extension.  The default is to use them if the
21302     specified architecture has these instructions.
21303
21304'-march=ISA-STRING'
21305     Generate code for given RISC-V ISA (e.g. 'rv64im').  ISA strings
21306     must be lower-case.  Examples include 'rv64i', 'rv32g', and
21307     'rv32imaf'.
21308
21309'-mtune=PROCESSOR-STRING'
21310     Optimize the output for the given processor, specified by
21311     microarchitecture name.
21312
21313'-mpreferred-stack-boundary=NUM'
21314     Attempt to keep the stack boundary aligned to a 2 raised to NUM
21315     byte boundary.  If '-mpreferred-stack-boundary' is not specified,
21316     the default is 4 (16 bytes or 128-bits).
21317
21318     *Warning:* If you use this switch, then you must build all modules
21319     with the same value, including any libraries.  This includes the
21320     system libraries and startup modules.
21321
21322'-msmall-data-limit=N'
21323     Put global and static data smaller than N bytes into a special
21324     section (on some targets).
21325
21326'-msave-restore'
21327'-mno-save-restore'
21328     Do or don't use smaller but slower prologue and epilogue code that
21329     uses library function calls.  The default is to use fast inline
21330     prologues and epilogues.
21331
21332'-mstrict-align'
21333'-mno-strict-align'
21334     Do not or do generate unaligned memory accesses.  The default is
21335     set depending on whether the processor we are optimizing for
21336     supports fast unaligned access or not.
21337
21338'-mcmodel=medlow'
21339     Generate code for the medium-low code model.  The program and its
21340     statically defined symbols must lie within a single 2 GiB address
21341     range and must lie between absolute addresses -2 GiB and +2 GiB.
21342     Programs can be statically or dynamically linked.  This is the
21343     default code model.
21344
21345'-mcmodel=medany'
21346     Generate code for the medium-any code model.  The program and its
21347     statically defined symbols must be within any single 2 GiB address
21348     range.  Programs can be statically or dynamically linked.
21349
21350'-mexplicit-relocs'
21351'-mno-exlicit-relocs'
21352     Use or do not use assembler relocation operators when dealing with
21353     symbolic addresses.  The alternative is to use assembler macros
21354     instead, which may limit optimization.
21355
21356'-mrelax'
21357'-mno-relax'
21358     Take advantage of linker relaxations to reduce the number of
21359     instructions required to materialize symbol addresses.  The default
21360     is to take advantage of linker relaxations.
21361
21362
21363File: gcc.info,  Node: RL78 Options,  Next: RS/6000 and PowerPC Options,  Prev: RISC-V Options,  Up: Submodel Options
21364
213653.18.39 RL78 Options
21366--------------------
21367
21368'-msim'
21369     Links in additional target libraries to support operation within a
21370     simulator.
21371
21372'-mmul=none'
21373'-mmul=g10'
21374'-mmul=g13'
21375'-mmul=g14'
21376'-mmul=rl78'
21377     Specifies the type of hardware multiplication and division support
21378     to be used.  The simplest is 'none', which uses software for both
21379     multiplication and division.  This is the default.  The 'g13' value
21380     is for the hardware multiply/divide peripheral found on the
21381     RL78/G13 (S2 core) targets.  The 'g14' value selects the use of the
21382     multiplication and division instructions supported by the RL78/G14
21383     (S3 core) parts.  The value 'rl78' is an alias for 'g14' and the
21384     value 'mg10' is an alias for 'none'.
21385
21386     In addition a C preprocessor macro is defined, based upon the
21387     setting of this option.  Possible values are: '__RL78_MUL_NONE__',
21388     '__RL78_MUL_G13__' or '__RL78_MUL_G14__'.
21389
21390'-mcpu=g10'
21391'-mcpu=g13'
21392'-mcpu=g14'
21393'-mcpu=rl78'
21394     Specifies the RL78 core to target.  The default is the G14 core,
21395     also known as an S3 core or just RL78.  The G13 or S2 core does not
21396     have multiply or divide instructions, instead it uses a hardware
21397     peripheral for these operations.  The G10 or S1 core does not have
21398     register banks, so it uses a different calling convention.
21399
21400     If this option is set it also selects the type of hardware multiply
21401     support to use, unless this is overridden by an explicit
21402     '-mmul=none' option on the command line.  Thus specifying
21403     '-mcpu=g13' enables the use of the G13 hardware multiply peripheral
21404     and specifying '-mcpu=g10' disables the use of hardware
21405     multiplications altogether.
21406
21407     Note, although the RL78/G14 core is the default target, specifying
21408     '-mcpu=g14' or '-mcpu=rl78' on the command line does change the
21409     behavior of the toolchain since it also enables G14 hardware
21410     multiply support.  If these options are not specified on the
21411     command line then software multiplication routines will be used
21412     even though the code targets the RL78 core.  This is for backwards
21413     compatibility with older toolchains which did not have hardware
21414     multiply and divide support.
21415
21416     In addition a C preprocessor macro is defined, based upon the
21417     setting of this option.  Possible values are: '__RL78_G10__',
21418     '__RL78_G13__' or '__RL78_G14__'.
21419
21420'-mg10'
21421'-mg13'
21422'-mg14'
21423'-mrl78'
21424     These are aliases for the corresponding '-mcpu=' option.  They are
21425     provided for backwards compatibility.
21426
21427'-mallregs'
21428     Allow the compiler to use all of the available registers.  By
21429     default registers 'r24..r31' are reserved for use in interrupt
21430     handlers.  With this option enabled these registers can be used in
21431     ordinary functions as well.
21432
21433'-m64bit-doubles'
21434'-m32bit-doubles'
21435     Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32
21436     bits ('-m32bit-doubles') in size.  The default is
21437     '-m32bit-doubles'.
21438
21439'-msave-mduc-in-interrupts'
21440'-mno-save-mduc-in-interrupts'
21441     Specifies that interrupt handler functions should preserve the MDUC
21442     registers.  This is only necessary if normal code might use the
21443     MDUC registers, for example because it performs multiplication and
21444     division operations.  The default is to ignore the MDUC registers
21445     as this makes the interrupt handlers faster.  The target option
21446     -mg13 needs to be passed for this to work as this feature is only
21447     available on the G13 target (S2 core).  The MDUC registers will
21448     only be saved if the interrupt handler performs a multiplication or
21449     division operation or it calls another function.
21450
21451
21452File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: RL78 Options,  Up: Submodel Options
21453
214543.18.40 IBM RS/6000 and PowerPC Options
21455---------------------------------------
21456
21457These '-m' options are defined for the IBM RS/6000 and PowerPC:
21458'-mpowerpc-gpopt'
21459'-mno-powerpc-gpopt'
21460'-mpowerpc-gfxopt'
21461'-mno-powerpc-gfxopt'
21462'-mpowerpc64'
21463'-mno-powerpc64'
21464'-mmfcrf'
21465'-mno-mfcrf'
21466'-mpopcntb'
21467'-mno-popcntb'
21468'-mpopcntd'
21469'-mno-popcntd'
21470'-mfprnd'
21471'-mno-fprnd'
21472'-mcmpb'
21473'-mno-cmpb'
21474'-mmfpgpr'
21475'-mno-mfpgpr'
21476'-mhard-dfp'
21477'-mno-hard-dfp'
21478     You use these options to specify which instructions are available
21479     on the processor you are using.  The default value of these options
21480     is determined when configuring GCC.  Specifying the
21481     '-mcpu=CPU_TYPE' overrides the specification of these options.  We
21482     recommend you use the '-mcpu=CPU_TYPE' option rather than the
21483     options listed above.
21484
21485     Specifying '-mpowerpc-gpopt' allows GCC to use the optional PowerPC
21486     architecture instructions in the General Purpose group, including
21487     floating-point square root.  Specifying '-mpowerpc-gfxopt' allows
21488     GCC to use the optional PowerPC architecture instructions in the
21489     Graphics group, including floating-point select.
21490
21491     The '-mmfcrf' option allows GCC to generate the move from condition
21492     register field instruction implemented on the POWER4 processor and
21493     other processors that support the PowerPC V2.01 architecture.  The
21494     '-mpopcntb' option allows GCC to generate the popcount and
21495     double-precision FP reciprocal estimate instruction implemented on
21496     the POWER5 processor and other processors that support the PowerPC
21497     V2.02 architecture.  The '-mpopcntd' option allows GCC to generate
21498     the popcount instruction implemented on the POWER7 processor and
21499     other processors that support the PowerPC V2.06 architecture.  The
21500     '-mfprnd' option allows GCC to generate the FP round to integer
21501     instructions implemented on the POWER5+ processor and other
21502     processors that support the PowerPC V2.03 architecture.  The
21503     '-mcmpb' option allows GCC to generate the compare bytes
21504     instruction implemented on the POWER6 processor and other
21505     processors that support the PowerPC V2.05 architecture.  The
21506     '-mmfpgpr' option allows GCC to generate the FP move to/from
21507     general-purpose register instructions implemented on the POWER6X
21508     processor and other processors that support the extended PowerPC
21509     V2.05 architecture.  The '-mhard-dfp' option allows GCC to generate
21510     the decimal floating-point instructions implemented on some POWER
21511     processors.
21512
21513     The '-mpowerpc64' option allows GCC to generate the additional
21514     64-bit instructions that are found in the full PowerPC64
21515     architecture and to treat GPRs as 64-bit, doubleword quantities.
21516     GCC defaults to '-mno-powerpc64'.
21517
21518'-mcpu=CPU_TYPE'
21519     Set architecture type, register usage, and instruction scheduling
21520     parameters for machine type CPU_TYPE.  Supported values for
21521     CPU_TYPE are '401', '403', '405', '405fp', '440', '440fp', '464',
21522     '464fp', '476', '476fp', '505', '601', '602', '603', '603e', '604',
21523     '604e', '620', '630', '740', '7400', '7450', '750', '801', '821',
21524     '823', '860', '970', '8540', 'a2', 'e300c2', 'e300c3', 'e500mc',
21525     'e500mc64', 'e5500', 'e6500', 'ec603e', 'G3', 'G4', 'G5', 'titan',
21526     'power3', 'power4', 'power5', 'power5+', 'power6', 'power6x',
21527     'power7', 'power8', 'power9', 'powerpc', 'powerpc64',
21528     'powerpc64le', 'rs64', and 'native'.
21529
21530     '-mcpu=powerpc', '-mcpu=powerpc64', and '-mcpu=powerpc64le' specify
21531     pure 32-bit PowerPC (either endian), 64-bit big endian PowerPC and
21532     64-bit little endian PowerPC architecture machine types, with an
21533     appropriate, generic processor model assumed for scheduling
21534     purposes.
21535
21536     Specifying 'native' as cpu type detects and selects the
21537     architecture option that corresponds to the host processor of the
21538     system performing the compilation.  '-mcpu=native' has no effect if
21539     GCC does not recognize the processor.
21540
21541     The other options specify a specific processor.  Code generated
21542     under those options runs best on that processor, and may not run at
21543     all on others.
21544
21545     The '-mcpu' options automatically enable or disable the following
21546     options:
21547
21548          -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
21549          -mpopcntb -mpopcntd  -mpowerpc64
21550          -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float
21551          -msimple-fpu  -mmulhw  -mdlmzb  -mmfpgpr -mvsx
21552          -mcrypto -mhtm -mpower8-fusion -mpower8-vector
21553          -mquad-memory -mquad-memory-atomic -mfloat128 -mfloat128-hardware
21554
21555     The particular options set for any particular CPU varies between
21556     compiler versions, depending on what setting seems to produce
21557     optimal code for that CPU; it doesn't necessarily reflect the
21558     actual hardware's capabilities.  If you wish to set an individual
21559     option to a particular value, you may specify it after the '-mcpu'
21560     option, like '-mcpu=970 -mno-altivec'.
21561
21562     On AIX, the '-maltivec' and '-mpowerpc64' options are not enabled
21563     or disabled by the '-mcpu' option at present because AIX does not
21564     have full support for these options.  You may still enable or
21565     disable them individually if you're sure it'll work in your
21566     environment.
21567
21568'-mtune=CPU_TYPE'
21569     Set the instruction scheduling parameters for machine type
21570     CPU_TYPE, but do not set the architecture type or register usage,
21571     as '-mcpu=CPU_TYPE' does.  The same values for CPU_TYPE are used
21572     for '-mtune' as for '-mcpu'.  If both are specified, the code
21573     generated uses the architecture and registers set by '-mcpu', but
21574     the scheduling parameters set by '-mtune'.
21575
21576'-mcmodel=small'
21577     Generate PowerPC64 code for the small model: The TOC is limited to
21578     64k.
21579
21580'-mcmodel=medium'
21581     Generate PowerPC64 code for the medium model: The TOC and other
21582     static data may be up to a total of 4G in size.  This is the
21583     default for 64-bit Linux.
21584
21585'-mcmodel=large'
21586     Generate PowerPC64 code for the large model: The TOC may be up to
21587     4G in size.  Other data and code is only limited by the 64-bit
21588     address space.
21589
21590'-maltivec'
21591'-mno-altivec'
21592     Generate code that uses (does not use) AltiVec instructions, and
21593     also enable the use of built-in functions that allow more direct
21594     access to the AltiVec instruction set.  You may also need to set
21595     '-mabi=altivec' to adjust the current ABI with AltiVec ABI
21596     enhancements.
21597
21598     When '-maltivec' is used, rather than '-maltivec=le' or
21599     '-maltivec=be', the element order for AltiVec intrinsics such as
21600     'vec_splat', 'vec_extract', and 'vec_insert' match array element
21601     order corresponding to the endianness of the target.  That is,
21602     element zero identifies the leftmost element in a vector register
21603     when targeting a big-endian platform, and identifies the rightmost
21604     element in a vector register when targeting a little-endian
21605     platform.
21606
21607'-maltivec=be'
21608     Generate AltiVec instructions using big-endian element order,
21609     regardless of whether the target is big- or little-endian.  This is
21610     the default when targeting a big-endian platform.  Using this
21611     option is currently deprecated.  Support for this feature will be
21612     removed in GCC 9.
21613
21614     The element order is used to interpret element numbers in AltiVec
21615     intrinsics such as 'vec_splat', 'vec_extract', and 'vec_insert'.
21616     By default, these match array element order corresponding to the
21617     endianness for the target.
21618
21619'-maltivec=le'
21620     Generate AltiVec instructions using little-endian element order,
21621     regardless of whether the target is big- or little-endian.  This is
21622     the default when targeting a little-endian platform.  This option
21623     is currently ignored when targeting a big-endian platform.
21624
21625     The element order is used to interpret element numbers in AltiVec
21626     intrinsics such as 'vec_splat', 'vec_extract', and 'vec_insert'.
21627     By default, these match array element order corresponding to the
21628     endianness for the target.
21629
21630'-mvrsave'
21631'-mno-vrsave'
21632     Generate VRSAVE instructions when generating AltiVec code.
21633
21634'-msecure-plt'
21635     Generate code that allows 'ld' and 'ld.so' to build executables and
21636     shared libraries with non-executable '.plt' and '.got' sections.
21637     This is a PowerPC 32-bit SYSV ABI option.
21638
21639'-mbss-plt'
21640     Generate code that uses a BSS '.plt' section that 'ld.so' fills in,
21641     and requires '.plt' and '.got' sections that are both writable and
21642     executable.  This is a PowerPC 32-bit SYSV ABI option.
21643
21644'-misel'
21645'-mno-isel'
21646     This switch enables or disables the generation of ISEL
21647     instructions.
21648
21649'-misel=YES/NO'
21650     This switch has been deprecated.  Use '-misel' and '-mno-isel'
21651     instead.
21652
21653'-mpaired'
21654'-mno-paired'
21655     This switch enables or disables the generation of PAIRED simd
21656     instructions.
21657
21658'-mvsx'
21659'-mno-vsx'
21660     Generate code that uses (does not use) vector/scalar (VSX)
21661     instructions, and also enable the use of built-in functions that
21662     allow more direct access to the VSX instruction set.
21663
21664'-mcrypto'
21665'-mno-crypto'
21666     Enable the use (disable) of the built-in functions that allow
21667     direct access to the cryptographic instructions that were added in
21668     version 2.07 of the PowerPC ISA.
21669
21670'-mhtm'
21671'-mno-htm'
21672     Enable (disable) the use of the built-in functions that allow
21673     direct access to the Hardware Transactional Memory (HTM)
21674     instructions that were added in version 2.07 of the PowerPC ISA.
21675
21676'-mpower8-fusion'
21677'-mno-power8-fusion'
21678     Generate code that keeps (does not keeps) some integer operations
21679     adjacent so that the instructions can be fused together on power8
21680     and later processors.
21681
21682'-mpower8-vector'
21683'-mno-power8-vector'
21684     Generate code that uses (does not use) the vector and scalar
21685     instructions that were added in version 2.07 of the PowerPC ISA.
21686     Also enable the use of built-in functions that allow more direct
21687     access to the vector instructions.
21688
21689'-mquad-memory'
21690'-mno-quad-memory'
21691     Generate code that uses (does not use) the non-atomic quad word
21692     memory instructions.  The '-mquad-memory' option requires use of
21693     64-bit mode.
21694
21695'-mquad-memory-atomic'
21696'-mno-quad-memory-atomic'
21697     Generate code that uses (does not use) the atomic quad word memory
21698     instructions.  The '-mquad-memory-atomic' option requires use of
21699     64-bit mode.
21700
21701'-mfloat128'
21702'-mno-float128'
21703     Enable/disable the __FLOAT128 keyword for IEEE 128-bit floating
21704     point and use either software emulation for IEEE 128-bit floating
21705     point or hardware instructions.
21706
21707     The VSX instruction set ('-mvsx', '-mcpu=power7', '-mcpu=power8'),
21708     or '-mcpu=power9' must be enabled to use the IEEE 128-bit floating
21709     point support.  The IEEE 128-bit floating point support only works
21710     on PowerPC Linux systems.
21711
21712     The default for '-mfloat128' is enabled on PowerPC Linux systems
21713     using the VSX instruction set, and disabled on other systems.
21714
21715     If you use the ISA 3.0 instruction set ('-mpower9-vector' or
21716     '-mcpu=power9') on a 64-bit system, the IEEE 128-bit floating point
21717     support will also enable the generation of ISA 3.0 IEEE 128-bit
21718     floating point instructions.  Otherwise, if you do not specify to
21719     generate ISA 3.0 instructions or you are targeting a 32-bit big
21720     endian system, IEEE 128-bit floating point will be done with
21721     software emulation.
21722
21723'-mfloat128-hardware'
21724'-mno-float128-hardware'
21725     Enable/disable using ISA 3.0 hardware instructions to support the
21726     __FLOAT128 data type.
21727
21728     The default for '-mfloat128-hardware' is enabled on PowerPC Linux
21729     systems using the ISA 3.0 instruction set, and disabled on other
21730     systems.
21731
21732'-m32'
21733'-m64'
21734     Generate code for 32-bit or 64-bit environments of Darwin and SVR4
21735     targets (including GNU/Linux).  The 32-bit environment sets int,
21736     long and pointer to 32 bits and generates code that runs on any
21737     PowerPC variant.  The 64-bit environment sets int to 32 bits and
21738     long and pointer to 64 bits, and generates code for PowerPC64, as
21739     for '-mpowerpc64'.
21740
21741'-mfull-toc'
21742'-mno-fp-in-toc'
21743'-mno-sum-in-toc'
21744'-mminimal-toc'
21745     Modify generation of the TOC (Table Of Contents), which is created
21746     for every executable file.  The '-mfull-toc' option is selected by
21747     default.  In that case, GCC allocates at least one TOC entry for
21748     each unique non-automatic variable reference in your program.  GCC
21749     also places floating-point constants in the TOC.  However, only
21750     16,384 entries are available in the TOC.
21751
21752     If you receive a linker error message that saying you have
21753     overflowed the available TOC space, you can reduce the amount of
21754     TOC space used with the '-mno-fp-in-toc' and '-mno-sum-in-toc'
21755     options.  '-mno-fp-in-toc' prevents GCC from putting floating-point
21756     constants in the TOC and '-mno-sum-in-toc' forces GCC to generate
21757     code to calculate the sum of an address and a constant at run time
21758     instead of putting that sum into the TOC.  You may specify one or
21759     both of these options.  Each causes GCC to produce very slightly
21760     slower and larger code at the expense of conserving TOC space.
21761
21762     If you still run out of space in the TOC even when you specify both
21763     of these options, specify '-mminimal-toc' instead.  This option
21764     causes GCC to make only one TOC entry for every file.  When you
21765     specify this option, GCC produces code that is slower and larger
21766     but which uses extremely little TOC space.  You may wish to use
21767     this option only on files that contain less frequently-executed
21768     code.
21769
21770'-maix64'
21771'-maix32'
21772     Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
21773     64-bit 'long' type, and the infrastructure needed to support them.
21774     Specifying '-maix64' implies '-mpowerpc64', while '-maix32'
21775     disables the 64-bit ABI and implies '-mno-powerpc64'.  GCC defaults
21776     to '-maix32'.
21777
21778'-mxl-compat'
21779'-mno-xl-compat'
21780     Produce code that conforms more closely to IBM XL compiler
21781     semantics when using AIX-compatible ABI.  Pass floating-point
21782     arguments to prototyped functions beyond the register save area
21783     (RSA) on the stack in addition to argument FPRs.  Do not assume
21784     that most significant double in 128-bit long double value is
21785     properly rounded when comparing values and converting to double.
21786     Use XL symbol names for long double support routines.
21787
21788     The AIX calling convention was extended but not initially
21789     documented to handle an obscure K&R C case of calling a function
21790     that takes the address of its arguments with fewer arguments than
21791     declared.  IBM XL compilers access floating-point arguments that do
21792     not fit in the RSA from the stack when a subroutine is compiled
21793     without optimization.  Because always storing floating-point
21794     arguments on the stack is inefficient and rarely needed, this
21795     option is not enabled by default and only is necessary when calling
21796     subroutines compiled by IBM XL compilers without optimization.
21797
21798'-mpe'
21799     Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
21800     application written to use message passing with special startup
21801     code to enable the application to run.  The system must have PE
21802     installed in the standard location ('/usr/lpp/ppe.poe/'), or the
21803     'specs' file must be overridden with the '-specs=' option to
21804     specify the appropriate directory location.  The Parallel
21805     Environment does not support threads, so the '-mpe' option and the
21806     '-pthread' option are incompatible.
21807
21808'-malign-natural'
21809'-malign-power'
21810     On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
21811     '-malign-natural' overrides the ABI-defined alignment of larger
21812     types, such as floating-point doubles, on their natural size-based
21813     boundary.  The option '-malign-power' instructs GCC to follow the
21814     ABI-specified alignment rules.  GCC defaults to the standard
21815     alignment defined in the ABI.
21816
21817     On 64-bit Darwin, natural alignment is the default, and
21818     '-malign-power' is not supported.
21819
21820'-msoft-float'
21821'-mhard-float'
21822     Generate code that does not use (uses) the floating-point register
21823     set.  Software floating-point emulation is provided if you use the
21824     '-msoft-float' option, and pass the option to GCC when linking.
21825
21826'-msingle-float'
21827'-mdouble-float'
21828     Generate code for single- or double-precision floating-point
21829     operations.  '-mdouble-float' implies '-msingle-float'.
21830
21831'-msimple-fpu'
21832     Do not generate 'sqrt' and 'div' instructions for hardware
21833     floating-point unit.
21834
21835'-mfpu=NAME'
21836     Specify type of floating-point unit.  Valid values for NAME are
21837     'sp_lite' (equivalent to '-msingle-float -msimple-fpu'), 'dp_lite'
21838     (equivalent to '-mdouble-float -msimple-fpu'), 'sp_full'
21839     (equivalent to '-msingle-float'), and 'dp_full' (equivalent to
21840     '-mdouble-float').
21841
21842'-mxilinx-fpu'
21843     Perform optimizations for the floating-point unit on Xilinx PPC
21844     405/440.
21845
21846'-mmultiple'
21847'-mno-multiple'
21848     Generate code that uses (does not use) the load multiple word
21849     instructions and the store multiple word instructions.  These
21850     instructions are generated by default on POWER systems, and not
21851     generated on PowerPC systems.  Do not use '-mmultiple' on
21852     little-endian PowerPC systems, since those instructions do not work
21853     when the processor is in little-endian mode.  The exceptions are
21854     PPC740 and PPC750 which permit these instructions in little-endian
21855     mode.
21856
21857'-mupdate'
21858'-mno-update'
21859     Generate code that uses (does not use) the load or store
21860     instructions that update the base register to the address of the
21861     calculated memory location.  These instructions are generated by
21862     default.  If you use '-mno-update', there is a small window between
21863     the time that the stack pointer is updated and the address of the
21864     previous frame is stored, which means code that walks the stack
21865     frame across interrupts or signals may get corrupted data.
21866
21867'-mavoid-indexed-addresses'
21868'-mno-avoid-indexed-addresses'
21869     Generate code that tries to avoid (not avoid) the use of indexed
21870     load or store instructions.  These instructions can incur a
21871     performance penalty on Power6 processors in certain situations,
21872     such as when stepping through large arrays that cross a 16M
21873     boundary.  This option is enabled by default when targeting Power6
21874     and disabled otherwise.
21875
21876'-mfused-madd'
21877'-mno-fused-madd'
21878     Generate code that uses (does not use) the floating-point multiply
21879     and accumulate instructions.  These instructions are generated by
21880     default if hardware floating point is used.  The machine-dependent
21881     '-mfused-madd' option is now mapped to the machine-independent
21882     '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
21883     '-ffp-contract=off'.
21884
21885'-mmulhw'
21886'-mno-mulhw'
21887     Generate code that uses (does not use) the half-word multiply and
21888     multiply-accumulate instructions on the IBM 405, 440, 464 and 476
21889     processors.  These instructions are generated by default when
21890     targeting those processors.
21891
21892'-mdlmzb'
21893'-mno-dlmzb'
21894     Generate code that uses (does not use) the string-search 'dlmzb'
21895     instruction on the IBM 405, 440, 464 and 476 processors.  This
21896     instruction is generated by default when targeting those
21897     processors.
21898
21899'-mno-bit-align'
21900'-mbit-align'
21901     On System V.4 and embedded PowerPC systems do not (do) force
21902     structures and unions that contain bit-fields to be aligned to the
21903     base type of the bit-field.
21904
21905     For example, by default a structure containing nothing but 8
21906     'unsigned' bit-fields of length 1 is aligned to a 4-byte boundary
21907     and has a size of 4 bytes.  By using '-mno-bit-align', the
21908     structure is aligned to a 1-byte boundary and is 1 byte in size.
21909
21910'-mno-strict-align'
21911'-mstrict-align'
21912     On System V.4 and embedded PowerPC systems do not (do) assume that
21913     unaligned memory references are handled by the system.
21914
21915'-mrelocatable'
21916'-mno-relocatable'
21917     Generate code that allows (does not allow) a static executable to
21918     be relocated to a different address at run time.  A simple embedded
21919     PowerPC system loader should relocate the entire contents of
21920     '.got2' and 4-byte locations listed in the '.fixup' section, a
21921     table of 32-bit addresses generated by this option.  For this to
21922     work, all objects linked together must be compiled with
21923     '-mrelocatable' or '-mrelocatable-lib'.  '-mrelocatable' code
21924     aligns the stack to an 8-byte boundary.
21925
21926'-mrelocatable-lib'
21927'-mno-relocatable-lib'
21928     Like '-mrelocatable', '-mrelocatable-lib' generates a '.fixup'
21929     section to allow static executables to be relocated at run time,
21930     but '-mrelocatable-lib' does not use the smaller stack alignment of
21931     '-mrelocatable'.  Objects compiled with '-mrelocatable-lib' may be
21932     linked with objects compiled with any combination of the
21933     '-mrelocatable' options.
21934
21935'-mno-toc'
21936'-mtoc'
21937     On System V.4 and embedded PowerPC systems do not (do) assume that
21938     register 2 contains a pointer to a global area pointing to the
21939     addresses used in the program.
21940
21941'-mlittle'
21942'-mlittle-endian'
21943     On System V.4 and embedded PowerPC systems compile code for the
21944     processor in little-endian mode.  The '-mlittle-endian' option is
21945     the same as '-mlittle'.
21946
21947'-mbig'
21948'-mbig-endian'
21949     On System V.4 and embedded PowerPC systems compile code for the
21950     processor in big-endian mode.  The '-mbig-endian' option is the
21951     same as '-mbig'.
21952
21953'-mdynamic-no-pic'
21954     On Darwin and Mac OS X systems, compile code so that it is not
21955     relocatable, but that its external references are relocatable.  The
21956     resulting code is suitable for applications, but not shared
21957     libraries.
21958
21959'-msingle-pic-base'
21960     Treat the register used for PIC addressing as read-only, rather
21961     than loading it in the prologue for each function.  The runtime
21962     system is responsible for initializing this register with an
21963     appropriate value before execution begins.
21964
21965'-mprioritize-restricted-insns=PRIORITY'
21966     This option controls the priority that is assigned to dispatch-slot
21967     restricted instructions during the second scheduling pass.  The
21968     argument PRIORITY takes the value '0', '1', or '2' to assign no,
21969     highest, or second-highest (respectively) priority to dispatch-slot
21970     restricted instructions.
21971
21972'-msched-costly-dep=DEPENDENCE_TYPE'
21973     This option controls which dependences are considered costly by the
21974     target during instruction scheduling.  The argument DEPENDENCE_TYPE
21975     takes one of the following values:
21976
21977     'no'
21978          No dependence is costly.
21979
21980     'all'
21981          All dependences are costly.
21982
21983     'true_store_to_load'
21984          A true dependence from store to load is costly.
21985
21986     'store_to_load'
21987          Any dependence from store to load is costly.
21988
21989     NUMBER
21990          Any dependence for which the latency is greater than or equal
21991          to NUMBER is costly.
21992
21993'-minsert-sched-nops=SCHEME'
21994     This option controls which NOP insertion scheme is used during the
21995     second scheduling pass.  The argument SCHEME takes one of the
21996     following values:
21997
21998     'no'
21999          Don't insert NOPs.
22000
22001     'pad'
22002          Pad with NOPs any dispatch group that has vacant issue slots,
22003          according to the scheduler's grouping.
22004
22005     'regroup_exact'
22006          Insert NOPs to force costly dependent insns into separate
22007          groups.  Insert exactly as many NOPs as needed to force an
22008          insn to a new group, according to the estimated processor
22009          grouping.
22010
22011     NUMBER
22012          Insert NOPs to force costly dependent insns into separate
22013          groups.  Insert NUMBER NOPs to force an insn to a new group.
22014
22015'-mcall-sysv'
22016     On System V.4 and embedded PowerPC systems compile code using
22017     calling conventions that adhere to the March 1995 draft of the
22018     System V Application Binary Interface, PowerPC processor
22019     supplement.  This is the default unless you configured GCC using
22020     'powerpc-*-eabiaix'.
22021
22022'-mcall-sysv-eabi'
22023'-mcall-eabi'
22024     Specify both '-mcall-sysv' and '-meabi' options.
22025
22026'-mcall-sysv-noeabi'
22027     Specify both '-mcall-sysv' and '-mno-eabi' options.
22028
22029'-mcall-aixdesc'
22030     On System V.4 and embedded PowerPC systems compile code for the AIX
22031     operating system.
22032
22033'-mcall-linux'
22034     On System V.4 and embedded PowerPC systems compile code for the
22035     Linux-based GNU system.
22036
22037'-mcall-freebsd'
22038     On System V.4 and embedded PowerPC systems compile code for the
22039     FreeBSD operating system.
22040
22041'-mcall-netbsd'
22042     On System V.4 and embedded PowerPC systems compile code for the
22043     NetBSD operating system.
22044
22045'-mcall-openbsd'
22046     On System V.4 and embedded PowerPC systems compile code for the
22047     OpenBSD operating system.
22048
22049'-mtraceback=TRACEBACK_TYPE'
22050     Select the type of traceback table.  Valid values for
22051     TRACEBACK_TYPE are 'full', 'part', and 'no'.
22052
22053'-maix-struct-return'
22054     Return all structures in memory (as specified by the AIX ABI).
22055
22056'-msvr4-struct-return'
22057     Return structures smaller than 8 bytes in registers (as specified
22058     by the SVR4 ABI).
22059
22060'-mabi=ABI-TYPE'
22061     Extend the current ABI with a particular extension, or remove such
22062     extension.  Valid values are 'altivec', 'no-altivec', 'spe',
22063     'no-spe', 'ibmlongdouble', 'ieeelongdouble', 'elfv1', 'elfv2'.
22064
22065'-mabi=ibmlongdouble'
22066     Change the current ABI to use IBM extended-precision long double.
22067     This is not likely to work if your system defaults to using IEEE
22068     extended-precision long double.  If you change the long double type
22069     from IEEE extended-precision, the compiler will issue a warning
22070     unless you use the '-Wno-psabi' option.  Requires
22071     '-mlong-double-128' to be enabled.
22072
22073'-mabi=ieeelongdouble'
22074     Change the current ABI to use IEEE extended-precision long double.
22075     This is not likely to work if your system defaults to using IBM
22076     extended-precision long double.  If you change the long double type
22077     from IBM extended-precision, the compiler will issue a warning
22078     unless you use the '-Wno-psabi' option.  Requires
22079     '-mlong-double-128' to be enabled.
22080
22081'-mabi=elfv1'
22082     Change the current ABI to use the ELFv1 ABI. This is the default
22083     ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
22084     ABI requires special system support and is likely to fail in
22085     spectacular ways.
22086
22087'-mabi=elfv2'
22088     Change the current ABI to use the ELFv2 ABI. This is the default
22089     ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
22090     ABI requires special system support and is likely to fail in
22091     spectacular ways.
22092
22093'-mgnu-attribute'
22094'-mno-gnu-attribute'
22095     Emit .gnu_attribute assembly directives to set tag/value pairs in a
22096     .gnu.attributes section that specify ABI variations in function
22097     parameters or return values.
22098
22099'-mprototype'
22100'-mno-prototype'
22101     On System V.4 and embedded PowerPC systems assume that all calls to
22102     variable argument functions are properly prototyped.  Otherwise,
22103     the compiler must insert an instruction before every non-prototyped
22104     call to set or clear bit 6 of the condition code register ('CR') to
22105     indicate whether floating-point values are passed in the
22106     floating-point registers in case the function takes variable
22107     arguments.  With '-mprototype', only calls to prototyped variable
22108     argument functions set or clear the bit.
22109
22110'-msim'
22111     On embedded PowerPC systems, assume that the startup module is
22112     called 'sim-crt0.o' and that the standard C libraries are
22113     'libsim.a' and 'libc.a'.  This is the default for
22114     'powerpc-*-eabisim' configurations.
22115
22116'-mmvme'
22117     On embedded PowerPC systems, assume that the startup module is
22118     called 'crt0.o' and the standard C libraries are 'libmvme.a' and
22119     'libc.a'.
22120
22121'-mads'
22122     On embedded PowerPC systems, assume that the startup module is
22123     called 'crt0.o' and the standard C libraries are 'libads.a' and
22124     'libc.a'.
22125
22126'-myellowknife'
22127     On embedded PowerPC systems, assume that the startup module is
22128     called 'crt0.o' and the standard C libraries are 'libyk.a' and
22129     'libc.a'.
22130
22131'-mvxworks'
22132     On System V.4 and embedded PowerPC systems, specify that you are
22133     compiling for a VxWorks system.
22134
22135'-memb'
22136     On embedded PowerPC systems, set the 'PPC_EMB' bit in the ELF flags
22137     header to indicate that 'eabi' extended relocations are used.
22138
22139'-meabi'
22140'-mno-eabi'
22141     On System V.4 and embedded PowerPC systems do (do not) adhere to
22142     the Embedded Applications Binary Interface (EABI), which is a set
22143     of modifications to the System V.4 specifications.  Selecting
22144     '-meabi' means that the stack is aligned to an 8-byte boundary, a
22145     function '__eabi' is called from 'main' to set up the EABI
22146     environment, and the '-msdata' option can use both 'r2' and 'r13'
22147     to point to two separate small data areas.  Selecting '-mno-eabi'
22148     means that the stack is aligned to a 16-byte boundary, no EABI
22149     initialization function is called from 'main', and the '-msdata'
22150     option only uses 'r13' to point to a single small data area.  The
22151     '-meabi' option is on by default if you configured GCC using one of
22152     the 'powerpc*-*-eabi*' options.
22153
22154'-msdata=eabi'
22155     On System V.4 and embedded PowerPC systems, put small initialized
22156     'const' global and static data in the '.sdata2' section, which is
22157     pointed to by register 'r2'.  Put small initialized non-'const'
22158     global and static data in the '.sdata' section, which is pointed to
22159     by register 'r13'.  Put small uninitialized global and static data
22160     in the '.sbss' section, which is adjacent to the '.sdata' section.
22161     The '-msdata=eabi' option is incompatible with the '-mrelocatable'
22162     option.  The '-msdata=eabi' option also sets the '-memb' option.
22163
22164'-msdata=sysv'
22165     On System V.4 and embedded PowerPC systems, put small global and
22166     static data in the '.sdata' section, which is pointed to by
22167     register 'r13'.  Put small uninitialized global and static data in
22168     the '.sbss' section, which is adjacent to the '.sdata' section.
22169     The '-msdata=sysv' option is incompatible with the '-mrelocatable'
22170     option.
22171
22172'-msdata=default'
22173'-msdata'
22174     On System V.4 and embedded PowerPC systems, if '-meabi' is used,
22175     compile code the same as '-msdata=eabi', otherwise compile code the
22176     same as '-msdata=sysv'.
22177
22178'-msdata=data'
22179     On System V.4 and embedded PowerPC systems, put small global data
22180     in the '.sdata' section.  Put small uninitialized global data in
22181     the '.sbss' section.  Do not use register 'r13' to address small
22182     data however.  This is the default behavior unless other '-msdata'
22183     options are used.
22184
22185'-msdata=none'
22186'-mno-sdata'
22187     On embedded PowerPC systems, put all initialized global and static
22188     data in the '.data' section, and all uninitialized data in the
22189     '.bss' section.
22190
22191'-mreadonly-in-sdata'
22192'-mreadonly-in-sdata'
22193     Put read-only objects in the '.sdata' section as well.  This is the
22194     default.
22195
22196'-mblock-move-inline-limit=NUM'
22197     Inline all block moves (such as calls to 'memcpy' or structure
22198     copies) less than or equal to NUM bytes.  The minimum value for NUM
22199     is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
22200     default value is target-specific.
22201
22202'-mblock-compare-inline-limit=NUM'
22203     Generate non-looping inline code for all block compares (such as
22204     calls to 'memcmp' or structure compares) less than or equal to NUM
22205     bytes.  If NUM is 0, all inline expansion (non-loop and loop) of
22206     block compare is disabled.  The default value is target-specific.
22207
22208'-mblock-compare-inline-loop-limit=NUM'
22209     Generate an inline expansion using loop code for all block compares
22210     that are less than or equal to NUM bytes, but greater than the
22211     limit for non-loop inline block compare expansion.  If the block
22212     length is not constant, at most NUM bytes will be compared before
22213     'memcmp' is called to compare the remainder of the block.  The
22214     default value is target-specific.
22215
22216'-mstring-compare-inline-limit=NUM'
22217     Generate at most NUM pairs of load instructions to compare the
22218     string inline.  If the difference or end of string is not found at
22219     the end of the inline compare a call to 'strcmp' or 'strncmp' will
22220     take care of the rest of the comparison.  The default is 8 pairs of
22221     loads, which will compare 64 bytes on a 64-bit target and 32 bytes
22222     on a 32-bit target.
22223
22224'-G NUM'
22225     On embedded PowerPC systems, put global and static items less than
22226     or equal to NUM bytes into the small data or BSS sections instead
22227     of the normal data or BSS section.  By default, NUM is 8.  The '-G
22228     NUM' switch is also passed to the linker.  All modules should be
22229     compiled with the same '-G NUM' value.
22230
22231'-mregnames'
22232'-mno-regnames'
22233     On System V.4 and embedded PowerPC systems do (do not) emit
22234     register names in the assembly language output using symbolic
22235     forms.
22236
22237'-mlongcall'
22238'-mno-longcall'
22239     By default assume that all calls are far away so that a longer and
22240     more expensive calling sequence is required.  This is required for
22241     calls farther than 32 megabytes (33,554,432 bytes) from the current
22242     location.  A short call is generated if the compiler knows the call
22243     cannot be that far away.  This setting can be overridden by the
22244     'shortcall' function attribute, or by '#pragma longcall(0)'.
22245
22246     Some linkers are capable of detecting out-of-range calls and
22247     generating glue code on the fly.  On these systems, long calls are
22248     unnecessary and generate slower code.  As of this writing, the AIX
22249     linker can do this, as can the GNU linker for PowerPC/64.  It is
22250     planned to add this feature to the GNU linker for 32-bit PowerPC
22251     systems as well.
22252
22253     On Darwin/PPC systems, '#pragma longcall' generates 'jbsr callee,
22254     L42', plus a "branch island" (glue code).  The two target addresses
22255     represent the callee and the branch island.  The Darwin/PPC linker
22256     prefers the first address and generates a 'bl callee' if the PPC
22257     'bl' instruction reaches the callee directly; otherwise, the linker
22258     generates 'bl L42' to call the branch island.  The branch island is
22259     appended to the body of the calling function; it computes the full
22260     32-bit address of the callee and jumps to it.
22261
22262     On Mach-O (Darwin) systems, this option directs the compiler emit
22263     to the glue for every direct call, and the Darwin linker decides
22264     whether to use or discard it.
22265
22266     In the future, GCC may ignore all longcall specifications when the
22267     linker is known to generate glue.
22268
22269'-mtls-markers'
22270'-mno-tls-markers'
22271     Mark (do not mark) calls to '__tls_get_addr' with a relocation
22272     specifying the function argument.  The relocation allows the linker
22273     to reliably associate function call with argument setup
22274     instructions for TLS optimization, which in turn allows GCC to
22275     better schedule the sequence.
22276
22277'-mrecip'
22278'-mno-recip'
22279     This option enables use of the reciprocal estimate and reciprocal
22280     square root estimate instructions with additional Newton-Raphson
22281     steps to increase precision instead of doing a divide or square
22282     root and divide for floating-point arguments.  You should use the
22283     '-ffast-math' option when using '-mrecip' (or at least
22284     '-funsafe-math-optimizations', '-ffinite-math-only',
22285     '-freciprocal-math' and '-fno-trapping-math').  Note that while the
22286     throughput of the sequence is generally higher than the throughput
22287     of the non-reciprocal instruction, the precision of the sequence
22288     can be decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
22289     0.99999994) for reciprocal square roots.
22290
22291'-mrecip=OPT'
22292     This option controls which reciprocal estimate instructions may be
22293     used.  OPT is a comma-separated list of options, which may be
22294     preceded by a '!' to invert the option:
22295
22296     'all'
22297          Enable all estimate instructions.
22298
22299     'default'
22300          Enable the default instructions, equivalent to '-mrecip'.
22301
22302     'none'
22303          Disable all estimate instructions, equivalent to '-mno-recip'.
22304
22305     'div'
22306          Enable the reciprocal approximation instructions for both
22307          single and double precision.
22308
22309     'divf'
22310          Enable the single-precision reciprocal approximation
22311          instructions.
22312
22313     'divd'
22314          Enable the double-precision reciprocal approximation
22315          instructions.
22316
22317     'rsqrt'
22318          Enable the reciprocal square root approximation instructions
22319          for both single and double precision.
22320
22321     'rsqrtf'
22322          Enable the single-precision reciprocal square root
22323          approximation instructions.
22324
22325     'rsqrtd'
22326          Enable the double-precision reciprocal square root
22327          approximation instructions.
22328
22329     So, for example, '-mrecip=all,!rsqrtd' enables all of the
22330     reciprocal estimate instructions, except for the 'FRSQRTE',
22331     'XSRSQRTEDP', and 'XVRSQRTEDP' instructions which handle the
22332     double-precision reciprocal square root calculations.
22333
22334'-mrecip-precision'
22335'-mno-recip-precision'
22336     Assume (do not assume) that the reciprocal estimate instructions
22337     provide higher-precision estimates than is mandated by the PowerPC
22338     ABI. Selecting '-mcpu=power6', '-mcpu=power7' or '-mcpu=power8'
22339     automatically selects '-mrecip-precision'.  The double-precision
22340     square root estimate instructions are not generated by default on
22341     low-precision machines, since they do not provide an estimate that
22342     converges after three steps.
22343
22344'-mveclibabi=TYPE'
22345     Specifies the ABI type to use for vectorizing intrinsics using an
22346     external library.  The only type supported at present is 'mass',
22347     which specifies to use IBM's Mathematical Acceleration Subsystem
22348     (MASS) libraries for vectorizing intrinsics using external
22349     libraries.  GCC currently emits calls to 'acosd2', 'acosf4',
22350     'acoshd2', 'acoshf4', 'asind2', 'asinf4', 'asinhd2', 'asinhf4',
22351     'atan2d2', 'atan2f4', 'atand2', 'atanf4', 'atanhd2', 'atanhf4',
22352     'cbrtd2', 'cbrtf4', 'cosd2', 'cosf4', 'coshd2', 'coshf4', 'erfcd2',
22353     'erfcf4', 'erfd2', 'erff4', 'exp2d2', 'exp2f4', 'expd2', 'expf4',
22354     'expm1d2', 'expm1f4', 'hypotd2', 'hypotf4', 'lgammad2', 'lgammaf4',
22355     'log10d2', 'log10f4', 'log1pd2', 'log1pf4', 'log2d2', 'log2f4',
22356     'logd2', 'logf4', 'powd2', 'powf4', 'sind2', 'sinf4', 'sinhd2',
22357     'sinhf4', 'sqrtd2', 'sqrtf4', 'tand2', 'tanf4', 'tanhd2', and
22358     'tanhf4' when generating code for power7.  Both '-ftree-vectorize'
22359     and '-funsafe-math-optimizations' must also be enabled.  The MASS
22360     libraries must be specified at link time.
22361
22362'-mfriz'
22363'-mno-friz'
22364     Generate (do not generate) the 'friz' instruction when the
22365     '-funsafe-math-optimizations' option is used to optimize rounding
22366     of floating-point values to 64-bit integer and back to floating
22367     point.  The 'friz' instruction does not return the same value if
22368     the floating-point number is too large to fit in an integer.
22369
22370'-mpointers-to-nested-functions'
22371'-mno-pointers-to-nested-functions'
22372     Generate (do not generate) code to load up the static chain
22373     register ('r11') when calling through a pointer on AIX and 64-bit
22374     Linux systems where a function pointer points to a 3-word
22375     descriptor giving the function address, TOC value to be loaded in
22376     register 'r2', and static chain value to be loaded in register
22377     'r11'.  The '-mpointers-to-nested-functions' is on by default.  You
22378     cannot call through pointers to nested functions or pointers to
22379     functions compiled in other languages that use the static chain if
22380     you use '-mno-pointers-to-nested-functions'.
22381
22382'-msave-toc-indirect'
22383'-mno-save-toc-indirect'
22384     Generate (do not generate) code to save the TOC value in the
22385     reserved stack location in the function prologue if the function
22386     calls through a pointer on AIX and 64-bit Linux systems.  If the
22387     TOC value is not saved in the prologue, it is saved just before the
22388     call through the pointer.  The '-mno-save-toc-indirect' option is
22389     the default.
22390
22391'-mcompat-align-parm'
22392'-mno-compat-align-parm'
22393     Generate (do not generate) code to pass structure parameters with a
22394     maximum alignment of 64 bits, for compatibility with older versions
22395     of GCC.
22396
22397     Older versions of GCC (prior to 4.9.0) incorrectly did not align a
22398     structure parameter on a 128-bit boundary when that structure
22399     contained a member requiring 128-bit alignment.  This is corrected
22400     in more recent versions of GCC. This option may be used to generate
22401     code that is compatible with functions compiled with older versions
22402     of GCC.
22403
22404     The '-mno-compat-align-parm' option is the default.
22405
22406'-mstack-protector-guard=GUARD'
22407'-mstack-protector-guard-reg=REG'
22408'-mstack-protector-guard-offset=OFFSET'
22409'-mstack-protector-guard-symbol=SYMBOL'
22410     Generate stack protection code using canary at GUARD.  Supported
22411     locations are 'global' for global canary or 'tls' for per-thread
22412     canary in the TLS block (the default with GNU libc version 2.4 or
22413     later).
22414
22415     With the latter choice the options
22416     '-mstack-protector-guard-reg=REG' and
22417     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
22418     register to use as base register for reading the canary, and from
22419     what offset from that base register.  The default for those is as
22420     specified in the relevant ABI.
22421     '-mstack-protector-guard-symbol=SYMBOL' overrides the offset with a
22422     symbol reference to a canary in the TLS block.
22423
22424
22425File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
22426
224273.18.41 RX Options
22428------------------
22429
22430These command-line options are defined for RX targets:
22431
22432'-m64bit-doubles'
22433'-m32bit-doubles'
22434     Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32
22435     bits ('-m32bit-doubles') in size.  The default is
22436     '-m32bit-doubles'.  _Note_ RX floating-point hardware only works on
22437     32-bit values, which is why the default is '-m32bit-doubles'.
22438
22439'-fpu'
22440'-nofpu'
22441     Enables ('-fpu') or disables ('-nofpu') the use of RX
22442     floating-point hardware.  The default is enabled for the RX600
22443     series and disabled for the RX200 series.
22444
22445     Floating-point instructions are only generated for 32-bit
22446     floating-point values, however, so the FPU hardware is not used for
22447     doubles if the '-m64bit-doubles' option is used.
22448
22449     _Note_ If the '-fpu' option is enabled then
22450     '-funsafe-math-optimizations' is also enabled automatically.  This
22451     is because the RX FPU instructions are themselves unsafe.
22452
22453'-mcpu=NAME'
22454     Selects the type of RX CPU to be targeted.  Currently three types
22455     are supported, the generic 'RX600' and 'RX200' series hardware and
22456     the specific 'RX610' CPU. The default is 'RX600'.
22457
22458     The only difference between 'RX600' and 'RX610' is that the 'RX610'
22459     does not support the 'MVTIPL' instruction.
22460
22461     The 'RX200' series does not have a hardware floating-point unit and
22462     so '-nofpu' is enabled by default when this type is selected.
22463
22464'-mbig-endian-data'
22465'-mlittle-endian-data'
22466     Store data (but not code) in the big-endian format.  The default is
22467     '-mlittle-endian-data', i.e. to store data in the little-endian
22468     format.
22469
22470'-msmall-data-limit=N'
22471     Specifies the maximum size in bytes of global and static variables
22472     which can be placed into the small data area.  Using the small data
22473     area can lead to smaller and faster code, but the size of area is
22474     limited and it is up to the programmer to ensure that the area does
22475     not overflow.  Also when the small data area is used one of the
22476     RX's registers (usually 'r13') is reserved for use pointing to this
22477     area, so it is no longer available for use by the compiler.  This
22478     could result in slower and/or larger code if variables are pushed
22479     onto the stack instead of being held in this register.
22480
22481     Note, common variables (variables that have not been initialized)
22482     and constants are not placed into the small data area as they are
22483     assigned to other sections in the output executable.
22484
22485     The default value is zero, which disables this feature.  Note, this
22486     feature is not enabled by default with higher optimization levels
22487     ('-O2' etc) because of the potentially detrimental effects of
22488     reserving a register.  It is up to the programmer to experiment and
22489     discover whether this feature is of benefit to their program.  See
22490     the description of the '-mpid' option for a description of how the
22491     actual register to hold the small data area pointer is chosen.
22492
22493'-msim'
22494'-mno-sim'
22495     Use the simulator runtime.  The default is to use the libgloss
22496     board-specific runtime.
22497
22498'-mas100-syntax'
22499'-mno-as100-syntax'
22500     When generating assembler output use a syntax that is compatible
22501     with Renesas's AS100 assembler.  This syntax can also be handled by
22502     the GAS assembler, but it has some restrictions so it is not
22503     generated by default.
22504
22505'-mmax-constant-size=N'
22506     Specifies the maximum size, in bytes, of a constant that can be
22507     used as an operand in a RX instruction.  Although the RX
22508     instruction set does allow constants of up to 4 bytes in length to
22509     be used in instructions, a longer value equates to a longer
22510     instruction.  Thus in some circumstances it can be beneficial to
22511     restrict the size of constants that are used in instructions.
22512     Constants that are too big are instead placed into a constant pool
22513     and referenced via register indirection.
22514
22515     The value N can be between 0 and 4.  A value of 0 (the default) or
22516     4 means that constants of any size are allowed.
22517
22518'-mrelax'
22519     Enable linker relaxation.  Linker relaxation is a process whereby
22520     the linker attempts to reduce the size of a program by finding
22521     shorter versions of various instructions.  Disabled by default.
22522
22523'-mint-register=N'
22524     Specify the number of registers to reserve for fast interrupt
22525     handler functions.  The value N can be between 0 and 4.  A value of
22526     1 means that register 'r13' is reserved for the exclusive use of
22527     fast interrupt handlers.  A value of 2 reserves 'r13' and 'r12'.  A
22528     value of 3 reserves 'r13', 'r12' and 'r11', and a value of 4
22529     reserves 'r13' through 'r10'.  A value of 0, the default, does not
22530     reserve any registers.
22531
22532'-msave-acc-in-interrupts'
22533     Specifies that interrupt handler functions should preserve the
22534     accumulator register.  This is only necessary if normal code might
22535     use the accumulator register, for example because it performs
22536     64-bit multiplications.  The default is to ignore the accumulator
22537     as this makes the interrupt handlers faster.
22538
22539'-mpid'
22540'-mno-pid'
22541     Enables the generation of position independent data.  When enabled
22542     any access to constant data is done via an offset from a base
22543     address held in a register.  This allows the location of constant
22544     data to be determined at run time without requiring the executable
22545     to be relocated, which is a benefit to embedded applications with
22546     tight memory constraints.  Data that can be modified is not
22547     affected by this option.
22548
22549     Note, using this feature reserves a register, usually 'r13', for
22550     the constant data base address.  This can result in slower and/or
22551     larger code, especially in complicated functions.
22552
22553     The actual register chosen to hold the constant data base address
22554     depends upon whether the '-msmall-data-limit' and/or the
22555     '-mint-register' command-line options are enabled.  Starting with
22556     register 'r13' and proceeding downwards, registers are allocated
22557     first to satisfy the requirements of '-mint-register', then '-mpid'
22558     and finally '-msmall-data-limit'.  Thus it is possible for the
22559     small data area register to be 'r8' if both '-mint-register=4' and
22560     '-mpid' are specified on the command line.
22561
22562     By default this feature is not enabled.  The default can be
22563     restored via the '-mno-pid' command-line option.
22564
22565'-mno-warn-multiple-fast-interrupts'
22566'-mwarn-multiple-fast-interrupts'
22567     Prevents GCC from issuing a warning message if it finds more than
22568     one fast interrupt handler when it is compiling a file.  The
22569     default is to issue a warning for each extra fast interrupt handler
22570     found, as the RX only supports one such interrupt.
22571
22572'-mallow-string-insns'
22573'-mno-allow-string-insns'
22574     Enables or disables the use of the string manipulation instructions
22575     'SMOVF', 'SCMPU', 'SMOVB', 'SMOVU', 'SUNTIL' 'SWHILE' and also the
22576     'RMPA' instruction.  These instructions may prefetch data, which is
22577     not safe to do if accessing an I/O register.  (See section 12.2.7
22578     of the RX62N Group User's Manual for more information).
22579
22580     The default is to allow these instructions, but it is not possible
22581     for GCC to reliably detect all circumstances where a string
22582     instruction might be used to access an I/O register, so their use
22583     cannot be disabled automatically.  Instead it is reliant upon the
22584     programmer to use the '-mno-allow-string-insns' option if their
22585     program accesses I/O space.
22586
22587     When the instructions are enabled GCC defines the C preprocessor
22588     symbol '__RX_ALLOW_STRING_INSNS__', otherwise it defines the symbol
22589     '__RX_DISALLOW_STRING_INSNS__'.
22590
22591'-mjsr'
22592'-mno-jsr'
22593     Use only (or not only) 'JSR' instructions to access functions.
22594     This option can be used when code size exceeds the range of 'BSR'
22595     instructions.  Note that '-mno-jsr' does not mean to not use 'JSR'
22596     but instead means that any type of branch may be used.
22597
22598 _Note:_ The generic GCC command-line option '-ffixed-REG' has special
22599significance to the RX port when used with the 'interrupt' function
22600attribute.  This attribute indicates a function intended to process fast
22601interrupts.  GCC ensures that it only uses the registers 'r10', 'r11',
22602'r12' and/or 'r13' and only provided that the normal use of the
22603corresponding registers have been restricted via the '-ffixed-REG' or
22604'-mint-register' command-line options.
22605
22606
22607File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RX Options,  Up: Submodel Options
22608
226093.18.42 S/390 and zSeries Options
22610---------------------------------
22611
22612These are the '-m' options defined for the S/390 and zSeries
22613architecture.
22614
22615'-mhard-float'
22616'-msoft-float'
22617     Use (do not use) the hardware floating-point instructions and
22618     registers for floating-point operations.  When '-msoft-float' is
22619     specified, functions in 'libgcc.a' are used to perform
22620     floating-point operations.  When '-mhard-float' is specified, the
22621     compiler generates IEEE floating-point instructions.  This is the
22622     default.
22623
22624'-mhard-dfp'
22625'-mno-hard-dfp'
22626     Use (do not use) the hardware decimal-floating-point instructions
22627     for decimal-floating-point operations.  When '-mno-hard-dfp' is
22628     specified, functions in 'libgcc.a' are used to perform
22629     decimal-floating-point operations.  When '-mhard-dfp' is specified,
22630     the compiler generates decimal-floating-point hardware
22631     instructions.  This is the default for '-march=z9-ec' or higher.
22632
22633'-mlong-double-64'
22634'-mlong-double-128'
22635     These switches control the size of 'long double' type.  A size of
22636     64 bits makes the 'long double' type equivalent to the 'double'
22637     type.  This is the default.
22638
22639'-mbackchain'
22640'-mno-backchain'
22641     Store (do not store) the address of the caller's frame as backchain
22642     pointer into the callee's stack frame.  A backchain may be needed
22643     to allow debugging using tools that do not understand DWARF call
22644     frame information.  When '-mno-packed-stack' is in effect, the
22645     backchain pointer is stored at the bottom of the stack frame; when
22646     '-mpacked-stack' is in effect, the backchain is placed into the
22647     topmost word of the 96/160 byte register save area.
22648
22649     In general, code compiled with '-mbackchain' is call-compatible
22650     with code compiled with '-mmo-backchain'; however, use of the
22651     backchain for debugging purposes usually requires that the whole
22652     binary is built with '-mbackchain'.  Note that the combination of
22653     '-mbackchain', '-mpacked-stack' and '-mhard-float' is not
22654     supported.  In order to build a linux kernel use '-msoft-float'.
22655
22656     The default is to not maintain the backchain.
22657
22658'-mpacked-stack'
22659'-mno-packed-stack'
22660     Use (do not use) the packed stack layout.  When '-mno-packed-stack'
22661     is specified, the compiler uses the all fields of the 96/160 byte
22662     register save area only for their default purpose; unused fields
22663     still take up stack space.  When '-mpacked-stack' is specified,
22664     register save slots are densely packed at the top of the register
22665     save area; unused space is reused for other purposes, allowing for
22666     more efficient use of the available stack space.  However, when
22667     '-mbackchain' is also in effect, the topmost word of the save area
22668     is always used to store the backchain, and the return address
22669     register is always saved two words below the backchain.
22670
22671     As long as the stack frame backchain is not used, code generated
22672     with '-mpacked-stack' is call-compatible with code generated with
22673     '-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
22674     for S/390 or zSeries generated code that uses the stack frame
22675     backchain at run time, not just for debugging purposes.  Such code
22676     is not call-compatible with code compiled with '-mpacked-stack'.
22677     Also, note that the combination of '-mbackchain', '-mpacked-stack'
22678     and '-mhard-float' is not supported.  In order to build a linux
22679     kernel use '-msoft-float'.
22680
22681     The default is to not use the packed stack layout.
22682
22683'-msmall-exec'
22684'-mno-small-exec'
22685     Generate (or do not generate) code using the 'bras' instruction to
22686     do subroutine calls.  This only works reliably if the total
22687     executable size does not exceed 64k.  The default is to use the
22688     'basr' instruction instead, which does not have this limitation.
22689
22690'-m64'
22691'-m31'
22692     When '-m31' is specified, generate code compliant to the GNU/Linux
22693     for S/390 ABI.  When '-m64' is specified, generate code compliant
22694     to the GNU/Linux for zSeries ABI.  This allows GCC in particular to
22695     generate 64-bit instructions.  For the 's390' targets, the default
22696     is '-m31', while the 's390x' targets default to '-m64'.
22697
22698'-mzarch'
22699'-mesa'
22700     When '-mzarch' is specified, generate code using the instructions
22701     available on z/Architecture.  When '-mesa' is specified, generate
22702     code using the instructions available on ESA/390.  Note that
22703     '-mesa' is not possible with '-m64'.  When generating code
22704     compliant to the GNU/Linux for S/390 ABI, the default is '-mesa'.
22705     When generating code compliant to the GNU/Linux for zSeries ABI,
22706     the default is '-mzarch'.
22707
22708'-mhtm'
22709'-mno-htm'
22710     The '-mhtm' option enables a set of builtins making use of
22711     instructions available with the transactional execution facility
22712     introduced with the IBM zEnterprise EC12 machine generation *note
22713     S/390 System z Built-in Functions::.  '-mhtm' is enabled by default
22714     when using '-march=zEC12'.
22715
22716'-mvx'
22717'-mno-vx'
22718     When '-mvx' is specified, generate code using the instructions
22719     available with the vector extension facility introduced with the
22720     IBM z13 machine generation.  This option changes the ABI for some
22721     vector type values with regard to alignment and calling
22722     conventions.  In case vector type values are being used in an
22723     ABI-relevant context a GAS '.gnu_attribute' command will be added
22724     to mark the resulting binary with the ABI used.  '-mvx' is enabled
22725     by default when using '-march=z13'.
22726
22727'-mzvector'
22728'-mno-zvector'
22729     The '-mzvector' option enables vector language extensions and
22730     builtins using instructions available with the vector extension
22731     facility introduced with the IBM z13 machine generation.  This
22732     option adds support for 'vector' to be used as a keyword to define
22733     vector type variables and arguments.  'vector' is only available
22734     when GNU extensions are enabled.  It will not be expanded when
22735     requesting strict standard compliance e.g.  with '-std=c99'.  In
22736     addition to the GCC low-level builtins '-mzvector' enables a set of
22737     builtins added for compatibility with AltiVec-style implementations
22738     like Power and Cell.  In order to make use of these builtins the
22739     header file 'vecintrin.h' needs to be included.  '-mzvector' is
22740     disabled by default.
22741
22742'-mmvcle'
22743'-mno-mvcle'
22744     Generate (or do not generate) code using the 'mvcle' instruction to
22745     perform block moves.  When '-mno-mvcle' is specified, use a 'mvc'
22746     loop instead.  This is the default unless optimizing for size.
22747
22748'-mdebug'
22749'-mno-debug'
22750     Print (or do not print) additional debug information when
22751     compiling.  The default is to not print debug information.
22752
22753'-march=CPU-TYPE'
22754     Generate code that runs on CPU-TYPE, which is the name of a system
22755     representing a certain processor type.  Possible values for
22756     CPU-TYPE are 'z900'/'arch5', 'z990'/'arch6', 'z9-109',
22757     'z9-ec'/'arch7', 'z10'/'arch8', 'z196'/'arch9', 'zEC12',
22758     'z13'/'arch11', 'z14'/'arch12', and 'native'.
22759
22760     The default is '-march=z900'.  'g5'/'arch3' and 'g6' are deprecated
22761     and will be removed with future releases.
22762
22763     Specifying 'native' as cpu type can be used to select the best
22764     architecture option for the host processor.  '-march=native' has no
22765     effect if GCC does not recognize the processor.
22766
22767'-mtune=CPU-TYPE'
22768     Tune to CPU-TYPE everything applicable about the generated code,
22769     except for the ABI and the set of available instructions.  The list
22770     of CPU-TYPE values is the same as for '-march'.  The default is the
22771     value used for '-march'.
22772
22773'-mtpf-trace'
22774'-mno-tpf-trace'
22775     Generate code that adds (does not add) in TPF OS specific branches
22776     to trace routines in the operating system.  This option is off by
22777     default, even when compiling for the TPF OS.
22778
22779'-mfused-madd'
22780'-mno-fused-madd'
22781     Generate code that uses (does not use) the floating-point multiply
22782     and accumulate instructions.  These instructions are generated by
22783     default if hardware floating point is used.
22784
22785'-mwarn-framesize=FRAMESIZE'
22786     Emit a warning if the current function exceeds the given frame
22787     size.  Because this is a compile-time check it doesn't need to be a
22788     real problem when the program runs.  It is intended to identify
22789     functions that most probably cause a stack overflow.  It is useful
22790     to be used in an environment with limited stack size e.g. the linux
22791     kernel.
22792
22793'-mwarn-dynamicstack'
22794     Emit a warning if the function calls 'alloca' or uses
22795     dynamically-sized arrays.  This is generally a bad idea with a
22796     limited stack size.
22797
22798'-mstack-guard=STACK-GUARD'
22799'-mstack-size=STACK-SIZE'
22800     If these options are provided the S/390 back end emits additional
22801     instructions in the function prologue that trigger a trap if the
22802     stack size is STACK-GUARD bytes above the STACK-SIZE (remember that
22803     the stack on S/390 grows downward).  If the STACK-GUARD option is
22804     omitted the smallest power of 2 larger than the frame size of the
22805     compiled function is chosen.  These options are intended to be used
22806     to help debugging stack overflow problems.  The additionally
22807     emitted code causes only little overhead and hence can also be used
22808     in production-like systems without greater performance degradation.
22809     The given values have to be exact powers of 2 and STACK-SIZE has to
22810     be greater than STACK-GUARD without exceeding 64k.  In order to be
22811     efficient the extra code makes the assumption that the stack starts
22812     at an address aligned to the value given by STACK-SIZE.  The
22813     STACK-GUARD option can only be used in conjunction with STACK-SIZE.
22814
22815'-mhotpatch=PRE-HALFWORDS,POST-HALFWORDS'
22816     If the hotpatch option is enabled, a "hot-patching" function
22817     prologue is generated for all functions in the compilation unit.
22818     The funtion label is prepended with the given number of two-byte
22819     NOP instructions (PRE-HALFWORDS, maximum 1000000).  After the
22820     label, 2 * POST-HALFWORDS bytes are appended, using the largest NOP
22821     like instructions the architecture allows (maximum 1000000).
22822
22823     If both arguments are zero, hotpatching is disabled.
22824
22825     This option can be overridden for individual functions with the
22826     'hotpatch' attribute.
22827
22828
22829File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
22830
228313.18.43 Score Options
22832---------------------
22833
22834These options are defined for Score implementations:
22835
22836'-meb'
22837     Compile code for big-endian mode.  This is the default.
22838
22839'-mel'
22840     Compile code for little-endian mode.
22841
22842'-mnhwloop'
22843     Disable generation of 'bcnz' instructions.
22844
22845'-muls'
22846     Enable generation of unaligned load and store instructions.
22847
22848'-mmac'
22849     Enable the use of multiply-accumulate instructions.  Disabled by
22850     default.
22851
22852'-mscore5'
22853     Specify the SCORE5 as the target architecture.
22854
22855'-mscore5u'
22856     Specify the SCORE5U of the target architecture.
22857
22858'-mscore7'
22859     Specify the SCORE7 as the target architecture.  This is the
22860     default.
22861
22862'-mscore7d'
22863     Specify the SCORE7D as the target architecture.
22864
22865
22866File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: Score Options,  Up: Submodel Options
22867
228683.18.44 SH Options
22869------------------
22870
22871These '-m' options are defined for the SH implementations:
22872
22873'-m1'
22874     Generate code for the SH1.
22875
22876'-m2'
22877     Generate code for the SH2.
22878
22879'-m2e'
22880     Generate code for the SH2e.
22881
22882'-m2a-nofpu'
22883     Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
22884     way that the floating-point unit is not used.
22885
22886'-m2a-single-only'
22887     Generate code for the SH2a-FPU, in such a way that no
22888     double-precision floating-point operations are used.
22889
22890'-m2a-single'
22891     Generate code for the SH2a-FPU assuming the floating-point unit is
22892     in single-precision mode by default.
22893
22894'-m2a'
22895     Generate code for the SH2a-FPU assuming the floating-point unit is
22896     in double-precision mode by default.
22897
22898'-m3'
22899     Generate code for the SH3.
22900
22901'-m3e'
22902     Generate code for the SH3e.
22903
22904'-m4-nofpu'
22905     Generate code for the SH4 without a floating-point unit.
22906
22907'-m4-single-only'
22908     Generate code for the SH4 with a floating-point unit that only
22909     supports single-precision arithmetic.
22910
22911'-m4-single'
22912     Generate code for the SH4 assuming the floating-point unit is in
22913     single-precision mode by default.
22914
22915'-m4'
22916     Generate code for the SH4.
22917
22918'-m4-100'
22919     Generate code for SH4-100.
22920
22921'-m4-100-nofpu'
22922     Generate code for SH4-100 in such a way that the floating-point
22923     unit is not used.
22924
22925'-m4-100-single'
22926     Generate code for SH4-100 assuming the floating-point unit is in
22927     single-precision mode by default.
22928
22929'-m4-100-single-only'
22930     Generate code for SH4-100 in such a way that no double-precision
22931     floating-point operations are used.
22932
22933'-m4-200'
22934     Generate code for SH4-200.
22935
22936'-m4-200-nofpu'
22937     Generate code for SH4-200 without in such a way that the
22938     floating-point unit is not used.
22939
22940'-m4-200-single'
22941     Generate code for SH4-200 assuming the floating-point unit is in
22942     single-precision mode by default.
22943
22944'-m4-200-single-only'
22945     Generate code for SH4-200 in such a way that no double-precision
22946     floating-point operations are used.
22947
22948'-m4-300'
22949     Generate code for SH4-300.
22950
22951'-m4-300-nofpu'
22952     Generate code for SH4-300 without in such a way that the
22953     floating-point unit is not used.
22954
22955'-m4-300-single'
22956     Generate code for SH4-300 in such a way that no double-precision
22957     floating-point operations are used.
22958
22959'-m4-300-single-only'
22960     Generate code for SH4-300 in such a way that no double-precision
22961     floating-point operations are used.
22962
22963'-m4-340'
22964     Generate code for SH4-340 (no MMU, no FPU).
22965
22966'-m4-500'
22967     Generate code for SH4-500 (no FPU). Passes '-isa=sh4-nofpu' to the
22968     assembler.
22969
22970'-m4a-nofpu'
22971     Generate code for the SH4al-dsp, or for a SH4a in such a way that
22972     the floating-point unit is not used.
22973
22974'-m4a-single-only'
22975     Generate code for the SH4a, in such a way that no double-precision
22976     floating-point operations are used.
22977
22978'-m4a-single'
22979     Generate code for the SH4a assuming the floating-point unit is in
22980     single-precision mode by default.
22981
22982'-m4a'
22983     Generate code for the SH4a.
22984
22985'-m4al'
22986     Same as '-m4a-nofpu', except that it implicitly passes '-dsp' to
22987     the assembler.  GCC doesn't generate any DSP instructions at the
22988     moment.
22989
22990'-mb'
22991     Compile code for the processor in big-endian mode.
22992
22993'-ml'
22994     Compile code for the processor in little-endian mode.
22995
22996'-mdalign'
22997     Align doubles at 64-bit boundaries.  Note that this changes the
22998     calling conventions, and thus some functions from the standard C
22999     library do not work unless you recompile it first with '-mdalign'.
23000
23001'-mrelax'
23002     Shorten some address references at link time, when possible; uses
23003     the linker option '-relax'.
23004
23005'-mbigtable'
23006     Use 32-bit offsets in 'switch' tables.  The default is to use
23007     16-bit offsets.
23008
23009'-mbitops'
23010     Enable the use of bit manipulation instructions on SH2A.
23011
23012'-mfmovd'
23013     Enable the use of the instruction 'fmovd'.  Check '-mdalign' for
23014     alignment constraints.
23015
23016'-mrenesas'
23017     Comply with the calling conventions defined by Renesas.
23018
23019'-mno-renesas'
23020     Comply with the calling conventions defined for GCC before the
23021     Renesas conventions were available.  This option is the default for
23022     all targets of the SH toolchain.
23023
23024'-mnomacsave'
23025     Mark the 'MAC' register as call-clobbered, even if '-mrenesas' is
23026     given.
23027
23028'-mieee'
23029'-mno-ieee'
23030     Control the IEEE compliance of floating-point comparisons, which
23031     affects the handling of cases where the result of a comparison is
23032     unordered.  By default '-mieee' is implicitly enabled.  If
23033     '-ffinite-math-only' is enabled '-mno-ieee' is implicitly set,
23034     which results in faster floating-point greater-equal and less-equal
23035     comparisons.  The implicit settings can be overridden by specifying
23036     either '-mieee' or '-mno-ieee'.
23037
23038'-minline-ic_invalidate'
23039     Inline code to invalidate instruction cache entries after setting
23040     up nested function trampolines.  This option has no effect if
23041     '-musermode' is in effect and the selected code generation option
23042     (e.g.  '-m4') does not allow the use of the 'icbi' instruction.  If
23043     the selected code generation option does not allow the use of the
23044     'icbi' instruction, and '-musermode' is not in effect, the inlined
23045     code manipulates the instruction cache address array directly with
23046     an associative write.  This not only requires privileged mode at
23047     run time, but it also fails if the cache line had been mapped via
23048     the TLB and has become unmapped.
23049
23050'-misize'
23051     Dump instruction size and location in the assembly code.
23052
23053'-mpadstruct'
23054     This option is deprecated.  It pads structures to multiple of 4
23055     bytes, which is incompatible with the SH ABI.
23056
23057'-matomic-model=MODEL'
23058     Sets the model of atomic operations and additional parameters as a
23059     comma separated list.  For details on the atomic built-in functions
23060     see *note __atomic Builtins::.  The following models and parameters
23061     are supported:
23062
23063     'none'
23064          Disable compiler generated atomic sequences and emit library
23065          calls for atomic operations.  This is the default if the
23066          target is not 'sh*-*-linux*'.
23067
23068     'soft-gusa'
23069          Generate GNU/Linux compatible gUSA software atomic sequences
23070          for the atomic built-in functions.  The generated atomic
23071          sequences require additional support from the
23072          interrupt/exception handling code of the system and are only
23073          suitable for SH3* and SH4* single-core systems.  This option
23074          is enabled by default when the target is 'sh*-*-linux*' and
23075          SH3* or SH4*.  When the target is SH4A, this option also
23076          partially utilizes the hardware atomic instructions 'movli.l'
23077          and 'movco.l' to create more efficient code, unless 'strict'
23078          is specified.
23079
23080     'soft-tcb'
23081          Generate software atomic sequences that use a variable in the
23082          thread control block.  This is a variation of the gUSA
23083          sequences which can also be used on SH1* and SH2* targets.
23084          The generated atomic sequences require additional support from
23085          the interrupt/exception handling code of the system and are
23086          only suitable for single-core systems.  When using this model,
23087          the 'gbr-offset=' parameter has to be specified as well.
23088
23089     'soft-imask'
23090          Generate software atomic sequences that temporarily disable
23091          interrupts by setting 'SR.IMASK = 1111'.  This model works
23092          only when the program runs in privileged mode and is only
23093          suitable for single-core systems.  Additional support from the
23094          interrupt/exception handling code of the system is not
23095          required.  This model is enabled by default when the target is
23096          'sh*-*-linux*' and SH1* or SH2*.
23097
23098     'hard-llcs'
23099          Generate hardware atomic sequences using the 'movli.l' and
23100          'movco.l' instructions only.  This is only available on SH4A
23101          and is suitable for multi-core systems.  Since the hardware
23102          instructions support only 32 bit atomic variables access to 8
23103          or 16 bit variables is emulated with 32 bit accesses.  Code
23104          compiled with this option is also compatible with other
23105          software atomic model interrupt/exception handling systems if
23106          executed on an SH4A system.  Additional support from the
23107          interrupt/exception handling code of the system is not
23108          required for this model.
23109
23110     'gbr-offset='
23111          This parameter specifies the offset in bytes of the variable
23112          in the thread control block structure that should be used by
23113          the generated atomic sequences when the 'soft-tcb' model has
23114          been selected.  For other models this parameter is ignored.
23115          The specified value must be an integer multiple of four and in
23116          the range 0-1020.
23117
23118     'strict'
23119          This parameter prevents mixed usage of multiple atomic models,
23120          even if they are compatible, and makes the compiler generate
23121          atomic sequences of the specified model only.
23122
23123'-mtas'
23124     Generate the 'tas.b' opcode for '__atomic_test_and_set'.  Notice
23125     that depending on the particular hardware and software
23126     configuration this can degrade overall performance due to the
23127     operand cache line flushes that are implied by the 'tas.b'
23128     instruction.  On multi-core SH4A processors the 'tas.b' instruction
23129     must be used with caution since it can result in data corruption
23130     for certain cache configurations.
23131
23132'-mprefergot'
23133     When generating position-independent code, emit function calls
23134     using the Global Offset Table instead of the Procedure Linkage
23135     Table.
23136
23137'-musermode'
23138'-mno-usermode'
23139     Don't allow (allow) the compiler generating privileged mode code.
23140     Specifying '-musermode' also implies '-mno-inline-ic_invalidate' if
23141     the inlined code would not work in user mode.  '-musermode' is the
23142     default when the target is 'sh*-*-linux*'.  If the target is SH1*
23143     or SH2* '-musermode' has no effect, since there is no user mode.
23144
23145'-multcost=NUMBER'
23146     Set the cost to assume for a multiply insn.
23147
23148'-mdiv=STRATEGY'
23149     Set the division strategy to be used for integer division
23150     operations.  STRATEGY can be one of:
23151
23152     'call-div1'
23153          Calls a library function that uses the single-step division
23154          instruction 'div1' to perform the operation.  Division by zero
23155          calculates an unspecified result and does not trap.  This is
23156          the default except for SH4, SH2A and SHcompact.
23157
23158     'call-fp'
23159          Calls a library function that performs the operation in double
23160          precision floating point.  Division by zero causes a
23161          floating-point exception.  This is the default for SHcompact
23162          with FPU. Specifying this for targets that do not have a
23163          double precision FPU defaults to 'call-div1'.
23164
23165     'call-table'
23166          Calls a library function that uses a lookup table for small
23167          divisors and the 'div1' instruction with case distinction for
23168          larger divisors.  Division by zero calculates an unspecified
23169          result and does not trap.  This is the default for SH4.
23170          Specifying this for targets that do not have dynamic shift
23171          instructions defaults to 'call-div1'.
23172
23173     When a division strategy has not been specified the default
23174     strategy is selected based on the current target.  For SH2A the
23175     default strategy is to use the 'divs' and 'divu' instructions
23176     instead of library function calls.
23177
23178'-maccumulate-outgoing-args'
23179     Reserve space once for outgoing arguments in the function prologue
23180     rather than around each call.  Generally beneficial for performance
23181     and size.  Also needed for unwinding to avoid changing the stack
23182     frame around conditional code.
23183
23184'-mdivsi3_libfunc=NAME'
23185     Set the name of the library function used for 32-bit signed
23186     division to NAME.  This only affects the name used in the 'call'
23187     division strategies, and the compiler still expects the same sets
23188     of input/output/clobbered registers as if this option were not
23189     present.
23190
23191'-mfixed-range=REGISTER-RANGE'
23192     Generate code treating the given register range as fixed registers.
23193     A fixed register is one that the register allocator can not use.
23194     This is useful when compiling kernel code.  A register range is
23195     specified as two registers separated by a dash.  Multiple register
23196     ranges can be specified separated by a comma.
23197
23198'-mbranch-cost=NUM'
23199     Assume NUM to be the cost for a branch instruction.  Higher numbers
23200     make the compiler try to generate more branch-free code if
23201     possible.  If not specified the value is selected depending on the
23202     processor type that is being compiled for.
23203
23204'-mzdcbranch'
23205'-mno-zdcbranch'
23206     Assume (do not assume) that zero displacement conditional branch
23207     instructions 'bt' and 'bf' are fast.  If '-mzdcbranch' is
23208     specified, the compiler prefers zero displacement branch code
23209     sequences.  This is enabled by default when generating code for SH4
23210     and SH4A. It can be explicitly disabled by specifying
23211     '-mno-zdcbranch'.
23212
23213'-mcbranch-force-delay-slot'
23214     Force the usage of delay slots for conditional branches, which
23215     stuffs the delay slot with a 'nop' if a suitable instruction cannot
23216     be found.  By default this option is disabled.  It can be enabled
23217     to work around hardware bugs as found in the original SH7055.
23218
23219'-mfused-madd'
23220'-mno-fused-madd'
23221     Generate code that uses (does not use) the floating-point multiply
23222     and accumulate instructions.  These instructions are generated by
23223     default if hardware floating point is used.  The machine-dependent
23224     '-mfused-madd' option is now mapped to the machine-independent
23225     '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
23226     '-ffp-contract=off'.
23227
23228'-mfsca'
23229'-mno-fsca'
23230     Allow or disallow the compiler to emit the 'fsca' instruction for
23231     sine and cosine approximations.  The option '-mfsca' must be used
23232     in combination with '-funsafe-math-optimizations'.  It is enabled
23233     by default when generating code for SH4A. Using '-mno-fsca'
23234     disables sine and cosine approximations even if
23235     '-funsafe-math-optimizations' is in effect.
23236
23237'-mfsrra'
23238'-mno-fsrra'
23239     Allow or disallow the compiler to emit the 'fsrra' instruction for
23240     reciprocal square root approximations.  The option '-mfsrra' must
23241     be used in combination with '-funsafe-math-optimizations' and
23242     '-ffinite-math-only'.  It is enabled by default when generating
23243     code for SH4A. Using '-mno-fsrra' disables reciprocal square root
23244     approximations even if '-funsafe-math-optimizations' and
23245     '-ffinite-math-only' are in effect.
23246
23247'-mpretend-cmove'
23248     Prefer zero-displacement conditional branches for conditional move
23249     instruction patterns.  This can result in faster code on the SH4
23250     processor.
23251
23252'-mfdpic'
23253     Generate code using the FDPIC ABI.
23254
23255
23256File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Options,  Up: Submodel Options
23257
232583.18.45 Solaris 2 Options
23259-------------------------
23260
23261These '-m' options are supported on Solaris 2:
23262
23263'-mclear-hwcap'
23264     '-mclear-hwcap' tells the compiler to remove the hardware
23265     capabilities generated by the Solaris assembler.  This is only
23266     necessary when object files use ISA extensions not supported by the
23267     current machine, but check at runtime whether or not to use them.
23268
23269'-mimpure-text'
23270     '-mimpure-text', used in addition to '-shared', tells the compiler
23271     to not pass '-z text' to the linker when linking a shared object.
23272     Using this option, you can link position-dependent code into a
23273     shared object.
23274
23275     '-mimpure-text' suppresses the "relocations remain against
23276     allocatable but non-writable sections" linker error message.
23277     However, the necessary relocations trigger copy-on-write, and the
23278     shared object is not actually shared across processes.  Instead of
23279     using '-mimpure-text', you should compile all source code with
23280     '-fpic' or '-fPIC'.
23281
23282 These switches are supported in addition to the above on Solaris 2:
23283
23284'-pthreads'
23285     This is a synonym for '-pthread'.
23286
23287
23288File: gcc.info,  Node: SPARC Options,  Next: SPU Options,  Prev: Solaris 2 Options,  Up: Submodel Options
23289
232903.18.46 SPARC Options
23291---------------------
23292
23293These '-m' options are supported on the SPARC:
23294
23295'-mno-app-regs'
23296'-mapp-regs'
23297     Specify '-mapp-regs' to generate output using the global registers
23298     2 through 4, which the SPARC SVR4 ABI reserves for applications.
23299     Like the global register 1, each global register 2 through 4 is
23300     then treated as an allocable register that is clobbered by function
23301     calls.  This is the default.
23302
23303     To be fully SVR4 ABI-compliant at the cost of some performance
23304     loss, specify '-mno-app-regs'.  You should compile libraries and
23305     system software with this option.
23306
23307'-mflat'
23308'-mno-flat'
23309     With '-mflat', the compiler does not generate save/restore
23310     instructions and uses a "flat" or single register window model.
23311     This model is compatible with the regular register window model.
23312     The local registers and the input registers (0-5) are still treated
23313     as "call-saved" registers and are saved on the stack as needed.
23314
23315     With '-mno-flat' (the default), the compiler generates save/restore
23316     instructions (except for leaf functions).  This is the normal
23317     operating mode.
23318
23319'-mfpu'
23320'-mhard-float'
23321     Generate output containing floating-point instructions.  This is
23322     the default.
23323
23324'-mno-fpu'
23325'-msoft-float'
23326     Generate output containing library calls for floating point.
23327     *Warning:* the requisite libraries are not available for all SPARC
23328     targets.  Normally the facilities of the machine's usual C compiler
23329     are used, but this cannot be done directly in cross-compilation.
23330     You must make your own arrangements to provide suitable library
23331     functions for cross-compilation.  The embedded targets
23332     'sparc-*-aout' and 'sparclite-*-*' do provide software
23333     floating-point support.
23334
23335     '-msoft-float' changes the calling convention in the output file;
23336     therefore, it is only useful if you compile _all_ of a program with
23337     this option.  In particular, you need to compile 'libgcc.a', the
23338     library that comes with GCC, with '-msoft-float' in order for this
23339     to work.
23340
23341'-mhard-quad-float'
23342     Generate output containing quad-word (long double) floating-point
23343     instructions.
23344
23345'-msoft-quad-float'
23346     Generate output containing library calls for quad-word (long
23347     double) floating-point instructions.  The functions called are
23348     those specified in the SPARC ABI.  This is the default.
23349
23350     As of this writing, there are no SPARC implementations that have
23351     hardware support for the quad-word floating-point instructions.
23352     They all invoke a trap handler for one of these instructions, and
23353     then the trap handler emulates the effect of the instruction.
23354     Because of the trap handler overhead, this is much slower than
23355     calling the ABI library routines.  Thus the '-msoft-quad-float'
23356     option is the default.
23357
23358'-mno-unaligned-doubles'
23359'-munaligned-doubles'
23360     Assume that doubles have 8-byte alignment.  This is the default.
23361
23362     With '-munaligned-doubles', GCC assumes that doubles have 8-byte
23363     alignment only if they are contained in another type, or if they
23364     have an absolute address.  Otherwise, it assumes they have 4-byte
23365     alignment.  Specifying this option avoids some rare compatibility
23366     problems with code generated by other compilers.  It is not the
23367     default because it results in a performance loss, especially for
23368     floating-point code.
23369
23370'-muser-mode'
23371'-mno-user-mode'
23372     Do not generate code that can only run in supervisor mode.  This is
23373     relevant only for the 'casa' instruction emitted for the LEON3
23374     processor.  This is the default.
23375
23376'-mfaster-structs'
23377'-mno-faster-structs'
23378     With '-mfaster-structs', the compiler assumes that structures
23379     should have 8-byte alignment.  This enables the use of pairs of
23380     'ldd' and 'std' instructions for copies in structure assignment, in
23381     place of twice as many 'ld' and 'st' pairs.  However, the use of
23382     this changed alignment directly violates the SPARC ABI.  Thus, it's
23383     intended only for use on targets where the developer acknowledges
23384     that their resulting code is not directly in line with the rules of
23385     the ABI.
23386
23387'-mstd-struct-return'
23388'-mno-std-struct-return'
23389     With '-mstd-struct-return', the compiler generates checking code in
23390     functions returning structures or unions to detect size mismatches
23391     between the two sides of function calls, as per the 32-bit ABI.
23392
23393     The default is '-mno-std-struct-return'.  This option has no effect
23394     in 64-bit mode.
23395
23396'-mlra'
23397'-mno-lra'
23398     Enable Local Register Allocation.  This is the default for SPARC
23399     since GCC 7 so '-mno-lra' needs to be passed to get old Reload.
23400
23401'-mcpu=CPU_TYPE'
23402     Set the instruction set, register set, and instruction scheduling
23403     parameters for machine type CPU_TYPE.  Supported values for
23404     CPU_TYPE are 'v7', 'cypress', 'v8', 'supersparc', 'hypersparc',
23405     'leon', 'leon3', 'leon3v7', 'sparclite', 'f930', 'f934',
23406     'sparclite86x', 'sparclet', 'tsc701', 'v9', 'ultrasparc',
23407     'ultrasparc3', 'niagara', 'niagara2', 'niagara3', 'niagara4',
23408     'niagara7' and 'm8'.
23409
23410     Native Solaris and GNU/Linux toolchains also support the value
23411     'native', which selects the best architecture option for the host
23412     processor.  '-mcpu=native' has no effect if GCC does not recognize
23413     the processor.
23414
23415     Default instruction scheduling parameters are used for values that
23416     select an architecture and not an implementation.  These are 'v7',
23417     'v8', 'sparclite', 'sparclet', 'v9'.
23418
23419     Here is a list of each supported architecture and their supported
23420     implementations.
23421
23422     v7
23423          cypress, leon3v7
23424
23425     v8
23426          supersparc, hypersparc, leon, leon3
23427
23428     sparclite
23429          f930, f934, sparclite86x
23430
23431     sparclet
23432          tsc701
23433
23434     v9
23435          ultrasparc, ultrasparc3, niagara, niagara2, niagara3,
23436          niagara4, niagara7, m8
23437
23438     By default (unless configured otherwise), GCC generates code for
23439     the V7 variant of the SPARC architecture.  With '-mcpu=cypress',
23440     the compiler additionally optimizes it for the Cypress CY7C602
23441     chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
23442     also appropriate for the older SPARCStation 1, 2, IPX etc.
23443
23444     With '-mcpu=v8', GCC generates code for the V8 variant of the SPARC
23445     architecture.  The only difference from V7 code is that the
23446     compiler emits the integer multiply and integer divide instructions
23447     which exist in SPARC-V8 but not in SPARC-V7.  With
23448     '-mcpu=supersparc', the compiler additionally optimizes it for the
23449     SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
23450     series.
23451
23452     With '-mcpu=sparclite', GCC generates code for the SPARClite
23453     variant of the SPARC architecture.  This adds the integer multiply,
23454     integer divide step and scan ('ffs') instructions which exist in
23455     SPARClite but not in SPARC-V7.  With '-mcpu=f930', the compiler
23456     additionally optimizes it for the Fujitsu MB86930 chip, which is
23457     the original SPARClite, with no FPU.  With '-mcpu=f934', the
23458     compiler additionally optimizes it for the Fujitsu MB86934 chip,
23459     which is the more recent SPARClite with FPU.
23460
23461     With '-mcpu=sparclet', GCC generates code for the SPARClet variant
23462     of the SPARC architecture.  This adds the integer multiply,
23463     multiply/accumulate, integer divide step and scan ('ffs')
23464     instructions which exist in SPARClet but not in SPARC-V7.  With
23465     '-mcpu=tsc701', the compiler additionally optimizes it for the
23466     TEMIC SPARClet chip.
23467
23468     With '-mcpu=v9', GCC generates code for the V9 variant of the SPARC
23469     architecture.  This adds 64-bit integer and floating-point move
23470     instructions, 3 additional floating-point condition code registers
23471     and conditional move instructions.  With '-mcpu=ultrasparc', the
23472     compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
23473     chips.  With '-mcpu=ultrasparc3', the compiler additionally
23474     optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
23475     chips.  With '-mcpu=niagara', the compiler additionally optimizes
23476     it for Sun UltraSPARC T1 chips.  With '-mcpu=niagara2', the
23477     compiler additionally optimizes it for Sun UltraSPARC T2 chips.
23478     With '-mcpu=niagara3', the compiler additionally optimizes it for
23479     Sun UltraSPARC T3 chips.  With '-mcpu=niagara4', the compiler
23480     additionally optimizes it for Sun UltraSPARC T4 chips.  With
23481     '-mcpu=niagara7', the compiler additionally optimizes it for Oracle
23482     SPARC M7 chips.  With '-mcpu=m8', the compiler additionally
23483     optimizes it for Oracle M8 chips.
23484
23485'-mtune=CPU_TYPE'
23486     Set the instruction scheduling parameters for machine type
23487     CPU_TYPE, but do not set the instruction set or register set that
23488     the option '-mcpu=CPU_TYPE' does.
23489
23490     The same values for '-mcpu=CPU_TYPE' can be used for
23491     '-mtune=CPU_TYPE', but the only useful values are those that select
23492     a particular CPU implementation.  Those are 'cypress',
23493     'supersparc', 'hypersparc', 'leon', 'leon3', 'leon3v7', 'f930',
23494     'f934', 'sparclite86x', 'tsc701', 'ultrasparc', 'ultrasparc3',
23495     'niagara', 'niagara2', 'niagara3', 'niagara4', 'niagara7' and 'm8'.
23496     With native Solaris and GNU/Linux toolchains, 'native' can also be
23497     used.
23498
23499'-mv8plus'
23500'-mno-v8plus'
23501     With '-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
23502     difference from the V8 ABI is that the global and out registers are
23503     considered 64 bits wide.  This is enabled by default on Solaris in
23504     32-bit mode for all SPARC-V9 processors.
23505
23506'-mvis'
23507'-mno-vis'
23508     With '-mvis', GCC generates code that takes advantage of the
23509     UltraSPARC Visual Instruction Set extensions.  The default is
23510     '-mno-vis'.
23511
23512'-mvis2'
23513'-mno-vis2'
23514     With '-mvis2', GCC generates code that takes advantage of version
23515     2.0 of the UltraSPARC Visual Instruction Set extensions.  The
23516     default is '-mvis2' when targeting a cpu that supports such
23517     instructions, such as UltraSPARC-III and later.  Setting '-mvis2'
23518     also sets '-mvis'.
23519
23520'-mvis3'
23521'-mno-vis3'
23522     With '-mvis3', GCC generates code that takes advantage of version
23523     3.0 of the UltraSPARC Visual Instruction Set extensions.  The
23524     default is '-mvis3' when targeting a cpu that supports such
23525     instructions, such as niagara-3 and later.  Setting '-mvis3' also
23526     sets '-mvis2' and '-mvis'.
23527
23528'-mvis4'
23529'-mno-vis4'
23530     With '-mvis4', GCC generates code that takes advantage of version
23531     4.0 of the UltraSPARC Visual Instruction Set extensions.  The
23532     default is '-mvis4' when targeting a cpu that supports such
23533     instructions, such as niagara-7 and later.  Setting '-mvis4' also
23534     sets '-mvis3', '-mvis2' and '-mvis'.
23535
23536'-mvis4b'
23537'-mno-vis4b'
23538     With '-mvis4b', GCC generates code that takes advantage of version
23539     4.0 of the UltraSPARC Visual Instruction Set extensions, plus the
23540     additional VIS instructions introduced in the Oracle SPARC
23541     Architecture 2017.  The default is '-mvis4b' when targeting a cpu
23542     that supports such instructions, such as m8 and later.  Setting
23543     '-mvis4b' also sets '-mvis4', '-mvis3', '-mvis2' and '-mvis'.
23544
23545'-mcbcond'
23546'-mno-cbcond'
23547     With '-mcbcond', GCC generates code that takes advantage of the
23548     UltraSPARC Compare-and-Branch-on-Condition instructions.  The
23549     default is '-mcbcond' when targeting a CPU that supports such
23550     instructions, such as Niagara-4 and later.
23551
23552'-mfmaf'
23553'-mno-fmaf'
23554     With '-mfmaf', GCC generates code that takes advantage of the
23555     UltraSPARC Fused Multiply-Add Floating-point instructions.  The
23556     default is '-mfmaf' when targeting a CPU that supports such
23557     instructions, such as Niagara-3 and later.
23558
23559'-mfsmuld'
23560'-mno-fsmuld'
23561     With '-mfsmuld', GCC generates code that takes advantage of the
23562     Floating-point Multiply Single to Double (FsMULd) instruction.  The
23563     default is '-mfsmuld' when targeting a CPU supporting the
23564     architecture versions V8 or V9 with FPU except '-mcpu=leon'.
23565
23566'-mpopc'
23567'-mno-popc'
23568     With '-mpopc', GCC generates code that takes advantage of the
23569     UltraSPARC Population Count instruction.  The default is '-mpopc'
23570     when targeting a CPU that supports such an instruction, such as
23571     Niagara-2 and later.
23572
23573'-msubxc'
23574'-mno-subxc'
23575     With '-msubxc', GCC generates code that takes advantage of the
23576     UltraSPARC Subtract-Extended-with-Carry instruction.  The default
23577     is '-msubxc' when targeting a CPU that supports such an
23578     instruction, such as Niagara-7 and later.
23579
23580'-mfix-at697f'
23581     Enable the documented workaround for the single erratum of the
23582     Atmel AT697F processor (which corresponds to erratum #13 of the
23583     AT697E processor).
23584
23585'-mfix-ut699'
23586     Enable the documented workarounds for the floating-point errata and
23587     the data cache nullify errata of the UT699 processor.
23588
23589'-mfix-ut700'
23590     Enable the documented workaround for the back-to-back store errata
23591     of the UT699E/UT700 processor.
23592
23593'-mfix-gr712rc'
23594     Enable the documented workaround for the back-to-back store errata
23595     of the GR712RC processor.
23596
23597 These '-m' options are supported in addition to the above on SPARC-V9
23598processors in 64-bit environments:
23599
23600'-m32'
23601'-m64'
23602     Generate code for a 32-bit or 64-bit environment.  The 32-bit
23603     environment sets int, long and pointer to 32 bits.  The 64-bit
23604     environment sets int to 32 bits and long and pointer to 64 bits.
23605
23606'-mcmodel=WHICH'
23607     Set the code model to one of
23608
23609     'medlow'
23610          The Medium/Low code model: 64-bit addresses, programs must be
23611          linked in the low 32 bits of memory.  Programs can be
23612          statically or dynamically linked.
23613
23614     'medmid'
23615          The Medium/Middle code model: 64-bit addresses, programs must
23616          be linked in the low 44 bits of memory, the text and data
23617          segments must be less than 2GB in size and the data segment
23618          must be located within 2GB of the text segment.
23619
23620     'medany'
23621          The Medium/Anywhere code model: 64-bit addresses, programs may
23622          be linked anywhere in memory, the text and data segments must
23623          be less than 2GB in size and the data segment must be located
23624          within 2GB of the text segment.
23625
23626     'embmedany'
23627          The Medium/Anywhere code model for embedded systems: 64-bit
23628          addresses, the text and data segments must be less than 2GB in
23629          size, both starting anywhere in memory (determined at link
23630          time).  The global register %g4 points to the base of the data
23631          segment.  Programs are statically linked and PIC is not
23632          supported.
23633
23634'-mmemory-model=MEM-MODEL'
23635     Set the memory model in force on the processor to one of
23636
23637     'default'
23638          The default memory model for the processor and operating
23639          system.
23640
23641     'rmo'
23642          Relaxed Memory Order
23643
23644     'pso'
23645          Partial Store Order
23646
23647     'tso'
23648          Total Store Order
23649
23650     'sc'
23651          Sequential Consistency
23652
23653     These memory models are formally defined in Appendix D of the
23654     SPARC-V9 architecture manual, as set in the processor's 'PSTATE.MM'
23655     field.
23656
23657'-mstack-bias'
23658'-mno-stack-bias'
23659     With '-mstack-bias', GCC assumes that the stack pointer, and frame
23660     pointer if present, are offset by -2047 which must be added back
23661     when making stack frame references.  This is the default in 64-bit
23662     mode.  Otherwise, assume no such offset is present.
23663
23664
23665File: gcc.info,  Node: SPU Options,  Next: System V Options,  Prev: SPARC Options,  Up: Submodel Options
23666
236673.18.47 SPU Options
23668-------------------
23669
23670These '-m' options are supported on the SPU:
23671
23672'-mwarn-reloc'
23673'-merror-reloc'
23674
23675     The loader for SPU does not handle dynamic relocations.  By
23676     default, GCC gives an error when it generates code that requires a
23677     dynamic relocation.  '-mno-error-reloc' disables the error,
23678     '-mwarn-reloc' generates a warning instead.
23679
23680'-msafe-dma'
23681'-munsafe-dma'
23682
23683     Instructions that initiate or test completion of DMA must not be
23684     reordered with respect to loads and stores of the memory that is
23685     being accessed.  With '-munsafe-dma' you must use the 'volatile'
23686     keyword to protect memory accesses, but that can lead to
23687     inefficient code in places where the memory is known to not change.
23688     Rather than mark the memory as volatile, you can use '-msafe-dma'
23689     to tell the compiler to treat the DMA instructions as potentially
23690     affecting all memory.
23691
23692'-mbranch-hints'
23693
23694     By default, GCC generates a branch hint instruction to avoid
23695     pipeline stalls for always-taken or probably-taken branches.  A
23696     hint is not generated closer than 8 instructions away from its
23697     branch.  There is little reason to disable them, except for
23698     debugging purposes, or to make an object a little bit smaller.
23699
23700'-msmall-mem'
23701'-mlarge-mem'
23702
23703     By default, GCC generates code assuming that addresses are never
23704     larger than 18 bits.  With '-mlarge-mem' code is generated that
23705     assumes a full 32-bit address.
23706
23707'-mstdmain'
23708
23709     By default, GCC links against startup code that assumes the
23710     SPU-style main function interface (which has an unconventional
23711     parameter list).  With '-mstdmain', GCC links your program against
23712     startup code that assumes a C99-style interface to 'main',
23713     including a local copy of 'argv' strings.
23714
23715'-mfixed-range=REGISTER-RANGE'
23716     Generate code treating the given register range as fixed registers.
23717     A fixed register is one that the register allocator cannot use.
23718     This is useful when compiling kernel code.  A register range is
23719     specified as two registers separated by a dash.  Multiple register
23720     ranges can be specified separated by a comma.
23721
23722'-mea32'
23723'-mea64'
23724     Compile code assuming that pointers to the PPU address space
23725     accessed via the '__ea' named address space qualifier are either 32
23726     or 64 bits wide.  The default is 32 bits.  As this is an
23727     ABI-changing option, all object code in an executable must be
23728     compiled with the same setting.
23729
23730'-maddress-space-conversion'
23731'-mno-address-space-conversion'
23732     Allow/disallow treating the '__ea' address space as superset of the
23733     generic address space.  This enables explicit type casts between
23734     '__ea' and generic pointer as well as implicit conversions of
23735     generic pointers to '__ea' pointers.  The default is to allow
23736     address space pointer conversions.
23737
23738'-mcache-size=CACHE-SIZE'
23739     This option controls the version of libgcc that the compiler links
23740     to an executable and selects a software-managed cache for accessing
23741     variables in the '__ea' address space with a particular cache size.
23742     Possible options for CACHE-SIZE are '8', '16', '32', '64' and
23743     '128'.  The default cache size is 64KB.
23744
23745'-matomic-updates'
23746'-mno-atomic-updates'
23747     This option controls the version of libgcc that the compiler links
23748     to an executable and selects whether atomic updates to the
23749     software-managed cache of PPU-side variables are used.  If you use
23750     atomic updates, changes to a PPU variable from SPU code using the
23751     '__ea' named address space qualifier do not interfere with changes
23752     to other PPU variables residing in the same cache line from PPU
23753     code.  If you do not use atomic updates, such interference may
23754     occur; however, writing back cache lines is more efficient.  The
23755     default behavior is to use atomic updates.
23756
23757'-mdual-nops'
23758'-mdual-nops=N'
23759     By default, GCC inserts NOPs to increase dual issue when it expects
23760     it to increase performance.  N can be a value from 0 to 10.  A
23761     smaller N inserts fewer NOPs.  10 is the default, 0 is the same as
23762     '-mno-dual-nops'.  Disabled with '-Os'.
23763
23764'-mhint-max-nops=N'
23765     Maximum number of NOPs to insert for a branch hint.  A branch hint
23766     must be at least 8 instructions away from the branch it is
23767     affecting.  GCC inserts up to N NOPs to enforce this, otherwise it
23768     does not generate the branch hint.
23769
23770'-mhint-max-distance=N'
23771     The encoding of the branch hint instruction limits the hint to be
23772     within 256 instructions of the branch it is affecting.  By default,
23773     GCC makes sure it is within 125.
23774
23775'-msafe-hints'
23776     Work around a hardware bug that causes the SPU to stall
23777     indefinitely.  By default, GCC inserts the 'hbrp' instruction to
23778     make sure this stall won't happen.
23779
23780
23781File: gcc.info,  Node: System V Options,  Next: TILE-Gx Options,  Prev: SPU Options,  Up: Submodel Options
23782
237833.18.48 Options for System V
23784----------------------------
23785
23786These additional options are available on System V Release 4 for
23787compatibility with other compilers on those systems:
23788
23789'-G'
23790     Create a shared object.  It is recommended that '-symbolic' or
23791     '-shared' be used instead.
23792
23793'-Qy'
23794     Identify the versions of each tool used by the compiler, in a
23795     '.ident' assembler directive in the output.
23796
23797'-Qn'
23798     Refrain from adding '.ident' directives to the output file (this is
23799     the default).
23800
23801'-YP,DIRS'
23802     Search the directories DIRS, and no others, for libraries specified
23803     with '-l'.
23804
23805'-Ym,DIR'
23806     Look in the directory DIR to find the M4 preprocessor.  The
23807     assembler uses this option.
23808
23809
23810File: gcc.info,  Node: TILE-Gx Options,  Next: TILEPro Options,  Prev: System V Options,  Up: Submodel Options
23811
238123.18.49 TILE-Gx Options
23813-----------------------
23814
23815These '-m' options are supported on the TILE-Gx:
23816
23817'-mcmodel=small'
23818     Generate code for the small model.  The distance for direct calls
23819     is limited to 500M in either direction.  PC-relative addresses are
23820     32 bits.  Absolute addresses support the full address range.
23821
23822'-mcmodel=large'
23823     Generate code for the large model.  There is no limitation on call
23824     distance, pc-relative addresses, or absolute addresses.
23825
23826'-mcpu=NAME'
23827     Selects the type of CPU to be targeted.  Currently the only
23828     supported type is 'tilegx'.
23829
23830'-m32'
23831'-m64'
23832     Generate code for a 32-bit or 64-bit environment.  The 32-bit
23833     environment sets int, long, and pointer to 32 bits.  The 64-bit
23834     environment sets int to 32 bits and long and pointer to 64 bits.
23835
23836'-mbig-endian'
23837'-mlittle-endian'
23838     Generate code in big/little endian mode, respectively.
23839
23840
23841File: gcc.info,  Node: TILEPro Options,  Next: V850 Options,  Prev: TILE-Gx Options,  Up: Submodel Options
23842
238433.18.50 TILEPro Options
23844-----------------------
23845
23846These '-m' options are supported on the TILEPro:
23847
23848'-mcpu=NAME'
23849     Selects the type of CPU to be targeted.  Currently the only
23850     supported type is 'tilepro'.
23851
23852'-m32'
23853     Generate code for a 32-bit environment, which sets int, long, and
23854     pointer to 32 bits.  This is the only supported behavior so the
23855     flag is essentially ignored.
23856
23857
23858File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: TILEPro Options,  Up: Submodel Options
23859
238603.18.51 V850 Options
23861--------------------
23862
23863These '-m' options are defined for V850 implementations:
23864
23865'-mlong-calls'
23866'-mno-long-calls'
23867     Treat all calls as being far away (near).  If calls are assumed to
23868     be far away, the compiler always loads the function's address into
23869     a register, and calls indirect through the pointer.
23870
23871'-mno-ep'
23872'-mep'
23873     Do not optimize (do optimize) basic blocks that use the same index
23874     pointer 4 or more times to copy pointer into the 'ep' register, and
23875     use the shorter 'sld' and 'sst' instructions.  The '-mep' option is
23876     on by default if you optimize.
23877
23878'-mno-prolog-function'
23879'-mprolog-function'
23880     Do not use (do use) external functions to save and restore
23881     registers at the prologue and epilogue of a function.  The external
23882     functions are slower, but use less code space if more than one
23883     function saves the same number of registers.  The
23884     '-mprolog-function' option is on by default if you optimize.
23885
23886'-mspace'
23887     Try to make the code as small as possible.  At present, this just
23888     turns on the '-mep' and '-mprolog-function' options.
23889
23890'-mtda=N'
23891     Put static or global variables whose size is N bytes or less into
23892     the tiny data area that register 'ep' points to.  The tiny data
23893     area can hold up to 256 bytes in total (128 bytes for byte
23894     references).
23895
23896'-msda=N'
23897     Put static or global variables whose size is N bytes or less into
23898     the small data area that register 'gp' points to.  The small data
23899     area can hold up to 64 kilobytes.
23900
23901'-mzda=N'
23902     Put static or global variables whose size is N bytes or less into
23903     the first 32 kilobytes of memory.
23904
23905'-mv850'
23906     Specify that the target processor is the V850.
23907
23908'-mv850e3v5'
23909     Specify that the target processor is the V850E3V5.  The
23910     preprocessor constant '__v850e3v5__' is defined if this option is
23911     used.
23912
23913'-mv850e2v4'
23914     Specify that the target processor is the V850E3V5.  This is an
23915     alias for the '-mv850e3v5' option.
23916
23917'-mv850e2v3'
23918     Specify that the target processor is the V850E2V3.  The
23919     preprocessor constant '__v850e2v3__' is defined if this option is
23920     used.
23921
23922'-mv850e2'
23923     Specify that the target processor is the V850E2.  The preprocessor
23924     constant '__v850e2__' is defined if this option is used.
23925
23926'-mv850e1'
23927     Specify that the target processor is the V850E1.  The preprocessor
23928     constants '__v850e1__' and '__v850e__' are defined if this option
23929     is used.
23930
23931'-mv850es'
23932     Specify that the target processor is the V850ES. This is an alias
23933     for the '-mv850e1' option.
23934
23935'-mv850e'
23936     Specify that the target processor is the V850E.  The preprocessor
23937     constant '__v850e__' is defined if this option is used.
23938
23939     If neither '-mv850' nor '-mv850e' nor '-mv850e1' nor '-mv850e2' nor
23940     '-mv850e2v3' nor '-mv850e3v5' are defined then a default target
23941     processor is chosen and the relevant '__v850*__' preprocessor
23942     constant is defined.
23943
23944     The preprocessor constants '__v850' and '__v851__' are always
23945     defined, regardless of which processor variant is the target.
23946
23947'-mdisable-callt'
23948'-mno-disable-callt'
23949     This option suppresses generation of the 'CALLT' instruction for
23950     the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
23951     v850 architecture.
23952
23953     This option is enabled by default when the RH850 ABI is in use (see
23954     '-mrh850-abi'), and disabled by default when the GCC ABI is in use.
23955     If 'CALLT' instructions are being generated then the C preprocessor
23956     symbol '__V850_CALLT__' is defined.
23957
23958'-mrelax'
23959'-mno-relax'
23960     Pass on (or do not pass on) the '-mrelax' command-line option to
23961     the assembler.
23962
23963'-mlong-jumps'
23964'-mno-long-jumps'
23965     Disable (or re-enable) the generation of PC-relative jump
23966     instructions.
23967
23968'-msoft-float'
23969'-mhard-float'
23970     Disable (or re-enable) the generation of hardware floating point
23971     instructions.  This option is only significant when the target
23972     architecture is 'V850E2V3' or higher.  If hardware floating point
23973     instructions are being generated then the C preprocessor symbol
23974     '__FPU_OK__' is defined, otherwise the symbol '__NO_FPU__' is
23975     defined.
23976
23977'-mloop'
23978     Enables the use of the e3v5 LOOP instruction.  The use of this
23979     instruction is not enabled by default when the e3v5 architecture is
23980     selected because its use is still experimental.
23981
23982'-mrh850-abi'
23983'-mghs'
23984     Enables support for the RH850 version of the V850 ABI. This is the
23985     default.  With this version of the ABI the following rules apply:
23986
23987        * Integer sized structures and unions are returned via a memory
23988          pointer rather than a register.
23989
23990        * Large structures and unions (more than 8 bytes in size) are
23991          passed by value.
23992
23993        * Functions are aligned to 16-bit boundaries.
23994
23995        * The '-m8byte-align' command-line option is supported.
23996
23997        * The '-mdisable-callt' command-line option is enabled by
23998          default.  The '-mno-disable-callt' command-line option is not
23999          supported.
24000
24001     When this version of the ABI is enabled the C preprocessor symbol
24002     '__V850_RH850_ABI__' is defined.
24003
24004'-mgcc-abi'
24005     Enables support for the old GCC version of the V850 ABI. With this
24006     version of the ABI the following rules apply:
24007
24008        * Integer sized structures and unions are returned in register
24009          'r10'.
24010
24011        * Large structures and unions (more than 8 bytes in size) are
24012          passed by reference.
24013
24014        * Functions are aligned to 32-bit boundaries, unless optimizing
24015          for size.
24016
24017        * The '-m8byte-align' command-line option is not supported.
24018
24019        * The '-mdisable-callt' command-line option is supported but not
24020          enabled by default.
24021
24022     When this version of the ABI is enabled the C preprocessor symbol
24023     '__V850_GCC_ABI__' is defined.
24024
24025'-m8byte-align'
24026'-mno-8byte-align'
24027     Enables support for 'double' and 'long long' types to be aligned on
24028     8-byte boundaries.  The default is to restrict the alignment of all
24029     objects to at most 4-bytes.  When '-m8byte-align' is in effect the
24030     C preprocessor symbol '__V850_8BYTE_ALIGN__' is defined.
24031
24032'-mbig-switch'
24033     Generate code suitable for big switch tables.  Use this option only
24034     if the assembler/linker complain about out of range branches within
24035     a switch table.
24036
24037'-mapp-regs'
24038     This option causes r2 and r5 to be used in the code generated by
24039     the compiler.  This setting is the default.
24040
24041'-mno-app-regs'
24042     This option causes r2 and r5 to be treated as fixed registers.
24043
24044
24045File: gcc.info,  Node: VAX Options,  Next: Visium Options,  Prev: V850 Options,  Up: Submodel Options
24046
240473.18.52 VAX Options
24048-------------------
24049
24050These '-m' options are defined for the VAX:
24051
24052'-munix'
24053     Do not output certain jump instructions ('aobleq' and so on) that
24054     the Unix assembler for the VAX cannot handle across long ranges.
24055
24056'-mgnu'
24057     Do output those jump instructions, on the assumption that the GNU
24058     assembler is being used.
24059
24060'-mg'
24061     Output code for G-format floating-point numbers instead of
24062     D-format.
24063
24064
24065File: gcc.info,  Node: Visium Options,  Next: VMS Options,  Prev: VAX Options,  Up: Submodel Options
24066
240673.18.53 Visium Options
24068----------------------
24069
24070'-mdebug'
24071     A program which performs file I/O and is destined to run on an MCM
24072     target should be linked with this option.  It causes the libraries
24073     libc.a and libdebug.a to be linked.  The program should be run on
24074     the target under the control of the GDB remote debugging stub.
24075
24076'-msim'
24077     A program which performs file I/O and is destined to run on the
24078     simulator should be linked with option.  This causes libraries
24079     libc.a and libsim.a to be linked.
24080
24081'-mfpu'
24082'-mhard-float'
24083     Generate code containing floating-point instructions.  This is the
24084     default.
24085
24086'-mno-fpu'
24087'-msoft-float'
24088     Generate code containing library calls for floating-point.
24089
24090     '-msoft-float' changes the calling convention in the output file;
24091     therefore, it is only useful if you compile _all_ of a program with
24092     this option.  In particular, you need to compile 'libgcc.a', the
24093     library that comes with GCC, with '-msoft-float' in order for this
24094     to work.
24095
24096'-mcpu=CPU_TYPE'
24097     Set the instruction set, register set, and instruction scheduling
24098     parameters for machine type CPU_TYPE.  Supported values for
24099     CPU_TYPE are 'mcm', 'gr5' and 'gr6'.
24100
24101     'mcm' is a synonym of 'gr5' present for backward compatibility.
24102
24103     By default (unless configured otherwise), GCC generates code for
24104     the GR5 variant of the Visium architecture.
24105
24106     With '-mcpu=gr6', GCC generates code for the GR6 variant of the
24107     Visium architecture.  The only difference from GR5 code is that the
24108     compiler will generate block move instructions.
24109
24110'-mtune=CPU_TYPE'
24111     Set the instruction scheduling parameters for machine type
24112     CPU_TYPE, but do not set the instruction set or register set that
24113     the option '-mcpu=CPU_TYPE' would.
24114
24115'-msv-mode'
24116     Generate code for the supervisor mode, where there are no
24117     restrictions on the access to general registers.  This is the
24118     default.
24119
24120'-muser-mode'
24121     Generate code for the user mode, where the access to some general
24122     registers is forbidden: on the GR5, registers r24 to r31 cannot be
24123     accessed in this mode; on the GR6, only registers r29 to r31 are
24124     affected.
24125
24126
24127File: gcc.info,  Node: VMS Options,  Next: VxWorks Options,  Prev: Visium Options,  Up: Submodel Options
24128
241293.18.54 VMS Options
24130-------------------
24131
24132These '-m' options are defined for the VMS implementations:
24133
24134'-mvms-return-codes'
24135     Return VMS condition codes from 'main'.  The default is to return
24136     POSIX-style condition (e.g. error) codes.
24137
24138'-mdebug-main=PREFIX'
24139     Flag the first routine whose name starts with PREFIX as the main
24140     routine for the debugger.
24141
24142'-mmalloc64'
24143     Default to 64-bit memory allocation routines.
24144
24145'-mpointer-size=SIZE'
24146     Set the default size of pointers.  Possible options for SIZE are
24147     '32' or 'short' for 32 bit pointers, '64' or 'long' for 64 bit
24148     pointers, and 'no' for supporting only 32 bit pointers.  The later
24149     option disables 'pragma pointer_size'.
24150
24151
24152File: gcc.info,  Node: VxWorks Options,  Next: x86 Options,  Prev: VMS Options,  Up: Submodel Options
24153
241543.18.55 VxWorks Options
24155-----------------------
24156
24157The options in this section are defined for all VxWorks targets.
24158Options specific to the target hardware are listed with the other
24159options for that target.
24160
24161'-mrtp'
24162     GCC can generate code for both VxWorks kernels and real time
24163     processes (RTPs).  This option switches from the former to the
24164     latter.  It also defines the preprocessor macro '__RTP__'.
24165
24166'-non-static'
24167     Link an RTP executable against shared libraries rather than static
24168     libraries.  The options '-static' and '-shared' can also be used
24169     for RTPs (*note Link Options::); '-static' is the default.
24170
24171'-Bstatic'
24172'-Bdynamic'
24173     These options are passed down to the linker.  They are defined for
24174     compatibility with Diab.
24175
24176'-Xbind-lazy'
24177     Enable lazy binding of function calls.  This option is equivalent
24178     to '-Wl,-z,now' and is defined for compatibility with Diab.
24179
24180'-Xbind-now'
24181     Disable lazy binding of function calls.  This option is the default
24182     and is defined for compatibility with Diab.
24183
24184
24185File: gcc.info,  Node: x86 Options,  Next: x86 Windows Options,  Prev: VxWorks Options,  Up: Submodel Options
24186
241873.18.56 x86 Options
24188-------------------
24189
24190These '-m' options are defined for the x86 family of computers.
24191
24192'-march=CPU-TYPE'
24193     Generate instructions for the machine type CPU-TYPE.  In contrast
24194     to '-mtune=CPU-TYPE', which merely tunes the generated code for the
24195     specified CPU-TYPE, '-march=CPU-TYPE' allows GCC to generate code
24196     that may not run at all on processors other than the one indicated.
24197     Specifying '-march=CPU-TYPE' implies '-mtune=CPU-TYPE'.
24198
24199     The choices for CPU-TYPE are:
24200
24201     'native'
24202          This selects the CPU to generate code for at compilation time
24203          by determining the processor type of the compiling machine.
24204          Using '-march=native' enables all instruction subsets
24205          supported by the local machine (hence the result might not run
24206          on different machines).  Using '-mtune=native' produces code
24207          optimized for the local machine under the constraints of the
24208          selected instruction set.
24209
24210     'x86-64'
24211          A generic CPU with 64-bit extensions.
24212
24213     'i386'
24214          Original Intel i386 CPU.
24215
24216     'i486'
24217          Intel i486 CPU.  (No scheduling is implemented for this chip.)
24218
24219     'i586'
24220     'pentium'
24221          Intel Pentium CPU with no MMX support.
24222
24223     'lakemont'
24224          Intel Lakemont MCU, based on Intel Pentium CPU.
24225
24226     'pentium-mmx'
24227          Intel Pentium MMX CPU, based on Pentium core with MMX
24228          instruction set support.
24229
24230     'pentiumpro'
24231          Intel Pentium Pro CPU.
24232
24233     'i686'
24234          When used with '-march', the Pentium Pro instruction set is
24235          used, so the code runs on all i686 family chips.  When used
24236          with '-mtune', it has the same meaning as 'generic'.
24237
24238     'pentium2'
24239          Intel Pentium II CPU, based on Pentium Pro core with MMX
24240          instruction set support.
24241
24242     'pentium3'
24243     'pentium3m'
24244          Intel Pentium III CPU, based on Pentium Pro core with MMX and
24245          SSE instruction set support.
24246
24247     'pentium-m'
24248          Intel Pentium M; low-power version of Intel Pentium III CPU
24249          with MMX, SSE and SSE2 instruction set support.  Used by
24250          Centrino notebooks.
24251
24252     'pentium4'
24253     'pentium4m'
24254          Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
24255          support.
24256
24257     'prescott'
24258          Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2
24259          and SSE3 instruction set support.
24260
24261     'nocona'
24262          Improved version of Intel Pentium 4 CPU with 64-bit
24263          extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
24264
24265     'core2'
24266          Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
24267          and SSSE3 instruction set support.
24268
24269     'nehalem'
24270          Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2,
24271          SSE3, SSSE3, SSE4.1, SSE4.2 and POPCNT instruction set
24272          support.
24273
24274     'westmere'
24275          Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2,
24276          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES and PCLMUL
24277          instruction set support.
24278
24279     'sandybridge'
24280          Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
24281          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL
24282          instruction set support.
24283
24284     'ivybridge'
24285          Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
24286          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL,
24287          FSGSBASE, RDRND and F16C instruction set support.
24288
24289     'haswell'
24290          Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE,
24291          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
24292          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction
24293          set support.
24294
24295     'broadwell'
24296          Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
24297          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
24298          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX
24299          and PREFETCHW instruction set support.
24300
24301     'skylake'
24302          Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE,
24303          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
24304          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
24305          PREFETCHW, CLFLUSHOPT, XSAVEC and XSAVES instruction set
24306          support.
24307
24308     'bonnell'
24309          Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE,
24310          SSE2, SSE3 and SSSE3 instruction set support.
24311
24312     'silvermont'
24313          Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE,
24314          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and
24315          RDRND instruction set support.
24316
24317     'knl'
24318          Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX,
24319          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2,
24320          AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
24321          ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER and AVX512CD
24322          instruction set support.
24323
24324     'knm'
24325          Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX,
24326          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2,
24327          AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
24328          ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER, AVX512CD,
24329          AVX5124VNNIW, AVX5124FMAPS and AVX512VPOPCNTDQ instruction set
24330          support.
24331
24332     'skylake-avx512'
24333          Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX,
24334          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX,
24335          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
24336          RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
24337          CLWB, AVX512VL, AVX512BW, AVX512DQ and AVX512CD instruction
24338          set support.
24339
24340     'cannonlake'
24341          Intel Cannonlake Server CPU with 64-bit extensions, MOVBE,
24342          MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX,
24343          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
24344          RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
24345          AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
24346          AVX512IFMA, SHA and UMIP instruction set support.
24347
24348     'icelake-client'
24349          Intel Icelake Client CPU with 64-bit extensions, MOVBE, MMX,
24350          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX,
24351          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
24352          RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
24353          AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
24354          AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2,
24355          AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES
24356          instruction set support.
24357
24358     'icelake-server'
24359          Intel Icelake Server CPU with 64-bit extensions, MOVBE, MMX,
24360          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX,
24361          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
24362          RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
24363          AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
24364          AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2,
24365          AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES,
24366          PCONFIG and WBNOINVD instruction set support.
24367
24368     'k6'
24369          AMD K6 CPU with MMX instruction set support.
24370
24371     'k6-2'
24372     'k6-3'
24373          Improved versions of AMD K6 CPU with MMX and 3DNow!
24374          instruction set support.
24375
24376     'athlon'
24377     'athlon-tbird'
24378          AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
24379          prefetch instructions support.
24380
24381     'athlon-4'
24382     'athlon-xp'
24383     'athlon-mp'
24384          Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
24385          full SSE instruction set support.
24386
24387     'k8'
24388     'opteron'
24389     'athlon64'
24390     'athlon-fx'
24391          Processors based on the AMD K8 core with x86-64 instruction
24392          set support, including the AMD Opteron, Athlon 64, and Athlon
24393          64 FX processors.  (This supersets MMX, SSE, SSE2, 3DNow!,
24394          enhanced 3DNow! and 64-bit instruction set extensions.)
24395
24396     'k8-sse3'
24397     'opteron-sse3'
24398     'athlon64-sse3'
24399          Improved versions of AMD K8 cores with SSE3 instruction set
24400          support.
24401
24402     'amdfam10'
24403     'barcelona'
24404          CPUs based on AMD Family 10h cores with x86-64 instruction set
24405          support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
24406          enhanced 3DNow!, ABM and 64-bit instruction set extensions.)
24407
24408     'bdver1'
24409          CPUs based on AMD Family 15h cores with x86-64 instruction set
24410          support.  (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL,
24411          CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
24412          and 64-bit instruction set extensions.)
24413     'bdver2'
24414          AMD Family 15h core based CPUs with x86-64 instruction set
24415          support.  (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP,
24416          LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
24417          SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
24418     'bdver3'
24419          AMD Family 15h core based CPUs with x86-64 instruction set
24420          support.  (This supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE,
24421          AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3,
24422          SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set
24423          extensions.
24424     'bdver4'
24425          AMD Family 15h core based CPUs with x86-64 instruction set
24426          support.  (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4,
24427          FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE, MMX,
24428          SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit
24429          instruction set extensions.
24430
24431     'znver1'
24432          AMD Family 17h core based CPUs with x86-64 instruction set
24433          support.  (This supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX,
24434          AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCL_MUL, CX16,
24435          MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2,
24436          ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64-bit
24437          instruction set extensions.
24438
24439     'btver1'
24440          CPUs based on AMD Family 14h cores with x86-64 instruction set
24441          support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
24442          CX16, ABM and 64-bit instruction set extensions.)
24443
24444     'btver2'
24445          CPUs based on AMD Family 16h cores with x86-64 instruction set
24446          support.  This includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES,
24447          SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
24448          and 64-bit instruction set extensions.
24449
24450     'winchip-c6'
24451          IDT WinChip C6 CPU, dealt in same way as i486 with additional
24452          MMX instruction set support.
24453
24454     'winchip2'
24455          IDT WinChip 2 CPU, dealt in same way as i486 with additional
24456          MMX and 3DNow! instruction set support.
24457
24458     'c3'
24459          VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
24460          scheduling is implemented for this chip.)
24461
24462     'c3-2'
24463          VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
24464          support.  (No scheduling is implemented for this chip.)
24465
24466     'c7'
24467          VIA C7 (Esther) CPU with MMX, SSE, SSE2 and SSE3 instruction
24468          set support.  (No scheduling is implemented for this chip.)
24469
24470     'samuel-2'
24471          VIA Eden Samuel 2 CPU with MMX and 3DNow! instruction set
24472          support.  (No scheduling is implemented for this chip.)
24473
24474     'nehemiah'
24475          VIA Eden Nehemiah CPU with MMX and SSE instruction set
24476          support.  (No scheduling is implemented for this chip.)
24477
24478     'esther'
24479          VIA Eden Esther CPU with MMX, SSE, SSE2 and SSE3 instruction
24480          set support.  (No scheduling is implemented for this chip.)
24481
24482     'eden-x2'
24483          VIA Eden X2 CPU with x86-64, MMX, SSE, SSE2 and SSE3
24484          instruction set support.  (No scheduling is implemented for
24485          this chip.)
24486
24487     'eden-x4'
24488          VIA Eden X4 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3,
24489          SSE4.1, SSE4.2, AVX and AVX2 instruction set support.  (No
24490          scheduling is implemented for this chip.)
24491
24492     'nano'
24493          Generic VIA Nano CPU with x86-64, MMX, SSE, SSE2, SSE3 and
24494          SSSE3 instruction set support.  (No scheduling is implemented
24495          for this chip.)
24496
24497     'nano-1000'
24498          VIA Nano 1xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
24499          instruction set support.  (No scheduling is implemented for
24500          this chip.)
24501
24502     'nano-2000'
24503          VIA Nano 2xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
24504          instruction set support.  (No scheduling is implemented for
24505          this chip.)
24506
24507     'nano-3000'
24508          VIA Nano 3xxx CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and
24509          SSE4.1 instruction set support.  (No scheduling is implemented
24510          for this chip.)
24511
24512     'nano-x2'
24513          VIA Nano Dual Core CPU with x86-64, MMX, SSE, SSE2, SSE3,
24514          SSSE3 and SSE4.1 instruction set support.  (No scheduling is
24515          implemented for this chip.)
24516
24517     'nano-x4'
24518          VIA Nano Quad Core CPU with x86-64, MMX, SSE, SSE2, SSE3,
24519          SSSE3 and SSE4.1 instruction set support.  (No scheduling is
24520          implemented for this chip.)
24521
24522     'geode'
24523          AMD Geode embedded processor with MMX and 3DNow! instruction
24524          set support.
24525
24526'-mtune=CPU-TYPE'
24527     Tune to CPU-TYPE everything applicable about the generated code,
24528     except for the ABI and the set of available instructions.  While
24529     picking a specific CPU-TYPE schedules things appropriately for that
24530     particular chip, the compiler does not generate any code that
24531     cannot run on the default machine type unless you use a
24532     '-march=CPU-TYPE' option.  For example, if GCC is configured for
24533     i686-pc-linux-gnu then '-mtune=pentium4' generates code that is
24534     tuned for Pentium 4 but still runs on i686 machines.
24535
24536     The choices for CPU-TYPE are the same as for '-march'.  In
24537     addition, '-mtune' supports 2 extra choices for CPU-TYPE:
24538
24539     'generic'
24540          Produce code optimized for the most common IA32/AMD64/EM64T
24541          processors.  If you know the CPU on which your code will run,
24542          then you should use the corresponding '-mtune' or '-march'
24543          option instead of '-mtune=generic'.  But, if you do not know
24544          exactly what CPU users of your application will have, then you
24545          should use this option.
24546
24547          As new processors are deployed in the marketplace, the
24548          behavior of this option will change.  Therefore, if you
24549          upgrade to a newer version of GCC, code generation controlled
24550          by this option will change to reflect the processors that are
24551          most common at the time that version of GCC is released.
24552
24553          There is no '-march=generic' option because '-march' indicates
24554          the instruction set the compiler can use, and there is no
24555          generic instruction set applicable to all processors.  In
24556          contrast, '-mtune' indicates the processor (or, in this case,
24557          collection of processors) for which the code is optimized.
24558
24559     'intel'
24560          Produce code optimized for the most current Intel processors,
24561          which are Haswell and Silvermont for this version of GCC. If
24562          you know the CPU on which your code will run, then you should
24563          use the corresponding '-mtune' or '-march' option instead of
24564          '-mtune=intel'.  But, if you want your application performs
24565          better on both Haswell and Silvermont, then you should use
24566          this option.
24567
24568          As new Intel processors are deployed in the marketplace, the
24569          behavior of this option will change.  Therefore, if you
24570          upgrade to a newer version of GCC, code generation controlled
24571          by this option will change to reflect the most current Intel
24572          processors at the time that version of GCC is released.
24573
24574          There is no '-march=intel' option because '-march' indicates
24575          the instruction set the compiler can use, and there is no
24576          common instruction set applicable to all processors.  In
24577          contrast, '-mtune' indicates the processor (or, in this case,
24578          collection of processors) for which the code is optimized.
24579
24580'-mcpu=CPU-TYPE'
24581     A deprecated synonym for '-mtune'.
24582
24583'-mfpmath=UNIT'
24584     Generate floating-point arithmetic for selected unit UNIT.  The
24585     choices for UNIT are:
24586
24587     '387'
24588          Use the standard 387 floating-point coprocessor present on the
24589          majority of chips and emulated otherwise.  Code compiled with
24590          this option runs almost everywhere.  The temporary results are
24591          computed in 80-bit precision instead of the precision
24592          specified by the type, resulting in slightly different results
24593          compared to most of other chips.  See '-ffloat-store' for more
24594          detailed description.
24595
24596          This is the default choice for non-Darwin x86-32 targets.
24597
24598     'sse'
24599          Use scalar floating-point instructions present in the SSE
24600          instruction set.  This instruction set is supported by Pentium
24601          III and newer chips, and in the AMD line by Athlon-4, Athlon
24602          XP and Athlon MP chips.  The earlier version of the SSE
24603          instruction set supports only single-precision arithmetic,
24604          thus the double and extended-precision arithmetic are still
24605          done using 387.  A later version, present only in Pentium 4
24606          and AMD x86-64 chips, supports double-precision arithmetic
24607          too.
24608
24609          For the x86-32 compiler, you must use '-march=CPU-TYPE',
24610          '-msse' or '-msse2' switches to enable SSE extensions and make
24611          this option effective.  For the x86-64 compiler, these
24612          extensions are enabled by default.
24613
24614          The resulting code should be considerably faster in the
24615          majority of cases and avoid the numerical instability problems
24616          of 387 code, but may break some existing code that expects
24617          temporaries to be 80 bits.
24618
24619          This is the default choice for the x86-64 compiler, Darwin
24620          x86-32 targets, and the default choice for x86-32 targets with
24621          the SSE2 instruction set when '-ffast-math' is enabled.
24622
24623     'sse,387'
24624     'sse+387'
24625     'both'
24626          Attempt to utilize both instruction sets at once.  This
24627          effectively doubles the amount of available registers, and on
24628          chips with separate execution units for 387 and SSE the
24629          execution resources too.  Use this option with care, as it is
24630          still experimental, because the GCC register allocator does
24631          not model separate functional units well, resulting in
24632          unstable performance.
24633
24634'-masm=DIALECT'
24635     Output assembly instructions using selected DIALECT.  Also affects
24636     which dialect is used for basic 'asm' (*note Basic Asm::) and
24637     extended 'asm' (*note Extended Asm::).  Supported choices (in
24638     dialect order) are 'att' or 'intel'.  The default is 'att'.  Darwin
24639     does not support 'intel'.
24640
24641'-mieee-fp'
24642'-mno-ieee-fp'
24643     Control whether or not the compiler uses IEEE floating-point
24644     comparisons.  These correctly handle the case where the result of a
24645     comparison is unordered.
24646
24647'-m80387'
24648'-mhard-float'
24649     Generate output containing 80387 instructions for floating point.
24650
24651'-mno-80387'
24652'-msoft-float'
24653     Generate output containing library calls for floating point.
24654
24655     *Warning:* the requisite libraries are not part of GCC.  Normally
24656     the facilities of the machine's usual C compiler are used, but this
24657     cannot be done directly in cross-compilation.  You must make your
24658     own arrangements to provide suitable library functions for
24659     cross-compilation.
24660
24661     On machines where a function returns floating-point results in the
24662     80387 register stack, some floating-point opcodes may be emitted
24663     even if '-msoft-float' is used.
24664
24665'-mno-fp-ret-in-387'
24666     Do not use the FPU registers for return values of functions.
24667
24668     The usual calling convention has functions return values of types
24669     'float' and 'double' in an FPU register, even if there is no FPU.
24670     The idea is that the operating system should emulate an FPU.
24671
24672     The option '-mno-fp-ret-in-387' causes such values to be returned
24673     in ordinary CPU registers instead.
24674
24675'-mno-fancy-math-387'
24676     Some 387 emulators do not support the 'sin', 'cos' and 'sqrt'
24677     instructions for the 387.  Specify this option to avoid generating
24678     those instructions.  This option is the default on OpenBSD and
24679     NetBSD.  This option is overridden when '-march' indicates that the
24680     target CPU always has an FPU and so the instruction does not need
24681     emulation.  These instructions are not generated unless you also
24682     use the '-funsafe-math-optimizations' switch.
24683
24684'-malign-double'
24685'-mno-align-double'
24686     Control whether GCC aligns 'double', 'long double', and 'long long'
24687     variables on a two-word boundary or a one-word boundary.  Aligning
24688     'double' variables on a two-word boundary produces code that runs
24689     somewhat faster on a Pentium at the expense of more memory.
24690
24691     On x86-64, '-malign-double' is enabled by default.
24692
24693     *Warning:* if you use the '-malign-double' switch, structures
24694     containing the above types are aligned differently than the
24695     published application binary interface specifications for the
24696     x86-32 and are not binary compatible with structures in code
24697     compiled without that switch.
24698
24699'-m96bit-long-double'
24700'-m128bit-long-double'
24701     These switches control the size of 'long double' type.  The x86-32
24702     application binary interface specifies the size to be 96 bits, so
24703     '-m96bit-long-double' is the default in 32-bit mode.
24704
24705     Modern architectures (Pentium and newer) prefer 'long double' to be
24706     aligned to an 8- or 16-byte boundary.  In arrays or structures
24707     conforming to the ABI, this is not possible.  So specifying
24708     '-m128bit-long-double' aligns 'long double' to a 16-byte boundary
24709     by padding the 'long double' with an additional 32-bit zero.
24710
24711     In the x86-64 compiler, '-m128bit-long-double' is the default
24712     choice as its ABI specifies that 'long double' is aligned on
24713     16-byte boundary.
24714
24715     Notice that neither of these options enable any extra precision
24716     over the x87 standard of 80 bits for a 'long double'.
24717
24718     *Warning:* if you override the default value for your target ABI,
24719     this changes the size of structures and arrays containing 'long
24720     double' variables, as well as modifying the function calling
24721     convention for functions taking 'long double'.  Hence they are not
24722     binary-compatible with code compiled without that switch.
24723
24724'-mlong-double-64'
24725'-mlong-double-80'
24726'-mlong-double-128'
24727     These switches control the size of 'long double' type.  A size of
24728     64 bits makes the 'long double' type equivalent to the 'double'
24729     type.  This is the default for 32-bit Bionic C library.  A size of
24730     128 bits makes the 'long double' type equivalent to the
24731     '__float128' type.  This is the default for 64-bit Bionic C
24732     library.
24733
24734     *Warning:* if you override the default value for your target ABI,
24735     this changes the size of structures and arrays containing 'long
24736     double' variables, as well as modifying the function calling
24737     convention for functions taking 'long double'.  Hence they are not
24738     binary-compatible with code compiled without that switch.
24739
24740'-malign-data=TYPE'
24741     Control how GCC aligns variables.  Supported values for TYPE are
24742     'compat' uses increased alignment value compatible uses GCC 4.8 and
24743     earlier, 'abi' uses alignment value as specified by the psABI, and
24744     'cacheline' uses increased alignment value to match the cache line
24745     size.  'compat' is the default.
24746
24747'-mlarge-data-threshold=THRESHOLD'
24748     When '-mcmodel=medium' is specified, data objects larger than
24749     THRESHOLD are placed in the large data section.  This value must be
24750     the same across all objects linked into the binary, and defaults to
24751     65535.
24752
24753'-mrtd'
24754     Use a different function-calling convention, in which functions
24755     that take a fixed number of arguments return with the 'ret NUM'
24756     instruction, which pops their arguments while returning.  This
24757     saves one instruction in the caller since there is no need to pop
24758     the arguments there.
24759
24760     You can specify that an individual function is called with this
24761     calling sequence with the function attribute 'stdcall'.  You can
24762     also override the '-mrtd' option by using the function attribute
24763     'cdecl'.  *Note Function Attributes::.
24764
24765     *Warning:* this calling convention is incompatible with the one
24766     normally used on Unix, so you cannot use it if you need to call
24767     libraries compiled with the Unix compiler.
24768
24769     Also, you must provide function prototypes for all functions that
24770     take variable numbers of arguments (including 'printf'); otherwise
24771     incorrect code is generated for calls to those functions.
24772
24773     In addition, seriously incorrect code results if you call a
24774     function with too many arguments.  (Normally, extra arguments are
24775     harmlessly ignored.)
24776
24777'-mregparm=NUM'
24778     Control how many registers are used to pass integer arguments.  By
24779     default, no registers are used to pass arguments, and at most 3
24780     registers can be used.  You can control this behavior for a
24781     specific function by using the function attribute 'regparm'.  *Note
24782     Function Attributes::.
24783
24784     *Warning:* if you use this switch, and NUM is nonzero, then you
24785     must build all modules with the same value, including any
24786     libraries.  This includes the system libraries and startup modules.
24787
24788'-msseregparm'
24789     Use SSE register passing conventions for float and double arguments
24790     and return values.  You can control this behavior for a specific
24791     function by using the function attribute 'sseregparm'.  *Note
24792     Function Attributes::.
24793
24794     *Warning:* if you use this switch then you must build all modules
24795     with the same value, including any libraries.  This includes the
24796     system libraries and startup modules.
24797
24798'-mvect8-ret-in-mem'
24799     Return 8-byte vectors in memory instead of MMX registers.  This is
24800     the default on Solaris 8 and 9 and VxWorks to match the ABI of the
24801     Sun Studio compilers until version 12.  Later compiler versions
24802     (starting with Studio 12 Update 1) follow the ABI used by other x86
24803     targets, which is the default on Solaris 10 and later.  _Only_ use
24804     this option if you need to remain compatible with existing code
24805     produced by those previous compiler versions or older versions of
24806     GCC.
24807
24808'-mpc32'
24809'-mpc64'
24810'-mpc80'
24811
24812     Set 80387 floating-point precision to 32, 64 or 80 bits.  When
24813     '-mpc32' is specified, the significands of results of
24814     floating-point operations are rounded to 24 bits (single
24815     precision); '-mpc64' rounds the significands of results of
24816     floating-point operations to 53 bits (double precision) and
24817     '-mpc80' rounds the significands of results of floating-point
24818     operations to 64 bits (extended double precision), which is the
24819     default.  When this option is used, floating-point operations in
24820     higher precisions are not available to the programmer without
24821     setting the FPU control word explicitly.
24822
24823     Setting the rounding of floating-point operations to less than the
24824     default 80 bits can speed some programs by 2% or more.  Note that
24825     some mathematical libraries assume that extended-precision (80-bit)
24826     floating-point operations are enabled by default; routines in such
24827     libraries could suffer significant loss of accuracy, typically
24828     through so-called "catastrophic cancellation", when this option is
24829     used to set the precision to less than extended precision.
24830
24831'-mstackrealign'
24832     Realign the stack at entry.  On the x86, the '-mstackrealign'
24833     option generates an alternate prologue and epilogue that realigns
24834     the run-time stack if necessary.  This supports mixing legacy codes
24835     that keep 4-byte stack alignment with modern codes that keep
24836     16-byte stack alignment for SSE compatibility.  See also the
24837     attribute 'force_align_arg_pointer', applicable to individual
24838     functions.
24839
24840'-mpreferred-stack-boundary=NUM'
24841     Attempt to keep the stack boundary aligned to a 2 raised to NUM
24842     byte boundary.  If '-mpreferred-stack-boundary' is not specified,
24843     the default is 4 (16 bytes or 128 bits).
24844
24845     *Warning:* When generating code for the x86-64 architecture with
24846     SSE extensions disabled, '-mpreferred-stack-boundary=3' can be used
24847     to keep the stack boundary aligned to 8 byte boundary.  Since
24848     x86-64 ABI require 16 byte stack alignment, this is ABI
24849     incompatible and intended to be used in controlled environment
24850     where stack space is important limitation.  This option leads to
24851     wrong code when functions compiled with 16 byte stack alignment
24852     (such as functions from a standard library) are called with
24853     misaligned stack.  In this case, SSE instructions may lead to
24854     misaligned memory access traps.  In addition, variable arguments
24855     are handled incorrectly for 16 byte aligned objects (including x87
24856     long double and __int128), leading to wrong results.  You must
24857     build all modules with '-mpreferred-stack-boundary=3', including
24858     any libraries.  This includes the system libraries and startup
24859     modules.
24860
24861'-mincoming-stack-boundary=NUM'
24862     Assume the incoming stack is aligned to a 2 raised to NUM byte
24863     boundary.  If '-mincoming-stack-boundary' is not specified, the one
24864     specified by '-mpreferred-stack-boundary' is used.
24865
24866     On Pentium and Pentium Pro, 'double' and 'long double' values
24867     should be aligned to an 8-byte boundary (see '-malign-double') or
24868     suffer significant run time performance penalties.  On Pentium III,
24869     the Streaming SIMD Extension (SSE) data type '__m128' may not work
24870     properly if it is not 16-byte aligned.
24871
24872     To ensure proper alignment of this values on the stack, the stack
24873     boundary must be as aligned as that required by any value stored on
24874     the stack.  Further, every function must be generated such that it
24875     keeps the stack aligned.  Thus calling a function compiled with a
24876     higher preferred stack boundary from a function compiled with a
24877     lower preferred stack boundary most likely misaligns the stack.  It
24878     is recommended that libraries that use callbacks always use the
24879     default setting.
24880
24881     This extra alignment does consume extra stack space, and generally
24882     increases code size.  Code that is sensitive to stack space usage,
24883     such as embedded systems and operating system kernels, may want to
24884     reduce the preferred alignment to '-mpreferred-stack-boundary=2'.
24885
24886'-mmmx'
24887'-msse'
24888'-msse2'
24889'-msse3'
24890'-mssse3'
24891'-msse4'
24892'-msse4a'
24893'-msse4.1'
24894'-msse4.2'
24895'-mavx'
24896'-mavx2'
24897'-mavx512f'
24898'-mavx512pf'
24899'-mavx512er'
24900'-mavx512cd'
24901'-mavx512vl'
24902'-mavx512bw'
24903'-mavx512dq'
24904'-mavx512ifma'
24905'-mavx512vbmi'
24906'-msha'
24907'-maes'
24908'-mpclmul'
24909'-mclflushopt'
24910'-mclwb'
24911'-mfsgsbase'
24912'-mrdrnd'
24913'-mf16c'
24914'-mfma'
24915'-mpconfig'
24916'-mwbnoinvd'
24917'-mfma4'
24918'-mprfchw'
24919'-mrdpid'
24920'-mprefetchwt1'
24921'-mrdseed'
24922'-msgx'
24923'-mxop'
24924'-mlwp'
24925'-m3dnow'
24926'-m3dnowa'
24927'-mpopcnt'
24928'-mabm'
24929'-madx'
24930'-mbmi'
24931'-mbmi2'
24932'-mlzcnt'
24933'-mfxsr'
24934'-mxsave'
24935'-mxsaveopt'
24936'-mxsavec'
24937'-mxsaves'
24938'-mrtm'
24939'-mhle'
24940'-mtbm'
24941'-mmpx'
24942'-mmwaitx'
24943'-mclzero'
24944'-mpku'
24945'-mavx512vbmi2'
24946'-mgfni'
24947'-mvaes'
24948'-mvpclmulqdq'
24949'-mavx512bitalg'
24950'-mmovdiri'
24951'-mmovdir64b'
24952'-mavx512vpopcntdq'
24953'-mavx5124fmaps'
24954'-mavx512vnni'
24955'-mavx5124vnniw'
24956     These switches enable the use of instructions in the MMX, SSE,
24957     SSE2, SSE3, SSSE3, SSE4, SSE4A, SSE4.1, SSE4.2, AVX, AVX2, AVX512F,
24958     AVX512PF, AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ,
24959     AVX512IFMA, AVX512VBMI, SHA, AES, PCLMUL, CLFLUSHOPT, CLWB,
24960     FSGSBASE, RDRND, F16C, FMA, PCONFIG, WBNOINVD, FMA4, PREFETCHW,
24961     RDPID, PREFETCHWT1, RDSEED, SGX, XOP, LWP, 3DNow!, enhanced 3DNow!,
24962     POPCNT, ABM, ADX, BMI, BMI2, LZCNT, FXSR, XSAVE, XSAVEOPT, XSAVEC,
24963     XSAVES, RTM, HLE, TBM, MPX, MWAITX, CLZERO, PKU, AVX512VBMI2, GFNI,
24964     VAES, VPCLMULQDQ, AVX512BITALG, MOVDIRI, MOVDIR64B,
24965     AVX512VPOPCNTDQ, AVX5124FMAPS, AVX512VNNI, or AVX5124VNNIW extended
24966     instruction sets.  Each has a corresponding '-mno-' option to
24967     disable use of these instructions.
24968
24969     These extensions are also available as built-in functions: see
24970     *note x86 Built-in Functions::, for details of the functions
24971     enabled and disabled by these switches.
24972
24973     To generate SSE/SSE2 instructions automatically from floating-point
24974     code (as opposed to 387 instructions), see '-mfpmath=sse'.
24975
24976     GCC depresses SSEx instructions when '-mavx' is used.  Instead, it
24977     generates new AVX instructions or AVX equivalence for all SSEx
24978     instructions when needed.
24979
24980     These options enable GCC to use these extended instructions in
24981     generated code, even without '-mfpmath=sse'.  Applications that
24982     perform run-time CPU detection must compile separate files for each
24983     supported architecture, using the appropriate flags.  In
24984     particular, the file containing the CPU detection code should be
24985     compiled without these options.
24986
24987'-mdump-tune-features'
24988     This option instructs GCC to dump the names of the x86 performance
24989     tuning features and default settings.  The names can be used in
24990     '-mtune-ctrl=FEATURE-LIST'.
24991
24992'-mtune-ctrl=FEATURE-LIST'
24993     This option is used to do fine grain control of x86 code generation
24994     features.  FEATURE-LIST is a comma separated list of FEATURE names.
24995     See also '-mdump-tune-features'.  When specified, the FEATURE is
24996     turned on if it is not preceded with '^', otherwise, it is turned
24997     off.  '-mtune-ctrl=FEATURE-LIST' is intended to be used by GCC
24998     developers.  Using it may lead to code paths not covered by testing
24999     and can potentially result in compiler ICEs or runtime errors.
25000
25001'-mno-default'
25002     This option instructs GCC to turn off all tunable features.  See
25003     also '-mtune-ctrl=FEATURE-LIST' and '-mdump-tune-features'.
25004
25005'-mcld'
25006     This option instructs GCC to emit a 'cld' instruction in the
25007     prologue of functions that use string instructions.  String
25008     instructions depend on the DF flag to select between autoincrement
25009     or autodecrement mode.  While the ABI specifies the DF flag to be
25010     cleared on function entry, some operating systems violate this
25011     specification by not clearing the DF flag in their exception
25012     dispatchers.  The exception handler can be invoked with the DF flag
25013     set, which leads to wrong direction mode when string instructions
25014     are used.  This option can be enabled by default on 32-bit x86
25015     targets by configuring GCC with the '--enable-cld' configure
25016     option.  Generation of 'cld' instructions can be suppressed with
25017     the '-mno-cld' compiler option in this case.
25018
25019'-mvzeroupper'
25020     This option instructs GCC to emit a 'vzeroupper' instruction before
25021     a transfer of control flow out of the function to minimize the AVX
25022     to SSE transition penalty as well as remove unnecessary 'zeroupper'
25023     intrinsics.
25024
25025'-mprefer-avx128'
25026     This option instructs GCC to use 128-bit AVX instructions instead
25027     of 256-bit AVX instructions in the auto-vectorizer.
25028
25029'-mprefer-vector-width=OPT'
25030     This option instructs GCC to use OPT-bit vector width in
25031     instructions instead of default on the selected platform.
25032
25033     'none'
25034          No extra limitations applied to GCC other than defined by the
25035          selected platform.
25036
25037     '128'
25038          Prefer 128-bit vector width for instructions.
25039
25040     '256'
25041          Prefer 256-bit vector width for instructions.
25042
25043     '512'
25044          Prefer 512-bit vector width for instructions.
25045
25046'-mcx16'
25047     This option enables GCC to generate 'CMPXCHG16B' instructions in
25048     64-bit code to implement compare-and-exchange operations on 16-byte
25049     aligned 128-bit objects.  This is useful for atomic updates of data
25050     structures exceeding one machine word in size.  The compiler uses
25051     this instruction to implement *note __sync Builtins::.  However,
25052     for *note __atomic Builtins:: operating on 128-bit integers, a
25053     library call is always used.
25054
25055'-msahf'
25056     This option enables generation of 'SAHF' instructions in 64-bit
25057     code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
25058     the introduction of Pentium 4 G1 step in December 2005, lacked the
25059     'LAHF' and 'SAHF' instructions which are supported by AMD64.  These
25060     are load and store instructions, respectively, for certain status
25061     flags.  In 64-bit mode, the 'SAHF' instruction is used to optimize
25062     'fmod', 'drem', and 'remainder' built-in functions; see *note Other
25063     Builtins:: for details.
25064
25065'-mmovbe'
25066     This option enables use of the 'movbe' instruction to implement
25067     '__builtin_bswap32' and '__builtin_bswap64'.
25068
25069'-mshstk'
25070     The '-mshstk' option enables shadow stack built-in functions from
25071     x86 Control-flow Enforcement Technology (CET).
25072
25073'-mcrc32'
25074     This option enables built-in functions '__builtin_ia32_crc32qi',
25075     '__builtin_ia32_crc32hi', '__builtin_ia32_crc32si' and
25076     '__builtin_ia32_crc32di' to generate the 'crc32' machine
25077     instruction.
25078
25079'-mrecip'
25080     This option enables use of 'RCPSS' and 'RSQRTSS' instructions (and
25081     their vectorized variants 'RCPPS' and 'RSQRTPS') with an additional
25082     Newton-Raphson step to increase precision instead of 'DIVSS' and
25083     'SQRTSS' (and their vectorized variants) for single-precision
25084     floating-point arguments.  These instructions are generated only
25085     when '-funsafe-math-optimizations' is enabled together with
25086     '-ffinite-math-only' and '-fno-trapping-math'.  Note that while the
25087     throughput of the sequence is higher than the throughput of the
25088     non-reciprocal instruction, the precision of the sequence can be
25089     decreased by up to 2 ulp (i.e.  the inverse of 1.0 equals
25090     0.99999994).
25091
25092     Note that GCC implements '1.0f/sqrtf(X)' in terms of 'RSQRTSS' (or
25093     'RSQRTPS') already with '-ffast-math' (or the above option
25094     combination), and doesn't need '-mrecip'.
25095
25096     Also note that GCC emits the above sequence with additional
25097     Newton-Raphson step for vectorized single-float division and
25098     vectorized 'sqrtf(X)' already with '-ffast-math' (or the above
25099     option combination), and doesn't need '-mrecip'.
25100
25101'-mrecip=OPT'
25102     This option controls which reciprocal estimate instructions may be
25103     used.  OPT is a comma-separated list of options, which may be
25104     preceded by a '!' to invert the option:
25105
25106     'all'
25107          Enable all estimate instructions.
25108
25109     'default'
25110          Enable the default instructions, equivalent to '-mrecip'.
25111
25112     'none'
25113          Disable all estimate instructions, equivalent to '-mno-recip'.
25114
25115     'div'
25116          Enable the approximation for scalar division.
25117
25118     'vec-div'
25119          Enable the approximation for vectorized division.
25120
25121     'sqrt'
25122          Enable the approximation for scalar square root.
25123
25124     'vec-sqrt'
25125          Enable the approximation for vectorized square root.
25126
25127     So, for example, '-mrecip=all,!sqrt' enables all of the reciprocal
25128     approximations, except for square root.
25129
25130'-mveclibabi=TYPE'
25131     Specifies the ABI type to use for vectorizing intrinsics using an
25132     external library.  Supported values for TYPE are 'svml' for the
25133     Intel short vector math library and 'acml' for the AMD math core
25134     library.  To use this option, both '-ftree-vectorize' and
25135     '-funsafe-math-optimizations' have to be enabled, and an SVML or
25136     ACML ABI-compatible library must be specified at link time.
25137
25138     GCC currently emits calls to 'vmldExp2', 'vmldLn2', 'vmldLog102',
25139     'vmldPow2', 'vmldTanh2', 'vmldTan2', 'vmldAtan2', 'vmldAtanh2',
25140     'vmldCbrt2', 'vmldSinh2', 'vmldSin2', 'vmldAsinh2', 'vmldAsin2',
25141     'vmldCosh2', 'vmldCos2', 'vmldAcosh2', 'vmldAcos2', 'vmlsExp4',
25142     'vmlsLn4', 'vmlsLog104', 'vmlsPow4', 'vmlsTanh4', 'vmlsTan4',
25143     'vmlsAtan4', 'vmlsAtanh4', 'vmlsCbrt4', 'vmlsSinh4', 'vmlsSin4',
25144     'vmlsAsinh4', 'vmlsAsin4', 'vmlsCosh4', 'vmlsCos4', 'vmlsAcosh4'
25145     and 'vmlsAcos4' for corresponding function type when
25146     '-mveclibabi=svml' is used, and '__vrd2_sin', '__vrd2_cos',
25147     '__vrd2_exp', '__vrd2_log', '__vrd2_log2', '__vrd2_log10',
25148     '__vrs4_sinf', '__vrs4_cosf', '__vrs4_expf', '__vrs4_logf',
25149     '__vrs4_log2f', '__vrs4_log10f' and '__vrs4_powf' for the
25150     corresponding function type when '-mveclibabi=acml' is used.
25151
25152'-mabi=NAME'
25153     Generate code for the specified calling convention.  Permissible
25154     values are 'sysv' for the ABI used on GNU/Linux and other systems,
25155     and 'ms' for the Microsoft ABI. The default is to use the Microsoft
25156     ABI when targeting Microsoft Windows and the SysV ABI on all other
25157     systems.  You can control this behavior for specific functions by
25158     using the function attributes 'ms_abi' and 'sysv_abi'.  *Note
25159     Function Attributes::.
25160
25161'-mforce-indirect-call'
25162     Force all calls to functions to be indirect.  This is useful when
25163     using Intel Processor Trace where it generates more precise timing
25164     information for function calls.
25165
25166'-mcall-ms2sysv-xlogues'
25167     Due to differences in 64-bit ABIs, any Microsoft ABI function that
25168     calls a System V ABI function must consider RSI, RDI and XMM6-15 as
25169     clobbered.  By default, the code for saving and restoring these
25170     registers is emitted inline, resulting in fairly lengthy prologues
25171     and epilogues.  Using '-mcall-ms2sysv-xlogues' emits prologues and
25172     epilogues that use stubs in the static portion of libgcc to perform
25173     these saves and restores, thus reducing function size at the cost
25174     of a few extra instructions.
25175
25176'-mtls-dialect=TYPE'
25177     Generate code to access thread-local storage using the 'gnu' or
25178     'gnu2' conventions.  'gnu' is the conservative default; 'gnu2' is
25179     more efficient, but it may add compile- and run-time requirements
25180     that cannot be satisfied on all systems.
25181
25182'-mpush-args'
25183'-mno-push-args'
25184     Use PUSH operations to store outgoing parameters.  This method is
25185     shorter and usually equally fast as method using SUB/MOV operations
25186     and is enabled by default.  In some cases disabling it may improve
25187     performance because of improved scheduling and reduced
25188     dependencies.
25189
25190'-maccumulate-outgoing-args'
25191     If enabled, the maximum amount of space required for outgoing
25192     arguments is computed in the function prologue.  This is faster on
25193     most modern CPUs because of reduced dependencies, improved
25194     scheduling and reduced stack usage when the preferred stack
25195     boundary is not equal to 2.  The drawback is a notable increase in
25196     code size.  This switch implies '-mno-push-args'.
25197
25198'-mthreads'
25199     Support thread-safe exception handling on MinGW. Programs that rely
25200     on thread-safe exception handling must compile and link all code
25201     with the '-mthreads' option.  When compiling, '-mthreads' defines
25202     '-D_MT'; when linking, it links in a special thread helper library
25203     '-lmingwthrd' which cleans up per-thread exception-handling data.
25204
25205'-mms-bitfields'
25206'-mno-ms-bitfields'
25207
25208     Enable/disable bit-field layout compatible with the native
25209     Microsoft Windows compiler.
25210
25211     If 'packed' is used on a structure, or if bit-fields are used, it
25212     may be that the Microsoft ABI lays out the structure differently
25213     than the way GCC normally does.  Particularly when moving packed
25214     data between functions compiled with GCC and the native Microsoft
25215     compiler (either via function call or as data in a file), it may be
25216     necessary to access either format.
25217
25218     This option is enabled by default for Microsoft Windows targets.
25219     This behavior can also be controlled locally by use of variable or
25220     type attributes.  For more information, see *note x86 Variable
25221     Attributes:: and *note x86 Type Attributes::.
25222
25223     The Microsoft structure layout algorithm is fairly simple with the
25224     exception of the bit-field packing.  The padding and alignment of
25225     members of structures and whether a bit-field can straddle a
25226     storage-unit boundary are determine by these rules:
25227
25228       1. Structure members are stored sequentially in the order in
25229          which they are declared: the first member has the lowest
25230          memory address and the last member the highest.
25231
25232       2. Every data object has an alignment requirement.  The alignment
25233          requirement for all data except structures, unions, and arrays
25234          is either the size of the object or the current packing size
25235          (specified with either the 'aligned' attribute or the 'pack'
25236          pragma), whichever is less.  For structures, unions, and
25237          arrays, the alignment requirement is the largest alignment
25238          requirement of its members.  Every object is allocated an
25239          offset so that:
25240
25241               offset % alignment_requirement == 0
25242
25243       3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte
25244          allocation unit if the integral types are the same size and if
25245          the next bit-field fits into the current allocation unit
25246          without crossing the boundary imposed by the common alignment
25247          requirements of the bit-fields.
25248
25249     MSVC interprets zero-length bit-fields in the following ways:
25250
25251       1. If a zero-length bit-field is inserted between two bit-fields
25252          that are normally coalesced, the bit-fields are not coalesced.
25253
25254          For example:
25255
25256               struct
25257                {
25258                  unsigned long bf_1 : 12;
25259                  unsigned long : 0;
25260                  unsigned long bf_2 : 12;
25261                } t1;
25262
25263          The size of 't1' is 8 bytes with the zero-length bit-field.
25264          If the zero-length bit-field were removed, 't1''s size would
25265          be 4 bytes.
25266
25267       2. If a zero-length bit-field is inserted after a bit-field,
25268          'foo', and the alignment of the zero-length bit-field is
25269          greater than the member that follows it, 'bar', 'bar' is
25270          aligned as the type of the zero-length bit-field.
25271
25272          For example:
25273
25274               struct
25275                {
25276                  char foo : 4;
25277                  short : 0;
25278                  char bar;
25279                } t2;
25280
25281               struct
25282                {
25283                  char foo : 4;
25284                  short : 0;
25285                  double bar;
25286                } t3;
25287
25288          For 't2', 'bar' is placed at offset 2, rather than offset 1.
25289          Accordingly, the size of 't2' is 4.  For 't3', the zero-length
25290          bit-field does not affect the alignment of 'bar' or, as a
25291          result, the size of the structure.
25292
25293          Taking this into account, it is important to note the
25294          following:
25295
25296            1. If a zero-length bit-field follows a normal bit-field,
25297               the type of the zero-length bit-field may affect the
25298               alignment of the structure as whole.  For example, 't2'
25299               has a size of 4 bytes, since the zero-length bit-field
25300               follows a normal bit-field, and is of type short.
25301
25302            2. Even if a zero-length bit-field is not followed by a
25303               normal bit-field, it may still affect the alignment of
25304               the structure:
25305
25306                    struct
25307                     {
25308                       char foo : 6;
25309                       long : 0;
25310                     } t4;
25311
25312               Here, 't4' takes up 4 bytes.
25313
25314       3. Zero-length bit-fields following non-bit-field members are
25315          ignored:
25316
25317               struct
25318                {
25319                  char foo;
25320                  long : 0;
25321                  char bar;
25322                } t5;
25323
25324          Here, 't5' takes up 2 bytes.
25325
25326'-mno-align-stringops'
25327     Do not align the destination of inlined string operations.  This
25328     switch reduces code size and improves performance in case the
25329     destination is already aligned, but GCC doesn't know about it.
25330
25331'-minline-all-stringops'
25332     By default GCC inlines string operations only when the destination
25333     is known to be aligned to least a 4-byte boundary.  This enables
25334     more inlining and increases code size, but may improve performance
25335     of code that depends on fast 'memcpy', 'strlen', and 'memset' for
25336     short lengths.
25337
25338'-minline-stringops-dynamically'
25339     For string operations of unknown size, use run-time checks with
25340     inline code for small blocks and a library call for large blocks.
25341
25342'-mstringop-strategy=ALG'
25343     Override the internal decision heuristic for the particular
25344     algorithm to use for inlining string operations.  The allowed
25345     values for ALG are:
25346
25347     'rep_byte'
25348     'rep_4byte'
25349     'rep_8byte'
25350          Expand using i386 'rep' prefix of the specified size.
25351
25352     'byte_loop'
25353     'loop'
25354     'unrolled_loop'
25355          Expand into an inline loop.
25356
25357     'libcall'
25358          Always use a library call.
25359
25360'-mmemcpy-strategy=STRATEGY'
25361     Override the internal decision heuristic to decide if
25362     '__builtin_memcpy' should be inlined and what inline algorithm to
25363     use when the expected size of the copy operation is known.
25364     STRATEGY is a comma-separated list of ALG:MAX_SIZE:DEST_ALIGN
25365     triplets.  ALG is specified in '-mstringop-strategy', MAX_SIZE
25366     specifies the max byte size with which inline algorithm ALG is
25367     allowed.  For the last triplet, the MAX_SIZE must be '-1'.  The
25368     MAX_SIZE of the triplets in the list must be specified in
25369     increasing order.  The minimal byte size for ALG is '0' for the
25370     first triplet and 'MAX_SIZE + 1' of the preceding range.
25371
25372'-mmemset-strategy=STRATEGY'
25373     The option is similar to '-mmemcpy-strategy=' except that it is to
25374     control '__builtin_memset' expansion.
25375
25376'-momit-leaf-frame-pointer'
25377     Don't keep the frame pointer in a register for leaf functions.
25378     This avoids the instructions to save, set up, and restore frame
25379     pointers and makes an extra register available in leaf functions.
25380     The option '-fomit-leaf-frame-pointer' removes the frame pointer
25381     for leaf functions, which might make debugging harder.
25382
25383'-mtls-direct-seg-refs'
25384'-mno-tls-direct-seg-refs'
25385     Controls whether TLS variables may be accessed with offsets from
25386     the TLS segment register ('%gs' for 32-bit, '%fs' for 64-bit), or
25387     whether the thread base pointer must be added.  Whether or not this
25388     is valid depends on the operating system, and whether it maps the
25389     segment to cover the entire TLS area.
25390
25391     For systems that use the GNU C Library, the default is on.
25392
25393'-msse2avx'
25394'-mno-sse2avx'
25395     Specify that the assembler should encode SSE instructions with VEX
25396     prefix.  The option '-mavx' turns this on by default.
25397
25398'-mfentry'
25399'-mno-fentry'
25400     If profiling is active ('-pg'), put the profiling counter call
25401     before the prologue.  Note: On x86 architectures the attribute
25402     'ms_hook_prologue' isn't possible at the moment for '-mfentry' and
25403     '-pg'.
25404
25405'-mrecord-mcount'
25406'-mno-record-mcount'
25407     If profiling is active ('-pg'), generate a __mcount_loc section
25408     that contains pointers to each profiling call.  This is useful for
25409     automatically patching and out calls.
25410
25411'-mnop-mcount'
25412'-mno-nop-mcount'
25413     If profiling is active ('-pg'), generate the calls to the profiling
25414     functions as NOPs.  This is useful when they should be patched in
25415     later dynamically.  This is likely only useful together with
25416     '-mrecord-mcount'.
25417
25418'-mskip-rax-setup'
25419'-mno-skip-rax-setup'
25420     When generating code for the x86-64 architecture with SSE
25421     extensions disabled, '-mskip-rax-setup' can be used to skip setting
25422     up RAX register when there are no variable arguments passed in
25423     vector registers.
25424
25425     *Warning:* Since RAX register is used to avoid unnecessarily saving
25426     vector registers on stack when passing variable arguments, the
25427     impacts of this option are callees may waste some stack space,
25428     misbehave or jump to a random location.  GCC 4.4 or newer don't
25429     have those issues, regardless the RAX register value.
25430
25431'-m8bit-idiv'
25432'-mno-8bit-idiv'
25433     On some processors, like Intel Atom, 8-bit unsigned integer divide
25434     is much faster than 32-bit/64-bit integer divide.  This option
25435     generates a run-time check.  If both dividend and divisor are
25436     within range of 0 to 255, 8-bit unsigned integer divide is used
25437     instead of 32-bit/64-bit integer divide.
25438
25439'-mavx256-split-unaligned-load'
25440'-mavx256-split-unaligned-store'
25441     Split 32-byte AVX unaligned load and store.
25442
25443'-mstack-protector-guard=GUARD'
25444'-mstack-protector-guard-reg=REG'
25445'-mstack-protector-guard-offset=OFFSET'
25446     Generate stack protection code using canary at GUARD.  Supported
25447     locations are 'global' for global canary or 'tls' for per-thread
25448     canary in the TLS block (the default).  This option has effect only
25449     when '-fstack-protector' or '-fstack-protector-all' is specified.
25450
25451     With the latter choice the options
25452     '-mstack-protector-guard-reg=REG' and
25453     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
25454     segment register ('%fs' or '%gs') to use as base register for
25455     reading the canary, and from what offset from that base register.
25456     The default for those is as specified in the relevant ABI.
25457
25458'-mmitigate-rop'
25459     Try to avoid generating code sequences that contain unintended
25460     return opcodes, to mitigate against certain forms of attack.  At
25461     the moment, this option is limited in what it can do and should not
25462     be relied on to provide serious protection.
25463
25464'-mgeneral-regs-only'
25465     Generate code that uses only the general-purpose registers.  This
25466     prevents the compiler from using floating-point, vector, mask and
25467     bound registers.
25468
25469'-mindirect-branch=CHOICE'
25470     Convert indirect call and jump with CHOICE.  The default is 'keep',
25471     which keeps indirect call and jump unmodified.  'thunk' converts
25472     indirect call and jump to call and return thunk.  'thunk-inline'
25473     converts indirect call and jump to inlined call and return thunk.
25474     'thunk-extern' converts indirect call and jump to external call and
25475     return thunk provided in a separate object file.  You can control
25476     this behavior for a specific function by using the function
25477     attribute 'indirect_branch'.  *Note Function Attributes::.
25478
25479     Note that '-mcmodel=large' is incompatible with
25480     '-mindirect-branch=thunk' and '-mindirect-branch=thunk-extern'
25481     since the thunk function may not be reachable in the large code
25482     model.
25483
25484     Note that '-mindirect-branch=thunk-extern' is incompatible with
25485     '-fcf-protection=branch' and '-fcheck-pointer-bounds' since the
25486     external thunk can not be modified to disable control-flow check.
25487
25488'-mfunction-return=CHOICE'
25489     Convert function return with CHOICE.  The default is 'keep', which
25490     keeps function return unmodified.  'thunk' converts function return
25491     to call and return thunk.  'thunk-inline' converts function return
25492     to inlined call and return thunk.  'thunk-extern' converts function
25493     return to external call and return thunk provided in a separate
25494     object file.  You can control this behavior for a specific function
25495     by using the function attribute 'function_return'.  *Note Function
25496     Attributes::.
25497
25498     Note that '-mcmodel=large' is incompatible with
25499     '-mfunction-return=thunk' and '-mfunction-return=thunk-extern'
25500     since the thunk function may not be reachable in the large code
25501     model.
25502
25503'-mindirect-branch-register'
25504     Force indirect call and jump via register.
25505
25506 These '-m' switches are supported in addition to the above on x86-64
25507processors in 64-bit environments.
25508
25509'-m32'
25510'-m64'
25511'-mx32'
25512'-m16'
25513'-miamcu'
25514     Generate code for a 16-bit, 32-bit or 64-bit environment.  The
25515     '-m32' option sets 'int', 'long', and pointer types to 32 bits, and
25516     generates code that runs on any i386 system.
25517
25518     The '-m64' option sets 'int' to 32 bits and 'long' and pointer
25519     types to 64 bits, and generates code for the x86-64 architecture.
25520     For Darwin only the '-m64' option also turns off the '-fno-pic' and
25521     '-mdynamic-no-pic' options.
25522
25523     The '-mx32' option sets 'int', 'long', and pointer types to 32
25524     bits, and generates code for the x86-64 architecture.
25525
25526     The '-m16' option is the same as '-m32', except for that it outputs
25527     the '.code16gcc' assembly directive at the beginning of the
25528     assembly output so that the binary can run in 16-bit mode.
25529
25530     The '-miamcu' option generates code which conforms to Intel MCU
25531     psABI. It requires the '-m32' option to be turned on.
25532
25533'-mno-red-zone'
25534     Do not use a so-called "red zone" for x86-64 code.  The red zone is
25535     mandated by the x86-64 ABI; it is a 128-byte area beyond the
25536     location of the stack pointer that is not modified by signal or
25537     interrupt handlers and therefore can be used for temporary data
25538     without adjusting the stack pointer.  The flag '-mno-red-zone'
25539     disables this red zone.
25540
25541'-mcmodel=small'
25542     Generate code for the small code model: the program and its symbols
25543     must be linked in the lower 2 GB of the address space.  Pointers
25544     are 64 bits.  Programs can be statically or dynamically linked.
25545     This is the default code model.
25546
25547'-mcmodel=kernel'
25548     Generate code for the kernel code model.  The kernel runs in the
25549     negative 2 GB of the address space.  This model has to be used for
25550     Linux kernel code.
25551
25552'-mcmodel=medium'
25553     Generate code for the medium model: the program is linked in the
25554     lower 2 GB of the address space.  Small symbols are also placed
25555     there.  Symbols with sizes larger than '-mlarge-data-threshold' are
25556     put into large data or BSS sections and can be located above 2GB.
25557     Programs can be statically or dynamically linked.
25558
25559'-mcmodel=large'
25560     Generate code for the large model.  This model makes no assumptions
25561     about addresses and sizes of sections.
25562
25563'-maddress-mode=long'
25564     Generate code for long address mode.  This is only supported for
25565     64-bit and x32 environments.  It is the default address mode for
25566     64-bit environments.
25567
25568'-maddress-mode=short'
25569     Generate code for short address mode.  This is only supported for
25570     32-bit and x32 environments.  It is the default address mode for
25571     32-bit and x32 environments.
25572
25573
25574File: gcc.info,  Node: x86 Windows Options,  Next: Xstormy16 Options,  Prev: x86 Options,  Up: Submodel Options
25575
255763.18.57 x86 Windows Options
25577---------------------------
25578
25579These additional options are available for Microsoft Windows targets:
25580
25581'-mconsole'
25582     This option specifies that a console application is to be
25583     generated, by instructing the linker to set the PE header subsystem
25584     type required for console applications.  This option is available
25585     for Cygwin and MinGW targets and is enabled by default on those
25586     targets.
25587
25588'-mdll'
25589     This option is available for Cygwin and MinGW targets.  It
25590     specifies that a DLL--a dynamic link library--is to be generated,
25591     enabling the selection of the required runtime startup object and
25592     entry point.
25593
25594'-mnop-fun-dllimport'
25595     This option is available for Cygwin and MinGW targets.  It
25596     specifies that the 'dllimport' attribute should be ignored.
25597
25598'-mthread'
25599     This option is available for MinGW targets.  It specifies that
25600     MinGW-specific thread support is to be used.
25601
25602'-municode'
25603     This option is available for MinGW-w64 targets.  It causes the
25604     'UNICODE' preprocessor macro to be predefined, and chooses
25605     Unicode-capable runtime startup code.
25606
25607'-mwin32'
25608     This option is available for Cygwin and MinGW targets.  It
25609     specifies that the typical Microsoft Windows predefined macros are
25610     to be set in the pre-processor, but does not influence the choice
25611     of runtime library/startup code.
25612
25613'-mwindows'
25614     This option is available for Cygwin and MinGW targets.  It
25615     specifies that a GUI application is to be generated by instructing
25616     the linker to set the PE header subsystem type appropriately.
25617
25618'-fno-set-stack-executable'
25619     This option is available for MinGW targets.  It specifies that the
25620     executable flag for the stack used by nested functions isn't set.
25621     This is necessary for binaries running in kernel mode of Microsoft
25622     Windows, as there the User32 API, which is used to set executable
25623     privileges, isn't available.
25624
25625'-fwritable-relocated-rdata'
25626     This option is available for MinGW and Cygwin targets.  It
25627     specifies that relocated-data in read-only section is put into the
25628     '.data' section.  This is a necessary for older runtimes not
25629     supporting modification of '.rdata' sections for pseudo-relocation.
25630
25631'-mpe-aligned-commons'
25632     This option is available for Cygwin and MinGW targets.  It
25633     specifies that the GNU extension to the PE file format that permits
25634     the correct alignment of COMMON variables should be used when
25635     generating code.  It is enabled by default if GCC detects that the
25636     target assembler found during configuration supports the feature.
25637
25638 See also under *note x86 Options:: for standard options.
25639
25640
25641File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86 Windows Options,  Up: Submodel Options
25642
256433.18.58 Xstormy16 Options
25644-------------------------
25645
25646These options are defined for Xstormy16:
25647
25648'-msim'
25649     Choose startup files and linker script suitable for the simulator.
25650
25651
25652File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
25653
256543.18.59 Xtensa Options
25655----------------------
25656
25657These options are supported for Xtensa targets:
25658
25659'-mconst16'
25660'-mno-const16'
25661     Enable or disable use of 'CONST16' instructions for loading
25662     constant values.  The 'CONST16' instruction is currently not a
25663     standard option from Tensilica.  When enabled, 'CONST16'
25664     instructions are always used in place of the standard 'L32R'
25665     instructions.  The use of 'CONST16' is enabled by default only if
25666     the 'L32R' instruction is not available.
25667
25668'-mfused-madd'
25669'-mno-fused-madd'
25670     Enable or disable use of fused multiply/add and multiply/subtract
25671     instructions in the floating-point option.  This has no effect if
25672     the floating-point option is not also enabled.  Disabling fused
25673     multiply/add and multiply/subtract instructions forces the compiler
25674     to use separate instructions for the multiply and add/subtract
25675     operations.  This may be desirable in some cases where strict IEEE
25676     754-compliant results are required: the fused multiply add/subtract
25677     instructions do not round the intermediate result, thereby
25678     producing results with _more_ bits of precision than specified by
25679     the IEEE standard.  Disabling fused multiply add/subtract
25680     instructions also ensures that the program output is not sensitive
25681     to the compiler's ability to combine multiply and add/subtract
25682     operations.
25683
25684'-mserialize-volatile'
25685'-mno-serialize-volatile'
25686     When this option is enabled, GCC inserts 'MEMW' instructions before
25687     'volatile' memory references to guarantee sequential consistency.
25688     The default is '-mserialize-volatile'.  Use
25689     '-mno-serialize-volatile' to omit the 'MEMW' instructions.
25690
25691'-mforce-no-pic'
25692     For targets, like GNU/Linux, where all user-mode Xtensa code must
25693     be position-independent code (PIC), this option disables PIC for
25694     compiling kernel code.
25695
25696'-mtext-section-literals'
25697'-mno-text-section-literals'
25698     These options control the treatment of literal pools.  The default
25699     is '-mno-text-section-literals', which places literals in a
25700     separate section in the output file.  This allows the literal pool
25701     to be placed in a data RAM/ROM, and it also allows the linker to
25702     combine literal pools from separate object files to remove
25703     redundant literals and improve code size.  With
25704     '-mtext-section-literals', the literals are interspersed in the
25705     text section in order to keep them as close as possible to their
25706     references.  This may be necessary for large assembly files.
25707     Literals for each function are placed right before that function.
25708
25709'-mauto-litpools'
25710'-mno-auto-litpools'
25711     These options control the treatment of literal pools.  The default
25712     is '-mno-auto-litpools', which places literals in a separate
25713     section in the output file unless '-mtext-section-literals' is
25714     used.  With '-mauto-litpools' the literals are interspersed in the
25715     text section by the assembler.  Compiler does not produce explicit
25716     '.literal' directives and loads literals into registers with 'MOVI'
25717     instructions instead of 'L32R' to let the assembler do relaxation
25718     and place literals as necessary.  This option allows assembler to
25719     create several literal pools per function and assemble very big
25720     functions, which may not be possible with
25721     '-mtext-section-literals'.
25722
25723'-mtarget-align'
25724'-mno-target-align'
25725     When this option is enabled, GCC instructs the assembler to
25726     automatically align instructions to reduce branch penalties at the
25727     expense of some code density.  The assembler attempts to widen
25728     density instructions to align branch targets and the instructions
25729     following call instructions.  If there are not enough preceding
25730     safe density instructions to align a target, no widening is
25731     performed.  The default is '-mtarget-align'.  These options do not
25732     affect the treatment of auto-aligned instructions like 'LOOP',
25733     which the assembler always aligns, either by widening density
25734     instructions or by inserting NOP instructions.
25735
25736'-mlongcalls'
25737'-mno-longcalls'
25738     When this option is enabled, GCC instructs the assembler to
25739     translate direct calls to indirect calls unless it can determine
25740     that the target of a direct call is in the range allowed by the
25741     call instruction.  This translation typically occurs for calls to
25742     functions in other source files.  Specifically, the assembler
25743     translates a direct 'CALL' instruction into an 'L32R' followed by a
25744     'CALLX' instruction.  The default is '-mno-longcalls'.  This option
25745     should be used in programs where the call target can potentially be
25746     out of range.  This option is implemented in the assembler, not the
25747     compiler, so the assembly code generated by GCC still shows direct
25748     call instructions--look at the disassembled object code to see the
25749     actual instructions.  Note that the assembler uses an indirect call
25750     for every cross-file call, not just those that really are out of
25751     range.
25752
25753
25754File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
25755
257563.18.60 zSeries Options
25757-----------------------
25758
25759These are listed under *Note S/390 and zSeries Options::.
25760
25761
25762File: gcc.info,  Node: Spec Files,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
25763
257643.19 Specifying Subprocesses and the Switches to Pass to Them
25765=============================================================
25766
25767'gcc' is a driver program.  It performs its job by invoking a sequence
25768of other programs to do the work of compiling, assembling and linking.
25769GCC interprets its command-line parameters and uses these to deduce
25770which programs it should invoke, and which command-line options it ought
25771to place on their command lines.  This behavior is controlled by "spec
25772strings".  In most cases there is one spec string for each program that
25773GCC can invoke, but a few programs have multiple spec strings to control
25774their behavior.  The spec strings built into GCC can be overridden by
25775using the '-specs=' command-line switch to specify a spec file.
25776
25777 "Spec files" are plain-text files that are used to construct spec
25778strings.  They consist of a sequence of directives separated by blank
25779lines.  The type of directive is determined by the first non-whitespace
25780character on the line, which can be one of the following:
25781
25782'%COMMAND'
25783     Issues a COMMAND to the spec file processor.  The commands that can
25784     appear here are:
25785
25786     '%include <FILE>'
25787          Search for FILE and insert its text at the current point in
25788          the specs file.
25789
25790     '%include_noerr <FILE>'
25791          Just like '%include', but do not generate an error message if
25792          the include file cannot be found.
25793
25794     '%rename OLD_NAME NEW_NAME'
25795          Rename the spec string OLD_NAME to NEW_NAME.
25796
25797'*[SPEC_NAME]:'
25798     This tells the compiler to create, override or delete the named
25799     spec string.  All lines after this directive up to the next
25800     directive or blank line are considered to be the text for the spec
25801     string.  If this results in an empty string then the spec is
25802     deleted.  (Or, if the spec did not exist, then nothing happens.)
25803     Otherwise, if the spec does not currently exist a new spec is
25804     created.  If the spec does exist then its contents are overridden
25805     by the text of this directive, unless the first character of that
25806     text is the '+' character, in which case the text is appended to
25807     the spec.
25808
25809'[SUFFIX]:'
25810     Creates a new '[SUFFIX] spec' pair.  All lines after this directive
25811     and up to the next directive or blank line are considered to make
25812     up the spec string for the indicated suffix.  When the compiler
25813     encounters an input file with the named suffix, it processes the
25814     spec string in order to work out how to compile that file.  For
25815     example:
25816
25817          .ZZ:
25818          z-compile -input %i
25819
25820     This says that any input file whose name ends in '.ZZ' should be
25821     passed to the program 'z-compile', which should be invoked with the
25822     command-line switch '-input' and with the result of performing the
25823     '%i' substitution.  (See below.)
25824
25825     As an alternative to providing a spec string, the text following a
25826     suffix directive can be one of the following:
25827
25828     '@LANGUAGE'
25829          This says that the suffix is an alias for a known LANGUAGE.
25830          This is similar to using the '-x' command-line switch to GCC
25831          to specify a language explicitly.  For example:
25832
25833               .ZZ:
25834               @c++
25835
25836          Says that .ZZ files are, in fact, C++ source files.
25837
25838     '#NAME'
25839          This causes an error messages saying:
25840
25841               NAME compiler not installed on this system.
25842
25843     GCC already has an extensive list of suffixes built into it.  This
25844     directive adds an entry to the end of the list of suffixes, but
25845     since the list is searched from the end backwards, it is
25846     effectively possible to override earlier entries using this
25847     technique.
25848
25849 GCC has the following spec strings built into it.  Spec files can
25850override these strings or create their own.  Note that individual
25851targets can also add their own spec strings to this list.
25852
25853     asm          Options to pass to the assembler
25854     asm_final    Options to pass to the assembler post-processor
25855     cpp          Options to pass to the C preprocessor
25856     cc1          Options to pass to the C compiler
25857     cc1plus      Options to pass to the C++ compiler
25858     endfile      Object files to include at the end of the link
25859     link         Options to pass to the linker
25860     lib          Libraries to include on the command line to the linker
25861     libgcc       Decides which GCC support library to pass to the linker
25862     linker       Sets the name of the linker
25863     predefines   Defines to be passed to the C preprocessor
25864     signed_char  Defines to pass to CPP to say whether char is signed
25865                  by default
25866     startfile    Object files to include at the start of the link
25867
25868 Here is a small example of a spec file:
25869
25870     %rename lib                 old_lib
25871
25872     *lib:
25873     --start-group -lgcc -lc -leval1 --end-group %(old_lib)
25874
25875 This example renames the spec called 'lib' to 'old_lib' and then
25876overrides the previous definition of 'lib' with a new one.  The new
25877definition adds in some extra command-line options before including the
25878text of the old definition.
25879
25880 "Spec strings" are a list of command-line options to be passed to their
25881corresponding program.  In addition, the spec strings can contain
25882'%'-prefixed sequences to substitute variable text or to conditionally
25883insert text into the command line.  Using these constructs it is
25884possible to generate quite complex command lines.
25885
25886 Here is a table of all defined '%'-sequences for spec strings.  Note
25887that spaces are not generated automatically around the results of
25888expanding these sequences.  Therefore you can concatenate them together
25889or combine them with constant text in a single argument.
25890
25891'%%'
25892     Substitute one '%' into the program name or argument.
25893
25894'%i'
25895     Substitute the name of the input file being processed.
25896
25897'%b'
25898     Substitute the basename of the input file being processed.  This is
25899     the substring up to (and not including) the last period and not
25900     including the directory.
25901
25902'%B'
25903     This is the same as '%b', but include the file suffix (text after
25904     the last period).
25905
25906'%d'
25907     Marks the argument containing or following the '%d' as a temporary
25908     file name, so that that file is deleted if GCC exits successfully.
25909     Unlike '%g', this contributes no text to the argument.
25910
25911'%gSUFFIX'
25912     Substitute a file name that has suffix SUFFIX and is chosen once
25913     per compilation, and mark the argument in the same way as '%d'.  To
25914     reduce exposure to denial-of-service attacks, the file name is now
25915     chosen in a way that is hard to predict even when previously chosen
25916     file names are known.  For example, '%g.s ... %g.o ... %g.s' might
25917     turn into 'ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX matches the
25918     regexp '[.A-Za-z]*' or the special string '%O', which is treated
25919     exactly as if '%O' had been preprocessed.  Previously, '%g' was
25920     simply substituted with a file name chosen once per compilation,
25921     without regard to any appended suffix (which was therefore treated
25922     just like ordinary text), making such attacks more likely to
25923     succeed.
25924
25925'%uSUFFIX'
25926     Like '%g', but generates a new temporary file name each time it
25927     appears instead of once per compilation.
25928
25929'%USUFFIX'
25930     Substitutes the last file name generated with '%uSUFFIX',
25931     generating a new one if there is no such last file name.  In the
25932     absence of any '%uSUFFIX', this is just like '%gSUFFIX', except
25933     they don't share the same suffix _space_, so '%g.s ... %U.s ...
25934     %g.s ... %U.s' involves the generation of two distinct file names,
25935     one for each '%g.s' and another for each '%U.s'.  Previously, '%U'
25936     was simply substituted with a file name chosen for the previous
25937     '%u', without regard to any appended suffix.
25938
25939'%jSUFFIX'
25940     Substitutes the name of the 'HOST_BIT_BUCKET', if any, and if it is
25941     writable, and if '-save-temps' is not used; otherwise, substitute
25942     the name of a temporary file, just like '%u'.  This temporary file
25943     is not meant for communication between processes, but rather as a
25944     junk disposal mechanism.
25945
25946'%|SUFFIX'
25947'%mSUFFIX'
25948     Like '%g', except if '-pipe' is in effect.  In that case '%|'
25949     substitutes a single dash and '%m' substitutes nothing at all.
25950     These are the two most common ways to instruct a program that it
25951     should read from standard input or write to standard output.  If
25952     you need something more elaborate you can use an '%{pipe:'X'}'
25953     construct: see for example 'f/lang-specs.h'.
25954
25955'%.SUFFIX'
25956     Substitutes .SUFFIX for the suffixes of a matched switch's args
25957     when it is subsequently output with '%*'.  SUFFIX is terminated by
25958     the next space or %.
25959
25960'%w'
25961     Marks the argument containing or following the '%w' as the
25962     designated output file of this compilation.  This puts the argument
25963     into the sequence of arguments that '%o' substitutes.
25964
25965'%o'
25966     Substitutes the names of all the output files, with spaces
25967     automatically placed around them.  You should write spaces around
25968     the '%o' as well or the results are undefined.  '%o' is for use in
25969     the specs for running the linker.  Input files whose names have no
25970     recognized suffix are not compiled at all, but they are included
25971     among the output files, so they are linked.
25972
25973'%O'
25974     Substitutes the suffix for object files.  Note that this is handled
25975     specially when it immediately follows '%g, %u, or %U', because of
25976     the need for those to form complete file names.  The handling is
25977     such that '%O' is treated exactly as if it had already been
25978     substituted, except that '%g, %u, and %U' do not currently support
25979     additional SUFFIX characters following '%O' as they do following,
25980     for example, '.o'.
25981
25982'%p'
25983     Substitutes the standard macro predefinitions for the current
25984     target machine.  Use this when running 'cpp'.
25985
25986'%P'
25987     Like '%p', but puts '__' before and after the name of each
25988     predefined macro, except for macros that start with '__' or with
25989     '_L', where L is an uppercase letter.  This is for ISO C.
25990
25991'%I'
25992     Substitute any of '-iprefix' (made from 'GCC_EXEC_PREFIX'),
25993     '-isysroot' (made from 'TARGET_SYSTEM_ROOT'), '-isystem' (made from
25994     'COMPILER_PATH' and '-B' options) and '-imultilib' as necessary.
25995
25996'%s'
25997     Current argument is the name of a library or startup file of some
25998     sort.  Search for that file in a standard list of directories and
25999     substitute the full name found.  The current working directory is
26000     included in the list of directories scanned.
26001
26002'%T'
26003     Current argument is the name of a linker script.  Search for that
26004     file in the current list of directories to scan for libraries.  If
26005     the file is located insert a '--script' option into the command
26006     line followed by the full path name found.  If the file is not
26007     found then generate an error message.  Note: the current working
26008     directory is not searched.
26009
26010'%eSTR'
26011     Print STR as an error message.  STR is terminated by a newline.
26012     Use this when inconsistent options are detected.
26013
26014'%(NAME)'
26015     Substitute the contents of spec string NAME at this point.
26016
26017'%x{OPTION}'
26018     Accumulate an option for '%X'.
26019
26020'%X'
26021     Output the accumulated linker options specified by '-Wl' or a '%x'
26022     spec string.
26023
26024'%Y'
26025     Output the accumulated assembler options specified by '-Wa'.
26026
26027'%Z'
26028     Output the accumulated preprocessor options specified by '-Wp'.
26029
26030'%a'
26031     Process the 'asm' spec.  This is used to compute the switches to be
26032     passed to the assembler.
26033
26034'%A'
26035     Process the 'asm_final' spec.  This is a spec string for passing
26036     switches to an assembler post-processor, if such a program is
26037     needed.
26038
26039'%l'
26040     Process the 'link' spec.  This is the spec for computing the
26041     command line passed to the linker.  Typically it makes use of the
26042     '%L %G %S %D and %E' sequences.
26043
26044'%D'
26045     Dump out a '-L' option for each directory that GCC believes might
26046     contain startup files.  If the target supports multilibs then the
26047     current multilib directory is prepended to each of these paths.
26048
26049'%L'
26050     Process the 'lib' spec.  This is a spec string for deciding which
26051     libraries are included on the command line to the linker.
26052
26053'%G'
26054     Process the 'libgcc' spec.  This is a spec string for deciding
26055     which GCC support library is included on the command line to the
26056     linker.
26057
26058'%S'
26059     Process the 'startfile' spec.  This is a spec for deciding which
26060     object files are the first ones passed to the linker.  Typically
26061     this might be a file named 'crt0.o'.
26062
26063'%E'
26064     Process the 'endfile' spec.  This is a spec string that specifies
26065     the last object files that are passed to the linker.
26066
26067'%C'
26068     Process the 'cpp' spec.  This is used to construct the arguments to
26069     be passed to the C preprocessor.
26070
26071'%1'
26072     Process the 'cc1' spec.  This is used to construct the options to
26073     be passed to the actual C compiler ('cc1').
26074
26075'%2'
26076     Process the 'cc1plus' spec.  This is used to construct the options
26077     to be passed to the actual C++ compiler ('cc1plus').
26078
26079'%*'
26080     Substitute the variable part of a matched option.  See below.  Note
26081     that each comma in the substituted string is replaced by a single
26082     space.
26083
26084'%<S'
26085     Remove all occurrences of '-S' from the command line.  Note--this
26086     command is position dependent.  '%' commands in the spec string
26087     before this one see '-S', '%' commands in the spec string after
26088     this one do not.
26089
26090'%:FUNCTION(ARGS)'
26091     Call the named function FUNCTION, passing it ARGS.  ARGS is first
26092     processed as a nested spec string, then split into an argument
26093     vector in the usual fashion.  The function returns a string which
26094     is processed as if it had appeared literally as part of the current
26095     spec.
26096
26097     The following built-in spec functions are provided:
26098
26099     'getenv'
26100          The 'getenv' spec function takes two arguments: an environment
26101          variable name and a string.  If the environment variable is
26102          not defined, a fatal error is issued.  Otherwise, the return
26103          value is the value of the environment variable concatenated
26104          with the string.  For example, if 'TOPDIR' is defined as
26105          '/path/to/top', then:
26106
26107               %:getenv(TOPDIR /include)
26108
26109          expands to '/path/to/top/include'.
26110
26111     'if-exists'
26112          The 'if-exists' spec function takes one argument, an absolute
26113          pathname to a file.  If the file exists, 'if-exists' returns
26114          the pathname.  Here is a small example of its usage:
26115
26116               *startfile:
26117               crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
26118
26119     'if-exists-else'
26120          The 'if-exists-else' spec function is similar to the
26121          'if-exists' spec function, except that it takes two arguments.
26122          The first argument is an absolute pathname to a file.  If the
26123          file exists, 'if-exists-else' returns the pathname.  If it
26124          does not exist, it returns the second argument.  This way,
26125          'if-exists-else' can be used to select one file or another,
26126          based on the existence of the first.  Here is a small example
26127          of its usage:
26128
26129               *startfile:
26130               crt0%O%s %:if-exists(crti%O%s) \
26131               %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
26132
26133     'replace-outfile'
26134          The 'replace-outfile' spec function takes two arguments.  It
26135          looks for the first argument in the outfiles array and
26136          replaces it with the second argument.  Here is a small example
26137          of its usage:
26138
26139               %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
26140
26141     'remove-outfile'
26142          The 'remove-outfile' spec function takes one argument.  It
26143          looks for the first argument in the outfiles array and removes
26144          it.  Here is a small example its usage:
26145
26146               %:remove-outfile(-lm)
26147
26148     'pass-through-libs'
26149          The 'pass-through-libs' spec function takes any number of
26150          arguments.  It finds any '-l' options and any non-options
26151          ending in '.a' (which it assumes are the names of linker input
26152          library archive files) and returns a result containing all the
26153          found arguments each prepended by '-plugin-opt=-pass-through='
26154          and joined by spaces.  This list is intended to be passed to
26155          the LTO linker plugin.
26156
26157               %:pass-through-libs(%G %L %G)
26158
26159     'print-asm-header'
26160          The 'print-asm-header' function takes no arguments and simply
26161          prints a banner like:
26162
26163               Assembler options
26164               =================
26165
26166               Use "-Wa,OPTION" to pass "OPTION" to the assembler.
26167
26168          It is used to separate compiler options from assembler options
26169          in the '--target-help' output.
26170
26171'%{S}'
26172     Substitutes the '-S' switch, if that switch is given to GCC.  If
26173     that switch is not specified, this substitutes nothing.  Note that
26174     the leading dash is omitted when specifying this option, and it is
26175     automatically inserted if the substitution is performed.  Thus the
26176     spec string '%{foo}' matches the command-line option '-foo' and
26177     outputs the command-line option '-foo'.
26178
26179'%W{S}'
26180     Like %{'S'} but mark last argument supplied within as a file to be
26181     deleted on failure.
26182
26183'%{S*}'
26184     Substitutes all the switches specified to GCC whose names start
26185     with '-S', but which also take an argument.  This is used for
26186     switches like '-o', '-D', '-I', etc.  GCC considers '-o foo' as
26187     being one switch whose name starts with 'o'.  %{o*} substitutes
26188     this text, including the space.  Thus two arguments are generated.
26189
26190'%{S*&T*}'
26191     Like %{'S'*}, but preserve order of 'S' and 'T' options (the order
26192     of 'S' and 'T' in the spec is not significant).  There can be any
26193     number of ampersand-separated variables; for each the wild card is
26194     optional.  Useful for CPP as '%{D*&U*&A*}'.
26195
26196'%{S:X}'
26197     Substitutes 'X', if the '-S' switch is given to GCC.
26198
26199'%{!S:X}'
26200     Substitutes 'X', if the '-S' switch is _not_ given to GCC.
26201
26202'%{S*:X}'
26203     Substitutes 'X' if one or more switches whose names start with '-S'
26204     are specified to GCC.  Normally 'X' is substituted only once, no
26205     matter how many such switches appeared.  However, if '%*' appears
26206     somewhere in 'X', then 'X' is substituted once for each matching
26207     switch, with the '%*' replaced by the part of that switch matching
26208     the '*'.
26209
26210     If '%*' appears as the last part of a spec sequence then a space is
26211     added after the end of the last substitution.  If there is more
26212     text in the sequence, however, then a space is not generated.  This
26213     allows the '%*' substitution to be used as part of a larger string.
26214     For example, a spec string like this:
26215
26216          %{mcu=*:--script=%*/memory.ld}
26217
26218     when matching an option like '-mcu=newchip' produces:
26219
26220          --script=newchip/memory.ld
26221
26222'%{.S:X}'
26223     Substitutes 'X', if processing a file with suffix 'S'.
26224
26225'%{!.S:X}'
26226     Substitutes 'X', if _not_ processing a file with suffix 'S'.
26227
26228'%{,S:X}'
26229     Substitutes 'X', if processing a file for language 'S'.
26230
26231'%{!,S:X}'
26232     Substitutes 'X', if not processing a file for language 'S'.
26233
26234'%{S|P:X}'
26235     Substitutes 'X' if either '-S' or '-P' is given to GCC.  This may
26236     be combined with '!', '.', ',', and '*' sequences as well, although
26237     they have a stronger binding than the '|'.  If '%*' appears in 'X',
26238     all of the alternatives must be starred, and only the first
26239     matching alternative is substituted.
26240
26241     For example, a spec string like this:
26242
26243          %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
26244
26245     outputs the following command-line options from the following input
26246     command-line options:
26247
26248          fred.c        -foo -baz
26249          jim.d         -bar -boggle
26250          -d fred.c     -foo -baz -boggle
26251          -d jim.d      -bar -baz -boggle
26252
26253'%{S:X; T:Y; :D}'
26254
26255     If 'S' is given to GCC, substitutes 'X'; else if 'T' is given to
26256     GCC, substitutes 'Y'; else substitutes 'D'.  There can be as many
26257     clauses as you need.  This may be combined with '.', ',', '!', '|',
26258     and '*' as needed.
26259
26260 The switch matching text 'S' in a '%{S}', '%{S:X}' or similar construct
26261can use a backslash to ignore the special meaning of the character
26262following it, thus allowing literal matching of a character that is
26263otherwise specially treated.  For example, '%{std=iso9899\:1999:X}'
26264substitutes 'X' if the '-std=iso9899:1999' option is given.
26265
26266 The conditional text 'X' in a '%{S:X}' or similar construct may contain
26267other nested '%' constructs or spaces, or even newlines.  They are
26268processed as usual, as described above.  Trailing white space in 'X' is
26269ignored.  White space may also appear anywhere on the left side of the
26270colon in these constructs, except between '.' or '*' and the
26271corresponding word.
26272
26273 The '-O', '-f', '-m', and '-W' switches are handled specifically in
26274these constructs.  If another value of '-O' or the negated form of a
26275'-f', '-m', or '-W' switch is found later in the command line, the
26276earlier switch value is ignored, except with {'S'*} where 'S' is just
26277one letter, which passes all matching options.
26278
26279 The character '|' at the beginning of the predicate text is used to
26280indicate that a command should be piped to the following command, but
26281only if '-pipe' is specified.
26282
26283 It is built into GCC which switches take arguments and which do not.
26284(You might think it would be useful to generalize this to allow each
26285compiler's spec to say which switches take arguments.  But this cannot
26286be done in a consistent fashion.  GCC cannot even decide which input
26287files have been specified without knowing which switches take arguments,
26288and it must know which input files to compile in order to tell which
26289compilers to run).
26290
26291 GCC also knows implicitly that arguments starting in '-l' are to be
26292treated as compiler output files, and passed to the linker in their
26293proper position among the other output files.
26294
26295
26296File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Spec Files,  Up: Invoking GCC
26297
262983.20 Environment Variables Affecting GCC
26299========================================
26300
26301This section describes several environment variables that affect how GCC
26302operates.  Some of them work by specifying directories or prefixes to
26303use when searching for various kinds of files.  Some are used to specify
26304other aspects of the compilation environment.
26305
26306 Note that you can also specify places to search using options such as
26307'-B', '-I' and '-L' (*note Directory Options::).  These take precedence
26308over places specified using environment variables, which in turn take
26309precedence over those specified by the configuration of GCC.  *Note
26310Controlling the Compilation Driver 'gcc': (gccint)Driver.
26311
26312'LANG'
26313'LC_CTYPE'
26314'LC_MESSAGES'
26315'LC_ALL'
26316     These environment variables control the way that GCC uses
26317     localization information which allows GCC to work with different
26318     national conventions.  GCC inspects the locale categories
26319     'LC_CTYPE' and 'LC_MESSAGES' if it has been configured to do so.
26320     These locale categories can be set to any value supported by your
26321     installation.  A typical value is 'en_GB.UTF-8' for English in the
26322     United Kingdom encoded in UTF-8.
26323
26324     The 'LC_CTYPE' environment variable specifies character
26325     classification.  GCC uses it to determine the character boundaries
26326     in a string; this is needed for some multibyte encodings that
26327     contain quote and escape characters that are otherwise interpreted
26328     as a string end or escape.
26329
26330     The 'LC_MESSAGES' environment variable specifies the language to
26331     use in diagnostic messages.
26332
26333     If the 'LC_ALL' environment variable is set, it overrides the value
26334     of 'LC_CTYPE' and 'LC_MESSAGES'; otherwise, 'LC_CTYPE' and
26335     'LC_MESSAGES' default to the value of the 'LANG' environment
26336     variable.  If none of these variables are set, GCC defaults to
26337     traditional C English behavior.
26338
26339'TMPDIR'
26340     If 'TMPDIR' is set, it specifies the directory to use for temporary
26341     files.  GCC uses temporary files to hold the output of one stage of
26342     compilation which is to be used as input to the next stage: for
26343     example, the output of the preprocessor, which is the input to the
26344     compiler proper.
26345
26346'GCC_COMPARE_DEBUG'
26347     Setting 'GCC_COMPARE_DEBUG' is nearly equivalent to passing
26348     '-fcompare-debug' to the compiler driver.  See the documentation of
26349     this option for more details.
26350
26351'GCC_EXEC_PREFIX'
26352     If 'GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
26353     names of the subprograms executed by the compiler.  No slash is
26354     added when this prefix is combined with the name of a subprogram,
26355     but you can specify a prefix that ends with a slash if you wish.
26356
26357     If 'GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an
26358     appropriate prefix to use based on the pathname it is invoked with.
26359
26360     If GCC cannot find the subprogram using the specified prefix, it
26361     tries looking in the usual places for the subprogram.
26362
26363     The default value of 'GCC_EXEC_PREFIX' is 'PREFIX/lib/gcc/' where
26364     PREFIX is the prefix to the installed compiler.  In many cases
26365     PREFIX is the value of 'prefix' when you ran the 'configure'
26366     script.
26367
26368     Other prefixes specified with '-B' take precedence over this
26369     prefix.
26370
26371     This prefix is also used for finding files such as 'crt0.o' that
26372     are used for linking.
26373
26374     In addition, the prefix is used in an unusual way in finding the
26375     directories to search for header files.  For each of the standard
26376     directories whose name normally begins with '/usr/local/lib/gcc'
26377     (more precisely, with the value of 'GCC_INCLUDE_DIR'), GCC tries
26378     replacing that beginning with the specified prefix to produce an
26379     alternate directory name.  Thus, with '-Bfoo/', GCC searches
26380     'foo/bar' just before it searches the standard directory
26381     '/usr/local/lib/bar'.  If a standard directory begins with the
26382     configured PREFIX then the value of PREFIX is replaced by
26383     'GCC_EXEC_PREFIX' when looking for header files.
26384
26385'COMPILER_PATH'
26386     The value of 'COMPILER_PATH' is a colon-separated list of
26387     directories, much like 'PATH'.  GCC tries the directories thus
26388     specified when searching for subprograms, if it cannot find the
26389     subprograms using 'GCC_EXEC_PREFIX'.
26390
26391'LIBRARY_PATH'
26392     The value of 'LIBRARY_PATH' is a colon-separated list of
26393     directories, much like 'PATH'.  When configured as a native
26394     compiler, GCC tries the directories thus specified when searching
26395     for special linker files, if it cannot find them using
26396     'GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
26397     when searching for ordinary libraries for the '-l' option (but
26398     directories specified with '-L' come first).
26399
26400'LANG'
26401     This variable is used to pass locale information to the compiler.
26402     One way in which this information is used is to determine the
26403     character set to be used when character literals, string literals
26404     and comments are parsed in C and C++.  When the compiler is
26405     configured to allow multibyte characters, the following values for
26406     'LANG' are recognized:
26407
26408     'C-JIS'
26409          Recognize JIS characters.
26410     'C-SJIS'
26411          Recognize SJIS characters.
26412     'C-EUCJP'
26413          Recognize EUCJP characters.
26414
26415     If 'LANG' is not defined, or if it has some other value, then the
26416     compiler uses 'mblen' and 'mbtowc' as defined by the default locale
26417     to recognize and translate multibyte characters.
26418
26419Some additional environment variables affect the behavior of the
26420preprocessor.
26421
26422'CPATH'
26423'C_INCLUDE_PATH'
26424'CPLUS_INCLUDE_PATH'
26425'OBJC_INCLUDE_PATH'
26426     Each variable's value is a list of directories separated by a
26427     special character, much like 'PATH', in which to look for header
26428     files.  The special character, 'PATH_SEPARATOR', is
26429     target-dependent and determined at GCC build time.  For Microsoft
26430     Windows-based targets it is a semicolon, and for almost all other
26431     targets it is a colon.
26432
26433     'CPATH' specifies a list of directories to be searched as if
26434     specified with '-I', but after any paths given with '-I' options on
26435     the command line.  This environment variable is used regardless of
26436     which language is being preprocessed.
26437
26438     The remaining environment variables apply only when preprocessing
26439     the particular language indicated.  Each specifies a list of
26440     directories to be searched as if specified with '-isystem', but
26441     after any paths given with '-isystem' options on the command line.
26442
26443     In all these variables, an empty element instructs the compiler to
26444     search its current working directory.  Empty elements can appear at
26445     the beginning or end of a path.  For instance, if the value of
26446     'CPATH' is ':/special/include', that has the same effect as
26447     '-I. -I/special/include'.
26448
26449'DEPENDENCIES_OUTPUT'
26450     If this variable is set, its value specifies how to output
26451     dependencies for Make based on the non-system header files
26452     processed by the compiler.  System header files are ignored in the
26453     dependency output.
26454
26455     The value of 'DEPENDENCIES_OUTPUT' can be just a file name, in
26456     which case the Make rules are written to that file, guessing the
26457     target name from the source file name.  Or the value can have the
26458     form 'FILE TARGET', in which case the rules are written to file
26459     FILE using TARGET as the target name.
26460
26461     In other words, this environment variable is equivalent to
26462     combining the options '-MM' and '-MF' (*note Preprocessor
26463     Options::), with an optional '-MT' switch too.
26464
26465'SUNPRO_DEPENDENCIES'
26466     This variable is the same as 'DEPENDENCIES_OUTPUT' (see above),
26467     except that system header files are not ignored, so it implies '-M'
26468     rather than '-MM'.  However, the dependence on the main input file
26469     is omitted.  *Note Preprocessor Options::.
26470
26471'SOURCE_DATE_EPOCH'
26472     If this variable is set, its value specifies a UNIX timestamp to be
26473     used in replacement of the current date and time in the '__DATE__'
26474     and '__TIME__' macros, so that the embedded timestamps become
26475     reproducible.
26476
26477     The value of 'SOURCE_DATE_EPOCH' must be a UNIX timestamp, defined
26478     as the number of seconds (excluding leap seconds) since 01 Jan 1970
26479     00:00:00 represented in ASCII; identical to the output of ''date
26480     +%s'' on GNU/Linux and other systems that support the '%s'
26481     extension in the 'date' command.
26482
26483     The value should be a known timestamp such as the last modification
26484     time of the source or package and it should be set by the build
26485     process.
26486
26487
26488File: gcc.info,  Node: Precompiled Headers,  Prev: Environment Variables,  Up: Invoking GCC
26489
264903.21 Using Precompiled Headers
26491==============================
26492
26493Often large projects have many header files that are included in every
26494source file.  The time the compiler takes to process these header files
26495over and over again can account for nearly all of the time required to
26496build the project.  To make builds faster, GCC allows you to
26497"precompile" a header file.
26498
26499 To create a precompiled header file, simply compile it as you would any
26500other file, if necessary using the '-x' option to make the driver treat
26501it as a C or C++ header file.  You may want to use a tool like 'make' to
26502keep the precompiled header up-to-date when the headers it contains
26503change.
26504
26505 A precompiled header file is searched for when '#include' is seen in
26506the compilation.  As it searches for the included file (*note Search
26507Path: (cpp)Search Path.) the compiler looks for a precompiled header in
26508each directory just before it looks for the include file in that
26509directory.  The name searched for is the name specified in the
26510'#include' with '.gch' appended.  If the precompiled header file cannot
26511be used, it is ignored.
26512
26513 For instance, if you have '#include "all.h"', and you have 'all.h.gch'
26514in the same directory as 'all.h', then the precompiled header file is
26515used if possible, and the original header is used otherwise.
26516
26517 Alternatively, you might decide to put the precompiled header file in a
26518directory and use '-I' to ensure that directory is searched before (or
26519instead of) the directory containing the original header.  Then, if you
26520want to check that the precompiled header file is always used, you can
26521put a file of the same name as the original header in this directory
26522containing an '#error' command.
26523
26524 This also works with '-include'.  So yet another way to use precompiled
26525headers, good for projects not designed with precompiled header files in
26526mind, is to simply take most of the header files used by a project,
26527include them from another header file, precompile that header file, and
26528'-include' the precompiled header.  If the header files have guards
26529against multiple inclusion, they are skipped because they've already
26530been included (in the precompiled header).
26531
26532 If you need to precompile the same header file for different languages,
26533targets, or compiler options, you can instead make a _directory_ named
26534like 'all.h.gch', and put each precompiled header in the directory,
26535perhaps using '-o'.  It doesn't matter what you call the files in the
26536directory; every precompiled header in the directory is considered.  The
26537first precompiled header encountered in the directory that is valid for
26538this compilation is used; they're searched in no particular order.
26539
26540 There are many other possibilities, limited only by your imagination,
26541good sense, and the constraints of your build system.
26542
26543 A precompiled header file can be used only when these conditions apply:
26544
26545   * Only one precompiled header can be used in a particular
26546     compilation.
26547
26548   * A precompiled header cannot be used once the first C token is seen.
26549     You can have preprocessor directives before a precompiled header;
26550     you cannot include a precompiled header from inside another header.
26551
26552   * The precompiled header file must be produced for the same language
26553     as the current compilation.  You cannot use a C precompiled header
26554     for a C++ compilation.
26555
26556   * The precompiled header file must have been produced by the same
26557     compiler binary as the current compilation is using.
26558
26559   * Any macros defined before the precompiled header is included must
26560     either be defined in the same way as when the precompiled header
26561     was generated, or must not affect the precompiled header, which
26562     usually means that they don't appear in the precompiled header at
26563     all.
26564
26565     The '-D' option is one way to define a macro before a precompiled
26566     header is included; using a '#define' can also do it.  There are
26567     also some options that define macros implicitly, like '-O' and
26568     '-Wdeprecated'; the same rule applies to macros defined this way.
26569
26570   * If debugging information is output when using the precompiled
26571     header, using '-g' or similar, the same kind of debugging
26572     information must have been output when building the precompiled
26573     header.  However, a precompiled header built using '-g' can be used
26574     in a compilation when no debugging information is being output.
26575
26576   * The same '-m' options must generally be used when building and
26577     using the precompiled header.  *Note Submodel Options::, for any
26578     cases where this rule is relaxed.
26579
26580   * Each of the following options must be the same when building and
26581     using the precompiled header:
26582
26583          -fexceptions
26584
26585   * Some other command-line options starting with '-f', '-p', or '-O'
26586     must be defined in the same way as when the precompiled header was
26587     generated.  At present, it's not clear which options are safe to
26588     change and which are not; the safest choice is to use exactly the
26589     same options when generating and using the precompiled header.  The
26590     following are known to be safe:
26591
26592          -fmessage-length=  -fpreprocessed  -fsched-interblock
26593          -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
26594          -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
26595          -pedantic-errors
26596
26597 For all of these except the last, the compiler automatically ignores
26598the precompiled header if the conditions aren't met.  If you find an
26599option combination that doesn't work and doesn't cause the precompiled
26600header to be ignored, please consider filing a bug report, see *note
26601Bugs::.
26602
26603 If you do use differing options when generating and using the
26604precompiled header, the actual behavior is a mixture of the behavior for
26605the options.  For instance, if you use '-g' to generate the precompiled
26606header but not when using it, you may or may not get debugging
26607information for routines in the precompiled header.
26608
26609
26610File: gcc.info,  Node: C Implementation,  Next: C++ Implementation,  Prev: Invoking GCC,  Up: Top
26611
266124 C Implementation-Defined Behavior
26613***********************************
26614
26615A conforming implementation of ISO C is required to document its choice
26616of behavior in each of the areas that are designated "implementation
26617defined".  The following lists all such areas, along with the section
26618numbers from the ISO/IEC 9899:1990, ISO/IEC 9899:1999 and ISO/IEC
266199899:2011 standards.  Some areas are only implementation-defined in one
26620version of the standard.
26621
26622 Some choices depend on the externally determined ABI for the platform
26623(including standard character encodings) which GCC follows; these are
26624listed as "determined by ABI" below.  *Note Binary Compatibility:
26625Compatibility, and <http://gcc.gnu.org/readings.html>.  Some choices are
26626documented in the preprocessor manual.  *Note Implementation-defined
26627behavior: (cpp)Implementation-defined behavior.  Some choices are made
26628by the library and operating system (or other environment when compiling
26629for a freestanding environment); refer to their documentation for
26630details.
26631
26632* Menu:
26633
26634* Translation implementation::
26635* Environment implementation::
26636* Identifiers implementation::
26637* Characters implementation::
26638* Integers implementation::
26639* Floating point implementation::
26640* Arrays and pointers implementation::
26641* Hints implementation::
26642* Structures unions enumerations and bit-fields implementation::
26643* Qualifiers implementation::
26644* Declarators implementation::
26645* Statements implementation::
26646* Preprocessing directives implementation::
26647* Library functions implementation::
26648* Architecture implementation::
26649* Locale-specific behavior implementation::
26650
26651
26652File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
26653
266544.1 Translation
26655===============
26656
26657   * 'How a diagnostic is identified (C90 3.7, C99 and C11 3.10, C90,
26658     C99 and C11 5.1.1.3).'
26659
26660     Diagnostics consist of all the output sent to stderr by GCC.
26661
26662   * 'Whether each nonempty sequence of white-space characters other
26663     than new-line is retained or replaced by one space character in
26664     translation phase 3 (C90, C99 and C11 5.1.1.2).'
26665
26666     *Note Implementation-defined behavior: (cpp)Implementation-defined
26667     behavior.
26668
26669
26670File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
26671
266724.2 Environment
26673===============
26674
26675The behavior of most of these points are dependent on the implementation
26676of the C library, and are not defined by GCC itself.
26677
26678   * 'The mapping between physical source file multibyte characters and
26679     the source character set in translation phase 1 (C90, C99 and C11
26680     5.1.1.2).'
26681
26682     *Note Implementation-defined behavior: (cpp)Implementation-defined
26683     behavior.
26684
26685
26686File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
26687
266884.3 Identifiers
26689===============
26690
26691   * 'Which additional multibyte characters may appear in identifiers
26692     and their correspondence to universal character names (C99 and C11
26693     6.4.2).'
26694
26695     *Note Implementation-defined behavior: (cpp)Implementation-defined
26696     behavior.
26697
26698   * 'The number of significant initial characters in an identifier (C90
26699     6.1.2, C90, C99 and C11 5.2.4.1, C99 and C11 6.4.2).'
26700
26701     For internal names, all characters are significant.  For external
26702     names, the number of significant characters are defined by the
26703     linker; for almost all targets, all characters are significant.
26704
26705   * 'Whether case distinctions are significant in an identifier with
26706     external linkage (C90 6.1.2).'
26707
26708     This is a property of the linker.  C99 and C11 require that case
26709     distinctions are always significant in identifiers with external
26710     linkage and systems without this property are not supported by GCC.
26711
26712
26713File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
26714
267154.4 Characters
26716==============
26717
26718   * 'The number of bits in a byte (C90 3.4, C99 and C11 3.6).'
26719
26720     Determined by ABI.
26721
26722   * 'The values of the members of the execution character set (C90, C99
26723     and C11 5.2.1).'
26724
26725     Determined by ABI.
26726
26727   * 'The unique value of the member of the execution character set
26728     produced for each of the standard alphabetic escape sequences (C90,
26729     C99 and C11 5.2.2).'
26730
26731     Determined by ABI.
26732
26733   * 'The value of a 'char' object into which has been stored any
26734     character other than a member of the basic execution character set
26735     (C90 6.1.2.5, C99 and C11 6.2.5).'
26736
26737     Determined by ABI.
26738
26739   * 'Which of 'signed char' or 'unsigned char' has the same range,
26740     representation, and behavior as "plain" 'char' (C90 6.1.2.5, C90
26741     6.2.1.1, C99 and C11 6.2.5, C99 and C11 6.3.1.1).'
26742
26743     Determined by ABI.  The options '-funsigned-char' and
26744     '-fsigned-char' change the default.  *Note Options Controlling C
26745     Dialect: C Dialect Options.
26746
26747   * 'The mapping of members of the source character set (in character
26748     constants and string literals) to members of the execution
26749     character set (C90 6.1.3.4, C99 and C11 6.4.4.4, C90, C99 and C11
26750     5.1.1.2).'
26751
26752     Determined by ABI.
26753
26754   * 'The value of an integer character constant containing more than
26755     one character or containing a character or escape sequence that
26756     does not map to a single-byte execution character (C90 6.1.3.4, C99
26757     and C11 6.4.4.4).'
26758
26759     *Note Implementation-defined behavior: (cpp)Implementation-defined
26760     behavior.
26761
26762   * 'The value of a wide character constant containing more than one
26763     multibyte character or a single multibyte character that maps to
26764     multiple members of the extended execution character set, or
26765     containing a multibyte character or escape sequence not represented
26766     in the extended execution character set (C90 6.1.3.4, C99 and C11
26767     6.4.4.4).'
26768
26769     *Note Implementation-defined behavior: (cpp)Implementation-defined
26770     behavior.
26771
26772   * 'The current locale used to convert a wide character constant
26773     consisting of a single multibyte character that maps to a member of
26774     the extended execution character set into a corresponding wide
26775     character code (C90 6.1.3.4, C99 and C11 6.4.4.4).'
26776
26777     *Note Implementation-defined behavior: (cpp)Implementation-defined
26778     behavior.
26779
26780   * 'Whether differently-prefixed wide string literal tokens can be
26781     concatenated and, if so, the treatment of the resulting multibyte
26782     character sequence (C11 6.4.5).'
26783
26784     Such tokens may not be concatenated.
26785
26786   * 'The current locale used to convert a wide string literal into
26787     corresponding wide character codes (C90 6.1.4, C99 and C11 6.4.5).'
26788
26789     *Note Implementation-defined behavior: (cpp)Implementation-defined
26790     behavior.
26791
26792   * 'The value of a string literal containing a multibyte character or
26793     escape sequence not represented in the execution character set (C90
26794     6.1.4, C99 and C11 6.4.5).'
26795
26796     *Note Implementation-defined behavior: (cpp)Implementation-defined
26797     behavior.
26798
26799   * 'The encoding of any of 'wchar_t', 'char16_t', and 'char32_t' where
26800     the corresponding standard encoding macro ('__STDC_ISO_10646__',
26801     '__STDC_UTF_16__', or '__STDC_UTF_32__') is not defined (C11
26802     6.10.8.2).'
26803
26804     *Note Implementation-defined behavior: (cpp)Implementation-defined
26805     behavior.  'char16_t' and 'char32_t' literals are always encoded in
26806     UTF-16 and UTF-32 respectively.
26807
26808
26809File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
26810
268114.5 Integers
26812============
26813
26814   * 'Any extended integer types that exist in the implementation (C99
26815     and C11 6.2.5).'
26816
26817     GCC does not support any extended integer types.
26818
26819   * 'Whether signed integer types are represented using sign and
26820     magnitude, two's complement, or one's complement, and whether the
26821     extraordinary value is a trap representation or an ordinary value
26822     (C99 and C11 6.2.6.2).'
26823
26824     GCC supports only two's complement integer types, and all bit
26825     patterns are ordinary values.
26826
26827   * 'The rank of any extended integer type relative to another extended
26828     integer type with the same precision (C99 and C11 6.3.1.1).'
26829
26830     GCC does not support any extended integer types.
26831
26832   * 'The result of, or the signal raised by, converting an integer to a
26833     signed integer type when the value cannot be represented in an
26834     object of that type (C90 6.2.1.2, C99 and C11 6.3.1.3).'
26835
26836     For conversion to a type of width N, the value is reduced modulo
26837     2^N to be within range of the type; no signal is raised.
26838
26839   * 'The results of some bitwise operations on signed integers (C90
26840     6.3, C99 and C11 6.5).'
26841
26842     Bitwise operators act on the representation of the value including
26843     both the sign and value bits, where the sign bit is considered
26844     immediately above the highest-value value bit.  Signed '>>' acts on
26845     negative numbers by sign extension.
26846
26847     As an extension to the C language, GCC does not use the latitude
26848     given in C99 and C11 only to treat certain aspects of signed '<<'
26849     as undefined.  However, '-fsanitize=shift' (and
26850     '-fsanitize=undefined') will diagnose such cases.  They are also
26851     diagnosed where constant expressions are required.
26852
26853   * 'The sign of the remainder on integer division (C90 6.3.5).'
26854
26855     GCC always follows the C99 and C11 requirement that the result of
26856     division is truncated towards zero.
26857
26858
26859File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
26860
268614.6 Floating Point
26862==================
26863
26864   * 'The accuracy of the floating-point operations and of the library
26865     functions in '<math.h>' and '<complex.h>' that return
26866     floating-point results (C90, C99 and C11 5.2.4.2.2).'
26867
26868     The accuracy is unknown.
26869
26870   * 'The rounding behaviors characterized by non-standard values of
26871     'FLT_ROUNDS' (C90, C99 and C11 5.2.4.2.2).'
26872
26873     GCC does not use such values.
26874
26875   * 'The evaluation methods characterized by non-standard negative
26876     values of 'FLT_EVAL_METHOD' (C99 and C11 5.2.4.2.2).'
26877
26878     GCC does not use such values.
26879
26880   * 'The direction of rounding when an integer is converted to a
26881     floating-point number that cannot exactly represent the original
26882     value (C90 6.2.1.3, C99 and C11 6.3.1.4).'
26883
26884     C99 Annex F is followed.
26885
26886   * 'The direction of rounding when a floating-point number is
26887     converted to a narrower floating-point number (C90 6.2.1.4, C99 and
26888     C11 6.3.1.5).'
26889
26890     C99 Annex F is followed.
26891
26892   * 'How the nearest representable value or the larger or smaller
26893     representable value immediately adjacent to the nearest
26894     representable value is chosen for certain floating constants (C90
26895     6.1.3.1, C99 and C11 6.4.4.2).'
26896
26897     C99 Annex F is followed.
26898
26899   * 'Whether and how floating expressions are contracted when not
26900     disallowed by the 'FP_CONTRACT' pragma (C99 and C11 6.5).'
26901
26902     Expressions are currently only contracted if '-ffp-contract=fast',
26903     '-funsafe-math-optimizations' or '-ffast-math' are used.  This is
26904     subject to change.
26905
26906   * 'The default state for the 'FENV_ACCESS' pragma (C99 and C11
26907     7.6.1).'
26908
26909     This pragma is not implemented, but the default is to "off" unless
26910     '-frounding-math' is used in which case it is "on".
26911
26912   * 'Additional floating-point exceptions, rounding modes,
26913     environments, and classifications, and their macro names (C99 and
26914     C11 7.6, C99 and C11 7.12).'
26915
26916     This is dependent on the implementation of the C library, and is
26917     not defined by GCC itself.
26918
26919   * 'The default state for the 'FP_CONTRACT' pragma (C99 and C11
26920     7.12.2).'
26921
26922     This pragma is not implemented.  Expressions are currently only
26923     contracted if '-ffp-contract=fast', '-funsafe-math-optimizations'
26924     or '-ffast-math' are used.  This is subject to change.
26925
26926   * 'Whether the "inexact" floating-point exception can be raised when
26927     the rounded result actually does equal the mathematical result in
26928     an IEC 60559 conformant implementation (C99 F.9).'
26929
26930     This is dependent on the implementation of the C library, and is
26931     not defined by GCC itself.
26932
26933   * 'Whether the "underflow" (and "inexact") floating-point exception
26934     can be raised when a result is tiny but not inexact in an IEC 60559
26935     conformant implementation (C99 F.9).'
26936
26937     This is dependent on the implementation of the C library, and is
26938     not defined by GCC itself.
26939
26940
26941File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
26942
269434.7 Arrays and Pointers
26944=======================
26945
26946   * 'The result of converting a pointer to an integer or vice versa
26947     (C90 6.3.4, C99 and C11 6.3.2.3).'
26948
26949     A cast from pointer to integer discards most-significant bits if
26950     the pointer representation is larger than the integer type,
26951     sign-extends(1) if the pointer representation is smaller than the
26952     integer type, otherwise the bits are unchanged.
26953
26954     A cast from integer to pointer discards most-significant bits if
26955     the pointer representation is smaller than the integer type,
26956     extends according to the signedness of the integer type if the
26957     pointer representation is larger than the integer type, otherwise
26958     the bits are unchanged.
26959
26960     When casting from pointer to integer and back again, the resulting
26961     pointer must reference the same object as the original pointer,
26962     otherwise the behavior is undefined.  That is, one may not use
26963     integer arithmetic to avoid the undefined behavior of pointer
26964     arithmetic as proscribed in C99 and C11 6.5.6/8.
26965
26966   * 'The size of the result of subtracting two pointers to elements of
26967     the same array (C90 6.3.6, C99 and C11 6.5.6).'
26968
26969     The value is as specified in the standard and the type is
26970     determined by the ABI.
26971
26972   ---------- Footnotes ----------
26973
26974   (1) Future versions of GCC may zero-extend, or use a target-defined
26975'ptr_extend' pattern.  Do not rely on sign extension.
26976
26977
26978File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
26979
269804.8 Hints
26981=========
26982
26983   * 'The extent to which suggestions made by using the 'register'
26984     storage-class specifier are effective (C90 6.5.1, C99 and C11
26985     6.7.1).'
26986
26987     The 'register' specifier affects code generation only in these
26988     ways:
26989
26990        * When used as part of the register variable extension, see
26991          *note Explicit Register Variables::.
26992
26993        * When '-O0' is in use, the compiler allocates distinct stack
26994          memory for all variables that do not have the 'register'
26995          storage-class specifier; if 'register' is specified, the
26996          variable may have a shorter lifespan than the code would
26997          indicate and may never be placed in memory.
26998
26999        * On some rare x86 targets, 'setjmp' doesn't save the registers
27000          in all circumstances.  In those cases, GCC doesn't allocate
27001          any variables in registers unless they are marked 'register'.
27002
27003   * 'The extent to which suggestions made by using the inline function
27004     specifier are effective (C99 and C11 6.7.4).'
27005
27006     GCC will not inline any functions if the '-fno-inline' option is
27007     used or if '-O0' is used.  Otherwise, GCC may still be unable to
27008     inline a function for many reasons; the '-Winline' option may be
27009     used to determine if a function has not been inlined and why not.
27010
27011
27012File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
27013
270144.9 Structures, Unions, Enumerations, and Bit-Fields
27015====================================================
27016
27017   * 'A member of a union object is accessed using a member of a
27018     different type (C90 6.3.2.3).'
27019
27020     The relevant bytes of the representation of the object are treated
27021     as an object of the type used for the access.  *Note
27022     Type-punning::.  This may be a trap representation.
27023
27024   * 'Whether a "plain" 'int' bit-field is treated as a 'signed int'
27025     bit-field or as an 'unsigned int' bit-field (C90 6.5.2, C90
27026     6.5.2.1, C99 and C11 6.7.2, C99 and C11 6.7.2.1).'
27027
27028     By default it is treated as 'signed int' but this may be changed by
27029     the '-funsigned-bitfields' option.
27030
27031   * 'Allowable bit-field types other than '_Bool', 'signed int', and
27032     'unsigned int' (C99 and C11 6.7.2.1).'
27033
27034     Other integer types, such as 'long int', and enumerated types are
27035     permitted even in strictly conforming mode.
27036
27037   * 'Whether atomic types are permitted for bit-fields (C11 6.7.2.1).'
27038
27039     Atomic types are not permitted for bit-fields.
27040
27041   * 'Whether a bit-field can straddle a storage-unit boundary (C90
27042     6.5.2.1, C99 and C11 6.7.2.1).'
27043
27044     Determined by ABI.
27045
27046   * 'The order of allocation of bit-fields within a unit (C90 6.5.2.1,
27047     C99 and C11 6.7.2.1).'
27048
27049     Determined by ABI.
27050
27051   * 'The alignment of non-bit-field members of structures (C90 6.5.2.1,
27052     C99 and C11 6.7.2.1).'
27053
27054     Determined by ABI.
27055
27056   * 'The integer type compatible with each enumerated type (C90
27057     6.5.2.2, C99 and C11 6.7.2.2).'
27058
27059     Normally, the type is 'unsigned int' if there are no negative
27060     values in the enumeration, otherwise 'int'.  If '-fshort-enums' is
27061     specified, then if there are negative values it is the first of
27062     'signed char', 'short' and 'int' that can represent all the values,
27063     otherwise it is the first of 'unsigned char', 'unsigned short' and
27064     'unsigned int' that can represent all the values.
27065
27066     On some targets, '-fshort-enums' is the default; this is determined
27067     by the ABI.
27068
27069
27070File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
27071
270724.10 Qualifiers
27073===============
27074
27075   * 'What constitutes an access to an object that has
27076     volatile-qualified type (C90 6.5.3, C99 and C11 6.7.3).'
27077
27078     Such an object is normally accessed by pointers and used for
27079     accessing hardware.  In most expressions, it is intuitively obvious
27080     what is a read and what is a write.  For example
27081
27082          volatile int *dst = SOMEVALUE;
27083          volatile int *src = SOMEOTHERVALUE;
27084          *dst = *src;
27085
27086     will cause a read of the volatile object pointed to by SRC and
27087     store the value into the volatile object pointed to by DST.  There
27088     is no guarantee that these reads and writes are atomic, especially
27089     for objects larger than 'int'.
27090
27091     However, if the volatile storage is not being modified, and the
27092     value of the volatile storage is not used, then the situation is
27093     less obvious.  For example
27094
27095          volatile int *src = SOMEVALUE;
27096          *src;
27097
27098     According to the C standard, such an expression is an rvalue whose
27099     type is the unqualified version of its original type, i.e.  'int'.
27100     Whether GCC interprets this as a read of the volatile object being
27101     pointed to or only as a request to evaluate the expression for its
27102     side effects depends on this type.
27103
27104     If it is a scalar type, or on most targets an aggregate type whose
27105     only member object is of a scalar type, or a union type whose
27106     member objects are of scalar types, the expression is interpreted
27107     by GCC as a read of the volatile object; in the other cases, the
27108     expression is only evaluated for its side effects.
27109
27110
27111File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
27112
271134.11 Declarators
27114================
27115
27116   * 'The maximum number of declarators that may modify an arithmetic,
27117     structure or union type (C90 6.5.4).'
27118
27119     GCC is only limited by available memory.
27120
27121
27122File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
27123
271244.12 Statements
27125===============
27126
27127   * 'The maximum number of 'case' values in a 'switch' statement (C90
27128     6.6.4.2).'
27129
27130     GCC is only limited by available memory.
27131
27132
27133File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
27134
271354.13 Preprocessing Directives
27136=============================
27137
27138*Note Implementation-defined behavior: (cpp)Implementation-defined
27139behavior, for details of these aspects of implementation-defined
27140behavior.
27141
27142   * 'The locations within '#pragma' directives where header name
27143     preprocessing tokens are recognized (C11 6.4, C11 6.4.7).'
27144
27145   * 'How sequences in both forms of header names are mapped to headers
27146     or external source file names (C90 6.1.7, C99 and C11 6.4.7).'
27147
27148   * 'Whether the value of a character constant in a constant expression
27149     that controls conditional inclusion matches the value of the same
27150     character constant in the execution character set (C90 6.8.1, C99
27151     and C11 6.10.1).'
27152
27153   * 'Whether the value of a single-character character constant in a
27154     constant expression that controls conditional inclusion may have a
27155     negative value (C90 6.8.1, C99 and C11 6.10.1).'
27156
27157   * 'The places that are searched for an included '<>' delimited
27158     header, and how the places are specified or the header is
27159     identified (C90 6.8.2, C99 and C11 6.10.2).'
27160
27161   * 'How the named source file is searched for in an included '""'
27162     delimited header (C90 6.8.2, C99 and C11 6.10.2).'
27163
27164   * 'The method by which preprocessing tokens (possibly resulting from
27165     macro expansion) in a '#include' directive are combined into a
27166     header name (C90 6.8.2, C99 and C11 6.10.2).'
27167
27168   * 'The nesting limit for '#include' processing (C90 6.8.2, C99 and
27169     C11 6.10.2).'
27170
27171   * 'Whether the '#' operator inserts a '\' character before the '\'
27172     character that begins a universal character name in a character
27173     constant or string literal (C99 and C11 6.10.3.2).'
27174
27175   * 'The behavior on each recognized non-'STDC #pragma' directive (C90
27176     6.8.6, C99 and C11 6.10.6).'
27177
27178     *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by GCC
27179     on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
27180     details of target-specific pragmas.
27181
27182   * 'The definitions for '__DATE__' and '__TIME__' when respectively,
27183     the date and time of translation are not available (C90 6.8.8, C99
27184     6.10.8, C11 6.10.8.1).'
27185
27186
27187File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
27188
271894.14 Library Functions
27190======================
27191
27192The behavior of most of these points are dependent on the implementation
27193of the C library, and are not defined by GCC itself.
27194
27195   * 'The null pointer constant to which the macro 'NULL' expands (C90
27196     7.1.6, C99 7.17, C11 7.19).'
27197
27198     In '<stddef.h>', 'NULL' expands to '((void *)0)'.  GCC does not
27199     provide the other headers which define 'NULL' and some library
27200     implementations may use other definitions in those headers.
27201
27202
27203File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
27204
272054.15 Architecture
27206=================
27207
27208   * 'The values or expressions assigned to the macros specified in the
27209     headers '<float.h>', '<limits.h>', and '<stdint.h>' (C90, C99 and
27210     C11 5.2.4.2, C99 7.18.2, C99 7.18.3, C11 7.20.2, C11 7.20.3).'
27211
27212     Determined by ABI.
27213
27214   * 'The result of attempting to indirectly access an object with
27215     automatic or thread storage duration from a thread other than the
27216     one with which it is associated (C11 6.2.4).'
27217
27218     Such accesses are supported, subject to the same requirements for
27219     synchronization for concurrent accesses as for concurrent accesses
27220     to any object.
27221
27222   * 'The number, order, and encoding of bytes in any object (when not
27223     explicitly specified in this International Standard) (C99 and C11
27224     6.2.6.1).'
27225
27226     Determined by ABI.
27227
27228   * 'Whether any extended alignments are supported and the contexts in
27229     which they are supported (C11 6.2.8).'
27230
27231     Extended alignments up to 2^{28} (bytes) are supported for objects
27232     of automatic storage duration.  Alignments supported for objects of
27233     static and thread storage duration are determined by the ABI.
27234
27235   * 'Valid alignment values other than those returned by an _Alignof
27236     expression for fundamental types, if any (C11 6.2.8).'
27237
27238     Valid alignments are powers of 2 up to and including 2^{28}.
27239
27240   * 'The value of the result of the 'sizeof' and '_Alignof' operators
27241     (C90 6.3.3.4, C99 and C11 6.5.3.4).'
27242
27243     Determined by ABI.
27244
27245
27246File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
27247
272484.16 Locale-Specific Behavior
27249=============================
27250
27251The behavior of these points are dependent on the implementation of the
27252C library, and are not defined by GCC itself.
27253
27254
27255File: gcc.info,  Node: C++ Implementation,  Next: C Extensions,  Prev: C Implementation,  Up: Top
27256
272575 C++ Implementation-Defined Behavior
27258*************************************
27259
27260A conforming implementation of ISO C++ is required to document its
27261choice of behavior in each of the areas that are designated
27262"implementation defined".  The following lists all such areas, along
27263with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC
2726414882:2003 standards.  Some areas are only implementation-defined in one
27265version of the standard.
27266
27267 Some choices depend on the externally determined ABI for the platform
27268(including standard character encodings) which GCC follows; these are
27269listed as "determined by ABI" below.  *Note Binary Compatibility:
27270Compatibility, and <http://gcc.gnu.org/readings.html>.  Some choices are
27271documented in the preprocessor manual.  *Note Implementation-defined
27272behavior: (cpp)Implementation-defined behavior.  Some choices are
27273documented in the corresponding document for the C language.  *Note C
27274Implementation::.  Some choices are made by the library and operating
27275system (or other environment when compiling for a freestanding
27276environment); refer to their documentation for details.
27277
27278* Menu:
27279
27280* Conditionally-supported behavior::
27281* Exception handling::
27282
27283
27284File: gcc.info,  Node: Conditionally-supported behavior,  Next: Exception handling,  Up: C++ Implementation
27285
272865.1 Conditionally-Supported Behavior
27287====================================
27288
27289'Each implementation shall include documentation that identifies all
27290conditionally-supported constructs that it does not support (C++0x
272911.4).'
27292
27293   * 'Whether an argument of class type with a non-trivial copy
27294     constructor or destructor can be passed to ... (C++0x 5.2.2).'
27295
27296     Such argument passing is supported, using the same
27297     pass-by-invisible-reference approach used for normal function
27298     arguments of such types.
27299
27300
27301File: gcc.info,  Node: Exception handling,  Prev: Conditionally-supported behavior,  Up: C++ Implementation
27302
273035.2 Exception Handling
27304======================
27305
27306   * 'In the situation where no matching handler is found, it is
27307     implementation-defined whether or not the stack is unwound before
27308     std::terminate() is called (C++98 15.5.1).'
27309
27310     The stack is not unwound before std::terminate is called.
27311
27312 c Copyright (C) 1988-2018 Free Software Foundation, Inc.
27313
27314
27315File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C++ Implementation,  Up: Top
27316
273176 Extensions to the C Language Family
27318*************************************
27319
27320GNU C provides several language features not found in ISO standard C.
27321(The '-pedantic' option directs GCC to print a warning message if any of
27322these features is used.)  To test for the availability of these features
27323in conditional compilation, check for a predefined macro '__GNUC__',
27324which is always defined under GCC.
27325
27326 These extensions are available in C and Objective-C.  Most of them are
27327also available in C++.  *Note Extensions to the C++ Language: C++
27328Extensions, for extensions that apply _only_ to C++.
27329
27330 Some features that are in ISO C99 but not C90 or C++ are also, as
27331extensions, accepted by GCC in C90 mode and in C++.
27332
27333* Menu:
27334
27335* Statement Exprs::     Putting statements and declarations inside expressions.
27336* Local Labels::        Labels local to a block.
27337* Labels as Values::    Getting pointers to labels, and computed gotos.
27338* Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
27339* Constructing Calls::  Dispatching a call to another function.
27340* Typeof::              'typeof': referring to the type of an expression.
27341* Conditionals::        Omitting the middle operand of a '?:' expression.
27342* __int128::		128-bit integers--'__int128'.
27343* Long Long::           Double-word integers--'long long int'.
27344* Complex::             Data types for complex numbers.
27345* Floating Types::      Additional Floating Types.
27346* Half-Precision::      Half-Precision Floating Point.
27347* Decimal Float::       Decimal Floating Types.
27348* Hex Floats::          Hexadecimal floating-point constants.
27349* Fixed-Point::         Fixed-Point Types.
27350* Named Address Spaces::Named address spaces.
27351* Zero Length::         Zero-length arrays.
27352* Empty Structures::    Structures with no members.
27353* Variable Length::     Arrays whose length is computed at run time.
27354* Variadic Macros::     Macros with a variable number of arguments.
27355* Escaped Newlines::    Slightly looser rules for escaped newlines.
27356* Subscripting::        Any array can be subscripted, even if not an lvalue.
27357* Pointer Arith::       Arithmetic on 'void'-pointers and function pointers.
27358* Pointers to Arrays::  Pointers to arrays with qualifiers work as expected.
27359* Initializers::        Non-constant initializers.
27360* Compound Literals::   Compound literals give structures, unions
27361                        or arrays as values.
27362* Designated Inits::    Labeling elements of initializers.
27363* Case Ranges::         'case 1 ... 9' and such.
27364* Cast to Union::       Casting to union type from any member of the union.
27365* Mixed Declarations::  Mixing declarations and code.
27366* Function Attributes:: Declaring that functions have no side effects,
27367                        or that they can never return.
27368* Variable Attributes:: Specifying attributes of variables.
27369* Type Attributes::     Specifying attributes of types.
27370* Label Attributes::    Specifying attributes on labels.
27371* Enumerator Attributes:: Specifying attributes on enumerators.
27372* Statement Attributes:: Specifying attributes on statements.
27373* Attribute Syntax::    Formal syntax for attributes.
27374* Function Prototypes:: Prototype declarations and old-style definitions.
27375* C++ Comments::        C++ comments are recognized.
27376* Dollar Signs::        Dollar sign is allowed in identifiers.
27377* Character Escapes::   '\e' stands for the character <ESC>.
27378* Alignment::           Inquiring about the alignment of a type or variable.
27379* Inline::              Defining inline functions (as fast as macros).
27380* Volatiles::           What constitutes an access to a volatile object.
27381* Using Assembly Language with C:: Instructions and extensions for interfacing C with assembler.
27382* Alternate Keywords::  '__const__', '__asm__', etc., for header files.
27383* Incomplete Enums::    'enum foo;', with details to follow.
27384* Function Names::      Printable strings which are the name of the current
27385                        function.
27386* Return Address::      Getting the return or frame address of a function.
27387* Vector Extensions::   Using vector instructions through built-in functions.
27388* Offsetof::            Special syntax for implementing 'offsetof'.
27389* __sync Builtins::     Legacy built-in functions for atomic memory access.
27390* __atomic Builtins::   Atomic built-in functions with memory model.
27391* Integer Overflow Builtins:: Built-in functions to perform arithmetics and
27392                        arithmetic overflow checking.
27393* x86 specific memory model extensions for transactional memory:: x86 memory models.
27394* Object Size Checking:: Built-in functions for limited buffer overflow
27395                        checking.
27396* Pointer Bounds Checker builtins:: Built-in functions for Pointer Bounds Checker.
27397* Other Builtins::      Other built-in functions.
27398* Target Builtins::     Built-in functions specific to particular targets.
27399* Target Format Checks:: Format checks specific to particular targets.
27400* Pragmas::             Pragmas accepted by GCC.
27401* Unnamed Fields::      Unnamed struct/union fields within structs/unions.
27402* Thread-Local::        Per-thread variables.
27403* Binary constants::    Binary constants using the '0b' prefix.
27404
27405
27406File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
27407
274086.1 Statements and Declarations in Expressions
27409==============================================
27410
27411A compound statement enclosed in parentheses may appear as an expression
27412in GNU C.  This allows you to use loops, switches, and local variables
27413within an expression.
27414
27415 Recall that a compound statement is a sequence of statements surrounded
27416by braces; in this construct, parentheses go around the braces.  For
27417example:
27418
27419     ({ int y = foo (); int z;
27420        if (y > 0) z = y;
27421        else z = - y;
27422        z; })
27423
27424is a valid (though slightly more complex than necessary) expression for
27425the absolute value of 'foo ()'.
27426
27427 The last thing in the compound statement should be an expression
27428followed by a semicolon; the value of this subexpression serves as the
27429value of the entire construct.  (If you use some other kind of statement
27430last within the braces, the construct has type 'void', and thus
27431effectively no value.)
27432
27433 This feature is especially useful in making macro definitions "safe"
27434(so that they evaluate each operand exactly once).  For example, the
27435"maximum" function is commonly defined as a macro in standard C as
27436follows:
27437
27438     #define max(a,b) ((a) > (b) ? (a) : (b))
27439
27440But this definition computes either A or B twice, with bad results if
27441the operand has side effects.  In GNU C, if you know the type of the
27442operands (here taken as 'int'), you can define the macro safely as
27443follows:
27444
27445     #define maxint(a,b) \
27446       ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
27447
27448 Embedded statements are not allowed in constant expressions, such as
27449the value of an enumeration constant, the width of a bit-field, or the
27450initial value of a static variable.
27451
27452 If you don't know the type of the operand, you can still do this, but
27453you must use 'typeof' or '__auto_type' (*note Typeof::).
27454
27455 In G++, the result value of a statement expression undergoes array and
27456function pointer decay, and is returned by value to the enclosing
27457expression.  For instance, if 'A' is a class, then
27458
27459             A a;
27460
27461             ({a;}).Foo ()
27462
27463constructs a temporary 'A' object to hold the result of the statement
27464expression, and that is used to invoke 'Foo'.  Therefore the 'this'
27465pointer observed by 'Foo' is not the address of 'a'.
27466
27467 In a statement expression, any temporaries created within a statement
27468are destroyed at that statement's end.  This makes statement expressions
27469inside macros slightly different from function calls.  In the latter
27470case temporaries introduced during argument evaluation are destroyed at
27471the end of the statement that includes the function call.  In the
27472statement expression case they are destroyed during the statement
27473expression.  For instance,
27474
27475     #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
27476     template<typename T> T function(T a) { T b = a; return b + 3; }
27477
27478     void foo ()
27479     {
27480       macro (X ());
27481       function (X ());
27482     }
27483
27484has different places where temporaries are destroyed.  For the 'macro'
27485case, the temporary 'X' is destroyed just after the initialization of
27486'b'.  In the 'function' case that temporary is destroyed when the
27487function returns.
27488
27489 These considerations mean that it is probably a bad idea to use
27490statement expressions of this form in header files that are designed to
27491work with C++.  (Note that some versions of the GNU C Library contained
27492header files using statement expressions that lead to precisely this
27493bug.)
27494
27495 Jumping into a statement expression with 'goto' or using a 'switch'
27496statement outside the statement expression with a 'case' or 'default'
27497label inside the statement expression is not permitted.  Jumping into a
27498statement expression with a computed 'goto' (*note Labels as Values::)
27499has undefined behavior.  Jumping out of a statement expression is
27500permitted, but if the statement expression is part of a larger
27501expression then it is unspecified which other subexpressions of that
27502expression have been evaluated except where the language definition
27503requires certain subexpressions to be evaluated before or after the
27504statement expression.  In any case, as with a function call, the
27505evaluation of a statement expression is not interleaved with the
27506evaluation of other parts of the containing expression.  For example,
27507
27508       foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
27509
27510calls 'foo' and 'bar1' and does not call 'baz' but may or may not call
27511'bar2'.  If 'bar2' is called, it is called after 'foo' and before
27512'bar1'.
27513
27514
27515File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
27516
275176.2 Locally Declared Labels
27518===========================
27519
27520GCC allows you to declare "local labels" in any nested block scope.  A
27521local label is just like an ordinary label, but you can only reference
27522it (with a 'goto' statement, or by taking its address) within the block
27523in which it is declared.
27524
27525 A local label declaration looks like this:
27526
27527     __label__ LABEL;
27528
27529or
27530
27531     __label__ LABEL1, LABEL2, /* ... */;
27532
27533 Local label declarations must come at the beginning of the block,
27534before any ordinary declarations or statements.
27535
27536 The label declaration defines the label _name_, but does not define the
27537label itself.  You must do this in the usual way, with 'LABEL:', within
27538the statements of the statement expression.
27539
27540 The local label feature is useful for complex macros.  If a macro
27541contains nested loops, a 'goto' can be useful for breaking out of them.
27542However, an ordinary label whose scope is the whole function cannot be
27543used: if the macro can be expanded several times in one function, the
27544label is multiply defined in that function.  A local label avoids this
27545problem.  For example:
27546
27547     #define SEARCH(value, array, target)              \
27548     do {                                              \
27549       __label__ found;                                \
27550       typeof (target) _SEARCH_target = (target);      \
27551       typeof (*(array)) *_SEARCH_array = (array);     \
27552       int i, j;                                       \
27553       int value;                                      \
27554       for (i = 0; i < max; i++)                       \
27555         for (j = 0; j < max; j++)                     \
27556           if (_SEARCH_array[i][j] == _SEARCH_target)  \
27557             { (value) = i; goto found; }              \
27558       (value) = -1;                                   \
27559      found:;                                          \
27560     } while (0)
27561
27562 This could also be written using a statement expression:
27563
27564     #define SEARCH(array, target)                     \
27565     ({                                                \
27566       __label__ found;                                \
27567       typeof (target) _SEARCH_target = (target);      \
27568       typeof (*(array)) *_SEARCH_array = (array);     \
27569       int i, j;                                       \
27570       int value;                                      \
27571       for (i = 0; i < max; i++)                       \
27572         for (j = 0; j < max; j++)                     \
27573           if (_SEARCH_array[i][j] == _SEARCH_target)  \
27574             { value = i; goto found; }                \
27575       value = -1;                                     \
27576      found:                                           \
27577       value;                                          \
27578     })
27579
27580 Local label declarations also make the labels they declare visible to
27581nested functions, if there are any.  *Note Nested Functions::, for
27582details.
27583
27584
27585File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
27586
275876.3 Labels as Values
27588====================
27589
27590You can get the address of a label defined in the current function (or a
27591containing function) with the unary operator '&&'.  The value has type
27592'void *'.  This value is a constant and can be used wherever a constant
27593of that type is valid.  For example:
27594
27595     void *ptr;
27596     /* ... */
27597     ptr = &&foo;
27598
27599 To use these values, you need to be able to jump to one.  This is done
27600with the computed goto statement(1), 'goto *EXP;'.  For example,
27601
27602     goto *ptr;
27603
27604Any expression of type 'void *' is allowed.
27605
27606 One way of using these constants is in initializing a static array that
27607serves as a jump table:
27608
27609     static void *array[] = { &&foo, &&bar, &&hack };
27610
27611Then you can select a label with indexing, like this:
27612
27613     goto *array[i];
27614
27615Note that this does not check whether the subscript is in bounds--array
27616indexing in C never does that.
27617
27618 Such an array of label values serves a purpose much like that of the
27619'switch' statement.  The 'switch' statement is cleaner, so use that
27620rather than an array unless the problem does not fit a 'switch'
27621statement very well.
27622
27623 Another use of label values is in an interpreter for threaded code.
27624The labels within the interpreter function can be stored in the threaded
27625code for super-fast dispatching.
27626
27627 You may not use this mechanism to jump to code in a different function.
27628If you do that, totally unpredictable things happen.  The best way to
27629avoid this is to store the label address only in automatic variables and
27630never pass it as an argument.
27631
27632 An alternate way to write the above example is
27633
27634     static const int array[] = { &&foo - &&foo, &&bar - &&foo,
27635                                  &&hack - &&foo };
27636     goto *(&&foo + array[i]);
27637
27638This is more friendly to code living in shared libraries, as it reduces
27639the number of dynamic relocations that are needed, and by consequence,
27640allows the data to be read-only.  This alternative with label
27641differences is not supported for the AVR target, please use the first
27642approach for AVR programs.
27643
27644 The '&&foo' expressions for the same label might have different values
27645if the containing function is inlined or cloned.  If a program relies on
27646them being always the same, '__attribute__((__noinline__,__noclone__))'
27647should be used to prevent inlining and cloning.  If '&&foo' is used in a
27648static variable initializer, inlining and cloning is forbidden.
27649
27650   ---------- Footnotes ----------
27651
27652   (1) The analogous feature in Fortran is called an assigned goto, but
27653that name seems inappropriate in C, where one can do more than simply
27654store label addresses in label variables.
27655
27656
27657File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
27658
276596.4 Nested Functions
27660====================
27661
27662A "nested function" is a function defined inside another function.
27663Nested functions are supported as an extension in GNU C, but are not
27664supported by GNU C++.
27665
27666 The nested function's name is local to the block where it is defined.
27667For example, here we define a nested function named 'square', and call
27668it twice:
27669
27670     foo (double a, double b)
27671     {
27672       double square (double z) { return z * z; }
27673
27674       return square (a) + square (b);
27675     }
27676
27677 The nested function can access all the variables of the containing
27678function that are visible at the point of its definition.  This is
27679called "lexical scoping".  For example, here we show a nested function
27680which uses an inherited variable named 'offset':
27681
27682     bar (int *array, int offset, int size)
27683     {
27684       int access (int *array, int index)
27685         { return array[index + offset]; }
27686       int i;
27687       /* ... */
27688       for (i = 0; i < size; i++)
27689         /* ... */ access (array, i) /* ... */
27690     }
27691
27692 Nested function definitions are permitted within functions in the
27693places where variable definitions are allowed; that is, in any block,
27694mixed with the other declarations and statements in the block.
27695
27696 It is possible to call the nested function from outside the scope of
27697its name by storing its address or passing the address to another
27698function:
27699
27700     hack (int *array, int size)
27701     {
27702       void store (int index, int value)
27703         { array[index] = value; }
27704
27705       intermediate (store, size);
27706     }
27707
27708 Here, the function 'intermediate' receives the address of 'store' as an
27709argument.  If 'intermediate' calls 'store', the arguments given to
27710'store' are used to store into 'array'.  But this technique works only
27711so long as the containing function ('hack', in this example) does not
27712exit.
27713
27714 If you try to call the nested function through its address after the
27715containing function exits, all hell breaks loose.  If you try to call it
27716after a containing scope level exits, and if it refers to some of the
27717variables that are no longer in scope, you may be lucky, but it's not
27718wise to take the risk.  If, however, the nested function does not refer
27719to anything that has gone out of scope, you should be safe.
27720
27721 GCC implements taking the address of a nested function using a
27722technique called "trampolines".  This technique was described in
27723'Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
27724Proceedings, October 17-21, 1988).
27725
27726 A nested function can jump to a label inherited from a containing
27727function, provided the label is explicitly declared in the containing
27728function (*note Local Labels::).  Such a jump returns instantly to the
27729containing function, exiting the nested function that did the 'goto' and
27730any intermediate functions as well.  Here is an example:
27731
27732     bar (int *array, int offset, int size)
27733     {
27734       __label__ failure;
27735       int access (int *array, int index)
27736         {
27737           if (index > size)
27738             goto failure;
27739           return array[index + offset];
27740         }
27741       int i;
27742       /* ... */
27743       for (i = 0; i < size; i++)
27744         /* ... */ access (array, i) /* ... */
27745       /* ... */
27746       return 0;
27747
27748      /* Control comes here from 'access'
27749         if it detects an error.  */
27750      failure:
27751       return -1;
27752     }
27753
27754 A nested function always has no linkage.  Declaring one with 'extern'
27755or 'static' is erroneous.  If you need to declare the nested function
27756before its definition, use 'auto' (which is otherwise meaningless for
27757function declarations).
27758
27759     bar (int *array, int offset, int size)
27760     {
27761       __label__ failure;
27762       auto int access (int *, int);
27763       /* ... */
27764       int access (int *array, int index)
27765         {
27766           if (index > size)
27767             goto failure;
27768           return array[index + offset];
27769         }
27770       /* ... */
27771     }
27772
27773
27774File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
27775
277766.5 Constructing Function Calls
27777===============================
27778
27779Using the built-in functions described below, you can record the
27780arguments a function received, and call another function with the same
27781arguments, without knowing the number or types of the arguments.
27782
27783 You can also record the return value of that function call, and later
27784return that value, without knowing what data type the function tried to
27785return (as long as your caller expects that data type).
27786
27787 However, these built-in functions may interact badly with some
27788sophisticated features or other extensions of the language.  It is,
27789therefore, not recommended to use them outside very simple functions
27790acting as mere forwarders for their arguments.
27791
27792 -- Built-in Function: void * __builtin_apply_args ()
27793     This built-in function returns a pointer to data describing how to
27794     perform a call with the same arguments as are passed to the current
27795     function.
27796
27797     The function saves the arg pointer register, structure value
27798     address, and all registers that might be used to pass arguments to
27799     a function into a block of memory allocated on the stack.  Then it
27800     returns the address of that block.
27801
27802 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
27803          *ARGUMENTS, size_t SIZE)
27804     This built-in function invokes FUNCTION with a copy of the
27805     parameters described by ARGUMENTS and SIZE.
27806
27807     The value of ARGUMENTS should be the value returned by
27808     '__builtin_apply_args'.  The argument SIZE specifies the size of
27809     the stack argument data, in bytes.
27810
27811     This function returns a pointer to data describing how to return
27812     whatever value is returned by FUNCTION.  The data is saved in a
27813     block of memory allocated on the stack.
27814
27815     It is not always simple to compute the proper value for SIZE.  The
27816     value is used by '__builtin_apply' to compute the amount of data
27817     that should be pushed on the stack and copied from the incoming
27818     argument area.
27819
27820 -- Built-in Function: void __builtin_return (void *RESULT)
27821     This built-in function returns the value described by RESULT from
27822     the containing function.  You should specify, for RESULT, a value
27823     returned by '__builtin_apply'.
27824
27825 -- Built-in Function: __builtin_va_arg_pack ()
27826     This built-in function represents all anonymous arguments of an
27827     inline function.  It can be used only in inline functions that are
27828     always inlined, never compiled as a separate function, such as
27829     those using '__attribute__ ((__always_inline__))' or '__attribute__
27830     ((__gnu_inline__))' extern inline functions.  It must be only
27831     passed as last argument to some other function with variable
27832     arguments.  This is useful for writing small wrapper inlines for
27833     variable argument functions, when using preprocessor macros is
27834     undesirable.  For example:
27835          extern int myprintf (FILE *f, const char *format, ...);
27836          extern inline __attribute__ ((__gnu_inline__)) int
27837          myprintf (FILE *f, const char *format, ...)
27838          {
27839            int r = fprintf (f, "myprintf: ");
27840            if (r < 0)
27841              return r;
27842            int s = fprintf (f, format, __builtin_va_arg_pack ());
27843            if (s < 0)
27844              return s;
27845            return r + s;
27846          }
27847
27848 -- Built-in Function: size_t __builtin_va_arg_pack_len ()
27849     This built-in function returns the number of anonymous arguments of
27850     an inline function.  It can be used only in inline functions that
27851     are always inlined, never compiled as a separate function, such as
27852     those using '__attribute__ ((__always_inline__))' or '__attribute__
27853     ((__gnu_inline__))' extern inline functions.  For example following
27854     does link- or run-time checking of open arguments for optimized
27855     code:
27856          #ifdef __OPTIMIZE__
27857          extern inline __attribute__((__gnu_inline__)) int
27858          myopen (const char *path, int oflag, ...)
27859          {
27860            if (__builtin_va_arg_pack_len () > 1)
27861              warn_open_too_many_arguments ();
27862
27863            if (__builtin_constant_p (oflag))
27864              {
27865                if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
27866                  {
27867                    warn_open_missing_mode ();
27868                    return __open_2 (path, oflag);
27869                  }
27870                return open (path, oflag, __builtin_va_arg_pack ());
27871              }
27872
27873            if (__builtin_va_arg_pack_len () < 1)
27874              return __open_2 (path, oflag);
27875
27876            return open (path, oflag, __builtin_va_arg_pack ());
27877          }
27878          #endif
27879
27880
27881File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
27882
278836.6 Referring to a Type with 'typeof'
27884=====================================
27885
27886Another way to refer to the type of an expression is with 'typeof'.  The
27887syntax of using of this keyword looks like 'sizeof', but the construct
27888acts semantically like a type name defined with 'typedef'.
27889
27890 There are two ways of writing the argument to 'typeof': with an
27891expression or with a type.  Here is an example with an expression:
27892
27893     typeof (x[0](1))
27894
27895This assumes that 'x' is an array of pointers to functions; the type
27896described is that of the values of the functions.
27897
27898 Here is an example with a typename as the argument:
27899
27900     typeof (int *)
27901
27902Here the type described is that of pointers to 'int'.
27903
27904 If you are writing a header file that must work when included in ISO C
27905programs, write '__typeof__' instead of 'typeof'.  *Note Alternate
27906Keywords::.
27907
27908 A 'typeof' construct can be used anywhere a typedef name can be used.
27909For example, you can use it in a declaration, in a cast, or inside of
27910'sizeof' or 'typeof'.
27911
27912 The operand of 'typeof' is evaluated for its side effects if and only
27913if it is an expression of variably modified type or the name of such a
27914type.
27915
27916 'typeof' is often useful in conjunction with statement expressions
27917(*note Statement Exprs::).  Here is how the two together can be used to
27918define a safe "maximum" macro which operates on any arithmetic type and
27919evaluates each of its arguments exactly once:
27920
27921     #define max(a,b) \
27922       ({ typeof (a) _a = (a); \
27923           typeof (b) _b = (b); \
27924         _a > _b ? _a : _b; })
27925
27926 The reason for using names that start with underscores for the local
27927variables is to avoid conflicts with variable names that occur within
27928the expressions that are substituted for 'a' and 'b'.  Eventually we
27929hope to design a new form of declaration syntax that allows you to
27930declare variables whose scopes start only after their initializers; this
27931will be a more reliable way to prevent such conflicts.
27932
27933Some more examples of the use of 'typeof':
27934
27935   * This declares 'y' with the type of what 'x' points to.
27936
27937          typeof (*x) y;
27938
27939   * This declares 'y' as an array of such values.
27940
27941          typeof (*x) y[4];
27942
27943   * This declares 'y' as an array of pointers to characters:
27944
27945          typeof (typeof (char *)[4]) y;
27946
27947     It is equivalent to the following traditional C declaration:
27948
27949          char *y[4];
27950
27951     To see the meaning of the declaration using 'typeof', and why it
27952     might be a useful way to write, rewrite it with these macros:
27953
27954          #define pointer(T)  typeof(T *)
27955          #define array(T, N) typeof(T [N])
27956
27957     Now the declaration can be rewritten this way:
27958
27959          array (pointer (char), 4) y;
27960
27961     Thus, 'array (pointer (char), 4)' is the type of arrays of 4
27962     pointers to 'char'.
27963
27964 In GNU C, but not GNU C++, you may also declare the type of a variable
27965as '__auto_type'.  In that case, the declaration must declare only one
27966variable, whose declarator must just be an identifier, the declaration
27967must be initialized, and the type of the variable is determined by the
27968initializer; the name of the variable is not in scope until after the
27969initializer.  (In C++, you should use C++11 'auto' for this purpose.)
27970Using '__auto_type', the "maximum" macro above could be written as:
27971
27972     #define max(a,b) \
27973       ({ __auto_type _a = (a); \
27974           __auto_type _b = (b); \
27975         _a > _b ? _a : _b; })
27976
27977 Using '__auto_type' instead of 'typeof' has two advantages:
27978
27979   * Each argument to the macro appears only once in the expansion of
27980     the macro.  This prevents the size of the macro expansion growing
27981     exponentially when calls to such macros are nested inside arguments
27982     of such macros.
27983
27984   * If the argument to the macro has variably modified type, it is
27985     evaluated only once when using '__auto_type', but twice if 'typeof'
27986     is used.
27987
27988
27989File: gcc.info,  Node: Conditionals,  Next: __int128,  Prev: Typeof,  Up: C Extensions
27990
279916.7 Conditionals with Omitted Operands
27992======================================
27993
27994The middle operand in a conditional expression may be omitted.  Then if
27995the first operand is nonzero, its value is the value of the conditional
27996expression.
27997
27998 Therefore, the expression
27999
28000     x ? : y
28001
28002has the value of 'x' if that is nonzero; otherwise, the value of 'y'.
28003
28004 This example is perfectly equivalent to
28005
28006     x ? x : y
28007
28008In this simple case, the ability to omit the middle operand is not
28009especially useful.  When it becomes useful is when the first operand
28010does, or may (if it is a macro argument), contain a side effect.  Then
28011repeating the operand in the middle would perform the side effect twice.
28012Omitting the middle operand uses the value already computed without the
28013undesirable effects of recomputing it.
28014
28015
28016File: gcc.info,  Node: __int128,  Next: Long Long,  Prev: Conditionals,  Up: C Extensions
28017
280186.8 128-bit Integers
28019====================
28020
28021As an extension the integer scalar type '__int128' is supported for
28022targets which have an integer mode wide enough to hold 128 bits.  Simply
28023write '__int128' for a signed 128-bit integer, or 'unsigned __int128'
28024for an unsigned 128-bit integer.  There is no support in GCC for
28025expressing an integer constant of type '__int128' for targets with 'long
28026long' integer less than 128 bits wide.
28027
28028
28029File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: __int128,  Up: C Extensions
28030
280316.9 Double-Word Integers
28032========================
28033
28034ISO C99 supports data types for integers that are at least 64 bits wide,
28035and as an extension GCC supports them in C90 mode and in C++.  Simply
28036write 'long long int' for a signed integer, or 'unsigned long long int'
28037for an unsigned integer.  To make an integer constant of type 'long long
28038int', add the suffix 'LL' to the integer.  To make an integer constant
28039of type 'unsigned long long int', add the suffix 'ULL' to the integer.
28040
28041 You can use these types in arithmetic like any other integer types.
28042Addition, subtraction, and bitwise boolean operations on these types are
28043open-coded on all types of machines.  Multiplication is open-coded if
28044the machine supports a fullword-to-doubleword widening multiply
28045instruction.  Division and shifts are open-coded only on machines that
28046provide special support.  The operations that are not open-coded use
28047special library routines that come with GCC.
28048
28049 There may be pitfalls when you use 'long long' types for function
28050arguments without function prototypes.  If a function expects type 'int'
28051for its argument, and you pass a value of type 'long long int',
28052confusion results because the caller and the subroutine disagree about
28053the number of bytes for the argument.  Likewise, if the function expects
28054'long long int' and you pass 'int'.  The best way to avoid such problems
28055is to use prototypes.
28056
28057
28058File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: Long Long,  Up: C Extensions
28059
280606.10 Complex Numbers
28061====================
28062
28063ISO C99 supports complex floating data types, and as an extension GCC
28064supports them in C90 mode and in C++.  GCC also supports complex integer
28065data types which are not part of ISO C99.  You can declare complex types
28066using the keyword '_Complex'.  As an extension, the older GNU keyword
28067'__complex__' is also supported.
28068
28069 For example, '_Complex double x;' declares 'x' as a variable whose real
28070part and imaginary part are both of type 'double'.  '_Complex short int
28071y;' declares 'y' to have real and imaginary parts of type 'short int';
28072this is not likely to be useful, but it shows that the set of complex
28073types is complete.
28074
28075 To write a constant with a complex data type, use the suffix 'i' or 'j'
28076(either one; they are equivalent).  For example, '2.5fi' has type
28077'_Complex float' and '3i' has type '_Complex int'.  Such a constant
28078always has a pure imaginary value, but you can form any complex value
28079you like by adding one to a real constant.  This is a GNU extension; if
28080you have an ISO C99 conforming C library (such as the GNU C Library),
28081and want to construct complex constants of floating type, you should
28082include '<complex.h>' and use the macros 'I' or '_Complex_I' instead.
28083
28084 The ISO C++14 library also defines the 'i' suffix, so C++14 code that
28085includes the '<complex>' header cannot use 'i' for the GNU extension.
28086The 'j' suffix still has the GNU meaning.
28087
28088 To extract the real part of a complex-valued expression EXP, write
28089'__real__ EXP'.  Likewise, use '__imag__' to extract the imaginary part.
28090This is a GNU extension; for values of floating type, you should use the
28091ISO C99 functions 'crealf', 'creal', 'creall', 'cimagf', 'cimag' and
28092'cimagl', declared in '<complex.h>' and also provided as built-in
28093functions by GCC.
28094
28095 The operator '~' performs complex conjugation when used on a value with
28096a complex type.  This is a GNU extension; for values of floating type,
28097you should use the ISO C99 functions 'conjf', 'conj' and 'conjl',
28098declared in '<complex.h>' and also provided as built-in functions by
28099GCC.
28100
28101 GCC can allocate complex automatic variables in a noncontiguous
28102fashion; it's even possible for the real part to be in a register while
28103the imaginary part is on the stack (or vice versa).  Only the DWARF
28104debug info format can represent this, so use of DWARF is recommended.
28105If you are using the stabs debug info format, GCC describes a
28106noncontiguous complex variable as if it were two separate variables of
28107noncomplex type.  If the variable's actual name is 'foo', the two
28108fictitious variables are named 'foo$real' and 'foo$imag'.  You can
28109examine and set these two fictitious variables with your debugger.
28110
28111
28112File: gcc.info,  Node: Floating Types,  Next: Half-Precision,  Prev: Complex,  Up: C Extensions
28113
281146.11 Additional Floating Types
28115==============================
28116
28117ISO/IEC TS 18661-3:2015 defines C support for additional floating types
28118'_FloatN' and '_FloatNx', and GCC supports these type names; the set of
28119types supported depends on the target architecture.  These types are not
28120supported when compiling C++.  Constants with these types use suffixes
28121'fN' or 'FN' and 'fNx' or 'FNx'.  These type names can be used together
28122with '_Complex' to declare complex types.
28123
28124 As an extension, GNU C and GNU C++ support additional floating types,
28125which are not supported by all targets.
28126   * '__float128' is available on i386, x86_64, IA-64, and hppa HP-UX,
28127     as well as on PowerPC GNU/Linux targets that enable the vector
28128     scalar (VSX) instruction set.  '__float128' supports the 128-bit
28129     floating type.  On i386, x86_64, PowerPC, and IA-64 other than
28130     HP-UX, '__float128' is an alias for '_Float128'.  On hppa and IA-64
28131     HP-UX, '__float128' is an alias for 'long double'.
28132
28133   * '__float80' is available on the i386, x86_64, and IA-64 targets,
28134     and supports the 80-bit ('XFmode') floating type.  It is an alias
28135     for the type name '_Float64x' on these targets.
28136
28137   * '__ibm128' is available on PowerPC targets, and provides access to
28138     the IBM extended double format which is the current format used for
28139     'long double'.  When 'long double' transitions to '__float128' on
28140     PowerPC in the future, '__ibm128' will remain for use in
28141     conversions between the two types.
28142
28143 Support for these additional types includes the arithmetic operators:
28144add, subtract, multiply, divide; unary arithmetic operators; relational
28145operators; equality operators; and conversions to and from integer and
28146other floating types.  Use a suffix 'w' or 'W' in a literal constant of
28147type '__float80' or type '__ibm128'.  Use a suffix 'q' or 'Q' for
28148'_float128'.
28149
28150 In order to use '_Float128', '__float128', and '__ibm128' on PowerPC
28151Linux systems, you must use the '-mfloat128' option.  It is expected in
28152future versions of GCC that '_Float128' and '__float128' will be enabled
28153automatically.
28154
28155 The '_Float128' type is supported on all systems where '__float128' is
28156supported or where 'long double' has the IEEE binary128 format.  The
28157'_Float64x' type is supported on all systems where '__float128' is
28158supported.  The '_Float32' type is supported on all systems supporting
28159IEEE binary32; the '_Float64' and '_Float32x' types are supported on all
28160systems supporting IEEE binary64.  The '_Float16' type is supported on
28161AArch64 systems by default, and on ARM systems when the IEEE format for
2816216-bit floating-point types is selected with '-mfp16-format=ieee'.  GCC
28163does not currently support '_Float128x' on any systems.
28164
28165 On the i386, x86_64, IA-64, and HP-UX targets, you can declare complex
28166types using the corresponding internal complex type, 'XCmode' for
28167'__float80' type and 'TCmode' for '__float128' type:
28168
28169     typedef _Complex float __attribute__((mode(TC))) _Complex128;
28170     typedef _Complex float __attribute__((mode(XC))) _Complex80;
28171
28172 On the PowerPC Linux VSX targets, you can declare complex types using
28173the corresponding internal complex type, 'KCmode' for '__float128' type
28174and 'ICmode' for '__ibm128' type:
28175
28176     typedef _Complex float __attribute__((mode(KC))) _Complex_float128;
28177     typedef _Complex float __attribute__((mode(IC))) _Complex_ibm128;
28178
28179
28180File: gcc.info,  Node: Half-Precision,  Next: Decimal Float,  Prev: Floating Types,  Up: C Extensions
28181
281826.12 Half-Precision Floating Point
28183==================================
28184
28185On ARM and AArch64 targets, GCC supports half-precision (16-bit)
28186floating point via the '__fp16' type defined in the ARM C Language
28187Extensions.  On ARM systems, you must enable this type explicitly with
28188the '-mfp16-format' command-line option in order to use it.
28189
28190 ARM targets support two incompatible representations for half-precision
28191floating-point values.  You must choose one of the representations and
28192use it consistently in your program.
28193
28194 Specifying '-mfp16-format=ieee' selects the IEEE 754-2008 format.  This
28195format can represent normalized values in the range of 2^{-14} to 65504.
28196There are 11 bits of significand precision, approximately 3 decimal
28197digits.
28198
28199 Specifying '-mfp16-format=alternative' selects the ARM alternative
28200format.  This representation is similar to the IEEE format, but does not
28201support infinities or NaNs.  Instead, the range of exponents is
28202extended, so that this format can represent normalized values in the
28203range of 2^{-14} to 131008.
28204
28205 The GCC port for AArch64 only supports the IEEE 754-2008 format, and
28206does not require use of the '-mfp16-format' command-line option.
28207
28208 The '__fp16' type may only be used as an argument to intrinsics defined
28209in '<arm_fp16.h>', or as a storage format.  For purposes of arithmetic
28210and other operations, '__fp16' values in C or C++ expressions are
28211automatically promoted to 'float'.
28212
28213 The ARM target provides hardware support for conversions between
28214'__fp16' and 'float' values as an extension to VFP and NEON (Advanced
28215SIMD), and from ARMv8-A provides hardware support for conversions
28216between '__fp16' and 'double' values.  GCC generates code using these
28217hardware instructions if you compile with options to select an FPU that
28218provides them; for example, '-mfpu=neon-fp16 -mfloat-abi=softfp', in
28219addition to the '-mfp16-format' option to select a half-precision
28220format.
28221
28222 Language-level support for the '__fp16' data type is independent of
28223whether GCC generates code using hardware floating-point instructions.
28224In cases where hardware support is not specified, GCC implements
28225conversions between '__fp16' and other types as library calls.
28226
28227 It is recommended that portable code use the '_Float16' type defined by
28228ISO/IEC TS 18661-3:2015.  *Note Floating Types::.
28229
28230
28231File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Half-Precision,  Up: C Extensions
28232
282336.13 Decimal Floating Types
28234===========================
28235
28236As an extension, GNU C supports decimal floating types as defined in the
28237N1312 draft of ISO/IEC WDTR24732.  Support for decimal floating types in
28238GCC will evolve as the draft technical report changes.  Calling
28239conventions for any target might also change.  Not all targets support
28240decimal floating types.
28241
28242 The decimal floating types are '_Decimal32', '_Decimal64', and
28243'_Decimal128'.  They use a radix of ten, unlike the floating types
28244'float', 'double', and 'long double' whose radix is not specified by the
28245C standard but is usually two.
28246
28247 Support for decimal floating types includes the arithmetic operators
28248add, subtract, multiply, divide; unary arithmetic operators; relational
28249operators; equality operators; and conversions to and from integer and
28250other floating types.  Use a suffix 'df' or 'DF' in a literal constant
28251of type '_Decimal32', 'dd' or 'DD' for '_Decimal64', and 'dl' or 'DL'
28252for '_Decimal128'.
28253
28254 GCC support of decimal float as specified by the draft technical report
28255is incomplete:
28256
28257   * When the value of a decimal floating type cannot be represented in
28258     the integer type to which it is being converted, the result is
28259     undefined rather than the result value specified by the draft
28260     technical report.
28261
28262   * GCC does not provide the C library functionality associated with
28263     'math.h', 'fenv.h', 'stdio.h', 'stdlib.h', and 'wchar.h', which
28264     must come from a separate C library implementation.  Because of
28265     this the GNU C compiler does not define macro '__STDC_DEC_FP__' to
28266     indicate that the implementation conforms to the technical report.
28267
28268 Types '_Decimal32', '_Decimal64', and '_Decimal128' are supported by
28269the DWARF debug information format.
28270
28271
28272File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
28273
282746.14 Hex Floats
28275===============
28276
28277ISO C99 supports floating-point numbers written not only in the usual
28278decimal notation, such as '1.55e1', but also numbers such as '0x1.fp3'
28279written in hexadecimal format.  As a GNU extension, GCC supports this in
28280C90 mode (except in some cases when strictly conforming) and in C++.  In
28281that format the '0x' hex introducer and the 'p' or 'P' exponent field
28282are mandatory.  The exponent is a decimal number that indicates the
28283power of 2 by which the significant part is multiplied.  Thus '0x1.f' is
282841 15/16, 'p3' multiplies it by 8, and the value of '0x1.fp3' is the same
28285as '1.55e1'.
28286
28287 Unlike for floating-point numbers in the decimal notation the exponent
28288is always required in the hexadecimal notation.  Otherwise the compiler
28289would not be able to resolve the ambiguity of, e.g., '0x1.f'.  This
28290could mean '1.0f' or '1.9375' since 'f' is also the extension for
28291floating-point constants of type 'float'.
28292
28293
28294File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
28295
282966.15 Fixed-Point Types
28297======================
28298
28299As an extension, GNU C supports fixed-point types as defined in the
28300N1169 draft of ISO/IEC DTR 18037.  Support for fixed-point types in GCC
28301will evolve as the draft technical report changes.  Calling conventions
28302for any target might also change.  Not all targets support fixed-point
28303types.
28304
28305 The fixed-point types are 'short _Fract', '_Fract', 'long _Fract',
28306'long long _Fract', 'unsigned short _Fract', 'unsigned _Fract',
28307'unsigned long _Fract', 'unsigned long long _Fract', '_Sat short
28308_Fract', '_Sat _Fract', '_Sat long _Fract', '_Sat long long _Fract',
28309'_Sat unsigned short _Fract', '_Sat unsigned _Fract', '_Sat unsigned
28310long _Fract', '_Sat unsigned long long _Fract', 'short _Accum',
28311'_Accum', 'long _Accum', 'long long _Accum', 'unsigned short _Accum',
28312'unsigned _Accum', 'unsigned long _Accum', 'unsigned long long _Accum',
28313'_Sat short _Accum', '_Sat _Accum', '_Sat long _Accum', '_Sat long long
28314_Accum', '_Sat unsigned short _Accum', '_Sat unsigned _Accum', '_Sat
28315unsigned long _Accum', '_Sat unsigned long long _Accum'.
28316
28317 Fixed-point data values contain fractional and optional integral parts.
28318The format of fixed-point data varies and depends on the target machine.
28319
28320 Support for fixed-point types includes:
28321   * prefix and postfix increment and decrement operators ('++', '--')
28322   * unary arithmetic operators ('+', '-', '!')
28323   * binary arithmetic operators ('+', '-', '*', '/')
28324   * binary shift operators ('<<', '>>')
28325   * relational operators ('<', '<=', '>=', '>')
28326   * equality operators ('==', '!=')
28327   * assignment operators ('+=', '-=', '*=', '/=', '<<=', '>>=')
28328   * conversions to and from integer, floating-point, or fixed-point
28329     types
28330
28331 Use a suffix in a fixed-point literal constant:
28332   * 'hr' or 'HR' for 'short _Fract' and '_Sat short _Fract'
28333   * 'r' or 'R' for '_Fract' and '_Sat _Fract'
28334   * 'lr' or 'LR' for 'long _Fract' and '_Sat long _Fract'
28335   * 'llr' or 'LLR' for 'long long _Fract' and '_Sat long long _Fract'
28336   * 'uhr' or 'UHR' for 'unsigned short _Fract' and '_Sat unsigned short
28337     _Fract'
28338   * 'ur' or 'UR' for 'unsigned _Fract' and '_Sat unsigned _Fract'
28339   * 'ulr' or 'ULR' for 'unsigned long _Fract' and '_Sat unsigned long
28340     _Fract'
28341   * 'ullr' or 'ULLR' for 'unsigned long long _Fract' and '_Sat unsigned
28342     long long _Fract'
28343   * 'hk' or 'HK' for 'short _Accum' and '_Sat short _Accum'
28344   * 'k' or 'K' for '_Accum' and '_Sat _Accum'
28345   * 'lk' or 'LK' for 'long _Accum' and '_Sat long _Accum'
28346   * 'llk' or 'LLK' for 'long long _Accum' and '_Sat long long _Accum'
28347   * 'uhk' or 'UHK' for 'unsigned short _Accum' and '_Sat unsigned short
28348     _Accum'
28349   * 'uk' or 'UK' for 'unsigned _Accum' and '_Sat unsigned _Accum'
28350   * 'ulk' or 'ULK' for 'unsigned long _Accum' and '_Sat unsigned long
28351     _Accum'
28352   * 'ullk' or 'ULLK' for 'unsigned long long _Accum' and '_Sat unsigned
28353     long long _Accum'
28354
28355 GCC support of fixed-point types as specified by the draft technical
28356report is incomplete:
28357
28358   * Pragmas to control overflow and rounding behaviors are not
28359     implemented.
28360
28361 Fixed-point types are supported by the DWARF debug information format.
28362
28363
28364File: gcc.info,  Node: Named Address Spaces,  Next: Zero Length,  Prev: Fixed-Point,  Up: C Extensions
28365
283666.16 Named Address Spaces
28367=========================
28368
28369As an extension, GNU C supports named address spaces as defined in the
28370N1275 draft of ISO/IEC DTR 18037.  Support for named address spaces in
28371GCC will evolve as the draft technical report changes.  Calling
28372conventions for any target might also change.  At present, only the AVR,
28373SPU, M32C, RL78, and x86 targets support address spaces other than the
28374generic address space.
28375
28376 Address space identifiers may be used exactly like any other C type
28377qualifier (e.g., 'const' or 'volatile').  See the N1275 document for
28378more details.
28379
283806.16.1 AVR Named Address Spaces
28381-------------------------------
28382
28383On the AVR target, there are several address spaces that can be used in
28384order to put read-only data into the flash memory and access that data
28385by means of the special instructions 'LPM' or 'ELPM' needed to read from
28386flash.
28387
28388 Devices belonging to 'avrtiny' and 'avrxmega3' can access flash memory
28389by means of 'LD*' instructions because the flash memory is mapped into
28390the RAM address space.  There is _no need_ for language extensions like
28391'__flash' or attribute *note 'progmem': AVR Variable Attributes.  The
28392default linker description files for these devices cater for that
28393feature and '.rodata' stays in flash: The compiler just generates 'LD*'
28394instructions, and the linker script adds core specific offsets to all
28395'.rodata' symbols: '0x4000' in the case of 'avrtiny' and '0x8000' in the
28396case of 'avrxmega3'.  See *note AVR Options:: for a list of respective
28397devices.
28398
28399 For devices not in 'avrtiny' or 'avrxmega3', any data including
28400read-only data is located in RAM (the generic address space) because
28401flash memory is not visible in the RAM address space.  In order to
28402locate read-only data in flash memory _and_ to generate the right
28403instructions to access this data without using (inline) assembler code,
28404special address spaces are needed.
28405
28406'__flash'
28407     The '__flash' qualifier locates data in the '.progmem.data'
28408     section.  Data is read using the 'LPM' instruction.  Pointers to
28409     this address space are 16 bits wide.
28410
28411'__flash1'
28412'__flash2'
28413'__flash3'
28414'__flash4'
28415'__flash5'
28416     These are 16-bit address spaces locating data in section
28417     '.progmemN.data' where N refers to address space '__flashN'.  The
28418     compiler sets the 'RAMPZ' segment register appropriately before
28419     reading data by means of the 'ELPM' instruction.
28420
28421'__memx'
28422     This is a 24-bit address space that linearizes flash and RAM: If
28423     the high bit of the address is set, data is read from RAM using the
28424     lower two bytes as RAM address.  If the high bit of the address is
28425     clear, data is read from flash with 'RAMPZ' set according to the
28426     high byte of the address.  *Note '__builtin_avr_flash_segment': AVR
28427     Built-in Functions.
28428
28429     Objects in this address space are located in '.progmemx.data'.
28430
28431 Example
28432
28433     char my_read (const __flash char ** p)
28434     {
28435         /* p is a pointer to RAM that points to a pointer to flash.
28436            The first indirection of p reads that flash pointer
28437            from RAM and the second indirection reads a char from this
28438            flash address.  */
28439
28440         return **p;
28441     }
28442
28443     /* Locate array[] in flash memory */
28444     const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 };
28445
28446     int i = 1;
28447
28448     int main (void)
28449     {
28450        /* Return 17 by reading from flash memory */
28451        return array[array[i]];
28452     }
28453
28454For each named address space supported by avr-gcc there is an equally
28455named but uppercase built-in macro defined.  The purpose is to
28456facilitate testing if respective address space support is available or
28457not:
28458
28459     #ifdef __FLASH
28460     const __flash int var = 1;
28461
28462     int read_var (void)
28463     {
28464         return var;
28465     }
28466     #else
28467     #include <avr/pgmspace.h> /* From AVR-LibC */
28468
28469     const int var PROGMEM = 1;
28470
28471     int read_var (void)
28472     {
28473         return (int) pgm_read_word (&var);
28474     }
28475     #endif /* __FLASH */
28476
28477Notice that attribute *note 'progmem': AVR Variable Attributes. locates
28478data in flash but accesses to these data read from generic address
28479space, i.e. from RAM, so that you need special accessors like
28480'pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/)
28481together with attribute 'progmem'.
28482
28483Limitations and caveats
28484
28485   * Reading across the 64 KiB section boundary of the '__flash' or
28486     '__flashN' address spaces shows undefined behavior.  The only
28487     address space that supports reading across the 64 KiB flash segment
28488     boundaries is '__memx'.
28489
28490   * If you use one of the '__flashN' address spaces you must arrange
28491     your linker script to locate the '.progmemN.data' sections
28492     according to your needs.
28493
28494   * Any data or pointers to the non-generic address spaces must be
28495     qualified as 'const', i.e. as read-only data.  This still applies
28496     if the data in one of these address spaces like software version
28497     number or calibration lookup table are intended to be changed after
28498     load time by, say, a boot loader.  In this case the right
28499     qualification is 'const' 'volatile' so that the compiler must not
28500     optimize away known values or insert them as immediates into
28501     operands of instructions.
28502
28503   * The following code initializes a variable 'pfoo' located in static
28504     storage with a 24-bit address:
28505          extern const __memx char foo;
28506          const __memx void *pfoo = &foo;
28507
28508   * On the reduced Tiny devices like ATtiny40, no address spaces are
28509     supported.  Just use vanilla C / C++ code without overhead as
28510     outlined above.  Attribute 'progmem' is supported but works
28511     differently, see *note AVR Variable Attributes::.
28512
285136.16.2 M32C Named Address Spaces
28514--------------------------------
28515
28516On the M32C target, with the R8C and M16C CPU variants, variables
28517qualified with '__far' are accessed using 32-bit addresses in order to
28518access memory beyond the first 64 Ki bytes.  If '__far' is used with the
28519M32CM or M32C CPU variants, it has no effect.
28520
285216.16.3 RL78 Named Address Spaces
28522--------------------------------
28523
28524On the RL78 target, variables qualified with '__far' are accessed with
2852532-bit pointers (20-bit addresses) rather than the default 16-bit
28526addresses.  Non-far variables are assumed to appear in the topmost
2852764 KiB of the address space.
28528
285296.16.4 SPU Named Address Spaces
28530-------------------------------
28531
28532On the SPU target variables may be declared as belonging to another
28533address space by qualifying the type with the '__ea' address space
28534identifier:
28535
28536     extern int __ea i;
28537
28538The compiler generates special code to access the variable 'i'.  It may
28539use runtime library support, or generate special machine instructions to
28540access that address space.
28541
285426.16.5 x86 Named Address Spaces
28543-------------------------------
28544
28545On the x86 target, variables may be declared as being relative to the
28546'%fs' or '%gs' segments.
28547
28548'__seg_fs'
28549'__seg_gs'
28550     The object is accessed with the respective segment override prefix.
28551
28552     The respective segment base must be set via some method specific to
28553     the operating system.  Rather than require an expensive system call
28554     to retrieve the segment base, these address spaces are not
28555     considered to be subspaces of the generic (flat) address space.
28556     This means that explicit casts are required to convert pointers
28557     between these address spaces and the generic address space.  In
28558     practice the application should cast to 'uintptr_t' and apply the
28559     segment base offset that it installed previously.
28560
28561     The preprocessor symbols '__SEG_FS' and '__SEG_GS' are defined when
28562     these address spaces are supported.
28563
28564
28565File: gcc.info,  Node: Zero Length,  Next: Empty Structures,  Prev: Named Address Spaces,  Up: C Extensions
28566
285676.17 Arrays of Length Zero
28568==========================
28569
28570Zero-length arrays are allowed in GNU C.  They are very useful as the
28571last element of a structure that is really a header for a
28572variable-length object:
28573
28574     struct line {
28575       int length;
28576       char contents[0];
28577     };
28578
28579     struct line *thisline = (struct line *)
28580       malloc (sizeof (struct line) + this_length);
28581     thisline->length = this_length;
28582
28583 In ISO C90, you would have to give 'contents' a length of 1, which
28584means either you waste space or complicate the argument to 'malloc'.
28585
28586 In ISO C99, you would use a "flexible array member", which is slightly
28587different in syntax and semantics:
28588
28589   * Flexible array members are written as 'contents[]' without the '0'.
28590
28591   * Flexible array members have incomplete type, and so the 'sizeof'
28592     operator may not be applied.  As a quirk of the original
28593     implementation of zero-length arrays, 'sizeof' evaluates to zero.
28594
28595   * Flexible array members may only appear as the last member of a
28596     'struct' that is otherwise non-empty.
28597
28598   * A structure containing a flexible array member, or a union
28599     containing such a structure (possibly recursively), may not be a
28600     member of a structure or an element of an array.  (However, these
28601     uses are permitted by GCC as extensions.)
28602
28603 Non-empty initialization of zero-length arrays is treated like any case
28604where there are more initializer elements than the array holds, in that
28605a suitable warning about "excess elements in array" is given, and the
28606excess elements (all of them, in this case) are ignored.
28607
28608 GCC allows static initialization of flexible array members.  This is
28609equivalent to defining a new structure containing the original structure
28610followed by an array of sufficient size to contain the data.  E.g. in
28611the following, 'f1' is constructed as if it were declared like 'f2'.
28612
28613     struct f1 {
28614       int x; int y[];
28615     } f1 = { 1, { 2, 3, 4 } };
28616
28617     struct f2 {
28618       struct f1 f1; int data[3];
28619     } f2 = { { 1 }, { 2, 3, 4 } };
28620
28621The convenience of this extension is that 'f1' has the desired type,
28622eliminating the need to consistently refer to 'f2.f1'.
28623
28624 This has symmetry with normal static arrays, in that an array of
28625unknown size is also written with '[]'.
28626
28627 Of course, this extension only makes sense if the extra data comes at
28628the end of a top-level object, as otherwise we would be overwriting data
28629at subsequent offsets.  To avoid undue complication and confusion with
28630initialization of deeply nested arrays, we simply disallow any non-empty
28631initialization except when the structure is the top-level object.  For
28632example:
28633
28634     struct foo { int x; int y[]; };
28635     struct bar { struct foo z; };
28636
28637     struct foo a = { 1, { 2, 3, 4 } };        // Valid.
28638     struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
28639     struct bar c = { { 1, { } } };            // Valid.
28640     struct foo d[1] = { { 1, { 2, 3, 4 } } };  // Invalid.
28641
28642
28643File: gcc.info,  Node: Empty Structures,  Next: Variable Length,  Prev: Zero Length,  Up: C Extensions
28644
286456.18 Structures with No Members
28646===============================
28647
28648GCC permits a C structure to have no members:
28649
28650     struct empty {
28651     };
28652
28653 The structure has size zero.  In C++, empty structures are part of the
28654language.  G++ treats empty structures as if they had a single member of
28655type 'char'.
28656
28657
28658File: gcc.info,  Node: Variable Length,  Next: Variadic Macros,  Prev: Empty Structures,  Up: C Extensions
28659
286606.19 Arrays of Variable Length
28661==============================
28662
28663Variable-length automatic arrays are allowed in ISO C99, and as an
28664extension GCC accepts them in C90 mode and in C++.  These arrays are
28665declared like any other automatic arrays, but with a length that is not
28666a constant expression.  The storage is allocated at the point of
28667declaration and deallocated when the block scope containing the
28668declaration exits.  For example:
28669
28670     FILE *
28671     concat_fopen (char *s1, char *s2, char *mode)
28672     {
28673       char str[strlen (s1) + strlen (s2) + 1];
28674       strcpy (str, s1);
28675       strcat (str, s2);
28676       return fopen (str, mode);
28677     }
28678
28679 Jumping or breaking out of the scope of the array name deallocates the
28680storage.  Jumping into the scope is not allowed; you get an error
28681message for it.
28682
28683 As an extension, GCC accepts variable-length arrays as a member of a
28684structure or a union.  For example:
28685
28686     void
28687     foo (int n)
28688     {
28689       struct S { int x[n]; };
28690     }
28691
28692 You can use the function 'alloca' to get an effect much like
28693variable-length arrays.  The function 'alloca' is available in many
28694other C implementations (but not in all).  On the other hand,
28695variable-length arrays are more elegant.
28696
28697 There are other differences between these two methods.  Space allocated
28698with 'alloca' exists until the containing _function_ returns.  The space
28699for a variable-length array is deallocated as soon as the array name's
28700scope ends, unless you also use 'alloca' in this scope.
28701
28702 You can also use variable-length arrays as arguments to functions:
28703
28704     struct entry
28705     tester (int len, char data[len][len])
28706     {
28707       /* ... */
28708     }
28709
28710 The length of an array is computed once when the storage is allocated
28711and is remembered for the scope of the array in case you access it with
28712'sizeof'.
28713
28714 If you want to pass the array first and the length afterward, you can
28715use a forward declaration in the parameter list--another GNU extension.
28716
28717     struct entry
28718     tester (int len; char data[len][len], int len)
28719     {
28720       /* ... */
28721     }
28722
28723 The 'int len' before the semicolon is a "parameter forward
28724declaration", and it serves the purpose of making the name 'len' known
28725when the declaration of 'data' is parsed.
28726
28727 You can write any number of such parameter forward declarations in the
28728parameter list.  They can be separated by commas or semicolons, but the
28729last one must end with a semicolon, which is followed by the "real"
28730parameter declarations.  Each forward declaration must match a "real"
28731declaration in parameter name and data type.  ISO C99 does not support
28732parameter forward declarations.
28733
28734
28735File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Variable Length,  Up: C Extensions
28736
287376.20 Macros with a Variable Number of Arguments.
28738================================================
28739
28740In the ISO C standard of 1999, a macro can be declared to accept a
28741variable number of arguments much as a function can.  The syntax for
28742defining the macro is similar to that of a function.  Here is an
28743example:
28744
28745     #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
28746
28747Here '...' is a "variable argument".  In the invocation of such a macro,
28748it represents the zero or more tokens until the closing parenthesis that
28749ends the invocation, including any commas.  This set of tokens replaces
28750the identifier '__VA_ARGS__' in the macro body wherever it appears.  See
28751the CPP manual for more information.
28752
28753 GCC has long supported variadic macros, and used a different syntax
28754that allowed you to give a name to the variable arguments just like any
28755other argument.  Here is an example:
28756
28757     #define debug(format, args...) fprintf (stderr, format, args)
28758
28759This is in all ways equivalent to the ISO C example above, but arguably
28760more readable and descriptive.
28761
28762 GNU CPP has two further variadic macro extensions, and permits them to
28763be used with either of the above forms of macro definition.
28764
28765 In standard C, you are not allowed to leave the variable argument out
28766entirely; but you are allowed to pass an empty argument.  For example,
28767this invocation is invalid in ISO C, because there is no comma after the
28768string:
28769
28770     debug ("A message")
28771
28772 GNU CPP permits you to completely omit the variable arguments in this
28773way.  In the above examples, the compiler would complain, though since
28774the expansion of the macro still has the extra comma after the format
28775string.
28776
28777 To help solve this problem, CPP behaves specially for variable
28778arguments used with the token paste operator, '##'.  If instead you
28779write
28780
28781     #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
28782
28783and if the variable arguments are omitted or empty, the '##' operator
28784causes the preprocessor to remove the comma before it.  If you do
28785provide some variable arguments in your macro invocation, GNU CPP does
28786not complain about the paste operation and instead places the variable
28787arguments after the comma.  Just like any other pasted macro argument,
28788these arguments are not macro expanded.
28789
28790
28791File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
28792
287936.21 Slightly Looser Rules for Escaped Newlines
28794===============================================
28795
28796The preprocessor treatment of escaped newlines is more relaxed than that
28797specified by the C90 standard, which requires the newline to immediately
28798follow a backslash.  GCC's implementation allows whitespace in the form
28799of spaces, horizontal and vertical tabs, and form feeds between the
28800backslash and the subsequent newline.  The preprocessor issues a
28801warning, but treats it as a valid escaped newline and combines the two
28802lines to form a single logical line.  This works within comments and
28803tokens, as well as between tokens.  Comments are _not_ treated as
28804whitespace for the purposes of this relaxation, since they have not yet
28805been replaced with spaces.
28806
28807
28808File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
28809
288106.22 Non-Lvalue Arrays May Have Subscripts
28811==========================================
28812
28813In ISO C99, arrays that are not lvalues still decay to pointers, and may
28814be subscripted, although they may not be modified or used after the next
28815sequence point and the unary '&' operator may not be applied to them.
28816As an extension, GNU C allows such arrays to be subscripted in C90 mode,
28817though otherwise they do not decay to pointers outside C99 mode.  For
28818example, this is valid in GNU C though not valid in C90:
28819
28820     struct foo {int a[4];};
28821
28822     struct foo f();
28823
28824     bar (int index)
28825     {
28826       return f().a[index];
28827     }
28828
28829
28830File: gcc.info,  Node: Pointer Arith,  Next: Pointers to Arrays,  Prev: Subscripting,  Up: C Extensions
28831
288326.23 Arithmetic on 'void'- and Function-Pointers
28833================================================
28834
28835In GNU C, addition and subtraction operations are supported on pointers
28836to 'void' and on pointers to functions.  This is done by treating the
28837size of a 'void' or of a function as 1.
28838
28839 A consequence of this is that 'sizeof' is also allowed on 'void' and on
28840function types, and returns 1.
28841
28842 The option '-Wpointer-arith' requests a warning if these extensions are
28843used.
28844
28845
28846File: gcc.info,  Node: Pointers to Arrays,  Next: Initializers,  Prev: Pointer Arith,  Up: C Extensions
28847
288486.24 Pointers to Arrays with Qualifiers Work as Expected
28849========================================================
28850
28851In GNU C, pointers to arrays with qualifiers work similar to pointers to
28852other qualified types.  For example, a value of type 'int (*)[5]' can be
28853used to initialize a variable of type 'const int (*)[5]'.  These types
28854are incompatible in ISO C because the 'const' qualifier is formally
28855attached to the element type of the array and not the array itself.
28856
28857     extern void
28858     transpose (int N, int M, double out[M][N], const double in[N][M]);
28859     double x[3][2];
28860     double y[2][3];
28861     ...
28862     transpose(3, 2, y, x);
28863
28864
28865File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointers to Arrays,  Up: C Extensions
28866
288676.25 Non-Constant Initializers
28868==============================
28869
28870As in standard C++ and ISO C99, the elements of an aggregate initializer
28871for an automatic variable are not required to be constant expressions in
28872GNU C.  Here is an example of an initializer with run-time varying
28873elements:
28874
28875     foo (float f, float g)
28876     {
28877       float beat_freqs[2] = { f-g, f+g };
28878       /* ... */
28879     }
28880
28881
28882File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
28883
288846.26 Compound Literals
28885======================
28886
28887A compound literal looks like a cast of a brace-enclosed aggregate
28888initializer list.  Its value is an object of the type specified in the
28889cast, containing the elements specified in the initializer.  Unlike the
28890result of a cast, a compound literal is an lvalue.  ISO C99 and later
28891support compound literals.  As an extension, GCC supports compound
28892literals also in C90 mode and in C++, although as explained below, the
28893C++ semantics are somewhat different.
28894
28895 Usually, the specified type of a compound literal is a structure.
28896Assume that 'struct foo' and 'structure' are declared as shown:
28897
28898     struct foo {int a; char b[2];} structure;
28899
28900Here is an example of constructing a 'struct foo' with a compound
28901literal:
28902
28903     structure = ((struct foo) {x + y, 'a', 0});
28904
28905This is equivalent to writing the following:
28906
28907     {
28908       struct foo temp = {x + y, 'a', 0};
28909       structure = temp;
28910     }
28911
28912 You can also construct an array, though this is dangerous in C++, as
28913explained below.  If all the elements of the compound literal are (made
28914up of) simple constant expressions suitable for use in initializers of
28915objects of static storage duration, then the compound literal can be
28916coerced to a pointer to its first element and used in such an
28917initializer, as shown here:
28918
28919     char **foo = (char *[]) { "x", "y", "z" };
28920
28921 Compound literals for scalar types and union types are also allowed.
28922In the following example the variable 'i' is initialized to the value
28923'2', the result of incrementing the unnamed object created by the
28924compound literal.
28925
28926     int i = ++(int) { 1 };
28927
28928 As a GNU extension, GCC allows initialization of objects with static
28929storage duration by compound literals (which is not possible in ISO C99
28930because the initializer is not a constant).  It is handled as if the
28931object were initialized only with the brace-enclosed list if the types
28932of the compound literal and the object match.  The elements of the
28933compound literal must be constant.  If the object being initialized has
28934array type of unknown size, the size is determined by the size of the
28935compound literal.
28936
28937     static struct foo x = (struct foo) {1, 'a', 'b'};
28938     static int y[] = (int []) {1, 2, 3};
28939     static int z[] = (int [3]) {1};
28940
28941The above lines are equivalent to the following:
28942     static struct foo x = {1, 'a', 'b'};
28943     static int y[] = {1, 2, 3};
28944     static int z[] = {1, 0, 0};
28945
28946 In C, a compound literal designates an unnamed object with static or
28947automatic storage duration.  In C++, a compound literal designates a
28948temporary object that only lives until the end of its full-expression.
28949As a result, well-defined C code that takes the address of a subobject
28950of a compound literal can be undefined in C++, so G++ rejects the
28951conversion of a temporary array to a pointer.  For instance, if the
28952array compound literal example above appeared inside a function, any
28953subsequent use of 'foo' in C++ would have undefined behavior because the
28954lifetime of the array ends after the declaration of 'foo'.
28955
28956 As an optimization, G++ sometimes gives array compound literals longer
28957lifetimes: when the array either appears outside a function or has a
28958'const'-qualified type.  If 'foo' and its initializer had elements of
28959type 'char *const' rather than 'char *', or if 'foo' were a global
28960variable, the array would have static storage duration.  But it is
28961probably safest just to avoid the use of array compound literals in C++
28962code.
28963
28964
28965File: gcc.info,  Node: Designated Inits,  Next: Case Ranges,  Prev: Compound Literals,  Up: C Extensions
28966
289676.27 Designated Initializers
28968============================
28969
28970Standard C90 requires the elements of an initializer to appear in a
28971fixed order, the same as the order of the elements in the array or
28972structure being initialized.
28973
28974 In ISO C99 you can give the elements in any order, specifying the array
28975indices or structure field names they apply to, and GNU C allows this as
28976an extension in C90 mode as well.  This extension is not implemented in
28977GNU C++.
28978
28979 To specify an array index, write '[INDEX] =' before the element value.
28980For example,
28981
28982     int a[6] = { [4] = 29, [2] = 15 };
28983
28984is equivalent to
28985
28986     int a[6] = { 0, 0, 15, 0, 29, 0 };
28987
28988The index values must be constant expressions, even if the array being
28989initialized is automatic.
28990
28991 An alternative syntax for this that has been obsolete since GCC 2.5 but
28992GCC still accepts is to write '[INDEX]' before the element value, with
28993no '='.
28994
28995 To initialize a range of elements to the same value, write '[FIRST ...
28996LAST] = VALUE'.  This is a GNU extension.  For example,
28997
28998     int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
28999
29000If the value in it has side effects, the side effects happen only once,
29001not for each initialized field by the range initializer.
29002
29003Note that the length of the array is the highest value specified plus
29004one.
29005
29006 In a structure initializer, specify the name of a field to initialize
29007with '.FIELDNAME =' before the element value.  For example, given the
29008following structure,
29009
29010     struct point { int x, y; };
29011
29012the following initialization
29013
29014     struct point p = { .y = yvalue, .x = xvalue };
29015
29016is equivalent to
29017
29018     struct point p = { xvalue, yvalue };
29019
29020 Another syntax that has the same meaning, obsolete since GCC 2.5, is
29021'FIELDNAME:', as shown here:
29022
29023     struct point p = { y: yvalue, x: xvalue };
29024
29025 Omitted field members are implicitly initialized the same as objects
29026that have static storage duration.
29027
29028 The '[INDEX]' or '.FIELDNAME' is known as a "designator".  You can also
29029use a designator (or the obsolete colon syntax) when initializing a
29030union, to specify which element of the union should be used.  For
29031example,
29032
29033     union foo { int i; double d; };
29034
29035     union foo f = { .d = 4 };
29036
29037converts 4 to a 'double' to store it in the union using the second
29038element.  By contrast, casting 4 to type 'union foo' stores it into the
29039union as the integer 'i', since it is an integer.  *Note Cast to
29040Union::.
29041
29042 You can combine this technique of naming elements with ordinary C
29043initialization of successive elements.  Each initializer element that
29044does not have a designator applies to the next consecutive element of
29045the array or structure.  For example,
29046
29047     int a[6] = { [1] = v1, v2, [4] = v4 };
29048
29049is equivalent to
29050
29051     int a[6] = { 0, v1, v2, 0, v4, 0 };
29052
29053 Labeling the elements of an array initializer is especially useful when
29054the indices are characters or belong to an 'enum' type.  For example:
29055
29056     int whitespace[256]
29057       = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
29058           ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
29059
29060 You can also write a series of '.FIELDNAME' and '[INDEX]' designators
29061before an '=' to specify a nested subobject to initialize; the list is
29062taken relative to the subobject corresponding to the closest surrounding
29063brace pair.  For example, with the 'struct point' declaration above:
29064
29065     struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
29066
29067If the same field is initialized multiple times, it has the value from
29068the last initialization.  If any such overridden initialization has side
29069effect, it is unspecified whether the side effect happens or not.
29070Currently, GCC discards them and issues a warning.
29071
29072
29073File: gcc.info,  Node: Case Ranges,  Next: Cast to Union,  Prev: Designated Inits,  Up: C Extensions
29074
290756.28 Case Ranges
29076================
29077
29078You can specify a range of consecutive values in a single 'case' label,
29079like this:
29080
29081     case LOW ... HIGH:
29082
29083This has the same effect as the proper number of individual 'case'
29084labels, one for each integer value from LOW to HIGH, inclusive.
29085
29086 This feature is especially useful for ranges of ASCII character codes:
29087
29088     case 'A' ... 'Z':
29089
29090 *Be careful:* Write spaces around the '...', for otherwise it may be
29091parsed wrong when you use it with integer values.  For example, write
29092this:
29093
29094     case 1 ... 5:
29095
29096rather than this:
29097
29098     case 1...5:
29099
29100
29101File: gcc.info,  Node: Cast to Union,  Next: Mixed Declarations,  Prev: Case Ranges,  Up: C Extensions
29102
291036.29 Cast to a Union Type
29104=========================
29105
29106A cast to union type looks similar to other casts, except that the type
29107specified is a union type.  You can specify the type either with the
29108'union' keyword or with a 'typedef' name that refers to a union.  A cast
29109to a union actually creates a compound literal and yields an lvalue, not
29110an rvalue like true casts do.  *Note Compound Literals::.
29111
29112 The types that may be cast to the union type are those of the members
29113of the union.  Thus, given the following union and variables:
29114
29115     union foo { int i; double d; };
29116     int x;
29117     double y;
29118
29119both 'x' and 'y' can be cast to type 'union foo'.
29120
29121 Using the cast as the right-hand side of an assignment to a variable of
29122union type is equivalent to storing in a member of the union:
29123
29124     union foo u;
29125     /* ... */
29126     u = (union foo) x  ==  u.i = x
29127     u = (union foo) y  ==  u.d = y
29128
29129 You can also use the union cast as a function argument:
29130
29131     void hack (union foo);
29132     /* ... */
29133     hack ((union foo) x);
29134
29135
29136File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Cast to Union,  Up: C Extensions
29137
291386.30 Mixed Declarations and Code
29139================================
29140
29141ISO C99 and ISO C++ allow declarations and code to be freely mixed
29142within compound statements.  As an extension, GNU C also allows this in
29143C90 mode.  For example, you could do:
29144
29145     int i;
29146     /* ... */
29147     i++;
29148     int j = i + 2;
29149
29150 Each identifier is visible from where it is declared until the end of
29151the enclosing block.
29152
29153
29154File: gcc.info,  Node: Function Attributes,  Next: Variable Attributes,  Prev: Mixed Declarations,  Up: C Extensions
29155
291566.31 Declaring Attributes of Functions
29157======================================
29158
29159In GNU C, you can use function attributes to declare certain things
29160about functions called in your program which help the compiler optimize
29161calls and check your code more carefully.  For example, you can use
29162attributes to declare that a function never returns ('noreturn'),
29163returns a value depending only on its arguments ('pure'), or has
29164'printf'-style arguments ('format').
29165
29166 You can also use attributes to control memory placement, code
29167generation options or call/return conventions within the function being
29168annotated.  Many of these attributes are target-specific.  For example,
29169many targets support attributes for defining interrupt handler
29170functions, which typically must follow special register usage and return
29171conventions.
29172
29173 Function attributes are introduced by the '__attribute__' keyword on a
29174declaration, followed by an attribute specification inside double
29175parentheses.  You can specify multiple attributes in a declaration by
29176separating them by commas within the double parentheses or by
29177immediately following an attribute declaration with another attribute
29178declaration.  *Note Attribute Syntax::, for the exact rules on attribute
29179syntax and placement.  Compatible attribute specifications on distinct
29180declarations of the same function are merged.  An attribute
29181specification that is not compatible with attributes already applied to
29182a declaration of the same function is ignored with a warning.
29183
29184 GCC also supports attributes on variable declarations (*note Variable
29185Attributes::), labels (*note Label Attributes::), enumerators (*note
29186Enumerator Attributes::), statements (*note Statement Attributes::), and
29187types (*note Type Attributes::).
29188
29189 There is some overlap between the purposes of attributes and pragmas
29190(*note Pragmas Accepted by GCC: Pragmas.).  It has been found convenient
29191to use '__attribute__' to achieve a natural attachment of attributes to
29192their corresponding declarations, whereas '#pragma' is of use for
29193compatibility with other compilers or constructs that do not naturally
29194form part of the grammar.
29195
29196 In addition to the attributes documented here, GCC plugins may provide
29197their own attributes.
29198
29199* Menu:
29200
29201* Common Function Attributes::
29202* AArch64 Function Attributes::
29203* ARC Function Attributes::
29204* ARM Function Attributes::
29205* AVR Function Attributes::
29206* Blackfin Function Attributes::
29207* CR16 Function Attributes::
29208* Epiphany Function Attributes::
29209* H8/300 Function Attributes::
29210* IA-64 Function Attributes::
29211* M32C Function Attributes::
29212* M32R/D Function Attributes::
29213* m68k Function Attributes::
29214* MCORE Function Attributes::
29215* MeP Function Attributes::
29216* MicroBlaze Function Attributes::
29217* Microsoft Windows Function Attributes::
29218* MIPS Function Attributes::
29219* MSP430 Function Attributes::
29220* NDS32 Function Attributes::
29221* Nios II Function Attributes::
29222* Nvidia PTX Function Attributes::
29223* PowerPC Function Attributes::
29224* RISC-V Function Attributes::
29225* RL78 Function Attributes::
29226* RX Function Attributes::
29227* S/390 Function Attributes::
29228* SH Function Attributes::
29229* SPU Function Attributes::
29230* Symbian OS Function Attributes::
29231* V850 Function Attributes::
29232* Visium Function Attributes::
29233* x86 Function Attributes::
29234* Xstormy16 Function Attributes::
29235
29236
29237File: gcc.info,  Node: Common Function Attributes,  Next: AArch64 Function Attributes,  Up: Function Attributes
29238
292396.31.1 Common Function Attributes
29240---------------------------------
29241
29242The following attributes are supported on most targets.
29243
29244'alias ("TARGET")'
29245     The 'alias' attribute causes the declaration to be emitted as an
29246     alias for another symbol, which must be specified.  For instance,
29247
29248          void __f () { /* Do something. */; }
29249          void f () __attribute__ ((weak, alias ("__f")));
29250
29251     defines 'f' to be a weak alias for '__f'.  In C++, the mangled name
29252     for the target must be used.  It is an error if '__f' is not
29253     defined in the same translation unit.
29254
29255     This attribute requires assembler and object file support, and may
29256     not be available on all targets.
29257
29258'aligned (ALIGNMENT)'
29259     This attribute specifies a minimum alignment for the function,
29260     measured in bytes.
29261
29262     You cannot use this attribute to decrease the alignment of a
29263     function, only to increase it.  However, when you explicitly
29264     specify a function alignment this overrides the effect of the
29265     '-falign-functions' (*note Optimize Options::) option for this
29266     function.
29267
29268     Note that the effectiveness of 'aligned' attributes may be limited
29269     by inherent limitations in your linker.  On many systems, the
29270     linker is only able to arrange for functions to be aligned up to a
29271     certain maximum alignment.  (For some linkers, the maximum
29272     supported alignment may be very very small.)  See your linker
29273     documentation for further information.
29274
29275     The 'aligned' attribute can also be used for variables and fields
29276     (*note Variable Attributes::.)
29277
29278'alloc_align'
29279     The 'alloc_align' attribute is used to tell the compiler that the
29280     function return value points to memory, where the returned pointer
29281     minimum alignment is given by one of the functions parameters.  GCC
29282     uses this information to improve pointer alignment analysis.
29283
29284     The function parameter denoting the allocated alignment is
29285     specified by one integer argument, whose number is the argument of
29286     the attribute.  Argument numbering starts at one.
29287
29288     For instance,
29289
29290          void* my_memalign(size_t, size_t) __attribute__((alloc_align(1)))
29291
29292     declares that 'my_memalign' returns memory with minimum alignment
29293     given by parameter 1.
29294
29295'alloc_size'
29296     The 'alloc_size' attribute is used to tell the compiler that the
29297     function return value points to memory, where the size is given by
29298     one or two of the functions parameters.  GCC uses this information
29299     to improve the correctness of '__builtin_object_size'.
29300
29301     The function parameter(s) denoting the allocated size are specified
29302     by one or two integer arguments supplied to the attribute.  The
29303     allocated size is either the value of the single function argument
29304     specified or the product of the two function arguments specified.
29305     Argument numbering starts at one.
29306
29307     For instance,
29308
29309          void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)))
29310          void* my_realloc(void*, size_t) __attribute__((alloc_size(2)))
29311
29312     declares that 'my_calloc' returns memory of the size given by the
29313     product of parameter 1 and 2 and that 'my_realloc' returns memory
29314     of the size given by parameter 2.
29315
29316'always_inline'
29317     Generally, functions are not inlined unless optimization is
29318     specified.  For functions declared inline, this attribute inlines
29319     the function independent of any restrictions that otherwise apply
29320     to inlining.  Failure to inline such a function is diagnosed as an
29321     error.  Note that if such a function is called indirectly the
29322     compiler may or may not inline it depending on optimization level
29323     and a failure to inline an indirect call may or may not be
29324     diagnosed.
29325
29326'artificial'
29327     This attribute is useful for small inline wrappers that if possible
29328     should appear during debugging as a unit.  Depending on the debug
29329     info format it either means marking the function as artificial or
29330     using the caller location for all instructions within the inlined
29331     body.
29332
29333'assume_aligned'
29334     The 'assume_aligned' attribute is used to tell the compiler that
29335     the function return value points to memory, where the returned
29336     pointer minimum alignment is given by the first argument.  If the
29337     attribute has two arguments, the second argument is misalignment
29338     offset.
29339
29340     For instance
29341
29342          void* my_alloc1(size_t) __attribute__((assume_aligned(16)))
29343          void* my_alloc2(size_t) __attribute__((assume_aligned(32, 8)))
29344
29345     declares that 'my_alloc1' returns 16-byte aligned pointer and that
29346     'my_alloc2' returns a pointer whose value modulo 32 is equal to 8.
29347
29348'bnd_instrument'
29349     The 'bnd_instrument' attribute on functions is used to inform the
29350     compiler that the function should be instrumented when compiled
29351     with the '-fchkp-instrument-marked-only' option.
29352
29353'bnd_legacy'
29354     The 'bnd_legacy' attribute on functions is used to inform the
29355     compiler that the function should not be instrumented when compiled
29356     with the '-fcheck-pointer-bounds' option.
29357
29358'cold'
29359     The 'cold' attribute on functions is used to inform the compiler
29360     that the function is unlikely to be executed.  The function is
29361     optimized for size rather than speed and on many targets it is
29362     placed into a special subsection of the text section so all cold
29363     functions appear close together, improving code locality of
29364     non-cold parts of program.  The paths leading to calls of cold
29365     functions within code are marked as unlikely by the branch
29366     prediction mechanism.  It is thus useful to mark functions used to
29367     handle unlikely conditions, such as 'perror', as cold to improve
29368     optimization of hot functions that do call marked functions in rare
29369     occasions.
29370
29371     When profile feedback is available, via '-fprofile-use', cold
29372     functions are automatically detected and this attribute is ignored.
29373
29374'const'
29375     Many functions do not examine any values except their arguments,
29376     and have no effects except to return a value.  Calls to such
29377     functions lend themselves to optimization such as common
29378     subexpression elimination.  The 'const' attribute imposes greater
29379     restrictions on a function's definition than the similar 'pure'
29380     attribute below because it prohibits the function from reading
29381     global variables.  Consequently, the presence of the attribute on a
29382     function declaration allows GCC to emit more efficient code for
29383     some calls to the function.  Decorating the same function with both
29384     the 'const' and the 'pure' attribute is diagnosed.
29385
29386     Note that a function that has pointer arguments and examines the
29387     data pointed to must _not_ be declared 'const'.  Likewise, a
29388     function that calls a non-'const' function usually must not be
29389     'const'.  Because a 'const' function cannot have any side effects
29390     it does not make sense for such a function to return 'void'.
29391     Declaring such a function is diagnosed.
29392
29393'constructor'
29394'destructor'
29395'constructor (PRIORITY)'
29396'destructor (PRIORITY)'
29397     The 'constructor' attribute causes the function to be called
29398     automatically before execution enters 'main ()'.  Similarly, the
29399     'destructor' attribute causes the function to be called
29400     automatically after 'main ()' completes or 'exit ()' is called.
29401     Functions with these attributes are useful for initializing data
29402     that is used implicitly during the execution of the program.
29403
29404     You may provide an optional integer priority to control the order
29405     in which constructor and destructor functions are run.  A
29406     constructor with a smaller priority number runs before a
29407     constructor with a larger priority number; the opposite
29408     relationship holds for destructors.  So, if you have a constructor
29409     that allocates a resource and a destructor that deallocates the
29410     same resource, both functions typically have the same priority.
29411     The priorities for constructor and destructor functions are the
29412     same as those specified for namespace-scope C++ objects (*note C++
29413     Attributes::).  However, at present, the order in which
29414     constructors for C++ objects with static storage duration and
29415     functions decorated with attribute 'constructor' are invoked is
29416     unspecified.  In mixed declarations, attribute 'init_priority' can
29417     be used to impose a specific ordering.
29418
29419'deprecated'
29420'deprecated (MSG)'
29421     The 'deprecated' attribute results in a warning if the function is
29422     used anywhere in the source file.  This is useful when identifying
29423     functions that are expected to be removed in a future version of a
29424     program.  The warning also includes the location of the declaration
29425     of the deprecated function, to enable users to easily find further
29426     information about why the function is deprecated, or what they
29427     should do instead.  Note that the warnings only occurs for uses:
29428
29429          int old_fn () __attribute__ ((deprecated));
29430          int old_fn ();
29431          int (*fn_ptr)() = old_fn;
29432
29433     results in a warning on line 3 but not line 2.  The optional MSG
29434     argument, which must be a string, is printed in the warning if
29435     present.
29436
29437     The 'deprecated' attribute can also be used for variables and types
29438     (*note Variable Attributes::, *note Type Attributes::.)
29439
29440'error ("MESSAGE")'
29441'warning ("MESSAGE")'
29442     If the 'error' or 'warning' attribute is used on a function
29443     declaration and a call to such a function is not eliminated through
29444     dead code elimination or other optimizations, an error or warning
29445     (respectively) that includes MESSAGE is diagnosed.  This is useful
29446     for compile-time checking, especially together with
29447     '__builtin_constant_p' and inline functions where checking the
29448     inline function arguments is not possible through 'extern char
29449     [(condition) ? 1 : -1];' tricks.
29450
29451     While it is possible to leave the function undefined and thus
29452     invoke a link failure (to define the function with a message in
29453     '.gnu.warning*' section), when using these attributes the problem
29454     is diagnosed earlier and with exact location of the call even in
29455     presence of inline functions or when not emitting debugging
29456     information.
29457
29458'externally_visible'
29459     This attribute, attached to a global variable or function,
29460     nullifies the effect of the '-fwhole-program' command-line option,
29461     so the object remains visible outside the current compilation unit.
29462
29463     If '-fwhole-program' is used together with '-flto' and 'gold' is
29464     used as the linker plugin, 'externally_visible' attributes are
29465     automatically added to functions (not variable yet due to a current
29466     'gold' issue) that are accessed outside of LTO objects according to
29467     resolution file produced by 'gold'.  For other linkers that cannot
29468     generate resolution file, explicit 'externally_visible' attributes
29469     are still necessary.
29470
29471'flatten'
29472     Generally, inlining into a function is limited.  For a function
29473     marked with this attribute, every call inside this function is
29474     inlined, if possible.  Whether the function itself is considered
29475     for inlining depends on its size and the current inlining
29476     parameters.
29477
29478'format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
29479     The 'format' attribute specifies that a function takes 'printf',
29480     'scanf', 'strftime' or 'strfmon' style arguments that should be
29481     type-checked against a format string.  For example, the
29482     declaration:
29483
29484          extern int
29485          my_printf (void *my_object, const char *my_format, ...)
29486                __attribute__ ((format (printf, 2, 3)));
29487
29488     causes the compiler to check the arguments in calls to 'my_printf'
29489     for consistency with the 'printf' style format string argument
29490     'my_format'.
29491
29492     The parameter ARCHETYPE determines how the format string is
29493     interpreted, and should be 'printf', 'scanf', 'strftime',
29494     'gnu_printf', 'gnu_scanf', 'gnu_strftime' or 'strfmon'.  (You can
29495     also use '__printf__', '__scanf__', '__strftime__' or
29496     '__strfmon__'.)  On MinGW targets, 'ms_printf', 'ms_scanf', and
29497     'ms_strftime' are also present.  ARCHETYPE values such as 'printf'
29498     refer to the formats accepted by the system's C runtime library,
29499     while values prefixed with 'gnu_' always refer to the formats
29500     accepted by the GNU C Library.  On Microsoft Windows targets,
29501     values prefixed with 'ms_' refer to the formats accepted by the
29502     'msvcrt.dll' library.  The parameter STRING-INDEX specifies which
29503     argument is the format string argument (starting from 1), while
29504     FIRST-TO-CHECK is the number of the first argument to check against
29505     the format string.  For functions where the arguments are not
29506     available to be checked (such as 'vprintf'), specify the third
29507     parameter as zero.  In this case the compiler only checks the
29508     format string for consistency.  For 'strftime' formats, the third
29509     parameter is required to be zero.  Since non-static C++ methods
29510     have an implicit 'this' argument, the arguments of such methods
29511     should be counted from two, not one, when giving values for
29512     STRING-INDEX and FIRST-TO-CHECK.
29513
29514     In the example above, the format string ('my_format') is the second
29515     argument of the function 'my_print', and the arguments to check
29516     start with the third argument, so the correct parameters for the
29517     format attribute are 2 and 3.
29518
29519     The 'format' attribute allows you to identify your own functions
29520     that take format strings as arguments, so that GCC can check the
29521     calls to these functions for errors.  The compiler always (unless
29522     '-ffreestanding' or '-fno-builtin' is used) checks formats for the
29523     standard library functions 'printf', 'fprintf', 'sprintf', 'scanf',
29524     'fscanf', 'sscanf', 'strftime', 'vprintf', 'vfprintf' and
29525     'vsprintf' whenever such warnings are requested (using '-Wformat'),
29526     so there is no need to modify the header file 'stdio.h'.  In C99
29527     mode, the functions 'snprintf', 'vsnprintf', 'vscanf', 'vfscanf'
29528     and 'vsscanf' are also checked.  Except in strictly conforming C
29529     standard modes, the X/Open function 'strfmon' is also checked as
29530     are 'printf_unlocked' and 'fprintf_unlocked'.  *Note Options
29531     Controlling C Dialect: C Dialect Options.
29532
29533     For Objective-C dialects, 'NSString' (or '__NSString__') is
29534     recognized in the same context.  Declarations including these
29535     format attributes are parsed for correct syntax, however the result
29536     of checking of such format strings is not yet defined, and is not
29537     carried out by this version of the compiler.
29538
29539     The target may also provide additional types of format checks.
29540     *Note Format Checks Specific to Particular Target Machines: Target
29541     Format Checks.
29542
29543'format_arg (STRING-INDEX)'
29544     The 'format_arg' attribute specifies that a function takes a format
29545     string for a 'printf', 'scanf', 'strftime' or 'strfmon' style
29546     function and modifies it (for example, to translate it into another
29547     language), so the result can be passed to a 'printf', 'scanf',
29548     'strftime' or 'strfmon' style function (with the remaining
29549     arguments to the format function the same as they would have been
29550     for the unmodified string).  For example, the declaration:
29551
29552          extern char *
29553          my_dgettext (char *my_domain, const char *my_format)
29554                __attribute__ ((format_arg (2)));
29555
29556     causes the compiler to check the arguments in calls to a 'printf',
29557     'scanf', 'strftime' or 'strfmon' type function, whose format string
29558     argument is a call to the 'my_dgettext' function, for consistency
29559     with the format string argument 'my_format'.  If the 'format_arg'
29560     attribute had not been specified, all the compiler could tell in
29561     such calls to format functions would be that the format string
29562     argument is not constant; this would generate a warning when
29563     '-Wformat-nonliteral' is used, but the calls could not be checked
29564     without the attribute.
29565
29566     The parameter STRING-INDEX specifies which argument is the format
29567     string argument (starting from one).  Since non-static C++ methods
29568     have an implicit 'this' argument, the arguments of such methods
29569     should be counted from two.
29570
29571     The 'format_arg' attribute allows you to identify your own
29572     functions that modify format strings, so that GCC can check the
29573     calls to 'printf', 'scanf', 'strftime' or 'strfmon' type function
29574     whose operands are a call to one of your own function.  The
29575     compiler always treats 'gettext', 'dgettext', and 'dcgettext' in
29576     this manner except when strict ISO C support is requested by
29577     '-ansi' or an appropriate '-std' option, or '-ffreestanding' or
29578     '-fno-builtin' is used.  *Note Options Controlling C Dialect: C
29579     Dialect Options.
29580
29581     For Objective-C dialects, the 'format-arg' attribute may refer to
29582     an 'NSString' reference for compatibility with the 'format'
29583     attribute above.
29584
29585     The target may also allow additional types in 'format-arg'
29586     attributes.  *Note Format Checks Specific to Particular Target
29587     Machines: Target Format Checks.
29588
29589'gnu_inline'
29590     This attribute should be used with a function that is also declared
29591     with the 'inline' keyword.  It directs GCC to treat the function as
29592     if it were defined in gnu90 mode even when compiling in C99 or
29593     gnu99 mode.
29594
29595     If the function is declared 'extern', then this definition of the
29596     function is used only for inlining.  In no case is the function
29597     compiled as a standalone function, not even if you take its address
29598     explicitly.  Such an address becomes an external reference, as if
29599     you had only declared the function, and had not defined it.  This
29600     has almost the effect of a macro.  The way to use this is to put a
29601     function definition in a header file with this attribute, and put
29602     another copy of the function, without 'extern', in a library file.
29603     The definition in the header file causes most calls to the function
29604     to be inlined.  If any uses of the function remain, they refer to
29605     the single copy in the library.  Note that the two definitions of
29606     the functions need not be precisely the same, although if they do
29607     not have the same effect your program may behave oddly.
29608
29609     In C, if the function is neither 'extern' nor 'static', then the
29610     function is compiled as a standalone function, as well as being
29611     inlined where possible.
29612
29613     This is how GCC traditionally handled functions declared 'inline'.
29614     Since ISO C99 specifies a different semantics for 'inline', this
29615     function attribute is provided as a transition measure and as a
29616     useful feature in its own right.  This attribute is available in
29617     GCC 4.1.3 and later.  It is available if either of the preprocessor
29618     macros '__GNUC_GNU_INLINE__' or '__GNUC_STDC_INLINE__' are defined.
29619     *Note An Inline Function is As Fast As a Macro: Inline.
29620
29621     In C++, this attribute does not depend on 'extern' in any way, but
29622     it still requires the 'inline' keyword to enable its special
29623     behavior.
29624
29625'hot'
29626     The 'hot' attribute on a function is used to inform the compiler
29627     that the function is a hot spot of the compiled program.  The
29628     function is optimized more aggressively and on many targets it is
29629     placed into a special subsection of the text section so all hot
29630     functions appear close together, improving locality.
29631
29632     When profile feedback is available, via '-fprofile-use', hot
29633     functions are automatically detected and this attribute is ignored.
29634
29635'ifunc ("RESOLVER")'
29636     The 'ifunc' attribute is used to mark a function as an indirect
29637     function using the STT_GNU_IFUNC symbol type extension to the ELF
29638     standard.  This allows the resolution of the symbol value to be
29639     determined dynamically at load time, and an optimized version of
29640     the routine to be selected for the particular processor or other
29641     system characteristics determined then.  To use this attribute,
29642     first define the implementation functions available, and a resolver
29643     function that returns a pointer to the selected implementation
29644     function.  The implementation functions' declarations must match
29645     the API of the function being implemented.  The resolver should be
29646     declared to be a function taking no arguments and returning a
29647     pointer to a function of the same type as the implementation.  For
29648     example:
29649
29650          void *my_memcpy (void *dst, const void *src, size_t len)
29651          {
29652            ...
29653            return dst;
29654          }
29655
29656          static void * (*resolve_memcpy (void))(void *, const void *, size_t)
29657          {
29658            return my_memcpy; // we will just always select this routine
29659          }
29660
29661     The exported header file declaring the function the user calls
29662     would contain:
29663
29664          extern void *memcpy (void *, const void *, size_t);
29665
29666     allowing the user to call 'memcpy' as a regular function, unaware
29667     of the actual implementation.  Finally, the indirect function needs
29668     to be defined in the same translation unit as the resolver
29669     function:
29670
29671          void *memcpy (void *, const void *, size_t)
29672               __attribute__ ((ifunc ("resolve_memcpy")));
29673
29674     In C++, the 'ifunc' attribute takes a string that is the mangled
29675     name of the resolver function.  A C++ resolver for a non-static
29676     member function of class 'C' should be declared to return a pointer
29677     to a non-member function taking pointer to 'C' as the first
29678     argument, followed by the same arguments as of the implementation
29679     function.  G++ checks the signatures of the two functions and
29680     issues a '-Wattribute-alias' warning for mismatches.  To suppress a
29681     warning for the necessary cast from a pointer to the implementation
29682     member function to the type of the corresponding non-member
29683     function use the '-Wno-pmf-conversions' option.  For example:
29684
29685          class S
29686          {
29687          private:
29688            int debug_impl (int);
29689            int optimized_impl (int);
29690
29691            typedef int Func (S*, int);
29692
29693            static Func* resolver ();
29694          public:
29695
29696            int interface (int);
29697          };
29698
29699          int S::debug_impl (int) { /* ... */ }
29700          int S::optimized_impl (int) { /* ... */ }
29701
29702          S::Func* S::resolver ()
29703          {
29704            int (S::*pimpl) (int)
29705              = getenv ("DEBUG") ? &S::debug_impl : &S::optimized_impl;
29706
29707            // Cast triggers -Wno-pmf-conversions.
29708            return reinterpret_cast<Func*>(pimpl);
29709          }
29710
29711          int S::interface (int) __attribute__ ((ifunc ("_ZN1S8resolverEv")));
29712
29713     Indirect functions cannot be weak.  Binutils version 2.20.1 or
29714     higher and GNU C Library version 2.11.1 are required to use this
29715     feature.
29716
29717'interrupt'
29718'interrupt_handler'
29719     Many GCC back ends support attributes to indicate that a function
29720     is an interrupt handler, which tells the compiler to generate
29721     function entry and exit sequences that differ from those from
29722     regular functions.  The exact syntax and behavior are
29723     target-specific; refer to the following subsections for details.
29724
29725'leaf'
29726     Calls to external functions with this attribute must return to the
29727     current compilation unit only by return or by exception handling.
29728     In particular, a leaf function is not allowed to invoke callback
29729     functions passed to it from the current compilation unit, directly
29730     call functions exported by the unit, or 'longjmp' into the unit.
29731     Leaf functions might still call functions from other compilation
29732     units and thus they are not necessarily leaf in the sense that they
29733     contain no function calls at all.
29734
29735     The attribute is intended for library functions to improve dataflow
29736     analysis.  The compiler takes the hint that any data not escaping
29737     the current compilation unit cannot be used or modified by the leaf
29738     function.  For example, the 'sin' function is a leaf function, but
29739     'qsort' is not.
29740
29741     Note that leaf functions might indirectly run a signal handler
29742     defined in the current compilation unit that uses static variables.
29743     Similarly, when lazy symbol resolution is in effect, leaf functions
29744     might invoke indirect functions whose resolver function or
29745     implementation function is defined in the current compilation unit
29746     and uses static variables.  There is no standard-compliant way to
29747     write such a signal handler, resolver function, or implementation
29748     function, and the best that you can do is to remove the 'leaf'
29749     attribute or mark all such static variables 'volatile'.  Lastly,
29750     for ELF-based systems that support symbol interposition, care
29751     should be taken that functions defined in the current compilation
29752     unit do not unexpectedly interpose other symbols based on the
29753     defined standards mode and defined feature test macros; otherwise
29754     an inadvertent callback would be added.
29755
29756     The attribute has no effect on functions defined within the current
29757     compilation unit.  This is to allow easy merging of multiple
29758     compilation units into one, for example, by using the link-time
29759     optimization.  For this reason the attribute is not allowed on
29760     types to annotate indirect calls.
29761
29762'malloc'
29763     This tells the compiler that a function is 'malloc'-like, i.e.,
29764     that the pointer P returned by the function cannot alias any other
29765     pointer valid when the function returns, and moreover no pointers
29766     to valid objects occur in any storage addressed by P.
29767
29768     Using this attribute can improve optimization.  Functions like
29769     'malloc' and 'calloc' have this property because they return a
29770     pointer to uninitialized or zeroed-out storage.  However, functions
29771     like 'realloc' do not have this property, as they can return a
29772     pointer to storage containing pointers.
29773
29774'no_icf'
29775     This function attribute prevents a functions from being merged with
29776     another semantically equivalent function.
29777
29778'no_instrument_function'
29779     If '-finstrument-functions' is given, profiling function calls are
29780     generated at entry and exit of most user-compiled functions.
29781     Functions with this attribute are not so instrumented.
29782
29783'no_profile_instrument_function'
29784     The 'no_profile_instrument_function' attribute on functions is used
29785     to inform the compiler that it should not process any profile
29786     feedback based optimization code instrumentation.
29787
29788'no_reorder'
29789     Do not reorder functions or variables marked 'no_reorder' against
29790     each other or top level assembler statements the executable.  The
29791     actual order in the program will depend on the linker command line.
29792     Static variables marked like this are also not removed.  This has a
29793     similar effect as the '-fno-toplevel-reorder' option, but only
29794     applies to the marked symbols.
29795
29796'no_sanitize ("SANITIZE_OPTION")'
29797     The 'no_sanitize' attribute on functions is used to inform the
29798     compiler that it should not do sanitization of all options
29799     mentioned in SANITIZE_OPTION.  A list of values acceptable by
29800     '-fsanitize' option can be provided.
29801
29802          void __attribute__ ((no_sanitize ("alignment", "object-size")))
29803          f () { /* Do something. */; }
29804          void __attribute__ ((no_sanitize ("alignment,object-size")))
29805          g () { /* Do something. */; }
29806
29807'no_sanitize_address'
29808'no_address_safety_analysis'
29809     The 'no_sanitize_address' attribute on functions is used to inform
29810     the compiler that it should not instrument memory accesses in the
29811     function when compiling with the '-fsanitize=address' option.  The
29812     'no_address_safety_analysis' is a deprecated alias of the
29813     'no_sanitize_address' attribute, new code should use
29814     'no_sanitize_address'.
29815
29816'no_sanitize_thread'
29817     The 'no_sanitize_thread' attribute on functions is used to inform
29818     the compiler that it should not instrument memory accesses in the
29819     function when compiling with the '-fsanitize=thread' option.
29820
29821'no_sanitize_undefined'
29822     The 'no_sanitize_undefined' attribute on functions is used to
29823     inform the compiler that it should not check for undefined behavior
29824     in the function when compiling with the '-fsanitize=undefined'
29825     option.
29826
29827'no_split_stack'
29828     If '-fsplit-stack' is given, functions have a small prologue which
29829     decides whether to split the stack.  Functions with the
29830     'no_split_stack' attribute do not have that prologue, and thus may
29831     run with only a small amount of stack space available.
29832
29833'no_stack_limit'
29834     This attribute locally overrides the '-fstack-limit-register' and
29835     '-fstack-limit-symbol' command-line options; it has the effect of
29836     disabling stack limit checking in the function it applies to.
29837
29838'noclone'
29839     This function attribute prevents a function from being considered
29840     for cloning--a mechanism that produces specialized copies of
29841     functions and which is (currently) performed by interprocedural
29842     constant propagation.
29843
29844'noinline'
29845     This function attribute prevents a function from being considered
29846     for inlining.  If the function does not have side effects, there
29847     are optimizations other than inlining that cause function calls to
29848     be optimized away, although the function call is live.  To keep
29849     such calls from being optimized away, put
29850          asm ("");
29851
29852     (*note Extended Asm::) in the called function, to serve as a
29853     special side effect.
29854
29855'noipa'
29856     Disable interprocedural optimizations between the function with
29857     this attribute and its callers, as if the body of the function is
29858     not available when optimizing callers and the callers are
29859     unavailable when optimizing the body.  This attribute implies
29860     'noinline', 'noclone' and 'no_icf' attributes.  However, this
29861     attribute is not equivalent to a combination of other attributes,
29862     because its purpose is to suppress existing and future
29863     optimizations employing interprocedural analysis, including those
29864     that do not have an attribute suitable for disabling them
29865     individually.  This attribute is supported mainly for the purpose
29866     of testing the compiler.
29867
29868'nonnull (ARG-INDEX, ...)'
29869     The 'nonnull' attribute specifies that some function parameters
29870     should be non-null pointers.  For instance, the declaration:
29871
29872          extern void *
29873          my_memcpy (void *dest, const void *src, size_t len)
29874                  __attribute__((nonnull (1, 2)));
29875
29876     causes the compiler to check that, in calls to 'my_memcpy',
29877     arguments DEST and SRC are non-null.  If the compiler determines
29878     that a null pointer is passed in an argument slot marked as
29879     non-null, and the '-Wnonnull' option is enabled, a warning is
29880     issued.  The compiler may also choose to make optimizations based
29881     on the knowledge that certain function arguments will never be
29882     null.
29883
29884     If no argument index list is given to the 'nonnull' attribute, all
29885     pointer arguments are marked as non-null.  To illustrate, the
29886     following declaration is equivalent to the previous example:
29887
29888          extern void *
29889          my_memcpy (void *dest, const void *src, size_t len)
29890                  __attribute__((nonnull));
29891
29892'noplt'
29893     The 'noplt' attribute is the counterpart to option '-fno-plt'.
29894     Calls to functions marked with this attribute in
29895     position-independent code do not use the PLT.
29896
29897          /* Externally defined function foo.  */
29898          int foo () __attribute__ ((noplt));
29899
29900          int
29901          main (/* ... */)
29902          {
29903            /* ... */
29904            foo ();
29905            /* ... */
29906          }
29907
29908     The 'noplt' attribute on function 'foo' tells the compiler to
29909     assume that the function 'foo' is externally defined and that the
29910     call to 'foo' must avoid the PLT in position-independent code.
29911
29912     In position-dependent code, a few targets also convert calls to
29913     functions that are marked to not use the PLT to use the GOT
29914     instead.
29915
29916'noreturn'
29917     A few standard library functions, such as 'abort' and 'exit',
29918     cannot return.  GCC knows this automatically.  Some programs define
29919     their own functions that never return.  You can declare them
29920     'noreturn' to tell the compiler this fact.  For example,
29921
29922          void fatal () __attribute__ ((noreturn));
29923
29924          void
29925          fatal (/* ... */)
29926          {
29927            /* ... */ /* Print error message. */ /* ... */
29928            exit (1);
29929          }
29930
29931     The 'noreturn' keyword tells the compiler to assume that 'fatal'
29932     cannot return.  It can then optimize without regard to what would
29933     happen if 'fatal' ever did return.  This makes slightly better
29934     code.  More importantly, it helps avoid spurious warnings of
29935     uninitialized variables.
29936
29937     The 'noreturn' keyword does not affect the exceptional path when
29938     that applies: a 'noreturn'-marked function may still return to the
29939     caller by throwing an exception or calling 'longjmp'.
29940
29941     Do not assume that registers saved by the calling function are
29942     restored before calling the 'noreturn' function.
29943
29944     It does not make sense for a 'noreturn' function to have a return
29945     type other than 'void'.
29946
29947'nothrow'
29948     The 'nothrow' attribute is used to inform the compiler that a
29949     function cannot throw an exception.  For example, most functions in
29950     the standard C library can be guaranteed not to throw an exception
29951     with the notable exceptions of 'qsort' and 'bsearch' that take
29952     function pointer arguments.
29953
29954'optimize'
29955     The 'optimize' attribute is used to specify that a function is to
29956     be compiled with different optimization options than specified on
29957     the command line.  Arguments can either be numbers or strings.
29958     Numbers are assumed to be an optimization level.  Strings that
29959     begin with 'O' are assumed to be an optimization option, while
29960     other options are assumed to be used with a '-f' prefix.  You can
29961     also use the '#pragma GCC optimize' pragma to set the optimization
29962     options that affect more than one function.  *Note Function
29963     Specific Option Pragmas::, for details about the '#pragma GCC
29964     optimize' pragma.
29965
29966     This attribute should be used for debugging purposes only.  It is
29967     not suitable in production code.
29968
29969'patchable_function_entry'
29970     In case the target's text segment can be made writable at run time
29971     by any means, padding the function entry with a number of NOPs can
29972     be used to provide a universal tool for instrumentation.
29973
29974     The 'patchable_function_entry' function attribute can be used to
29975     change the number of NOPs to any desired value.  The two-value
29976     syntax is the same as for the command-line switch
29977     '-fpatchable-function-entry=N,M', generating N NOPs, with the
29978     function entry point before the Mth NOP instruction.  M defaults to
29979     0 if omitted e.g.  function entry point is before the first NOP.
29980
29981     If patchable function entries are enabled globally using the
29982     command-line option '-fpatchable-function-entry=N,M', then you must
29983     disable instrumentation on all functions that are part of the
29984     instrumentation framework with the attribute
29985     'patchable_function_entry (0)' to prevent recursion.
29986
29987'pure'
29988     Many functions have no effects except the return value and their
29989     return value depends only on the parameters and/or global
29990     variables.  Calls to such functions can be subject to common
29991     subexpression elimination and loop optimization just as an
29992     arithmetic operator would be.  These functions should be declared
29993     with the attribute 'pure'.  For example,
29994
29995          int square (int) __attribute__ ((pure));
29996
29997     says that the hypothetical function 'square' is safe to call fewer
29998     times than the program says.
29999
30000     Some common examples of pure functions are 'strlen' or 'memcmp'.
30001     Interesting non-pure functions are functions with infinite loops or
30002     those depending on volatile memory or other system resource, that
30003     may change between two consecutive calls (such as 'feof' in a
30004     multithreading environment).
30005
30006     The 'pure' attribute imposes similar but looser restrictions on a
30007     function's defintion than the 'const' attribute: it allows the
30008     function to read global variables.  Decorating the same function
30009     with both the 'pure' and the 'const' attribute is diagnosed.
30010     Because a 'pure' function cannot have any side effects it does not
30011     make sense for such a function to return 'void'.  Declaring such a
30012     function is diagnosed.
30013
30014'returns_nonnull'
30015     The 'returns_nonnull' attribute specifies that the function return
30016     value should be a non-null pointer.  For instance, the declaration:
30017
30018          extern void *
30019          mymalloc (size_t len) __attribute__((returns_nonnull));
30020
30021     lets the compiler optimize callers based on the knowledge that the
30022     return value will never be null.
30023
30024'returns_twice'
30025     The 'returns_twice' attribute tells the compiler that a function
30026     may return more than one time.  The compiler ensures that all
30027     registers are dead before calling such a function and emits a
30028     warning about the variables that may be clobbered after the second
30029     return from the function.  Examples of such functions are 'setjmp'
30030     and 'vfork'.  The 'longjmp'-like counterpart of such function, if
30031     any, might need to be marked with the 'noreturn' attribute.
30032
30033'section ("SECTION-NAME")'
30034     Normally, the compiler places the code it generates in the 'text'
30035     section.  Sometimes, however, you need additional sections, or you
30036     need certain particular functions to appear in special sections.
30037     The 'section' attribute specifies that a function lives in a
30038     particular section.  For example, the declaration:
30039
30040          extern void foobar (void) __attribute__ ((section ("bar")));
30041
30042     puts the function 'foobar' in the 'bar' section.
30043
30044     Some file formats do not support arbitrary sections so the
30045     'section' attribute is not available on all platforms.  If you need
30046     to map the entire contents of a module to a particular section,
30047     consider using the facilities of the linker instead.
30048
30049'sentinel'
30050     This function attribute ensures that a parameter in a function call
30051     is an explicit 'NULL'.  The attribute is only valid on variadic
30052     functions.  By default, the sentinel is located at position zero,
30053     the last parameter of the function call.  If an optional integer
30054     position argument P is supplied to the attribute, the sentinel must
30055     be located at position P counting backwards from the end of the
30056     argument list.
30057
30058          __attribute__ ((sentinel))
30059          is equivalent to
30060          __attribute__ ((sentinel(0)))
30061
30062     The attribute is automatically set with a position of 0 for the
30063     built-in functions 'execl' and 'execlp'.  The built-in function
30064     'execle' has the attribute set with a position of 1.
30065
30066     A valid 'NULL' in this context is defined as zero with any pointer
30067     type.  If your system defines the 'NULL' macro with an integer type
30068     then you need to add an explicit cast.  GCC replaces 'stddef.h'
30069     with a copy that redefines NULL appropriately.
30070
30071     The warnings for missing or incorrect sentinels are enabled with
30072     '-Wformat'.
30073
30074'simd'
30075'simd("MASK")'
30076     This attribute enables creation of one or more function versions
30077     that can process multiple arguments using SIMD instructions from a
30078     single invocation.  Specifying this attribute allows compiler to
30079     assume that such versions are available at link time (provided in
30080     the same or another translation unit).  Generated versions are
30081     target-dependent and described in the corresponding Vector ABI
30082     document.  For x86_64 target this document can be found
30083     here (https://sourceware.org/glibc/wiki/libmvec?action=AttachFile&do=view&target=VectorABI.txt).
30084
30085     The optional argument MASK may have the value 'notinbranch' or
30086     'inbranch', and instructs the compiler to generate non-masked or
30087     masked clones correspondingly.  By default, all clones are
30088     generated.
30089
30090     If the attribute is specified and '#pragma omp declare simd' is
30091     present on a declaration and the '-fopenmp' or '-fopenmp-simd'
30092     switch is specified, then the attribute is ignored.
30093
30094'stack_protect'
30095     This attribute adds stack protection code to the function if flags
30096     '-fstack-protector', '-fstack-protector-strong' or
30097     '-fstack-protector-explicit' are set.
30098
30099'target (OPTIONS)'
30100     Multiple target back ends implement the 'target' attribute to
30101     specify that a function is to be compiled with different target
30102     options than specified on the command line.  This can be used for
30103     instance to have functions compiled with a different ISA
30104     (instruction set architecture) than the default.  You can also use
30105     the '#pragma GCC target' pragma to set more than one function to be
30106     compiled with specific target options.  *Note Function Specific
30107     Option Pragmas::, for details about the '#pragma GCC target'
30108     pragma.
30109
30110     For instance, on an x86, you could declare one function with the
30111     'target("sse4.1,arch=core2")' attribute and another with
30112     'target("sse4a,arch=amdfam10")'.  This is equivalent to compiling
30113     the first function with '-msse4.1' and '-march=core2' options, and
30114     the second function with '-msse4a' and '-march=amdfam10' options.
30115     It is up to you to make sure that a function is only invoked on a
30116     machine that supports the particular ISA it is compiled for (for
30117     example by using 'cpuid' on x86 to determine what feature bits and
30118     architecture family are used).
30119
30120          int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
30121          int sse3_func (void) __attribute__ ((__target__ ("sse3")));
30122
30123     You can either use multiple strings separated by commas to specify
30124     multiple options, or separate the options with a comma (',') within
30125     a single string.
30126
30127     The options supported are specific to each target; refer to *note
30128     x86 Function Attributes::, *note PowerPC Function Attributes::,
30129     *note ARM Function Attributes::, *note AArch64 Function
30130     Attributes::, *note Nios II Function Attributes::, and *note S/390
30131     Function Attributes:: for details.
30132
30133'target_clones (OPTIONS)'
30134     The 'target_clones' attribute is used to specify that a function be
30135     cloned into multiple versions compiled with different target
30136     options than specified on the command line.  The supported options
30137     and restrictions are the same as for 'target' attribute.
30138
30139     For instance, on an x86, you could compile a function with
30140     'target_clones("sse4.1,avx")'.  GCC creates two function clones,
30141     one compiled with '-msse4.1' and another with '-mavx'.
30142
30143     On a PowerPC, you can compile a function with
30144     'target_clones("cpu=power9,default")'.  GCC will create two
30145     function clones, one compiled with '-mcpu=power9' and another with
30146     the default options.  GCC must be configured to use GLIBC 2.23 or
30147     newer in order to use the 'target_clones' attribute.
30148
30149     It also creates a resolver function (see the 'ifunc' attribute
30150     above) that dynamically selects a clone suitable for current
30151     architecture.  The resolver is created only if there is a usage of
30152     a function with 'target_clones' attribute.
30153
30154'unused'
30155     This attribute, attached to a function, means that the function is
30156     meant to be possibly unused.  GCC does not produce a warning for
30157     this function.
30158
30159'used'
30160     This attribute, attached to a function, means that code must be
30161     emitted for the function even if it appears that the function is
30162     not referenced.  This is useful, for example, when the function is
30163     referenced only in inline assembly.
30164
30165     When applied to a member function of a C++ class template, the
30166     attribute also means that the function is instantiated if the class
30167     itself is instantiated.
30168
30169'visibility ("VISIBILITY_TYPE")'
30170     This attribute affects the linkage of the declaration to which it
30171     is attached.  It can be applied to variables (*note Common Variable
30172     Attributes::) and types (*note Common Type Attributes::) as well as
30173     functions.
30174
30175     There are four supported VISIBILITY_TYPE values: default, hidden,
30176     protected or internal visibility.
30177
30178          void __attribute__ ((visibility ("protected")))
30179          f () { /* Do something. */; }
30180          int i __attribute__ ((visibility ("hidden")));
30181
30182     The possible values of VISIBILITY_TYPE correspond to the visibility
30183     settings in the ELF gABI.
30184
30185     'default'
30186          Default visibility is the normal case for the object file
30187          format.  This value is available for the visibility attribute
30188          to override other options that may change the assumed
30189          visibility of entities.
30190
30191          On ELF, default visibility means that the declaration is
30192          visible to other modules and, in shared libraries, means that
30193          the declared entity may be overridden.
30194
30195          On Darwin, default visibility means that the declaration is
30196          visible to other modules.
30197
30198          Default visibility corresponds to "external linkage" in the
30199          language.
30200
30201     'hidden'
30202          Hidden visibility indicates that the entity declared has a new
30203          form of linkage, which we call "hidden linkage".  Two
30204          declarations of an object with hidden linkage refer to the
30205          same object if they are in the same shared object.
30206
30207     'internal'
30208          Internal visibility is like hidden visibility, but with
30209          additional processor specific semantics.  Unless otherwise
30210          specified by the psABI, GCC defines internal visibility to
30211          mean that a function is _never_ called from another module.
30212          Compare this with hidden functions which, while they cannot be
30213          referenced directly by other modules, can be referenced
30214          indirectly via function pointers.  By indicating that a
30215          function cannot be called from outside the module, GCC may for
30216          instance omit the load of a PIC register since it is known
30217          that the calling function loaded the correct value.
30218
30219     'protected'
30220          Protected visibility is like default visibility except that it
30221          indicates that references within the defining module bind to
30222          the definition in that module.  That is, the declared entity
30223          cannot be overridden by another module.
30224
30225     All visibilities are supported on many, but not all, ELF targets
30226     (supported when the assembler supports the '.visibility'
30227     pseudo-op).  Default visibility is supported everywhere.  Hidden
30228     visibility is supported on Darwin targets.
30229
30230     The visibility attribute should be applied only to declarations
30231     that would otherwise have external linkage.  The attribute should
30232     be applied consistently, so that the same entity should not be
30233     declared with different settings of the attribute.
30234
30235     In C++, the visibility attribute applies to types as well as
30236     functions and objects, because in C++ types have linkage.  A class
30237     must not have greater visibility than its non-static data member
30238     types and bases, and class members default to the visibility of
30239     their class.  Also, a declaration without explicit visibility is
30240     limited to the visibility of its type.
30241
30242     In C++, you can mark member functions and static member variables
30243     of a class with the visibility attribute.  This is useful if you
30244     know a particular method or static member variable should only be
30245     used from one shared object; then you can mark it hidden while the
30246     rest of the class has default visibility.  Care must be taken to
30247     avoid breaking the One Definition Rule; for example, it is usually
30248     not useful to mark an inline method as hidden without marking the
30249     whole class as hidden.
30250
30251     A C++ namespace declaration can also have the visibility attribute.
30252
30253          namespace nspace1 __attribute__ ((visibility ("protected")))
30254          { /* Do something. */; }
30255
30256     This attribute applies only to the particular namespace body, not
30257     to other definitions of the same namespace; it is equivalent to
30258     using '#pragma GCC visibility' before and after the namespace
30259     definition (*note Visibility Pragmas::).
30260
30261     In C++, if a template argument has limited visibility, this
30262     restriction is implicitly propagated to the template instantiation.
30263     Otherwise, template instantiations and specializations default to
30264     the visibility of their template.
30265
30266     If both the template and enclosing class have explicit visibility,
30267     the visibility from the template is used.
30268
30269'warn_unused_result'
30270     The 'warn_unused_result' attribute causes a warning to be emitted
30271     if a caller of the function with this attribute does not use its
30272     return value.  This is useful for functions where not checking the
30273     result is either a security problem or always a bug, such as
30274     'realloc'.
30275
30276          int fn () __attribute__ ((warn_unused_result));
30277          int foo ()
30278          {
30279            if (fn () < 0) return -1;
30280            fn ();
30281            return 0;
30282          }
30283
30284     results in warning on line 5.
30285
30286'weak'
30287     The 'weak' attribute causes the declaration to be emitted as a weak
30288     symbol rather than a global.  This is primarily useful in defining
30289     library functions that can be overridden in user code, though it
30290     can also be used with non-function declarations.  Weak symbols are
30291     supported for ELF targets, and also for a.out targets when using
30292     the GNU assembler and linker.
30293
30294'weakref'
30295'weakref ("TARGET")'
30296     The 'weakref' attribute marks a declaration as a weak reference.
30297     Without arguments, it should be accompanied by an 'alias' attribute
30298     naming the target symbol.  Optionally, the TARGET may be given as
30299     an argument to 'weakref' itself.  In either case, 'weakref'
30300     implicitly marks the declaration as 'weak'.  Without a TARGET,
30301     given as an argument to 'weakref' or to 'alias', 'weakref' is
30302     equivalent to 'weak'.
30303
30304          static int x() __attribute__ ((weakref ("y")));
30305          /* is equivalent to... */
30306          static int x() __attribute__ ((weak, weakref, alias ("y")));
30307          /* and to... */
30308          static int x() __attribute__ ((weakref));
30309          static int x() __attribute__ ((alias ("y")));
30310
30311     A weak reference is an alias that does not by itself require a
30312     definition to be given for the target symbol.  If the target symbol
30313     is only referenced through weak references, then it becomes a
30314     'weak' undefined symbol.  If it is directly referenced, however,
30315     then such strong references prevail, and a definition is required
30316     for the symbol, not necessarily in the same translation unit.
30317
30318     The effect is equivalent to moving all references to the alias to a
30319     separate translation unit, renaming the alias to the aliased
30320     symbol, declaring it as weak, compiling the two separate
30321     translation units and performing a reloadable link on them.
30322
30323     At present, a declaration to which 'weakref' is attached can only
30324     be 'static'.
30325
30326
30327File: gcc.info,  Node: AArch64 Function Attributes,  Next: ARC Function Attributes,  Prev: Common Function Attributes,  Up: Function Attributes
30328
303296.31.2 AArch64 Function Attributes
30330----------------------------------
30331
30332The following target-specific function attributes are available for the
30333AArch64 target.  For the most part, these options mirror the behavior of
30334similar command-line options (*note AArch64 Options::), but on a
30335per-function basis.
30336
30337'general-regs-only'
30338     Indicates that no floating-point or Advanced SIMD registers should
30339     be used when generating code for this function.  If the function
30340     explicitly uses floating-point code, then the compiler gives an
30341     error.  This is the same behavior as that of the command-line
30342     option '-mgeneral-regs-only'.
30343
30344'fix-cortex-a53-835769'
30345     Indicates that the workaround for the Cortex-A53 erratum 835769
30346     should be applied to this function.  To explicitly disable the
30347     workaround for this function specify the negated form:
30348     'no-fix-cortex-a53-835769'.  This corresponds to the behavior of
30349     the command line options '-mfix-cortex-a53-835769' and
30350     '-mno-fix-cortex-a53-835769'.
30351
30352'cmodel='
30353     Indicates that code should be generated for a particular code model
30354     for this function.  The behavior and permissible arguments are the
30355     same as for the command line option '-mcmodel='.
30356
30357'strict-align'
30358     Indicates that the compiler should not assume that unaligned memory
30359     references are handled by the system.  The behavior is the same as
30360     for the command-line option '-mstrict-align'.
30361
30362'omit-leaf-frame-pointer'
30363     Indicates that the frame pointer should be omitted for a leaf
30364     function call.  To keep the frame pointer, the inverse attribute
30365     'no-omit-leaf-frame-pointer' can be specified.  These attributes
30366     have the same behavior as the command-line options
30367     '-momit-leaf-frame-pointer' and '-mno-omit-leaf-frame-pointer'.
30368
30369'tls-dialect='
30370     Specifies the TLS dialect to use for this function.  The behavior
30371     and permissible arguments are the same as for the command-line
30372     option '-mtls-dialect='.
30373
30374'arch='
30375     Specifies the architecture version and architectural extensions to
30376     use for this function.  The behavior and permissible arguments are
30377     the same as for the '-march=' command-line option.
30378
30379'tune='
30380     Specifies the core for which to tune the performance of this
30381     function.  The behavior and permissible arguments are the same as
30382     for the '-mtune=' command-line option.
30383
30384'cpu='
30385     Specifies the core for which to tune the performance of this
30386     function and also whose architectural features to use.  The
30387     behavior and valid arguments are the same as for the '-mcpu='
30388     command-line option.
30389
30390'sign-return-address'
30391     Select the function scope on which return address signing will be
30392     applied.  The behavior and permissible arguments are the same as
30393     for the command-line option '-msign-return-address='.  The default
30394     value is 'none'.
30395
30396 The above target attributes can be specified as follows:
30397
30398     __attribute__((target("ATTR-STRING")))
30399     int
30400     f (int a)
30401     {
30402       return a + 5;
30403     }
30404
30405 where 'ATTR-STRING' is one of the attribute strings specified above.
30406
30407 Additionally, the architectural extension string may be specified on
30408its own.  This can be used to turn on and off particular architectural
30409extensions without having to specify a particular architecture version
30410or core.  Example:
30411
30412     __attribute__((target("+crc+nocrypto")))
30413     int
30414     foo (int a)
30415     {
30416       return a + 5;
30417     }
30418
30419 In this example 'target("+crc+nocrypto")' enables the 'crc' extension
30420and disables the 'crypto' extension for the function 'foo' without
30421modifying an existing '-march=' or '-mcpu' option.
30422
30423 Multiple target function attributes can be specified by separating them
30424with a comma.  For example:
30425     __attribute__((target("arch=armv8-a+crc+crypto,tune=cortex-a53")))
30426     int
30427     foo (int a)
30428     {
30429       return a + 5;
30430     }
30431
30432 is valid and compiles function 'foo' for ARMv8-A with 'crc' and
30433'crypto' extensions and tunes it for 'cortex-a53'.
30434
304356.31.2.1 Inlining rules
30436.......................
30437
30438Specifying target attributes on individual functions or performing
30439link-time optimization across translation units compiled with different
30440target options can affect function inlining rules:
30441
30442 In particular, a caller function can inline a callee function only if
30443the architectural features available to the callee are a subset of the
30444features available to the caller.  For example: A function 'foo'
30445compiled with '-march=armv8-a+crc', or tagged with the equivalent
30446'arch=armv8-a+crc' attribute, can inline a function 'bar' compiled with
30447'-march=armv8-a+nocrc' because the all the architectural features that
30448function 'bar' requires are available to function 'foo'.  Conversely,
30449function 'bar' cannot inline function 'foo'.
30450
30451 Additionally inlining a function compiled with '-mstrict-align' into a
30452function compiled without '-mstrict-align' is not allowed.  However,
30453inlining a function compiled without '-mstrict-align' into a function
30454compiled with '-mstrict-align' is allowed.
30455
30456 Note that CPU tuning options and attributes such as the '-mcpu=',
30457'-mtune=' do not inhibit inlining unless the CPU specified by the
30458'-mcpu=' option or the 'cpu=' attribute conflicts with the architectural
30459feature rules specified above.
30460
30461
30462File: gcc.info,  Node: ARC Function Attributes,  Next: ARM Function Attributes,  Prev: AArch64 Function Attributes,  Up: Function Attributes
30463
304646.31.3 ARC Function Attributes
30465------------------------------
30466
30467These function attributes are supported by the ARC back end:
30468
30469'interrupt'
30470     Use this attribute to indicate that the specified function is an
30471     interrupt handler.  The compiler generates function entry and exit
30472     sequences suitable for use in an interrupt handler when this
30473     attribute is present.
30474
30475     On the ARC, you must specify the kind of interrupt to be handled in
30476     a parameter to the interrupt attribute like this:
30477
30478          void f () __attribute__ ((interrupt ("ilink1")));
30479
30480     Permissible values for this parameter are: 'ilink1' and 'ilink2'.
30481
30482'long_call'
30483'medium_call'
30484'short_call'
30485     These attributes specify how a particular function is called.
30486     These attributes override the '-mlong-calls' and '-mmedium-calls'
30487     (*note ARC Options::) command-line switches and '#pragma
30488     long_calls' settings.
30489
30490     For ARC, a function marked with the 'long_call' attribute is always
30491     called using register-indirect jump-and-link instructions, thereby
30492     enabling the called function to be placed anywhere within the
30493     32-bit address space.  A function marked with the 'medium_call'
30494     attribute will always be close enough to be called with an
30495     unconditional branch-and-link instruction, which has a 25-bit
30496     offset from the call site.  A function marked with the 'short_call'
30497     attribute will always be close enough to be called with a
30498     conditional branch-and-link instruction, which has a 21-bit offset
30499     from the call site.
30500
30501'jli_always'
30502     Forces a particular function to be called using 'jli' instruction.
30503     The 'jli' instruction makes use of a table stored into '.jlitab'
30504     section, which holds the location of the functions which are
30505     addressed using this instruction.
30506
30507'jli_fixed'
30508     Identical like the above one, but the location of the function in
30509     the 'jli' table is known and given as an attribute parameter.
30510
30511'secure_call'
30512     This attribute allows one to mark secure-code functions that are
30513     callable from normal mode.  The location of the secure call
30514     function into the 'sjli' table needs to be passed as argument.
30515
30516
30517File: gcc.info,  Node: ARM Function Attributes,  Next: AVR Function Attributes,  Prev: ARC Function Attributes,  Up: Function Attributes
30518
305196.31.4 ARM Function Attributes
30520------------------------------
30521
30522These function attributes are supported for ARM targets:
30523
30524'interrupt'
30525     Use this attribute to indicate that the specified function is an
30526     interrupt handler.  The compiler generates function entry and exit
30527     sequences suitable for use in an interrupt handler when this
30528     attribute is present.
30529
30530     You can specify the kind of interrupt to be handled by adding an
30531     optional parameter to the interrupt attribute like this:
30532
30533          void f () __attribute__ ((interrupt ("IRQ")));
30534
30535     Permissible values for this parameter are: 'IRQ', 'FIQ', 'SWI',
30536     'ABORT' and 'UNDEF'.
30537
30538     On ARMv7-M the interrupt type is ignored, and the attribute means
30539     the function may be called with a word-aligned stack pointer.
30540
30541'isr'
30542     Use this attribute on ARM to write Interrupt Service Routines.
30543     This is an alias to the 'interrupt' attribute above.
30544
30545'long_call'
30546'short_call'
30547     These attributes specify how a particular function is called.
30548     These attributes override the '-mlong-calls' (*note ARM Options::)
30549     command-line switch and '#pragma long_calls' settings.  For ARM,
30550     the 'long_call' attribute indicates that the function might be far
30551     away from the call site and require a different (more expensive)
30552     calling sequence.  The 'short_call' attribute always places the
30553     offset to the function from the call site into the 'BL' instruction
30554     directly.
30555
30556'naked'
30557     This attribute allows the compiler to construct the requisite
30558     function declaration, while allowing the body of the function to be
30559     assembly code.  The specified function will not have
30560     prologue/epilogue sequences generated by the compiler.  Only basic
30561     'asm' statements can safely be included in naked functions (*note
30562     Basic Asm::).  While using extended 'asm' or a mixture of basic
30563     'asm' and C code may appear to work, they cannot be depended upon
30564     to work reliably and are not supported.
30565
30566'pcs'
30567
30568     The 'pcs' attribute can be used to control the calling convention
30569     used for a function on ARM. The attribute takes an argument that
30570     specifies the calling convention to use.
30571
30572     When compiling using the AAPCS ABI (or a variant of it) then valid
30573     values for the argument are '"aapcs"' and '"aapcs-vfp"'.  In order
30574     to use a variant other than '"aapcs"' then the compiler must be
30575     permitted to use the appropriate co-processor registers (i.e., the
30576     VFP registers must be available in order to use '"aapcs-vfp"').
30577     For example,
30578
30579          /* Argument passed in r0, and result returned in r0+r1.  */
30580          double f2d (float) __attribute__((pcs("aapcs")));
30581
30582     Variadic functions always use the '"aapcs"' calling convention and
30583     the compiler rejects attempts to specify an alternative.
30584
30585'target (OPTIONS)'
30586     As discussed in *note Common Function Attributes::, this attribute
30587     allows specification of target-specific compilation options.
30588
30589     On ARM, the following options are allowed:
30590
30591     'thumb'
30592          Force code generation in the Thumb (T16/T32) ISA, depending on
30593          the architecture level.
30594
30595     'arm'
30596          Force code generation in the ARM (A32) ISA.
30597
30598          Functions from different modes can be inlined in the caller's
30599          mode.
30600
30601     'fpu='
30602          Specifies the fpu for which to tune the performance of this
30603          function.  The behavior and permissible arguments are the same
30604          as for the '-mfpu=' command-line option.
30605
30606     'arch='
30607          Specifies the architecture version and architectural
30608          extensions to use for this function.  The behavior and
30609          permissible arguments are the same as for the '-march='
30610          command-line option.
30611
30612          The above target attributes can be specified as follows:
30613
30614               __attribute__((target("arch=armv8-a+crc")))
30615               int
30616               f (int a)
30617               {
30618                 return a + 5;
30619               }
30620
30621          Additionally, the architectural extension string may be
30622          specified on its own.  This can be used to turn on and off
30623          particular architectural extensions without having to specify
30624          a particular architecture version or core.  Example:
30625
30626               __attribute__((target("+crc+nocrypto")))
30627               int
30628               foo (int a)
30629               {
30630                 return a + 5;
30631               }
30632
30633          In this example 'target("+crc+nocrypto")' enables the 'crc'
30634          extension and disables the 'crypto' extension for the function
30635          'foo' without modifying an existing '-march=' or '-mcpu'
30636          option.
30637
30638
30639File: gcc.info,  Node: AVR Function Attributes,  Next: Blackfin Function Attributes,  Prev: ARM Function Attributes,  Up: Function Attributes
30640
306416.31.5 AVR Function Attributes
30642------------------------------
30643
30644These function attributes are supported by the AVR back end:
30645
30646'interrupt'
30647     Use this attribute to indicate that the specified function is an
30648     interrupt handler.  The compiler generates function entry and exit
30649     sequences suitable for use in an interrupt handler when this
30650     attribute is present.
30651
30652     On the AVR, the hardware globally disables interrupts when an
30653     interrupt is executed.  The first instruction of an interrupt
30654     handler declared with this attribute is a 'SEI' instruction to
30655     re-enable interrupts.  See also the 'signal' function attribute
30656     that does not insert a 'SEI' instruction.  If both 'signal' and
30657     'interrupt' are specified for the same function, 'signal' is
30658     silently ignored.
30659
30660'naked'
30661     This attribute allows the compiler to construct the requisite
30662     function declaration, while allowing the body of the function to be
30663     assembly code.  The specified function will not have
30664     prologue/epilogue sequences generated by the compiler.  Only basic
30665     'asm' statements can safely be included in naked functions (*note
30666     Basic Asm::).  While using extended 'asm' or a mixture of basic
30667     'asm' and C code may appear to work, they cannot be depended upon
30668     to work reliably and are not supported.
30669
30670'no_gccisr'
30671     Do not use '__gcc_isr' pseudo instructions in a function with the
30672     'interrupt' or 'signal' attribute aka.  interrupt service routine
30673     (ISR). Use this attribute if the preamble of the ISR prologue
30674     should always read
30675          push  __zero_reg__
30676          push  __tmp_reg__
30677          in    __tmp_reg__, __SREG__
30678          push  __tmp_reg__
30679          clr   __zero_reg__
30680     and accordingly for the postamble of the epilogue -- no matter
30681     whether the mentioned registers are actually used in the ISR or
30682     not.  Situations where you might want to use this attribute
30683     include:
30684        * Code that (effectively) clobbers bits of 'SREG' other than the
30685          'I'-flag by writing to the memory location of 'SREG'.
30686        * Code that uses inline assembler to jump to a different
30687          function which expects (parts of) the prologue code as
30688          outlined above to be present.
30689     To disable '__gcc_isr' generation for the whole compilation unit,
30690     there is option '-mno-gas-isr-prologues', *note AVR Options::.
30691
30692'OS_main'
30693'OS_task'
30694     On AVR, functions with the 'OS_main' or 'OS_task' attribute do not
30695     save/restore any call-saved register in their prologue/epilogue.
30696
30697     The 'OS_main' attribute can be used when there _is guarantee_ that
30698     interrupts are disabled at the time when the function is entered.
30699     This saves resources when the stack pointer has to be changed to
30700     set up a frame for local variables.
30701
30702     The 'OS_task' attribute can be used when there is _no guarantee_
30703     that interrupts are disabled at that time when the function is
30704     entered like for, e.g.  task functions in a multi-threading
30705     operating system.  In that case, changing the stack pointer
30706     register is guarded by save/clear/restore of the global interrupt
30707     enable flag.
30708
30709     The differences to the 'naked' function attribute are:
30710        * 'naked' functions do not have a return instruction whereas
30711          'OS_main' and 'OS_task' functions have a 'RET' or 'RETI'
30712          return instruction.
30713        * 'naked' functions do not set up a frame for local variables or
30714          a frame pointer whereas 'OS_main' and 'OS_task' do this as
30715          needed.
30716
30717'signal'
30718     Use this attribute on the AVR to indicate that the specified
30719     function is an interrupt handler.  The compiler generates function
30720     entry and exit sequences suitable for use in an interrupt handler
30721     when this attribute is present.
30722
30723     See also the 'interrupt' function attribute.
30724
30725     The AVR hardware globally disables interrupts when an interrupt is
30726     executed.  Interrupt handler functions defined with the 'signal'
30727     attribute do not re-enable interrupts.  It is save to enable
30728     interrupts in a 'signal' handler.  This "save" only applies to the
30729     code generated by the compiler and not to the IRQ layout of the
30730     application which is responsibility of the application.
30731
30732     If both 'signal' and 'interrupt' are specified for the same
30733     function, 'signal' is silently ignored.
30734
30735
30736File: gcc.info,  Node: Blackfin Function Attributes,  Next: CR16 Function Attributes,  Prev: AVR Function Attributes,  Up: Function Attributes
30737
307386.31.6 Blackfin Function Attributes
30739-----------------------------------
30740
30741These function attributes are supported by the Blackfin back end:
30742
30743'exception_handler'
30744     Use this attribute on the Blackfin to indicate that the specified
30745     function is an exception handler.  The compiler generates function
30746     entry and exit sequences suitable for use in an exception handler
30747     when this attribute is present.
30748
30749'interrupt_handler'
30750     Use this attribute to indicate that the specified function is an
30751     interrupt handler.  The compiler generates function entry and exit
30752     sequences suitable for use in an interrupt handler when this
30753     attribute is present.
30754
30755'kspisusp'
30756     When used together with 'interrupt_handler', 'exception_handler' or
30757     'nmi_handler', code is generated to load the stack pointer from the
30758     USP register in the function prologue.
30759
30760'l1_text'
30761     This attribute specifies a function to be placed into L1
30762     Instruction SRAM.  The function is put into a specific section
30763     named '.l1.text'.  With '-mfdpic', function calls with a such
30764     function as the callee or caller uses inlined PLT.
30765
30766'l2'
30767     This attribute specifies a function to be placed into L2 SRAM. The
30768     function is put into a specific section named '.l2.text'.  With
30769     '-mfdpic', callers of such functions use an inlined PLT.
30770
30771'longcall'
30772'shortcall'
30773     The 'longcall' attribute indicates that the function might be far
30774     away from the call site and require a different (more expensive)
30775     calling sequence.  The 'shortcall' attribute indicates that the
30776     function is always close enough for the shorter calling sequence to
30777     be used.  These attributes override the '-mlongcall' switch.
30778
30779'nesting'
30780     Use this attribute together with 'interrupt_handler',
30781     'exception_handler' or 'nmi_handler' to indicate that the function
30782     entry code should enable nested interrupts or exceptions.
30783
30784'nmi_handler'
30785     Use this attribute on the Blackfin to indicate that the specified
30786     function is an NMI handler.  The compiler generates function entry
30787     and exit sequences suitable for use in an NMI handler when this
30788     attribute is present.
30789
30790'saveall'
30791     Use this attribute to indicate that all registers except the stack
30792     pointer should be saved in the prologue regardless of whether they
30793     are used or not.
30794
30795
30796File: gcc.info,  Node: CR16 Function Attributes,  Next: Epiphany Function Attributes,  Prev: Blackfin Function Attributes,  Up: Function Attributes
30797
307986.31.7 CR16 Function Attributes
30799-------------------------------
30800
30801These function attributes are supported by the CR16 back end:
30802
30803'interrupt'
30804     Use this attribute to indicate that the specified function is an
30805     interrupt handler.  The compiler generates function entry and exit
30806     sequences suitable for use in an interrupt handler when this
30807     attribute is present.
30808
30809
30810File: gcc.info,  Node: Epiphany Function Attributes,  Next: H8/300 Function Attributes,  Prev: CR16 Function Attributes,  Up: Function Attributes
30811
308126.31.8 Epiphany Function Attributes
30813-----------------------------------
30814
30815These function attributes are supported by the Epiphany back end:
30816
30817'disinterrupt'
30818     This attribute causes the compiler to emit instructions to disable
30819     interrupts for the duration of the given function.
30820
30821'forwarder_section'
30822     This attribute modifies the behavior of an interrupt handler.  The
30823     interrupt handler may be in external memory which cannot be reached
30824     by a branch instruction, so generate a local memory trampoline to
30825     transfer control.  The single parameter identifies the section
30826     where the trampoline is placed.
30827
30828'interrupt'
30829     Use this attribute to indicate that the specified function is an
30830     interrupt handler.  The compiler generates function entry and exit
30831     sequences suitable for use in an interrupt handler when this
30832     attribute is present.  It may also generate a special section with
30833     code to initialize the interrupt vector table.
30834
30835     On Epiphany targets one or more optional parameters can be added
30836     like this:
30837
30838          void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
30839
30840     Permissible values for these parameters are: 'reset',
30841     'software_exception', 'page_miss', 'timer0', 'timer1', 'message',
30842     'dma0', 'dma1', 'wand' and 'swi'.  Multiple parameters indicate
30843     that multiple entries in the interrupt vector table should be
30844     initialized for this function, i.e. for each parameter NAME, a jump
30845     to the function is emitted in the section ivt_entry_NAME.  The
30846     parameter(s) may be omitted entirely, in which case no interrupt
30847     vector table entry is provided.
30848
30849     Note that interrupts are enabled inside the function unless the
30850     'disinterrupt' attribute is also specified.
30851
30852     The following examples are all valid uses of these attributes on
30853     Epiphany targets:
30854          void __attribute__ ((interrupt)) universal_handler ();
30855          void __attribute__ ((interrupt ("dma1"))) dma1_handler ();
30856          void __attribute__ ((interrupt ("dma0, dma1")))
30857            universal_dma_handler ();
30858          void __attribute__ ((interrupt ("timer0"), disinterrupt))
30859            fast_timer_handler ();
30860          void __attribute__ ((interrupt ("dma0, dma1"),
30861                               forwarder_section ("tramp")))
30862            external_dma_handler ();
30863
30864'long_call'
30865'short_call'
30866     These attributes specify how a particular function is called.
30867     These attributes override the '-mlong-calls' (*note Adapteva
30868     Epiphany Options::) command-line switch and '#pragma long_calls'
30869     settings.
30870
30871
30872File: gcc.info,  Node: H8/300 Function Attributes,  Next: IA-64 Function Attributes,  Prev: Epiphany Function Attributes,  Up: Function Attributes
30873
308746.31.9 H8/300 Function Attributes
30875---------------------------------
30876
30877These function attributes are available for H8/300 targets:
30878
30879'function_vector'
30880     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
30881     the specified function should be called through the function
30882     vector.  Calling a function through the function vector reduces
30883     code size; however, the function vector has a limited size (maximum
30884     128 entries on the H8/300 and 64 entries on the H8/300H and H8S)
30885     and shares space with the interrupt vector.
30886
30887'interrupt_handler'
30888     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
30889     the specified function is an interrupt handler.  The compiler
30890     generates function entry and exit sequences suitable for use in an
30891     interrupt handler when this attribute is present.
30892
30893'saveall'
30894     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
30895     all registers except the stack pointer should be saved in the
30896     prologue regardless of whether they are used or not.
30897
30898
30899File: gcc.info,  Node: IA-64 Function Attributes,  Next: M32C Function Attributes,  Prev: H8/300 Function Attributes,  Up: Function Attributes
30900
309016.31.10 IA-64 Function Attributes
30902---------------------------------
30903
30904These function attributes are supported on IA-64 targets:
30905
30906'syscall_linkage'
30907     This attribute is used to modify the IA-64 calling convention by
30908     marking all input registers as live at all function exits.  This
30909     makes it possible to restart a system call after an interrupt
30910     without having to save/restore the input registers.  This also
30911     prevents kernel data from leaking into application code.
30912
30913'version_id'
30914     This IA-64 HP-UX attribute, attached to a global variable or
30915     function, renames a symbol to contain a version string, thus
30916     allowing for function level versioning.  HP-UX system header files
30917     may use function level versioning for some system calls.
30918
30919          extern int foo () __attribute__((version_id ("20040821")));
30920
30921     Calls to 'foo' are mapped to calls to 'foo{20040821}'.
30922
30923
30924File: gcc.info,  Node: M32C Function Attributes,  Next: M32R/D Function Attributes,  Prev: IA-64 Function Attributes,  Up: Function Attributes
30925
309266.31.11 M32C Function Attributes
30927--------------------------------
30928
30929These function attributes are supported by the M32C back end:
30930
30931'bank_switch'
30932     When added to an interrupt handler with the M32C port, causes the
30933     prologue and epilogue to use bank switching to preserve the
30934     registers rather than saving them on the stack.
30935
30936'fast_interrupt'
30937     Use this attribute on the M32C port to indicate that the specified
30938     function is a fast interrupt handler.  This is just like the
30939     'interrupt' attribute, except that 'freit' is used to return
30940     instead of 'reit'.
30941
30942'function_vector'
30943     On M16C/M32C targets, the 'function_vector' attribute declares a
30944     special page subroutine call function.  Use of this attribute
30945     reduces the code size by 2 bytes for each call generated to the
30946     subroutine.  The argument to the attribute is the vector number
30947     entry from the special page vector table which contains the 16
30948     low-order bits of the subroutine's entry address.  Each vector
30949     table has special page number (18 to 255) that is used in 'jsrs'
30950     instructions.  Jump addresses of the routines are generated by
30951     adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
30952     M32C targets), to the 2-byte addresses set in the vector table.
30953     Therefore you need to ensure that all the special page vector
30954     routines should get mapped within the address range 0x0F0000 to
30955     0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
30956
30957     In the following example 2 bytes are saved for each call to
30958     function 'foo'.
30959
30960          void foo (void) __attribute__((function_vector(0x18)));
30961          void foo (void)
30962          {
30963          }
30964
30965          void bar (void)
30966          {
30967              foo();
30968          }
30969
30970     If functions are defined in one file and are called in another
30971     file, then be sure to write this declaration in both files.
30972
30973     This attribute is ignored for R8C target.
30974
30975'interrupt'
30976     Use this attribute to indicate that the specified function is an
30977     interrupt handler.  The compiler generates function entry and exit
30978     sequences suitable for use in an interrupt handler when this
30979     attribute is present.
30980
30981
30982File: gcc.info,  Node: M32R/D Function Attributes,  Next: m68k Function Attributes,  Prev: M32C Function Attributes,  Up: Function Attributes
30983
309846.31.12 M32R/D Function Attributes
30985----------------------------------
30986
30987These function attributes are supported by the M32R/D back end:
30988
30989'interrupt'
30990     Use this attribute to indicate that the specified function is an
30991     interrupt handler.  The compiler generates function entry and exit
30992     sequences suitable for use in an interrupt handler when this
30993     attribute is present.
30994
30995'model (MODEL-NAME)'
30996
30997     On the M32R/D, use this attribute to set the addressability of an
30998     object, and of the code generated for a function.  The identifier
30999     MODEL-NAME is one of 'small', 'medium', or 'large', representing
31000     each of the code models.
31001
31002     Small model objects live in the lower 16MB of memory (so that their
31003     addresses can be loaded with the 'ld24' instruction), and are
31004     callable with the 'bl' instruction.
31005
31006     Medium model objects may live anywhere in the 32-bit address space
31007     (the compiler generates 'seth/add3' instructions to load their
31008     addresses), and are callable with the 'bl' instruction.
31009
31010     Large model objects may live anywhere in the 32-bit address space
31011     (the compiler generates 'seth/add3' instructions to load their
31012     addresses), and may not be reachable with the 'bl' instruction (the
31013     compiler generates the much slower 'seth/add3/jl' instruction
31014     sequence).
31015
31016
31017File: gcc.info,  Node: m68k Function Attributes,  Next: MCORE Function Attributes,  Prev: M32R/D Function Attributes,  Up: Function Attributes
31018
310196.31.13 m68k Function Attributes
31020--------------------------------
31021
31022These function attributes are supported by the m68k back end:
31023
31024'interrupt'
31025'interrupt_handler'
31026     Use this attribute to indicate that the specified function is an
31027     interrupt handler.  The compiler generates function entry and exit
31028     sequences suitable for use in an interrupt handler when this
31029     attribute is present.  Either name may be used.
31030
31031'interrupt_thread'
31032     Use this attribute on fido, a subarchitecture of the m68k, to
31033     indicate that the specified function is an interrupt handler that
31034     is designed to run as a thread.  The compiler omits generate
31035     prologue/epilogue sequences and replaces the return instruction
31036     with a 'sleep' instruction.  This attribute is available only on
31037     fido.
31038
31039
31040File: gcc.info,  Node: MCORE Function Attributes,  Next: MeP Function Attributes,  Prev: m68k Function Attributes,  Up: Function Attributes
31041
310426.31.14 MCORE Function Attributes
31043---------------------------------
31044
31045These function attributes are supported by the MCORE back end:
31046
31047'naked'
31048     This attribute allows the compiler to construct the requisite
31049     function declaration, while allowing the body of the function to be
31050     assembly code.  The specified function will not have
31051     prologue/epilogue sequences generated by the compiler.  Only basic
31052     'asm' statements can safely be included in naked functions (*note
31053     Basic Asm::).  While using extended 'asm' or a mixture of basic
31054     'asm' and C code may appear to work, they cannot be depended upon
31055     to work reliably and are not supported.
31056
31057
31058File: gcc.info,  Node: MeP Function Attributes,  Next: MicroBlaze Function Attributes,  Prev: MCORE Function Attributes,  Up: Function Attributes
31059
310606.31.15 MeP Function Attributes
31061-------------------------------
31062
31063These function attributes are supported by the MeP back end:
31064
31065'disinterrupt'
31066     On MeP targets, this attribute causes the compiler to emit
31067     instructions to disable interrupts for the duration of the given
31068     function.
31069
31070'interrupt'
31071     Use this attribute to indicate that the specified function is an
31072     interrupt handler.  The compiler generates function entry and exit
31073     sequences suitable for use in an interrupt handler when this
31074     attribute is present.
31075
31076'near'
31077     This attribute causes the compiler to assume the called function is
31078     close enough to use the normal calling convention, overriding the
31079     '-mtf' command-line option.
31080
31081'far'
31082     On MeP targets this causes the compiler to use a calling convention
31083     that assumes the called function is too far away for the built-in
31084     addressing modes.
31085
31086'vliw'
31087     The 'vliw' attribute tells the compiler to emit instructions in
31088     VLIW mode instead of core mode.  Note that this attribute is not
31089     allowed unless a VLIW coprocessor has been configured and enabled
31090     through command-line options.
31091
31092
31093File: gcc.info,  Node: MicroBlaze Function Attributes,  Next: Microsoft Windows Function Attributes,  Prev: MeP Function Attributes,  Up: Function Attributes
31094
310956.31.16 MicroBlaze Function Attributes
31096--------------------------------------
31097
31098These function attributes are supported on MicroBlaze targets:
31099
31100'save_volatiles'
31101     Use this attribute to indicate that the function is an interrupt
31102     handler.  All volatile registers (in addition to non-volatile
31103     registers) are saved in the function prologue.  If the function is
31104     a leaf function, only volatiles used by the function are saved.  A
31105     normal function return is generated instead of a return from
31106     interrupt.
31107
31108'break_handler'
31109     Use this attribute to indicate that the specified function is a
31110     break handler.  The compiler generates function entry and exit
31111     sequences suitable for use in an break handler when this attribute
31112     is present.  The return from 'break_handler' is done through the
31113     'rtbd' instead of 'rtsd'.
31114
31115          void f () __attribute__ ((break_handler));
31116
31117'interrupt_handler'
31118'fast_interrupt'
31119     These attributes indicate that the specified function is an
31120     interrupt handler.  Use the 'fast_interrupt' attribute to indicate
31121     handlers used in low-latency interrupt mode, and
31122     'interrupt_handler' for interrupts that do not use low-latency
31123     handlers.  In both cases, GCC emits appropriate prologue code and
31124     generates a return from the handler using 'rtid' instead of 'rtsd'.
31125
31126
31127File: gcc.info,  Node: Microsoft Windows Function Attributes,  Next: MIPS Function Attributes,  Prev: MicroBlaze Function Attributes,  Up: Function Attributes
31128
311296.31.17 Microsoft Windows Function Attributes
31130---------------------------------------------
31131
31132The following attributes are available on Microsoft Windows and Symbian
31133OS targets.
31134
31135'dllexport'
31136     On Microsoft Windows targets and Symbian OS targets the 'dllexport'
31137     attribute causes the compiler to provide a global pointer to a
31138     pointer in a DLL, so that it can be referenced with the 'dllimport'
31139     attribute.  On Microsoft Windows targets, the pointer name is
31140     formed by combining '_imp__' and the function or variable name.
31141
31142     You can use '__declspec(dllexport)' as a synonym for '__attribute__
31143     ((dllexport))' for compatibility with other compilers.
31144
31145     On systems that support the 'visibility' attribute, this attribute
31146     also implies "default" visibility.  It is an error to explicitly
31147     specify any other visibility.
31148
31149     GCC's default behavior is to emit all inline functions with the
31150     'dllexport' attribute.  Since this can cause object file-size
31151     bloat, you can use '-fno-keep-inline-dllexport', which tells GCC to
31152     ignore the attribute for inlined functions unless the
31153     '-fkeep-inline-functions' flag is used instead.
31154
31155     The attribute is ignored for undefined symbols.
31156
31157     When applied to C++ classes, the attribute marks defined
31158     non-inlined member functions and static data members as exports.
31159     Static consts initialized in-class are not marked unless they are
31160     also defined out-of-class.
31161
31162     For Microsoft Windows targets there are alternative methods for
31163     including the symbol in the DLL's export table such as using a
31164     '.def' file with an 'EXPORTS' section or, with GNU ld, using the
31165     '--export-all' linker flag.
31166
31167'dllimport'
31168     On Microsoft Windows and Symbian OS targets, the 'dllimport'
31169     attribute causes the compiler to reference a function or variable
31170     via a global pointer to a pointer that is set up by the DLL
31171     exporting the symbol.  The attribute implies 'extern'.  On
31172     Microsoft Windows targets, the pointer name is formed by combining
31173     '_imp__' and the function or variable name.
31174
31175     You can use '__declspec(dllimport)' as a synonym for '__attribute__
31176     ((dllimport))' for compatibility with other compilers.
31177
31178     On systems that support the 'visibility' attribute, this attribute
31179     also implies "default" visibility.  It is an error to explicitly
31180     specify any other visibility.
31181
31182     Currently, the attribute is ignored for inlined functions.  If the
31183     attribute is applied to a symbol _definition_, an error is
31184     reported.  If a symbol previously declared 'dllimport' is later
31185     defined, the attribute is ignored in subsequent references, and a
31186     warning is emitted.  The attribute is also overridden by a
31187     subsequent declaration as 'dllexport'.
31188
31189     When applied to C++ classes, the attribute marks non-inlined member
31190     functions and static data members as imports.  However, the
31191     attribute is ignored for virtual methods to allow creation of
31192     vtables using thunks.
31193
31194     On the SH Symbian OS target the 'dllimport' attribute also has
31195     another affect--it can cause the vtable and run-time type
31196     information for a class to be exported.  This happens when the
31197     class has a dllimported constructor or a non-inline, non-pure
31198     virtual function and, for either of those two conditions, the class
31199     also has an inline constructor or destructor and has a key function
31200     that is defined in the current translation unit.
31201
31202     For Microsoft Windows targets the use of the 'dllimport' attribute
31203     on functions is not necessary, but provides a small performance
31204     benefit by eliminating a thunk in the DLL.  The use of the
31205     'dllimport' attribute on imported variables can be avoided by
31206     passing the '--enable-auto-import' switch to the GNU linker.  As
31207     with functions, using the attribute for a variable eliminates a
31208     thunk in the DLL.
31209
31210     One drawback to using this attribute is that a pointer to a
31211     _variable_ marked as 'dllimport' cannot be used as a constant
31212     address.  However, a pointer to a _function_ with the 'dllimport'
31213     attribute can be used as a constant initializer; in this case, the
31214     address of a stub function in the import lib is referenced.  On
31215     Microsoft Windows targets, the attribute can be disabled for
31216     functions by setting the '-mnop-fun-dllimport' flag.
31217
31218
31219File: gcc.info,  Node: MIPS Function Attributes,  Next: MSP430 Function Attributes,  Prev: Microsoft Windows Function Attributes,  Up: Function Attributes
31220
312216.31.18 MIPS Function Attributes
31222--------------------------------
31223
31224These function attributes are supported by the MIPS back end:
31225
31226'interrupt'
31227     Use this attribute to indicate that the specified function is an
31228     interrupt handler.  The compiler generates function entry and exit
31229     sequences suitable for use in an interrupt handler when this
31230     attribute is present.  An optional argument is supported for the
31231     interrupt attribute which allows the interrupt mode to be
31232     described.  By default GCC assumes the external interrupt
31233     controller (EIC) mode is in use, this can be explicitly set using
31234     'eic'.  When interrupts are non-masked then the requested Interrupt
31235     Priority Level (IPL) is copied to the current IPL which has the
31236     effect of only enabling higher priority interrupts.  To use
31237     vectored interrupt mode use the argument
31238     'vector=[sw0|sw1|hw0|hw1|hw2|hw3|hw4|hw5]', this will change the
31239     behavior of the non-masked interrupt support and GCC will arrange
31240     to mask all interrupts from sw0 up to and including the specified
31241     interrupt vector.
31242
31243     You can use the following attributes to modify the behavior of an
31244     interrupt handler:
31245     'use_shadow_register_set'
31246          Assume that the handler uses a shadow register set, instead of
31247          the main general-purpose registers.  An optional argument
31248          'intstack' is supported to indicate that the shadow register
31249          set contains a valid stack pointer.
31250
31251     'keep_interrupts_masked'
31252          Keep interrupts masked for the whole function.  Without this
31253          attribute, GCC tries to reenable interrupts for as much of the
31254          function as it can.
31255
31256     'use_debug_exception_return'
31257          Return using the 'deret' instruction.  Interrupt handlers that
31258          don't have this attribute return using 'eret' instead.
31259
31260     You can use any combination of these attributes, as shown below:
31261          void __attribute__ ((interrupt)) v0 ();
31262          void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
31263          void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
31264          void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
31265          void __attribute__ ((interrupt, use_shadow_register_set,
31266                               keep_interrupts_masked)) v4 ();
31267          void __attribute__ ((interrupt, use_shadow_register_set,
31268                               use_debug_exception_return)) v5 ();
31269          void __attribute__ ((interrupt, keep_interrupts_masked,
31270                               use_debug_exception_return)) v6 ();
31271          void __attribute__ ((interrupt, use_shadow_register_set,
31272                               keep_interrupts_masked,
31273                               use_debug_exception_return)) v7 ();
31274          void __attribute__ ((interrupt("eic"))) v8 ();
31275          void __attribute__ ((interrupt("vector=hw3"))) v9 ();
31276
31277'long_call'
31278'short_call'
31279'near'
31280'far'
31281     These attributes specify how a particular function is called on
31282     MIPS.  The attributes override the '-mlong-calls' (*note MIPS
31283     Options::) command-line switch.  The 'long_call' and 'far'
31284     attributes are synonyms, and cause the compiler to always call the
31285     function by first loading its address into a register, and then
31286     using the contents of that register.  The 'short_call' and 'near'
31287     attributes are synonyms, and have the opposite effect; they specify
31288     that non-PIC calls should be made using the more efficient 'jal'
31289     instruction.
31290
31291'mips16'
31292'nomips16'
31293
31294     On MIPS targets, you can use the 'mips16' and 'nomips16' function
31295     attributes to locally select or turn off MIPS16 code generation.  A
31296     function with the 'mips16' attribute is emitted as MIPS16 code,
31297     while MIPS16 code generation is disabled for functions with the
31298     'nomips16' attribute.  These attributes override the '-mips16' and
31299     '-mno-mips16' options on the command line (*note MIPS Options::).
31300
31301     When compiling files containing mixed MIPS16 and non-MIPS16 code,
31302     the preprocessor symbol '__mips16' reflects the setting on the
31303     command line, not that within individual functions.  Mixed MIPS16
31304     and non-MIPS16 code may interact badly with some GCC extensions
31305     such as '__builtin_apply' (*note Constructing Calls::).
31306
31307'micromips, MIPS'
31308'nomicromips, MIPS'
31309
31310     On MIPS targets, you can use the 'micromips' and 'nomicromips'
31311     function attributes to locally select or turn off microMIPS code
31312     generation.  A function with the 'micromips' attribute is emitted
31313     as microMIPS code, while microMIPS code generation is disabled for
31314     functions with the 'nomicromips' attribute.  These attributes
31315     override the '-mmicromips' and '-mno-micromips' options on the
31316     command line (*note MIPS Options::).
31317
31318     When compiling files containing mixed microMIPS and non-microMIPS
31319     code, the preprocessor symbol '__mips_micromips' reflects the
31320     setting on the command line, not that within individual functions.
31321     Mixed microMIPS and non-microMIPS code may interact badly with some
31322     GCC extensions such as '__builtin_apply' (*note Constructing
31323     Calls::).
31324
31325'nocompression'
31326     On MIPS targets, you can use the 'nocompression' function attribute
31327     to locally turn off MIPS16 and microMIPS code generation.  This
31328     attribute overrides the '-mips16' and '-mmicromips' options on the
31329     command line (*note MIPS Options::).
31330
31331
31332File: gcc.info,  Node: MSP430 Function Attributes,  Next: NDS32 Function Attributes,  Prev: MIPS Function Attributes,  Up: Function Attributes
31333
313346.31.19 MSP430 Function Attributes
31335----------------------------------
31336
31337These function attributes are supported by the MSP430 back end:
31338
31339'critical'
31340     Critical functions disable interrupts upon entry and restore the
31341     previous interrupt state upon exit.  Critical functions cannot also
31342     have the 'naked' or 'reentrant' attributes.  They can have the
31343     'interrupt' attribute.
31344
31345'interrupt'
31346     Use this attribute to indicate that the specified function is an
31347     interrupt handler.  The compiler generates function entry and exit
31348     sequences suitable for use in an interrupt handler when this
31349     attribute is present.
31350
31351     You can provide an argument to the interrupt attribute which
31352     specifies a name or number.  If the argument is a number it
31353     indicates the slot in the interrupt vector table (0 - 31) to which
31354     this handler should be assigned.  If the argument is a name it is
31355     treated as a symbolic name for the vector slot.  These names should
31356     match up with appropriate entries in the linker script.  By default
31357     the names 'watchdog' for vector 26, 'nmi' for vector 30 and 'reset'
31358     for vector 31 are recognized.
31359
31360'naked'
31361     This attribute allows the compiler to construct the requisite
31362     function declaration, while allowing the body of the function to be
31363     assembly code.  The specified function will not have
31364     prologue/epilogue sequences generated by the compiler.  Only basic
31365     'asm' statements can safely be included in naked functions (*note
31366     Basic Asm::).  While using extended 'asm' or a mixture of basic
31367     'asm' and C code may appear to work, they cannot be depended upon
31368     to work reliably and are not supported.
31369
31370'reentrant'
31371     Reentrant functions disable interrupts upon entry and enable them
31372     upon exit.  Reentrant functions cannot also have the 'naked' or
31373     'critical' attributes.  They can have the 'interrupt' attribute.
31374
31375'wakeup'
31376     This attribute only applies to interrupt functions.  It is silently
31377     ignored if applied to a non-interrupt function.  A wakeup interrupt
31378     function will rouse the processor from any low-power state that it
31379     might be in when the function exits.
31380
31381'lower'
31382'upper'
31383'either'
31384     On the MSP430 target these attributes can be used to specify
31385     whether the function or variable should be placed into low memory,
31386     high memory, or the placement should be left to the linker to
31387     decide.  The attributes are only significant if compiling for the
31388     MSP430X architecture.
31389
31390     The attributes work in conjunction with a linker script that has
31391     been augmented to specify where to place sections with a '.lower'
31392     and a '.upper' prefix.  So, for example, as well as placing the
31393     '.data' section, the script also specifies the placement of a
31394     '.lower.data' and a '.upper.data' section.  The intention is that
31395     'lower' sections are placed into a small but easier to access
31396     memory region and the upper sections are placed into a larger, but
31397     slower to access, region.
31398
31399     The 'either' attribute is special.  It tells the linker to place
31400     the object into the corresponding 'lower' section if there is room
31401     for it.  If there is insufficient room then the object is placed
31402     into the corresponding 'upper' section instead.  Note that the
31403     placement algorithm is not very sophisticated.  It does not attempt
31404     to find an optimal packing of the 'lower' sections.  It just makes
31405     one pass over the objects and does the best that it can.  Using the
31406     '-ffunction-sections' and '-fdata-sections' command-line options
31407     can help the packing, however, since they produce smaller, easier
31408     to pack regions.
31409
31410
31411File: gcc.info,  Node: NDS32 Function Attributes,  Next: Nios II Function Attributes,  Prev: MSP430 Function Attributes,  Up: Function Attributes
31412
314136.31.20 NDS32 Function Attributes
31414---------------------------------
31415
31416These function attributes are supported by the NDS32 back end:
31417
31418'exception'
31419     Use this attribute on the NDS32 target to indicate that the
31420     specified function is an exception handler.  The compiler will
31421     generate corresponding sections for use in an exception handler.
31422
31423'interrupt'
31424     On NDS32 target, this attribute indicates that the specified
31425     function is an interrupt handler.  The compiler generates
31426     corresponding sections for use in an interrupt handler.  You can
31427     use the following attributes to modify the behavior:
31428     'nested'
31429          This interrupt service routine is interruptible.
31430     'not_nested'
31431          This interrupt service routine is not interruptible.
31432     'nested_ready'
31433          This interrupt service routine is interruptible after
31434          'PSW.GIE' (global interrupt enable) is set.  This allows
31435          interrupt service routine to finish some short critical code
31436          before enabling interrupts.
31437     'save_all'
31438          The system will help save all registers into stack before
31439          entering interrupt handler.
31440     'partial_save'
31441          The system will help save caller registers into stack before
31442          entering interrupt handler.
31443
31444'naked'
31445     This attribute allows the compiler to construct the requisite
31446     function declaration, while allowing the body of the function to be
31447     assembly code.  The specified function will not have
31448     prologue/epilogue sequences generated by the compiler.  Only basic
31449     'asm' statements can safely be included in naked functions (*note
31450     Basic Asm::).  While using extended 'asm' or a mixture of basic
31451     'asm' and C code may appear to work, they cannot be depended upon
31452     to work reliably and are not supported.
31453
31454'reset'
31455     Use this attribute on the NDS32 target to indicate that the
31456     specified function is a reset handler.  The compiler will generate
31457     corresponding sections for use in a reset handler.  You can use the
31458     following attributes to provide extra exception handling:
31459     'nmi'
31460          Provide a user-defined function to handle NMI exception.
31461     'warm'
31462          Provide a user-defined function to handle warm reset
31463          exception.
31464
31465
31466File: gcc.info,  Node: Nios II Function Attributes,  Next: Nvidia PTX Function Attributes,  Prev: NDS32 Function Attributes,  Up: Function Attributes
31467
314686.31.21 Nios II Function Attributes
31469-----------------------------------
31470
31471These function attributes are supported by the Nios II back end:
31472
31473'target (OPTIONS)'
31474     As discussed in *note Common Function Attributes::, this attribute
31475     allows specification of target-specific compilation options.
31476
31477     When compiling for Nios II, the following options are allowed:
31478
31479     'custom-INSN=N'
31480     'no-custom-INSN'
31481          Each 'custom-INSN=N' attribute locally enables use of a custom
31482          instruction with encoding N when generating code that uses
31483          INSN.  Similarly, 'no-custom-INSN' locally inhibits use of the
31484          custom instruction INSN.  These target attributes correspond
31485          to the '-mcustom-INSN=N' and '-mno-custom-INSN' command-line
31486          options, and support the same set of INSN keywords.  *Note
31487          Nios II Options::, for more information.
31488
31489     'custom-fpu-cfg=NAME'
31490          This attribute corresponds to the '-mcustom-fpu-cfg=NAME'
31491          command-line option, to select a predefined set of custom
31492          instructions named NAME.  *Note Nios II Options::, for more
31493          information.
31494
31495
31496File: gcc.info,  Node: Nvidia PTX Function Attributes,  Next: PowerPC Function Attributes,  Prev: Nios II Function Attributes,  Up: Function Attributes
31497
314986.31.22 Nvidia PTX Function Attributes
31499--------------------------------------
31500
31501These function attributes are supported by the Nvidia PTX back end:
31502
31503'kernel'
31504     This attribute indicates that the corresponding function should be
31505     compiled as a kernel function, which can be invoked from the host
31506     via the CUDA RT library.  By default functions are only callable
31507     only from other PTX functions.
31508
31509     Kernel functions must have 'void' return type.
31510
31511
31512File: gcc.info,  Node: PowerPC Function Attributes,  Next: RISC-V Function Attributes,  Prev: Nvidia PTX Function Attributes,  Up: Function Attributes
31513
315146.31.23 PowerPC Function Attributes
31515-----------------------------------
31516
31517These function attributes are supported by the PowerPC back end:
31518
31519'longcall'
31520'shortcall'
31521     The 'longcall' attribute indicates that the function might be far
31522     away from the call site and require a different (more expensive)
31523     calling sequence.  The 'shortcall' attribute indicates that the
31524     function is always close enough for the shorter calling sequence to
31525     be used.  These attributes override both the '-mlongcall' switch
31526     and the '#pragma longcall' setting.
31527
31528     *Note RS/6000 and PowerPC Options::, for more information on
31529     whether long calls are necessary.
31530
31531'target (OPTIONS)'
31532     As discussed in *note Common Function Attributes::, this attribute
31533     allows specification of target-specific compilation options.
31534
31535     On the PowerPC, the following options are allowed:
31536
31537     'altivec'
31538     'no-altivec'
31539          Generate code that uses (does not use) AltiVec instructions.
31540          In 32-bit code, you cannot enable AltiVec instructions unless
31541          '-mabi=altivec' is used on the command line.
31542
31543     'cmpb'
31544     'no-cmpb'
31545          Generate code that uses (does not use) the compare bytes
31546          instruction implemented on the POWER6 processor and other
31547          processors that support the PowerPC V2.05 architecture.
31548
31549     'dlmzb'
31550     'no-dlmzb'
31551          Generate code that uses (does not use) the string-search
31552          'dlmzb' instruction on the IBM 405, 440, 464 and 476
31553          processors.  This instruction is generated by default when
31554          targeting those processors.
31555
31556     'fprnd'
31557     'no-fprnd'
31558          Generate code that uses (does not use) the FP round to integer
31559          instructions implemented on the POWER5+ processor and other
31560          processors that support the PowerPC V2.03 architecture.
31561
31562     'hard-dfp'
31563     'no-hard-dfp'
31564          Generate code that uses (does not use) the decimal
31565          floating-point instructions implemented on some POWER
31566          processors.
31567
31568     'isel'
31569     'no-isel'
31570          Generate code that uses (does not use) ISEL instruction.
31571
31572     'mfcrf'
31573     'no-mfcrf'
31574          Generate code that uses (does not use) the move from condition
31575          register field instruction implemented on the POWER4 processor
31576          and other processors that support the PowerPC V2.01
31577          architecture.
31578
31579     'mfpgpr'
31580     'no-mfpgpr'
31581          Generate code that uses (does not use) the FP move to/from
31582          general purpose register instructions implemented on the
31583          POWER6X processor and other processors that support the
31584          extended PowerPC V2.05 architecture.
31585
31586     'mulhw'
31587     'no-mulhw'
31588          Generate code that uses (does not use) the half-word multiply
31589          and multiply-accumulate instructions on the IBM 405, 440, 464
31590          and 476 processors.  These instructions are generated by
31591          default when targeting those processors.
31592
31593     'multiple'
31594     'no-multiple'
31595          Generate code that uses (does not use) the load multiple word
31596          instructions and the store multiple word instructions.
31597
31598     'update'
31599     'no-update'
31600          Generate code that uses (does not use) the load or store
31601          instructions that update the base register to the address of
31602          the calculated memory location.
31603
31604     'popcntb'
31605     'no-popcntb'
31606          Generate code that uses (does not use) the popcount and
31607          double-precision FP reciprocal estimate instruction
31608          implemented on the POWER5 processor and other processors that
31609          support the PowerPC V2.02 architecture.
31610
31611     'popcntd'
31612     'no-popcntd'
31613          Generate code that uses (does not use) the popcount
31614          instruction implemented on the POWER7 processor and other
31615          processors that support the PowerPC V2.06 architecture.
31616
31617     'powerpc-gfxopt'
31618     'no-powerpc-gfxopt'
31619          Generate code that uses (does not use) the optional PowerPC
31620          architecture instructions in the Graphics group, including
31621          floating-point select.
31622
31623     'powerpc-gpopt'
31624     'no-powerpc-gpopt'
31625          Generate code that uses (does not use) the optional PowerPC
31626          architecture instructions in the General Purpose group,
31627          including floating-point square root.
31628
31629     'recip-precision'
31630     'no-recip-precision'
31631          Assume (do not assume) that the reciprocal estimate
31632          instructions provide higher-precision estimates than is
31633          mandated by the PowerPC ABI.
31634
31635     'string'
31636     'no-string'
31637          Generate code that uses (does not use) the load string
31638          instructions and the store string word instructions to save
31639          multiple registers and do small block moves.
31640
31641     'vsx'
31642     'no-vsx'
31643          Generate code that uses (does not use) vector/scalar (VSX)
31644          instructions, and also enable the use of built-in functions
31645          that allow more direct access to the VSX instruction set.  In
31646          32-bit code, you cannot enable VSX or AltiVec instructions
31647          unless '-mabi=altivec' is used on the command line.
31648
31649     'friz'
31650     'no-friz'
31651          Generate (do not generate) the 'friz' instruction when the
31652          '-funsafe-math-optimizations' option is used to optimize
31653          rounding a floating-point value to 64-bit integer and back to
31654          floating point.  The 'friz' instruction does not return the
31655          same value if the floating-point number is too large to fit in
31656          an integer.
31657
31658     'avoid-indexed-addresses'
31659     'no-avoid-indexed-addresses'
31660          Generate code that tries to avoid (not avoid) the use of
31661          indexed load or store instructions.
31662
31663     'paired'
31664     'no-paired'
31665          Generate code that uses (does not use) the generation of
31666          PAIRED simd instructions.
31667
31668     'longcall'
31669     'no-longcall'
31670          Generate code that assumes (does not assume) that all calls
31671          are far away so that a longer more expensive calling sequence
31672          is required.
31673
31674     'cpu=CPU'
31675          Specify the architecture to generate code for when compiling
31676          the function.  If you select the 'target("cpu=power7")'
31677          attribute when generating 32-bit code, VSX and AltiVec
31678          instructions are not generated unless you use the
31679          '-mabi=altivec' option on the command line.
31680
31681     'tune=TUNE'
31682          Specify the architecture to tune for when compiling the
31683          function.  If you do not specify the 'target("tune=TUNE")'
31684          attribute and you do specify the 'target("cpu=CPU")'
31685          attribute, compilation tunes for the CPU architecture, and not
31686          the default tuning specified on the command line.
31687
31688     On the PowerPC, the inliner does not inline a function that has
31689     different target options than the caller, unless the callee has a
31690     subset of the target options of the caller.
31691
31692
31693File: gcc.info,  Node: RISC-V Function Attributes,  Next: RL78 Function Attributes,  Prev: PowerPC Function Attributes,  Up: Function Attributes
31694
316956.31.24 RISC-V Function Attributes
31696----------------------------------
31697
31698These function attributes are supported by the RISC-V back end:
31699
31700'naked'
31701     This attribute allows the compiler to construct the requisite
31702     function declaration, while allowing the body of the function to be
31703     assembly code.  The specified function will not have
31704     prologue/epilogue sequences generated by the compiler.  Only basic
31705     'asm' statements can safely be included in naked functions (*note
31706     Basic Asm::).  While using extended 'asm' or a mixture of basic
31707     'asm' and C code may appear to work, they cannot be depended upon
31708     to work reliably and are not supported.
31709
31710
31711File: gcc.info,  Node: RL78 Function Attributes,  Next: RX Function Attributes,  Prev: RISC-V Function Attributes,  Up: Function Attributes
31712
317136.31.25 RL78 Function Attributes
31714--------------------------------
31715
31716These function attributes are supported by the RL78 back end:
31717
31718'interrupt'
31719'brk_interrupt'
31720     These attributes indicate that the specified function is an
31721     interrupt handler.  The compiler generates function entry and exit
31722     sequences suitable for use in an interrupt handler when this
31723     attribute is present.
31724
31725     Use 'brk_interrupt' instead of 'interrupt' for handlers intended to
31726     be used with the 'BRK' opcode (i.e. those that must end with 'RETB'
31727     instead of 'RETI').
31728
31729'naked'
31730     This attribute allows the compiler to construct the requisite
31731     function declaration, while allowing the body of the function to be
31732     assembly code.  The specified function will not have
31733     prologue/epilogue sequences generated by the compiler.  Only basic
31734     'asm' statements can safely be included in naked functions (*note
31735     Basic Asm::).  While using extended 'asm' or a mixture of basic
31736     'asm' and C code may appear to work, they cannot be depended upon
31737     to work reliably and are not supported.
31738
31739
31740File: gcc.info,  Node: RX Function Attributes,  Next: S/390 Function Attributes,  Prev: RL78 Function Attributes,  Up: Function Attributes
31741
317426.31.26 RX Function Attributes
31743------------------------------
31744
31745These function attributes are supported by the RX back end:
31746
31747'fast_interrupt'
31748     Use this attribute on the RX port to indicate that the specified
31749     function is a fast interrupt handler.  This is just like the
31750     'interrupt' attribute, except that 'freit' is used to return
31751     instead of 'reit'.
31752
31753'interrupt'
31754     Use this attribute to indicate that the specified function is an
31755     interrupt handler.  The compiler generates function entry and exit
31756     sequences suitable for use in an interrupt handler when this
31757     attribute is present.
31758
31759     On RX and RL78 targets, you may specify one or more vector numbers
31760     as arguments to the attribute, as well as naming an alternate table
31761     name.  Parameters are handled sequentially, so one handler can be
31762     assigned to multiple entries in multiple tables.  One may also pass
31763     the magic string '"$default"' which causes the function to be used
31764     for any unfilled slots in the current table.
31765
31766     This example shows a simple assignment of a function to one vector
31767     in the default table (note that preprocessor macros may be used for
31768     chip-specific symbolic vector names):
31769          void __attribute__ ((interrupt (5))) txd1_handler ();
31770
31771     This example assigns a function to two slots in the default table
31772     (using preprocessor macros defined elsewhere) and makes it the
31773     default for the 'dct' table:
31774          void __attribute__ ((interrupt (RXD1_VECT,RXD2_VECT,"dct","$default")))
31775          	txd1_handler ();
31776
31777'naked'
31778     This attribute allows the compiler to construct the requisite
31779     function declaration, while allowing the body of the function to be
31780     assembly code.  The specified function will not have
31781     prologue/epilogue sequences generated by the compiler.  Only basic
31782     'asm' statements can safely be included in naked functions (*note
31783     Basic Asm::).  While using extended 'asm' or a mixture of basic
31784     'asm' and C code may appear to work, they cannot be depended upon
31785     to work reliably and are not supported.
31786
31787'vector'
31788     This RX attribute is similar to the 'interrupt' attribute,
31789     including its parameters, but does not make the function an
31790     interrupt-handler type function (i.e.  it retains the normal C
31791     function calling ABI). See the 'interrupt' attribute for a
31792     description of its arguments.
31793
31794
31795File: gcc.info,  Node: S/390 Function Attributes,  Next: SH Function Attributes,  Prev: RX Function Attributes,  Up: Function Attributes
31796
317976.31.27 S/390 Function Attributes
31798---------------------------------
31799
31800These function attributes are supported on the S/390:
31801
31802'hotpatch (HALFWORDS-BEFORE-FUNCTION-LABEL,HALFWORDS-AFTER-FUNCTION-LABEL)'
31803
31804     On S/390 System z targets, you can use this function attribute to
31805     make GCC generate a "hot-patching" function prologue.  If the
31806     '-mhotpatch=' command-line option is used at the same time, the
31807     'hotpatch' attribute takes precedence.  The first of the two
31808     arguments specifies the number of halfwords to be added before the
31809     function label.  A second argument can be used to specify the
31810     number of halfwords to be added after the function label.  For both
31811     arguments the maximum allowed value is 1000000.
31812
31813     If both arguments are zero, hotpatching is disabled.
31814
31815'target (OPTIONS)'
31816     As discussed in *note Common Function Attributes::, this attribute
31817     allows specification of target-specific compilation options.
31818
31819     On S/390, the following options are supported:
31820
31821     'arch='
31822     'tune='
31823     'stack-guard='
31824     'stack-size='
31825     'branch-cost='
31826     'warn-framesize='
31827     'backchain'
31828     'no-backchain'
31829     'hard-dfp'
31830     'no-hard-dfp'
31831     'hard-float'
31832     'soft-float'
31833     'htm'
31834     'no-htm'
31835     'vx'
31836     'no-vx'
31837     'packed-stack'
31838     'no-packed-stack'
31839     'small-exec'
31840     'no-small-exec'
31841     'mvcle'
31842     'no-mvcle'
31843     'warn-dynamicstack'
31844     'no-warn-dynamicstack'
31845
31846     The options work exactly like the S/390 specific command line
31847     options (without the prefix '-m') except that they do not change
31848     any feature macros.  For example,
31849
31850          target("no-vx")
31851
31852     does not undefine the '__VEC__' macro.
31853
31854
31855File: gcc.info,  Node: SH Function Attributes,  Next: SPU Function Attributes,  Prev: S/390 Function Attributes,  Up: Function Attributes
31856
318576.31.28 SH Function Attributes
31858------------------------------
31859
31860These function attributes are supported on the SH family of processors:
31861
31862'function_vector'
31863     On SH2A targets, this attribute declares a function to be called
31864     using the TBR relative addressing mode.  The argument to this
31865     attribute is the entry number of the same function in a vector
31866     table containing all the TBR relative addressable functions.  For
31867     correct operation the TBR must be setup accordingly to point to the
31868     start of the vector table before any functions with this attribute
31869     are invoked.  Usually a good place to do the initialization is the
31870     startup routine.  The TBR relative vector table can have at max 256
31871     function entries.  The jumps to these functions are generated using
31872     a SH2A specific, non delayed branch instruction JSR/N @(disp8,TBR).
31873     You must use GAS and GLD from GNU binutils version 2.7 or later for
31874     this attribute to work correctly.
31875
31876     In an application, for a function being called once, this attribute
31877     saves at least 8 bytes of code; and if other successive calls are
31878     being made to the same function, it saves 2 bytes of code per each
31879     of these calls.
31880
31881'interrupt_handler'
31882     Use this attribute to indicate that the specified function is an
31883     interrupt handler.  The compiler generates function entry and exit
31884     sequences suitable for use in an interrupt handler when this
31885     attribute is present.
31886
31887'nosave_low_regs'
31888     Use this attribute on SH targets to indicate that an
31889     'interrupt_handler' function should not save and restore registers
31890     R0..R7.  This can be used on SH3* and SH4* targets that have a
31891     second R0..R7 register bank for non-reentrant interrupt handlers.
31892
31893'renesas'
31894     On SH targets this attribute specifies that the function or struct
31895     follows the Renesas ABI.
31896
31897'resbank'
31898     On the SH2A target, this attribute enables the high-speed register
31899     saving and restoration using a register bank for
31900     'interrupt_handler' routines.  Saving to the bank is performed
31901     automatically after the CPU accepts an interrupt that uses a
31902     register bank.
31903
31904     The nineteen 32-bit registers comprising general register R0 to
31905     R14, control register GBR, and system registers MACH, MACL, and PR
31906     and the vector table address offset are saved into a register bank.
31907     Register banks are stacked in first-in last-out (FILO) sequence.
31908     Restoration from the bank is executed by issuing a RESBANK
31909     instruction.
31910
31911'sp_switch'
31912     Use this attribute on the SH to indicate an 'interrupt_handler'
31913     function should switch to an alternate stack.  It expects a string
31914     argument that names a global variable holding the address of the
31915     alternate stack.
31916
31917          void *alt_stack;
31918          void f () __attribute__ ((interrupt_handler,
31919                                    sp_switch ("alt_stack")));
31920
31921'trap_exit'
31922     Use this attribute on the SH for an 'interrupt_handler' to return
31923     using 'trapa' instead of 'rte'.  This attribute expects an integer
31924     argument specifying the trap number to be used.
31925
31926'trapa_handler'
31927     On SH targets this function attribute is similar to
31928     'interrupt_handler' but it does not save and restore all registers.
31929
31930
31931File: gcc.info,  Node: SPU Function Attributes,  Next: Symbian OS Function Attributes,  Prev: SH Function Attributes,  Up: Function Attributes
31932
319336.31.29 SPU Function Attributes
31934-------------------------------
31935
31936These function attributes are supported by the SPU back end:
31937
31938'naked'
31939     This attribute allows the compiler to construct the requisite
31940     function declaration, while allowing the body of the function to be
31941     assembly code.  The specified function will not have
31942     prologue/epilogue sequences generated by the compiler.  Only basic
31943     'asm' statements can safely be included in naked functions (*note
31944     Basic Asm::).  While using extended 'asm' or a mixture of basic
31945     'asm' and C code may appear to work, they cannot be depended upon
31946     to work reliably and are not supported.
31947
31948
31949File: gcc.info,  Node: Symbian OS Function Attributes,  Next: V850 Function Attributes,  Prev: SPU Function Attributes,  Up: Function Attributes
31950
319516.31.30 Symbian OS Function Attributes
31952--------------------------------------
31953
31954*Note Microsoft Windows Function Attributes::, for discussion of the
31955'dllexport' and 'dllimport' attributes.
31956
31957
31958File: gcc.info,  Node: V850 Function Attributes,  Next: Visium Function Attributes,  Prev: Symbian OS Function Attributes,  Up: Function Attributes
31959
319606.31.31 V850 Function Attributes
31961--------------------------------
31962
31963The V850 back end supports these function attributes:
31964
31965'interrupt'
31966'interrupt_handler'
31967     Use these attributes to indicate that the specified function is an
31968     interrupt handler.  The compiler generates function entry and exit
31969     sequences suitable for use in an interrupt handler when either
31970     attribute is present.
31971
31972
31973File: gcc.info,  Node: Visium Function Attributes,  Next: x86 Function Attributes,  Prev: V850 Function Attributes,  Up: Function Attributes
31974
319756.31.32 Visium Function Attributes
31976----------------------------------
31977
31978These function attributes are supported by the Visium back end:
31979
31980'interrupt'
31981     Use this attribute to indicate that the specified function is an
31982     interrupt handler.  The compiler generates function entry and exit
31983     sequences suitable for use in an interrupt handler when this
31984     attribute is present.
31985
31986
31987File: gcc.info,  Node: x86 Function Attributes,  Next: Xstormy16 Function Attributes,  Prev: Visium Function Attributes,  Up: Function Attributes
31988
319896.31.33 x86 Function Attributes
31990-------------------------------
31991
31992These function attributes are supported by the x86 back end:
31993
31994'cdecl'
31995     On the x86-32 targets, the 'cdecl' attribute causes the compiler to
31996     assume that the calling function pops off the stack space used to
31997     pass arguments.  This is useful to override the effects of the
31998     '-mrtd' switch.
31999
32000'fastcall'
32001     On x86-32 targets, the 'fastcall' attribute causes the compiler to
32002     pass the first argument (if of integral type) in the register ECX
32003     and the second argument (if of integral type) in the register EDX.
32004     Subsequent and other typed arguments are passed on the stack.  The
32005     called function pops the arguments off the stack.  If the number of
32006     arguments is variable all arguments are pushed on the stack.
32007
32008'thiscall'
32009     On x86-32 targets, the 'thiscall' attribute causes the compiler to
32010     pass the first argument (if of integral type) in the register ECX.
32011     Subsequent and other typed arguments are passed on the stack.  The
32012     called function pops the arguments off the stack.  If the number of
32013     arguments is variable all arguments are pushed on the stack.  The
32014     'thiscall' attribute is intended for C++ non-static member
32015     functions.  As a GCC extension, this calling convention can be used
32016     for C functions and for static member methods.
32017
32018'ms_abi'
32019'sysv_abi'
32020
32021     On 32-bit and 64-bit x86 targets, you can use an ABI attribute to
32022     indicate which calling convention should be used for a function.
32023     The 'ms_abi' attribute tells the compiler to use the Microsoft ABI,
32024     while the 'sysv_abi' attribute tells the compiler to use the ABI
32025     used on GNU/Linux and other systems.  The default is to use the
32026     Microsoft ABI when targeting Windows.  On all other systems, the
32027     default is the x86/AMD ABI.
32028
32029     Note, the 'ms_abi' attribute for Microsoft Windows 64-bit targets
32030     currently requires the '-maccumulate-outgoing-args' option.
32031
32032'callee_pop_aggregate_return (NUMBER)'
32033
32034     On x86-32 targets, you can use this attribute to control how
32035     aggregates are returned in memory.  If the caller is responsible
32036     for popping the hidden pointer together with the rest of the
32037     arguments, specify NUMBER equal to zero.  If callee is responsible
32038     for popping the hidden pointer, specify NUMBER equal to one.
32039
32040     The default x86-32 ABI assumes that the callee pops the stack for
32041     hidden pointer.  However, on x86-32 Microsoft Windows targets, the
32042     compiler assumes that the caller pops the stack for hidden pointer.
32043
32044'ms_hook_prologue'
32045
32046     On 32-bit and 64-bit x86 targets, you can use this function
32047     attribute to make GCC generate the "hot-patching" function prologue
32048     used in Win32 API functions in Microsoft Windows XP Service Pack 2
32049     and newer.
32050
32051'naked'
32052     This attribute allows the compiler to construct the requisite
32053     function declaration, while allowing the body of the function to be
32054     assembly code.  The specified function will not have
32055     prologue/epilogue sequences generated by the compiler.  Only basic
32056     'asm' statements can safely be included in naked functions (*note
32057     Basic Asm::).  While using extended 'asm' or a mixture of basic
32058     'asm' and C code may appear to work, they cannot be depended upon
32059     to work reliably and are not supported.
32060
32061'regparm (NUMBER)'
32062     On x86-32 targets, the 'regparm' attribute causes the compiler to
32063     pass arguments number one to NUMBER if they are of integral type in
32064     registers EAX, EDX, and ECX instead of on the stack.  Functions
32065     that take a variable number of arguments continue to be passed all
32066     of their arguments on the stack.
32067
32068     Beware that on some ELF systems this attribute is unsuitable for
32069     global functions in shared libraries with lazy binding (which is
32070     the default).  Lazy binding sends the first call via resolving code
32071     in the loader, which might assume EAX, EDX and ECX can be
32072     clobbered, as per the standard calling conventions.  Solaris 8 is
32073     affected by this.  Systems with the GNU C Library version 2.1 or
32074     higher and FreeBSD are believed to be safe since the loaders there
32075     save EAX, EDX and ECX. (Lazy binding can be disabled with the
32076     linker or the loader if desired, to avoid the problem.)
32077
32078'sseregparm'
32079     On x86-32 targets with SSE support, the 'sseregparm' attribute
32080     causes the compiler to pass up to 3 floating-point arguments in SSE
32081     registers instead of on the stack.  Functions that take a variable
32082     number of arguments continue to pass all of their floating-point
32083     arguments on the stack.
32084
32085'force_align_arg_pointer'
32086     On x86 targets, the 'force_align_arg_pointer' attribute may be
32087     applied to individual function definitions, generating an alternate
32088     prologue and epilogue that realigns the run-time stack if
32089     necessary.  This supports mixing legacy codes that run with a
32090     4-byte aligned stack with modern codes that keep a 16-byte stack
32091     for SSE compatibility.
32092
32093'stdcall'
32094     On x86-32 targets, the 'stdcall' attribute causes the compiler to
32095     assume that the called function pops off the stack space used to
32096     pass arguments, unless it takes a variable number of arguments.
32097
32098'no_caller_saved_registers'
32099     Use this attribute to indicate that the specified function has no
32100     caller-saved registers.  That is, all registers are callee-saved.
32101     For example, this attribute can be used for a function called from
32102     an interrupt handler.  The compiler generates proper function entry
32103     and exit sequences to save and restore any modified registers,
32104     except for the EFLAGS register.  Since GCC doesn't preserve MPX,
32105     SSE, MMX nor x87 states, the GCC option '-mgeneral-regs-only'
32106     should be used to compile functions with
32107     'no_caller_saved_registers' attribute.
32108
32109'interrupt'
32110     Use this attribute to indicate that the specified function is an
32111     interrupt handler or an exception handler (depending on parameters
32112     passed to the function, explained further).  The compiler generates
32113     function entry and exit sequences suitable for use in an interrupt
32114     handler when this attribute is present.  The 'IRET' instruction,
32115     instead of the 'RET' instruction, is used to return from interrupt
32116     handlers.  All registers, except for the EFLAGS register which is
32117     restored by the 'IRET' instruction, are preserved by the compiler.
32118     Since GCC doesn't preserve MPX, SSE, MMX nor x87 states, the GCC
32119     option '-mgeneral-regs-only' should be used to compile interrupt
32120     and exception handlers.
32121
32122     Any interruptible-without-stack-switch code must be compiled with
32123     '-mno-red-zone' since interrupt handlers can and will, because of
32124     the hardware design, touch the red zone.
32125
32126     An interrupt handler must be declared with a mandatory pointer
32127     argument:
32128
32129          struct interrupt_frame;
32130
32131          __attribute__ ((interrupt))
32132          void
32133          f (struct interrupt_frame *frame)
32134          {
32135          }
32136
32137     and you must define 'struct interrupt_frame' as described in the
32138     processor's manual.
32139
32140     Exception handlers differ from interrupt handlers because the
32141     system pushes an error code on the stack.  An exception handler
32142     declaration is similar to that for an interrupt handler, but with a
32143     different mandatory function signature.  The compiler arranges to
32144     pop the error code off the stack before the 'IRET' instruction.
32145
32146          #ifdef __x86_64__
32147          typedef unsigned long long int uword_t;
32148          #else
32149          typedef unsigned int uword_t;
32150          #endif
32151
32152          struct interrupt_frame;
32153
32154          __attribute__ ((interrupt))
32155          void
32156          f (struct interrupt_frame *frame, uword_t error_code)
32157          {
32158            ...
32159          }
32160
32161     Exception handlers should only be used for exceptions that push an
32162     error code; you should use an interrupt handler in other cases.
32163     The system will crash if the wrong kind of handler is used.
32164
32165'target (OPTIONS)'
32166     As discussed in *note Common Function Attributes::, this attribute
32167     allows specification of target-specific compilation options.
32168
32169     On the x86, the following options are allowed:
32170     '3dnow'
32171     'no-3dnow'
32172          Enable/disable the generation of the 3DNow! instructions.
32173
32174     '3dnowa'
32175     'no-3dnowa'
32176          Enable/disable the generation of the enhanced 3DNow!
32177          instructions.
32178
32179     'abm'
32180     'no-abm'
32181          Enable/disable the generation of the advanced bit
32182          instructions.
32183
32184     'adx'
32185     'no-adx'
32186          Enable/disable the generation of the ADX instructions.
32187
32188     'aes'
32189     'no-aes'
32190          Enable/disable the generation of the AES instructions.
32191
32192     'avx'
32193     'no-avx'
32194          Enable/disable the generation of the AVX instructions.
32195
32196     'avx2'
32197     'no-avx2'
32198          Enable/disable the generation of the AVX2 instructions.
32199
32200     'avx5124fmaps'
32201     'no-avx5124fmaps'
32202          Enable/disable the generation of the AVX5124FMAPS
32203          instructions.
32204
32205     'avx5124vnniw'
32206     'no-avx5124vnniw'
32207          Enable/disable the generation of the AVX5124VNNIW
32208          instructions.
32209
32210     'avx512bitalg'
32211     'no-avx512bitalg'
32212          Enable/disable the generation of the AVX512BITALG
32213          instructions.
32214
32215     'avx512bw'
32216     'no-avx512bw'
32217          Enable/disable the generation of the AVX512BW instructions.
32218
32219     'avx512cd'
32220     'no-avx512cd'
32221          Enable/disable the generation of the AVX512CD instructions.
32222
32223     'avx512dq'
32224     'no-avx512dq'
32225          Enable/disable the generation of the AVX512DQ instructions.
32226
32227     'avx512er'
32228     'no-avx512er'
32229          Enable/disable the generation of the AVX512ER instructions.
32230
32231     'avx512f'
32232     'no-avx512f'
32233          Enable/disable the generation of the AVX512F instructions.
32234
32235     'avx512ifma'
32236     'no-avx512ifma'
32237          Enable/disable the generation of the AVX512IFMA instructions.
32238
32239     'avx512pf'
32240     'no-avx512pf'
32241          Enable/disable the generation of the AVX512PF instructions.
32242
32243     'avx512vbmi'
32244     'no-avx512vbmi'
32245          Enable/disable the generation of the AVX512VBMI instructions.
32246
32247     'avx512vbmi2'
32248     'no-avx512vbmi2'
32249          Enable/disable the generation of the AVX512VBMI2 instructions.
32250
32251     'avx512vl'
32252     'no-avx512vl'
32253          Enable/disable the generation of the AVX512VL instructions.
32254
32255     'avx512vnni'
32256     'no-avx512vnni'
32257          Enable/disable the generation of the AVX512VNNI instructions.
32258
32259     'avx512vpopcntdq'
32260     'no-avx512vpopcntdq'
32261          Enable/disable the generation of the AVX512VPOPCNTDQ
32262          instructions.
32263
32264     'bmi'
32265     'no-bmi'
32266          Enable/disable the generation of the BMI instructions.
32267
32268     'bmi2'
32269     'no-bmi2'
32270          Enable/disable the generation of the BMI2 instructions.
32271
32272     'clflushopt'
32273     'no-clflushopt'
32274          Enable/disable the generation of the CLFLUSHOPT instructions.
32275
32276     'clwb'
32277     'no-clwb'
32278          Enable/disable the generation of the CLWB instructions.
32279
32280     'clzero'
32281     'no-clzero'
32282          Enable/disable the generation of the CLZERO instructions.
32283
32284     'crc32'
32285     'no-crc32'
32286          Enable/disable the generation of the CRC32 instructions.
32287
32288     'cx16'
32289     'no-cx16'
32290          Enable/disable the generation of the CMPXCHG16B instructions.
32291
32292     'default'
32293          *Note Function Multiversioning::, where it is used to specify
32294          the default function version.
32295
32296     'f16c'
32297     'no-f16c'
32298          Enable/disable the generation of the F16C instructions.
32299
32300     'fma'
32301     'no-fma'
32302          Enable/disable the generation of the FMA instructions.
32303
32304     'fma4'
32305     'no-fma4'
32306          Enable/disable the generation of the FMA4 instructions.
32307
32308     'fsgsbase'
32309     'no-fsgsbase'
32310          Enable/disable the generation of the FSGSBASE instructions.
32311
32312     'fxsr'
32313     'no-fxsr'
32314          Enable/disable the generation of the FXSR instructions.
32315
32316     'gfni'
32317     'no-gfni'
32318          Enable/disable the generation of the GFNI instructions.
32319
32320     'hle'
32321     'no-hle'
32322          Enable/disable the generation of the HLE instruction prefixes.
32323
32324     'lwp'
32325     'no-lwp'
32326          Enable/disable the generation of the LWP instructions.
32327
32328     'lzcnt'
32329     'no-lzcnt'
32330          Enable/disable the generation of the LZCNT instructions.
32331
32332     'mmx'
32333     'no-mmx'
32334          Enable/disable the generation of the MMX instructions.
32335
32336     'movbe'
32337     'no-movbe'
32338          Enable/disable the generation of the MOVBE instructions.
32339
32340     'movdir64b'
32341     'no-movdir64b'
32342          Enable/disable the generation of the MOVDIR64B instructions.
32343
32344     'movdiri'
32345     'no-movdiri'
32346          Enable/disable the generation of the MOVDIRI instructions.
32347
32348     'mwaitx'
32349     'no-mwaitx'
32350          Enable/disable the generation of the MWAITX instructions.
32351
32352     'pclmul'
32353     'no-pclmul'
32354          Enable/disable the generation of the PCLMUL instructions.
32355
32356     'pconfig'
32357     'no-pconfig'
32358          Enable/disable the generation of the PCONFIG instructions.
32359
32360     'pku'
32361     'no-pku'
32362          Enable/disable the generation of the PKU instructions.
32363
32364     'popcnt'
32365     'no-popcnt'
32366          Enable/disable the generation of the POPCNT instruction.
32367
32368     'prefetchwt1'
32369     'no-prefetchwt1'
32370          Enable/disable the generation of the PREFETCHWT1 instructions.
32371
32372     'prfchw'
32373     'no-prfchw'
32374          Enable/disable the generation of the PREFETCHW instruction.
32375
32376     'rdpid'
32377     'no-rdpid'
32378          Enable/disable the generation of the RDPID instructions.
32379
32380     'rdrnd'
32381     'no-rdrnd'
32382          Enable/disable the generation of the RDRND instructions.
32383
32384     'rdseed'
32385     'no-rdseed'
32386          Enable/disable the generation of the RDSEED instructions.
32387
32388     'rtm'
32389     'no-rtm'
32390          Enable/disable the generation of the RTM instructions.
32391
32392     'sahf'
32393     'no-sahf'
32394          Enable/disable the generation of the SAHF instructions.
32395
32396     'sgx'
32397     'no-sgx'
32398          Enable/disable the generation of the SGX instructions.
32399
32400     'sha'
32401     'no-sha'
32402          Enable/disable the generation of the SHA instructions.
32403
32404     'shstk'
32405     'no-shstk'
32406          Enable/disable the shadow stack built-in functions from CET.
32407
32408     'sse'
32409     'no-sse'
32410          Enable/disable the generation of the SSE instructions.
32411
32412     'sse2'
32413     'no-sse2'
32414          Enable/disable the generation of the SSE2 instructions.
32415
32416     'sse3'
32417     'no-sse3'
32418          Enable/disable the generation of the SSE3 instructions.
32419
32420     'sse4'
32421     'no-sse4'
32422          Enable/disable the generation of the SSE4 instructions (both
32423          SSE4.1 and SSE4.2).
32424
32425     'sse4.1'
32426     'no-sse4.1'
32427          Enable/disable the generation of the sse4.1 instructions.
32428
32429     'sse4.2'
32430     'no-sse4.2'
32431          Enable/disable the generation of the sse4.2 instructions.
32432
32433     'sse4a'
32434     'no-sse4a'
32435          Enable/disable the generation of the SSE4A instructions.
32436
32437     'ssse3'
32438     'no-ssse3'
32439          Enable/disable the generation of the SSSE3 instructions.
32440
32441     'tbm'
32442     'no-tbm'
32443          Enable/disable the generation of the TBM instructions.
32444
32445     'vaes'
32446     'no-vaes'
32447          Enable/disable the generation of the VAES instructions.
32448
32449     'vpclmulqdq'
32450     'no-vpclmulqdq'
32451          Enable/disable the generation of the VPCLMULQDQ instructions.
32452
32453     'wbnoinvd'
32454     'no-wbnoinvd'
32455          Enable/disable the generation of the WBNOINVD instructions.
32456
32457     'xop'
32458     'no-xop'
32459          Enable/disable the generation of the XOP instructions.
32460
32461     'xsave'
32462     'no-xsave'
32463          Enable/disable the generation of the XSAVE instructions.
32464
32465     'xsavec'
32466     'no-xsavec'
32467          Enable/disable the generation of the XSAVEC instructions.
32468
32469     'xsaveopt'
32470     'no-xsaveopt'
32471          Enable/disable the generation of the XSAVEOPT instructions.
32472
32473     'xsaves'
32474     'no-xsaves'
32475          Enable/disable the generation of the XSAVES instructions.
32476
32477     'cld'
32478     'no-cld'
32479          Enable/disable the generation of the CLD before string moves.
32480
32481     'fancy-math-387'
32482     'no-fancy-math-387'
32483          Enable/disable the generation of the 'sin', 'cos', and 'sqrt'
32484          instructions on the 387 floating-point unit.
32485
32486     'ieee-fp'
32487     'no-ieee-fp'
32488          Enable/disable the generation of floating point that depends
32489          on IEEE arithmetic.
32490
32491     'inline-all-stringops'
32492     'no-inline-all-stringops'
32493          Enable/disable inlining of string operations.
32494
32495     'inline-stringops-dynamically'
32496     'no-inline-stringops-dynamically'
32497          Enable/disable the generation of the inline code to do small
32498          string operations and calling the library routines for large
32499          operations.
32500
32501     'align-stringops'
32502     'no-align-stringops'
32503          Do/do not align destination of inlined string operations.
32504
32505     'recip'
32506     'no-recip'
32507          Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
32508          RSQRTPS instructions followed an additional Newton-Raphson
32509          step instead of doing a floating-point division.
32510
32511     'arch=ARCH'
32512          Specify the architecture to generate code for in compiling the
32513          function.
32514
32515     'tune=TUNE'
32516          Specify the architecture to tune for in compiling the
32517          function.
32518
32519     'fpmath=FPMATH'
32520          Specify which floating-point unit to use.  You must specify
32521          the 'target("fpmath=sse,387")' option as
32522          'target("fpmath=sse+387")' because the comma would separate
32523          different options.
32524
32525     'indirect_branch("CHOICE")'
32526          On x86 targets, the 'indirect_branch' attribute causes the
32527          compiler to convert indirect call and jump with CHOICE.
32528          'keep' keeps indirect call and jump unmodified.  'thunk'
32529          converts indirect call and jump to call and return thunk.
32530          'thunk-inline' converts indirect call and jump to inlined call
32531          and return thunk.  'thunk-extern' converts indirect call and
32532          jump to external call and return thunk provided in a separate
32533          object file.
32534
32535     'function_return("CHOICE")'
32536          On x86 targets, the 'function_return' attribute causes the
32537          compiler to convert function return with CHOICE.  'keep' keeps
32538          function return unmodified.  'thunk' converts function return
32539          to call and return thunk.  'thunk-inline' converts function
32540          return to inlined call and return thunk.  'thunk-extern'
32541          converts function return to external call and return thunk
32542          provided in a separate object file.
32543
32544     'nocf_check'
32545          The 'nocf_check' attribute on a function is used to inform the
32546          compiler that the function's prologue should not be
32547          instrumented when compiled with the '-fcf-protection=branch'
32548          option.  The compiler assumes that the function's address is a
32549          valid target for a control-flow transfer.
32550
32551          The 'nocf_check' attribute on a type of pointer to function is
32552          used to inform the compiler that a call through the pointer
32553          should not be instrumented when compiled with the
32554          '-fcf-protection=branch' option.  The compiler assumes that
32555          the function's address from the pointer is a valid target for
32556          a control-flow transfer.  A direct function call through a
32557          function name is assumed to be a safe call thus direct calls
32558          are not instrumented by the compiler.
32559
32560          The 'nocf_check' attribute is applied to an object's type.  In
32561          case of assignment of a function address or a function pointer
32562          to another pointer, the attribute is not carried over from the
32563          right-hand object's type; the type of left-hand object stays
32564          unchanged.  The compiler checks for 'nocf_check' attribute
32565          mismatch and reports a warning in case of mismatch.
32566
32567               {
32568               int foo (void) __attribute__(nocf_check);
32569               void (*foo1)(void) __attribute__(nocf_check);
32570               void (*foo2)(void);
32571
32572               /* foo's address is assumed to be valid.  */
32573               int
32574               foo (void)
32575
32576                 /* This call site is not checked for control-flow
32577                    validity.  */
32578                 (*foo1)();
32579
32580                 /* A warning is issued about attribute mismatch.  */
32581                 foo1 = foo2;
32582
32583                 /* This call site is still not checked.  */
32584                 (*foo1)();
32585
32586                 /* This call site is checked.  */
32587                 (*foo2)();
32588
32589                 /* A warning is issued about attribute mismatch.  */
32590                 foo2 = foo1;
32591
32592                 /* This call site is still checked.  */
32593                 (*foo2)();
32594
32595                 return 0;
32596               }
32597
32598     On the x86, the inliner does not inline a function that has
32599     different target options than the caller, unless the callee has a
32600     subset of the target options of the caller.  For example a function
32601     declared with 'target("sse3")' can inline a function with
32602     'target("sse2")', since '-msse3' implies '-msse2'.
32603
32604
32605File: gcc.info,  Node: Xstormy16 Function Attributes,  Prev: x86 Function Attributes,  Up: Function Attributes
32606
326076.31.34 Xstormy16 Function Attributes
32608-------------------------------------
32609
32610These function attributes are supported by the Xstormy16 back end:
32611
32612'interrupt'
32613     Use this attribute to indicate that the specified function is an
32614     interrupt handler.  The compiler generates function entry and exit
32615     sequences suitable for use in an interrupt handler when this
32616     attribute is present.
32617
32618
32619File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Function Attributes,  Up: C Extensions
32620
326216.32 Specifying Attributes of Variables
32622=======================================
32623
32624The keyword '__attribute__' allows you to specify special attributes of
32625variables or structure fields.  This keyword is followed by an attribute
32626specification inside double parentheses.  Some attributes are currently
32627defined generically for variables.  Other attributes are defined for
32628variables on particular target systems.  Other attributes are available
32629for functions (*note Function Attributes::), labels (*note Label
32630Attributes::), enumerators (*note Enumerator Attributes::), statements
32631(*note Statement Attributes::), and for types (*note Type Attributes::).
32632Other front ends might define more attributes (*note Extensions to the
32633C++ Language: C++ Extensions.).
32634
32635 *Note Attribute Syntax::, for details of the exact syntax for using
32636attributes.
32637
32638* Menu:
32639
32640* Common Variable Attributes::
32641* ARC Variable Attributes::
32642* AVR Variable Attributes::
32643* Blackfin Variable Attributes::
32644* H8/300 Variable Attributes::
32645* IA-64 Variable Attributes::
32646* M32R/D Variable Attributes::
32647* MeP Variable Attributes::
32648* Microsoft Windows Variable Attributes::
32649* MSP430 Variable Attributes::
32650* Nvidia PTX Variable Attributes::
32651* PowerPC Variable Attributes::
32652* RL78 Variable Attributes::
32653* SPU Variable Attributes::
32654* V850 Variable Attributes::
32655* x86 Variable Attributes::
32656* Xstormy16 Variable Attributes::
32657
32658
32659File: gcc.info,  Node: Common Variable Attributes,  Next: ARC Variable Attributes,  Up: Variable Attributes
32660
326616.32.1 Common Variable Attributes
32662---------------------------------
32663
32664The following attributes are supported on most targets.
32665
32666'aligned (ALIGNMENT)'
32667     This attribute specifies a minimum alignment for the variable or
32668     structure field, measured in bytes.  For example, the declaration:
32669
32670          int x __attribute__ ((aligned (16))) = 0;
32671
32672     causes the compiler to allocate the global variable 'x' on a
32673     16-byte boundary.  On a 68040, this could be used in conjunction
32674     with an 'asm' expression to access the 'move16' instruction which
32675     requires 16-byte aligned operands.
32676
32677     You can also specify the alignment of structure fields.  For
32678     example, to create a double-word aligned 'int' pair, you could
32679     write:
32680
32681          struct foo { int x[2] __attribute__ ((aligned (8))); };
32682
32683     This is an alternative to creating a union with a 'double' member,
32684     which forces the union to be double-word aligned.
32685
32686     As in the preceding examples, you can explicitly specify the
32687     alignment (in bytes) that you wish the compiler to use for a given
32688     variable or structure field.  Alternatively, you can leave out the
32689     alignment factor and just ask the compiler to align a variable or
32690     field to the default alignment for the target architecture you are
32691     compiling for.  The default alignment is sufficient for all scalar
32692     types, but may not be enough for all vector types on a target that
32693     supports vector operations.  The default alignment is fixed for a
32694     particular target ABI.
32695
32696     GCC also provides a target specific macro '__BIGGEST_ALIGNMENT__',
32697     which is the largest alignment ever used for any data type on the
32698     target machine you are compiling for.  For example, you could
32699     write:
32700
32701          short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
32702
32703     The compiler automatically sets the alignment for the declared
32704     variable or field to '__BIGGEST_ALIGNMENT__'.  Doing this can often
32705     make copy operations more efficient, because the compiler can use
32706     whatever instructions copy the biggest chunks of memory when
32707     performing copies to or from the variables or fields that you have
32708     aligned this way.  Note that the value of '__BIGGEST_ALIGNMENT__'
32709     may change depending on command-line options.
32710
32711     When used on a struct, or struct member, the 'aligned' attribute
32712     can only increase the alignment; in order to decrease it, the
32713     'packed' attribute must be specified as well.  When used as part of
32714     a typedef, the 'aligned' attribute can both increase and decrease
32715     alignment, and specifying the 'packed' attribute generates a
32716     warning.
32717
32718     Note that the effectiveness of 'aligned' attributes may be limited
32719     by inherent limitations in your linker.  On many systems, the
32720     linker is only able to arrange for variables to be aligned up to a
32721     certain maximum alignment.  (For some linkers, the maximum
32722     supported alignment may be very very small.)  If your linker is
32723     only able to align variables up to a maximum of 8-byte alignment,
32724     then specifying 'aligned(16)' in an '__attribute__' still only
32725     provides you with 8-byte alignment.  See your linker documentation
32726     for further information.
32727
32728     The 'aligned' attribute can also be used for functions (*note
32729     Common Function Attributes::.)
32730
32731'warn_if_not_aligned (ALIGNMENT)'
32732     This attribute specifies a threshold for the structure field,
32733     measured in bytes.  If the structure field is aligned below the
32734     threshold, a warning will be issued.  For example, the declaration:
32735
32736          struct foo
32737          {
32738            int i1;
32739            int i2;
32740            unsigned long long x __attribute__((warn_if_not_aligned(16)));
32741          };
32742
32743     causes the compiler to issue an warning on 'struct foo', like
32744     'warning: alignment 8 of 'struct foo' is less than 16'.  The
32745     compiler also issues a warning, like 'warning: 'x' offset 8 in
32746     'struct foo' isn't aligned to 16', when the structure field has the
32747     misaligned offset:
32748
32749          struct foo
32750          {
32751            int i1;
32752            int i2;
32753            unsigned long long x __attribute__((warn_if_not_aligned(16)));
32754          } __attribute__((aligned(16)));
32755
32756     This warning can be disabled by '-Wno-if-not-aligned'.  The
32757     'warn_if_not_aligned' attribute can also be used for types (*note
32758     Common Type Attributes::.)
32759
32760'cleanup (CLEANUP_FUNCTION)'
32761     The 'cleanup' attribute runs a function when the variable goes out
32762     of scope.  This attribute can only be applied to auto function
32763     scope variables; it may not be applied to parameters or variables
32764     with static storage duration.  The function must take one
32765     parameter, a pointer to a type compatible with the variable.  The
32766     return value of the function (if any) is ignored.
32767
32768     If '-fexceptions' is enabled, then CLEANUP_FUNCTION is run during
32769     the stack unwinding that happens during the processing of the
32770     exception.  Note that the 'cleanup' attribute does not allow the
32771     exception to be caught, only to perform an action.  It is undefined
32772     what happens if CLEANUP_FUNCTION does not return normally.
32773
32774'common'
32775'nocommon'
32776     The 'common' attribute requests GCC to place a variable in "common"
32777     storage.  The 'nocommon' attribute requests the opposite--to
32778     allocate space for it directly.
32779
32780     These attributes override the default chosen by the '-fno-common'
32781     and '-fcommon' flags respectively.
32782
32783'deprecated'
32784'deprecated (MSG)'
32785     The 'deprecated' attribute results in a warning if the variable is
32786     used anywhere in the source file.  This is useful when identifying
32787     variables that are expected to be removed in a future version of a
32788     program.  The warning also includes the location of the declaration
32789     of the deprecated variable, to enable users to easily find further
32790     information about why the variable is deprecated, or what they
32791     should do instead.  Note that the warning only occurs for uses:
32792
32793          extern int old_var __attribute__ ((deprecated));
32794          extern int old_var;
32795          int new_fn () { return old_var; }
32796
32797     results in a warning on line 3 but not line 2.  The optional MSG
32798     argument, which must be a string, is printed in the warning if
32799     present.
32800
32801     The 'deprecated' attribute can also be used for functions and types
32802     (*note Common Function Attributes::, *note Common Type
32803     Attributes::).
32804
32805'nonstring'
32806     The 'nonstring' variable attribute specifies that an object or
32807     member declaration with type array of 'char', 'signed char', or
32808     'unsigned char', or pointer to such a type is intended to store
32809     character arrays that do not necessarily contain a terminating
32810     'NUL'.  This is useful in detecting uses of such arrays or pointers
32811     with functions that expect 'NUL'-terminated strings, and to avoid
32812     warnings when such an array or pointer is used as an argument to a
32813     bounded string manipulation function such as 'strncpy'.  For
32814     example, without the attribute, GCC will issue a warning for the
32815     'strncpy' call below because it may truncate the copy without
32816     appending the terminating 'NUL' character.  Using the attribute
32817     makes it possible to suppress the warning.  However, when the array
32818     is declared with the attribute the call to 'strlen' is diagnosed
32819     because when the array doesn't contain a 'NUL'-terminated string
32820     the call is undefined.  To copy, compare, of search non-string
32821     character arrays use the 'memcpy', 'memcmp', 'memchr', and other
32822     functions that operate on arrays of bytes.  In addition, calling
32823     'strnlen' and 'strndup' with such arrays is safe provided a
32824     suitable bound is specified, and not diagnosed.
32825
32826          struct Data
32827          {
32828            char name [32] __attribute__ ((nonstring));
32829          };
32830
32831          int f (struct Data *pd, const char *s)
32832          {
32833            strncpy (pd->name, s, sizeof pd->name);
32834            ...
32835            return strlen (pd->name);   // unsafe, gets a warning
32836          }
32837
32838'mode (MODE)'
32839     This attribute specifies the data type for the
32840     declaration--whichever type corresponds to the mode MODE.  This in
32841     effect lets you request an integer or floating-point type according
32842     to its width.
32843
32844     *Note (gccint)Machine Modes::, for a list of the possible keywords
32845     for MODE.  You may also specify a mode of 'byte' or '__byte__' to
32846     indicate the mode corresponding to a one-byte integer, 'word' or
32847     '__word__' for the mode of a one-word integer, and 'pointer' or
32848     '__pointer__' for the mode used to represent pointers.
32849
32850'packed'
32851     The 'packed' attribute specifies that a variable or structure field
32852     should have the smallest possible alignment--one byte for a
32853     variable, and one bit for a field, unless you specify a larger
32854     value with the 'aligned' attribute.
32855
32856     Here is a structure in which the field 'x' is packed, so that it
32857     immediately follows 'a':
32858
32859          struct foo
32860          {
32861            char a;
32862            int x[2] __attribute__ ((packed));
32863          };
32864
32865     _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed'
32866     attribute on bit-fields of type 'char'.  This has been fixed in GCC
32867     4.4 but the change can lead to differences in the structure layout.
32868     See the documentation of '-Wpacked-bitfield-compat' for more
32869     information.
32870
32871'section ("SECTION-NAME")'
32872     Normally, the compiler places the objects it generates in sections
32873     like 'data' and 'bss'.  Sometimes, however, you need additional
32874     sections, or you need certain particular variables to appear in
32875     special sections, for example to map to special hardware.  The
32876     'section' attribute specifies that a variable (or function) lives
32877     in a particular section.  For example, this small program uses
32878     several specific section names:
32879
32880          struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
32881          struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
32882          char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
32883          int init_data __attribute__ ((section ("INITDATA")));
32884
32885          main()
32886          {
32887            /* Initialize stack pointer */
32888            init_sp (stack + sizeof (stack));
32889
32890            /* Initialize initialized data */
32891            memcpy (&init_data, &data, &edata - &data);
32892
32893            /* Turn on the serial ports */
32894            init_duart (&a);
32895            init_duart (&b);
32896          }
32897
32898     Use the 'section' attribute with _global_ variables and not _local_
32899     variables, as shown in the example.
32900
32901     You may use the 'section' attribute with initialized or
32902     uninitialized global variables but the linker requires each object
32903     be defined once, with the exception that uninitialized variables
32904     tentatively go in the 'common' (or 'bss') section and can be
32905     multiply "defined".  Using the 'section' attribute changes what
32906     section the variable goes into and may cause the linker to issue an
32907     error if an uninitialized variable has multiple definitions.  You
32908     can force a variable to be initialized with the '-fno-common' flag
32909     or the 'nocommon' attribute.
32910
32911     Some file formats do not support arbitrary sections so the
32912     'section' attribute is not available on all platforms.  If you need
32913     to map the entire contents of a module to a particular section,
32914     consider using the facilities of the linker instead.
32915
32916'tls_model ("TLS_MODEL")'
32917     The 'tls_model' attribute sets thread-local storage model (*note
32918     Thread-Local::) of a particular '__thread' variable, overriding
32919     '-ftls-model=' command-line switch on a per-variable basis.  The
32920     TLS_MODEL argument should be one of 'global-dynamic',
32921     'local-dynamic', 'initial-exec' or 'local-exec'.
32922
32923     Not all targets support this attribute.
32924
32925'unused'
32926     This attribute, attached to a variable, means that the variable is
32927     meant to be possibly unused.  GCC does not produce a warning for
32928     this variable.
32929
32930'used'
32931     This attribute, attached to a variable with static storage, means
32932     that the variable must be emitted even if it appears that the
32933     variable is not referenced.
32934
32935     When applied to a static data member of a C++ class template, the
32936     attribute also means that the member is instantiated if the class
32937     itself is instantiated.
32938
32939'vector_size (BYTES)'
32940     This attribute specifies the vector size for the variable, measured
32941     in bytes.  For example, the declaration:
32942
32943          int foo __attribute__ ((vector_size (16)));
32944
32945     causes the compiler to set the mode for 'foo', to be 16 bytes,
32946     divided into 'int' sized units.  Assuming a 32-bit int (a vector of
32947     4 units of 4 bytes), the corresponding mode of 'foo' is V4SI.
32948
32949     This attribute is only applicable to integral and float scalars,
32950     although arrays, pointers, and function return values are allowed
32951     in conjunction with this construct.
32952
32953     Aggregates with this attribute are invalid, even if they are of the
32954     same size as a corresponding scalar.  For example, the declaration:
32955
32956          struct S { int a; };
32957          struct S  __attribute__ ((vector_size (16))) foo;
32958
32959     is invalid even if the size of the structure is the same as the
32960     size of the 'int'.
32961
32962'visibility ("VISIBILITY_TYPE")'
32963     This attribute affects the linkage of the declaration to which it
32964     is attached.  The 'visibility' attribute is described in *note
32965     Common Function Attributes::.
32966
32967'weak'
32968     The 'weak' attribute is described in *note Common Function
32969     Attributes::.
32970
32971
32972File: gcc.info,  Node: ARC Variable Attributes,  Next: AVR Variable Attributes,  Prev: Common Variable Attributes,  Up: Variable Attributes
32973
329746.32.2 ARC Variable Attributes
32975------------------------------
32976
32977'aux'
32978     The 'aux' attribute is used to directly access the ARC's auxiliary
32979     register space from C. The auxilirary register number is given via
32980     attribute argument.
32981
32982
32983File: gcc.info,  Node: AVR Variable Attributes,  Next: Blackfin Variable Attributes,  Prev: ARC Variable Attributes,  Up: Variable Attributes
32984
329856.32.3 AVR Variable Attributes
32986------------------------------
32987
32988'progmem'
32989     The 'progmem' attribute is used on the AVR to place read-only data
32990     in the non-volatile program memory (flash).  The 'progmem'
32991     attribute accomplishes this by putting respective variables into a
32992     section whose name starts with '.progmem'.
32993
32994     This attribute works similar to the 'section' attribute but adds
32995     additional checking.
32996
32997     *  Ordinary AVR cores with 32 general purpose registers:
32998          'progmem' affects the location of the data but not how this
32999          data is accessed.  In order to read data located with the
33000          'progmem' attribute (inline) assembler must be used.
33001               /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */
33002               #include <avr/pgmspace.h>
33003
33004               /* Locate var in flash memory */
33005               const int var[2] PROGMEM = { 1, 2 };
33006
33007               int read_var (int i)
33008               {
33009                   /* Access var[] by accessor macro from avr/pgmspace.h */
33010                   return (int) pgm_read_word (& var[i]);
33011               }
33012
33013          AVR is a Harvard architecture processor and data and read-only
33014          data normally resides in the data memory (RAM).
33015
33016          See also the *note AVR Named Address Spaces:: section for an
33017          alternate way to locate and access data in flash memory.
33018
33019     *  AVR cores with flash memory visible in the RAM address range:
33020          On such devices, there is no need for attribute 'progmem' or
33021          *note '__flash': AVR Named Address Spaces. qualifier at all.
33022          Just use standard C / C++.  The compiler will generate 'LD*'
33023          instructions.  As flash memory is visible in the RAM address
33024          range, and the default linker script does _not_ locate
33025          '.rodata' in RAM, no special features are needed in order not
33026          to waste RAM for read-only data or to read from flash.  You
33027          might even get slightly better performance by avoiding
33028          'progmem' and '__flash'.  This applies to devices from
33029          families 'avrtiny' and 'avrxmega3', see *note AVR Options::
33030          for an overview.
33031
33032     * Reduced AVR Tiny cores like ATtiny40:
33033          The compiler adds '0x4000' to the addresses of objects and
33034          declarations in 'progmem' and locates the objects in flash
33035          memory, namely in section '.progmem.data'.  The offset is
33036          needed because the flash memory is visible in the RAM address
33037          space starting at address '0x4000'.
33038
33039          Data in 'progmem' can be accessed by means of ordinary C code,
33040          no special functions or macros are needed.
33041
33042               /* var is located in flash memory */
33043               extern const int var[2] __attribute__((progmem));
33044
33045               int read_var (int i)
33046               {
33047                   return var[i];
33048               }
33049
33050          Please notice that on these devices, there is no need for
33051          'progmem' at all.
33052
33053'io'
33054'io (ADDR)'
33055     Variables with the 'io' attribute are used to address memory-mapped
33056     peripherals in the io address range.  If an address is specified,
33057     the variable is assigned that address, and the value is interpreted
33058     as an address in the data address space.  Example:
33059
33060          volatile int porta __attribute__((io (0x22)));
33061
33062     The address specified in the address in the data address range.
33063
33064     Otherwise, the variable it is not assigned an address, but the
33065     compiler will still use in/out instructions where applicable,
33066     assuming some other module assigns an address in the io address
33067     range.  Example:
33068
33069          extern volatile int porta __attribute__((io));
33070
33071'io_low'
33072'io_low (ADDR)'
33073     This is like the 'io' attribute, but additionally it informs the
33074     compiler that the object lies in the lower half of the I/O area,
33075     allowing the use of 'cbi', 'sbi', 'sbic' and 'sbis' instructions.
33076
33077'address'
33078'address (ADDR)'
33079     Variables with the 'address' attribute are used to address
33080     memory-mapped peripherals that may lie outside the io address
33081     range.
33082
33083          volatile int porta __attribute__((address (0x600)));
33084
33085'absdata'
33086     Variables in static storage and with the 'absdata' attribute can be
33087     accessed by the 'LDS' and 'STS' instructions which take absolute
33088     addresses.
33089
33090        * This attribute is only supported for the reduced AVR Tiny core
33091          like ATtiny40.
33092
33093        * You must make sure that respective data is located in the
33094          address range '0x40'...'0xbf' accessible by 'LDS' and 'STS'.
33095          One way to achieve this as an appropriate linker description
33096          file.
33097
33098        * If the location does not fit the address range of 'LDS' and
33099          'STS', there is currently (Binutils 2.26) just an unspecific
33100          warning like
33101               'module.c:(.text+0x1c): warning: internal error: out of
33102               range error'
33103
33104     See also the '-mabsdata' *note command-line option: AVR Options.
33105
33106
33107File: gcc.info,  Node: Blackfin Variable Attributes,  Next: H8/300 Variable Attributes,  Prev: AVR Variable Attributes,  Up: Variable Attributes
33108
331096.32.4 Blackfin Variable Attributes
33110-----------------------------------
33111
33112Three attributes are currently defined for the Blackfin.
33113
33114'l1_data'
33115'l1_data_A'
33116'l1_data_B'
33117     Use these attributes on the Blackfin to place the variable into L1
33118     Data SRAM. Variables with 'l1_data' attribute are put into the
33119     specific section named '.l1.data'.  Those with 'l1_data_A'
33120     attribute are put into the specific section named '.l1.data.A'.
33121     Those with 'l1_data_B' attribute are put into the specific section
33122     named '.l1.data.B'.
33123
33124'l2'
33125     Use this attribute on the Blackfin to place the variable into L2
33126     SRAM. Variables with 'l2' attribute are put into the specific
33127     section named '.l2.data'.
33128
33129
33130File: gcc.info,  Node: H8/300 Variable Attributes,  Next: IA-64 Variable Attributes,  Prev: Blackfin Variable Attributes,  Up: Variable Attributes
33131
331326.32.5 H8/300 Variable Attributes
33133---------------------------------
33134
33135These variable attributes are available for H8/300 targets:
33136
33137'eightbit_data'
33138     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
33139     the specified variable should be placed into the eight-bit data
33140     section.  The compiler generates more efficient code for certain
33141     operations on data in the eight-bit data area.  Note the eight-bit
33142     data area is limited to 256 bytes of data.
33143
33144     You must use GAS and GLD from GNU binutils version 2.7 or later for
33145     this attribute to work correctly.
33146
33147'tiny_data'
33148     Use this attribute on the H8/300H and H8S to indicate that the
33149     specified variable should be placed into the tiny data section.
33150     The compiler generates more efficient code for loads and stores on
33151     data in the tiny data section.  Note the tiny data area is limited
33152     to slightly under 32KB of data.
33153
33154
33155File: gcc.info,  Node: IA-64 Variable Attributes,  Next: M32R/D Variable Attributes,  Prev: H8/300 Variable Attributes,  Up: Variable Attributes
33156
331576.32.6 IA-64 Variable Attributes
33158--------------------------------
33159
33160The IA-64 back end supports the following variable attribute:
33161
33162'model (MODEL-NAME)'
33163
33164     On IA-64, use this attribute to set the addressability of an
33165     object.  At present, the only supported identifier for MODEL-NAME
33166     is 'small', indicating addressability via "small" (22-bit)
33167     addresses (so that their addresses can be loaded with the 'addl'
33168     instruction).  Caveat: such addressing is by definition not
33169     position independent and hence this attribute must not be used for
33170     objects defined by shared libraries.
33171
33172
33173File: gcc.info,  Node: M32R/D Variable Attributes,  Next: MeP Variable Attributes,  Prev: IA-64 Variable Attributes,  Up: Variable Attributes
33174
331756.32.7 M32R/D Variable Attributes
33176---------------------------------
33177
33178One attribute is currently defined for the M32R/D.
33179
33180'model (MODEL-NAME)'
33181     Use this attribute on the M32R/D to set the addressability of an
33182     object.  The identifier MODEL-NAME is one of 'small', 'medium', or
33183     'large', representing each of the code models.
33184
33185     Small model objects live in the lower 16MB of memory (so that their
33186     addresses can be loaded with the 'ld24' instruction).
33187
33188     Medium and large model objects may live anywhere in the 32-bit
33189     address space (the compiler generates 'seth/add3' instructions to
33190     load their addresses).
33191
33192
33193File: gcc.info,  Node: MeP Variable Attributes,  Next: Microsoft Windows Variable Attributes,  Prev: M32R/D Variable Attributes,  Up: Variable Attributes
33194
331956.32.8 MeP Variable Attributes
33196------------------------------
33197
33198The MeP target has a number of addressing modes and busses.  The 'near'
33199space spans the standard memory space's first 16 megabytes (24 bits).
33200The 'far' space spans the entire 32-bit memory space.  The 'based' space
33201is a 128-byte region in the memory space that is addressed relative to
33202the '$tp' register.  The 'tiny' space is a 65536-byte region relative to
33203the '$gp' register.  In addition to these memory regions, the MeP target
33204has a separate 16-bit control bus which is specified with 'cb'
33205attributes.
33206
33207'based'
33208     Any variable with the 'based' attribute is assigned to the '.based'
33209     section, and is accessed with relative to the '$tp' register.
33210
33211'tiny'
33212     Likewise, the 'tiny' attribute assigned variables to the '.tiny'
33213     section, relative to the '$gp' register.
33214
33215'near'
33216     Variables with the 'near' attribute are assumed to have addresses
33217     that fit in a 24-bit addressing mode.  This is the default for
33218     large variables ('-mtiny=4' is the default) but this attribute can
33219     override '-mtiny=' for small variables, or override '-ml'.
33220
33221'far'
33222     Variables with the 'far' attribute are addressed using a full
33223     32-bit address.  Since this covers the entire memory space, this
33224     allows modules to make no assumptions about where variables might
33225     be stored.
33226
33227'io'
33228'io (ADDR)'
33229     Variables with the 'io' attribute are used to address memory-mapped
33230     peripherals.  If an address is specified, the variable is assigned
33231     that address, else it is not assigned an address (it is assumed
33232     some other module assigns an address).  Example:
33233
33234          int timer_count __attribute__((io(0x123)));
33235
33236'cb'
33237'cb (ADDR)'
33238     Variables with the 'cb' attribute are used to access the control
33239     bus, using special instructions.  'addr' indicates the control bus
33240     address.  Example:
33241
33242          int cpu_clock __attribute__((cb(0x123)));
33243
33244
33245File: gcc.info,  Node: Microsoft Windows Variable Attributes,  Next: MSP430 Variable Attributes,  Prev: MeP Variable Attributes,  Up: Variable Attributes
33246
332476.32.9 Microsoft Windows Variable Attributes
33248--------------------------------------------
33249
33250You can use these attributes on Microsoft Windows targets.  *note x86
33251Variable Attributes:: for additional Windows compatibility attributes
33252available on all x86 targets.
33253
33254'dllimport'
33255'dllexport'
33256     The 'dllimport' and 'dllexport' attributes are described in *note
33257     Microsoft Windows Function Attributes::.
33258
33259'selectany'
33260     The 'selectany' attribute causes an initialized global variable to
33261     have link-once semantics.  When multiple definitions of the
33262     variable are encountered by the linker, the first is selected and
33263     the remainder are discarded.  Following usage by the Microsoft
33264     compiler, the linker is told _not_ to warn about size or content
33265     differences of the multiple definitions.
33266
33267     Although the primary usage of this attribute is for POD types, the
33268     attribute can also be applied to global C++ objects that are
33269     initialized by a constructor.  In this case, the static
33270     initialization and destruction code for the object is emitted in
33271     each translation defining the object, but the calls to the
33272     constructor and destructor are protected by a link-once guard
33273     variable.
33274
33275     The 'selectany' attribute is only available on Microsoft Windows
33276     targets.  You can use '__declspec (selectany)' as a synonym for
33277     '__attribute__ ((selectany))' for compatibility with other
33278     compilers.
33279
33280'shared'
33281     On Microsoft Windows, in addition to putting variable definitions
33282     in a named section, the section can also be shared among all
33283     running copies of an executable or DLL.  For example, this small
33284     program defines shared data by putting it in a named section
33285     'shared' and marking the section shareable:
33286
33287          int foo __attribute__((section ("shared"), shared)) = 0;
33288
33289          int
33290          main()
33291          {
33292            /* Read and write foo.  All running
33293               copies see the same value.  */
33294            return 0;
33295          }
33296
33297     You may only use the 'shared' attribute along with 'section'
33298     attribute with a fully-initialized global definition because of the
33299     way linkers work.  See 'section' attribute for more information.
33300
33301     The 'shared' attribute is only available on Microsoft Windows.
33302
33303
33304File: gcc.info,  Node: MSP430 Variable Attributes,  Next: Nvidia PTX Variable Attributes,  Prev: Microsoft Windows Variable Attributes,  Up: Variable Attributes
33305
333066.32.10 MSP430 Variable Attributes
33307----------------------------------
33308
33309'noinit'
33310     Any data with the 'noinit' attribute will not be initialised by the
33311     C runtime startup code, or the program loader.  Not initialising
33312     data in this way can reduce program startup times.
33313
33314'persistent'
33315     Any variable with the 'persistent' attribute will not be
33316     initialised by the C runtime startup code.  Instead its value will
33317     be set once, when the application is loaded, and then never
33318     initialised again, even if the processor is reset or the program
33319     restarts.  Persistent data is intended to be placed into FLASH RAM,
33320     where its value will be retained across resets.  The linker script
33321     being used to create the application should ensure that persistent
33322     data is correctly placed.
33323
33324'lower'
33325'upper'
33326'either'
33327     These attributes are the same as the MSP430 function attributes of
33328     the same name (*note MSP430 Function Attributes::).  These
33329     attributes can be applied to both functions and variables.
33330
33331
33332File: gcc.info,  Node: Nvidia PTX Variable Attributes,  Next: PowerPC Variable Attributes,  Prev: MSP430 Variable Attributes,  Up: Variable Attributes
33333
333346.32.11 Nvidia PTX Variable Attributes
33335--------------------------------------
33336
33337These variable attributes are supported by the Nvidia PTX back end:
33338
33339'shared'
33340     Use this attribute to place a variable in the '.shared' memory
33341     space.  This memory space is private to each cooperative thread
33342     array; only threads within one thread block refer to the same
33343     instance of the variable.  The runtime does not initialize
33344     variables in this memory space.
33345
33346
33347File: gcc.info,  Node: PowerPC Variable Attributes,  Next: RL78 Variable Attributes,  Prev: Nvidia PTX Variable Attributes,  Up: Variable Attributes
33348
333496.32.12 PowerPC Variable Attributes
33350-----------------------------------
33351
33352Three attributes currently are defined for PowerPC configurations:
33353'altivec', 'ms_struct' and 'gcc_struct'.
33354
33355 For full documentation of the struct attributes please see the
33356documentation in *note x86 Variable Attributes::.
33357
33358 For documentation of 'altivec' attribute please see the documentation
33359in *note PowerPC Type Attributes::.
33360
33361
33362File: gcc.info,  Node: RL78 Variable Attributes,  Next: SPU Variable Attributes,  Prev: PowerPC Variable Attributes,  Up: Variable Attributes
33363
333646.32.13 RL78 Variable Attributes
33365--------------------------------
33366
33367The RL78 back end supports the 'saddr' variable attribute.  This
33368specifies placement of the corresponding variable in the SADDR area,
33369which can be accessed more efficiently than the default memory region.
33370
33371
33372File: gcc.info,  Node: SPU Variable Attributes,  Next: V850 Variable Attributes,  Prev: RL78 Variable Attributes,  Up: Variable Attributes
33373
333746.32.14 SPU Variable Attributes
33375-------------------------------
33376
33377The SPU supports the 'spu_vector' attribute for variables.  For
33378documentation of this attribute please see the documentation in *note
33379SPU Type Attributes::.
33380
33381
33382File: gcc.info,  Node: V850 Variable Attributes,  Next: x86 Variable Attributes,  Prev: SPU Variable Attributes,  Up: Variable Attributes
33383
333846.32.15 V850 Variable Attributes
33385--------------------------------
33386
33387These variable attributes are supported by the V850 back end:
33388
33389'sda'
33390     Use this attribute to explicitly place a variable in the small data
33391     area, which can hold up to 64 kilobytes.
33392
33393'tda'
33394     Use this attribute to explicitly place a variable in the tiny data
33395     area, which can hold up to 256 bytes in total.
33396
33397'zda'
33398     Use this attribute to explicitly place a variable in the first 32
33399     kilobytes of memory.
33400
33401
33402File: gcc.info,  Node: x86 Variable Attributes,  Next: Xstormy16 Variable Attributes,  Prev: V850 Variable Attributes,  Up: Variable Attributes
33403
334046.32.16 x86 Variable Attributes
33405-------------------------------
33406
33407Two attributes are currently defined for x86 configurations: 'ms_struct'
33408and 'gcc_struct'.
33409
33410'ms_struct'
33411'gcc_struct'
33412
33413     If 'packed' is used on a structure, or if bit-fields are used, it
33414     may be that the Microsoft ABI lays out the structure differently
33415     than the way GCC normally does.  Particularly when moving packed
33416     data between functions compiled with GCC and the native Microsoft
33417     compiler (either via function call or as data in a file), it may be
33418     necessary to access either format.
33419
33420     The 'ms_struct' and 'gcc_struct' attributes correspond to the
33421     '-mms-bitfields' and '-mno-ms-bitfields' command-line options,
33422     respectively; see *note x86 Options::, for details of how structure
33423     layout is affected.  *Note x86 Type Attributes::, for information
33424     about the corresponding attributes on types.
33425
33426
33427File: gcc.info,  Node: Xstormy16 Variable Attributes,  Prev: x86 Variable Attributes,  Up: Variable Attributes
33428
334296.32.17 Xstormy16 Variable Attributes
33430-------------------------------------
33431
33432One attribute is currently defined for xstormy16 configurations:
33433'below100'.
33434
33435'below100'
33436
33437     If a variable has the 'below100' attribute ('BELOW100' is allowed
33438     also), GCC places the variable in the first 0x100 bytes of memory
33439     and use special opcodes to access it.  Such variables are placed in
33440     either the '.bss_below100' section or the '.data_below100' section.
33441
33442
33443File: gcc.info,  Node: Type Attributes,  Next: Label Attributes,  Prev: Variable Attributes,  Up: C Extensions
33444
334456.33 Specifying Attributes of Types
33446===================================
33447
33448The keyword '__attribute__' allows you to specify special attributes of
33449types.  Some type attributes apply only to 'struct' and 'union' types,
33450while others can apply to any type defined via a 'typedef' declaration.
33451Other attributes are defined for functions (*note Function
33452Attributes::), labels (*note Label Attributes::), enumerators (*note
33453Enumerator Attributes::), statements (*note Statement Attributes::), and
33454for variables (*note Variable Attributes::).
33455
33456 The '__attribute__' keyword is followed by an attribute specification
33457inside double parentheses.
33458
33459 You may specify type attributes in an enum, struct or union type
33460declaration or definition by placing them immediately after the
33461'struct', 'union' or 'enum' keyword.  A less preferred syntax is to
33462place them just past the closing curly brace of the definition.
33463
33464 You can also include type attributes in a 'typedef' declaration.  *Note
33465Attribute Syntax::, for details of the exact syntax for using
33466attributes.
33467
33468* Menu:
33469
33470* Common Type Attributes::
33471* ARC Type Attributes::
33472* ARM Type Attributes::
33473* MeP Type Attributes::
33474* PowerPC Type Attributes::
33475* SPU Type Attributes::
33476* x86 Type Attributes::
33477
33478
33479File: gcc.info,  Node: Common Type Attributes,  Next: ARC Type Attributes,  Up: Type Attributes
33480
334816.33.1 Common Type Attributes
33482-----------------------------
33483
33484The following type attributes are supported on most targets.
33485
33486'aligned (ALIGNMENT)'
33487     This attribute specifies a minimum alignment (in bytes) for
33488     variables of the specified type.  For example, the declarations:
33489
33490          struct S { short f[3]; } __attribute__ ((aligned (8)));
33491          typedef int more_aligned_int __attribute__ ((aligned (8)));
33492
33493     force the compiler to ensure (as far as it can) that each variable
33494     whose type is 'struct S' or 'more_aligned_int' is allocated and
33495     aligned _at least_ on a 8-byte boundary.  On a SPARC, having all
33496     variables of type 'struct S' aligned to 8-byte boundaries allows
33497     the compiler to use the 'ldd' and 'std' (doubleword load and store)
33498     instructions when copying one variable of type 'struct S' to
33499     another, thus improving run-time efficiency.
33500
33501     Note that the alignment of any given 'struct' or 'union' type is
33502     required by the ISO C standard to be at least a perfect multiple of
33503     the lowest common multiple of the alignments of all of the members
33504     of the 'struct' or 'union' in question.  This means that you _can_
33505     effectively adjust the alignment of a 'struct' or 'union' type by
33506     attaching an 'aligned' attribute to any one of the members of such
33507     a type, but the notation illustrated in the example above is a more
33508     obvious, intuitive, and readable way to request the compiler to
33509     adjust the alignment of an entire 'struct' or 'union' type.
33510
33511     As in the preceding example, you can explicitly specify the
33512     alignment (in bytes) that you wish the compiler to use for a given
33513     'struct' or 'union' type.  Alternatively, you can leave out the
33514     alignment factor and just ask the compiler to align a type to the
33515     maximum useful alignment for the target machine you are compiling
33516     for.  For example, you could write:
33517
33518          struct S { short f[3]; } __attribute__ ((aligned));
33519
33520     Whenever you leave out the alignment factor in an 'aligned'
33521     attribute specification, the compiler automatically sets the
33522     alignment for the type to the largest alignment that is ever used
33523     for any data type on the target machine you are compiling for.
33524     Doing this can often make copy operations more efficient, because
33525     the compiler can use whatever instructions copy the biggest chunks
33526     of memory when performing copies to or from the variables that have
33527     types that you have aligned this way.
33528
33529     In the example above, if the size of each 'short' is 2 bytes, then
33530     the size of the entire 'struct S' type is 6 bytes.  The smallest
33531     power of two that is greater than or equal to that is 8, so the
33532     compiler sets the alignment for the entire 'struct S' type to 8
33533     bytes.
33534
33535     Note that although you can ask the compiler to select a
33536     time-efficient alignment for a given type and then declare only
33537     individual stand-alone objects of that type, the compiler's ability
33538     to select a time-efficient alignment is primarily useful only when
33539     you plan to create arrays of variables having the relevant
33540     (efficiently aligned) type.  If you declare or use arrays of
33541     variables of an efficiently-aligned type, then it is likely that
33542     your program also does pointer arithmetic (or subscripting, which
33543     amounts to the same thing) on pointers to the relevant type, and
33544     the code that the compiler generates for these pointer arithmetic
33545     operations is often more efficient for efficiently-aligned types
33546     than for other types.
33547
33548     Note that the effectiveness of 'aligned' attributes may be limited
33549     by inherent limitations in your linker.  On many systems, the
33550     linker is only able to arrange for variables to be aligned up to a
33551     certain maximum alignment.  (For some linkers, the maximum
33552     supported alignment may be very very small.)  If your linker is
33553     only able to align variables up to a maximum of 8-byte alignment,
33554     then specifying 'aligned(16)' in an '__attribute__' still only
33555     provides you with 8-byte alignment.  See your linker documentation
33556     for further information.
33557
33558     The 'aligned' attribute can only increase alignment.  Alignment can
33559     be decreased by specifying the 'packed' attribute.  See below.
33560
33561'warn_if_not_aligned (ALIGNMENT)'
33562     This attribute specifies a threshold for the structure field,
33563     measured in bytes.  If the structure field is aligned below the
33564     threshold, a warning will be issued.  For example, the declaration:
33565
33566          typedef unsigned long long __u64
33567             __attribute__((aligned(4),warn_if_not_aligned(8)));
33568
33569          struct foo
33570          {
33571            int i1;
33572            int i2;
33573            __u64 x;
33574          };
33575
33576     causes the compiler to issue an warning on 'struct foo', like
33577     'warning: alignment 4 of 'struct foo' is less than 8'.  It is used
33578     to define 'struct foo' in such a way that 'struct foo' has the same
33579     layout and the structure field 'x' has the same alignment when
33580     '__u64' is aligned at either 4 or 8 bytes.  Align 'struct foo' to 8
33581     bytes:
33582
33583          struct foo
33584          {
33585            int i1;
33586            int i2;
33587            __u64 x;
33588          } __attribute__((aligned(8)));
33589
33590     silences the warning.  The compiler also issues a warning, like
33591     'warning: 'x' offset 12 in 'struct foo' isn't aligned to 8', when
33592     the structure field has the misaligned offset:
33593
33594          struct foo
33595          {
33596            int i1;
33597            int i2;
33598            int i3;
33599            __u64 x;
33600          } __attribute__((aligned(8)));
33601
33602     This warning can be disabled by '-Wno-if-not-aligned'.
33603
33604'bnd_variable_size'
33605     When applied to a structure field, this attribute tells Pointer
33606     Bounds Checker that the size of this field should not be computed
33607     using static type information.  It may be used to mark
33608     variably-sized static array fields placed at the end of a
33609     structure.
33610
33611          struct S
33612          {
33613            int size;
33614            char data[1];
33615          }
33616          S *p = (S *)malloc (sizeof(S) + 100);
33617          p->data[10] = 0; //Bounds violation
33618
33619     By using an attribute for the field we may avoid unwanted bound
33620     violation checks:
33621
33622          struct S
33623          {
33624            int size;
33625            char data[1] __attribute__((bnd_variable_size));
33626          }
33627          S *p = (S *)malloc (sizeof(S) + 100);
33628          p->data[10] = 0; //OK
33629
33630'deprecated'
33631'deprecated (MSG)'
33632     The 'deprecated' attribute results in a warning if the type is used
33633     anywhere in the source file.  This is useful when identifying types
33634     that are expected to be removed in a future version of a program.
33635     If possible, the warning also includes the location of the
33636     declaration of the deprecated type, to enable users to easily find
33637     further information about why the type is deprecated, or what they
33638     should do instead.  Note that the warnings only occur for uses and
33639     then only if the type is being applied to an identifier that itself
33640     is not being declared as deprecated.
33641
33642          typedef int T1 __attribute__ ((deprecated));
33643          T1 x;
33644          typedef T1 T2;
33645          T2 y;
33646          typedef T1 T3 __attribute__ ((deprecated));
33647          T3 z __attribute__ ((deprecated));
33648
33649     results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
33650     warning is issued for line 4 because T2 is not explicitly
33651     deprecated.  Line 5 has no warning because T3 is explicitly
33652     deprecated.  Similarly for line 6.  The optional MSG argument,
33653     which must be a string, is printed in the warning if present.
33654
33655     The 'deprecated' attribute can also be used for functions and
33656     variables (*note Function Attributes::, *note Variable
33657     Attributes::.)
33658
33659'designated_init'
33660     This attribute may only be applied to structure types.  It
33661     indicates that any initialization of an object of this type must
33662     use designated initializers rather than positional initializers.
33663     The intent of this attribute is to allow the programmer to indicate
33664     that a structure's layout may change, and that therefore relying on
33665     positional initialization will result in future breakage.
33666
33667     GCC emits warnings based on this attribute by default; use
33668     '-Wno-designated-init' to suppress them.
33669
33670'may_alias'
33671     Accesses through pointers to types with this attribute are not
33672     subject to type-based alias analysis, but are instead assumed to be
33673     able to alias any other type of objects.  In the context of section
33674     6.5 paragraph 7 of the C99 standard, an lvalue expression
33675     dereferencing such a pointer is treated like having a character
33676     type.  See '-fstrict-aliasing' for more information on aliasing
33677     issues.  This extension exists to support some vector APIs, in
33678     which pointers to one vector type are permitted to alias pointers
33679     to a different vector type.
33680
33681     Note that an object of a type with this attribute does not have any
33682     special semantics.
33683
33684     Example of use:
33685
33686          typedef short __attribute__((__may_alias__)) short_a;
33687
33688          int
33689          main (void)
33690          {
33691            int a = 0x12345678;
33692            short_a *b = (short_a *) &a;
33693
33694            b[1] = 0;
33695
33696            if (a == 0x12345678)
33697              abort();
33698
33699            exit(0);
33700          }
33701
33702     If you replaced 'short_a' with 'short' in the variable declaration,
33703     the above program would abort when compiled with
33704     '-fstrict-aliasing', which is on by default at '-O2' or above.
33705
33706'packed'
33707     This attribute, attached to 'struct' or 'union' type definition,
33708     specifies that each member (other than zero-width bit-fields) of
33709     the structure or union is placed to minimize the memory required.
33710     When attached to an 'enum' definition, it indicates that the
33711     smallest integral type should be used.
33712
33713     Specifying the 'packed' attribute for 'struct' and 'union' types is
33714     equivalent to specifying the 'packed' attribute on each of the
33715     structure or union members.  Specifying the '-fshort-enums' flag on
33716     the command line is equivalent to specifying the 'packed' attribute
33717     on all 'enum' definitions.
33718
33719     In the following example 'struct my_packed_struct''s members are
33720     packed closely together, but the internal layout of its 's' member
33721     is not packed--to do that, 'struct my_unpacked_struct' needs to be
33722     packed too.
33723
33724          struct my_unpacked_struct
33725           {
33726              char c;
33727              int i;
33728           };
33729
33730          struct __attribute__ ((__packed__)) my_packed_struct
33731            {
33732               char c;
33733               int  i;
33734               struct my_unpacked_struct s;
33735            };
33736
33737     You may only specify the 'packed' attribute attribute on the
33738     definition of an 'enum', 'struct' or 'union', not on a 'typedef'
33739     that does not also define the enumerated type, structure or union.
33740
33741'scalar_storage_order ("ENDIANNESS")'
33742     When attached to a 'union' or a 'struct', this attribute sets the
33743     storage order, aka endianness, of the scalar fields of the type, as
33744     well as the array fields whose component is scalar.  The supported
33745     endiannesses are 'big-endian' and 'little-endian'.  The attribute
33746     has no effects on fields which are themselves a 'union', a 'struct'
33747     or an array whose component is a 'union' or a 'struct', and it is
33748     possible for these fields to have a different scalar storage order
33749     than the enclosing type.
33750
33751     This attribute is supported only for targets that use a uniform
33752     default scalar storage order (fortunately, most of them), i.e.
33753     targets that store the scalars either all in big-endian or all in
33754     little-endian.
33755
33756     Additional restrictions are enforced for types with the reverse
33757     scalar storage order with regard to the scalar storage order of the
33758     target:
33759
33760        * Taking the address of a scalar field of a 'union' or a
33761          'struct' with reverse scalar storage order is not permitted
33762          and yields an error.
33763        * Taking the address of an array field, whose component is
33764          scalar, of a 'union' or a 'struct' with reverse scalar storage
33765          order is permitted but yields a warning, unless
33766          '-Wno-scalar-storage-order' is specified.
33767        * Taking the address of a 'union' or a 'struct' with reverse
33768          scalar storage order is permitted.
33769
33770     These restrictions exist because the storage order attribute is
33771     lost when the address of a scalar or the address of an array with
33772     scalar component is taken, so storing indirectly through this
33773     address generally does not work.  The second case is nevertheless
33774     allowed to be able to perform a block copy from or to the array.
33775
33776     Moreover, the use of type punning or aliasing to toggle the storage
33777     order is not supported; that is to say, a given scalar object
33778     cannot be accessed through distinct types that assign a different
33779     storage order to it.
33780
33781'transparent_union'
33782
33783     This attribute, attached to a 'union' type definition, indicates
33784     that any function parameter having that union type causes calls to
33785     that function to be treated in a special way.
33786
33787     First, the argument corresponding to a transparent union type can
33788     be of any type in the union; no cast is required.  Also, if the
33789     union contains a pointer type, the corresponding argument can be a
33790     null pointer constant or a void pointer expression; and if the
33791     union contains a void pointer type, the corresponding argument can
33792     be any pointer expression.  If the union member type is a pointer,
33793     qualifiers like 'const' on the referenced type must be respected,
33794     just as with normal pointer conversions.
33795
33796     Second, the argument is passed to the function using the calling
33797     conventions of the first member of the transparent union, not the
33798     calling conventions of the union itself.  All members of the union
33799     must have the same machine representation; this is necessary for
33800     this argument passing to work properly.
33801
33802     Transparent unions are designed for library functions that have
33803     multiple interfaces for compatibility reasons.  For example,
33804     suppose the 'wait' function must accept either a value of type 'int
33805     *' to comply with POSIX, or a value of type 'union wait *' to
33806     comply with the 4.1BSD interface.  If 'wait''s parameter were 'void
33807     *', 'wait' would accept both kinds of arguments, but it would also
33808     accept any other pointer type and this would make argument type
33809     checking less useful.  Instead, '<sys/wait.h>' might define the
33810     interface as follows:
33811
33812          typedef union __attribute__ ((__transparent_union__))
33813            {
33814              int *__ip;
33815              union wait *__up;
33816            } wait_status_ptr_t;
33817
33818          pid_t wait (wait_status_ptr_t);
33819
33820     This interface allows either 'int *' or 'union wait *' arguments to
33821     be passed, using the 'int *' calling convention.  The program can
33822     call 'wait' with arguments of either type:
33823
33824          int w1 () { int w; return wait (&w); }
33825          int w2 () { union wait w; return wait (&w); }
33826
33827     With this interface, 'wait''s implementation might look like this:
33828
33829          pid_t wait (wait_status_ptr_t p)
33830          {
33831            return waitpid (-1, p.__ip, 0);
33832          }
33833
33834'unused'
33835     When attached to a type (including a 'union' or a 'struct'), this
33836     attribute means that variables of that type are meant to appear
33837     possibly unused.  GCC does not produce a warning for any variables
33838     of that type, even if the variable appears to do nothing.  This is
33839     often the case with lock or thread classes, which are usually
33840     defined and then not referenced, but contain constructors and
33841     destructors that have nontrivial bookkeeping functions.
33842
33843'visibility'
33844     In C++, attribute visibility (*note Function Attributes::) can also
33845     be applied to class, struct, union and enum types.  Unlike other
33846     type attributes, the attribute must appear between the initial
33847     keyword and the name of the type; it cannot appear after the body
33848     of the type.
33849
33850     Note that the type visibility is applied to vague linkage entities
33851     associated with the class (vtable, typeinfo node, etc.).  In
33852     particular, if a class is thrown as an exception in one shared
33853     object and caught in another, the class must have default
33854     visibility.  Otherwise the two shared objects are unable to use the
33855     same typeinfo node and exception handling will break.
33856
33857 To specify multiple attributes, separate them by commas within the
33858double parentheses: for example, '__attribute__ ((aligned (16),
33859packed))'.
33860
33861
33862File: gcc.info,  Node: ARC Type Attributes,  Next: ARM Type Attributes,  Prev: Common Type Attributes,  Up: Type Attributes
33863
338646.33.2 ARC Type Attributes
33865--------------------------
33866
33867Declaring objects with 'uncached' allows you to exclude data-cache
33868participation in load and store operations on those objects without
33869involving the additional semantic implications of 'volatile'.  The '.di'
33870instruction suffix is used for all loads and stores of data declared
33871'uncached'.
33872
33873
33874File: gcc.info,  Node: ARM Type Attributes,  Next: MeP Type Attributes,  Prev: ARC Type Attributes,  Up: Type Attributes
33875
338766.33.3 ARM Type Attributes
33877--------------------------
33878
33879On those ARM targets that support 'dllimport' (such as Symbian OS), you
33880can use the 'notshared' attribute to indicate that the virtual table and
33881other similar data for a class should not be exported from a DLL.  For
33882example:
33883
33884     class __declspec(notshared) C {
33885     public:
33886       __declspec(dllimport) C();
33887       virtual void f();
33888     }
33889
33890     __declspec(dllexport)
33891     C::C() {}
33892
33893In this code, 'C::C' is exported from the current DLL, but the virtual
33894table for 'C' is not exported.  (You can use '__attribute__' instead of
33895'__declspec' if you prefer, but most Symbian OS code uses '__declspec'.)
33896
33897
33898File: gcc.info,  Node: MeP Type Attributes,  Next: PowerPC Type Attributes,  Prev: ARM Type Attributes,  Up: Type Attributes
33899
339006.33.4 MeP Type Attributes
33901--------------------------
33902
33903Many of the MeP variable attributes may be applied to types as well.
33904Specifically, the 'based', 'tiny', 'near', and 'far' attributes may be
33905applied to either.  The 'io' and 'cb' attributes may not be applied to
33906types.
33907
33908
33909File: gcc.info,  Node: PowerPC Type Attributes,  Next: SPU Type Attributes,  Prev: MeP Type Attributes,  Up: Type Attributes
33910
339116.33.5 PowerPC Type Attributes
33912------------------------------
33913
33914Three attributes currently are defined for PowerPC configurations:
33915'altivec', 'ms_struct' and 'gcc_struct'.
33916
33917 For full documentation of the 'ms_struct' and 'gcc_struct' attributes
33918please see the documentation in *note x86 Type Attributes::.
33919
33920 The 'altivec' attribute allows one to declare AltiVec vector data types
33921supported by the AltiVec Programming Interface Manual.  The attribute
33922requires an argument to specify one of three vector types: 'vector__',
33923'pixel__' (always followed by unsigned short), and 'bool__' (always
33924followed by unsigned).
33925
33926     __attribute__((altivec(vector__)))
33927     __attribute__((altivec(pixel__))) unsigned short
33928     __attribute__((altivec(bool__))) unsigned
33929
33930 These attributes mainly are intended to support the '__vector',
33931'__pixel', and '__bool' AltiVec keywords.
33932
33933
33934File: gcc.info,  Node: SPU Type Attributes,  Next: x86 Type Attributes,  Prev: PowerPC Type Attributes,  Up: Type Attributes
33935
339366.33.6 SPU Type Attributes
33937--------------------------
33938
33939The SPU supports the 'spu_vector' attribute for types.  This attribute
33940allows one to declare vector data types supported by the
33941Sony/Toshiba/IBM SPU Language Extensions Specification.  It is intended
33942to support the '__vector' keyword.
33943
33944
33945File: gcc.info,  Node: x86 Type Attributes,  Prev: SPU Type Attributes,  Up: Type Attributes
33946
339476.33.7 x86 Type Attributes
33948--------------------------
33949
33950Two attributes are currently defined for x86 configurations: 'ms_struct'
33951and 'gcc_struct'.
33952
33953'ms_struct'
33954'gcc_struct'
33955
33956     If 'packed' is used on a structure, or if bit-fields are used it
33957     may be that the Microsoft ABI packs them differently than GCC
33958     normally packs them.  Particularly when moving packed data between
33959     functions compiled with GCC and the native Microsoft compiler
33960     (either via function call or as data in a file), it may be
33961     necessary to access either format.
33962
33963     The 'ms_struct' and 'gcc_struct' attributes correspond to the
33964     '-mms-bitfields' and '-mno-ms-bitfields' command-line options,
33965     respectively; see *note x86 Options::, for details of how structure
33966     layout is affected.  *Note x86 Variable Attributes::, for
33967     information about the corresponding attributes on variables.
33968
33969
33970File: gcc.info,  Node: Label Attributes,  Next: Enumerator Attributes,  Prev: Type Attributes,  Up: C Extensions
33971
339726.34 Label Attributes
33973=====================
33974
33975GCC allows attributes to be set on C labels.  *Note Attribute Syntax::,
33976for details of the exact syntax for using attributes.  Other attributes
33977are available for functions (*note Function Attributes::), variables
33978(*note Variable Attributes::), enumerators (*note Enumerator
33979Attributes::), statements (*note Statement Attributes::), and for types
33980(*note Type Attributes::).
33981
33982 This example uses the 'cold' label attribute to indicate the
33983'ErrorHandling' branch is unlikely to be taken and that the
33984'ErrorHandling' label is unused:
33985
33986
33987        asm goto ("some asm" : : : : NoError);
33988
33989     /* This branch (the fall-through from the asm) is less commonly used */
33990     ErrorHandling:
33991        __attribute__((cold, unused)); /* Semi-colon is required here */
33992        printf("error\n");
33993        return 0;
33994
33995     NoError:
33996        printf("no error\n");
33997        return 1;
33998
33999'unused'
34000     This feature is intended for program-generated code that may
34001     contain unused labels, but which is compiled with '-Wall'.  It is
34002     not normally appropriate to use in it human-written code, though it
34003     could be useful in cases where the code that jumps to the label is
34004     contained within an '#ifdef' conditional.
34005
34006'hot'
34007     The 'hot' attribute on a label is used to inform the compiler that
34008     the path following the label is more likely than paths that are not
34009     so annotated.  This attribute is used in cases where
34010     '__builtin_expect' cannot be used, for instance with computed goto
34011     or 'asm goto'.
34012
34013'cold'
34014     The 'cold' attribute on labels is used to inform the compiler that
34015     the path following the label is unlikely to be executed.  This
34016     attribute is used in cases where '__builtin_expect' cannot be used,
34017     for instance with computed goto or 'asm goto'.
34018
34019
34020File: gcc.info,  Node: Enumerator Attributes,  Next: Statement Attributes,  Prev: Label Attributes,  Up: C Extensions
34021
340226.35 Enumerator Attributes
34023==========================
34024
34025GCC allows attributes to be set on enumerators.  *Note Attribute
34026Syntax::, for details of the exact syntax for using attributes.  Other
34027attributes are available for functions (*note Function Attributes::),
34028variables (*note Variable Attributes::), labels (*note Label
34029Attributes::), statements (*note Statement Attributes::), and for types
34030(*note Type Attributes::).
34031
34032 This example uses the 'deprecated' enumerator attribute to indicate the
34033'oldval' enumerator is deprecated:
34034
34035     enum E {
34036       oldval __attribute__((deprecated)),
34037       newval
34038     };
34039
34040     int
34041     fn (void)
34042     {
34043       return oldval;
34044     }
34045
34046'deprecated'
34047     The 'deprecated' attribute results in a warning if the enumerator
34048     is used anywhere in the source file.  This is useful when
34049     identifying enumerators that are expected to be removed in a future
34050     version of a program.  The warning also includes the location of
34051     the declaration of the deprecated enumerator, to enable users to
34052     easily find further information about why the enumerator is
34053     deprecated, or what they should do instead.  Note that the warnings
34054     only occurs for uses.
34055
34056
34057File: gcc.info,  Node: Statement Attributes,  Next: Attribute Syntax,  Prev: Enumerator Attributes,  Up: C Extensions
34058
340596.36 Statement Attributes
34060=========================
34061
34062GCC allows attributes to be set on null statements.  *Note Attribute
34063Syntax::, for details of the exact syntax for using attributes.  Other
34064attributes are available for functions (*note Function Attributes::),
34065variables (*note Variable Attributes::), labels (*note Label
34066Attributes::), enumerators (*note Enumerator Attributes::), and for
34067types (*note Type Attributes::).
34068
34069 This example uses the 'fallthrough' statement attribute to indicate
34070that the '-Wimplicit-fallthrough' warning should not be emitted:
34071
34072     switch (cond)
34073       {
34074       case 1:
34075         bar (1);
34076         __attribute__((fallthrough));
34077       case 2:
34078         ...
34079       }
34080
34081'fallthrough'
34082     The 'fallthrough' attribute with a null statement serves as a
34083     fallthrough statement.  It hints to the compiler that a statement
34084     that falls through to another case label, or user-defined label in
34085     a switch statement is intentional and thus the
34086     '-Wimplicit-fallthrough' warning must not trigger.  The fallthrough
34087     attribute may appear at most once in each attribute list, and may
34088     not be mixed with other attributes.  It can only be used in a
34089     switch statement (the compiler will issue an error otherwise),
34090     after a preceding statement and before a logically succeeding case
34091     label, or user-defined label.
34092
34093
34094File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Statement Attributes,  Up: C Extensions
34095
340966.37 Attribute Syntax
34097=====================
34098
34099This section describes the syntax with which '__attribute__' may be
34100used, and the constructs to which attribute specifiers bind, for the C
34101language.  Some details may vary for C++ and Objective-C.  Because of
34102infelicities in the grammar for attributes, some forms described here
34103may not be successfully parsed in all cases.
34104
34105 There are some problems with the semantics of attributes in C++.  For
34106example, there are no manglings for attributes, although they may affect
34107code generation, so problems may arise when attributed types are used in
34108conjunction with templates or overloading.  Similarly, 'typeid' does not
34109distinguish between types with different attributes.  Support for
34110attributes in C++ may be restricted in future to attributes on
34111declarations only, but not on nested declarators.
34112
34113 *Note Function Attributes::, for details of the semantics of attributes
34114applying to functions.  *Note Variable Attributes::, for details of the
34115semantics of attributes applying to variables.  *Note Type Attributes::,
34116for details of the semantics of attributes applying to structure, union
34117and enumerated types.  *Note Label Attributes::, for details of the
34118semantics of attributes applying to labels.  *Note Enumerator
34119Attributes::, for details of the semantics of attributes applying to
34120enumerators.  *Note Statement Attributes::, for details of the semantics
34121of attributes applying to statements.
34122
34123 An "attribute specifier" is of the form '__attribute__
34124((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
34125comma-separated sequence of "attributes", where each attribute is one of
34126the following:
34127
34128   * Empty.  Empty attributes are ignored.
34129
34130   * An attribute name (which may be an identifier such as 'unused', or
34131     a reserved word such as 'const').
34132
34133   * An attribute name followed by a parenthesized list of parameters
34134     for the attribute.  These parameters take one of the following
34135     forms:
34136
34137        * An identifier.  For example, 'mode' attributes use this form.
34138
34139        * An identifier followed by a comma and a non-empty
34140          comma-separated list of expressions.  For example, 'format'
34141          attributes use this form.
34142
34143        * A possibly empty comma-separated list of expressions.  For
34144          example, 'format_arg' attributes use this form with the list
34145          being a single integer constant expression, and 'alias'
34146          attributes use this form with the list being a single string
34147          constant.
34148
34149 An "attribute specifier list" is a sequence of one or more attribute
34150specifiers, not separated by any other tokens.
34151
34152 You may optionally specify attribute names with '__' preceding and
34153following the name.  This allows you to use them in header files without
34154being concerned about a possible macro of the same name.  For example,
34155you may use the attribute name '__noreturn__' instead of 'noreturn'.
34156
34157Label Attributes
34158................
34159
34160In GNU C, an attribute specifier list may appear after the colon
34161following a label, other than a 'case' or 'default' label.  GNU C++ only
34162permits attributes on labels if the attribute specifier is immediately
34163followed by a semicolon (i.e., the label applies to an empty statement).
34164If the semicolon is missing, C++ label attributes are ambiguous, as it
34165is permissible for a declaration, which could begin with an attribute
34166list, to be labelled in C++.  Declarations cannot be labelled in C90 or
34167C99, so the ambiguity does not arise there.
34168
34169Enumerator Attributes
34170.....................
34171
34172In GNU C, an attribute specifier list may appear as part of an
34173enumerator.  The attribute goes after the enumeration constant, before
34174'=', if present.  The optional attribute in the enumerator appertains to
34175the enumeration constant.  It is not possible to place the attribute
34176after the constant expression, if present.
34177
34178Statement Attributes
34179....................
34180
34181In GNU C, an attribute specifier list may appear as part of a null
34182statement.  The attribute goes before the semicolon.
34183
34184Type Attributes
34185...............
34186
34187An attribute specifier list may appear as part of a 'struct', 'union' or
34188'enum' specifier.  It may go either immediately after the 'struct',
34189'union' or 'enum' keyword, or after the closing brace.  The former
34190syntax is preferred.  Where attribute specifiers follow the closing
34191brace, they are considered to relate to the structure, union or
34192enumerated type defined, not to any enclosing declaration the type
34193specifier appears in, and the type defined is not complete until after
34194the attribute specifiers.
34195
34196All other attributes
34197....................
34198
34199Otherwise, an attribute specifier appears as part of a declaration,
34200counting declarations of unnamed parameters and type names, and relates
34201to that declaration (which may be nested in another declaration, for
34202example in the case of a parameter declaration), or to a particular
34203declarator within a declaration.  Where an attribute specifier is
34204applied to a parameter declared as a function or an array, it should
34205apply to the function or array rather than the pointer to which the
34206parameter is implicitly converted, but this is not yet correctly
34207implemented.
34208
34209 Any list of specifiers and qualifiers at the start of a declaration may
34210contain attribute specifiers, whether or not such a list may in that
34211context contain storage class specifiers.  (Some attributes, however,
34212are essentially in the nature of storage class specifiers, and only make
34213sense where storage class specifiers may be used; for example,
34214'section'.)  There is one necessary limitation to this syntax: the first
34215old-style parameter declaration in a function definition cannot begin
34216with an attribute specifier, because such an attribute applies to the
34217function instead by syntax described below (which, however, is not yet
34218implemented in this case).  In some other cases, attribute specifiers
34219are permitted by this grammar but not yet supported by the compiler.
34220All attribute specifiers in this place relate to the declaration as a
34221whole.  In the obsolescent usage where a type of 'int' is implied by the
34222absence of type specifiers, such a list of specifiers and qualifiers may
34223be an attribute specifier list with no other specifiers or qualifiers.
34224
34225 At present, the first parameter in a function prototype must have some
34226type specifier that is not an attribute specifier; this resolves an
34227ambiguity in the interpretation of 'void f(int (__attribute__((foo))
34228x))', but is subject to change.  At present, if the parentheses of a
34229function declarator contain only attributes then those attributes are
34230ignored, rather than yielding an error or warning or implying a single
34231parameter of type int, but this is subject to change.
34232
34233 An attribute specifier list may appear immediately before a declarator
34234(other than the first) in a comma-separated list of declarators in a
34235declaration of more than one identifier using a single list of
34236specifiers and qualifiers.  Such attribute specifiers apply only to the
34237identifier before whose declarator they appear.  For example, in
34238
34239     __attribute__((noreturn)) void d0 (void),
34240         __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
34241          d2 (void);
34242
34243the 'noreturn' attribute applies to all the functions declared; the
34244'format' attribute only applies to 'd1'.
34245
34246 An attribute specifier list may appear immediately before the comma,
34247'=' or semicolon terminating the declaration of an identifier other than
34248a function definition.  Such attribute specifiers apply to the declared
34249object or function.  Where an assembler name for an object or function
34250is specified (*note Asm Labels::), the attribute must follow the 'asm'
34251specification.
34252
34253 An attribute specifier list may, in future, be permitted to appear
34254after the declarator in a function definition (before any old-style
34255parameter declarations or the function body).
34256
34257 Attribute specifiers may be mixed with type qualifiers appearing inside
34258the '[]' of a parameter array declarator, in the C99 construct by which
34259such qualifiers are applied to the pointer to which the array is
34260implicitly converted.  Such attribute specifiers apply to the pointer,
34261not to the array, but at present this is not implemented and they are
34262ignored.
34263
34264 An attribute specifier list may appear at the start of a nested
34265declarator.  At present, there are some limitations in this usage: the
34266attributes correctly apply to the declarator, but for most individual
34267attributes the semantics this implies are not implemented.  When
34268attribute specifiers follow the '*' of a pointer declarator, they may be
34269mixed with any type qualifiers present.  The following describes the
34270formal semantics of this syntax.  It makes the most sense if you are
34271familiar with the formal specification of declarators in the ISO C
34272standard.
34273
34274 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration 'T D1',
34275where 'T' contains declaration specifiers that specify a type TYPE (such
34276as 'int') and 'D1' is a declarator that contains an identifier IDENT.
34277The type specified for IDENT for derived declarators whose type does not
34278include an attribute specifier is as in the ISO C standard.
34279
34280 If 'D1' has the form '( ATTRIBUTE-SPECIFIER-LIST D )', and the
34281declaration 'T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST TYPE"
34282for IDENT, then 'T D1' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
34283ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
34284
34285 If 'D1' has the form '* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST D',
34286and the declaration 'T D' specifies the type
34287"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then 'T D1' specifies the
34288type "DERIVED-DECLARATOR-TYPE-LIST
34289TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.
34290
34291 For example,
34292
34293     void (__attribute__((noreturn)) ****f) (void);
34294
34295specifies the type "pointer to pointer to pointer to pointer to
34296non-returning function returning 'void'".  As another example,
34297
34298     char *__attribute__((aligned(8))) *f;
34299
34300specifies the type "pointer to 8-byte-aligned pointer to 'char'".  Note
34301again that this does not work with most attributes; for example, the
34302usage of 'aligned' and 'noreturn' attributes given above is not yet
34303supported.
34304
34305 For compatibility with existing code written for compiler versions that
34306did not implement attributes on nested declarators, some laxity is
34307allowed in the placing of attributes.  If an attribute that only applies
34308to types is applied to a declaration, it is treated as applying to the
34309type of that declaration.  If an attribute that only applies to
34310declarations is applied to the type of a declaration, it is treated as
34311applying to that declaration; and, for compatibility with code placing
34312the attributes immediately before the identifier declared, such an
34313attribute applied to a function return type is treated as applying to
34314the function type, and such an attribute applied to an array element
34315type is treated as applying to the array type.  If an attribute that
34316only applies to function types is applied to a pointer-to-function type,
34317it is treated as applying to the pointer target type; if such an
34318attribute is applied to a function return type that is not a
34319pointer-to-function type, it is treated as applying to the function
34320type.
34321
34322
34323File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
34324
343256.38 Prototypes and Old-Style Function Definitions
34326==================================================
34327
34328GNU C extends ISO C to allow a function prototype to override a later
34329old-style non-prototype definition.  Consider the following example:
34330
34331     /* Use prototypes unless the compiler is old-fashioned.  */
34332     #ifdef __STDC__
34333     #define P(x) x
34334     #else
34335     #define P(x) ()
34336     #endif
34337
34338     /* Prototype function declaration.  */
34339     int isroot P((uid_t));
34340
34341     /* Old-style function definition.  */
34342     int
34343     isroot (x)   /* ??? lossage here ??? */
34344          uid_t x;
34345     {
34346       return x == 0;
34347     }
34348
34349 Suppose the type 'uid_t' happens to be 'short'.  ISO C does not allow
34350this example, because subword arguments in old-style non-prototype
34351definitions are promoted.  Therefore in this example the function
34352definition's argument is really an 'int', which does not match the
34353prototype argument type of 'short'.
34354
34355 This restriction of ISO C makes it hard to write code that is portable
34356to traditional C compilers, because the programmer does not know whether
34357the 'uid_t' type is 'short', 'int', or 'long'.  Therefore, in cases like
34358these GNU C allows a prototype to override a later old-style definition.
34359More precisely, in GNU C, a function prototype argument type overrides
34360the argument type specified by a later old-style definition if the
34361former type is the same as the latter type before promotion.  Thus in
34362GNU C the above example is equivalent to the following:
34363
34364     int isroot (uid_t);
34365
34366     int
34367     isroot (uid_t x)
34368     {
34369       return x == 0;
34370     }
34371
34372GNU C++ does not support old-style function definitions, so this
34373extension is irrelevant.
34374
34375
34376File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
34377
343786.39 C++ Style Comments
34379=======================
34380
34381In GNU C, you may use C++ style comments, which start with '//' and
34382continue until the end of the line.  Many other C implementations allow
34383such comments, and they are included in the 1999 C standard.  However,
34384C++ style comments are not recognized if you specify an '-std' option
34385specifying a version of ISO C before C99, or '-ansi' (equivalent to
34386'-std=c90').
34387
34388
34389File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
34390
343916.40 Dollar Signs in Identifier Names
34392=====================================
34393
34394In GNU C, you may normally use dollar signs in identifier names.  This
34395is because many traditional C implementations allow such identifiers.
34396However, dollar signs in identifiers are not supported on a few target
34397machines, typically because the target assembler does not allow them.
34398
34399
34400File: gcc.info,  Node: Character Escapes,  Next: Alignment,  Prev: Dollar Signs,  Up: C Extensions
34401
344026.41 The Character <ESC> in Constants
34403=====================================
34404
34405You can use the sequence '\e' in a string or character constant to stand
34406for the ASCII character <ESC>.
34407
34408
34409File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Character Escapes,  Up: C Extensions
34410
344116.42 Inquiring on Alignment of Types or Variables
34412=================================================
34413
34414The keyword '__alignof__' allows you to inquire about how an object is
34415aligned, or the minimum alignment usually required by a type.  Its
34416syntax is just like 'sizeof'.
34417
34418 For example, if the target machine requires a 'double' value to be
34419aligned on an 8-byte boundary, then '__alignof__ (double)' is 8.  This
34420is true on many RISC machines.  On more traditional machine designs,
34421'__alignof__ (double)' is 4 or even 2.
34422
34423 Some machines never actually require alignment; they allow reference to
34424any data type even at an odd address.  For these machines, '__alignof__'
34425reports the smallest alignment that GCC gives the data type, usually as
34426mandated by the target ABI.
34427
34428 If the operand of '__alignof__' is an lvalue rather than a type, its
34429value is the required alignment for its type, taking into account any
34430minimum alignment specified with GCC's '__attribute__' extension (*note
34431Variable Attributes::).  For example, after this declaration:
34432
34433     struct foo { int x; char y; } foo1;
34434
34435the value of '__alignof__ (foo1.y)' is 1, even though its actual
34436alignment is probably 2 or 4, the same as '__alignof__ (int)'.
34437
34438 It is an error to ask for the alignment of an incomplete type.
34439
34440
34441File: gcc.info,  Node: Inline,  Next: Volatiles,  Prev: Alignment,  Up: C Extensions
34442
344436.43 An Inline Function is As Fast As a Macro
34444=============================================
34445
34446By declaring a function inline, you can direct GCC to make calls to that
34447function faster.  One way GCC can achieve this is to integrate that
34448function's code into the code for its callers.  This makes execution
34449faster by eliminating the function-call overhead; in addition, if any of
34450the actual argument values are constant, their known values may permit
34451simplifications at compile time so that not all of the inline function's
34452code needs to be included.  The effect on code size is less predictable;
34453object code may be larger or smaller with function inlining, depending
34454on the particular case.  You can also direct GCC to try to integrate all
34455"simple enough" functions into their callers with the option
34456'-finline-functions'.
34457
34458 GCC implements three different semantics of declaring a function
34459inline.  One is available with '-std=gnu89' or '-fgnu89-inline' or when
34460'gnu_inline' attribute is present on all inline declarations, another
34461when '-std=c99', '-std=gnu99' or an option for a later C version is used
34462(without '-fgnu89-inline'), and the third is used when compiling C++.
34463
34464 To declare a function inline, use the 'inline' keyword in its
34465declaration, like this:
34466
34467     static inline int
34468     inc (int *a)
34469     {
34470       return (*a)++;
34471     }
34472
34473 If you are writing a header file to be included in ISO C90 programs,
34474write '__inline__' instead of 'inline'.  *Note Alternate Keywords::.
34475
34476 The three types of inlining behave similarly in two important cases:
34477when the 'inline' keyword is used on a 'static' function, like the
34478example above, and when a function is first declared without using the
34479'inline' keyword and then is defined with 'inline', like this:
34480
34481     extern int inc (int *a);
34482     inline int
34483     inc (int *a)
34484     {
34485       return (*a)++;
34486     }
34487
34488 In both of these common cases, the program behaves the same as if you
34489had not used the 'inline' keyword, except for its speed.
34490
34491 When a function is both inline and 'static', if all calls to the
34492function are integrated into the caller, and the function's address is
34493never used, then the function's own assembler code is never referenced.
34494In this case, GCC does not actually output assembler code for the
34495function, unless you specify the option '-fkeep-inline-functions'.  If
34496there is a nonintegrated call, then the function is compiled to
34497assembler code as usual.  The function must also be compiled as usual if
34498the program refers to its address, because that cannot be inlined.
34499
34500 Note that certain usages in a function definition can make it
34501unsuitable for inline substitution.  Among these usages are: variadic
34502functions, use of 'alloca', use of computed goto (*note Labels as
34503Values::), use of nonlocal goto, use of nested functions, use of
34504'setjmp', use of '__builtin_longjmp' and use of '__builtin_return' or
34505'__builtin_apply_args'.  Using '-Winline' warns when a function marked
34506'inline' could not be substituted, and gives the reason for the failure.
34507
34508 As required by ISO C++, GCC considers member functions defined within
34509the body of a class to be marked inline even if they are not explicitly
34510declared with the 'inline' keyword.  You can override this with
34511'-fno-default-inline'; *note Options Controlling C++ Dialect: C++
34512Dialect Options.
34513
34514 GCC does not inline any functions when not optimizing unless you
34515specify the 'always_inline' attribute for the function, like this:
34516
34517     /* Prototype.  */
34518     inline void foo (const char) __attribute__((always_inline));
34519
34520 The remainder of this section is specific to GNU C90 inlining.
34521
34522 When an inline function is not 'static', then the compiler must assume
34523that there may be calls from other source files; since a global symbol
34524can be defined only once in any program, the function must not be
34525defined in the other source files, so the calls therein cannot be
34526integrated.  Therefore, a non-'static' inline function is always
34527compiled on its own in the usual fashion.
34528
34529 If you specify both 'inline' and 'extern' in the function definition,
34530then the definition is used only for inlining.  In no case is the
34531function compiled on its own, not even if you refer to its address
34532explicitly.  Such an address becomes an external reference, as if you
34533had only declared the function, and had not defined it.
34534
34535 This combination of 'inline' and 'extern' has almost the effect of a
34536macro.  The way to use it is to put a function definition in a header
34537file with these keywords, and put another copy of the definition
34538(lacking 'inline' and 'extern') in a library file.  The definition in
34539the header file causes most calls to the function to be inlined.  If any
34540uses of the function remain, they refer to the single copy in the
34541library.
34542
34543
34544File: gcc.info,  Node: Volatiles,  Next: Using Assembly Language with C,  Prev: Inline,  Up: C Extensions
34545
345466.44 When is a Volatile Object Accessed?
34547========================================
34548
34549C has the concept of volatile objects.  These are normally accessed by
34550pointers and used for accessing hardware or inter-thread communication.
34551The standard encourages compilers to refrain from optimizations
34552concerning accesses to volatile objects, but leaves it implementation
34553defined as to what constitutes a volatile access.  The minimum
34554requirement is that at a sequence point all previous accesses to
34555volatile objects have stabilized and no subsequent accesses have
34556occurred.  Thus an implementation is free to reorder and combine
34557volatile accesses that occur between sequence points, but cannot do so
34558for accesses across a sequence point.  The use of volatile does not
34559allow you to violate the restriction on updating objects multiple times
34560between two sequence points.
34561
34562 Accesses to non-volatile objects are not ordered with respect to
34563volatile accesses.  You cannot use a volatile object as a memory barrier
34564to order a sequence of writes to non-volatile memory.  For instance:
34565
34566     int *ptr = SOMETHING;
34567     volatile int vobj;
34568     *ptr = SOMETHING;
34569     vobj = 1;
34570
34571Unless *PTR and VOBJ can be aliased, it is not guaranteed that the write
34572to *PTR occurs by the time the update of VOBJ happens.  If you need this
34573guarantee, you must use a stronger memory barrier such as:
34574
34575     int *ptr = SOMETHING;
34576     volatile int vobj;
34577     *ptr = SOMETHING;
34578     asm volatile ("" : : : "memory");
34579     vobj = 1;
34580
34581 A scalar volatile object is read when it is accessed in a void context:
34582
34583     volatile int *src = SOMEVALUE;
34584     *src;
34585
34586 Such expressions are rvalues, and GCC implements this as a read of the
34587volatile object being pointed to.
34588
34589 Assignments are also expressions and have an rvalue.  However when
34590assigning to a scalar volatile, the volatile object is not reread,
34591regardless of whether the assignment expression's rvalue is used or not.
34592If the assignment's rvalue is used, the value is that assigned to the
34593volatile object.  For instance, there is no read of VOBJ in all the
34594following cases:
34595
34596     int obj;
34597     volatile int vobj;
34598     vobj = SOMETHING;
34599     obj = vobj = SOMETHING;
34600     obj ? vobj = ONETHING : vobj = ANOTHERTHING;
34601     obj = (SOMETHING, vobj = ANOTHERTHING);
34602
34603 If you need to read the volatile object after an assignment has
34604occurred, you must use a separate expression with an intervening
34605sequence point.
34606
34607 As bit-fields are not individually addressable, volatile bit-fields may
34608be implicitly read when written to, or when adjacent bit-fields are
34609accessed.  Bit-field operations may be optimized such that adjacent
34610bit-fields are only partially accessed, if they straddle a storage unit
34611boundary.  For these reasons it is unwise to use volatile bit-fields to
34612access hardware.
34613
34614
34615File: gcc.info,  Node: Using Assembly Language with C,  Next: Alternate Keywords,  Prev: Volatiles,  Up: C Extensions
34616
346176.45 How to Use Inline Assembly Language in C Code
34618==================================================
34619
34620The 'asm' keyword allows you to embed assembler instructions within C
34621code.  GCC provides two forms of inline 'asm' statements.  A "basic
34622'asm'" statement is one with no operands (*note Basic Asm::), while an
34623"extended 'asm'" statement (*note Extended Asm::) includes one or more
34624operands.  The extended form is preferred for mixing C and assembly
34625language within a function, but to include assembly language at top
34626level you must use basic 'asm'.
34627
34628 You can also use the 'asm' keyword to override the assembler name for a
34629C symbol, or to place a C variable in a specific register.
34630
34631* Menu:
34632
34633* Basic Asm::          Inline assembler without operands.
34634* Extended Asm::       Inline assembler with operands.
34635* Constraints::        Constraints for 'asm' operands
34636* Asm Labels::         Specifying the assembler name to use for a C symbol.
34637* Explicit Register Variables::  Defining variables residing in specified
34638                       registers.
34639* Size of an asm::     How GCC calculates the size of an 'asm' block.
34640
34641
34642File: gcc.info,  Node: Basic Asm,  Next: Extended Asm,  Up: Using Assembly Language with C
34643
346446.45.1 Basic Asm -- Assembler Instructions Without Operands
34645-----------------------------------------------------------
34646
34647A basic 'asm' statement has the following syntax:
34648
34649     asm ASM-QUALIFIERS ( ASSEMBLERINSTRUCTIONS )
34650
34651 The 'asm' keyword is a GNU extension.  When writing code that can be
34652compiled with '-ansi' and the various '-std' options, use '__asm__'
34653instead of 'asm' (*note Alternate Keywords::).
34654
34655Qualifiers
34656..........
34657
34658'volatile'
34659     The optional 'volatile' qualifier has no effect.  All basic 'asm'
34660     blocks are implicitly volatile.
34661
34662'inline'
34663     If you use the 'inline' qualifier, then for inlining purposes the
34664     size of the asm is taken as the smallest size possible (*note Size
34665     of an asm::).
34666
34667Parameters
34668..........
34669
34670ASSEMBLERINSTRUCTIONS
34671     This is a literal string that specifies the assembler code.  The
34672     string can contain any instructions recognized by the assembler,
34673     including directives.  GCC does not parse the assembler
34674     instructions themselves and does not know what they mean or even
34675     whether they are valid assembler input.
34676
34677     You may place multiple assembler instructions together in a single
34678     'asm' string, separated by the characters normally used in assembly
34679     code for the system.  A combination that works in most places is a
34680     newline to break the line, plus a tab character (written as
34681     '\n\t').  Some assemblers allow semicolons as a line separator.
34682     However, note that some assembler dialects use semicolons to start
34683     a comment.
34684
34685Remarks
34686.......
34687
34688Using extended 'asm' (*note Extended Asm::) typically produces smaller,
34689safer, and more efficient code, and in most cases it is a better
34690solution than basic 'asm'.  However, there are two situations where only
34691basic 'asm' can be used:
34692
34693   * Extended 'asm' statements have to be inside a C function, so to
34694     write inline assembly language at file scope ("top-level"), outside
34695     of C functions, you must use basic 'asm'.  You can use this
34696     technique to emit assembler directives, define assembly language
34697     macros that can be invoked elsewhere in the file, or write entire
34698     functions in assembly language.
34699
34700   * Functions declared with the 'naked' attribute also require basic
34701     'asm' (*note Function Attributes::).
34702
34703 Safely accessing C data and calling functions from basic 'asm' is more
34704complex than it may appear.  To access C data, it is better to use
34705extended 'asm'.
34706
34707 Do not expect a sequence of 'asm' statements to remain perfectly
34708consecutive after compilation.  If certain instructions need to remain
34709consecutive in the output, put them in a single multi-instruction 'asm'
34710statement.  Note that GCC's optimizers can move 'asm' statements
34711relative to other code, including across jumps.
34712
34713 'asm' statements may not perform jumps into other 'asm' statements.
34714GCC does not know about these jumps, and therefore cannot take account
34715of them when deciding how to optimize.  Jumps from 'asm' to C labels are
34716only supported in extended 'asm'.
34717
34718 Under certain circumstances, GCC may duplicate (or remove duplicates
34719of) your assembly code when optimizing.  This can lead to unexpected
34720duplicate symbol errors during compilation if your assembly code defines
34721symbols or labels.
34722
34723 *Warning:* The C standards do not specify semantics for 'asm', making
34724it a potential source of incompatibilities between compilers.  These
34725incompatibilities may not produce compiler warnings/errors.
34726
34727 GCC does not parse basic 'asm''s ASSEMBLERINSTRUCTIONS, which means
34728there is no way to communicate to the compiler what is happening inside
34729them.  GCC has no visibility of symbols in the 'asm' and may discard
34730them as unreferenced.  It also does not know about side effects of the
34731assembler code, such as modifications to memory or registers.  Unlike
34732some compilers, GCC assumes that no changes to general purpose registers
34733occur.  This assumption may change in a future release.
34734
34735 To avoid complications from future changes to the semantics and the
34736compatibility issues between compilers, consider replacing basic 'asm'
34737with extended 'asm'.  See How to convert from basic asm to extended asm
34738(https://gcc.gnu.org/wiki/ConvertBasicAsmToExtended) for information
34739about how to perform this conversion.
34740
34741 The compiler copies the assembler instructions in a basic 'asm'
34742verbatim to the assembly language output file, without processing
34743dialects or any of the '%' operators that are available with extended
34744'asm'.  This results in minor differences between basic 'asm' strings
34745and extended 'asm' templates.  For example, to refer to registers you
34746might use '%eax' in basic 'asm' and '%%eax' in extended 'asm'.
34747
34748 On targets such as x86 that support multiple assembler dialects, all
34749basic 'asm' blocks use the assembler dialect specified by the '-masm'
34750command-line option (*note x86 Options::).  Basic 'asm' provides no
34751mechanism to provide different assembler strings for different dialects.
34752
34753 For basic 'asm' with non-empty assembler string GCC assumes the
34754assembler block does not change any general purpose registers, but it
34755may read or write any globally accessible variable.
34756
34757 Here is an example of basic 'asm' for i386:
34758
34759     /* Note that this code will not compile with -masm=intel */
34760     #define DebugBreak() asm("int $3")
34761
34762
34763File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Basic Asm,  Up: Using Assembly Language with C
34764
347656.45.2 Extended Asm - Assembler Instructions with C Expression Operands
34766-----------------------------------------------------------------------
34767
34768With extended 'asm' you can read and write C variables from assembler
34769and perform jumps from assembler code to C labels.  Extended 'asm'
34770syntax uses colons (':') to delimit the operand parameters after the
34771assembler template:
34772
34773     asm ASM-QUALIFIERS ( ASSEMBLERTEMPLATE
34774                      : OUTPUTOPERANDS
34775                      [ : INPUTOPERANDS
34776                      [ : CLOBBERS ] ])
34777
34778     asm ASM-QUALIFIERS ( ASSEMBLERTEMPLATE
34779                           :
34780                           : INPUTOPERANDS
34781                           : CLOBBERS
34782                           : GOTOLABELS)
34783 where in the last form, ASM-QUALIFIERS contains 'goto' (and in the
34784first form, not).
34785
34786 The 'asm' keyword is a GNU extension.  When writing code that can be
34787compiled with '-ansi' and the various '-std' options, use '__asm__'
34788instead of 'asm' (*note Alternate Keywords::).
34789
34790Qualifiers
34791..........
34792
34793'volatile'
34794     The typical use of extended 'asm' statements is to manipulate input
34795     values to produce output values.  However, your 'asm' statements
34796     may also produce side effects.  If so, you may need to use the
34797     'volatile' qualifier to disable certain optimizations.  *Note
34798     Volatile::.
34799
34800'inline'
34801     If you use the 'inline' qualifier, then for inlining purposes the
34802     size of the asm is taken as the smallest size possible (*note Size
34803     of an asm::).
34804
34805'goto'
34806     This qualifier informs the compiler that the 'asm' statement may
34807     perform a jump to one of the labels listed in the GOTOLABELS.
34808     *Note GotoLabels::.
34809
34810Parameters
34811..........
34812
34813ASSEMBLERTEMPLATE
34814     This is a literal string that is the template for the assembler
34815     code.  It is a combination of fixed text and tokens that refer to
34816     the input, output, and goto parameters.  *Note AssemblerTemplate::.
34817
34818OUTPUTOPERANDS
34819     A comma-separated list of the C variables modified by the
34820     instructions in the ASSEMBLERTEMPLATE.  An empty list is permitted.
34821     *Note OutputOperands::.
34822
34823INPUTOPERANDS
34824     A comma-separated list of C expressions read by the instructions in
34825     the ASSEMBLERTEMPLATE.  An empty list is permitted.  *Note
34826     InputOperands::.
34827
34828CLOBBERS
34829     A comma-separated list of registers or other values changed by the
34830     ASSEMBLERTEMPLATE, beyond those listed as outputs.  An empty list
34831     is permitted.  *Note Clobbers and Scratch Registers::.
34832
34833GOTOLABELS
34834     When you are using the 'goto' form of 'asm', this section contains
34835     the list of all C labels to which the code in the ASSEMBLERTEMPLATE
34836     may jump.  *Note GotoLabels::.
34837
34838     'asm' statements may not perform jumps into other 'asm' statements,
34839     only to the listed GOTOLABELS.  GCC's optimizers do not know about
34840     other jumps; therefore they cannot take account of them when
34841     deciding how to optimize.
34842
34843 The total number of input + output + goto operands is limited to 30.
34844
34845Remarks
34846.......
34847
34848The 'asm' statement allows you to include assembly instructions directly
34849within C code.  This may help you to maximize performance in
34850time-sensitive code or to access assembly instructions that are not
34851readily available to C programs.
34852
34853 Note that extended 'asm' statements must be inside a function.  Only
34854basic 'asm' may be outside functions (*note Basic Asm::).  Functions
34855declared with the 'naked' attribute also require basic 'asm' (*note
34856Function Attributes::).
34857
34858 While the uses of 'asm' are many and varied, it may help to think of an
34859'asm' statement as a series of low-level instructions that convert input
34860parameters to output parameters.  So a simple (if not particularly
34861useful) example for i386 using 'asm' might look like this:
34862
34863     int src = 1;
34864     int dst;
34865
34866     asm ("mov %1, %0\n\t"
34867         "add $1, %0"
34868         : "=r" (dst)
34869         : "r" (src));
34870
34871     printf("%d\n", dst);
34872
34873 This code copies 'src' to 'dst' and add 1 to 'dst'.
34874
348756.45.2.1 Volatile
34876.................
34877
34878GCC's optimizers sometimes discard 'asm' statements if they determine
34879there is no need for the output variables.  Also, the optimizers may
34880move code out of loops if they believe that the code will always return
34881the same result (i.e.  none of its input values change between calls).
34882Using the 'volatile' qualifier disables these optimizations.  'asm'
34883statements that have no output operands, including 'asm goto'
34884statements, are implicitly volatile.
34885
34886 This i386 code demonstrates a case that does not use (or require) the
34887'volatile' qualifier.  If it is performing assertion checking, this code
34888uses 'asm' to perform the validation.  Otherwise, 'dwRes' is
34889unreferenced by any code.  As a result, the optimizers can discard the
34890'asm' statement, which in turn removes the need for the entire 'DoCheck'
34891routine.  By omitting the 'volatile' qualifier when it isn't needed you
34892allow the optimizers to produce the most efficient code possible.
34893
34894     void DoCheck(uint32_t dwSomeValue)
34895     {
34896        uint32_t dwRes;
34897
34898        // Assumes dwSomeValue is not zero.
34899        asm ("bsfl %1,%0"
34900          : "=r" (dwRes)
34901          : "r" (dwSomeValue)
34902          : "cc");
34903
34904        assert(dwRes > 3);
34905     }
34906
34907 The next example shows a case where the optimizers can recognize that
34908the input ('dwSomeValue') never changes during the execution of the
34909function and can therefore move the 'asm' outside the loop to produce
34910more efficient code.  Again, using 'volatile' disables this type of
34911optimization.
34912
34913     void do_print(uint32_t dwSomeValue)
34914     {
34915        uint32_t dwRes;
34916
34917        for (uint32_t x=0; x < 5; x++)
34918        {
34919           // Assumes dwSomeValue is not zero.
34920           asm ("bsfl %1,%0"
34921             : "=r" (dwRes)
34922             : "r" (dwSomeValue)
34923             : "cc");
34924
34925           printf("%u: %u %u\n", x, dwSomeValue, dwRes);
34926        }
34927     }
34928
34929 The following example demonstrates a case where you need to use the
34930'volatile' qualifier.  It uses the x86 'rdtsc' instruction, which reads
34931the computer's time-stamp counter.  Without the 'volatile' qualifier,
34932the optimizers might assume that the 'asm' block will always return the
34933same value and therefore optimize away the second call.
34934
34935     uint64_t msr;
34936
34937     asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
34938             "shl $32, %%rdx\n\t"  // Shift the upper bits left.
34939             "or %%rdx, %0"        // 'Or' in the lower bits.
34940             : "=a" (msr)
34941             :
34942             : "rdx");
34943
34944     printf("msr: %llx\n", msr);
34945
34946     // Do other work...
34947
34948     // Reprint the timestamp
34949     asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
34950             "shl $32, %%rdx\n\t"  // Shift the upper bits left.
34951             "or %%rdx, %0"        // 'Or' in the lower bits.
34952             : "=a" (msr)
34953             :
34954             : "rdx");
34955
34956     printf("msr: %llx\n", msr);
34957
34958 GCC's optimizers do not treat this code like the non-volatile code in
34959the earlier examples.  They do not move it out of loops or omit it on
34960the assumption that the result from a previous call is still valid.
34961
34962 Note that the compiler can move even volatile 'asm' instructions
34963relative to other code, including across jump instructions.  For
34964example, on many targets there is a system register that controls the
34965rounding mode of floating-point operations.  Setting it with a volatile
34966'asm', as in the following PowerPC example, does not work reliably.
34967
34968     asm volatile("mtfsf 255, %0" : : "f" (fpenv));
34969     sum = x + y;
34970
34971 The compiler may move the addition back before the volatile 'asm'.  To
34972make it work as expected, add an artificial dependency to the 'asm' by
34973referencing a variable in the subsequent code, for example:
34974
34975     asm volatile ("mtfsf 255,%1" : "=X" (sum) : "f" (fpenv));
34976     sum = x + y;
34977
34978 Under certain circumstances, GCC may duplicate (or remove duplicates
34979of) your assembly code when optimizing.  This can lead to unexpected
34980duplicate symbol errors during compilation if your asm code defines
34981symbols or labels.  Using '%=' (*note AssemblerTemplate::) may help
34982resolve this problem.
34983
349846.45.2.2 Assembler Template
34985...........................
34986
34987An assembler template is a literal string containing assembler
34988instructions.  The compiler replaces tokens in the template that refer
34989to inputs, outputs, and goto labels, and then outputs the resulting
34990string to the assembler.  The string can contain any instructions
34991recognized by the assembler, including directives.  GCC does not parse
34992the assembler instructions themselves and does not know what they mean
34993or even whether they are valid assembler input.  However, it does count
34994the statements (*note Size of an asm::).
34995
34996 You may place multiple assembler instructions together in a single
34997'asm' string, separated by the characters normally used in assembly code
34998for the system.  A combination that works in most places is a newline to
34999break the line, plus a tab character to move to the instruction field
35000(written as '\n\t').  Some assemblers allow semicolons as a line
35001separator.  However, note that some assembler dialects use semicolons to
35002start a comment.
35003
35004 Do not expect a sequence of 'asm' statements to remain perfectly
35005consecutive after compilation, even when you are using the 'volatile'
35006qualifier.  If certain instructions need to remain consecutive in the
35007output, put them in a single multi-instruction asm statement.
35008
35009 Accessing data from C programs without using input/output operands
35010(such as by using global symbols directly from the assembler template)
35011may not work as expected.  Similarly, calling functions directly from an
35012assembler template requires a detailed understanding of the target
35013assembler and ABI.
35014
35015 Since GCC does not parse the assembler template, it has no visibility
35016of any symbols it references.  This may result in GCC discarding those
35017symbols as unreferenced unless they are also listed as input, output, or
35018goto operands.
35019
35020Special format strings
35021......................
35022
35023In addition to the tokens described by the input, output, and goto
35024operands, these tokens have special meanings in the assembler template:
35025
35026'%%'
35027     Outputs a single '%' into the assembler code.
35028
35029'%='
35030     Outputs a number that is unique to each instance of the 'asm'
35031     statement in the entire compilation.  This option is useful when
35032     creating local labels and referring to them multiple times in a
35033     single template that generates multiple assembler instructions.
35034
35035'%{'
35036'%|'
35037'%}'
35038     Outputs '{', '|', and '}' characters (respectively) into the
35039     assembler code.  When unescaped, these characters have special
35040     meaning to indicate multiple assembler dialects, as described
35041     below.
35042
35043Multiple assembler dialects in 'asm' templates
35044..............................................
35045
35046On targets such as x86, GCC supports multiple assembler dialects.  The
35047'-masm' option controls which dialect GCC uses as its default for inline
35048assembler.  The target-specific documentation for the '-masm' option
35049contains the list of supported dialects, as well as the default dialect
35050if the option is not specified.  This information may be important to
35051understand, since assembler code that works correctly when compiled
35052using one dialect will likely fail if compiled using another.  *Note x86
35053Options::.
35054
35055 If your code needs to support multiple assembler dialects (for example,
35056if you are writing public headers that need to support a variety of
35057compilation options), use constructs of this form:
35058
35059     { dialect0 | dialect1 | dialect2... }
35060
35061 This construct outputs 'dialect0' when using dialect #0 to compile the
35062code, 'dialect1' for dialect #1, etc.  If there are fewer alternatives
35063within the braces than the number of dialects the compiler supports, the
35064construct outputs nothing.
35065
35066 For example, if an x86 compiler supports two dialects ('att', 'intel'),
35067an assembler template such as this:
35068
35069     "bt{l %[Offset],%[Base] | %[Base],%[Offset]}; jc %l2"
35070
35071is equivalent to one of
35072
35073     "btl %[Offset],%[Base] ; jc %l2"   /* att dialect */
35074     "bt %[Base],%[Offset]; jc %l2"     /* intel dialect */
35075
35076 Using that same compiler, this code:
35077
35078     "xchg{l}\t{%%}ebx, %1"
35079
35080corresponds to either
35081
35082     "xchgl\t%%ebx, %1"                 /* att dialect */
35083     "xchg\tebx, %1"                    /* intel dialect */
35084
35085 There is no support for nesting dialect alternatives.
35086
350876.45.2.3 Output Operands
35088........................
35089
35090An 'asm' statement has zero or more output operands indicating the names
35091of C variables modified by the assembler code.
35092
35093 In this i386 example, 'old' (referred to in the template string as
35094'%0') and '*Base' (as '%1') are outputs and 'Offset' ('%2') is an input:
35095
35096     bool old;
35097
35098     __asm__ ("btsl %2,%1\n\t" // Turn on zero-based bit #Offset in Base.
35099              "sbb %0,%0"      // Use the CF to calculate old.
35100        : "=r" (old), "+rm" (*Base)
35101        : "Ir" (Offset)
35102        : "cc");
35103
35104     return old;
35105
35106 Operands are separated by commas.  Each operand has this format:
35107
35108     [ [ASMSYMBOLICNAME] ] CONSTRAINT (CVARIABLENAME)
35109
35110ASMSYMBOLICNAME
35111     Specifies a symbolic name for the operand.  Reference the name in
35112     the assembler template by enclosing it in square brackets (i.e.
35113     '%[Value]').  The scope of the name is the 'asm' statement that
35114     contains the definition.  Any valid C variable name is acceptable,
35115     including names already defined in the surrounding code.  No two
35116     operands within the same 'asm' statement can use the same symbolic
35117     name.
35118
35119     When not using an ASMSYMBOLICNAME, use the (zero-based) position of
35120     the operand in the list of operands in the assembler template.  For
35121     example if there are three output operands, use '%0' in the
35122     template to refer to the first, '%1' for the second, and '%2' for
35123     the third.
35124
35125CONSTRAINT
35126     A string constant specifying constraints on the placement of the
35127     operand; *Note Constraints::, for details.
35128
35129     Output constraints must begin with either '=' (a variable
35130     overwriting an existing value) or '+' (when reading and writing).
35131     When using '=', do not assume the location contains the existing
35132     value on entry to the 'asm', except when the operand is tied to an
35133     input; *note Input Operands: InputOperands.
35134
35135     After the prefix, there must be one or more additional constraints
35136     (*note Constraints::) that describe where the value resides.
35137     Common constraints include 'r' for register and 'm' for memory.
35138     When you list more than one possible location (for example,
35139     '"=rm"'), the compiler chooses the most efficient one based on the
35140     current context.  If you list as many alternates as the 'asm'
35141     statement allows, you permit the optimizers to produce the best
35142     possible code.  If you must use a specific register, but your
35143     Machine Constraints do not provide sufficient control to select the
35144     specific register you want, local register variables may provide a
35145     solution (*note Local Register Variables::).
35146
35147CVARIABLENAME
35148     Specifies a C lvalue expression to hold the output, typically a
35149     variable name.  The enclosing parentheses are a required part of
35150     the syntax.
35151
35152 When the compiler selects the registers to use to represent the output
35153operands, it does not use any of the clobbered registers (*note Clobbers
35154and Scratch Registers::).
35155
35156 Output operand expressions must be lvalues.  The compiler cannot check
35157whether the operands have data types that are reasonable for the
35158instruction being executed.  For output expressions that are not
35159directly addressable (for example a bit-field), the constraint must
35160allow a register.  In that case, GCC uses the register as the output of
35161the 'asm', and then stores that register into the output.
35162
35163 Operands using the '+' constraint modifier count as two operands (that
35164is, both as input and output) towards the total maximum of 30 operands
35165per 'asm' statement.
35166
35167 Use the '&' constraint modifier (*note Modifiers::) on all output
35168operands that must not overlap an input.  Otherwise, GCC may allocate
35169the output operand in the same register as an unrelated input operand,
35170on the assumption that the assembler code consumes its inputs before
35171producing outputs.  This assumption may be false if the assembler code
35172actually consists of more than one instruction.
35173
35174 The same problem can occur if one output parameter (A) allows a
35175register constraint and another output parameter (B) allows a memory
35176constraint.  The code generated by GCC to access the memory address in B
35177can contain registers which _might_ be shared by A, and GCC considers
35178those registers to be inputs to the asm.  As above, GCC assumes that
35179such input registers are consumed before any outputs are written.  This
35180assumption may result in incorrect behavior if the asm writes to A
35181before using B.  Combining the '&' modifier with the register constraint
35182on A ensures that modifying A does not affect the address referenced by
35183B.  Otherwise, the location of B is undefined if A is modified before
35184using B.
35185
35186 'asm' supports operand modifiers on operands (for example '%k2' instead
35187of simply '%2').  Typically these qualifiers are hardware dependent.
35188The list of supported modifiers for x86 is found at *note x86 Operand
35189modifiers: x86Operandmodifiers.
35190
35191 If the C code that follows the 'asm' makes no use of any of the output
35192operands, use 'volatile' for the 'asm' statement to prevent the
35193optimizers from discarding the 'asm' statement as unneeded (see *note
35194Volatile::).
35195
35196 This code makes no use of the optional ASMSYMBOLICNAME.  Therefore it
35197references the first output operand as '%0' (were there a second, it
35198would be '%1', etc).  The number of the first input operand is one
35199greater than that of the last output operand.  In this i386 example,
35200that makes 'Mask' referenced as '%1':
35201
35202     uint32_t Mask = 1234;
35203     uint32_t Index;
35204
35205       asm ("bsfl %1, %0"
35206          : "=r" (Index)
35207          : "r" (Mask)
35208          : "cc");
35209
35210 That code overwrites the variable 'Index' ('='), placing the value in a
35211register ('r').  Using the generic 'r' constraint instead of a
35212constraint for a specific register allows the compiler to pick the
35213register to use, which can result in more efficient code.  This may not
35214be possible if an assembler instruction requires a specific register.
35215
35216 The following i386 example uses the ASMSYMBOLICNAME syntax.  It
35217produces the same result as the code above, but some may consider it
35218more readable or more maintainable since reordering index numbers is not
35219necessary when adding or removing operands.  The names 'aIndex' and
35220'aMask' are only used in this example to emphasize which names get used
35221where.  It is acceptable to reuse the names 'Index' and 'Mask'.
35222
35223     uint32_t Mask = 1234;
35224     uint32_t Index;
35225
35226       asm ("bsfl %[aMask], %[aIndex]"
35227          : [aIndex] "=r" (Index)
35228          : [aMask] "r" (Mask)
35229          : "cc");
35230
35231 Here are some more examples of output operands.
35232
35233     uint32_t c = 1;
35234     uint32_t d;
35235     uint32_t *e = &c;
35236
35237     asm ("mov %[e], %[d]"
35238        : [d] "=rm" (d)
35239        : [e] "rm" (*e));
35240
35241 Here, 'd' may either be in a register or in memory.  Since the compiler
35242might already have the current value of the 'uint32_t' location pointed
35243to by 'e' in a register, you can enable it to choose the best location
35244for 'd' by specifying both constraints.
35245
352466.45.2.4 Flag Output Operands
35247.............................
35248
35249Some targets have a special register that holds the "flags" for the
35250result of an operation or comparison.  Normally, the contents of that
35251register are either unmodifed by the asm, or the asm is considered to
35252clobber the contents.
35253
35254 On some targets, a special form of output operand exists by which
35255conditions in the flags register may be outputs of the asm.  The set of
35256conditions supported are target specific, but the general rule is that
35257the output variable must be a scalar integer, and the value is boolean.
35258When supported, the target defines the preprocessor symbol
35259'__GCC_ASM_FLAG_OUTPUTS__'.
35260
35261 Because of the special nature of the flag output operands, the
35262constraint may not include alternatives.
35263
35264 Most often, the target has only one flags register, and thus is an
35265implied operand of many instructions.  In this case, the operand should
35266not be referenced within the assembler template via '%0' etc, as there's
35267no corresponding text in the assembly language.
35268
35269x86 family
35270     The flag output constraints for the x86 family are of the form
35271     '=@ccCOND' where COND is one of the standard conditions defined in
35272     the ISA manual for 'jCC' or 'setCC'.
35273
35274     'a'
35275          "above" or unsigned greater than
35276     'ae'
35277          "above or equal" or unsigned greater than or equal
35278     'b'
35279          "below" or unsigned less than
35280     'be'
35281          "below or equal" or unsigned less than or equal
35282     'c'
35283          carry flag set
35284     'e'
35285     'z'
35286          "equal" or zero flag set
35287     'g'
35288          signed greater than
35289     'ge'
35290          signed greater than or equal
35291     'l'
35292          signed less than
35293     'le'
35294          signed less than or equal
35295     'o'
35296          overflow flag set
35297     'p'
35298          parity flag set
35299     's'
35300          sign flag set
35301     'na'
35302     'nae'
35303     'nb'
35304     'nbe'
35305     'nc'
35306     'ne'
35307     'ng'
35308     'nge'
35309     'nl'
35310     'nle'
35311     'no'
35312     'np'
35313     'ns'
35314     'nz'
35315          "not" FLAG, or inverted versions of those above
35316
353176.45.2.5 Input Operands
35318.......................
35319
35320Input operands make values from C variables and expressions available to
35321the assembly code.
35322
35323 Operands are separated by commas.  Each operand has this format:
35324
35325     [ [ASMSYMBOLICNAME] ] CONSTRAINT (CEXPRESSION)
35326
35327ASMSYMBOLICNAME
35328     Specifies a symbolic name for the operand.  Reference the name in
35329     the assembler template by enclosing it in square brackets (i.e.
35330     '%[Value]').  The scope of the name is the 'asm' statement that
35331     contains the definition.  Any valid C variable name is acceptable,
35332     including names already defined in the surrounding code.  No two
35333     operands within the same 'asm' statement can use the same symbolic
35334     name.
35335
35336     When not using an ASMSYMBOLICNAME, use the (zero-based) position of
35337     the operand in the list of operands in the assembler template.  For
35338     example if there are two output operands and three inputs, use '%2'
35339     in the template to refer to the first input operand, '%3' for the
35340     second, and '%4' for the third.
35341
35342CONSTRAINT
35343     A string constant specifying constraints on the placement of the
35344     operand; *Note Constraints::, for details.
35345
35346     Input constraint strings may not begin with either '=' or '+'.
35347     When you list more than one possible location (for example,
35348     '"irm"'), the compiler chooses the most efficient one based on the
35349     current context.  If you must use a specific register, but your
35350     Machine Constraints do not provide sufficient control to select the
35351     specific register you want, local register variables may provide a
35352     solution (*note Local Register Variables::).
35353
35354     Input constraints can also be digits (for example, '"0"').  This
35355     indicates that the specified input must be in the same place as the
35356     output constraint at the (zero-based) index in the output
35357     constraint list.  When using ASMSYMBOLICNAME syntax for the output
35358     operands, you may use these names (enclosed in brackets '[]')
35359     instead of digits.
35360
35361CEXPRESSION
35362     This is the C variable or expression being passed to the 'asm'
35363     statement as input.  The enclosing parentheses are a required part
35364     of the syntax.
35365
35366 When the compiler selects the registers to use to represent the input
35367operands, it does not use any of the clobbered registers (*note Clobbers
35368and Scratch Registers::).
35369
35370 If there are no output operands but there are input operands, place two
35371consecutive colons where the output operands would go:
35372
35373     __asm__ ("some instructions"
35374        : /* No outputs. */
35375        : "r" (Offset / 8));
35376
35377 *Warning:* Do _not_ modify the contents of input-only operands (except
35378for inputs tied to outputs).  The compiler assumes that on exit from the
35379'asm' statement these operands contain the same values as they had
35380before executing the statement.  It is _not_ possible to use clobbers to
35381inform the compiler that the values in these inputs are changing.  One
35382common work-around is to tie the changing input variable to an output
35383variable that never gets used.  Note, however, that if the code that
35384follows the 'asm' statement makes no use of any of the output operands,
35385the GCC optimizers may discard the 'asm' statement as unneeded (see
35386*note Volatile::).
35387
35388 'asm' supports operand modifiers on operands (for example '%k2' instead
35389of simply '%2').  Typically these qualifiers are hardware dependent.
35390The list of supported modifiers for x86 is found at *note x86 Operand
35391modifiers: x86Operandmodifiers.
35392
35393 In this example using the fictitious 'combine' instruction, the
35394constraint '"0"' for input operand 1 says that it must occupy the same
35395location as output operand 0.  Only input operands may use numbers in
35396constraints, and they must each refer to an output operand.  Only a
35397number (or the symbolic assembler name) in the constraint can guarantee
35398that one operand is in the same place as another.  The mere fact that
35399'foo' is the value of both operands is not enough to guarantee that they
35400are in the same place in the generated assembler code.
35401
35402     asm ("combine %2, %0"
35403        : "=r" (foo)
35404        : "0" (foo), "g" (bar));
35405
35406 Here is an example using symbolic names.
35407
35408     asm ("cmoveq %1, %2, %[result]"
35409        : [result] "=r"(result)
35410        : "r" (test), "r" (new), "[result]" (old));
35411
354126.45.2.6 Clobbers and Scratch Registers
35413.......................................
35414
35415While the compiler is aware of changes to entries listed in the output
35416operands, the inline 'asm' code may modify more than just the outputs.
35417For example, calculations may require additional registers, or the
35418processor may overwrite a register as a side effect of a particular
35419assembler instruction.  In order to inform the compiler of these
35420changes, list them in the clobber list.  Clobber list items are either
35421register names or the special clobbers (listed below).  Each clobber
35422list item is a string constant enclosed in double quotes and separated
35423by commas.
35424
35425 Clobber descriptions may not in any way overlap with an input or output
35426operand.  For example, you may not have an operand describing a register
35427class with one member when listing that register in the clobber list.
35428Variables declared to live in specific registers (*note Explicit
35429Register Variables::) and used as 'asm' input or output operands must
35430have no part mentioned in the clobber description.  In particular, there
35431is no way to specify that input operands get modified without also
35432specifying them as output operands.
35433
35434 When the compiler selects which registers to use to represent input and
35435output operands, it does not use any of the clobbered registers.  As a
35436result, clobbered registers are available for any use in the assembler
35437code.
35438
35439 Here is a realistic example for the VAX showing the use of clobbered
35440registers:
35441
35442     asm volatile ("movc3 %0, %1, %2"
35443                        : /* No outputs. */
35444                        : "g" (from), "g" (to), "g" (count)
35445                        : "r0", "r1", "r2", "r3", "r4", "r5", "memory");
35446
35447 Also, there are two special clobber arguments:
35448
35449'"cc"'
35450     The '"cc"' clobber indicates that the assembler code modifies the
35451     flags register.  On some machines, GCC represents the condition
35452     codes as a specific hardware register; '"cc"' serves to name this
35453     register.  On other machines, condition code handling is different,
35454     and specifying '"cc"' has no effect.  But it is valid no matter
35455     what the target.
35456
35457'"memory"'
35458     The '"memory"' clobber tells the compiler that the assembly code
35459     performs memory reads or writes to items other than those listed in
35460     the input and output operands (for example, accessing the memory
35461     pointed to by one of the input parameters).  To ensure memory
35462     contains correct values, GCC may need to flush specific register
35463     values to memory before executing the 'asm'.  Further, the compiler
35464     does not assume that any values read from memory before an 'asm'
35465     remain unchanged after that 'asm'; it reloads them as needed.
35466     Using the '"memory"' clobber effectively forms a read/write memory
35467     barrier for the compiler.
35468
35469     Note that this clobber does not prevent the _processor_ from doing
35470     speculative reads past the 'asm' statement.  To prevent that, you
35471     need processor-specific fence instructions.
35472
35473 Flushing registers to memory has performance implications and may be an
35474issue for time-sensitive code.  You can provide better information to
35475GCC to avoid this, as shown in the following examples.  At a minimum,
35476aliasing rules allow GCC to know what memory _doesn't_ need to be
35477flushed.
35478
35479 Here is a fictitious sum of squares instruction, that takes two
35480pointers to floating point values in memory and produces a floating
35481point register output.  Notice that 'x', and 'y' both appear twice in
35482the 'asm' parameters, once to specify memory accessed, and once to
35483specify a base register used by the 'asm'.  You won't normally be
35484wasting a register by doing this as GCC can use the same register for
35485both purposes.  However, it would be foolish to use both '%1' and '%3'
35486for 'x' in this 'asm' and expect them to be the same.  In fact, '%3' may
35487well not be a register.  It might be a symbolic memory reference to the
35488object pointed to by 'x'.
35489
35490     asm ("sumsq %0, %1, %2"
35491          : "+f" (result)
35492          : "r" (x), "r" (y), "m" (*x), "m" (*y));
35493
35494 Here is a fictitious '*z++ = *x++ * *y++' instruction.  Notice that the
35495'x', 'y' and 'z' pointer registers must be specified as input/output
35496because the 'asm' modifies them.
35497
35498     asm ("vecmul %0, %1, %2"
35499          : "+r" (z), "+r" (x), "+r" (y), "=m" (*z)
35500          : "m" (*x), "m" (*y));
35501
35502 An x86 example where the string memory argument is of unknown length.
35503
35504     asm("repne scasb"
35505         : "=c" (count), "+D" (p)
35506         : "m" (*(const char (*)[]) p), "0" (-1), "a" (0));
35507
35508 If you know the above will only be reading a ten byte array then you
35509could instead use a memory input like: '"m" (*(const char (*)[10]) p)'.
35510
35511 Here is an example of a PowerPC vector scale implemented in assembly,
35512complete with vector and condition code clobbers, and some initialized
35513offset registers that are unchanged by the 'asm'.
35514
35515     void
35516     dscal (size_t n, double *x, double alpha)
35517     {
35518       asm ("/* lots of asm here */"
35519            : "+m" (*(double (*)[n]) x), "+&r" (n), "+b" (x)
35520            : "d" (alpha), "b" (32), "b" (48), "b" (64),
35521              "b" (80), "b" (96), "b" (112)
35522            : "cr0",
35523              "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
35524              "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47");
35525     }
35526
35527 Rather than allocating fixed registers via clobbers to provide scratch
35528registers for an 'asm' statement, an alternative is to define a variable
35529and make it an early-clobber output as with 'a2' and 'a3' in the example
35530below.  This gives the compiler register allocator more freedom.  You
35531can also define a variable and make it an output tied to an input as
35532with 'a0' and 'a1', tied respectively to 'ap' and 'lda'.  Of course,
35533with tied outputs your 'asm' can't use the input value after modifying
35534the output register since they are one and the same register.  What's
35535more, if you omit the early-clobber on the output, it is possible that
35536GCC might allocate the same register to another of the inputs if GCC
35537could prove they had the same value on entry to the 'asm'.  This is why
35538'a1' has an early-clobber.  Its tied input, 'lda' might conceivably be
35539known to have the value 16 and without an early-clobber share the same
35540register as '%11'.  On the other hand, 'ap' can't be the same as any of
35541the other inputs, so an early-clobber on 'a0' is not needed.  It is also
35542not desirable in this case.  An early-clobber on 'a0' would cause GCC to
35543allocate a separate register for the '"m" (*(const double (*)[]) ap)'
35544input.  Note that tying an input to an output is the way to set up an
35545initialized temporary register modified by an 'asm' statement.  An input
35546not tied to an output is assumed by GCC to be unchanged, for example
35547'"b" (16)' below sets up '%11' to 16, and GCC might use that register in
35548following code if the value 16 happened to be needed.  You can even use
35549a normal 'asm' output for a scratch if all inputs that might share the
35550same register are consumed before the scratch is used.  The VSX
35551registers clobbered by the 'asm' statement could have used this
35552technique except for GCC's limit on the number of 'asm' parameters.
35553
35554     static void
35555     dgemv_kernel_4x4 (long n, const double *ap, long lda,
35556                       const double *x, double *y, double alpha)
35557     {
35558       double *a0;
35559       double *a1;
35560       double *a2;
35561       double *a3;
35562
35563       __asm__
35564         (
35565          /* lots of asm here */
35566          "#n=%1 ap=%8=%12 lda=%13 x=%7=%10 y=%0=%2 alpha=%9 o16=%11\n"
35567          "#a0=%3 a1=%4 a2=%5 a3=%6"
35568          :
35569            "+m" (*(double (*)[n]) y),
35570            "+&r" (n),	// 1
35571            "+b" (y),	// 2
35572            "=b" (a0),	// 3
35573            "=&b" (a1),	// 4
35574            "=&b" (a2),	// 5
35575            "=&b" (a3)	// 6
35576          :
35577            "m" (*(const double (*)[n]) x),
35578            "m" (*(const double (*)[]) ap),
35579            "d" (alpha),	// 9
35580            "r" (x),		// 10
35581            "b" (16),	// 11
35582            "3" (ap),	// 12
35583            "4" (lda)	// 13
35584          :
35585            "cr0",
35586            "vs32","vs33","vs34","vs35","vs36","vs37",
35587            "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47"
35588          );
35589     }
35590
355916.45.2.7 Goto Labels
35592....................
35593
35594'asm goto' allows assembly code to jump to one or more C labels.  The
35595GOTOLABELS section in an 'asm goto' statement contains a comma-separated
35596list of all C labels to which the assembler code may jump.  GCC assumes
35597that 'asm' execution falls through to the next statement (if this is not
35598the case, consider using the '__builtin_unreachable' intrinsic after the
35599'asm' statement).  Optimization of 'asm goto' may be improved by using
35600the 'hot' and 'cold' label attributes (*note Label Attributes::).
35601
35602 An 'asm goto' statement cannot have outputs.  This is due to an
35603internal restriction of the compiler: control transfer instructions
35604cannot have outputs.  If the assembler code does modify anything, use
35605the '"memory"' clobber to force the optimizers to flush all register
35606values to memory and reload them if necessary after the 'asm' statement.
35607
35608 Also note that an 'asm goto' statement is always implicitly considered
35609volatile.
35610
35611 To reference a label in the assembler template, prefix it with '%l'
35612(lowercase 'L') followed by its (zero-based) position in GOTOLABELS plus
35613the number of input operands.  For example, if the 'asm' has three
35614inputs and references two labels, refer to the first label as '%l3' and
35615the second as '%l4').
35616
35617 Alternately, you can reference labels using the actual C label name
35618enclosed in brackets.  For example, to reference a label named 'carry',
35619you can use '%l[carry]'.  The label must still be listed in the
35620GOTOLABELS section when using this approach.
35621
35622 Here is an example of 'asm goto' for i386:
35623
35624     asm goto (
35625         "btl %1, %0\n\t"
35626         "jc %l2"
35627         : /* No outputs. */
35628         : "r" (p1), "r" (p2)
35629         : "cc"
35630         : carry);
35631
35632     return 0;
35633
35634     carry:
35635     return 1;
35636
35637 The following example shows an 'asm goto' that uses a memory clobber.
35638
35639     int frob(int x)
35640     {
35641       int y;
35642       asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
35643                 : /* No outputs. */
35644                 : "r"(x), "r"(&y)
35645                 : "r5", "memory"
35646                 : error);
35647       return y;
35648     error:
35649       return -1;
35650     }
35651
356526.45.2.8 x86 Operand Modifiers
35653..............................
35654
35655References to input, output, and goto operands in the assembler template
35656of extended 'asm' statements can use modifiers to affect the way the
35657operands are formatted in the code output to the assembler.  For
35658example, the following code uses the 'h' and 'b' modifiers for x86:
35659
35660     uint16_t  num;
35661     asm volatile ("xchg %h0, %b0" : "+a" (num) );
35662
35663These modifiers generate this assembler code:
35664
35665     xchg %ah, %al
35666
35667 The rest of this discussion uses the following code for illustrative
35668purposes.
35669
35670     int main()
35671     {
35672        int iInt = 1;
35673
35674     top:
35675
35676        asm volatile goto ("some assembler instructions here"
35677        : /* No outputs. */
35678        : "q" (iInt), "X" (sizeof(unsigned char) + 1)
35679        : /* No clobbers. */
35680        : top);
35681     }
35682
35683 With no modifiers, this is what the output from the operands would be
35684for the 'att' and 'intel' dialects of assembler:
35685
35686Operand   'att'  'intel'
35687-----------------------------------
35688'%0'      '%eax' 'eax'
35689'%1'      '$2'   '2'
35690'%2'      '$.L2' 'OFFSET
35691                 FLAT:.L2'
35692
35693 The table below shows the list of supported modifiers and their
35694effects.
35695
35696Modifier   Description                                  Operand   'att'   'intel'
35697------------------------------------------------------------------------------------
35698'z'        Print the opcode suffix for the size of      '%z0'     'l'
35699           the current integer operand (one of
35700           'b'/'w'/'l'/'q').
35701'b'        Print the QImode name of the register.       '%b0'     '%al'   'al'
35702'h'        Print the QImode name for a "high"           '%h0'     '%ah'   'ah'
35703           register.
35704'w'        Print the HImode name of the register.       '%w0'     '%ax'   'ax'
35705'k'        Print the SImode name of the register.       '%k0'     '%eax'  'eax'
35706'q'        Print the DImode name of the register.       '%q0'     '%rax'  'rax'
35707'l'        Print the label name with no punctuation.    '%l2'     '.L2'   '.L2'
35708'c'        Require a constant operand and print the     '%c1'     '2'     '2'
35709           constant expression with no punctuation.
35710
35711 'V' is a special modifier which prints the name of the full integer
35712register without '%'.
35713
357146.45.2.9 x86 Floating-Point 'asm' Operands
35715..........................................
35716
35717On x86 targets, there are several rules on the usage of stack-like
35718registers in the operands of an 'asm'.  These rules apply only to the
35719operands that are stack-like registers:
35720
35721  1. Given a set of input registers that die in an 'asm', it is
35722     necessary to know which are implicitly popped by the 'asm', and
35723     which must be explicitly popped by GCC.
35724
35725     An input register that is implicitly popped by the 'asm' must be
35726     explicitly clobbered, unless it is constrained to match an output
35727     operand.
35728
35729  2. For any input register that is implicitly popped by an 'asm', it is
35730     necessary to know how to adjust the stack to compensate for the
35731     pop.  If any non-popped input is closer to the top of the reg-stack
35732     than the implicitly popped register, it would not be possible to
35733     know what the stack looked like--it's not clear how the rest of the
35734     stack "slides up".
35735
35736     All implicitly popped input registers must be closer to the top of
35737     the reg-stack than any input that is not implicitly popped.
35738
35739     It is possible that if an input dies in an 'asm', the compiler
35740     might use the input register for an output reload.  Consider this
35741     example:
35742
35743          asm ("foo" : "=t" (a) : "f" (b));
35744
35745     This code says that input 'b' is not popped by the 'asm', and that
35746     the 'asm' pushes a result onto the reg-stack, i.e., the stack is
35747     one deeper after the 'asm' than it was before.  But, it is possible
35748     that reload may think that it can use the same register for both
35749     the input and the output.
35750
35751     To prevent this from happening, if any input operand uses the 'f'
35752     constraint, all output register constraints must use the '&'
35753     early-clobber modifier.
35754
35755     The example above is correctly written as:
35756
35757          asm ("foo" : "=&t" (a) : "f" (b));
35758
35759  3. Some operands need to be in particular places on the stack.  All
35760     output operands fall in this category--GCC has no other way to know
35761     which registers the outputs appear in unless you indicate this in
35762     the constraints.
35763
35764     Output operands must specifically indicate which register an output
35765     appears in after an 'asm'.  '=f' is not allowed: the operand
35766     constraints must select a class with a single register.
35767
35768  4. Output operands may not be "inserted" between existing stack
35769     registers.  Since no 387 opcode uses a read/write operand, all
35770     output operands are dead before the 'asm', and are pushed by the
35771     'asm'.  It makes no sense to push anywhere but the top of the
35772     reg-stack.
35773
35774     Output operands must start at the top of the reg-stack: output
35775     operands may not "skip" a register.
35776
35777  5. Some 'asm' statements may need extra stack space for internal
35778     calculations.  This can be guaranteed by clobbering stack registers
35779     unrelated to the inputs and outputs.
35780
35781 This 'asm' takes one input, which is internally popped, and produces
35782two outputs.
35783
35784     asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
35785
35786This 'asm' takes two inputs, which are popped by the 'fyl2xp1' opcode,
35787and replaces them with one output.  The 'st(1)' clobber is necessary for
35788the compiler to know that 'fyl2xp1' pops both inputs.
35789
35790     asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
35791
35792
35793File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: Using Assembly Language with C
35794
357956.45.3 Constraints for 'asm' Operands
35796-------------------------------------
35797
35798Here are specific details on what constraint letters you can use with
35799'asm' operands.  Constraints can say whether an operand may be in a
35800register, and which kinds of register; whether the operand can be a
35801memory reference, and which kinds of address; whether the operand may be
35802an immediate constant, and which possible values it may have.
35803Constraints can also require two operands to match.  Side-effects aren't
35804allowed in operands of inline 'asm', unless '<' or '>' constraints are
35805used, because there is no guarantee that the side effects will happen
35806exactly once in an instruction that can update the addressing register.
35807
35808* Menu:
35809
35810* Simple Constraints::  Basic use of constraints.
35811* Multi-Alternative::   When an insn has two alternative constraint-patterns.
35812* Modifiers::           More precise control over effects of constraints.
35813* Machine Constraints:: Special constraints for some particular machines.
35814
35815
35816File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
35817
358186.45.3.1 Simple Constraints
35819...........................
35820
35821The simplest kind of constraint is a string full of letters, each of
35822which describes one kind of operand that is permitted.  Here are the
35823letters that are allowed:
35824
35825whitespace
35826     Whitespace characters are ignored and can be inserted at any
35827     position except the first.  This enables each alternative for
35828     different operands to be visually aligned in the machine
35829     description even if they have different number of constraints and
35830     modifiers.
35831
35832'm'
35833     A memory operand is allowed, with any kind of address that the
35834     machine supports in general.  Note that the letter used for the
35835     general memory constraint can be re-defined by a back end using the
35836     'TARGET_MEM_CONSTRAINT' macro.
35837
35838'o'
35839     A memory operand is allowed, but only if the address is
35840     "offsettable".  This means that adding a small integer (actually,
35841     the width in bytes of the operand, as determined by its machine
35842     mode) may be added to the address and the result is also a valid
35843     memory address.
35844
35845     For example, an address which is constant is offsettable; so is an
35846     address that is the sum of a register and a constant (as long as a
35847     slightly larger constant is also within the range of
35848     address-offsets supported by the machine); but an autoincrement or
35849     autodecrement address is not offsettable.  More complicated
35850     indirect/indexed addresses may or may not be offsettable depending
35851     on the other addressing modes that the machine supports.
35852
35853     Note that in an output operand which can be matched by another
35854     operand, the constraint letter 'o' is valid only when accompanied
35855     by both '<' (if the target machine has predecrement addressing) and
35856     '>' (if the target machine has preincrement addressing).
35857
35858'V'
35859     A memory operand that is not offsettable.  In other words, anything
35860     that would fit the 'm' constraint but not the 'o' constraint.
35861
35862'<'
35863     A memory operand with autodecrement addressing (either predecrement
35864     or postdecrement) is allowed.  In inline 'asm' this constraint is
35865     only allowed if the operand is used exactly once in an instruction
35866     that can handle the side effects.  Not using an operand with '<' in
35867     constraint string in the inline 'asm' pattern at all or using it in
35868     multiple instructions isn't valid, because the side effects
35869     wouldn't be performed or would be performed more than once.
35870     Furthermore, on some targets the operand with '<' in constraint
35871     string must be accompanied by special instruction suffixes like
35872     '%U0' instruction suffix on PowerPC or '%P0' on IA-64.
35873
35874'>'
35875     A memory operand with autoincrement addressing (either preincrement
35876     or postincrement) is allowed.  In inline 'asm' the same
35877     restrictions as for '<' apply.
35878
35879'r'
35880     A register operand is allowed provided that it is in a general
35881     register.
35882
35883'i'
35884     An immediate integer operand (one with constant value) is allowed.
35885     This includes symbolic constants whose values will be known only at
35886     assembly time or later.
35887
35888'n'
35889     An immediate integer operand with a known numeric value is allowed.
35890     Many systems cannot support assembly-time constants for operands
35891     less than a word wide.  Constraints for these operands should use
35892     'n' rather than 'i'.
35893
35894'I', 'J', 'K', ... 'P'
35895     Other letters in the range 'I' through 'P' may be defined in a
35896     machine-dependent fashion to permit immediate integer operands with
35897     explicit integer values in specified ranges.  For example, on the
35898     68000, 'I' is defined to stand for the range of values 1 to 8.
35899     This is the range permitted as a shift count in the shift
35900     instructions.
35901
35902'E'
35903     An immediate floating operand (expression code 'const_double') is
35904     allowed, but only if the target floating point format is the same
35905     as that of the host machine (on which the compiler is running).
35906
35907'F'
35908     An immediate floating operand (expression code 'const_double' or
35909     'const_vector') is allowed.
35910
35911'G', 'H'
35912     'G' and 'H' may be defined in a machine-dependent fashion to permit
35913     immediate floating operands in particular ranges of values.
35914
35915's'
35916     An immediate integer operand whose value is not an explicit integer
35917     is allowed.
35918
35919     This might appear strange; if an insn allows a constant operand
35920     with a value not known at compile time, it certainly must allow any
35921     known value.  So why use 's' instead of 'i'?  Sometimes it allows
35922     better code to be generated.
35923
35924     For example, on the 68000 in a fullword instruction it is possible
35925     to use an immediate operand; but if the immediate value is between
35926     -128 and 127, better code results from loading the value into a
35927     register and using the register.  This is because the load into the
35928     register can be done with a 'moveq' instruction.  We arrange for
35929     this to happen by defining the letter 'K' to mean "any integer
35930     outside the range -128 to 127", and then specifying 'Ks' in the
35931     operand constraints.
35932
35933'g'
35934     Any register, memory or immediate integer operand is allowed,
35935     except for registers that are not general registers.
35936
35937'X'
35938     Any operand whatsoever is allowed.
35939
35940'0', '1', '2', ... '9'
35941     An operand that matches the specified operand number is allowed.
35942     If a digit is used together with letters within the same
35943     alternative, the digit should come last.
35944
35945     This number is allowed to be more than a single digit.  If multiple
35946     digits are encountered consecutively, they are interpreted as a
35947     single decimal integer.  There is scant chance for ambiguity, since
35948     to-date it has never been desirable that '10' be interpreted as
35949     matching either operand 1 _or_ operand 0.  Should this be desired,
35950     one can use multiple alternatives instead.
35951
35952     This is called a "matching constraint" and what it really means is
35953     that the assembler has only a single operand that fills two roles
35954     which 'asm' distinguishes.  For example, an add instruction uses
35955     two input operands and an output operand, but on most CISC machines
35956     an add instruction really has only two operands, one of them an
35957     input-output operand:
35958
35959          addl #35,r12
35960
35961     Matching constraints are used in these circumstances.  More
35962     precisely, the two operands that match must include one input-only
35963     operand and one output-only operand.  Moreover, the digit must be a
35964     smaller number than the number of the operand that uses it in the
35965     constraint.
35966
35967'p'
35968     An operand that is a valid memory address is allowed.  This is for
35969     "load address" and "push address" instructions.
35970
35971     'p' in the constraint must be accompanied by 'address_operand' as
35972     the predicate in the 'match_operand'.  This predicate interprets
35973     the mode specified in the 'match_operand' as the mode of the memory
35974     reference for which the address would be valid.
35975
35976OTHER-LETTERS
35977     Other letters can be defined in machine-dependent fashion to stand
35978     for particular classes of registers or other arbitrary operand
35979     types.  'd', 'a' and 'f' are defined on the 68000/68020 to stand
35980     for data, address and floating point registers.
35981
35982
35983File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
35984
359856.45.3.2 Multiple Alternative Constraints
35986.........................................
35987
35988Sometimes a single instruction has multiple alternative sets of possible
35989operands.  For example, on the 68000, a logical-or instruction can
35990combine register or an immediate value into memory, or it can combine
35991any kind of operand into a register; but it cannot combine one memory
35992location into another.
35993
35994 These constraints are represented as multiple alternatives.  An
35995alternative can be described by a series of letters for each operand.
35996The overall constraint for an operand is made from the letters for this
35997operand from the first alternative, a comma, the letters for this
35998operand from the second alternative, a comma, and so on until the last
35999alternative.  All operands for a single instruction must have the same
36000number of alternatives.
36001
36002 So the first alternative for the 68000's logical-or could be written as
36003'"+m" (output) : "ir" (input)'.  The second could be '"+r" (output):
36004"irm" (input)'.  However, the fact that two memory locations cannot be
36005used in a single instruction prevents simply using '"+rm" (output) :
36006"irm" (input)'.  Using multi-alternatives, this might be written as
36007'"+m,r" (output) : "ir,irm" (input)'.  This describes all the available
36008alternatives to the compiler, allowing it to choose the most efficient
36009one for the current conditions.
36010
36011 There is no way within the template to determine which alternative was
36012chosen.  However you may be able to wrap your 'asm' statements with
36013builtins such as '__builtin_constant_p' to achieve the desired results.
36014
36015
36016File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
36017
360186.45.3.3 Constraint Modifier Characters
36019.......................................
36020
36021Here are constraint modifier characters.
36022
36023'='
36024     Means that this operand is written to by this instruction: the
36025     previous value is discarded and replaced by new data.
36026
36027'+'
36028     Means that this operand is both read and written by the
36029     instruction.
36030
36031     When the compiler fixes up the operands to satisfy the constraints,
36032     it needs to know which operands are read by the instruction and
36033     which are written by it.  '=' identifies an operand which is only
36034     written; '+' identifies an operand that is both read and written;
36035     all other operands are assumed to only be read.
36036
36037     If you specify '=' or '+' in a constraint, you put it in the first
36038     character of the constraint string.
36039
36040'&'
36041     Means (in a particular alternative) that this operand is an
36042     "earlyclobber" operand, which is written before the instruction is
36043     finished using the input operands.  Therefore, this operand may not
36044     lie in a register that is read by the instruction or as part of any
36045     memory address.
36046
36047     '&' applies only to the alternative in which it is written.  In
36048     constraints with multiple alternatives, sometimes one alternative
36049     requires '&' while others do not.  See, for example, the 'movdf'
36050     insn of the 68000.
36051
36052     A operand which is read by the instruction can be tied to an
36053     earlyclobber operand if its only use as an input occurs before the
36054     early result is written.  Adding alternatives of this form often
36055     allows GCC to produce better code when only some of the read
36056     operands can be affected by the earlyclobber.  See, for example,
36057     the 'mulsi3' insn of the ARM.
36058
36059     Furthermore, if the "earlyclobber" operand is also a read/write
36060     operand, then that operand is written only after it's used.
36061
36062     '&' does not obviate the need to write '=' or '+'.  As
36063     "earlyclobber" operands are always written, a read-only
36064     "earlyclobber" operand is ill-formed and will be rejected by the
36065     compiler.
36066
36067'%'
36068     Declares the instruction to be commutative for this operand and the
36069     following operand.  This means that the compiler may interchange
36070     the two operands if that is the cheapest way to make all operands
36071     fit the constraints.  '%' applies to all alternatives and must
36072     appear as the first character in the constraint.  Only read-only
36073     operands can use '%'.
36074
36075     GCC can only handle one commutative pair in an asm; if you use
36076     more, the compiler may fail.  Note that you need not use the
36077     modifier if the two alternatives are strictly identical; this would
36078     only waste time in the reload pass.
36079
36080
36081File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
36082
360836.45.3.4 Constraints for Particular Machines
36084............................................
36085
36086Whenever possible, you should use the general-purpose constraint letters
36087in 'asm' arguments, since they will convey meaning more readily to
36088people reading your code.  Failing that, use the constraint letters that
36089usually have very similar meanings across architectures.  The most
36090commonly used constraints are 'm' and 'r' (for memory and
36091general-purpose registers respectively; *note Simple Constraints::), and
36092'I', usually the letter indicating the most common immediate-constant
36093format.
36094
36095 Each architecture defines additional constraints.  These constraints
36096are used by the compiler itself for instruction generation, as well as
36097for 'asm' statements; therefore, some of the constraints are not
36098particularly useful for 'asm'.  Here is a summary of some of the
36099machine-dependent constraints available on some particular machines; it
36100includes both constraints that are useful for 'asm' and constraints that
36101aren't.  The compiler source file mentioned in the table heading for
36102each architecture is the definitive reference for the meanings of that
36103architecture's constraints.
36104
36105_AArch64 family--'config/aarch64/constraints.md'_
36106     'k'
36107          The stack pointer register ('SP')
36108
36109     'w'
36110          Floating point register, Advanced SIMD vector register or SVE
36111          vector register
36112
36113     'Upl'
36114          One of the low eight SVE predicate registers ('P0' to 'P7')
36115
36116     'Upa'
36117          Any of the SVE predicate registers ('P0' to 'P15')
36118
36119     'I'
36120          Integer constant that is valid as an immediate operand in an
36121          'ADD' instruction
36122
36123     'J'
36124          Integer constant that is valid as an immediate operand in a
36125          'SUB' instruction (once negated)
36126
36127     'K'
36128          Integer constant that can be used with a 32-bit logical
36129          instruction
36130
36131     'L'
36132          Integer constant that can be used with a 64-bit logical
36133          instruction
36134
36135     'M'
36136          Integer constant that is valid as an immediate operand in a
36137          32-bit 'MOV' pseudo instruction.  The 'MOV' may be assembled
36138          to one of several different machine instructions depending on
36139          the value
36140
36141     'N'
36142          Integer constant that is valid as an immediate operand in a
36143          64-bit 'MOV' pseudo instruction
36144
36145     'S'
36146          An absolute symbolic address or a label reference
36147
36148     'Y'
36149          Floating point constant zero
36150
36151     'Z'
36152          Integer constant zero
36153
36154     'Ush'
36155          The high part (bits 12 and upwards) of the pc-relative address
36156          of a symbol within 4GB of the instruction
36157
36158     'Q'
36159          A memory address which uses a single base register with no
36160          offset
36161
36162     'Ump'
36163          A memory address suitable for a load/store pair instruction in
36164          SI, DI, SF and DF modes
36165
36166_ARC --'config/arc/constraints.md'_
36167     'q'
36168          Registers usable in ARCompact 16-bit instructions: 'r0'-'r3',
36169          'r12'-'r15'.  This constraint can only match when the '-mq'
36170          option is in effect.
36171
36172     'e'
36173          Registers usable as base-regs of memory addresses in ARCompact
36174          16-bit memory instructions: 'r0'-'r3', 'r12'-'r15', 'sp'.
36175          This constraint can only match when the '-mq' option is in
36176          effect.
36177     'D'
36178          ARC FPX (dpfp) 64-bit registers.  'D0', 'D1'.
36179
36180     'I'
36181          A signed 12-bit integer constant.
36182
36183     'Cal'
36184          constant for arithmetic/logical operations.  This might be any
36185          constant that can be put into a long immediate by the assmbler
36186          or linker without involving a PIC relocation.
36187
36188     'K'
36189          A 3-bit unsigned integer constant.
36190
36191     'L'
36192          A 6-bit unsigned integer constant.
36193
36194     'CnL'
36195          One's complement of a 6-bit unsigned integer constant.
36196
36197     'CmL'
36198          Two's complement of a 6-bit unsigned integer constant.
36199
36200     'M'
36201          A 5-bit unsigned integer constant.
36202
36203     'O'
36204          A 7-bit unsigned integer constant.
36205
36206     'P'
36207          A 8-bit unsigned integer constant.
36208
36209     'H'
36210          Any const_double value.
36211
36212_ARM family--'config/arm/constraints.md'_
36213
36214     'h'
36215          In Thumb state, the core registers 'r8'-'r15'.
36216
36217     'k'
36218          The stack pointer register.
36219
36220     'l'
36221          In Thumb State the core registers 'r0'-'r7'.  In ARM state
36222          this is an alias for the 'r' constraint.
36223
36224     't'
36225          VFP floating-point registers 's0'-'s31'.  Used for 32 bit
36226          values.
36227
36228     'w'
36229          VFP floating-point registers 'd0'-'d31' and the appropriate
36230          subset 'd0'-'d15' based on command line options.  Used for 64
36231          bit values only.  Not valid for Thumb1.
36232
36233     'y'
36234          The iWMMX co-processor registers.
36235
36236     'z'
36237          The iWMMX GR registers.
36238
36239     'G'
36240          The floating-point constant 0.0
36241
36242     'I'
36243          Integer that is valid as an immediate operand in a data
36244          processing instruction.  That is, an integer in the range 0 to
36245          255 rotated by a multiple of 2
36246
36247     'J'
36248          Integer in the range -4095 to 4095
36249
36250     'K'
36251          Integer that satisfies constraint 'I' when inverted (ones
36252          complement)
36253
36254     'L'
36255          Integer that satisfies constraint 'I' when negated (twos
36256          complement)
36257
36258     'M'
36259          Integer in the range 0 to 32
36260
36261     'Q'
36262          A memory reference where the exact address is in a single
36263          register (''m'' is preferable for 'asm' statements)
36264
36265     'R'
36266          An item in the constant pool
36267
36268     'S'
36269          A symbol in the text segment of the current file
36270
36271     'Uv'
36272          A memory reference suitable for VFP load/store insns
36273          (reg+constant offset)
36274
36275     'Uy'
36276          A memory reference suitable for iWMMXt load/store
36277          instructions.
36278
36279     'Uq'
36280          A memory reference suitable for the ARMv4 ldrsb instruction.
36281
36282_AVR family--'config/avr/constraints.md'_
36283     'l'
36284          Registers from r0 to r15
36285
36286     'a'
36287          Registers from r16 to r23
36288
36289     'd'
36290          Registers from r16 to r31
36291
36292     'w'
36293          Registers from r24 to r31.  These registers can be used in
36294          'adiw' command
36295
36296     'e'
36297          Pointer register (r26-r31)
36298
36299     'b'
36300          Base pointer register (r28-r31)
36301
36302     'q'
36303          Stack pointer register (SPH:SPL)
36304
36305     't'
36306          Temporary register r0
36307
36308     'x'
36309          Register pair X (r27:r26)
36310
36311     'y'
36312          Register pair Y (r29:r28)
36313
36314     'z'
36315          Register pair Z (r31:r30)
36316
36317     'I'
36318          Constant greater than -1, less than 64
36319
36320     'J'
36321          Constant greater than -64, less than 1
36322
36323     'K'
36324          Constant integer 2
36325
36326     'L'
36327          Constant integer 0
36328
36329     'M'
36330          Constant that fits in 8 bits
36331
36332     'N'
36333          Constant integer -1
36334
36335     'O'
36336          Constant integer 8, 16, or 24
36337
36338     'P'
36339          Constant integer 1
36340
36341     'G'
36342          A floating point constant 0.0
36343
36344     'Q'
36345          A memory address based on Y or Z pointer with displacement.
36346
36347_Blackfin family--'config/bfin/constraints.md'_
36348     'a'
36349          P register
36350
36351     'd'
36352          D register
36353
36354     'z'
36355          A call clobbered P register.
36356
36357     'qN'
36358          A single register.  If N is in the range 0 to 7, the
36359          corresponding D register.  If it is 'A', then the register P0.
36360
36361     'D'
36362          Even-numbered D register
36363
36364     'W'
36365          Odd-numbered D register
36366
36367     'e'
36368          Accumulator register.
36369
36370     'A'
36371          Even-numbered accumulator register.
36372
36373     'B'
36374          Odd-numbered accumulator register.
36375
36376     'b'
36377          I register
36378
36379     'v'
36380          B register
36381
36382     'f'
36383          M register
36384
36385     'c'
36386          Registers used for circular buffering, i.e.  I, B, or L
36387          registers.
36388
36389     'C'
36390          The CC register.
36391
36392     't'
36393          LT0 or LT1.
36394
36395     'k'
36396          LC0 or LC1.
36397
36398     'u'
36399          LB0 or LB1.
36400
36401     'x'
36402          Any D, P, B, M, I or L register.
36403
36404     'y'
36405          Additional registers typically used only in prologues and
36406          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
36407          USP.
36408
36409     'w'
36410          Any register except accumulators or CC.
36411
36412     'Ksh'
36413          Signed 16 bit integer (in the range -32768 to 32767)
36414
36415     'Kuh'
36416          Unsigned 16 bit integer (in the range 0 to 65535)
36417
36418     'Ks7'
36419          Signed 7 bit integer (in the range -64 to 63)
36420
36421     'Ku7'
36422          Unsigned 7 bit integer (in the range 0 to 127)
36423
36424     'Ku5'
36425          Unsigned 5 bit integer (in the range 0 to 31)
36426
36427     'Ks4'
36428          Signed 4 bit integer (in the range -8 to 7)
36429
36430     'Ks3'
36431          Signed 3 bit integer (in the range -3 to 4)
36432
36433     'Ku3'
36434          Unsigned 3 bit integer (in the range 0 to 7)
36435
36436     'PN'
36437          Constant N, where N is a single-digit constant in the range 0
36438          to 4.
36439
36440     'PA'
36441          An integer equal to one of the MACFLAG_XXX constants that is
36442          suitable for use with either accumulator.
36443
36444     'PB'
36445          An integer equal to one of the MACFLAG_XXX constants that is
36446          suitable for use only with accumulator A1.
36447
36448     'M1'
36449          Constant 255.
36450
36451     'M2'
36452          Constant 65535.
36453
36454     'J'
36455          An integer constant with exactly a single bit set.
36456
36457     'L'
36458          An integer constant with all bits set except exactly one.
36459
36460     'H'
36461
36462     'Q'
36463          Any SYMBOL_REF.
36464
36465_CR16 Architecture--'config/cr16/cr16.h'_
36466
36467     'b'
36468          Registers from r0 to r14 (registers without stack pointer)
36469
36470     't'
36471          Register from r0 to r11 (all 16-bit registers)
36472
36473     'p'
36474          Register from r12 to r15 (all 32-bit registers)
36475
36476     'I'
36477          Signed constant that fits in 4 bits
36478
36479     'J'
36480          Signed constant that fits in 5 bits
36481
36482     'K'
36483          Signed constant that fits in 6 bits
36484
36485     'L'
36486          Unsigned constant that fits in 4 bits
36487
36488     'M'
36489          Signed constant that fits in 32 bits
36490
36491     'N'
36492          Check for 64 bits wide constants for add/sub instructions
36493
36494     'G'
36495          Floating point constant that is legal for store immediate
36496
36497_Epiphany--'config/epiphany/constraints.md'_
36498     'U16'
36499          An unsigned 16-bit constant.
36500
36501     'K'
36502          An unsigned 5-bit constant.
36503
36504     'L'
36505          A signed 11-bit constant.
36506
36507     'Cm1'
36508          A signed 11-bit constant added to -1.  Can only match when the
36509          '-m1reg-REG' option is active.
36510
36511     'Cl1'
36512          Left-shift of -1, i.e., a bit mask with a block of leading
36513          ones, the rest being a block of trailing zeroes.  Can only
36514          match when the '-m1reg-REG' option is active.
36515
36516     'Cr1'
36517          Right-shift of -1, i.e., a bit mask with a trailing block of
36518          ones, the rest being zeroes.  Or to put it another way, one
36519          less than a power of two.  Can only match when the
36520          '-m1reg-REG' option is active.
36521
36522     'Cal'
36523          Constant for arithmetic/logical operations.  This is like 'i',
36524          except that for position independent code, no symbols /
36525          expressions needing relocations are allowed.
36526
36527     'Csy'
36528          Symbolic constant for call/jump instruction.
36529
36530     'Rcs'
36531          The register class usable in short insns.  This is a register
36532          class constraint, and can thus drive register allocation.
36533          This constraint won't match unless '-mprefer-short-insn-regs'
36534          is in effect.
36535
36536     'Rsc'
36537          The the register class of registers that can be used to hold a
36538          sibcall call address.  I.e., a caller-saved register.
36539
36540     'Rct'
36541          Core control register class.
36542
36543     'Rgs'
36544          The register group usable in short insns.  This constraint
36545          does not use a register class, so that it only passively
36546          matches suitable registers, and doesn't drive register
36547          allocation.
36548
36549     'Rra'
36550          Matches the return address if it can be replaced with the link
36551          register.
36552
36553     'Rcc'
36554          Matches the integer condition code register.
36555
36556     'Sra'
36557          Matches the return address if it is in a stack slot.
36558
36559     'Cfm'
36560          Matches control register values to switch fp mode, which are
36561          encapsulated in 'UNSPEC_FP_MODE'.
36562
36563_FRV--'config/frv/frv.h'_
36564     'a'
36565          Register in the class 'ACC_REGS' ('acc0' to 'acc7').
36566
36567     'b'
36568          Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7').
36569
36570     'c'
36571          Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0'
36572          to 'icc3').
36573
36574     'd'
36575          Register in the class 'GPR_REGS' ('gr0' to 'gr63').
36576
36577     'e'
36578          Register in the class 'EVEN_REGS' ('gr0' to 'gr63').  Odd
36579          registers are excluded not in the class but through the use of
36580          a machine mode larger than 4 bytes.
36581
36582     'f'
36583          Register in the class 'FPR_REGS' ('fr0' to 'fr63').
36584
36585     'h'
36586          Register in the class 'FEVEN_REGS' ('fr0' to 'fr63').  Odd
36587          registers are excluded not in the class but through the use of
36588          a machine mode larger than 4 bytes.
36589
36590     'l'
36591          Register in the class 'LR_REG' (the 'lr' register).
36592
36593     'q'
36594          Register in the class 'QUAD_REGS' ('gr2' to 'gr63').  Register
36595          numbers not divisible by 4 are excluded not in the class but
36596          through the use of a machine mode larger than 8 bytes.
36597
36598     't'
36599          Register in the class 'ICC_REGS' ('icc0' to 'icc3').
36600
36601     'u'
36602          Register in the class 'FCC_REGS' ('fcc0' to 'fcc3').
36603
36604     'v'
36605          Register in the class 'ICR_REGS' ('cc4' to 'cc7').
36606
36607     'w'
36608          Register in the class 'FCR_REGS' ('cc0' to 'cc3').
36609
36610     'x'
36611          Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63').
36612          Register numbers not divisible by 4 are excluded not in the
36613          class but through the use of a machine mode larger than 8
36614          bytes.
36615
36616     'z'
36617          Register in the class 'SPR_REGS' ('lcr' and 'lr').
36618
36619     'A'
36620          Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7').
36621
36622     'B'
36623          Register in the class 'ACCG_REGS' ('accg0' to 'accg7').
36624
36625     'C'
36626          Register in the class 'CR_REGS' ('cc0' to 'cc7').
36627
36628     'G'
36629          Floating point constant zero
36630
36631     'I'
36632          6-bit signed integer constant
36633
36634     'J'
36635          10-bit signed integer constant
36636
36637     'L'
36638          16-bit signed integer constant
36639
36640     'M'
36641          16-bit unsigned integer constant
36642
36643     'N'
36644          12-bit signed integer constant that is negative--i.e. in the
36645          range of -2048 to -1
36646
36647     'O'
36648          Constant zero
36649
36650     'P'
36651          12-bit signed integer constant that is greater than zero--i.e.
36652          in the range of 1 to 2047.
36653
36654_FT32--'config/ft32/constraints.md'_
36655     'A'
36656          An absolute address
36657
36658     'B'
36659          An offset address
36660
36661     'W'
36662          A register indirect memory operand
36663
36664     'e'
36665          An offset address.
36666
36667     'f'
36668          An offset address.
36669
36670     'O'
36671          The constant zero or one
36672
36673     'I'
36674          A 16-bit signed constant (-32768 ... 32767)
36675
36676     'w'
36677          A bitfield mask suitable for bext or bins
36678
36679     'x'
36680          An inverted bitfield mask suitable for bext or bins
36681
36682     'L'
36683          A 16-bit unsigned constant, multiple of 4 (0 ... 65532)
36684
36685     'S'
36686          A 20-bit signed constant (-524288 ... 524287)
36687
36688     'b'
36689          A constant for a bitfield width (1 ... 16)
36690
36691     'KA'
36692          A 10-bit signed constant (-512 ... 511)
36693
36694_Hewlett-Packard PA-RISC--'config/pa/pa.h'_
36695     'a'
36696          General register 1
36697
36698     'f'
36699          Floating point register
36700
36701     'q'
36702          Shift amount register
36703
36704     'x'
36705          Floating point register (deprecated)
36706
36707     'y'
36708          Upper floating point register (32-bit), floating point
36709          register (64-bit)
36710
36711     'Z'
36712          Any register
36713
36714     'I'
36715          Signed 11-bit integer constant
36716
36717     'J'
36718          Signed 14-bit integer constant
36719
36720     'K'
36721          Integer constant that can be deposited with a 'zdepi'
36722          instruction
36723
36724     'L'
36725          Signed 5-bit integer constant
36726
36727     'M'
36728          Integer constant 0
36729
36730     'N'
36731          Integer constant that can be loaded with a 'ldil' instruction
36732
36733     'O'
36734          Integer constant whose value plus one is a power of 2
36735
36736     'P'
36737          Integer constant that can be used for 'and' operations in
36738          'depi' and 'extru' instructions
36739
36740     'S'
36741          Integer constant 31
36742
36743     'U'
36744          Integer constant 63
36745
36746     'G'
36747          Floating-point constant 0.0
36748
36749     'A'
36750          A 'lo_sum' data-linkage-table memory operand
36751
36752     'Q'
36753          A memory operand that can be used as the destination operand
36754          of an integer store instruction
36755
36756     'R'
36757          A scaled or unscaled indexed memory operand
36758
36759     'T'
36760          A memory operand for floating-point loads and stores
36761
36762     'W'
36763          A register indirect memory operand
36764
36765_Intel IA-64--'config/ia64/ia64.h'_
36766     'a'
36767          General register 'r0' to 'r3' for 'addl' instruction
36768
36769     'b'
36770          Branch register
36771
36772     'c'
36773          Predicate register ('c' as in "conditional")
36774
36775     'd'
36776          Application register residing in M-unit
36777
36778     'e'
36779          Application register residing in I-unit
36780
36781     'f'
36782          Floating-point register
36783
36784     'm'
36785          Memory operand.  If used together with '<' or '>', the operand
36786          can have postincrement and postdecrement which require
36787          printing with '%Pn' on IA-64.
36788
36789     'G'
36790          Floating-point constant 0.0 or 1.0
36791
36792     'I'
36793          14-bit signed integer constant
36794
36795     'J'
36796          22-bit signed integer constant
36797
36798     'K'
36799          8-bit signed integer constant for logical instructions
36800
36801     'L'
36802          8-bit adjusted signed integer constant for compare pseudo-ops
36803
36804     'M'
36805          6-bit unsigned integer constant for shift counts
36806
36807     'N'
36808          9-bit signed integer constant for load and store
36809          postincrements
36810
36811     'O'
36812          The constant zero
36813
36814     'P'
36815          0 or -1 for 'dep' instruction
36816
36817     'Q'
36818          Non-volatile memory for floating-point loads and stores
36819
36820     'R'
36821          Integer constant in the range 1 to 4 for 'shladd' instruction
36822
36823     'S'
36824          Memory operand except postincrement and postdecrement.  This
36825          is now roughly the same as 'm' when not used together with '<'
36826          or '>'.
36827
36828_M32C--'config/m32c/m32c.c'_
36829     'Rsp'
36830     'Rfb'
36831     'Rsb'
36832          '$sp', '$fb', '$sb'.
36833
36834     'Rcr'
36835          Any control register, when they're 16 bits wide (nothing if
36836          control registers are 24 bits wide)
36837
36838     'Rcl'
36839          Any control register, when they're 24 bits wide.
36840
36841     'R0w'
36842     'R1w'
36843     'R2w'
36844     'R3w'
36845          $r0, $r1, $r2, $r3.
36846
36847     'R02'
36848          $r0 or $r2, or $r2r0 for 32 bit values.
36849
36850     'R13'
36851          $r1 or $r3, or $r3r1 for 32 bit values.
36852
36853     'Rdi'
36854          A register that can hold a 64 bit value.
36855
36856     'Rhl'
36857          $r0 or $r1 (registers with addressable high/low bytes)
36858
36859     'R23'
36860          $r2 or $r3
36861
36862     'Raa'
36863          Address registers
36864
36865     'Raw'
36866          Address registers when they're 16 bits wide.
36867
36868     'Ral'
36869          Address registers when they're 24 bits wide.
36870
36871     'Rqi'
36872          Registers that can hold QI values.
36873
36874     'Rad'
36875          Registers that can be used with displacements ($a0, $a1, $sb).
36876
36877     'Rsi'
36878          Registers that can hold 32 bit values.
36879
36880     'Rhi'
36881          Registers that can hold 16 bit values.
36882
36883     'Rhc'
36884          Registers chat can hold 16 bit values, including all control
36885          registers.
36886
36887     'Rra'
36888          $r0 through R1, plus $a0 and $a1.
36889
36890     'Rfl'
36891          The flags register.
36892
36893     'Rmm'
36894          The memory-based pseudo-registers $mem0 through $mem15.
36895
36896     'Rpi'
36897          Registers that can hold pointers (16 bit registers for r8c,
36898          m16c; 24 bit registers for m32cm, m32c).
36899
36900     'Rpa'
36901          Matches multiple registers in a PARALLEL to form a larger
36902          register.  Used to match function return values.
36903
36904     'Is3'
36905          -8 ... 7
36906
36907     'IS1'
36908          -128 ... 127
36909
36910     'IS2'
36911          -32768 ... 32767
36912
36913     'IU2'
36914          0 ... 65535
36915
36916     'In4'
36917          -8 ... -1 or 1 ... 8
36918
36919     'In5'
36920          -16 ... -1 or 1 ... 16
36921
36922     'In6'
36923          -32 ... -1 or 1 ... 32
36924
36925     'IM2'
36926          -65536 ... -1
36927
36928     'Ilb'
36929          An 8 bit value with exactly one bit set.
36930
36931     'Ilw'
36932          A 16 bit value with exactly one bit set.
36933
36934     'Sd'
36935          The common src/dest memory addressing modes.
36936
36937     'Sa'
36938          Memory addressed using $a0 or $a1.
36939
36940     'Si'
36941          Memory addressed with immediate addresses.
36942
36943     'Ss'
36944          Memory addressed using the stack pointer ($sp).
36945
36946     'Sf'
36947          Memory addressed using the frame base register ($fb).
36948
36949     'Ss'
36950          Memory addressed using the small base register ($sb).
36951
36952     'S1'
36953          $r1h
36954
36955_MicroBlaze--'config/microblaze/constraints.md'_
36956     'd'
36957          A general register ('r0' to 'r31').
36958
36959     'z'
36960          A status register ('rmsr', '$fcc1' to '$fcc7').
36961
36962_MIPS--'config/mips/constraints.md'_
36963     'd'
36964          A general-purpose register.  This is equivalent to 'r' unless
36965          generating MIPS16 code, in which case the MIPS16 register set
36966          is used.
36967
36968     'f'
36969          A floating-point register (if available).
36970
36971     'h'
36972          Formerly the 'hi' register.  This constraint is no longer
36973          supported.
36974
36975     'l'
36976          The 'lo' register.  Use this register to store values that are
36977          no bigger than a word.
36978
36979     'x'
36980          The concatenated 'hi' and 'lo' registers.  Use this register
36981          to store doubleword values.
36982
36983     'c'
36984          A register suitable for use in an indirect jump.  This will
36985          always be '$25' for '-mabicalls'.
36986
36987     'v'
36988          Register '$3'.  Do not use this constraint in new code; it is
36989          retained only for compatibility with glibc.
36990
36991     'y'
36992          Equivalent to 'r'; retained for backwards compatibility.
36993
36994     'z'
36995          A floating-point condition code register.
36996
36997     'I'
36998          A signed 16-bit constant (for arithmetic instructions).
36999
37000     'J'
37001          Integer zero.
37002
37003     'K'
37004          An unsigned 16-bit constant (for logic instructions).
37005
37006     'L'
37007          A signed 32-bit constant in which the lower 16 bits are zero.
37008          Such constants can be loaded using 'lui'.
37009
37010     'M'
37011          A constant that cannot be loaded using 'lui', 'addiu' or
37012          'ori'.
37013
37014     'N'
37015          A constant in the range -65535 to -1 (inclusive).
37016
37017     'O'
37018          A signed 15-bit constant.
37019
37020     'P'
37021          A constant in the range 1 to 65535 (inclusive).
37022
37023     'G'
37024          Floating-point zero.
37025
37026     'R'
37027          An address that can be used in a non-macro load or store.
37028
37029     'ZC'
37030          A memory operand whose address is formed by a base register
37031          and offset that is suitable for use in instructions with the
37032          same addressing mode as 'll' and 'sc'.
37033
37034     'ZD'
37035          An address suitable for a 'prefetch' instruction, or for any
37036          other instruction with the same addressing mode as 'prefetch'.
37037
37038_Motorola 680x0--'config/m68k/constraints.md'_
37039     'a'
37040          Address register
37041
37042     'd'
37043          Data register
37044
37045     'f'
37046          68881 floating-point register, if available
37047
37048     'I'
37049          Integer in the range 1 to 8
37050
37051     'J'
37052          16-bit signed number
37053
37054     'K'
37055          Signed number whose magnitude is greater than 0x80
37056
37057     'L'
37058          Integer in the range -8 to -1
37059
37060     'M'
37061          Signed number whose magnitude is greater than 0x100
37062
37063     'N'
37064          Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
37065
37066     'O'
37067          16 (for rotate using swap)
37068
37069     'P'
37070          Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
37071
37072     'R'
37073          Numbers that mov3q can handle
37074
37075     'G'
37076          Floating point constant that is not a 68881 constant
37077
37078     'S'
37079          Operands that satisfy 'm' when -mpcrel is in effect
37080
37081     'T'
37082          Operands that satisfy 's' when -mpcrel is not in effect
37083
37084     'Q'
37085          Address register indirect addressing mode
37086
37087     'U'
37088          Register offset addressing
37089
37090     'W'
37091          const_call_operand
37092
37093     'Cs'
37094          symbol_ref or const
37095
37096     'Ci'
37097          const_int
37098
37099     'C0'
37100          const_int 0
37101
37102     'Cj'
37103          Range of signed numbers that don't fit in 16 bits
37104
37105     'Cmvq'
37106          Integers valid for mvq
37107
37108     'Capsw'
37109          Integers valid for a moveq followed by a swap
37110
37111     'Cmvz'
37112          Integers valid for mvz
37113
37114     'Cmvs'
37115          Integers valid for mvs
37116
37117     'Ap'
37118          push_operand
37119
37120     'Ac'
37121          Non-register operands allowed in clr
37122
37123_Moxie--'config/moxie/constraints.md'_
37124     'A'
37125          An absolute address
37126
37127     'B'
37128          An offset address
37129
37130     'W'
37131          A register indirect memory operand
37132
37133     'I'
37134          A constant in the range of 0 to 255.
37135
37136     'N'
37137          A constant in the range of 0 to -255.
37138
37139_MSP430-'config/msp430/constraints.md'_
37140
37141     'R12'
37142          Register R12.
37143
37144     'R13'
37145          Register R13.
37146
37147     'K'
37148          Integer constant 1.
37149
37150     'L'
37151          Integer constant -1^20..1^19.
37152
37153     'M'
37154          Integer constant 1-4.
37155
37156     'Ya'
37157          Memory references which do not require an extended MOVX
37158          instruction.
37159
37160     'Yl'
37161          Memory reference, labels only.
37162
37163     'Ys'
37164          Memory reference, stack only.
37165
37166_NDS32--'config/nds32/constraints.md'_
37167     'w'
37168          LOW register class $r0 to $r7 constraint for V3/V3M ISA.
37169     'l'
37170          LOW register class $r0 to $r7.
37171     'd'
37172          MIDDLE register class $r0 to $r11, $r16 to $r19.
37173     'h'
37174          HIGH register class $r12 to $r14, $r20 to $r31.
37175     't'
37176          Temporary assist register $ta (i.e. $r15).
37177     'k'
37178          Stack register $sp.
37179     'Iu03'
37180          Unsigned immediate 3-bit value.
37181     'In03'
37182          Negative immediate 3-bit value in the range of -7-0.
37183     'Iu04'
37184          Unsigned immediate 4-bit value.
37185     'Is05'
37186          Signed immediate 5-bit value.
37187     'Iu05'
37188          Unsigned immediate 5-bit value.
37189     'In05'
37190          Negative immediate 5-bit value in the range of -31-0.
37191     'Ip05'
37192          Unsigned immediate 5-bit value for movpi45 instruction with
37193          range 16-47.
37194     'Iu06'
37195          Unsigned immediate 6-bit value constraint for addri36.sp
37196          instruction.
37197     'Iu08'
37198          Unsigned immediate 8-bit value.
37199     'Iu09'
37200          Unsigned immediate 9-bit value.
37201     'Is10'
37202          Signed immediate 10-bit value.
37203     'Is11'
37204          Signed immediate 11-bit value.
37205     'Is15'
37206          Signed immediate 15-bit value.
37207     'Iu15'
37208          Unsigned immediate 15-bit value.
37209     'Ic15'
37210          A constant which is not in the range of imm15u but ok for bclr
37211          instruction.
37212     'Ie15'
37213          A constant which is not in the range of imm15u but ok for bset
37214          instruction.
37215     'It15'
37216          A constant which is not in the range of imm15u but ok for btgl
37217          instruction.
37218     'Ii15'
37219          A constant whose compliment value is in the range of imm15u
37220          and ok for bitci instruction.
37221     'Is16'
37222          Signed immediate 16-bit value.
37223     'Is17'
37224          Signed immediate 17-bit value.
37225     'Is19'
37226          Signed immediate 19-bit value.
37227     'Is20'
37228          Signed immediate 20-bit value.
37229     'Ihig'
37230          The immediate value that can be simply set high 20-bit.
37231     'Izeb'
37232          The immediate value 0xff.
37233     'Izeh'
37234          The immediate value 0xffff.
37235     'Ixls'
37236          The immediate value 0x01.
37237     'Ix11'
37238          The immediate value 0x7ff.
37239     'Ibms'
37240          The immediate value with power of 2.
37241     'Ifex'
37242          The immediate value with power of 2 minus 1.
37243     'U33'
37244          Memory constraint for 333 format.
37245     'U45'
37246          Memory constraint for 45 format.
37247     'U37'
37248          Memory constraint for 37 format.
37249
37250_Nios II family--'config/nios2/constraints.md'_
37251
37252     'I'
37253          Integer that is valid as an immediate operand in an
37254          instruction taking a signed 16-bit number.  Range -32768 to
37255          32767.
37256
37257     'J'
37258          Integer that is valid as an immediate operand in an
37259          instruction taking an unsigned 16-bit number.  Range 0 to
37260          65535.
37261
37262     'K'
37263          Integer that is valid as an immediate operand in an
37264          instruction taking only the upper 16-bits of a 32-bit number.
37265          Range 32-bit numbers with the lower 16-bits being 0.
37266
37267     'L'
37268          Integer that is valid as an immediate operand for a shift
37269          instruction.  Range 0 to 31.
37270
37271     'M'
37272          Integer that is valid as an immediate operand for only the
37273          value 0.  Can be used in conjunction with the format modifier
37274          'z' to use 'r0' instead of '0' in the assembly output.
37275
37276     'N'
37277          Integer that is valid as an immediate operand for a custom
37278          instruction opcode.  Range 0 to 255.
37279
37280     'P'
37281          An immediate operand for R2 andchi/andci instructions.
37282
37283     'S'
37284          Matches immediates which are addresses in the small data
37285          section and therefore can be added to 'gp' as a 16-bit
37286          immediate to re-create their 32-bit value.
37287
37288     'U'
37289          Matches constants suitable as an operand for the rdprs and
37290          cache instructions.
37291
37292     'v'
37293          A memory operand suitable for Nios II R2 load/store exclusive
37294          instructions.
37295
37296     'w'
37297          A memory operand suitable for load/store IO and cache
37298          instructions.
37299
37300_PDP-11--'config/pdp11/constraints.md'_
37301     'a'
37302          Floating point registers AC0 through AC3.  These can be loaded
37303          from/to memory with a single instruction.
37304
37305     'd'
37306          Odd numbered general registers (R1, R3, R5).  These are used
37307          for 16-bit multiply operations.
37308
37309     'f'
37310          Any of the floating point registers (AC0 through AC5).
37311
37312     'G'
37313          Floating point constant 0.
37314
37315     'I'
37316          An integer constant that fits in 16 bits.
37317
37318     'J'
37319          An integer constant whose low order 16 bits are zero.
37320
37321     'K'
37322          An integer constant that does not meet the constraints for
37323          codes 'I' or 'J'.
37324
37325     'L'
37326          The integer constant 1.
37327
37328     'M'
37329          The integer constant -1.
37330
37331     'N'
37332          The integer constant 0.
37333
37334     'O'
37335          Integer constants -4 through -1 and 1 through 4; shifts by
37336          these amounts are handled as multiple single-bit shifts rather
37337          than a single variable-length shift.
37338
37339     'Q'
37340          A memory reference which requires an additional word (address
37341          or offset) after the opcode.
37342
37343     'R'
37344          A memory reference that is encoded within the opcode.
37345
37346_PowerPC and IBM RS6000--'config/rs6000/constraints.md'_
37347     'b'
37348          Address base register
37349
37350     'd'
37351          Floating point register (containing 64-bit value)
37352
37353     'f'
37354          Floating point register (containing 32-bit value)
37355
37356     'v'
37357          Altivec vector register
37358
37359     'wa'
37360          Any VSX register if the '-mvsx' option was used or NO_REGS.
37361
37362          When using any of the register constraints ('wa', 'wd', 'wf',
37363          'wg', 'wh', 'wi', 'wj', 'wk', 'wl', 'wm', 'wo', 'wp', 'wq',
37364          'ws', 'wt', 'wu', 'wv', 'ww', or 'wy') that take VSX
37365          registers, you must use '%x<n>' in the template so that the
37366          correct register is used.  Otherwise the register number
37367          output in the assembly file will be incorrect if an Altivec
37368          register is an operand of a VSX instruction that expects VSX
37369          register numbering.
37370
37371               asm ("xvadddp %x0,%x1,%x2"
37372                    : "=wa" (v1)
37373                    : "wa" (v2), "wa" (v3));
37374
37375          is correct, but:
37376
37377               asm ("xvadddp %0,%1,%2"
37378                    : "=wa" (v1)
37379                    : "wa" (v2), "wa" (v3));
37380
37381          is not correct.
37382
37383          If an instruction only takes Altivec registers, you do not
37384          want to use '%x<n>'.
37385
37386               asm ("xsaddqp %0,%1,%2"
37387                    : "=v" (v1)
37388                    : "v" (v2), "v" (v3));
37389
37390          is correct because the 'xsaddqp' instruction only takes
37391          Altivec registers, while:
37392
37393               asm ("xsaddqp %x0,%x1,%x2"
37394                    : "=v" (v1)
37395                    : "v" (v2), "v" (v3));
37396
37397          is incorrect.
37398
37399     'wb'
37400          Altivec register if '-mcpu=power9' is used or NO_REGS.
37401
37402     'wd'
37403          VSX vector register to hold vector double data or NO_REGS.
37404
37405     'we'
37406          VSX register if the '-mcpu=power9' and '-m64' options were
37407          used or NO_REGS.
37408
37409     'wf'
37410          VSX vector register to hold vector float data or NO_REGS.
37411
37412     'wg'
37413          If '-mmfpgpr' was used, a floating point register or NO_REGS.
37414
37415     'wh'
37416          Floating point register if direct moves are available, or
37417          NO_REGS.
37418
37419     'wi'
37420          FP or VSX register to hold 64-bit integers for VSX insns or
37421          NO_REGS.
37422
37423     'wj'
37424          FP or VSX register to hold 64-bit integers for direct moves or
37425          NO_REGS.
37426
37427     'wk'
37428          FP or VSX register to hold 64-bit doubles for direct moves or
37429          NO_REGS.
37430
37431     'wl'
37432          Floating point register if the LFIWAX instruction is enabled
37433          or NO_REGS.
37434
37435     'wm'
37436          VSX register if direct move instructions are enabled, or
37437          NO_REGS.
37438
37439     'wn'
37440          No register (NO_REGS).
37441
37442     'wo'
37443          VSX register to use for ISA 3.0 vector instructions, or
37444          NO_REGS.
37445
37446     'wp'
37447          VSX register to use for IEEE 128-bit floating point TFmode, or
37448          NO_REGS.
37449
37450     'wq'
37451          VSX register to use for IEEE 128-bit floating point, or
37452          NO_REGS.
37453
37454     'wr'
37455          General purpose register if 64-bit instructions are enabled or
37456          NO_REGS.
37457
37458     'ws'
37459          VSX vector register to hold scalar double values or NO_REGS.
37460
37461     'wt'
37462          VSX vector register to hold 128 bit integer or NO_REGS.
37463
37464     'wu'
37465          Altivec register to use for float/32-bit int loads/stores or
37466          NO_REGS.
37467
37468     'wv'
37469          Altivec register to use for double loads/stores or NO_REGS.
37470
37471     'ww'
37472          FP or VSX register to perform float operations under '-mvsx'
37473          or NO_REGS.
37474
37475     'wx'
37476          Floating point register if the STFIWX instruction is enabled
37477          or NO_REGS.
37478
37479     'wy'
37480          FP or VSX register to perform ISA 2.07 float ops or NO_REGS.
37481
37482     'wz'
37483          Floating point register if the LFIWZX instruction is enabled
37484          or NO_REGS.
37485
37486     'wA'
37487          Address base register if 64-bit instructions are enabled or
37488          NO_REGS.
37489
37490     'wB'
37491          Signed 5-bit constant integer that can be loaded into an
37492          altivec register.
37493
37494     'wD'
37495          Int constant that is the element number of the 64-bit scalar
37496          in a vector.
37497
37498     'wE'
37499          Vector constant that can be loaded with the XXSPLTIB
37500          instruction.
37501
37502     'wF'
37503          Memory operand suitable for power9 fusion load/stores.
37504
37505     'wG'
37506          Memory operand suitable for TOC fusion memory references.
37507
37508     'wH'
37509          Altivec register if '-mvsx-small-integer'.
37510
37511     'wI'
37512          Floating point register if '-mvsx-small-integer'.
37513
37514     'wJ'
37515          FP register if '-mvsx-small-integer' and '-mpower9-vector'.
37516
37517     'wK'
37518          Altivec register if '-mvsx-small-integer' and
37519          '-mpower9-vector'.
37520
37521     'wL'
37522          Int constant that is the element number that the MFVSRLD
37523          instruction.  targets.
37524
37525     'wM'
37526          Match vector constant with all 1's if the XXLORC instruction
37527          is available.
37528
37529     'wO'
37530          A memory operand suitable for the ISA 3.0 vector d-form
37531          instructions.
37532
37533     'wQ'
37534          A memory address that will work with the 'lq' and 'stq'
37535          instructions.
37536
37537     'wS'
37538          Vector constant that can be loaded with XXSPLTIB & sign
37539          extension.
37540
37541     'h'
37542          'MQ', 'CTR', or 'LINK' register
37543
37544     'c'
37545          'CTR' register
37546
37547     'l'
37548          'LINK' register
37549
37550     'x'
37551          'CR' register (condition register) number 0
37552
37553     'y'
37554          'CR' register (condition register)
37555
37556     'z'
37557          'XER[CA]' carry bit (part of the XER register)
37558
37559     'I'
37560          Signed 16-bit constant
37561
37562     'J'
37563          Unsigned 16-bit constant shifted left 16 bits (use 'L' instead
37564          for 'SImode' constants)
37565
37566     'K'
37567          Unsigned 16-bit constant
37568
37569     'L'
37570          Signed 16-bit constant shifted left 16 bits
37571
37572     'M'
37573          Constant larger than 31
37574
37575     'N'
37576          Exact power of 2
37577
37578     'O'
37579          Zero
37580
37581     'P'
37582          Constant whose negation is a signed 16-bit constant
37583
37584     'G'
37585          Floating point constant that can be loaded into a register
37586          with one instruction per word
37587
37588     'H'
37589          Integer/Floating point constant that can be loaded into a
37590          register using three instructions
37591
37592     'm'
37593          Memory operand.  Normally, 'm' does not allow addresses that
37594          update the base register.  If '<' or '>' constraint is also
37595          used, they are allowed and therefore on PowerPC targets in
37596          that case it is only safe to use 'm<>' in an 'asm' statement
37597          if that 'asm' statement accesses the operand exactly once.
37598          The 'asm' statement must also use '%U<OPNO>' as a placeholder
37599          for the "update" flag in the corresponding load or store
37600          instruction.  For example:
37601
37602               asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
37603
37604          is correct but:
37605
37606               asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
37607
37608          is not.
37609
37610     'es'
37611          A "stable" memory operand; that is, one which does not include
37612          any automodification of the base register.  This used to be
37613          useful when 'm' allowed automodification of the base register,
37614          but as those are now only allowed when '<' or '>' is used,
37615          'es' is basically the same as 'm' without '<' and '>'.
37616
37617     'Q'
37618          Memory operand that is an offset from a register (it is
37619          usually better to use 'm' or 'es' in 'asm' statements)
37620
37621     'Z'
37622          Memory operand that is an indexed or indirect from a register
37623          (it is usually better to use 'm' or 'es' in 'asm' statements)
37624
37625     'R'
37626          AIX TOC entry
37627
37628     'a'
37629          Address operand that is an indexed or indirect from a register
37630          ('p' is preferable for 'asm' statements)
37631
37632     'U'
37633          System V Release 4 small data area reference
37634
37635     'W'
37636          Vector constant that does not require memory
37637
37638     'j'
37639          Vector constant that is all zeros.
37640
37641_RL78--'config/rl78/constraints.md'_
37642
37643     'Int3'
37644          An integer constant in the range 1 ... 7.
37645     'Int8'
37646          An integer constant in the range 0 ... 255.
37647     'J'
37648          An integer constant in the range -255 ... 0
37649     'K'
37650          The integer constant 1.
37651     'L'
37652          The integer constant -1.
37653     'M'
37654          The integer constant 0.
37655     'N'
37656          The integer constant 2.
37657     'O'
37658          The integer constant -2.
37659     'P'
37660          An integer constant in the range 1 ... 15.
37661     'Qbi'
37662          The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
37663     'Qsc'
37664          The synthetic compare types-gt, lt, ge, and le.
37665     'Wab'
37666          A memory reference with an absolute address.
37667     'Wbc'
37668          A memory reference using 'BC' as a base register, with an
37669          optional offset.
37670     'Wca'
37671          A memory reference using 'AX', 'BC', 'DE', or 'HL' for the
37672          address, for calls.
37673     'Wcv'
37674          A memory reference using any 16-bit register pair for the
37675          address, for calls.
37676     'Wd2'
37677          A memory reference using 'DE' as a base register, with an
37678          optional offset.
37679     'Wde'
37680          A memory reference using 'DE' as a base register, without any
37681          offset.
37682     'Wfr'
37683          Any memory reference to an address in the far address space.
37684     'Wh1'
37685          A memory reference using 'HL' as a base register, with an
37686          optional one-byte offset.
37687     'Whb'
37688          A memory reference using 'HL' as a base register, with 'B' or
37689          'C' as the index register.
37690     'Whl'
37691          A memory reference using 'HL' as a base register, without any
37692          offset.
37693     'Ws1'
37694          A memory reference using 'SP' as a base register, with an
37695          optional one-byte offset.
37696     'Y'
37697          Any memory reference to an address in the near address space.
37698     'A'
37699          The 'AX' register.
37700     'B'
37701          The 'BC' register.
37702     'D'
37703          The 'DE' register.
37704     'R'
37705          'A' through 'L' registers.
37706     'S'
37707          The 'SP' register.
37708     'T'
37709          The 'HL' register.
37710     'Z08W'
37711          The 16-bit 'R8' register.
37712     'Z10W'
37713          The 16-bit 'R10' register.
37714     'Zint'
37715          The registers reserved for interrupts ('R24' to 'R31').
37716     'a'
37717          The 'A' register.
37718     'b'
37719          The 'B' register.
37720     'c'
37721          The 'C' register.
37722     'd'
37723          The 'D' register.
37724     'e'
37725          The 'E' register.
37726     'h'
37727          The 'H' register.
37728     'l'
37729          The 'L' register.
37730     'v'
37731          The virtual registers.
37732     'w'
37733          The 'PSW' register.
37734     'x'
37735          The 'X' register.
37736
37737_RISC-V--'config/riscv/constraints.md'_
37738
37739     'f'
37740          A floating-point register (if available).
37741
37742     'I'
37743          An I-type 12-bit signed immediate.
37744
37745     'J'
37746          Integer zero.
37747
37748     'K'
37749          A 5-bit unsigned immediate for CSR access instructions.
37750
37751     'A'
37752          An address that is held in a general-purpose register.
37753
37754_RX--'config/rx/constraints.md'_
37755     'Q'
37756          An address which does not involve register indirect addressing
37757          or pre/post increment/decrement addressing.
37758
37759     'Symbol'
37760          A symbol reference.
37761
37762     'Int08'
37763          A constant in the range -256 to 255, inclusive.
37764
37765     'Sint08'
37766          A constant in the range -128 to 127, inclusive.
37767
37768     'Sint16'
37769          A constant in the range -32768 to 32767, inclusive.
37770
37771     'Sint24'
37772          A constant in the range -8388608 to 8388607, inclusive.
37773
37774     'Uint04'
37775          A constant in the range 0 to 15, inclusive.
37776
37777_S/390 and zSeries--'config/s390/s390.h'_
37778     'a'
37779          Address register (general purpose register except r0)
37780
37781     'c'
37782          Condition code register
37783
37784     'd'
37785          Data register (arbitrary general purpose register)
37786
37787     'f'
37788          Floating-point register
37789
37790     'I'
37791          Unsigned 8-bit constant (0-255)
37792
37793     'J'
37794          Unsigned 12-bit constant (0-4095)
37795
37796     'K'
37797          Signed 16-bit constant (-32768-32767)
37798
37799     'L'
37800          Value appropriate as displacement.
37801          '(0..4095)'
37802               for short displacement
37803          '(-524288..524287)'
37804               for long displacement
37805
37806     'M'
37807          Constant integer with a value of 0x7fffffff.
37808
37809     'N'
37810          Multiple letter constraint followed by 4 parameter letters.
37811          '0..9:'
37812               number of the part counting from most to least
37813               significant
37814          'H,Q:'
37815               mode of the part
37816          'D,S,H:'
37817               mode of the containing operand
37818          '0,F:'
37819               value of the other parts (F--all bits set)
37820          The constraint matches if the specified part of a constant has
37821          a value different from its other parts.
37822
37823     'Q'
37824          Memory reference without index register and with short
37825          displacement.
37826
37827     'R'
37828          Memory reference with index register and short displacement.
37829
37830     'S'
37831          Memory reference without index register but with long
37832          displacement.
37833
37834     'T'
37835          Memory reference with index register and long displacement.
37836
37837     'U'
37838          Pointer with short displacement.
37839
37840     'W'
37841          Pointer with long displacement.
37842
37843     'Y'
37844          Shift count operand.
37845
37846_SPARC--'config/sparc/sparc.h'_
37847     'f'
37848          Floating-point register on the SPARC-V8 architecture and lower
37849          floating-point register on the SPARC-V9 architecture.
37850
37851     'e'
37852          Floating-point register.  It is equivalent to 'f' on the
37853          SPARC-V8 architecture and contains both lower and upper
37854          floating-point registers on the SPARC-V9 architecture.
37855
37856     'c'
37857          Floating-point condition code register.
37858
37859     'd'
37860          Lower floating-point register.  It is only valid on the
37861          SPARC-V9 architecture when the Visual Instruction Set is
37862          available.
37863
37864     'b'
37865          Floating-point register.  It is only valid on the SPARC-V9
37866          architecture when the Visual Instruction Set is available.
37867
37868     'h'
37869          64-bit global or out register for the SPARC-V8+ architecture.
37870
37871     'C'
37872          The constant all-ones, for floating-point.
37873
37874     'A'
37875          Signed 5-bit constant
37876
37877     'D'
37878          A vector constant
37879
37880     'I'
37881          Signed 13-bit constant
37882
37883     'J'
37884          Zero
37885
37886     'K'
37887          32-bit constant with the low 12 bits clear (a constant that
37888          can be loaded with the 'sethi' instruction)
37889
37890     'L'
37891          A constant in the range supported by 'movcc' instructions
37892          (11-bit signed immediate)
37893
37894     'M'
37895          A constant in the range supported by 'movrcc' instructions
37896          (10-bit signed immediate)
37897
37898     'N'
37899          Same as 'K', except that it verifies that bits that are not in
37900          the lower 32-bit range are all zero.  Must be used instead of
37901          'K' for modes wider than 'SImode'
37902
37903     'O'
37904          The constant 4096
37905
37906     'G'
37907          Floating-point zero
37908
37909     'H'
37910          Signed 13-bit constant, sign-extended to 32 or 64 bits
37911
37912     'P'
37913          The constant -1
37914
37915     'Q'
37916          Floating-point constant whose integral representation can be
37917          moved into an integer register using a single sethi
37918          instruction
37919
37920     'R'
37921          Floating-point constant whose integral representation can be
37922          moved into an integer register using a single mov instruction
37923
37924     'S'
37925          Floating-point constant whose integral representation can be
37926          moved into an integer register using a high/lo_sum instruction
37927          sequence
37928
37929     'T'
37930          Memory address aligned to an 8-byte boundary
37931
37932     'U'
37933          Even register
37934
37935     'W'
37936          Memory address for 'e' constraint registers
37937
37938     'w'
37939          Memory address with only a base register
37940
37941     'Y'
37942          Vector zero
37943
37944_SPU--'config/spu/spu.h'_
37945     'a'
37946          An immediate which can be loaded with the il/ila/ilh/ilhu
37947          instructions.  const_int is treated as a 64 bit value.
37948
37949     'c'
37950          An immediate for and/xor/or instructions.  const_int is
37951          treated as a 64 bit value.
37952
37953     'd'
37954          An immediate for the 'iohl' instruction.  const_int is treated
37955          as a 64 bit value.
37956
37957     'f'
37958          An immediate which can be loaded with 'fsmbi'.
37959
37960     'A'
37961          An immediate which can be loaded with the il/ila/ilh/ilhu
37962          instructions.  const_int is treated as a 32 bit value.
37963
37964     'B'
37965          An immediate for most arithmetic instructions.  const_int is
37966          treated as a 32 bit value.
37967
37968     'C'
37969          An immediate for and/xor/or instructions.  const_int is
37970          treated as a 32 bit value.
37971
37972     'D'
37973          An immediate for the 'iohl' instruction.  const_int is treated
37974          as a 32 bit value.
37975
37976     'I'
37977          A constant in the range [-64, 63] for shift/rotate
37978          instructions.
37979
37980     'J'
37981          An unsigned 7-bit constant for conversion/nop/channel
37982          instructions.
37983
37984     'K'
37985          A signed 10-bit constant for most arithmetic instructions.
37986
37987     'M'
37988          A signed 16 bit immediate for 'stop'.
37989
37990     'N'
37991          An unsigned 16-bit constant for 'iohl' and 'fsmbi'.
37992
37993     'O'
37994          An unsigned 7-bit constant whose 3 least significant bits are
37995          0.
37996
37997     'P'
37998          An unsigned 3-bit constant for 16-byte rotates and shifts
37999
38000     'R'
38001          Call operand, reg, for indirect calls
38002
38003     'S'
38004          Call operand, symbol, for relative calls.
38005
38006     'T'
38007          Call operand, const_int, for absolute calls.
38008
38009     'U'
38010          An immediate which can be loaded with the il/ila/ilh/ilhu
38011          instructions.  const_int is sign extended to 128 bit.
38012
38013     'W'
38014          An immediate for shift and rotate instructions.  const_int is
38015          treated as a 32 bit value.
38016
38017     'Y'
38018          An immediate for and/xor/or instructions.  const_int is sign
38019          extended as a 128 bit.
38020
38021     'Z'
38022          An immediate for the 'iohl' instruction.  const_int is sign
38023          extended to 128 bit.
38024
38025_TI C6X family--'config/c6x/constraints.md'_
38026     'a'
38027          Register file A (A0-A31).
38028
38029     'b'
38030          Register file B (B0-B31).
38031
38032     'A'
38033          Predicate registers in register file A (A0-A2 on C64X and
38034          higher, A1 and A2 otherwise).
38035
38036     'B'
38037          Predicate registers in register file B (B0-B2).
38038
38039     'C'
38040          A call-used register in register file B (B0-B9, B16-B31).
38041
38042     'Da'
38043          Register file A, excluding predicate registers (A3-A31, plus
38044          A0 if not C64X or higher).
38045
38046     'Db'
38047          Register file B, excluding predicate registers (B3-B31).
38048
38049     'Iu4'
38050          Integer constant in the range 0 ... 15.
38051
38052     'Iu5'
38053          Integer constant in the range 0 ... 31.
38054
38055     'In5'
38056          Integer constant in the range -31 ... 0.
38057
38058     'Is5'
38059          Integer constant in the range -16 ... 15.
38060
38061     'I5x'
38062          Integer constant that can be the operand of an ADDA or a SUBA
38063          insn.
38064
38065     'IuB'
38066          Integer constant in the range 0 ... 65535.
38067
38068     'IsB'
38069          Integer constant in the range -32768 ... 32767.
38070
38071     'IsC'
38072          Integer constant in the range -2^{20} ... 2^{20} - 1.
38073
38074     'Jc'
38075          Integer constant that is a valid mask for the clr instruction.
38076
38077     'Js'
38078          Integer constant that is a valid mask for the set instruction.
38079
38080     'Q'
38081          Memory location with A base register.
38082
38083     'R'
38084          Memory location with B base register.
38085
38086     'Z'
38087          Register B14 (aka DP).
38088
38089_TILE-Gx--'config/tilegx/constraints.md'_
38090     'R00'
38091     'R01'
38092     'R02'
38093     'R03'
38094     'R04'
38095     'R05'
38096     'R06'
38097     'R07'
38098     'R08'
38099     'R09'
38100     'R10'
38101          Each of these represents a register constraint for an
38102          individual register, from r0 to r10.
38103
38104     'I'
38105          Signed 8-bit integer constant.
38106
38107     'J'
38108          Signed 16-bit integer constant.
38109
38110     'K'
38111          Unsigned 16-bit integer constant.
38112
38113     'L'
38114          Integer constant that fits in one signed byte when incremented
38115          by one (-129 ... 126).
38116
38117     'm'
38118          Memory operand.  If used together with '<' or '>', the operand
38119          can have postincrement which requires printing with '%In' and
38120          '%in' on TILE-Gx.  For example:
38121
38122               asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
38123
38124     'M'
38125          A bit mask suitable for the BFINS instruction.
38126
38127     'N'
38128          Integer constant that is a byte tiled out eight times.
38129
38130     'O'
38131          The integer zero constant.
38132
38133     'P'
38134          Integer constant that is a sign-extended byte tiled out as
38135          four shorts.
38136
38137     'Q'
38138          Integer constant that fits in one signed byte when incremented
38139          (-129 ... 126), but excluding -1.
38140
38141     'S'
38142          Integer constant that has all 1 bits consecutive and starting
38143          at bit 0.
38144
38145     'T'
38146          A 16-bit fragment of a got, tls, or pc-relative reference.
38147
38148     'U'
38149          Memory operand except postincrement.  This is roughly the same
38150          as 'm' when not used together with '<' or '>'.
38151
38152     'W'
38153          An 8-element vector constant with identical elements.
38154
38155     'Y'
38156          A 4-element vector constant with identical elements.
38157
38158     'Z0'
38159          The integer constant 0xffffffff.
38160
38161     'Z1'
38162          The integer constant 0xffffffff00000000.
38163
38164_TILEPro--'config/tilepro/constraints.md'_
38165     'R00'
38166     'R01'
38167     'R02'
38168     'R03'
38169     'R04'
38170     'R05'
38171     'R06'
38172     'R07'
38173     'R08'
38174     'R09'
38175     'R10'
38176          Each of these represents a register constraint for an
38177          individual register, from r0 to r10.
38178
38179     'I'
38180          Signed 8-bit integer constant.
38181
38182     'J'
38183          Signed 16-bit integer constant.
38184
38185     'K'
38186          Nonzero integer constant with low 16 bits zero.
38187
38188     'L'
38189          Integer constant that fits in one signed byte when incremented
38190          by one (-129 ... 126).
38191
38192     'm'
38193          Memory operand.  If used together with '<' or '>', the operand
38194          can have postincrement which requires printing with '%In' and
38195          '%in' on TILEPro.  For example:
38196
38197               asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
38198
38199     'M'
38200          A bit mask suitable for the MM instruction.
38201
38202     'N'
38203          Integer constant that is a byte tiled out four times.
38204
38205     'O'
38206          The integer zero constant.
38207
38208     'P'
38209          Integer constant that is a sign-extended byte tiled out as two
38210          shorts.
38211
38212     'Q'
38213          Integer constant that fits in one signed byte when incremented
38214          (-129 ... 126), but excluding -1.
38215
38216     'T'
38217          A symbolic operand, or a 16-bit fragment of a got, tls, or
38218          pc-relative reference.
38219
38220     'U'
38221          Memory operand except postincrement.  This is roughly the same
38222          as 'm' when not used together with '<' or '>'.
38223
38224     'W'
38225          A 4-element vector constant with identical elements.
38226
38227     'Y'
38228          A 2-element vector constant with identical elements.
38229
38230_Visium--'config/visium/constraints.md'_
38231     'b'
38232          EAM register 'mdb'
38233
38234     'c'
38235          EAM register 'mdc'
38236
38237     'f'
38238          Floating point register
38239
38240     'l'
38241          General register, but not 'r29', 'r30' and 'r31'
38242
38243     't'
38244          Register 'r1'
38245
38246     'u'
38247          Register 'r2'
38248
38249     'v'
38250          Register 'r3'
38251
38252     'G'
38253          Floating-point constant 0.0
38254
38255     'J'
38256          Integer constant in the range 0 ..  65535 (16-bit immediate)
38257
38258     'K'
38259          Integer constant in the range 1 ..  31 (5-bit immediate)
38260
38261     'L'
38262          Integer constant in the range -65535 ..  -1 (16-bit negative
38263          immediate)
38264
38265     'M'
38266          Integer constant -1
38267
38268     'O'
38269          Integer constant 0
38270
38271     'P'
38272          Integer constant 32
38273
38274_x86 family--'config/i386/constraints.md'_
38275     'R'
38276          Legacy register--the eight integer registers available on all
38277          i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp').
38278
38279     'q'
38280          Any register accessible as 'Rl'.  In 32-bit mode, 'a', 'b',
38281          'c', and 'd'; in 64-bit mode, any integer register.
38282
38283     'Q'
38284          Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'.
38285
38286     'a'
38287          The 'a' register.
38288
38289     'b'
38290          The 'b' register.
38291
38292     'c'
38293          The 'c' register.
38294
38295     'd'
38296          The 'd' register.
38297
38298     'S'
38299          The 'si' register.
38300
38301     'D'
38302          The 'di' register.
38303
38304     'A'
38305          The 'a' and 'd' registers.  This class is used for
38306          instructions that return double word results in the 'ax:dx'
38307          register pair.  Single word values will be allocated either in
38308          'ax' or 'dx'.  For example on i386 the following implements
38309          'rdtsc':
38310
38311               unsigned long long rdtsc (void)
38312               {
38313                 unsigned long long tick;
38314                 __asm__ __volatile__("rdtsc":"=A"(tick));
38315                 return tick;
38316               }
38317
38318          This is not correct on x86-64 as it would allocate tick in
38319          either 'ax' or 'dx'.  You have to use the following variant
38320          instead:
38321
38322               unsigned long long rdtsc (void)
38323               {
38324                 unsigned int tickl, tickh;
38325                 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
38326                 return ((unsigned long long)tickh << 32)|tickl;
38327               }
38328
38329     'U'
38330          The call-clobbered integer registers.
38331
38332     'f'
38333          Any 80387 floating-point (stack) register.
38334
38335     't'
38336          Top of 80387 floating-point stack ('%st(0)').
38337
38338     'u'
38339          Second from top of 80387 floating-point stack ('%st(1)').
38340
38341     'y'
38342          Any MMX register.
38343
38344     'x'
38345          Any SSE register.
38346
38347     'v'
38348          Any EVEX encodable SSE register ('%xmm0-%xmm31').
38349
38350     'Yz'
38351          First SSE register ('%xmm0').
38352
38353     'I'
38354          Integer constant in the range 0 ... 31, for 32-bit shifts.
38355
38356     'J'
38357          Integer constant in the range 0 ... 63, for 64-bit shifts.
38358
38359     'K'
38360          Signed 8-bit integer constant.
38361
38362     'L'
38363          '0xFF' or '0xFFFF', for andsi as a zero-extending move.
38364
38365     'M'
38366          0, 1, 2, or 3 (shifts for the 'lea' instruction).
38367
38368     'N'
38369          Unsigned 8-bit integer constant (for 'in' and 'out'
38370          instructions).
38371
38372     'G'
38373          Standard 80387 floating point constant.
38374
38375     'C'
38376          SSE constant zero operand.
38377
38378     'e'
38379          32-bit signed integer constant, or a symbolic reference known
38380          to fit that range (for immediate operands in sign-extending
38381          x86-64 instructions).
38382
38383     'We'
38384          32-bit signed integer constant, or a symbolic reference known
38385          to fit that range (for sign-extending conversion operations
38386          that require non-'VOIDmode' immediate operands).
38387
38388     'Wz'
38389          32-bit unsigned integer constant, or a symbolic reference
38390          known to fit that range (for zero-extending conversion
38391          operations that require non-'VOIDmode' immediate operands).
38392
38393     'Wd'
38394          128-bit integer constant where both the high and low 64-bit
38395          word satisfy the 'e' constraint.
38396
38397     'Z'
38398          32-bit unsigned integer constant, or a symbolic reference
38399          known to fit that range (for immediate operands in
38400          zero-extending x86-64 instructions).
38401
38402     'Tv'
38403          VSIB address operand.
38404
38405     'Ts'
38406          Address operand without segment register.
38407
38408     'Ti'
38409          MPX address operand without index.
38410
38411     'Tb'
38412          MPX address operand without base.
38413
38414_Xstormy16--'config/stormy16/stormy16.h'_
38415     'a'
38416          Register r0.
38417
38418     'b'
38419          Register r1.
38420
38421     'c'
38422          Register r2.
38423
38424     'd'
38425          Register r8.
38426
38427     'e'
38428          Registers r0 through r7.
38429
38430     't'
38431          Registers r0 and r1.
38432
38433     'y'
38434          The carry register.
38435
38436     'z'
38437          Registers r8 and r9.
38438
38439     'I'
38440          A constant between 0 and 3 inclusive.
38441
38442     'J'
38443          A constant that has exactly one bit set.
38444
38445     'K'
38446          A constant that has exactly one bit clear.
38447
38448     'L'
38449          A constant between 0 and 255 inclusive.
38450
38451     'M'
38452          A constant between -255 and 0 inclusive.
38453
38454     'N'
38455          A constant between -3 and 0 inclusive.
38456
38457     'O'
38458          A constant between 1 and 4 inclusive.
38459
38460     'P'
38461          A constant between -4 and -1 inclusive.
38462
38463     'Q'
38464          A memory reference that is a stack push.
38465
38466     'R'
38467          A memory reference that is a stack pop.
38468
38469     'S'
38470          A memory reference that refers to a constant address of known
38471          value.
38472
38473     'T'
38474          The register indicated by Rx (not implemented yet).
38475
38476     'U'
38477          A constant that is not between 2 and 15 inclusive.
38478
38479     'Z'
38480          The constant 0.
38481
38482_Xtensa--'config/xtensa/constraints.md'_
38483     'a'
38484          General-purpose 32-bit register
38485
38486     'b'
38487          One-bit boolean register
38488
38489     'A'
38490          MAC16 40-bit accumulator register
38491
38492     'I'
38493          Signed 12-bit integer constant, for use in MOVI instructions
38494
38495     'J'
38496          Signed 8-bit integer constant, for use in ADDI instructions
38497
38498     'K'
38499          Integer constant valid for BccI instructions
38500
38501     'L'
38502          Unsigned constant valid for BccUI instructions
38503
38504
38505File: gcc.info,  Node: Asm Labels,  Next: Explicit Register Variables,  Prev: Constraints,  Up: Using Assembly Language with C
38506
385076.45.4 Controlling Names Used in Assembler Code
38508-----------------------------------------------
38509
38510You can specify the name to be used in the assembler code for a C
38511function or variable by writing the 'asm' (or '__asm__') keyword after
38512the declarator.  It is up to you to make sure that the assembler names
38513you choose do not conflict with any other assembler symbols, or
38514reference registers.
38515
38516Assembler names for data:
38517.........................
38518
38519This sample shows how to specify the assembler name for data:
38520
38521     int foo asm ("myfoo") = 2;
38522
38523This specifies that the name to be used for the variable 'foo' in the
38524assembler code should be 'myfoo' rather than the usual '_foo'.
38525
38526 On systems where an underscore is normally prepended to the name of a C
38527variable, this feature allows you to define names for the linker that do
38528not start with an underscore.
38529
38530 GCC does not support using this feature with a non-static local
38531variable since such variables do not have assembler names.  If you are
38532trying to put the variable in a particular register, see *note Explicit
38533Register Variables::.
38534
38535Assembler names for functions:
38536..............................
38537
38538To specify the assembler name for functions, write a declaration for the
38539function before its definition and put 'asm' there, like this:
38540
38541     int func (int x, int y) asm ("MYFUNC");
38542
38543     int func (int x, int y)
38544     {
38545        /* ... */
38546
38547This specifies that the name to be used for the function 'func' in the
38548assembler code should be 'MYFUNC'.
38549
38550
38551File: gcc.info,  Node: Explicit Register Variables,  Next: Size of an asm,  Prev: Asm Labels,  Up: Using Assembly Language with C
38552
385536.45.5 Variables in Specified Registers
38554---------------------------------------
38555
38556GNU C allows you to associate specific hardware registers with C
38557variables.  In almost all cases, allowing the compiler to assign
38558registers produces the best code.  However under certain unusual
38559circumstances, more precise control over the variable storage is
38560required.
38561
38562 Both global and local variables can be associated with a register.  The
38563consequences of performing this association are very different between
38564the two, as explained in the sections below.
38565
38566* Menu:
38567
38568* Global Register Variables::   Variables declared at global scope.
38569* Local Register Variables::    Variables declared within a function.
38570
38571
38572File: gcc.info,  Node: Global Register Variables,  Next: Local Register Variables,  Up: Explicit Register Variables
38573
385746.45.5.1 Defining Global Register Variables
38575...........................................
38576
38577You can define a global register variable and associate it with a
38578specified register like this:
38579
38580     register int *foo asm ("r12");
38581
38582Here 'r12' is the name of the register that should be used.  Note that
38583this is the same syntax used for defining local register variables, but
38584for a global variable the declaration appears outside a function.  The
38585'register' keyword is required, and cannot be combined with 'static'.
38586The register name must be a valid register name for the target platform.
38587
38588 Registers are a scarce resource on most systems and allowing the
38589compiler to manage their usage usually results in the best code.
38590However, under special circumstances it can make sense to reserve some
38591globally.  For example this may be useful in programs such as
38592programming language interpreters that have a couple of global variables
38593that are accessed very often.
38594
38595 After defining a global register variable, for the current compilation
38596unit:
38597
38598   * The register is reserved entirely for this use, and will not be
38599     allocated for any other purpose.
38600   * The register is not saved and restored by any functions.
38601   * Stores into this register are never deleted even if they appear to
38602     be dead, but references may be deleted, moved or simplified.
38603
38604 Note that these points _only_ apply to code that is compiled with the
38605definition.  The behavior of code that is merely linked in (for example
38606code from libraries) is not affected.
38607
38608 If you want to recompile source files that do not actually use your
38609global register variable so they do not use the specified register for
38610any other purpose, you need not actually add the global register
38611declaration to their source code.  It suffices to specify the compiler
38612option '-ffixed-REG' (*note Code Gen Options::) to reserve the register.
38613
38614Declaring the variable
38615......................
38616
38617Global register variables can not have initial values, because an
38618executable file has no means to supply initial contents for a register.
38619
38620 When selecting a register, choose one that is normally saved and
38621restored by function calls on your machine.  This ensures that code
38622which is unaware of this reservation (such as library routines) will
38623restore it before returning.
38624
38625 On machines with register windows, be sure to choose a global register
38626that is not affected magically by the function call mechanism.
38627
38628Using the variable
38629..................
38630
38631When calling routines that are not aware of the reservation, be cautious
38632if those routines call back into code which uses them.  As an example,
38633if you call the system library version of 'qsort', it may clobber your
38634registers during execution, but (if you have selected appropriate
38635registers) it will restore them before returning.  However it will _not_
38636restore them before calling 'qsort''s comparison function.  As a result,
38637global values will not reliably be available to the comparison function
38638unless the 'qsort' function itself is rebuilt.
38639
38640 Similarly, it is not safe to access the global register variables from
38641signal handlers or from more than one thread of control.  Unless you
38642recompile them specially for the task at hand, the system library
38643routines may temporarily use the register for other things.
38644
38645 On most machines, 'longjmp' restores to each global register variable
38646the value it had at the time of the 'setjmp'.  On some machines,
38647however, 'longjmp' does not change the value of global register
38648variables.  To be portable, the function that called 'setjmp' should
38649make other arrangements to save the values of the global register
38650variables, and to restore them in a 'longjmp'.  This way, the same thing
38651happens regardless of what 'longjmp' does.
38652
38653 Eventually there may be a way of asking the compiler to choose a
38654register automatically, but first we need to figure out how it should
38655choose and how to enable you to guide the choice.  No solution is
38656evident.
38657
38658
38659File: gcc.info,  Node: Local Register Variables,  Prev: Global Register Variables,  Up: Explicit Register Variables
38660
386616.45.5.2 Specifying Registers for Local Variables
38662.................................................
38663
38664You can define a local register variable and associate it with a
38665specified register like this:
38666
38667     register int *foo asm ("r12");
38668
38669Here 'r12' is the name of the register that should be used.  Note that
38670this is the same syntax used for defining global register variables, but
38671for a local variable the declaration appears within a function.  The
38672'register' keyword is required, and cannot be combined with 'static'.
38673The register name must be a valid register name for the target platform.
38674
38675 As with global register variables, it is recommended that you choose a
38676register that is normally saved and restored by function calls on your
38677machine, so that calls to library routines will not clobber it.
38678
38679 The only supported use for this feature is to specify registers for
38680input and output operands when calling Extended 'asm' (*note Extended
38681Asm::).  This may be necessary if the constraints for a particular
38682machine don't provide sufficient control to select the desired register.
38683To force an operand into a register, create a local variable and specify
38684the register name after the variable's declaration.  Then use the local
38685variable for the 'asm' operand and specify any constraint letter that
38686matches the register:
38687
38688     register int *p1 asm ("r0") = ...;
38689     register int *p2 asm ("r1") = ...;
38690     register int *result asm ("r0");
38691     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
38692
38693 _Warning:_ In the above example, be aware that a register (for example
38694'r0') can be call-clobbered by subsequent code, including function calls
38695and library calls for arithmetic operators on other variables (for
38696example the initialization of 'p2').  In this case, use temporary
38697variables for expressions between the register assignments:
38698
38699     int t1 = ...;
38700     register int *p1 asm ("r0") = ...;
38701     register int *p2 asm ("r1") = t1;
38702     register int *result asm ("r0");
38703     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
38704
38705 Defining a register variable does not reserve the register.  Other than
38706when invoking the Extended 'asm', the contents of the specified register
38707are not guaranteed.  For this reason, the following uses are explicitly
38708_not_ supported.  If they appear to work, it is only happenstance, and
38709may stop working as intended due to (seemingly) unrelated changes in
38710surrounding code, or even minor changes in the optimization of a future
38711version of gcc:
38712
38713   * Passing parameters to or from Basic 'asm'
38714   * Passing parameters to or from Extended 'asm' without using input or
38715     output operands.
38716   * Passing parameters to or from routines written in assembler (or
38717     other languages) using non-standard calling conventions.
38718
38719 Some developers use Local Register Variables in an attempt to improve
38720gcc's allocation of registers, especially in large functions.  In this
38721case the register name is essentially a hint to the register allocator.
38722While in some instances this can generate better code, improvements are
38723subject to the whims of the allocator/optimizers.  Since there are no
38724guarantees that your improvements won't be lost, this usage of Local
38725Register Variables is discouraged.
38726
38727 On the MIPS platform, there is related use for local register variables
38728with slightly different characteristics (*note Defining coprocessor
38729specifics for MIPS targets: (gccint)MIPS Coprocessors.).
38730
38731
38732File: gcc.info,  Node: Size of an asm,  Prev: Explicit Register Variables,  Up: Using Assembly Language with C
38733
387346.45.6 Size of an 'asm'
38735-----------------------
38736
38737Some targets require that GCC track the size of each instruction used in
38738order to generate correct code.  Because the final length of the code
38739produced by an 'asm' statement is only known by the assembler, GCC must
38740make an estimate as to how big it will be.  It does this by counting the
38741number of instructions in the pattern of the 'asm' and multiplying that
38742by the length of the longest instruction supported by that processor.
38743(When working out the number of instructions, it assumes that any
38744occurrence of a newline or of whatever statement separator character is
38745supported by the assembler -- typically ';' -- indicates the end of an
38746instruction.)
38747
38748 Normally, GCC's estimate is adequate to ensure that correct code is
38749generated, but it is possible to confuse the compiler if you use pseudo
38750instructions or assembler macros that expand into multiple real
38751instructions, or if you use assembler directives that expand to more
38752space in the object file than is needed for a single instruction.  If
38753this happens then the assembler may produce a diagnostic saying that a
38754label is unreachable.
38755
38756 This size is also used for inlining decisions.  If you use 'asm inline'
38757instead of just 'asm', then for inlining purposes the size of the asm is
38758taken as the minimum size, ignoring how many instructions GCC thinks it
38759is.
38760
38761
38762File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Using Assembly Language with C,  Up: C Extensions
38763
387646.46 Alternate Keywords
38765=======================
38766
38767'-ansi' and the various '-std' options disable certain keywords.  This
38768causes trouble when you want to use GNU C extensions, or a
38769general-purpose header file that should be usable by all programs,
38770including ISO C programs.  The keywords 'asm', 'typeof' and 'inline' are
38771not available in programs compiled with '-ansi' or '-std' (although
38772'inline' can be used in a program compiled with '-std=c99' or
38773'-std=c11').  The ISO C99 keyword 'restrict' is only available when
38774'-std=gnu99' (which will eventually be the default) or '-std=c99' (or
38775the equivalent '-std=iso9899:1999'), or an option for a later standard
38776version, is used.
38777
38778 The way to solve these problems is to put '__' at the beginning and end
38779of each problematical keyword.  For example, use '__asm__' instead of
38780'asm', and '__inline__' instead of 'inline'.
38781
38782 Other C compilers won't accept these alternative keywords; if you want
38783to compile with another compiler, you can define the alternate keywords
38784as macros to replace them with the customary keywords.  It looks like
38785this:
38786
38787     #ifndef __GNUC__
38788     #define __asm__ asm
38789     #endif
38790
38791 '-pedantic' and other options cause warnings for many GNU C extensions.
38792You can prevent such warnings within one expression by writing
38793'__extension__' before the expression.  '__extension__' has no effect
38794aside from this.
38795
38796
38797File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
38798
387996.47 Incomplete 'enum' Types
38800============================
38801
38802You can define an 'enum' tag without specifying its possible values.
38803This results in an incomplete type, much like what you get if you write
38804'struct foo' without describing the elements.  A later declaration that
38805does specify the possible values completes the type.
38806
38807 You cannot allocate variables or storage using the type while it is
38808incomplete.  However, you can work with pointers to that type.
38809
38810 This extension may not be very useful, but it makes the handling of
38811'enum' more consistent with the way 'struct' and 'union' are handled.
38812
38813 This extension is not supported by GNU C++.
38814
38815
38816File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
38817
388186.48 Function Names as Strings
38819==============================
38820
38821GCC provides three magic constants that hold the name of the current
38822function as a string.  In C++11 and later modes, all three are treated
38823as constant expressions and can be used in 'constexpr' constexts.  The
38824first of these constants is '__func__', which is part of the C99
38825standard:
38826
38827 The identifier '__func__' is implicitly declared by the translator as
38828if, immediately following the opening brace of each function definition,
38829the declaration
38830
38831     static const char __func__[] = "function-name";
38832
38833appeared, where function-name is the name of the lexically-enclosing
38834function.  This name is the unadorned name of the function.  As an
38835extension, at file (or, in C++, namespace scope), '__func__' evaluates
38836to the empty string.
38837
38838 '__FUNCTION__' is another name for '__func__', provided for backward
38839compatibility with old versions of GCC.
38840
38841 In C, '__PRETTY_FUNCTION__' is yet another name for '__func__', except
38842that at file (or, in C++, namespace scope), it evaluates to the string
38843'"top level"'.  In addition, in C++, '__PRETTY_FUNCTION__' contains the
38844signature of the function as well as its bare name.  For example, this
38845program:
38846
38847     extern "C" int printf (const char *, ...);
38848
38849     class a {
38850      public:
38851       void sub (int i)
38852         {
38853           printf ("__FUNCTION__ = %s\n", __FUNCTION__);
38854           printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
38855         }
38856     };
38857
38858     int
38859     main (void)
38860     {
38861       a ax;
38862       ax.sub (0);
38863       return 0;
38864     }
38865
38866gives this output:
38867
38868     __FUNCTION__ = sub
38869     __PRETTY_FUNCTION__ = void a::sub(int)
38870
38871 These identifiers are variables, not preprocessor macros, and may not
38872be used to initialize 'char' arrays or be concatenated with string
38873literals.
38874
38875
38876File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
38877
388786.49 Getting the Return or Frame Address of a Function
38879======================================================
38880
38881These functions may be used to get information about the callers of a
38882function.
38883
38884 -- Built-in Function: void * __builtin_return_address (unsigned int
38885          LEVEL)
38886     This function returns the return address of the current function,
38887     or of one of its callers.  The LEVEL argument is number of frames
38888     to scan up the call stack.  A value of '0' yields the return
38889     address of the current function, a value of '1' yields the return
38890     address of the caller of the current function, and so forth.  When
38891     inlining the expected behavior is that the function returns the
38892     address of the function that is returned to.  To work around this
38893     behavior use the 'noinline' function attribute.
38894
38895     The LEVEL argument must be a constant integer.
38896
38897     On some machines it may be impossible to determine the return
38898     address of any function other than the current one; in such cases,
38899     or when the top of the stack has been reached, this function
38900     returns '0' or a random value.  In addition,
38901     '__builtin_frame_address' may be used to determine if the top of
38902     the stack has been reached.
38903
38904     Additional post-processing of the returned value may be needed, see
38905     '__builtin_extract_return_addr'.
38906
38907     Calling this function with a nonzero argument can have
38908     unpredictable effects, including crashing the calling program.  As
38909     a result, calls that are considered unsafe are diagnosed when the
38910     '-Wframe-address' option is in effect.  Such calls should only be
38911     made in debugging situations.
38912
38913 -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR)
38914     The address as returned by '__builtin_return_address' may have to
38915     be fed through this function to get the actual encoded address.
38916     For example, on the 31-bit S/390 platform the highest bit has to be
38917     masked out, or on SPARC platforms an offset has to be added for the
38918     true next instruction to be executed.
38919
38920     If no fixup is needed, this function simply passes through ADDR.
38921
38922 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR)
38923     This function does the reverse of '__builtin_extract_return_addr'.
38924
38925 -- Built-in Function: void * __builtin_frame_address (unsigned int
38926          LEVEL)
38927     This function is similar to '__builtin_return_address', but it
38928     returns the address of the function frame rather than the return
38929     address of the function.  Calling '__builtin_frame_address' with a
38930     value of '0' yields the frame address of the current function, a
38931     value of '1' yields the frame address of the caller of the current
38932     function, and so forth.
38933
38934     The frame is the area on the stack that holds local variables and
38935     saved registers.  The frame address is normally the address of the
38936     first word pushed on to the stack by the function.  However, the
38937     exact definition depends upon the processor and the calling
38938     convention.  If the processor has a dedicated frame pointer
38939     register, and the function has a frame, then
38940     '__builtin_frame_address' returns the value of the frame pointer
38941     register.
38942
38943     On some machines it may be impossible to determine the frame
38944     address of any function other than the current one; in such cases,
38945     or when the top of the stack has been reached, this function
38946     returns '0' if the first frame pointer is properly initialized by
38947     the startup code.
38948
38949     Calling this function with a nonzero argument can have
38950     unpredictable effects, including crashing the calling program.  As
38951     a result, calls that are considered unsafe are diagnosed when the
38952     '-Wframe-address' option is in effect.  Such calls should only be
38953     made in debugging situations.
38954
38955
38956File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
38957
389586.50 Using Vector Instructions through Built-in Functions
38959=========================================================
38960
38961On some targets, the instruction set contains SIMD vector instructions
38962which operate on multiple values contained in one large register at the
38963same time.  For example, on the x86 the MMX, 3DNow! and SSE extensions
38964can be used this way.
38965
38966 The first step in using these extensions is to provide the necessary
38967data types.  This should be done using an appropriate 'typedef':
38968
38969     typedef int v4si __attribute__ ((vector_size (16)));
38970
38971The 'int' type specifies the base type, while the attribute specifies
38972the vector size for the variable, measured in bytes.  For example, the
38973declaration above causes the compiler to set the mode for the 'v4si'
38974type to be 16 bytes wide and divided into 'int' sized units.  For a
3897532-bit 'int' this means a vector of 4 units of 4 bytes, and the
38976corresponding mode of 'foo' is V4SI.
38977
38978 The 'vector_size' attribute is only applicable to integral and float
38979scalars, although arrays, pointers, and function return values are
38980allowed in conjunction with this construct.  Only sizes that are a power
38981of two are currently allowed.
38982
38983 All the basic integer types can be used as base types, both as signed
38984and as unsigned: 'char', 'short', 'int', 'long', 'long long'.  In
38985addition, 'float' and 'double' can be used to build floating-point
38986vector types.
38987
38988 Specifying a combination that is not valid for the current architecture
38989causes GCC to synthesize the instructions using a narrower mode.  For
38990example, if you specify a variable of type 'V4SI' and your architecture
38991does not allow for this specific SIMD type, GCC produces code that uses
389924 'SIs'.
38993
38994 The types defined in this manner can be used with a subset of normal C
38995operations.  Currently, GCC allows using the following operators on
38996these types: '+, -, *, /, unary minus, ^, |, &, ~, %'.
38997
38998 The operations behave like C++ 'valarrays'.  Addition is defined as the
38999addition of the corresponding elements of the operands.  For example, in
39000the code below, each of the 4 elements in A is added to the
39001corresponding 4 elements in B and the resulting vector is stored in C.
39002
39003     typedef int v4si __attribute__ ((vector_size (16)));
39004
39005     v4si a, b, c;
39006
39007     c = a + b;
39008
39009 Subtraction, multiplication, division, and the logical operations
39010operate in a similar manner.  Likewise, the result of using the unary
39011minus or complement operators on a vector type is a vector whose
39012elements are the negative or complemented values of the corresponding
39013elements in the operand.
39014
39015 It is possible to use shifting operators '<<', '>>' on integer-type
39016vectors.  The operation is defined as following: '{a0, a1, ..., an} >>
39017{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'.  Vector
39018operands must have the same number of elements.
39019
39020 For convenience, it is allowed to use a binary vector operation where
39021one operand is a scalar.  In that case the compiler transforms the
39022scalar operand into a vector where each element is the scalar from the
39023operation.  The transformation happens only if the scalar could be
39024safely converted to the vector-element type.  Consider the following
39025code.
39026
39027     typedef int v4si __attribute__ ((vector_size (16)));
39028
39029     v4si a, b, c;
39030     long l;
39031
39032     a = b + 1;    /* a = b + {1,1,1,1}; */
39033     a = 2 * b;    /* a = {2,2,2,2} * b; */
39034
39035     a = l + a;    /* Error, cannot convert long to int. */
39036
39037 Vectors can be subscripted as if the vector were an array with the same
39038number of elements and base type.  Out of bound accesses invoke
39039undefined behavior at run time.  Warnings for out of bound accesses for
39040vector subscription can be enabled with '-Warray-bounds'.
39041
39042 Vector comparison is supported with standard comparison operators: '==,
39043!=, <, <=, >, >='.  Comparison operands can be vector expressions of
39044integer-type or real-type.  Comparison between integer-type vectors and
39045real-type vectors are not supported.  The result of the comparison is a
39046vector of the same width and number of elements as the comparison
39047operands with a signed integral element type.
39048
39049 Vectors are compared element-wise producing 0 when comparison is false
39050and -1 (constant of the appropriate type where all bits are set)
39051otherwise.  Consider the following example.
39052
39053     typedef int v4si __attribute__ ((vector_size (16)));
39054
39055     v4si a = {1,2,3,4};
39056     v4si b = {3,2,1,4};
39057     v4si c;
39058
39059     c = a >  b;     /* The result would be {0, 0,-1, 0}  */
39060     c = a == b;     /* The result would be {0,-1, 0,-1}  */
39061
39062 In C++, the ternary operator '?:' is available.  'a?b:c', where 'b' and
39063'c' are vectors of the same type and 'a' is an integer vector with the
39064same number of elements of the same size as 'b' and 'c', computes all
39065three arguments and creates a vector '{a[0]?b[0]:c[0], a[1]?b[1]:c[1],
39066...}'.  Note that unlike in OpenCL, 'a' is thus interpreted as 'a != 0'
39067and not 'a < 0'.  As in the case of binary operations, this syntax is
39068also accepted when one of 'b' or 'c' is a scalar that is then
39069transformed into a vector.  If both 'b' and 'c' are scalars and the type
39070of 'true?b:c' has the same size as the element type of 'a', then 'b' and
39071'c' are converted to a vector type whose elements have this type and
39072with the same number of elements as 'a'.
39073
39074 In C++, the logic operators '!, &&, ||' are available for vectors.
39075'!v' is equivalent to 'v == 0', 'a && b' is equivalent to 'a!=0 & b!=0'
39076and 'a || b' is equivalent to 'a!=0 | b!=0'.  For mixed operations
39077between a scalar 's' and a vector 'v', 's && v' is equivalent to
39078's?v!=0:0' (the evaluation is short-circuit) and 'v && s' is equivalent
39079to 'v!=0 & (s?-1:0)'.
39080
39081 Vector shuffling is available using functions '__builtin_shuffle (vec,
39082mask)' and '__builtin_shuffle (vec0, vec1, mask)'.  Both functions
39083construct a permutation of elements from one or two vectors and return a
39084vector of the same type as the input vector(s).  The MASK is an integral
39085vector with the same width (W) and element count (N) as the output
39086vector.
39087
39088 The elements of the input vectors are numbered in memory ordering of
39089VEC0 beginning at 0 and VEC1 beginning at N.  The elements of MASK are
39090considered modulo N in the single-operand case and modulo 2*N in the
39091two-operand case.
39092
39093 Consider the following example,
39094
39095     typedef int v4si __attribute__ ((vector_size (16)));
39096
39097     v4si a = {1,2,3,4};
39098     v4si b = {5,6,7,8};
39099     v4si mask1 = {0,1,1,3};
39100     v4si mask2 = {0,4,2,5};
39101     v4si res;
39102
39103     res = __builtin_shuffle (a, mask1);       /* res is {1,2,2,4}  */
39104     res = __builtin_shuffle (a, b, mask2);    /* res is {1,5,3,6}  */
39105
39106 Note that '__builtin_shuffle' is intentionally semantically compatible
39107with the OpenCL 'shuffle' and 'shuffle2' functions.
39108
39109 You can declare variables and use them in function calls and returns,
39110as well as in assignments and some casts.  You can specify a vector type
39111as a return type for a function.  Vector types can also be used as
39112function arguments.  It is possible to cast from one vector type to
39113another, provided they are of the same size (in fact, you can also cast
39114vectors to and from other datatypes of the same size).
39115
39116 You cannot operate between vectors of different lengths or different
39117signedness without a cast.
39118
39119
39120File: gcc.info,  Node: Offsetof,  Next: __sync Builtins,  Prev: Vector Extensions,  Up: C Extensions
39121
391226.51 Support for 'offsetof'
39123===========================
39124
39125GCC implements for both C and C++ a syntactic extension to implement the
39126'offsetof' macro.
39127
39128     primary:
39129             "__builtin_offsetof" "(" typename "," offsetof_member_designator ")"
39130
39131     offsetof_member_designator:
39132               identifier
39133             | offsetof_member_designator "." identifier
39134             | offsetof_member_designator "[" expr "]"
39135
39136 This extension is sufficient such that
39137
39138     #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
39139
39140is a suitable definition of the 'offsetof' macro.  In C++, TYPE may be
39141dependent.  In either case, MEMBER may consist of a single identifier,
39142or a sequence of member accesses and array references.
39143
39144
39145File: gcc.info,  Node: __sync Builtins,  Next: __atomic Builtins,  Prev: Offsetof,  Up: C Extensions
39146
391476.52 Legacy '__sync' Built-in Functions for Atomic Memory Access
39148================================================================
39149
39150The following built-in functions are intended to be compatible with
39151those described in the 'Intel Itanium Processor-specific Application
39152Binary Interface', section 7.4.  As such, they depart from normal GCC
39153practice by not using the '__builtin_' prefix and also by being
39154overloaded so that they work on multiple types.
39155
39156 The definition given in the Intel documentation allows only for the use
39157of the types 'int', 'long', 'long long' or their unsigned counterparts.
39158GCC allows any scalar type that is 1, 2, 4 or 8 bytes in size other than
39159the C type '_Bool' or the C++ type 'bool'.  Operations on pointer
39160arguments are performed as if the operands were of the 'uintptr_t' type.
39161That is, they are not scaled by the size of the type to which the
39162pointer points.
39163
39164 These functions are implemented in terms of the '__atomic' builtins
39165(*note __atomic Builtins::).  They should not be used for new code which
39166should use the '__atomic' builtins instead.
39167
39168 Not all operations are supported by all target processors.  If a
39169particular operation cannot be implemented on the target processor, a
39170warning is generated and a call to an external function is generated.
39171The external function carries the same name as the built-in version,
39172with an additional suffix '_N' where N is the size of the data type.
39173
39174 In most cases, these built-in functions are considered a "full
39175barrier".  That is, no memory operand is moved across the operation,
39176either forward or backward.  Further, instructions are issued as
39177necessary to prevent the processor from speculating loads across the
39178operation and from queuing stores after the operation.
39179
39180 All of the routines are described in the Intel documentation to take
39181"an optional list of variables protected by the memory barrier".  It's
39182not clear what is meant by that; it could mean that _only_ the listed
39183variables are protected, or it could mean a list of additional variables
39184to be protected.  The list is ignored by GCC which treats it as empty.
39185GCC interprets an empty list as meaning that all globally accessible
39186variables should be protected.
39187
39188'TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
39189'TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
39190'TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
39191'TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
39192'TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
39193'TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
39194     These built-in functions perform the operation suggested by the
39195     name, and returns the value that had previously been in memory.
39196     That is, operations on integer operands have the following
39197     semantics.  Operations on pointer arguments are performed as if the
39198     operands were of the 'uintptr_t' type.  That is, they are not
39199     scaled by the size of the type to which the pointer points.
39200
39201          { tmp = *ptr; *ptr OP= value; return tmp; }
39202          { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand
39203
39204     The object pointed to by the first argument must be of integer or
39205     pointer type.  It must not be a boolean type.
39206
39207     _Note:_ GCC 4.4 and later implement '__sync_fetch_and_nand' as
39208     '*ptr = ~(tmp & value)' instead of '*ptr = ~tmp & value'.
39209
39210'TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
39211'TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
39212'TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
39213'TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
39214'TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
39215'TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
39216     These built-in functions perform the operation suggested by the
39217     name, and return the new value.  That is, operations on integer
39218     operands have the following semantics.  Operations on pointer
39219     operands are performed as if the operand's type were 'uintptr_t'.
39220
39221          { *ptr OP= value; return *ptr; }
39222          { *ptr = ~(*ptr & value); return *ptr; }   // nand
39223
39224     The same constraints on arguments apply as for the corresponding
39225     '__sync_op_and_fetch' built-in functions.
39226
39227     _Note:_ GCC 4.4 and later implement '__sync_nand_and_fetch' as
39228     '*ptr = ~(*ptr & value)' instead of '*ptr = ~*ptr & value'.
39229
39230'bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
39231'TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
39232     These built-in functions perform an atomic compare and swap.  That
39233     is, if the current value of '*PTR' is OLDVAL, then write NEWVAL
39234     into '*PTR'.
39235
39236     The "bool" version returns true if the comparison is successful and
39237     NEWVAL is written.  The "val" version returns the contents of
39238     '*PTR' before the operation.
39239
39240'__sync_synchronize (...)'
39241     This built-in function issues a full memory barrier.
39242
39243'TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
39244     This built-in function, as described by Intel, is not a traditional
39245     test-and-set operation, but rather an atomic exchange operation.
39246     It writes VALUE into '*PTR', and returns the previous contents of
39247     '*PTR'.
39248
39249     Many targets have only minimal support for such locks, and do not
39250     support a full exchange operation.  In this case, a target may
39251     support reduced functionality here by which the _only_ valid value
39252     to store is the immediate constant 1.  The exact value actually
39253     stored in '*PTR' is implementation defined.
39254
39255     This built-in function is not a full barrier, but rather an
39256     "acquire barrier".  This means that references after the operation
39257     cannot move to (or be speculated to) before the operation, but
39258     previous memory stores may not be globally visible yet, and
39259     previous memory loads may not yet be satisfied.
39260
39261'void __sync_lock_release (TYPE *ptr, ...)'
39262     This built-in function releases the lock acquired by
39263     '__sync_lock_test_and_set'.  Normally this means writing the
39264     constant 0 to '*PTR'.
39265
39266     This built-in function is not a full barrier, but rather a "release
39267     barrier".  This means that all previous memory stores are globally
39268     visible, and all previous memory loads have been satisfied, but
39269     following memory reads are not prevented from being speculated to
39270     before the barrier.
39271
39272
39273File: gcc.info,  Node: __atomic Builtins,  Next: Integer Overflow Builtins,  Prev: __sync Builtins,  Up: C Extensions
39274
392756.53 Built-in Functions for Memory Model Aware Atomic Operations
39276================================================================
39277
39278The following built-in functions approximately match the requirements
39279for the C++11 memory model.  They are all identified by being prefixed
39280with '__atomic' and most are overloaded so that they work with multiple
39281types.
39282
39283 These functions are intended to replace the legacy '__sync' builtins.
39284The main difference is that the memory order that is requested is a
39285parameter to the functions.  New code should always use the '__atomic'
39286builtins rather than the '__sync' builtins.
39287
39288 Note that the '__atomic' builtins assume that programs will conform to
39289the C++11 memory model.  In particular, they assume that programs are
39290free of data races.  See the C++11 standard for detailed requirements.
39291
39292 The '__atomic' builtins can be used with any integral scalar or pointer
39293type that is 1, 2, 4, or 8 bytes in length.  16-byte integral types are
39294also allowed if '__int128' (*note __int128::) is supported by the
39295architecture.
39296
39297 The four non-arithmetic functions (load, store, exchange, and
39298compare_exchange) all have a generic version as well.  This generic
39299version works on any data type.  It uses the lock-free built-in function
39300if the specific data type size makes that possible; otherwise, an
39301external call is left to be resolved at run time.  This external call is
39302the same format with the addition of a 'size_t' parameter inserted as
39303the first parameter indicating the size of the object being pointed to.
39304All objects must be the same size.
39305
39306 There are 6 different memory orders that can be specified.  These map
39307to the C++11 memory orders with the same names, see the C++11 standard
39308or the GCC wiki on atomic synchronization
39309(http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for detailed
39310definitions.  Individual targets may also support additional memory
39311orders for use on specific architectures.  Refer to the target
39312documentation for details of these.
39313
39314 An atomic operation can both constrain code motion and be mapped to
39315hardware instructions for synchronization between threads (e.g., a
39316fence).  To which extent this happens is controlled by the memory
39317orders, which are listed here in approximately ascending order of
39318strength.  The description of each memory order is only meant to roughly
39319illustrate the effects and is not a specification; see the C++11 memory
39320model for precise semantics.
39321
39322'__ATOMIC_RELAXED'
39323     Implies no inter-thread ordering constraints.
39324'__ATOMIC_CONSUME'
39325     This is currently implemented using the stronger '__ATOMIC_ACQUIRE'
39326     memory order because of a deficiency in C++11's semantics for
39327     'memory_order_consume'.
39328'__ATOMIC_ACQUIRE'
39329     Creates an inter-thread happens-before constraint from the release
39330     (or stronger) semantic store to this acquire load.  Can prevent
39331     hoisting of code to before the operation.
39332'__ATOMIC_RELEASE'
39333     Creates an inter-thread happens-before constraint to acquire (or
39334     stronger) semantic loads that read from this release store.  Can
39335     prevent sinking of code to after the operation.
39336'__ATOMIC_ACQ_REL'
39337     Combines the effects of both '__ATOMIC_ACQUIRE' and
39338     '__ATOMIC_RELEASE'.
39339'__ATOMIC_SEQ_CST'
39340     Enforces total ordering with all other '__ATOMIC_SEQ_CST'
39341     operations.
39342
39343 Note that in the C++11 memory model, _fences_ (e.g.,
39344'__atomic_thread_fence') take effect in combination with other atomic
39345operations on specific memory locations (e.g., atomic loads); operations
39346on specific memory locations do not necessarily affect other operations
39347in the same way.
39348
39349 Target architectures are encouraged to provide their own patterns for
39350each of the atomic built-in functions.  If no target is provided, the
39351original non-memory model set of '__sync' atomic built-in functions are
39352used, along with any required synchronization fences surrounding it in
39353order to achieve the proper behavior.  Execution in this case is subject
39354to the same restrictions as those built-in functions.
39355
39356 If there is no pattern or mechanism to provide a lock-free instruction
39357sequence, a call is made to an external routine with the same parameters
39358to be resolved at run time.
39359
39360 When implementing patterns for these built-in functions, the memory
39361order parameter can be ignored as long as the pattern implements the
39362most restrictive '__ATOMIC_SEQ_CST' memory order.  Any of the other
39363memory orders execute correctly with this memory order but they may not
39364execute as efficiently as they could with a more appropriate
39365implementation of the relaxed requirements.
39366
39367 Note that the C++11 standard allows for the memory order parameter to
39368be determined at run time rather than at compile time.  These built-in
39369functions map any run-time value to '__ATOMIC_SEQ_CST' rather than
39370invoke a runtime library call or inline a switch statement.  This is
39371standard compliant, safe, and the simplest approach for now.
39372
39373 The memory order parameter is a signed int, but only the lower 16 bits
39374are reserved for the memory order.  The remainder of the signed int is
39375reserved for target use and should be 0.  Use of the predefined atomic
39376values ensures proper usage.
39377
39378 -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memorder)
39379     This built-in function implements an atomic load operation.  It
39380     returns the contents of '*PTR'.
39381
39382     The valid memory order variants are '__ATOMIC_RELAXED',
39383     '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', and '__ATOMIC_CONSUME'.
39384
39385 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int
39386          memorder)
39387     This is the generic version of an atomic load.  It returns the
39388     contents of '*PTR' in '*RET'.
39389
39390 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int
39391          memorder)
39392     This built-in function implements an atomic store operation.  It
39393     writes 'VAL' into '*PTR'.
39394
39395     The valid memory order variants are '__ATOMIC_RELAXED',
39396     '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
39397
39398 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int
39399          memorder)
39400     This is the generic version of an atomic store.  It stores the
39401     value of '*VAL' into '*PTR'.
39402
39403 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val,
39404          int memorder)
39405     This built-in function implements an atomic exchange operation.  It
39406     writes VAL into '*PTR', and returns the previous contents of
39407     '*PTR'.
39408
39409     The valid memory order variants are '__ATOMIC_RELAXED',
39410     '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', '__ATOMIC_RELEASE', and
39411     '__ATOMIC_ACQ_REL'.
39412
39413 -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val,
39414          TYPE *ret, int memorder)
39415     This is the generic version of an atomic exchange.  It stores the
39416     contents of '*VAL' into '*PTR'.  The original value of '*PTR' is
39417     copied into '*RET'.
39418
39419 -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr, TYPE
39420          *expected, TYPE desired, bool weak, int success_memorder, int
39421          failure_memorder)
39422     This built-in function implements an atomic compare and exchange
39423     operation.  This compares the contents of '*PTR' with the contents
39424     of '*EXPECTED'.  If equal, the operation is a _read-modify-write_
39425     operation that writes DESIRED into '*PTR'.  If they are not equal,
39426     the operation is a _read_ and the current contents of '*PTR' are
39427     written into '*EXPECTED'.  WEAK is true for weak compare_exchange,
39428     which may fail spuriously, and false for the strong variation,
39429     which never fails spuriously.  Many targets only offer the strong
39430     variation and ignore the parameter.  When in doubt, use the strong
39431     variation.
39432
39433     If DESIRED is written into '*PTR' then true is returned and memory
39434     is affected according to the memory order specified by
39435     SUCCESS_MEMORDER.  There are no restrictions on what memory order
39436     can be used here.
39437
39438     Otherwise, false is returned and memory is affected according to
39439     FAILURE_MEMORDER.  This memory order cannot be '__ATOMIC_RELEASE'
39440     nor '__ATOMIC_ACQ_REL'.  It also cannot be a stronger order than
39441     that specified by SUCCESS_MEMORDER.
39442
39443 -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE
39444          *expected, TYPE *desired, bool weak, int success_memorder, int
39445          failure_memorder)
39446     This built-in function implements the generic version of
39447     '__atomic_compare_exchange'.  The function is virtually identical
39448     to '__atomic_compare_exchange_n', except the desired value is also
39449     a pointer.
39450
39451 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val, int
39452          memorder)
39453 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val, int
39454          memorder)
39455 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val, int
39456          memorder)
39457 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val, int
39458          memorder)
39459 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int
39460          memorder)
39461 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val,
39462          int memorder)
39463     These built-in functions perform the operation suggested by the
39464     name, and return the result of the operation.  Operations on
39465     pointer arguments are performed as if the operands were of the
39466     'uintptr_t' type.  That is, they are not scaled by the size of the
39467     type to which the pointer points.
39468
39469          { *ptr OP= val; return *ptr; }
39470
39471     The object pointed to by the first argument must be of integer or
39472     pointer type.  It must not be a boolean type.  All memory orders
39473     are valid.
39474
39475 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val, int
39476          memorder)
39477 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val, int
39478          memorder)
39479 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val, int
39480          memorder)
39481 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val, int
39482          memorder)
39483 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int
39484          memorder)
39485 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val,
39486          int memorder)
39487     These built-in functions perform the operation suggested by the
39488     name, and return the value that had previously been in '*PTR'.
39489     Operations on pointer arguments are performed as if the operands
39490     were of the 'uintptr_t' type.  That is, they are not scaled by the
39491     size of the type to which the pointer points.
39492
39493          { tmp = *ptr; *ptr OP= val; return tmp; }
39494
39495     The same constraints on arguments apply as for the corresponding
39496     '__atomic_op_fetch' built-in functions.  All memory orders are
39497     valid.
39498
39499 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int
39500          memorder)
39501
39502     This built-in function performs an atomic test-and-set operation on
39503     the byte at '*PTR'.  The byte is set to some implementation defined
39504     nonzero "set" value and the return value is 'true' if and only if
39505     the previous contents were "set".  It should be only used for
39506     operands of type 'bool' or 'char'.  For other types only part of
39507     the value may be set.
39508
39509     All memory orders are valid.
39510
39511 -- Built-in Function: void __atomic_clear (bool *ptr, int memorder)
39512
39513     This built-in function performs an atomic clear operation on
39514     '*PTR'.  After the operation, '*PTR' contains 0.  It should be only
39515     used for operands of type 'bool' or 'char' and in conjunction with
39516     '__atomic_test_and_set'.  For other types it may only clear
39517     partially.  If the type is not 'bool' prefer using
39518     '__atomic_store'.
39519
39520     The valid memory order variants are '__ATOMIC_RELAXED',
39521     '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
39522
39523 -- Built-in Function: void __atomic_thread_fence (int memorder)
39524
39525     This built-in function acts as a synchronization fence between
39526     threads based on the specified memory order.
39527
39528     All memory orders are valid.
39529
39530 -- Built-in Function: void __atomic_signal_fence (int memorder)
39531
39532     This built-in function acts as a synchronization fence between a
39533     thread and signal handlers based in the same thread.
39534
39535     All memory orders are valid.
39536
39537 -- Built-in Function: bool __atomic_always_lock_free (size_t size, void
39538          *ptr)
39539
39540     This built-in function returns true if objects of SIZE bytes always
39541     generate lock-free atomic instructions for the target architecture.
39542     SIZE must resolve to a compile-time constant and the result also
39543     resolves to a compile-time constant.
39544
39545     PTR is an optional pointer to the object that may be used to
39546     determine alignment.  A value of 0 indicates typical alignment
39547     should be used.  The compiler may also ignore this parameter.
39548
39549          if (__atomic_always_lock_free (sizeof (long long), 0))
39550
39551 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void
39552          *ptr)
39553
39554     This built-in function returns true if objects of SIZE bytes always
39555     generate lock-free atomic instructions for the target architecture.
39556     If the built-in function is not known to be lock-free, a call is
39557     made to a runtime routine named '__atomic_is_lock_free'.
39558
39559     PTR is an optional pointer to the object that may be used to
39560     determine alignment.  A value of 0 indicates typical alignment
39561     should be used.  The compiler may also ignore this parameter.
39562
39563
39564File: gcc.info,  Node: Integer Overflow Builtins,  Next: x86 specific memory model extensions for transactional memory,  Prev: __atomic Builtins,  Up: C Extensions
39565
395666.54 Built-in Functions to Perform Arithmetic with Overflow Checking
39567====================================================================
39568
39569The following built-in functions allow performing simple arithmetic
39570operations together with checking whether the operations overflowed.
39571
39572 -- Built-in Function: bool __builtin_add_overflow (TYPE1 a, TYPE2 b,
39573          TYPE3 *res)
39574 -- Built-in Function: bool __builtin_sadd_overflow (int a, int b, int
39575          *res)
39576 -- Built-in Function: bool __builtin_saddl_overflow (long int a, long
39577          int b, long int *res)
39578 -- Built-in Function: bool __builtin_saddll_overflow (long long int a,
39579          long long int b, long long int *res)
39580 -- Built-in Function: bool __builtin_uadd_overflow (unsigned int a,
39581          unsigned int b, unsigned int *res)
39582 -- Built-in Function: bool __builtin_uaddl_overflow (unsigned long int
39583          a, unsigned long int b, unsigned long int *res)
39584 -- Built-in Function: bool __builtin_uaddll_overflow (unsigned long
39585          long int a, unsigned long long int b, unsigned long long int
39586          *res)
39587
39588     These built-in functions promote the first two operands into
39589     infinite precision signed type and perform addition on those
39590     promoted operands.  The result is then cast to the type the third
39591     pointer argument points to and stored there.  If the stored result
39592     is equal to the infinite precision result, the built-in functions
39593     return false, otherwise they return true.  As the addition is
39594     performed in infinite signed precision, these built-in functions
39595     have fully defined behavior for all argument values.
39596
39597     The first built-in function allows arbitrary integral types for
39598     operands and the result type must be pointer to some integral type
39599     other than enumerated or boolean type, the rest of the built-in
39600     functions have explicit integer types.
39601
39602     The compiler will attempt to use hardware instructions to implement
39603     these built-in functions where possible, like conditional jump on
39604     overflow after addition, conditional jump on carry etc.
39605
39606 -- Built-in Function: bool __builtin_sub_overflow (TYPE1 a, TYPE2 b,
39607          TYPE3 *res)
39608 -- Built-in Function: bool __builtin_ssub_overflow (int a, int b, int
39609          *res)
39610 -- Built-in Function: bool __builtin_ssubl_overflow (long int a, long
39611          int b, long int *res)
39612 -- Built-in Function: bool __builtin_ssubll_overflow (long long int a,
39613          long long int b, long long int *res)
39614 -- Built-in Function: bool __builtin_usub_overflow (unsigned int a,
39615          unsigned int b, unsigned int *res)
39616 -- Built-in Function: bool __builtin_usubl_overflow (unsigned long int
39617          a, unsigned long int b, unsigned long int *res)
39618 -- Built-in Function: bool __builtin_usubll_overflow (unsigned long
39619          long int a, unsigned long long int b, unsigned long long int
39620          *res)
39621
39622     These built-in functions are similar to the add overflow checking
39623     built-in functions above, except they perform subtraction, subtract
39624     the second argument from the first one, instead of addition.
39625
39626 -- Built-in Function: bool __builtin_mul_overflow (TYPE1 a, TYPE2 b,
39627          TYPE3 *res)
39628 -- Built-in Function: bool __builtin_smul_overflow (int a, int b, int
39629          *res)
39630 -- Built-in Function: bool __builtin_smull_overflow (long int a, long
39631          int b, long int *res)
39632 -- Built-in Function: bool __builtin_smulll_overflow (long long int a,
39633          long long int b, long long int *res)
39634 -- Built-in Function: bool __builtin_umul_overflow (unsigned int a,
39635          unsigned int b, unsigned int *res)
39636 -- Built-in Function: bool __builtin_umull_overflow (unsigned long int
39637          a, unsigned long int b, unsigned long int *res)
39638 -- Built-in Function: bool __builtin_umulll_overflow (unsigned long
39639          long int a, unsigned long long int b, unsigned long long int
39640          *res)
39641
39642     These built-in functions are similar to the add overflow checking
39643     built-in functions above, except they perform multiplication,
39644     instead of addition.
39645
39646 The following built-in functions allow checking if simple arithmetic
39647operation would overflow.
39648
39649 -- Built-in Function: bool __builtin_add_overflow_p (TYPE1 a, TYPE2 b,
39650          TYPE3 c)
39651 -- Built-in Function: bool __builtin_sub_overflow_p (TYPE1 a, TYPE2 b,
39652          TYPE3 c)
39653 -- Built-in Function: bool __builtin_mul_overflow_p (TYPE1 a, TYPE2 b,
39654          TYPE3 c)
39655
39656     These built-in functions are similar to '__builtin_add_overflow',
39657     '__builtin_sub_overflow', or '__builtin_mul_overflow', except that
39658     they don't store the result of the arithmetic operation anywhere
39659     and the last argument is not a pointer, but some expression with
39660     integral type other than enumerated or boolean type.
39661
39662     The built-in functions promote the first two operands into infinite
39663     precision signed type and perform addition on those promoted
39664     operands.  The result is then cast to the type of the third
39665     argument.  If the cast result is equal to the infinite precision
39666     result, the built-in functions return false, otherwise they return
39667     true.  The value of the third argument is ignored, just the side
39668     effects in the third argument are evaluated, and no integral
39669     argument promotions are performed on the last argument.  If the
39670     third argument is a bit-field, the type used for the result cast
39671     has the precision and signedness of the given bit-field, rather
39672     than precision and signedness of the underlying type.
39673
39674     For example, the following macro can be used to portably check, at
39675     compile-time, whether or not adding two constant integers will
39676     overflow, and perform the addition only when it is known to be safe
39677     and not to trigger a '-Woverflow' warning.
39678
39679          #define INT_ADD_OVERFLOW_P(a, b) \
39680             __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0)
39681
39682          enum {
39683              A = INT_MAX, B = 3,
39684              C = INT_ADD_OVERFLOW_P (A, B) ? 0 : A + B,
39685              D = __builtin_add_overflow_p (1, SCHAR_MAX, (signed char) 0)
39686          };
39687
39688     The compiler will attempt to use hardware instructions to implement
39689     these built-in functions where possible, like conditional jump on
39690     overflow after addition, conditional jump on carry etc.
39691
39692
39693File: gcc.info,  Node: x86 specific memory model extensions for transactional memory,  Next: Object Size Checking,  Prev: Integer Overflow Builtins,  Up: C Extensions
39694
396956.55 x86-Specific Memory Model Extensions for Transactional Memory
39696==================================================================
39697
39698The x86 architecture supports additional memory ordering flags to mark
39699critical sections for hardware lock elision.  These must be specified in
39700addition to an existing memory order to atomic intrinsics.
39701
39702'__ATOMIC_HLE_ACQUIRE'
39703     Start lock elision on a lock variable.  Memory order must be
39704     '__ATOMIC_ACQUIRE' or stronger.
39705'__ATOMIC_HLE_RELEASE'
39706     End lock elision on a lock variable.  Memory order must be
39707     '__ATOMIC_RELEASE' or stronger.
39708
39709 When a lock acquire fails, it is required for good performance to abort
39710the transaction quickly.  This can be done with a '_mm_pause'.
39711
39712     #include <immintrin.h> // For _mm_pause
39713
39714     int lockvar;
39715
39716     /* Acquire lock with lock elision */
39717     while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
39718         _mm_pause(); /* Abort failed transaction */
39719     ...
39720     /* Free lock with lock elision */
39721     __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
39722
39723
39724File: gcc.info,  Node: Object Size Checking,  Next: Pointer Bounds Checker builtins,  Prev: x86 specific memory model extensions for transactional memory,  Up: C Extensions
39725
397266.56 Object Size Checking Built-in Functions
39727============================================
39728
39729GCC implements a limited buffer overflow protection mechanism that can
39730prevent some buffer overflow attacks by determining the sizes of objects
39731into which data is about to be written and preventing the writes when
39732the size isn't sufficient.  The built-in functions described below yield
39733the best results when used together and when optimization is enabled.
39734For example, to detect object sizes across function boundaries or to
39735follow pointer assignments through non-trivial control flow they rely on
39736various optimization passes enabled with '-O2'.  However, to a limited
39737extent, they can be used without optimization as well.
39738
39739 -- Built-in Function: size_t __builtin_object_size (const void * PTR,
39740          int TYPE)
39741     is a built-in construct that returns a constant number of bytes
39742     from PTR to the end of the object PTR pointer points to (if known
39743     at compile time).  '__builtin_object_size' never evaluates its
39744     arguments for side effects.  If there are any side effects in them,
39745     it returns '(size_t) -1' for TYPE 0 or 1 and '(size_t) 0' for TYPE
39746     2 or 3.  If there are multiple objects PTR can point to and all of
39747     them are known at compile time, the returned number is the maximum
39748     of remaining byte counts in those objects if TYPE & 2 is 0 and
39749     minimum if nonzero.  If it is not possible to determine which
39750     objects PTR points to at compile time, '__builtin_object_size'
39751     should return '(size_t) -1' for TYPE 0 or 1 and '(size_t) 0' for
39752     TYPE 2 or 3.
39753
39754     TYPE is an integer constant from 0 to 3.  If the least significant
39755     bit is clear, objects are whole variables, if it is set, a closest
39756     surrounding subobject is considered the object a pointer points to.
39757     The second bit determines if maximum or minimum of remaining bytes
39758     is computed.
39759
39760          struct V { char buf1[10]; int b; char buf2[10]; } var;
39761          char *p = &var.buf1[1], *q = &var.b;
39762
39763          /* Here the object p points to is var.  */
39764          assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
39765          /* The subobject p points to is var.buf1.  */
39766          assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
39767          /* The object q points to is var.  */
39768          assert (__builtin_object_size (q, 0)
39769                  == (char *) (&var + 1) - (char *) &var.b);
39770          /* The subobject q points to is var.b.  */
39771          assert (__builtin_object_size (q, 1) == sizeof (var.b));
39772
39773 There are built-in functions added for many common string operation
39774functions, e.g., for 'memcpy' '__builtin___memcpy_chk' built-in is
39775provided.  This built-in has an additional last argument, which is the
39776number of bytes remaining in the object the DEST argument points to or
39777'(size_t) -1' if the size is not known.
39778
39779 The built-in functions are optimized into the normal string functions
39780like 'memcpy' if the last argument is '(size_t) -1' or if it is known at
39781compile time that the destination object will not be overflowed.  If the
39782compiler can determine at compile time that the object will always be
39783overflowed, it issues a warning.
39784
39785 The intended use can be e.g.
39786
39787     #undef memcpy
39788     #define bos0(dest) __builtin_object_size (dest, 0)
39789     #define memcpy(dest, src, n) \
39790       __builtin___memcpy_chk (dest, src, n, bos0 (dest))
39791
39792     char *volatile p;
39793     char buf[10];
39794     /* It is unknown what object p points to, so this is optimized
39795        into plain memcpy - no checking is possible.  */
39796     memcpy (p, "abcde", n);
39797     /* Destination is known and length too.  It is known at compile
39798        time there will be no overflow.  */
39799     memcpy (&buf[5], "abcde", 5);
39800     /* Destination is known, but the length is not known at compile time.
39801        This will result in __memcpy_chk call that can check for overflow
39802        at run time.  */
39803     memcpy (&buf[5], "abcde", n);
39804     /* Destination is known and it is known at compile time there will
39805        be overflow.  There will be a warning and __memcpy_chk call that
39806        will abort the program at run time.  */
39807     memcpy (&buf[6], "abcde", 5);
39808
39809 Such built-in functions are provided for 'memcpy', 'mempcpy',
39810'memmove', 'memset', 'strcpy', 'stpcpy', 'strncpy', 'strcat' and
39811'strncat'.
39812
39813 There are also checking built-in functions for formatted output
39814functions.
39815     int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
39816     int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
39817                                   const char *fmt, ...);
39818     int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
39819                                   va_list ap);
39820     int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
39821                                    const char *fmt, va_list ap);
39822
39823 The added FLAG argument is passed unchanged to '__sprintf_chk' etc.
39824functions and can contain implementation specific flags on what
39825additional security measures the checking function might take, such as
39826handling '%n' differently.
39827
39828 The OS argument is the object size S points to, like in the other
39829built-in functions.  There is a small difference in the behavior though,
39830if OS is '(size_t) -1', the built-in functions are optimized into the
39831non-checking functions only if FLAG is 0, otherwise the checking
39832function is called with OS argument set to '(size_t) -1'.
39833
39834 In addition to this, there are checking built-in functions
39835'__builtin___printf_chk', '__builtin___vprintf_chk',
39836'__builtin___fprintf_chk' and '__builtin___vfprintf_chk'.  These have
39837just one additional argument, FLAG, right before format string FMT.  If
39838the compiler is able to optimize them to 'fputc' etc. functions, it
39839does, otherwise the checking function is called and the FLAG argument
39840passed to it.
39841
39842
39843File: gcc.info,  Node: Pointer Bounds Checker builtins,  Next: Other Builtins,  Prev: Object Size Checking,  Up: C Extensions
39844
398456.57 Pointer Bounds Checker Built-in Functions
39846==============================================
39847
39848GCC provides a set of built-in functions to control Pointer Bounds
39849Checker instrumentation.  Note that all Pointer Bounds Checker builtins
39850can be used even if you compile with Pointer Bounds Checker off
39851('-fno-check-pointer-bounds').  The behavior may differ in such case as
39852documented below.
39853
39854 -- Built-in Function: void * __builtin___bnd_set_ptr_bounds (const void
39855          *Q, size_t SIZE)
39856
39857     This built-in function returns a new pointer with the value of Q,
39858     and associate it with the bounds [Q, Q+SIZE-1].  With Pointer
39859     Bounds Checker off, the built-in function just returns the first
39860     argument.
39861
39862          extern void *__wrap_malloc (size_t n)
39863          {
39864            void *p = (void *)__real_malloc (n);
39865            if (!p) return __builtin___bnd_null_ptr_bounds (p);
39866            return __builtin___bnd_set_ptr_bounds (p, n);
39867          }
39868
39869 -- Built-in Function: void * __builtin___bnd_narrow_ptr_bounds (const
39870          void *P, const void *Q, size_t SIZE)
39871
39872     This built-in function returns a new pointer with the value of P
39873     and associates it with the narrowed bounds formed by the
39874     intersection of bounds associated with Q and the bounds [P, P +
39875     SIZE - 1].  With Pointer Bounds Checker off, the built-in function
39876     just returns the first argument.
39877
39878          void init_objects (object *objs, size_t size)
39879          {
39880            size_t i;
39881            /* Initialize objects one-by-one passing pointers with bounds of
39882               an object, not the full array of objects.  */
39883            for (i = 0; i < size; i++)
39884              init_object (__builtin___bnd_narrow_ptr_bounds (objs + i, objs,
39885                                                              sizeof(object)));
39886          }
39887
39888 -- Built-in Function: void * __builtin___bnd_copy_ptr_bounds (const
39889          void *Q, const void *R)
39890
39891     This built-in function returns a new pointer with the value of Q,
39892     and associates it with the bounds already associated with pointer
39893     R.  With Pointer Bounds Checker off, the built-in function just
39894     returns the first argument.
39895
39896          /* Here is a way to get pointer to object's field but
39897             still with the full object's bounds.  */
39898          int *field_ptr = __builtin___bnd_copy_ptr_bounds (&objptr->int_field,
39899                                                            objptr);
39900
39901 -- Built-in Function: void * __builtin___bnd_init_ptr_bounds (const
39902          void *Q)
39903
39904     This built-in function returns a new pointer with the value of Q,
39905     and associates it with INIT (allowing full memory access) bounds.
39906     With Pointer Bounds Checker off, the built-in function just returns
39907     the first argument.
39908
39909 -- Built-in Function: void * __builtin___bnd_null_ptr_bounds (const
39910          void *Q)
39911
39912     This built-in function returns a new pointer with the value of Q,
39913     and associates it with NULL (allowing no memory access) bounds.
39914     With Pointer Bounds Checker off, the built-in function just returns
39915     the first argument.
39916
39917 -- Built-in Function: void __builtin___bnd_store_ptr_bounds (const void
39918          **PTR_ADDR, const void *PTR_VAL)
39919
39920     This built-in function stores the bounds associated with pointer
39921     PTR_VAL and location PTR_ADDR into Bounds Table.  This can be
39922     useful to propagate bounds from legacy code without touching the
39923     associated pointer's memory when pointers are copied as integers.
39924     With Pointer Bounds Checker off, the built-in function call is
39925     ignored.
39926
39927 -- Built-in Function: void __builtin___bnd_chk_ptr_lbounds (const void
39928          *Q)
39929
39930     This built-in function checks if the pointer Q is within the lower
39931     bound of its associated bounds.  With Pointer Bounds Checker off,
39932     the built-in function call is ignored.
39933
39934          extern void *__wrap_memset (void *dst, int c, size_t len)
39935          {
39936            if (len > 0)
39937              {
39938                __builtin___bnd_chk_ptr_lbounds (dst);
39939                __builtin___bnd_chk_ptr_ubounds ((char *)dst + len - 1);
39940                __real_memset (dst, c, len);
39941              }
39942            return dst;
39943          }
39944
39945 -- Built-in Function: void __builtin___bnd_chk_ptr_ubounds (const void
39946          *Q)
39947
39948     This built-in function checks if the pointer Q is within the upper
39949     bound of its associated bounds.  With Pointer Bounds Checker off,
39950     the built-in function call is ignored.
39951
39952 -- Built-in Function: void __builtin___bnd_chk_ptr_bounds (const void
39953          *Q, size_t SIZE)
39954
39955     This built-in function checks if [Q, Q + SIZE - 1] is within the
39956     lower and upper bounds associated with Q.  With Pointer Bounds
39957     Checker off, the built-in function call is ignored.
39958
39959          extern void *__wrap_memcpy (void *dst, const void *src, size_t n)
39960          {
39961            if (n > 0)
39962              {
39963                __bnd_chk_ptr_bounds (dst, n);
39964                __bnd_chk_ptr_bounds (src, n);
39965                __real_memcpy (dst, src, n);
39966              }
39967            return dst;
39968          }
39969
39970 -- Built-in Function: const void * __builtin___bnd_get_ptr_lbound
39971          (const void *Q)
39972
39973     This built-in function returns the lower bound associated with the
39974     pointer Q, as a pointer value.  This is useful for debugging using
39975     'printf'.  With Pointer Bounds Checker off, the built-in function
39976     returns 0.
39977
39978          void *lb = __builtin___bnd_get_ptr_lbound (q);
39979          void *ub = __builtin___bnd_get_ptr_ubound (q);
39980          printf ("q = %p  lb(q) = %p  ub(q) = %p", q, lb, ub);
39981
39982 -- Built-in Function: const void * __builtin___bnd_get_ptr_ubound
39983          (const void *Q)
39984
39985     This built-in function returns the upper bound (which is a pointer)
39986     associated with the pointer Q.  With Pointer Bounds Checker off,
39987     the built-in function returns -1.
39988
39989
39990File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Pointer Bounds Checker builtins,  Up: C Extensions
39991
399926.58 Other Built-in Functions Provided by GCC
39993=============================================
39994
39995GCC provides a large number of built-in functions other than the ones
39996mentioned above.  Some of these are for internal use in the processing
39997of exceptions or variable-length argument lists and are not documented
39998here because they may change from time to time; we do not recommend
39999general use of these functions.
40000
40001 The remaining functions are provided for optimization purposes.
40002
40003 With the exception of built-ins that have library equivalents such as
40004the standard C library functions discussed below, or that expand to
40005library calls, GCC built-in functions are always expanded inline and
40006thus do not have corresponding entry points and their address cannot be
40007obtained.  Attempting to use them in an expression other than a function
40008call results in a compile-time error.
40009
40010 GCC includes built-in versions of many of the functions in the standard
40011C library.  These functions come in two forms: one whose names start
40012with the '__builtin_' prefix, and the other without.  Both forms have
40013the same type (including prototype), the same address (when their
40014address is taken), and the same meaning as the C library functions even
40015if you specify the '-fno-builtin' option *note C Dialect Options::).
40016Many of these functions are only optimized in certain cases; if they are
40017not optimized in a particular case, a call to the library function is
40018emitted.
40019
40020 Outside strict ISO C mode ('-ansi', '-std=c90', '-std=c99' or
40021'-std=c11'), the functions '_exit', 'alloca', 'bcmp', 'bzero',
40022'dcgettext', 'dgettext', 'dremf', 'dreml', 'drem', 'exp10f', 'exp10l',
40023'exp10', 'ffsll', 'ffsl', 'ffs', 'fprintf_unlocked', 'fputs_unlocked',
40024'gammaf', 'gammal', 'gamma', 'gammaf_r', 'gammal_r', 'gamma_r',
40025'gettext', 'index', 'isascii', 'j0f', 'j0l', 'j0', 'j1f', 'j1l', 'j1',
40026'jnf', 'jnl', 'jn', 'lgammaf_r', 'lgammal_r', 'lgamma_r', 'mempcpy',
40027'pow10f', 'pow10l', 'pow10', 'printf_unlocked', 'rindex', 'scalbf',
40028'scalbl', 'scalb', 'signbit', 'signbitf', 'signbitl', 'signbitd32',
40029'signbitd64', 'signbitd128', 'significandf', 'significandl',
40030'significand', 'sincosf', 'sincosl', 'sincos', 'stpcpy', 'stpncpy',
40031'strcasecmp', 'strdup', 'strfmon', 'strncasecmp', 'strndup', 'toascii',
40032'y0f', 'y0l', 'y0', 'y1f', 'y1l', 'y1', 'ynf', 'ynl' and 'yn' may be
40033handled as built-in functions.  All these functions have corresponding
40034versions prefixed with '__builtin_', which may be used even in strict
40035C90 mode.
40036
40037 The ISO C99 functions '_Exit', 'acoshf', 'acoshl', 'acosh', 'asinhf',
40038'asinhl', 'asinh', 'atanhf', 'atanhl', 'atanh', 'cabsf', 'cabsl',
40039'cabs', 'cacosf', 'cacoshf', 'cacoshl', 'cacosh', 'cacosl', 'cacos',
40040'cargf', 'cargl', 'carg', 'casinf', 'casinhf', 'casinhl', 'casinh',
40041'casinl', 'casin', 'catanf', 'catanhf', 'catanhl', 'catanh', 'catanl',
40042'catan', 'cbrtf', 'cbrtl', 'cbrt', 'ccosf', 'ccoshf', 'ccoshl', 'ccosh',
40043'ccosl', 'ccos', 'cexpf', 'cexpl', 'cexp', 'cimagf', 'cimagl', 'cimag',
40044'clogf', 'clogl', 'clog', 'conjf', 'conjl', 'conj', 'copysignf',
40045'copysignl', 'copysign', 'cpowf', 'cpowl', 'cpow', 'cprojf', 'cprojl',
40046'cproj', 'crealf', 'creall', 'creal', 'csinf', 'csinhf', 'csinhl',
40047'csinh', 'csinl', 'csin', 'csqrtf', 'csqrtl', 'csqrt', 'ctanf',
40048'ctanhf', 'ctanhl', 'ctanh', 'ctanl', 'ctan', 'erfcf', 'erfcl', 'erfc',
40049'erff', 'erfl', 'erf', 'exp2f', 'exp2l', 'exp2', 'expm1f', 'expm1l',
40050'expm1', 'fdimf', 'fdiml', 'fdim', 'fmaf', 'fmal', 'fmaxf', 'fmaxl',
40051'fmax', 'fma', 'fminf', 'fminl', 'fmin', 'hypotf', 'hypotl', 'hypot',
40052'ilogbf', 'ilogbl', 'ilogb', 'imaxabs', 'isblank', 'iswblank',
40053'lgammaf', 'lgammal', 'lgamma', 'llabs', 'llrintf', 'llrintl', 'llrint',
40054'llroundf', 'llroundl', 'llround', 'log1pf', 'log1pl', 'log1p', 'log2f',
40055'log2l', 'log2', 'logbf', 'logbl', 'logb', 'lrintf', 'lrintl', 'lrint',
40056'lroundf', 'lroundl', 'lround', 'nearbyintf', 'nearbyintl', 'nearbyint',
40057'nextafterf', 'nextafterl', 'nextafter', 'nexttowardf', 'nexttowardl',
40058'nexttoward', 'remainderf', 'remainderl', 'remainder', 'remquof',
40059'remquol', 'remquo', 'rintf', 'rintl', 'rint', 'roundf', 'roundl',
40060'round', 'scalblnf', 'scalblnl', 'scalbln', 'scalbnf', 'scalbnl',
40061'scalbn', 'snprintf', 'tgammaf', 'tgammal', 'tgamma', 'truncf',
40062'truncl', 'trunc', 'vfscanf', 'vscanf', 'vsnprintf' and 'vsscanf' are
40063handled as built-in functions except in strict ISO C90 mode ('-ansi' or
40064'-std=c90').
40065
40066 There are also built-in versions of the ISO C99 functions 'acosf',
40067'acosl', 'asinf', 'asinl', 'atan2f', 'atan2l', 'atanf', 'atanl',
40068'ceilf', 'ceill', 'cosf', 'coshf', 'coshl', 'cosl', 'expf', 'expl',
40069'fabsf', 'fabsl', 'floorf', 'floorl', 'fmodf', 'fmodl', 'frexpf',
40070'frexpl', 'ldexpf', 'ldexpl', 'log10f', 'log10l', 'logf', 'logl',
40071'modfl', 'modf', 'powf', 'powl', 'sinf', 'sinhf', 'sinhl', 'sinl',
40072'sqrtf', 'sqrtl', 'tanf', 'tanhf', 'tanhl' and 'tanl' that are
40073recognized in any mode since ISO C90 reserves these names for the
40074purpose to which ISO C99 puts them.  All these functions have
40075corresponding versions prefixed with '__builtin_'.
40076
40077 There are also built-in functions '__builtin_fabsfN',
40078'__builtin_fabsfNx', '__builtin_copysignfN' and '__builtin_copysignfNx',
40079corresponding to the TS 18661-3 functions 'fabsfN', 'fabsfNx',
40080'copysignfN' and 'copysignfNx', for supported types '_FloatN' and
40081'_FloatNx'.
40082
40083 There are also GNU extension functions 'clog10', 'clog10f' and
40084'clog10l' which names are reserved by ISO C99 for future use.  All these
40085functions have versions prefixed with '__builtin_'.
40086
40087 The ISO C94 functions 'iswalnum', 'iswalpha', 'iswcntrl', 'iswdigit',
40088'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace', 'iswupper',
40089'iswxdigit', 'towlower' and 'towupper' are handled as built-in functions
40090except in strict ISO C90 mode ('-ansi' or '-std=c90').
40091
40092 The ISO C90 functions 'abort', 'abs', 'acos', 'asin', 'atan2', 'atan',
40093'calloc', 'ceil', 'cosh', 'cos', 'exit', 'exp', 'fabs', 'floor', 'fmod',
40094'fprintf', 'fputs', 'frexp', 'fscanf', 'isalnum', 'isalpha', 'iscntrl',
40095'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct', 'isspace',
40096'isupper', 'isxdigit', 'tolower', 'toupper', 'labs', 'ldexp', 'log10',
40097'log', 'malloc', 'memchr', 'memcmp', 'memcpy', 'memset', 'modf', 'pow',
40098'printf', 'putchar', 'puts', 'scanf', 'sinh', 'sin', 'snprintf',
40099'sprintf', 'sqrt', 'sscanf', 'strcat', 'strchr', 'strcmp', 'strcpy',
40100'strcspn', 'strlen', 'strncat', 'strncmp', 'strncpy', 'strpbrk',
40101'strrchr', 'strspn', 'strstr', 'tanh', 'tan', 'vfprintf', 'vprintf' and
40102'vsprintf' are all recognized as built-in functions unless
40103'-fno-builtin' is specified (or '-fno-builtin-FUNCTION' is specified for
40104an individual function).  All of these functions have corresponding
40105versions prefixed with '__builtin_'.
40106
40107 GCC provides built-in versions of the ISO C99 floating-point comparison
40108macros that avoid raising exceptions for unordered operands.  They have
40109the same names as the standard macros ( 'isgreater', 'isgreaterequal',
40110'isless', 'islessequal', 'islessgreater', and 'isunordered') , with
40111'__builtin_' prefixed.  We intend for a library implementor to be able
40112to simply '#define' each standard macro to its built-in equivalent.  In
40113the same fashion, GCC provides 'fpclassify', 'isfinite', 'isinf_sign',
40114'isnormal' and 'signbit' built-ins used with '__builtin_' prefixed.  The
40115'isinf' and 'isnan' built-in functions appear both with and without the
40116'__builtin_' prefix.
40117
40118 -- Built-in Function: void *__builtin_alloca (size_t size)
40119     The '__builtin_alloca' function must be called at block scope.  The
40120     function allocates an object SIZE bytes large on the stack of the
40121     calling function.  The object is aligned on the default stack
40122     alignment boundary for the target determined by the
40123     '__BIGGEST_ALIGNMENT__' macro.  The '__builtin_alloca' function
40124     returns a pointer to the first byte of the allocated object.  The
40125     lifetime of the allocated object ends just before the calling
40126     function returns to its caller.  This is so even when
40127     '__builtin_alloca' is called within a nested block.
40128
40129     For example, the following function allocates eight objects of 'n'
40130     bytes each on the stack, storing a pointer to each in consecutive
40131     elements of the array 'a'.  It then passes the array to function
40132     'g' which can safely use the storage pointed to by each of the
40133     array elements.
40134
40135          void f (unsigned n)
40136          {
40137            void *a [8];
40138            for (int i = 0; i != 8; ++i)
40139              a [i] = __builtin_alloca (n);
40140
40141            g (a, n);   // safe
40142          }
40143
40144     Since the '__builtin_alloca' function doesn't validate its argument
40145     it is the responsibility of its caller to make sure the argument
40146     doesn't cause it to exceed the stack size limit.  The
40147     '__builtin_alloca' function is provided to make it possible to
40148     allocate on the stack arrays of bytes with an upper bound that may
40149     be computed at run time.  Since C99 Variable Length Arrays offer
40150     similar functionality under a portable, more convenient, and safer
40151     interface they are recommended instead, in both C99 and C++
40152     programs where GCC provides them as an extension.  *Note Variable
40153     Length::, for details.
40154
40155 -- Built-in Function: void *__builtin_alloca_with_align (size_t size,
40156          size_t alignment)
40157     The '__builtin_alloca_with_align' function must be called at block
40158     scope.  The function allocates an object SIZE bytes large on the
40159     stack of the calling function.  The allocated object is aligned on
40160     the boundary specified by the argument ALIGNMENT whose unit is
40161     given in bits (not bytes).  The SIZE argument must be positive and
40162     not exceed the stack size limit.  The ALIGNMENT argument must be a
40163     constant integer expression that evaluates to a power of 2 greater
40164     than or equal to 'CHAR_BIT' and less than some unspecified maximum.
40165     Invocations with other values are rejected with an error indicating
40166     the valid bounds.  The function returns a pointer to the first byte
40167     of the allocated object.  The lifetime of the allocated object ends
40168     at the end of the block in which the function was called.  The
40169     allocated storage is released no later than just before the calling
40170     function returns to its caller, but may be released at the end of
40171     the block in which the function was called.
40172
40173     For example, in the following function the call to 'g' is unsafe
40174     because when 'overalign' is non-zero, the space allocated by
40175     '__builtin_alloca_with_align' may have been released at the end of
40176     the 'if' statement in which it was called.
40177
40178          void f (unsigned n, bool overalign)
40179          {
40180            void *p;
40181            if (overalign)
40182              p = __builtin_alloca_with_align (n, 64 /* bits */);
40183            else
40184              p = __builtin_alloc (n);
40185
40186            g (p, n);   // unsafe
40187          }
40188
40189     Since the '__builtin_alloca_with_align' function doesn't validate
40190     its SIZE argument it is the responsibility of its caller to make
40191     sure the argument doesn't cause it to exceed the stack size limit.
40192     The '__builtin_alloca_with_align' function is provided to make it
40193     possible to allocate on the stack overaligned arrays of bytes with
40194     an upper bound that may be computed at run time.  Since C99
40195     Variable Length Arrays offer the same functionality under a
40196     portable, more convenient, and safer interface they are recommended
40197     instead, in both C99 and C++ programs where GCC provides them as an
40198     extension.  *Note Variable Length::, for details.
40199
40200 -- Built-in Function: void *__builtin_alloca_with_align_and_max (size_t
40201          size, size_t alignment, size_t max_size)
40202     Similar to '__builtin_alloca_with_align' but takes an extra
40203     argument specifying an upper bound for SIZE in case its value
40204     cannot be computed at compile time, for use by '-fstack-usage',
40205     '-Wstack-usage' and '-Walloca-larger-than'.  MAX_SIZE must be a
40206     constant integer expression, it has no effect on code generation
40207     and no attempt is made to check its compatibility with SIZE.
40208
40209 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
40210
40211     You can use the built-in function '__builtin_types_compatible_p' to
40212     determine whether two types are the same.
40213
40214     This built-in function returns 1 if the unqualified versions of the
40215     types TYPE1 and TYPE2 (which are types, not expressions) are
40216     compatible, 0 otherwise.  The result of this built-in function can
40217     be used in integer constant expressions.
40218
40219     This built-in function ignores top level qualifiers (e.g., 'const',
40220     'volatile').  For example, 'int' is equivalent to 'const int'.
40221
40222     The type 'int[]' and 'int[5]' are compatible.  On the other hand,
40223     'int' and 'char *' are not compatible, even if the size of their
40224     types, on the particular architecture are the same.  Also, the
40225     amount of pointer indirection is taken into account when
40226     determining similarity.  Consequently, 'short *' is not similar to
40227     'short **'.  Furthermore, two types that are typedefed are
40228     considered compatible if their underlying types are compatible.
40229
40230     An 'enum' type is not considered to be compatible with another
40231     'enum' type even if both are compatible with the same integer type;
40232     this is what the C standard specifies.  For example, 'enum {foo,
40233     bar}' is not similar to 'enum {hot, dog}'.
40234
40235     You typically use this function in code whose execution varies
40236     depending on the arguments' types.  For example:
40237
40238          #define foo(x)                                                  \
40239            ({                                                           \
40240              typeof (x) tmp = (x);                                       \
40241              if (__builtin_types_compatible_p (typeof (x), long double)) \
40242                tmp = foo_long_double (tmp);                              \
40243              else if (__builtin_types_compatible_p (typeof (x), double)) \
40244                tmp = foo_double (tmp);                                   \
40245              else if (__builtin_types_compatible_p (typeof (x), float))  \
40246                tmp = foo_float (tmp);                                    \
40247              else                                                        \
40248                abort ();                                                 \
40249              tmp;                                                        \
40250            })
40251
40252     _Note:_ This construct is only available for C.
40253
40254 -- Built-in Function: TYPE __builtin_call_with_static_chain (CALL_EXP,
40255          POINTER_EXP)
40256
40257     The CALL_EXP expression must be a function call, and the
40258     POINTER_EXP expression must be a pointer.  The POINTER_EXP is
40259     passed to the function call in the target's static chain location.
40260     The result of builtin is the result of the function call.
40261
40262     _Note:_ This builtin is only available for C.  This builtin can be
40263     used to call Go closures from C.
40264
40265 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
40266          EXP2)
40267
40268     You can use the built-in function '__builtin_choose_expr' to
40269     evaluate code depending on the value of a constant expression.
40270     This built-in function returns EXP1 if CONST_EXP, which is an
40271     integer constant expression, is nonzero.  Otherwise it returns
40272     EXP2.
40273
40274     This built-in function is analogous to the '? :' operator in C,
40275     except that the expression returned has its type unaltered by
40276     promotion rules.  Also, the built-in function does not evaluate the
40277     expression that is not chosen.  For example, if CONST_EXP evaluates
40278     to true, EXP2 is not evaluated even if it has side effects.
40279
40280     This built-in function can return an lvalue if the chosen argument
40281     is an lvalue.
40282
40283     If EXP1 is returned, the return type is the same as EXP1's type.
40284     Similarly, if EXP2 is returned, its return type is the same as
40285     EXP2.
40286
40287     Example:
40288
40289          #define foo(x)                                                    \
40290            __builtin_choose_expr (                                         \
40291              __builtin_types_compatible_p (typeof (x), double),            \
40292              foo_double (x),                                               \
40293              __builtin_choose_expr (                                       \
40294                __builtin_types_compatible_p (typeof (x), float),           \
40295                foo_float (x),                                              \
40296                /* The void expression results in a compile-time error  \
40297                   when assigning the result to something.  */          \
40298                (void)0))
40299
40300     _Note:_ This construct is only available for C.  Furthermore, the
40301     unused expression (EXP1 or EXP2 depending on the value of
40302     CONST_EXP) may still generate syntax errors.  This may change in
40303     future revisions.
40304
40305 -- Built-in Function: TYPE __builtin_tgmath (FUNCTIONS, ARGUMENTS)
40306
40307     The built-in function '__builtin_tgmath', available only for C and
40308     Objective-C, calls a function determined according to the rules of
40309     '<tgmath.h>' macros.  It is intended to be used in implementations
40310     of that header, so that expansions of macros from that header only
40311     expand each of their arguments once, to avoid problems when calls
40312     to such macros are nested inside the arguments of other calls to
40313     such macros; in addition, it results in better diagnostics for
40314     invalid calls to '<tgmath.h>' macros than implementations using
40315     other GNU C language features.  For example, the 'pow' type-generic
40316     macro might be defined as:
40317
40318          #define pow(a, b) __builtin_tgmath (powf, pow, powl, \
40319                                              cpowf, cpow, cpowl, a, b)
40320
40321     The arguments to '__builtin_tgmath' are at least two pointers to
40322     functions, followed by the arguments to the type-generic macro
40323     (which will be passed as arguments to the selected function).  All
40324     the pointers to functions must be pointers to prototyped functions,
40325     none of which may have variable arguments, and all of which must
40326     have the same number of parameters; the number of parameters of the
40327     first function determines how many arguments to '__builtin_tgmath'
40328     are interpreted as function pointers, and how many as the arguments
40329     to the called function.
40330
40331     The types of the specified functions must all be different, but
40332     related to each other in the same way as a set of functions that
40333     may be selected between by a macro in '<tgmath.h>'.  This means
40334     that the functions are parameterized by a floating-point type T,
40335     different for each such function.  The function return types may
40336     all be the same type, or they may be T for each function, or they
40337     may be the real type corresponding to T for each function (if some
40338     of the types T are complex).  Likewise, for each parameter
40339     position, the type of the parameter in that position may always be
40340     the same type, or may be T for each function (this case must apply
40341     for at least one parameter position), or may be the real type
40342     corresponding to T for each function.
40343
40344     The standard rules for '<tgmath.h>' macros are used to find a
40345     common type U from the types of the arguments for parameters whose
40346     types vary between the functions; complex integer types (a GNU
40347     extension) are treated like '_Complex double' for this purpose (or
40348     '_Complex _Float64' if all the function return types are the same
40349     '_FloatN' or '_FloatNx' type).  If the function return types vary,
40350     or are all the same integer type, the function called is the one
40351     for which T is U, and it is an error if there is no such function.
40352     If the function return types are all the same floating-point type,
40353     the type-generic macro is taken to be one of those from TS 18661
40354     that rounds the result to a narrower type; if there is a function
40355     for which T is U, it is called, and otherwise the first function,
40356     if any, for which T has at least the range and precision of U is
40357     called, and it is an error if there is no such function.
40358
40359 -- Built-in Function: TYPE __builtin_complex (REAL, IMAG)
40360
40361     The built-in function '__builtin_complex' is provided for use in
40362     implementing the ISO C11 macros 'CMPLXF', 'CMPLX' and 'CMPLXL'.
40363     REAL and IMAG must have the same type, a real binary floating-point
40364     type, and the result has the corresponding complex type with real
40365     and imaginary parts REAL and IMAG.  Unlike 'REAL + I * IMAG', this
40366     works even when infinities, NaNs and negative zeros are involved.
40367
40368 -- Built-in Function: int __builtin_constant_p (EXP)
40369     You can use the built-in function '__builtin_constant_p' to
40370     determine if a value is known to be constant at compile time and
40371     hence that GCC can perform constant-folding on expressions
40372     involving that value.  The argument of the function is the value to
40373     test.  The function returns the integer 1 if the argument is known
40374     to be a compile-time constant and 0 if it is not known to be a
40375     compile-time constant.  A return of 0 does not indicate that the
40376     value is _not_ a constant, but merely that GCC cannot prove it is a
40377     constant with the specified value of the '-O' option.
40378
40379     You typically use this function in an embedded application where
40380     memory is a critical resource.  If you have some complex
40381     calculation, you may want it to be folded if it involves constants,
40382     but need to call a function if it does not.  For example:
40383
40384          #define Scale_Value(X)      \
40385            (__builtin_constant_p (X) \
40386            ? ((X) * SCALE + OFFSET) : Scale (X))
40387
40388     You may use this built-in function in either a macro or an inline
40389     function.  However, if you use it in an inlined function and pass
40390     an argument of the function as the argument to the built-in, GCC
40391     never returns 1 when you call the inline function with a string
40392     constant or compound literal (*note Compound Literals::) and does
40393     not return 1 when you pass a constant numeric value to the inline
40394     function unless you specify the '-O' option.
40395
40396     You may also use '__builtin_constant_p' in initializers for static
40397     data.  For instance, you can write
40398
40399          static const int table[] = {
40400             __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
40401             /* ... */
40402          };
40403
40404     This is an acceptable initializer even if EXPRESSION is not a
40405     constant expression, including the case where
40406     '__builtin_constant_p' returns 1 because EXPRESSION can be folded
40407     to a constant but EXPRESSION contains operands that are not
40408     otherwise permitted in a static initializer (for example, '0 && foo
40409     ()').  GCC must be more conservative about evaluating the built-in
40410     in this case, because it has no opportunity to perform
40411     optimization.
40412
40413 -- Built-in Function: long __builtin_expect (long EXP, long C)
40414     You may use '__builtin_expect' to provide the compiler with branch
40415     prediction information.  In general, you should prefer to use
40416     actual profile feedback for this ('-fprofile-arcs'), as programmers
40417     are notoriously bad at predicting how their programs actually
40418     perform.  However, there are applications in which this data is
40419     hard to collect.
40420
40421     The return value is the value of EXP, which should be an integral
40422     expression.  The semantics of the built-in are that it is expected
40423     that EXP == C.  For example:
40424
40425          if (__builtin_expect (x, 0))
40426            foo ();
40427
40428     indicates that we do not expect to call 'foo', since we expect 'x'
40429     to be zero.  Since you are limited to integral expressions for EXP,
40430     you should use constructions such as
40431
40432          if (__builtin_expect (ptr != NULL, 1))
40433            foo (*ptr);
40434
40435     when testing pointer or floating-point values.
40436
40437 -- Built-in Function: void __builtin_trap (void)
40438     This function causes the program to exit abnormally.  GCC
40439     implements this function by using a target-dependent mechanism
40440     (such as intentionally executing an illegal instruction) or by
40441     calling 'abort'.  The mechanism used may vary from release to
40442     release so you should not rely on any particular implementation.
40443
40444 -- Built-in Function: void __builtin_unreachable (void)
40445     If control flow reaches the point of the '__builtin_unreachable',
40446     the program is undefined.  It is useful in situations where the
40447     compiler cannot deduce the unreachability of the code.
40448
40449     One such case is immediately following an 'asm' statement that
40450     either never terminates, or one that transfers control elsewhere
40451     and never returns.  In this example, without the
40452     '__builtin_unreachable', GCC issues a warning that control reaches
40453     the end of a non-void function.  It also generates code to return
40454     after the 'asm'.
40455
40456          int f (int c, int v)
40457          {
40458            if (c)
40459              {
40460                return v;
40461              }
40462            else
40463              {
40464                asm("jmp error_handler");
40465                __builtin_unreachable ();
40466              }
40467          }
40468
40469     Because the 'asm' statement unconditionally transfers control out
40470     of the function, control never reaches the end of the function
40471     body.  The '__builtin_unreachable' is in fact unreachable and
40472     communicates this fact to the compiler.
40473
40474     Another use for '__builtin_unreachable' is following a call a
40475     function that never returns but that is not declared
40476     '__attribute__((noreturn))', as in this example:
40477
40478          void function_that_never_returns (void);
40479
40480          int g (int c)
40481          {
40482            if (c)
40483              {
40484                return 1;
40485              }
40486            else
40487              {
40488                function_that_never_returns ();
40489                __builtin_unreachable ();
40490              }
40491          }
40492
40493 -- Built-in Function: void * __builtin_assume_aligned (const void *EXP,
40494          size_t ALIGN, ...)
40495     This function returns its first argument, and allows the compiler
40496     to assume that the returned pointer is at least ALIGN bytes
40497     aligned.  This built-in can have either two or three arguments, if
40498     it has three, the third argument should have integer type, and if
40499     it is nonzero means misalignment offset.  For example:
40500
40501          void *x = __builtin_assume_aligned (arg, 16);
40502
40503     means that the compiler can assume 'x', set to 'arg', is at least
40504     16-byte aligned, while:
40505
40506          void *x = __builtin_assume_aligned (arg, 32, 8);
40507
40508     means that the compiler can assume for 'x', set to 'arg', that
40509     '(char *) x - 8' is 32-byte aligned.
40510
40511 -- Built-in Function: int __builtin_LINE ()
40512     This function is the equivalent of the preprocessor '__LINE__'
40513     macro and returns a constant integer expression that evaluates to
40514     the line number of the invocation of the built-in.  When used as a
40515     C++ default argument for a function F, it returns the line number
40516     of the call to F.
40517
40518 -- Built-in Function: const char * __builtin_FUNCTION ()
40519     This function is the equivalent of the '__FUNCTION__' symbol and
40520     returns an address constant pointing to the name of the function
40521     from which the built-in was invoked, or the empty string if the
40522     invocation is not at function scope.  When used as a C++ default
40523     argument for a function F, it returns the name of F's caller or the
40524     empty string if the call was not made at function scope.
40525
40526 -- Built-in Function: const char * __builtin_FILE ()
40527     This function is the equivalent of the preprocessor '__FILE__'
40528     macro and returns an address constant pointing to the file name
40529     containing the invocation of the built-in, or the empty string if
40530     the invocation is not at function scope.  When used as a C++
40531     default argument for a function F, it returns the file name of the
40532     call to F or the empty string if the call was not made at function
40533     scope.
40534
40535     For example, in the following, each call to function 'foo' will
40536     print a line similar to '"file.c:123: foo: message"' with the name
40537     of the file and the line number of the 'printf' call, the name of
40538     the function 'foo', followed by the word 'message'.
40539
40540          const char*
40541          function (const char *func = __builtin_FUNCTION ())
40542          {
40543            return func;
40544          }
40545
40546          void foo (void)
40547          {
40548            printf ("%s:%i: %s: message\n", file (), line (), function ());
40549          }
40550
40551 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char
40552          *END)
40553     This function is used to flush the processor's instruction cache
40554     for the region of memory between BEGIN inclusive and END exclusive.
40555     Some targets require that the instruction cache be flushed, after
40556     modifying memory containing code, in order to obtain deterministic
40557     behavior.
40558
40559     If the target does not require instruction cache flushes,
40560     '__builtin___clear_cache' has no effect.  Otherwise either
40561     instructions are emitted in-line to clear the instruction cache or
40562     a call to the '__clear_cache' function in libgcc is made.
40563
40564 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
40565     This function is used to minimize cache-miss latency by moving data
40566     into a cache before it is accessed.  You can insert calls to
40567     '__builtin_prefetch' into code for which you know addresses of data
40568     in memory that is likely to be accessed soon.  If the target
40569     supports them, data prefetch instructions are generated.  If the
40570     prefetch is done early enough before the access then the data will
40571     be in the cache by the time it is accessed.
40572
40573     The value of ADDR is the address of the memory to prefetch.  There
40574     are two optional arguments, RW and LOCALITY.  The value of RW is a
40575     compile-time constant one or zero; one means that the prefetch is
40576     preparing for a write to the memory address and zero, the default,
40577     means that the prefetch is preparing for a read.  The value
40578     LOCALITY must be a compile-time constant integer between zero and
40579     three.  A value of zero means that the data has no temporal
40580     locality, so it need not be left in the cache after the access.  A
40581     value of three means that the data has a high degree of temporal
40582     locality and should be left in all levels of cache possible.
40583     Values of one and two mean, respectively, a low or moderate degree
40584     of temporal locality.  The default is three.
40585
40586          for (i = 0; i < n; i++)
40587            {
40588              a[i] = a[i] + b[i];
40589              __builtin_prefetch (&a[i+j], 1, 1);
40590              __builtin_prefetch (&b[i+j], 0, 1);
40591              /* ... */
40592            }
40593
40594     Data prefetch does not generate faults if ADDR is invalid, but the
40595     address expression itself must be valid.  For example, a prefetch
40596     of 'p->next' does not fault if 'p->next' is not a valid address,
40597     but evaluation faults if 'p' is not a valid address.
40598
40599     If the target does not support data prefetch, the address
40600     expression is evaluated if it includes side effects but no other
40601     code is generated and GCC does not issue a warning.
40602
40603 -- Built-in Function: double __builtin_huge_val (void)
40604     Returns a positive infinity, if supported by the floating-point
40605     format, else 'DBL_MAX'.  This function is suitable for implementing
40606     the ISO C macro 'HUGE_VAL'.
40607
40608 -- Built-in Function: float __builtin_huge_valf (void)
40609     Similar to '__builtin_huge_val', except the return type is 'float'.
40610
40611 -- Built-in Function: long double __builtin_huge_vall (void)
40612     Similar to '__builtin_huge_val', except the return type is 'long
40613     double'.
40614
40615 -- Built-in Function: _FloatN __builtin_huge_valfN (void)
40616     Similar to '__builtin_huge_val', except the return type is
40617     '_FloatN'.
40618
40619 -- Built-in Function: _FloatNx __builtin_huge_valfNx (void)
40620     Similar to '__builtin_huge_val', except the return type is
40621     '_FloatNx'.
40622
40623 -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
40624          int, ...)
40625     This built-in implements the C99 fpclassify functionality.  The
40626     first five int arguments should be the target library's notion of
40627     the possible FP classes and are used for return values.  They must
40628     be constant values and they must appear in this order: 'FP_NAN',
40629     'FP_INFINITE', 'FP_NORMAL', 'FP_SUBNORMAL' and 'FP_ZERO'.  The
40630     ellipsis is for exactly one floating-point value to classify.  GCC
40631     treats the last argument as type-generic, which means it does not
40632     do default promotion from float to double.
40633
40634 -- Built-in Function: double __builtin_inf (void)
40635     Similar to '__builtin_huge_val', except a warning is generated if
40636     the target floating-point format does not support infinities.
40637
40638 -- Built-in Function: _Decimal32 __builtin_infd32 (void)
40639     Similar to '__builtin_inf', except the return type is '_Decimal32'.
40640
40641 -- Built-in Function: _Decimal64 __builtin_infd64 (void)
40642     Similar to '__builtin_inf', except the return type is '_Decimal64'.
40643
40644 -- Built-in Function: _Decimal128 __builtin_infd128 (void)
40645     Similar to '__builtin_inf', except the return type is
40646     '_Decimal128'.
40647
40648 -- Built-in Function: float __builtin_inff (void)
40649     Similar to '__builtin_inf', except the return type is 'float'.
40650     This function is suitable for implementing the ISO C99 macro
40651     'INFINITY'.
40652
40653 -- Built-in Function: long double __builtin_infl (void)
40654     Similar to '__builtin_inf', except the return type is 'long
40655     double'.
40656
40657 -- Built-in Function: _FloatN __builtin_inffN (void)
40658     Similar to '__builtin_inf', except the return type is '_FloatN'.
40659
40660 -- Built-in Function: _FloatN __builtin_inffNx (void)
40661     Similar to '__builtin_inf', except the return type is '_FloatNx'.
40662
40663 -- Built-in Function: int __builtin_isinf_sign (...)
40664     Similar to 'isinf', except the return value is -1 for an argument
40665     of '-Inf' and 1 for an argument of '+Inf'.  Note while the
40666     parameter list is an ellipsis, this function only accepts exactly
40667     one floating-point argument.  GCC treats this parameter as
40668     type-generic, which means it does not do default promotion from
40669     float to double.
40670
40671 -- Built-in Function: double __builtin_nan (const char *str)
40672     This is an implementation of the ISO C99 function 'nan'.
40673
40674     Since ISO C99 defines this function in terms of 'strtod', which we
40675     do not implement, a description of the parsing is in order.  The
40676     string is parsed as by 'strtol'; that is, the base is recognized by
40677     leading '0' or '0x' prefixes.  The number parsed is placed in the
40678     significand such that the least significant bit of the number is at
40679     the least significant bit of the significand.  The number is
40680     truncated to fit the significand field provided.  The significand
40681     is forced to be a quiet NaN.
40682
40683     This function, if given a string literal all of which would have
40684     been consumed by 'strtol', is evaluated early enough that it is
40685     considered a compile-time constant.
40686
40687 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
40688     Similar to '__builtin_nan', except the return type is '_Decimal32'.
40689
40690 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
40691     Similar to '__builtin_nan', except the return type is '_Decimal64'.
40692
40693 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
40694     Similar to '__builtin_nan', except the return type is
40695     '_Decimal128'.
40696
40697 -- Built-in Function: float __builtin_nanf (const char *str)
40698     Similar to '__builtin_nan', except the return type is 'float'.
40699
40700 -- Built-in Function: long double __builtin_nanl (const char *str)
40701     Similar to '__builtin_nan', except the return type is 'long
40702     double'.
40703
40704 -- Built-in Function: _FloatN __builtin_nanfN (const char *str)
40705     Similar to '__builtin_nan', except the return type is '_FloatN'.
40706
40707 -- Built-in Function: _FloatNx __builtin_nanfNx (const char *str)
40708     Similar to '__builtin_nan', except the return type is '_FloatNx'.
40709
40710 -- Built-in Function: double __builtin_nans (const char *str)
40711     Similar to '__builtin_nan', except the significand is forced to be
40712     a signaling NaN.  The 'nans' function is proposed by WG14 N965.
40713
40714 -- Built-in Function: float __builtin_nansf (const char *str)
40715     Similar to '__builtin_nans', except the return type is 'float'.
40716
40717 -- Built-in Function: long double __builtin_nansl (const char *str)
40718     Similar to '__builtin_nans', except the return type is 'long
40719     double'.
40720
40721 -- Built-in Function: _FloatN __builtin_nansfN (const char *str)
40722     Similar to '__builtin_nans', except the return type is '_FloatN'.
40723
40724 -- Built-in Function: _FloatNx __builtin_nansfNx (const char *str)
40725     Similar to '__builtin_nans', except the return type is '_FloatNx'.
40726
40727 -- Built-in Function: int __builtin_ffs (int x)
40728     Returns one plus the index of the least significant 1-bit of X, or
40729     if X is zero, returns zero.
40730
40731 -- Built-in Function: int __builtin_clz (unsigned int x)
40732     Returns the number of leading 0-bits in X, starting at the most
40733     significant bit position.  If X is 0, the result is undefined.
40734
40735 -- Built-in Function: int __builtin_ctz (unsigned int x)
40736     Returns the number of trailing 0-bits in X, starting at the least
40737     significant bit position.  If X is 0, the result is undefined.
40738
40739 -- Built-in Function: int __builtin_clrsb (int x)
40740     Returns the number of leading redundant sign bits in X, i.e. the
40741     number of bits following the most significant bit that are
40742     identical to it.  There are no special cases for 0 or other values.
40743
40744 -- Built-in Function: int __builtin_popcount (unsigned int x)
40745     Returns the number of 1-bits in X.
40746
40747 -- Built-in Function: int __builtin_parity (unsigned int x)
40748     Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
40749
40750 -- Built-in Function: int __builtin_ffsl (long)
40751     Similar to '__builtin_ffs', except the argument type is 'long'.
40752
40753 -- Built-in Function: int __builtin_clzl (unsigned long)
40754     Similar to '__builtin_clz', except the argument type is 'unsigned
40755     long'.
40756
40757 -- Built-in Function: int __builtin_ctzl (unsigned long)
40758     Similar to '__builtin_ctz', except the argument type is 'unsigned
40759     long'.
40760
40761 -- Built-in Function: int __builtin_clrsbl (long)
40762     Similar to '__builtin_clrsb', except the argument type is 'long'.
40763
40764 -- Built-in Function: int __builtin_popcountl (unsigned long)
40765     Similar to '__builtin_popcount', except the argument type is
40766     'unsigned long'.
40767
40768 -- Built-in Function: int __builtin_parityl (unsigned long)
40769     Similar to '__builtin_parity', except the argument type is
40770     'unsigned long'.
40771
40772 -- Built-in Function: int __builtin_ffsll (long long)
40773     Similar to '__builtin_ffs', except the argument type is 'long
40774     long'.
40775
40776 -- Built-in Function: int __builtin_clzll (unsigned long long)
40777     Similar to '__builtin_clz', except the argument type is 'unsigned
40778     long long'.
40779
40780 -- Built-in Function: int __builtin_ctzll (unsigned long long)
40781     Similar to '__builtin_ctz', except the argument type is 'unsigned
40782     long long'.
40783
40784 -- Built-in Function: int __builtin_clrsbll (long long)
40785     Similar to '__builtin_clrsb', except the argument type is 'long
40786     long'.
40787
40788 -- Built-in Function: int __builtin_popcountll (unsigned long long)
40789     Similar to '__builtin_popcount', except the argument type is
40790     'unsigned long long'.
40791
40792 -- Built-in Function: int __builtin_parityll (unsigned long long)
40793     Similar to '__builtin_parity', except the argument type is
40794     'unsigned long long'.
40795
40796 -- Built-in Function: double __builtin_powi (double, int)
40797     Returns the first argument raised to the power of the second.
40798     Unlike the 'pow' function no guarantees about precision and
40799     rounding are made.
40800
40801 -- Built-in Function: float __builtin_powif (float, int)
40802     Similar to '__builtin_powi', except the argument and return types
40803     are 'float'.
40804
40805 -- Built-in Function: long double __builtin_powil (long double, int)
40806     Similar to '__builtin_powi', except the argument and return types
40807     are 'long double'.
40808
40809 -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x)
40810     Returns X with the order of the bytes reversed; for example,
40811     '0xaabb' becomes '0xbbaa'.  Byte here always means exactly 8 bits.
40812
40813 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x)
40814     Similar to '__builtin_bswap16', except the argument and return
40815     types are 32 bit.
40816
40817 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x)
40818     Similar to '__builtin_bswap32', except the argument and return
40819     types are 64 bit.
40820
40821 -- Built-in Function: Pmode __builtin_extend_pointer (void * x)
40822     On targets where the user visible pointer size is smaller than the
40823     size of an actual hardware address this function returns the
40824     extended user pointer.  Targets where this is true included ILP32
40825     mode on x86_64 or Aarch64.  This function is mainly useful when
40826     writing inline assembly code.
40827
40828
40829File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
40830
408316.59 Built-in Functions Specific to Particular Target Machines
40832==============================================================
40833
40834On some target machines, GCC supports many built-in functions specific
40835to those machines.  Generally these generate calls to specific machine
40836instructions, but allow the compiler to schedule those calls.
40837
40838* Menu:
40839
40840* AArch64 Built-in Functions::
40841* Alpha Built-in Functions::
40842* Altera Nios II Built-in Functions::
40843* ARC Built-in Functions::
40844* ARC SIMD Built-in Functions::
40845* ARM iWMMXt Built-in Functions::
40846* ARM C Language Extensions (ACLE)::
40847* ARM Floating Point Status and Control Intrinsics::
40848* ARM ARMv8-M Security Extensions::
40849* AVR Built-in Functions::
40850* Blackfin Built-in Functions::
40851* FR-V Built-in Functions::
40852* MIPS DSP Built-in Functions::
40853* MIPS Paired-Single Support::
40854* MIPS Loongson Built-in Functions::
40855* MIPS SIMD Architecture (MSA) Support::
40856* Other MIPS Built-in Functions::
40857* MSP430 Built-in Functions::
40858* NDS32 Built-in Functions::
40859* picoChip Built-in Functions::
40860* PowerPC Built-in Functions::
40861* PowerPC AltiVec/VSX Built-in Functions::
40862* PowerPC Hardware Transactional Memory Built-in Functions::
40863* PowerPC Atomic Memory Operation Functions::
40864* RX Built-in Functions::
40865* S/390 System z Built-in Functions::
40866* SH Built-in Functions::
40867* SPARC VIS Built-in Functions::
40868* SPU Built-in Functions::
40869* TI C6X Built-in Functions::
40870* TILE-Gx Built-in Functions::
40871* TILEPro Built-in Functions::
40872* x86 Built-in Functions::
40873* x86 transactional memory intrinsics::
40874* x86 control-flow protection intrinsics::
40875
40876
40877File: gcc.info,  Node: AArch64 Built-in Functions,  Next: Alpha Built-in Functions,  Up: Target Builtins
40878
408796.59.1 AArch64 Built-in Functions
40880---------------------------------
40881
40882These built-in functions are available for the AArch64 family of
40883processors.
40884     unsigned int __builtin_aarch64_get_fpcr ()
40885     void __builtin_aarch64_set_fpcr (unsigned int)
40886     unsigned int __builtin_aarch64_get_fpsr ()
40887     void __builtin_aarch64_set_fpsr (unsigned int)
40888
40889
40890File: gcc.info,  Node: Alpha Built-in Functions,  Next: Altera Nios II Built-in Functions,  Prev: AArch64 Built-in Functions,  Up: Target Builtins
40891
408926.59.2 Alpha Built-in Functions
40893-------------------------------
40894
40895These built-in functions are available for the Alpha family of
40896processors, depending on the command-line switches used.
40897
40898 The following built-in functions are always available.  They all
40899generate the machine instruction that is part of the name.
40900
40901     long __builtin_alpha_implver (void)
40902     long __builtin_alpha_rpcc (void)
40903     long __builtin_alpha_amask (long)
40904     long __builtin_alpha_cmpbge (long, long)
40905     long __builtin_alpha_extbl (long, long)
40906     long __builtin_alpha_extwl (long, long)
40907     long __builtin_alpha_extll (long, long)
40908     long __builtin_alpha_extql (long, long)
40909     long __builtin_alpha_extwh (long, long)
40910     long __builtin_alpha_extlh (long, long)
40911     long __builtin_alpha_extqh (long, long)
40912     long __builtin_alpha_insbl (long, long)
40913     long __builtin_alpha_inswl (long, long)
40914     long __builtin_alpha_insll (long, long)
40915     long __builtin_alpha_insql (long, long)
40916     long __builtin_alpha_inswh (long, long)
40917     long __builtin_alpha_inslh (long, long)
40918     long __builtin_alpha_insqh (long, long)
40919     long __builtin_alpha_mskbl (long, long)
40920     long __builtin_alpha_mskwl (long, long)
40921     long __builtin_alpha_mskll (long, long)
40922     long __builtin_alpha_mskql (long, long)
40923     long __builtin_alpha_mskwh (long, long)
40924     long __builtin_alpha_msklh (long, long)
40925     long __builtin_alpha_mskqh (long, long)
40926     long __builtin_alpha_umulh (long, long)
40927     long __builtin_alpha_zap (long, long)
40928     long __builtin_alpha_zapnot (long, long)
40929
40930 The following built-in functions are always with '-mmax' or '-mcpu=CPU'
40931where CPU is 'pca56' or later.  They all generate the machine
40932instruction that is part of the name.
40933
40934     long __builtin_alpha_pklb (long)
40935     long __builtin_alpha_pkwb (long)
40936     long __builtin_alpha_unpkbl (long)
40937     long __builtin_alpha_unpkbw (long)
40938     long __builtin_alpha_minub8 (long, long)
40939     long __builtin_alpha_minsb8 (long, long)
40940     long __builtin_alpha_minuw4 (long, long)
40941     long __builtin_alpha_minsw4 (long, long)
40942     long __builtin_alpha_maxub8 (long, long)
40943     long __builtin_alpha_maxsb8 (long, long)
40944     long __builtin_alpha_maxuw4 (long, long)
40945     long __builtin_alpha_maxsw4 (long, long)
40946     long __builtin_alpha_perr (long, long)
40947
40948 The following built-in functions are always with '-mcix' or '-mcpu=CPU'
40949where CPU is 'ev67' or later.  They all generate the machine instruction
40950that is part of the name.
40951
40952     long __builtin_alpha_cttz (long)
40953     long __builtin_alpha_ctlz (long)
40954     long __builtin_alpha_ctpop (long)
40955
40956 The following built-in functions are available on systems that use the
40957OSF/1 PALcode.  Normally they invoke the 'rduniq' and 'wruniq' PAL
40958calls, but when invoked with '-mtls-kernel', they invoke 'rdval' and
40959'wrval'.
40960
40961     void *__builtin_thread_pointer (void)
40962     void __builtin_set_thread_pointer (void *)
40963
40964
40965File: gcc.info,  Node: Altera Nios II Built-in Functions,  Next: ARC Built-in Functions,  Prev: Alpha Built-in Functions,  Up: Target Builtins
40966
409676.59.3 Altera Nios II Built-in Functions
40968----------------------------------------
40969
40970These built-in functions are available for the Altera Nios II family of
40971processors.
40972
40973 The following built-in functions are always available.  They all
40974generate the machine instruction that is part of the name.
40975
40976     int __builtin_ldbio (volatile const void *)
40977     int __builtin_ldbuio (volatile const void *)
40978     int __builtin_ldhio (volatile const void *)
40979     int __builtin_ldhuio (volatile const void *)
40980     int __builtin_ldwio (volatile const void *)
40981     void __builtin_stbio (volatile void *, int)
40982     void __builtin_sthio (volatile void *, int)
40983     void __builtin_stwio (volatile void *, int)
40984     void __builtin_sync (void)
40985     int __builtin_rdctl (int)
40986     int __builtin_rdprs (int, int)
40987     void __builtin_wrctl (int, int)
40988     void __builtin_flushd (volatile void *)
40989     void __builtin_flushda (volatile void *)
40990     int __builtin_wrpie (int);
40991     void __builtin_eni (int);
40992     int __builtin_ldex (volatile const void *)
40993     int __builtin_stex (volatile void *, int)
40994     int __builtin_ldsex (volatile const void *)
40995     int __builtin_stsex (volatile void *, int)
40996
40997 The following built-in functions are always available.  They all
40998generate a Nios II Custom Instruction.  The name of the function
40999represents the types that the function takes and returns.  The letter
41000before the 'n' is the return type or void if absent.  The 'n' represents
41001the first parameter to all the custom instructions, the custom
41002instruction number.  The two letters after the 'n' represent the up to
41003two parameters to the function.
41004
41005 The letters represent the following data types:
41006'<no letter>'
41007     'void' for return type and no parameter for parameter types.
41008
41009'i'
41010     'int' for return type and parameter type
41011
41012'f'
41013     'float' for return type and parameter type
41014
41015'p'
41016     'void *' for return type and parameter type
41017
41018 And the function names are:
41019     void __builtin_custom_n (void)
41020     void __builtin_custom_ni (int)
41021     void __builtin_custom_nf (float)
41022     void __builtin_custom_np (void *)
41023     void __builtin_custom_nii (int, int)
41024     void __builtin_custom_nif (int, float)
41025     void __builtin_custom_nip (int, void *)
41026     void __builtin_custom_nfi (float, int)
41027     void __builtin_custom_nff (float, float)
41028     void __builtin_custom_nfp (float, void *)
41029     void __builtin_custom_npi (void *, int)
41030     void __builtin_custom_npf (void *, float)
41031     void __builtin_custom_npp (void *, void *)
41032     int __builtin_custom_in (void)
41033     int __builtin_custom_ini (int)
41034     int __builtin_custom_inf (float)
41035     int __builtin_custom_inp (void *)
41036     int __builtin_custom_inii (int, int)
41037     int __builtin_custom_inif (int, float)
41038     int __builtin_custom_inip (int, void *)
41039     int __builtin_custom_infi (float, int)
41040     int __builtin_custom_inff (float, float)
41041     int __builtin_custom_infp (float, void *)
41042     int __builtin_custom_inpi (void *, int)
41043     int __builtin_custom_inpf (void *, float)
41044     int __builtin_custom_inpp (void *, void *)
41045     float __builtin_custom_fn (void)
41046     float __builtin_custom_fni (int)
41047     float __builtin_custom_fnf (float)
41048     float __builtin_custom_fnp (void *)
41049     float __builtin_custom_fnii (int, int)
41050     float __builtin_custom_fnif (int, float)
41051     float __builtin_custom_fnip (int, void *)
41052     float __builtin_custom_fnfi (float, int)
41053     float __builtin_custom_fnff (float, float)
41054     float __builtin_custom_fnfp (float, void *)
41055     float __builtin_custom_fnpi (void *, int)
41056     float __builtin_custom_fnpf (void *, float)
41057     float __builtin_custom_fnpp (void *, void *)
41058     void * __builtin_custom_pn (void)
41059     void * __builtin_custom_pni (int)
41060     void * __builtin_custom_pnf (float)
41061     void * __builtin_custom_pnp (void *)
41062     void * __builtin_custom_pnii (int, int)
41063     void * __builtin_custom_pnif (int, float)
41064     void * __builtin_custom_pnip (int, void *)
41065     void * __builtin_custom_pnfi (float, int)
41066     void * __builtin_custom_pnff (float, float)
41067     void * __builtin_custom_pnfp (float, void *)
41068     void * __builtin_custom_pnpi (void *, int)
41069     void * __builtin_custom_pnpf (void *, float)
41070     void * __builtin_custom_pnpp (void *, void *)
41071
41072
41073File: gcc.info,  Node: ARC Built-in Functions,  Next: ARC SIMD Built-in Functions,  Prev: Altera Nios II Built-in Functions,  Up: Target Builtins
41074
410756.59.4 ARC Built-in Functions
41076-----------------------------
41077
41078The following built-in functions are provided for ARC targets.  The
41079built-ins generate the corresponding assembly instructions.  In the
41080examples given below, the generated code often requires an operand or
41081result to be in a register.  Where necessary further code will be
41082generated to ensure this is true, but for brevity this is not described
41083in each case.
41084
41085 _Note:_ Using a built-in to generate an instruction not supported by a
41086target may cause problems.  At present the compiler is not guaranteed to
41087detect such misuse, and as a result an internal compiler error may be
41088generated.
41089
41090 -- Built-in Function: int __builtin_arc_aligned (void *VAL, int
41091          ALIGNVAL)
41092     Return 1 if VAL is known to have the byte alignment given by
41093     ALIGNVAL, otherwise return 0.  Note that this is different from
41094          __alignof__(*(char *)VAL) >= alignval
41095     because __alignof__ sees only the type of the dereference, whereas
41096     __builtin_arc_align uses alignment information from the pointer as
41097     well as from the pointed-to type.  The information available will
41098     depend on optimization level.
41099
41100 -- Built-in Function: void __builtin_arc_brk (void)
41101     Generates
41102          brk
41103
41104 -- Built-in Function: unsigned int __builtin_arc_core_read (unsigned
41105          int REGNO)
41106     The operand is the number of a register to be read.  Generates:
41107          mov  DEST, rREGNO
41108     where the value in DEST will be the result returned from the
41109     built-in.
41110
41111 -- Built-in Function: void __builtin_arc_core_write (unsigned int
41112          REGNO, unsigned int VAL)
41113     The first operand is the number of a register to be written, the
41114     second operand is a compile time constant to write into that
41115     register.  Generates:
41116          mov  rREGNO, VAL
41117
41118 -- Built-in Function: int __builtin_arc_divaw (int A, int B)
41119     Only available if either '-mcpu=ARC700' or '-meA' is set.
41120     Generates:
41121          divaw  DEST, A, B
41122     where the value in DEST will be the result returned from the
41123     built-in.
41124
41125 -- Built-in Function: void __builtin_arc_flag (unsigned int A)
41126     Generates
41127          flag  A
41128
41129 -- Built-in Function: unsigned int __builtin_arc_lr (unsigned int AUXR)
41130     The operand, AUXV, is the address of an auxiliary register and must
41131     be a compile time constant.  Generates:
41132          lr  DEST, [AUXR]
41133     Where the value in DEST will be the result returned from the
41134     built-in.
41135
41136 -- Built-in Function: void __builtin_arc_mul64 (int A, int B)
41137     Only available with '-mmul64'.  Generates:
41138          mul64  A, B
41139
41140 -- Built-in Function: void __builtin_arc_mulu64 (unsigned int A,
41141          unsigned int B)
41142     Only available with '-mmul64'.  Generates:
41143          mulu64  A, B
41144
41145 -- Built-in Function: void __builtin_arc_nop (void)
41146     Generates:
41147          nop
41148
41149 -- Built-in Function: int __builtin_arc_norm (int SRC)
41150     Only valid if the 'norm' instruction is available through the
41151     '-mnorm' option or by default with '-mcpu=ARC700'.  Generates:
41152          norm  DEST, SRC
41153     Where the value in DEST will be the result returned from the
41154     built-in.
41155
41156 -- Built-in Function: short int __builtin_arc_normw (short int SRC)
41157     Only valid if the 'normw' instruction is available through the
41158     '-mnorm' option or by default with '-mcpu=ARC700'.  Generates:
41159          normw  DEST, SRC
41160     Where the value in DEST will be the result returned from the
41161     built-in.
41162
41163 -- Built-in Function: void __builtin_arc_rtie (void)
41164     Generates:
41165          rtie
41166
41167 -- Built-in Function: void __builtin_arc_sleep (int A
41168     Generates:
41169          sleep  A
41170
41171 -- Built-in Function: void __builtin_arc_sr (unsigned int AUXR,
41172          unsigned int VAL)
41173     The first argument, AUXV, is the address of an auxiliary register,
41174     the second argument, VAL, is a compile time constant to be written
41175     to the register.  Generates:
41176          sr  AUXR, [VAL]
41177
41178 -- Built-in Function: int __builtin_arc_swap (int SRC)
41179     Only valid with '-mswap'.  Generates:
41180          swap  DEST, SRC
41181     Where the value in DEST will be the result returned from the
41182     built-in.
41183
41184 -- Built-in Function: void __builtin_arc_swi (void)
41185     Generates:
41186          swi
41187
41188 -- Built-in Function: void __builtin_arc_sync (void)
41189     Only available with '-mcpu=ARC700'.  Generates:
41190          sync
41191
41192 -- Built-in Function: void __builtin_arc_trap_s (unsigned int C)
41193     Only available with '-mcpu=ARC700'.  Generates:
41194          trap_s  C
41195
41196 -- Built-in Function: void __builtin_arc_unimp_s (void)
41197     Only available with '-mcpu=ARC700'.  Generates:
41198          unimp_s
41199
41200 The instructions generated by the following builtins are not considered
41201as candidates for scheduling.  They are not moved around by the compiler
41202during scheduling, and thus can be expected to appear where they are put
41203in the C code:
41204     __builtin_arc_brk()
41205     __builtin_arc_core_read()
41206     __builtin_arc_core_write()
41207     __builtin_arc_flag()
41208     __builtin_arc_lr()
41209     __builtin_arc_sleep()
41210     __builtin_arc_sr()
41211     __builtin_arc_swi()
41212
41213
41214File: gcc.info,  Node: ARC SIMD Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Prev: ARC Built-in Functions,  Up: Target Builtins
41215
412166.59.5 ARC SIMD Built-in Functions
41217----------------------------------
41218
41219SIMD builtins provided by the compiler can be used to generate the
41220vector instructions.  This section describes the available builtins and
41221their usage in programs.  With the '-msimd' option, the compiler
41222provides 128-bit vector types, which can be specified using the
41223'vector_size' attribute.  The header file 'arc-simd.h' can be included
41224to use the following predefined types:
41225     typedef int __v4si   __attribute__((vector_size(16)));
41226     typedef short __v8hi __attribute__((vector_size(16)));
41227
41228 These types can be used to define 128-bit variables.  The built-in
41229functions listed in the following section can be used on these variables
41230to generate the vector operations.
41231
41232 For all builtins, '__builtin_arc_SOMEINSN', the header file
41233'arc-simd.h' also provides equivalent macros called '_SOMEINSN' that can
41234be used for programming ease and improved readability.  The following
41235macros for DMA control are also provided:
41236     #define _setup_dma_in_channel_reg _vdiwr
41237     #define _setup_dma_out_channel_reg _vdowr
41238
41239 The following is a complete list of all the SIMD built-ins provided for
41240ARC, grouped by calling signature.
41241
41242 The following take two '__v8hi' arguments and return a '__v8hi' result:
41243     __v8hi __builtin_arc_vaddaw (__v8hi, __v8hi)
41244     __v8hi __builtin_arc_vaddw (__v8hi, __v8hi)
41245     __v8hi __builtin_arc_vand (__v8hi, __v8hi)
41246     __v8hi __builtin_arc_vandaw (__v8hi, __v8hi)
41247     __v8hi __builtin_arc_vavb (__v8hi, __v8hi)
41248     __v8hi __builtin_arc_vavrb (__v8hi, __v8hi)
41249     __v8hi __builtin_arc_vbic (__v8hi, __v8hi)
41250     __v8hi __builtin_arc_vbicaw (__v8hi, __v8hi)
41251     __v8hi __builtin_arc_vdifaw (__v8hi, __v8hi)
41252     __v8hi __builtin_arc_vdifw (__v8hi, __v8hi)
41253     __v8hi __builtin_arc_veqw (__v8hi, __v8hi)
41254     __v8hi __builtin_arc_vh264f (__v8hi, __v8hi)
41255     __v8hi __builtin_arc_vh264ft (__v8hi, __v8hi)
41256     __v8hi __builtin_arc_vh264fw (__v8hi, __v8hi)
41257     __v8hi __builtin_arc_vlew (__v8hi, __v8hi)
41258     __v8hi __builtin_arc_vltw (__v8hi, __v8hi)
41259     __v8hi __builtin_arc_vmaxaw (__v8hi, __v8hi)
41260     __v8hi __builtin_arc_vmaxw (__v8hi, __v8hi)
41261     __v8hi __builtin_arc_vminaw (__v8hi, __v8hi)
41262     __v8hi __builtin_arc_vminw (__v8hi, __v8hi)
41263     __v8hi __builtin_arc_vmr1aw (__v8hi, __v8hi)
41264     __v8hi __builtin_arc_vmr1w (__v8hi, __v8hi)
41265     __v8hi __builtin_arc_vmr2aw (__v8hi, __v8hi)
41266     __v8hi __builtin_arc_vmr2w (__v8hi, __v8hi)
41267     __v8hi __builtin_arc_vmr3aw (__v8hi, __v8hi)
41268     __v8hi __builtin_arc_vmr3w (__v8hi, __v8hi)
41269     __v8hi __builtin_arc_vmr4aw (__v8hi, __v8hi)
41270     __v8hi __builtin_arc_vmr4w (__v8hi, __v8hi)
41271     __v8hi __builtin_arc_vmr5aw (__v8hi, __v8hi)
41272     __v8hi __builtin_arc_vmr5w (__v8hi, __v8hi)
41273     __v8hi __builtin_arc_vmr6aw (__v8hi, __v8hi)
41274     __v8hi __builtin_arc_vmr6w (__v8hi, __v8hi)
41275     __v8hi __builtin_arc_vmr7aw (__v8hi, __v8hi)
41276     __v8hi __builtin_arc_vmr7w (__v8hi, __v8hi)
41277     __v8hi __builtin_arc_vmrb (__v8hi, __v8hi)
41278     __v8hi __builtin_arc_vmulaw (__v8hi, __v8hi)
41279     __v8hi __builtin_arc_vmulfaw (__v8hi, __v8hi)
41280     __v8hi __builtin_arc_vmulfw (__v8hi, __v8hi)
41281     __v8hi __builtin_arc_vmulw (__v8hi, __v8hi)
41282     __v8hi __builtin_arc_vnew (__v8hi, __v8hi)
41283     __v8hi __builtin_arc_vor (__v8hi, __v8hi)
41284     __v8hi __builtin_arc_vsubaw (__v8hi, __v8hi)
41285     __v8hi __builtin_arc_vsubw (__v8hi, __v8hi)
41286     __v8hi __builtin_arc_vsummw (__v8hi, __v8hi)
41287     __v8hi __builtin_arc_vvc1f (__v8hi, __v8hi)
41288     __v8hi __builtin_arc_vvc1ft (__v8hi, __v8hi)
41289     __v8hi __builtin_arc_vxor (__v8hi, __v8hi)
41290     __v8hi __builtin_arc_vxoraw (__v8hi, __v8hi)
41291
41292 The following take one '__v8hi' and one 'int' argument and return a
41293'__v8hi' result:
41294
41295     __v8hi __builtin_arc_vbaddw (__v8hi, int)
41296     __v8hi __builtin_arc_vbmaxw (__v8hi, int)
41297     __v8hi __builtin_arc_vbminw (__v8hi, int)
41298     __v8hi __builtin_arc_vbmulaw (__v8hi, int)
41299     __v8hi __builtin_arc_vbmulfw (__v8hi, int)
41300     __v8hi __builtin_arc_vbmulw (__v8hi, int)
41301     __v8hi __builtin_arc_vbrsubw (__v8hi, int)
41302     __v8hi __builtin_arc_vbsubw (__v8hi, int)
41303
41304 The following take one '__v8hi' argument and one 'int' argument which
41305must be a 3-bit compile time constant indicating a register number
41306I0-I7.  They return a '__v8hi' result.
41307     __v8hi __builtin_arc_vasrw (__v8hi, const int)
41308     __v8hi __builtin_arc_vsr8 (__v8hi, const int)
41309     __v8hi __builtin_arc_vsr8aw (__v8hi, const int)
41310
41311 The following take one '__v8hi' argument and one 'int' argument which
41312must be a 6-bit compile time constant.  They return a '__v8hi' result.
41313     __v8hi __builtin_arc_vasrpwbi (__v8hi, const int)
41314     __v8hi __builtin_arc_vasrrpwbi (__v8hi, const int)
41315     __v8hi __builtin_arc_vasrrwi (__v8hi, const int)
41316     __v8hi __builtin_arc_vasrsrwi (__v8hi, const int)
41317     __v8hi __builtin_arc_vasrwi (__v8hi, const int)
41318     __v8hi __builtin_arc_vsr8awi (__v8hi, const int)
41319     __v8hi __builtin_arc_vsr8i (__v8hi, const int)
41320
41321 The following take one '__v8hi' argument and one 'int' argument which
41322must be a 8-bit compile time constant.  They return a '__v8hi' result.
41323     __v8hi __builtin_arc_vd6tapf (__v8hi, const int)
41324     __v8hi __builtin_arc_vmvaw (__v8hi, const int)
41325     __v8hi __builtin_arc_vmvw (__v8hi, const int)
41326     __v8hi __builtin_arc_vmvzw (__v8hi, const int)
41327
41328 The following take two 'int' arguments, the second of which which must
41329be a 8-bit compile time constant.  They return a '__v8hi' result:
41330     __v8hi __builtin_arc_vmovaw (int, const int)
41331     __v8hi __builtin_arc_vmovw (int, const int)
41332     __v8hi __builtin_arc_vmovzw (int, const int)
41333
41334 The following take a single '__v8hi' argument and return a '__v8hi'
41335result:
41336     __v8hi __builtin_arc_vabsaw (__v8hi)
41337     __v8hi __builtin_arc_vabsw (__v8hi)
41338     __v8hi __builtin_arc_vaddsuw (__v8hi)
41339     __v8hi __builtin_arc_vexch1 (__v8hi)
41340     __v8hi __builtin_arc_vexch2 (__v8hi)
41341     __v8hi __builtin_arc_vexch4 (__v8hi)
41342     __v8hi __builtin_arc_vsignw (__v8hi)
41343     __v8hi __builtin_arc_vupbaw (__v8hi)
41344     __v8hi __builtin_arc_vupbw (__v8hi)
41345     __v8hi __builtin_arc_vupsbaw (__v8hi)
41346     __v8hi __builtin_arc_vupsbw (__v8hi)
41347
41348 The following take two 'int' arguments and return no result:
41349     void __builtin_arc_vdirun (int, int)
41350     void __builtin_arc_vdorun (int, int)
41351
41352 The following take two 'int' arguments and return no result.  The first
41353argument must a 3-bit compile time constant indicating one of the
41354DR0-DR7 DMA setup channels:
41355     void __builtin_arc_vdiwr (const int, int)
41356     void __builtin_arc_vdowr (const int, int)
41357
41358 The following take an 'int' argument and return no result:
41359     void __builtin_arc_vendrec (int)
41360     void __builtin_arc_vrec (int)
41361     void __builtin_arc_vrecrun (int)
41362     void __builtin_arc_vrun (int)
41363
41364 The following take a '__v8hi' argument and two 'int' arguments and
41365return a '__v8hi' result.  The second argument must be a 3-bit compile
41366time constants, indicating one the registers I0-I7, and the third
41367argument must be an 8-bit compile time constant.
41368
41369 _Note:_ Although the equivalent hardware instructions do not take an
41370SIMD register as an operand, these builtins overwrite the relevant bits
41371of the '__v8hi' register provided as the first argument with the value
41372loaded from the '[Ib, u8]' location in the SDM.
41373
41374     __v8hi __builtin_arc_vld32 (__v8hi, const int, const int)
41375     __v8hi __builtin_arc_vld32wh (__v8hi, const int, const int)
41376     __v8hi __builtin_arc_vld32wl (__v8hi, const int, const int)
41377     __v8hi __builtin_arc_vld64 (__v8hi, const int, const int)
41378
41379 The following take two 'int' arguments and return a '__v8hi' result.
41380The first argument must be a 3-bit compile time constants, indicating
41381one the registers I0-I7, and the second argument must be an 8-bit
41382compile time constant.
41383
41384     __v8hi __builtin_arc_vld128 (const int, const int)
41385     __v8hi __builtin_arc_vld64w (const int, const int)
41386
41387 The following take a '__v8hi' argument and two 'int' arguments and
41388return no result.  The second argument must be a 3-bit compile time
41389constants, indicating one the registers I0-I7, and the third argument
41390must be an 8-bit compile time constant.
41391
41392     void __builtin_arc_vst128 (__v8hi, const int, const int)
41393     void __builtin_arc_vst64 (__v8hi, const int, const int)
41394
41395 The following take a '__v8hi' argument and three 'int' arguments and
41396return no result.  The second argument must be a 3-bit compile-time
41397constant, identifying the 16-bit sub-register to be stored, the third
41398argument must be a 3-bit compile time constants, indicating one the
41399registers I0-I7, and the fourth argument must be an 8-bit compile time
41400constant.
41401
41402     void __builtin_arc_vst16_n (__v8hi, const int, const int, const int)
41403     void __builtin_arc_vst32_n (__v8hi, const int, const int, const int)
41404
41405
41406File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM C Language Extensions (ACLE),  Prev: ARC SIMD Built-in Functions,  Up: Target Builtins
41407
414086.59.6 ARM iWMMXt Built-in Functions
41409------------------------------------
41410
41411These built-in functions are available for the ARM family of processors
41412when the '-mcpu=iwmmxt' switch is used:
41413
41414     typedef int v2si __attribute__ ((vector_size (8)));
41415     typedef short v4hi __attribute__ ((vector_size (8)));
41416     typedef char v8qi __attribute__ ((vector_size (8)));
41417
41418     int __builtin_arm_getwcgr0 (void)
41419     void __builtin_arm_setwcgr0 (int)
41420     int __builtin_arm_getwcgr1 (void)
41421     void __builtin_arm_setwcgr1 (int)
41422     int __builtin_arm_getwcgr2 (void)
41423     void __builtin_arm_setwcgr2 (int)
41424     int __builtin_arm_getwcgr3 (void)
41425     void __builtin_arm_setwcgr3 (int)
41426     int __builtin_arm_textrmsb (v8qi, int)
41427     int __builtin_arm_textrmsh (v4hi, int)
41428     int __builtin_arm_textrmsw (v2si, int)
41429     int __builtin_arm_textrmub (v8qi, int)
41430     int __builtin_arm_textrmuh (v4hi, int)
41431     int __builtin_arm_textrmuw (v2si, int)
41432     v8qi __builtin_arm_tinsrb (v8qi, int, int)
41433     v4hi __builtin_arm_tinsrh (v4hi, int, int)
41434     v2si __builtin_arm_tinsrw (v2si, int, int)
41435     long long __builtin_arm_tmia (long long, int, int)
41436     long long __builtin_arm_tmiabb (long long, int, int)
41437     long long __builtin_arm_tmiabt (long long, int, int)
41438     long long __builtin_arm_tmiaph (long long, int, int)
41439     long long __builtin_arm_tmiatb (long long, int, int)
41440     long long __builtin_arm_tmiatt (long long, int, int)
41441     int __builtin_arm_tmovmskb (v8qi)
41442     int __builtin_arm_tmovmskh (v4hi)
41443     int __builtin_arm_tmovmskw (v2si)
41444     long long __builtin_arm_waccb (v8qi)
41445     long long __builtin_arm_wacch (v4hi)
41446     long long __builtin_arm_waccw (v2si)
41447     v8qi __builtin_arm_waddb (v8qi, v8qi)
41448     v8qi __builtin_arm_waddbss (v8qi, v8qi)
41449     v8qi __builtin_arm_waddbus (v8qi, v8qi)
41450     v4hi __builtin_arm_waddh (v4hi, v4hi)
41451     v4hi __builtin_arm_waddhss (v4hi, v4hi)
41452     v4hi __builtin_arm_waddhus (v4hi, v4hi)
41453     v2si __builtin_arm_waddw (v2si, v2si)
41454     v2si __builtin_arm_waddwss (v2si, v2si)
41455     v2si __builtin_arm_waddwus (v2si, v2si)
41456     v8qi __builtin_arm_walign (v8qi, v8qi, int)
41457     long long __builtin_arm_wand(long long, long long)
41458     long long __builtin_arm_wandn (long long, long long)
41459     v8qi __builtin_arm_wavg2b (v8qi, v8qi)
41460     v8qi __builtin_arm_wavg2br (v8qi, v8qi)
41461     v4hi __builtin_arm_wavg2h (v4hi, v4hi)
41462     v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
41463     v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
41464     v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
41465     v2si __builtin_arm_wcmpeqw (v2si, v2si)
41466     v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
41467     v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
41468     v2si __builtin_arm_wcmpgtsw (v2si, v2si)
41469     v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
41470     v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
41471     v2si __builtin_arm_wcmpgtuw (v2si, v2si)
41472     long long __builtin_arm_wmacs (long long, v4hi, v4hi)
41473     long long __builtin_arm_wmacsz (v4hi, v4hi)
41474     long long __builtin_arm_wmacu (long long, v4hi, v4hi)
41475     long long __builtin_arm_wmacuz (v4hi, v4hi)
41476     v4hi __builtin_arm_wmadds (v4hi, v4hi)
41477     v4hi __builtin_arm_wmaddu (v4hi, v4hi)
41478     v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
41479     v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
41480     v2si __builtin_arm_wmaxsw (v2si, v2si)
41481     v8qi __builtin_arm_wmaxub (v8qi, v8qi)
41482     v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
41483     v2si __builtin_arm_wmaxuw (v2si, v2si)
41484     v8qi __builtin_arm_wminsb (v8qi, v8qi)
41485     v4hi __builtin_arm_wminsh (v4hi, v4hi)
41486     v2si __builtin_arm_wminsw (v2si, v2si)
41487     v8qi __builtin_arm_wminub (v8qi, v8qi)
41488     v4hi __builtin_arm_wminuh (v4hi, v4hi)
41489     v2si __builtin_arm_wminuw (v2si, v2si)
41490     v4hi __builtin_arm_wmulsm (v4hi, v4hi)
41491     v4hi __builtin_arm_wmulul (v4hi, v4hi)
41492     v4hi __builtin_arm_wmulum (v4hi, v4hi)
41493     long long __builtin_arm_wor (long long, long long)
41494     v2si __builtin_arm_wpackdss (long long, long long)
41495     v2si __builtin_arm_wpackdus (long long, long long)
41496     v8qi __builtin_arm_wpackhss (v4hi, v4hi)
41497     v8qi __builtin_arm_wpackhus (v4hi, v4hi)
41498     v4hi __builtin_arm_wpackwss (v2si, v2si)
41499     v4hi __builtin_arm_wpackwus (v2si, v2si)
41500     long long __builtin_arm_wrord (long long, long long)
41501     long long __builtin_arm_wrordi (long long, int)
41502     v4hi __builtin_arm_wrorh (v4hi, long long)
41503     v4hi __builtin_arm_wrorhi (v4hi, int)
41504     v2si __builtin_arm_wrorw (v2si, long long)
41505     v2si __builtin_arm_wrorwi (v2si, int)
41506     v2si __builtin_arm_wsadb (v2si, v8qi, v8qi)
41507     v2si __builtin_arm_wsadbz (v8qi, v8qi)
41508     v2si __builtin_arm_wsadh (v2si, v4hi, v4hi)
41509     v2si __builtin_arm_wsadhz (v4hi, v4hi)
41510     v4hi __builtin_arm_wshufh (v4hi, int)
41511     long long __builtin_arm_wslld (long long, long long)
41512     long long __builtin_arm_wslldi (long long, int)
41513     v4hi __builtin_arm_wsllh (v4hi, long long)
41514     v4hi __builtin_arm_wsllhi (v4hi, int)
41515     v2si __builtin_arm_wsllw (v2si, long long)
41516     v2si __builtin_arm_wsllwi (v2si, int)
41517     long long __builtin_arm_wsrad (long long, long long)
41518     long long __builtin_arm_wsradi (long long, int)
41519     v4hi __builtin_arm_wsrah (v4hi, long long)
41520     v4hi __builtin_arm_wsrahi (v4hi, int)
41521     v2si __builtin_arm_wsraw (v2si, long long)
41522     v2si __builtin_arm_wsrawi (v2si, int)
41523     long long __builtin_arm_wsrld (long long, long long)
41524     long long __builtin_arm_wsrldi (long long, int)
41525     v4hi __builtin_arm_wsrlh (v4hi, long long)
41526     v4hi __builtin_arm_wsrlhi (v4hi, int)
41527     v2si __builtin_arm_wsrlw (v2si, long long)
41528     v2si __builtin_arm_wsrlwi (v2si, int)
41529     v8qi __builtin_arm_wsubb (v8qi, v8qi)
41530     v8qi __builtin_arm_wsubbss (v8qi, v8qi)
41531     v8qi __builtin_arm_wsubbus (v8qi, v8qi)
41532     v4hi __builtin_arm_wsubh (v4hi, v4hi)
41533     v4hi __builtin_arm_wsubhss (v4hi, v4hi)
41534     v4hi __builtin_arm_wsubhus (v4hi, v4hi)
41535     v2si __builtin_arm_wsubw (v2si, v2si)
41536     v2si __builtin_arm_wsubwss (v2si, v2si)
41537     v2si __builtin_arm_wsubwus (v2si, v2si)
41538     v4hi __builtin_arm_wunpckehsb (v8qi)
41539     v2si __builtin_arm_wunpckehsh (v4hi)
41540     long long __builtin_arm_wunpckehsw (v2si)
41541     v4hi __builtin_arm_wunpckehub (v8qi)
41542     v2si __builtin_arm_wunpckehuh (v4hi)
41543     long long __builtin_arm_wunpckehuw (v2si)
41544     v4hi __builtin_arm_wunpckelsb (v8qi)
41545     v2si __builtin_arm_wunpckelsh (v4hi)
41546     long long __builtin_arm_wunpckelsw (v2si)
41547     v4hi __builtin_arm_wunpckelub (v8qi)
41548     v2si __builtin_arm_wunpckeluh (v4hi)
41549     long long __builtin_arm_wunpckeluw (v2si)
41550     v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
41551     v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
41552     v2si __builtin_arm_wunpckihw (v2si, v2si)
41553     v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
41554     v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
41555     v2si __builtin_arm_wunpckilw (v2si, v2si)
41556     long long __builtin_arm_wxor (long long, long long)
41557     long long __builtin_arm_wzero ()
41558
41559
41560File: 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
41561
415626.59.7 ARM C Language Extensions (ACLE)
41563---------------------------------------
41564
41565GCC implements extensions for C as described in the ARM C Language
41566Extensions (ACLE) specification, which can be found at
41567<http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf>.
41568
41569 As a part of ACLE, GCC implements extensions for Advanced SIMD as
41570described in the ARM C Language Extensions Specification.  The complete
41571list of Advanced SIMD intrinsics can be found at
41572<http://infocenter.arm.com/help/topic/com.arm.doc.ihi0073a/IHI0073A_arm_neon_intrinsics_ref.pdf>.
41573The built-in intrinsics for the Advanced SIMD extension are available
41574when NEON is enabled.
41575
41576 Currently, ARM and AArch64 back ends do not support ACLE 2.0 fully.
41577Both back ends support CRC32 intrinsics and the ARM back end supports
41578the Coprocessor intrinsics, all from 'arm_acle.h'.  The ARM back end's
4157916-bit floating-point Advanced SIMD intrinsics currently comply to ACLE
41580v1.1.  AArch64's back end does not have support for 16-bit floating
41581point Advanced SIMD intrinsics yet.
41582
41583 See *note ARM Options:: and *note AArch64 Options:: for more
41584information on the availability of extensions.
41585
41586
41587File: 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
41588
415896.59.8 ARM Floating Point Status and Control Intrinsics
41590-------------------------------------------------------
41591
41592These built-in functions are available for the ARM family of processors
41593with floating-point unit.
41594
41595     unsigned int __builtin_arm_get_fpscr ()
41596     void __builtin_arm_set_fpscr (unsigned int)
41597
41598
41599File: gcc.info,  Node: ARM ARMv8-M Security Extensions,  Next: AVR Built-in Functions,  Prev: ARM Floating Point Status and Control Intrinsics,  Up: Target Builtins
41600
416016.59.9 ARM ARMv8-M Security Extensions
41602--------------------------------------
41603
41604GCC implements the ARMv8-M Security Extensions as described in the
41605ARMv8-M Security Extensions: Requirements on Development Tools
41606Engineering Specification, which can be found at
41607<http://infocenter.arm.com/help/topic/com.arm.doc.ecm0359818/ECM0359818_armv8m_security_extensions_reqs_on_dev_tools_1_0.pdf>.
41608
41609 As part of the Security Extensions GCC implements two new function
41610attributes: 'cmse_nonsecure_entry' and 'cmse_nonsecure_call'.
41611
41612 As part of the Security Extensions GCC implements the intrinsics below.
41613FPTR is used here to mean any function pointer type.
41614
41615     cmse_address_info_t cmse_TT (void *)
41616     cmse_address_info_t cmse_TT_fptr (FPTR)
41617     cmse_address_info_t cmse_TTT (void *)
41618     cmse_address_info_t cmse_TTT_fptr (FPTR)
41619     cmse_address_info_t cmse_TTA (void *)
41620     cmse_address_info_t cmse_TTA_fptr (FPTR)
41621     cmse_address_info_t cmse_TTAT (void *)
41622     cmse_address_info_t cmse_TTAT_fptr (FPTR)
41623     void * cmse_check_address_range (void *, size_t, int)
41624     typeof(p) cmse_nsfptr_create (FPTR p)
41625     intptr_t cmse_is_nsfptr (FPTR)
41626     int cmse_nonsecure_caller (void)
41627
41628
41629File: gcc.info,  Node: AVR Built-in Functions,  Next: Blackfin Built-in Functions,  Prev: ARM ARMv8-M Security Extensions,  Up: Target Builtins
41630
416316.59.10 AVR Built-in Functions
41632------------------------------
41633
41634For each built-in function for AVR, there is an equally named, uppercase
41635built-in macro defined.  That way users can easily query if or if not a
41636specific built-in is implemented or not.  For example, if
41637'__builtin_avr_nop' is available the macro '__BUILTIN_AVR_NOP' is
41638defined to '1' and undefined otherwise.
41639
41640'void __builtin_avr_nop (void)'
41641'void __builtin_avr_sei (void)'
41642'void __builtin_avr_cli (void)'
41643'void __builtin_avr_sleep (void)'
41644'void __builtin_avr_wdr (void)'
41645'unsigned char __builtin_avr_swap (unsigned char)'
41646'unsigned int __builtin_avr_fmul (unsigned char, unsigned char)'
41647'int __builtin_avr_fmuls (char, char)'
41648'int __builtin_avr_fmulsu (char, unsigned char)'
41649     These built-in functions map to the respective machine instruction,
41650     i.e. 'nop', 'sei', 'cli', 'sleep', 'wdr', 'swap', 'fmul', 'fmuls'
41651     resp.  'fmulsu'.  The three 'fmul*' built-ins are implemented as
41652     library call if no hardware multiplier is available.
41653
41654'void __builtin_avr_delay_cycles (unsigned long ticks)'
41655     Delay execution for TICKS cycles.  Note that this built-in does not
41656     take into account the effect of interrupts that might increase
41657     delay time.  TICKS must be a compile-time integer constant; delays
41658     with a variable number of cycles are not supported.
41659
41660'char __builtin_avr_flash_segment (const __memx void*)'
41661     This built-in takes a byte address to the 24-bit *note address
41662     space: AVR Named Address Spaces. '__memx' and returns the number of
41663     the flash segment (the 64 KiB chunk) where the address points to.
41664     Counting starts at '0'.  If the address does not point to flash
41665     memory, return '-1'.
41666
41667'uint8_t __builtin_avr_insert_bits (uint32_t map, uint8_t bits, uint8_t val)'
41668     Insert bits from BITS into VAL and return the resulting value.  The
41669     nibbles of MAP determine how the insertion is performed: Let X be
41670     the N-th nibble of MAP
41671       1. If X is '0xf', then the N-th bit of VAL is returned unaltered.
41672
41673       2. If X is in the range 0...7, then the N-th result bit is set to
41674          the X-th bit of BITS
41675
41676       3. If X is in the range 8...'0xe', then the N-th result bit is
41677          undefined.
41678
41679     One typical use case for this built-in is adjusting input and
41680     output values to non-contiguous port layouts.  Some examples:
41681
41682          // same as val, bits is unused
41683          __builtin_avr_insert_bits (0xffffffff, bits, val)
41684
41685          // same as bits, val is unused
41686          __builtin_avr_insert_bits (0x76543210, bits, val)
41687
41688          // same as rotating bits by 4
41689          __builtin_avr_insert_bits (0x32107654, bits, 0)
41690
41691          // high nibble of result is the high nibble of val
41692          // low nibble of result is the low nibble of bits
41693          __builtin_avr_insert_bits (0xffff3210, bits, val)
41694
41695          // reverse the bit order of bits
41696          __builtin_avr_insert_bits (0x01234567, bits, 0)
41697
41698'void __builtin_avr_nops (unsigned count)'
41699     Insert COUNT 'NOP' instructions.  The number of instructions must
41700     be a compile-time integer constant.
41701
41702There are many more AVR-specific built-in functions that are used to
41703implement the ISO/IEC TR 18037 "Embedded C" fixed-point functions of
41704section 7.18a.6.  You don't need to use these built-ins directly.
41705Instead, use the declarations as supplied by the 'stdfix.h' header with
41706GNU-C99:
41707
41708     #include <stdfix.h>
41709
41710     // Re-interpret the bit representation of unsigned 16-bit
41711     // integer UVAL as Q-format 0.16 value.
41712     unsigned fract get_bits (uint_ur_t uval)
41713     {
41714         return urbits (uval);
41715     }
41716
41717
41718File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: AVR Built-in Functions,  Up: Target Builtins
41719
417206.59.11 Blackfin Built-in Functions
41721-----------------------------------
41722
41723Currently, there are two Blackfin-specific built-in functions.  These
41724are used for generating 'CSYNC' and 'SSYNC' machine insns without using
41725inline assembly; by using these built-in functions the compiler can
41726automatically add workarounds for hardware errata involving these
41727instructions.  These functions are named as follows:
41728
41729     void __builtin_bfin_csync (void)
41730     void __builtin_bfin_ssync (void)
41731
41732
41733File: gcc.info,  Node: FR-V Built-in Functions,  Next: MIPS DSP Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
41734
417356.59.12 FR-V Built-in Functions
41736-------------------------------
41737
41738GCC provides many FR-V-specific built-in functions.  In general, these
41739functions are intended to be compatible with those described by 'FR-V
41740Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.  The
41741two exceptions are '__MDUNPACKH' and '__MBTOHE', the GCC forms of which
41742pass 128-bit values by pointer rather than by value.
41743
41744 Most of the functions are named after specific FR-V instructions.  Such
41745functions are said to be "directly mapped" and are summarized here in
41746tabular form.
41747
41748* Menu:
41749
41750* Argument Types::
41751* Directly-mapped Integer Functions::
41752* Directly-mapped Media Functions::
41753* Raw read/write Functions::
41754* Other Built-in Functions::
41755
41756
41757File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
41758
417596.59.12.1 Argument Types
41760........................
41761
41762The arguments to the built-in functions can be divided into three
41763groups: register numbers, compile-time constants and run-time values.
41764In order to make this classification clear at a glance, the arguments
41765and return values are given the following pseudo types:
41766
41767Pseudo type    Real C type            Constant?   Description
41768'uh'           'unsigned short'       No          an unsigned halfword
41769'uw1'          'unsigned int'         No          an unsigned word
41770'sw1'          'int'                  No          a signed word
41771'uw2'          'unsigned long long'   No          an unsigned doubleword
41772'sw2'          'long long'            No          a signed doubleword
41773'const'        'int'                  Yes         an integer constant
41774'acc'          'int'                  Yes         an ACC register number
41775'iacc'         'int'                  Yes         an IACC register number
41776
41777 These pseudo types are not defined by GCC, they are simply a notational
41778convenience used in this manual.
41779
41780 Arguments of type 'uh', 'uw1', 'sw1', 'uw2' and 'sw2' are evaluated at
41781run time.  They correspond to register operands in the underlying FR-V
41782instructions.
41783
41784 'const' arguments represent immediate operands in the underlying FR-V
41785instructions.  They must be compile-time constants.
41786
41787 'acc' arguments are evaluated at compile time and specify the number of
41788an accumulator register.  For example, an 'acc' argument of 2 selects
41789the ACC2 register.
41790
41791 'iacc' arguments are similar to 'acc' arguments but specify the number
41792of an IACC register.  See *note Other Built-in Functions:: for more
41793details.
41794
41795
41796File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
41797
417986.59.12.2 Directly-Mapped Integer Functions
41799...........................................
41800
41801The functions listed below map directly to FR-V I-type instructions.
41802
41803Function prototype               Example usage           Assembly output
41804'sw1 __ADDSS (sw1, sw1)'         'C = __ADDSS (A, B)'    'ADDSS A,B,C'
41805'sw1 __SCAN (sw1, sw1)'          'C = __SCAN (A, B)'     'SCAN A,B,C'
41806'sw1 __SCUTSS (sw1)'             'B = __SCUTSS (A)'      'SCUTSS A,B'
41807'sw1 __SLASS (sw1, sw1)'         'C = __SLASS (A, B)'    'SLASS A,B,C'
41808'void __SMASS (sw1, sw1)'        '__SMASS (A, B)'        'SMASS A,B'
41809'void __SMSSS (sw1, sw1)'        '__SMSSS (A, B)'        'SMSSS A,B'
41810'void __SMU (sw1, sw1)'          '__SMU (A, B)'          'SMU A,B'
41811'sw2 __SMUL (sw1, sw1)'          'C = __SMUL (A, B)'     'SMUL A,B,C'
41812'sw1 __SUBSS (sw1, sw1)'         'C = __SUBSS (A, B)'    'SUBSS A,B,C'
41813'uw2 __UMUL (uw1, uw1)'          'C = __UMUL (A, B)'     'UMUL A,B,C'
41814
41815
41816File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
41817
418186.59.12.3 Directly-Mapped Media Functions
41819.........................................
41820
41821The functions listed below map directly to FR-V M-type instructions.
41822
41823Function prototype               Example usage           Assembly output
41824'uw1 __MABSHS (sw1)'             'B = __MABSHS (A)'      'MABSHS A,B'
41825'void __MADDACCS (acc, acc)'     '__MADDACCS (B, A)'     'MADDACCS A,B'
41826'sw1 __MADDHSS (sw1, sw1)'       'C = __MADDHSS (A,      'MADDHSS A,B,C'
41827                                 B)'
41828'uw1 __MADDHUS (uw1, uw1)'       'C = __MADDHUS (A,      'MADDHUS A,B,C'
41829                                 B)'
41830'uw1 __MAND (uw1, uw1)'          'C = __MAND (A, B)'     'MAND A,B,C'
41831'void __MASACCS (acc, acc)'      '__MASACCS (B, A)'      'MASACCS A,B'
41832'uw1 __MAVEH (uw1, uw1)'         'C = __MAVEH (A, B)'    'MAVEH A,B,C'
41833'uw2 __MBTOH (uw1)'              'B = __MBTOH (A)'       'MBTOH A,B'
41834'void __MBTOHE (uw1 *, uw1)'     '__MBTOHE (&B, A)'      'MBTOHE A,B'
41835'void __MCLRACC (acc)'           '__MCLRACC (A)'         'MCLRACC A'
41836'void __MCLRACCA (void)'         '__MCLRACCA ()'         'MCLRACCA'
41837'uw1 __Mcop1 (uw1, uw1)'         'C = __Mcop1 (A, B)'    'Mcop1 A,B,C'
41838'uw1 __Mcop2 (uw1, uw1)'         'C = __Mcop2 (A, B)'    'Mcop2 A,B,C'
41839'uw1 __MCPLHI (uw2, const)'      'C = __MCPLHI (A, B)'   'MCPLHI A,#B,C'
41840'uw1 __MCPLI (uw2, const)'       'C = __MCPLI (A, B)'    'MCPLI A,#B,C'
41841'void __MCPXIS (acc, sw1,        '__MCPXIS (C, A, B)'    'MCPXIS A,B,C'
41842sw1)'
41843'void __MCPXIU (acc, uw1,        '__MCPXIU (C, A, B)'    'MCPXIU A,B,C'
41844uw1)'
41845'void __MCPXRS (acc, sw1,        '__MCPXRS (C, A, B)'    'MCPXRS A,B,C'
41846sw1)'
41847'void __MCPXRU (acc, uw1,        '__MCPXRU (C, A, B)'    'MCPXRU A,B,C'
41848uw1)'
41849'uw1 __MCUT (acc, uw1)'          'C = __MCUT (A, B)'     'MCUT A,B,C'
41850'uw1 __MCUTSS (acc, sw1)'        'C = __MCUTSS (A, B)'   'MCUTSS A,B,C'
41851'void __MDADDACCS (acc, acc)'    '__MDADDACCS (B, A)'    'MDADDACCS A,B'
41852'void __MDASACCS (acc, acc)'     '__MDASACCS (B, A)'     'MDASACCS A,B'
41853'uw2 __MDCUTSSI (acc, const)'    'C = __MDCUTSSI (A,     'MDCUTSSI
41854                                 B)'                     A,#B,C'
41855'uw2 __MDPACKH (uw2, uw2)'       'C = __MDPACKH (A,      'MDPACKH A,B,C'
41856                                 B)'
41857'uw2 __MDROTLI (uw2, const)'     'C = __MDROTLI (A,      'MDROTLI
41858                                 B)'                     A,#B,C'
41859'void __MDSUBACCS (acc, acc)'    '__MDSUBACCS (B, A)'    'MDSUBACCS A,B'
41860'void __MDUNPACKH (uw1 *,        '__MDUNPACKH (&B, A)'   'MDUNPACKH A,B'
41861uw2)'
41862'uw2 __MEXPDHD (uw1, const)'     'C = __MEXPDHD (A,      'MEXPDHD
41863                                 B)'                     A,#B,C'
41864'uw1 __MEXPDHW (uw1, const)'     'C = __MEXPDHW (A,      'MEXPDHW
41865                                 B)'                     A,#B,C'
41866'uw1 __MHDSETH (uw1, const)'     'C = __MHDSETH (A,      'MHDSETH
41867                                 B)'                     A,#B,C'
41868'sw1 __MHDSETS (const)'          'B = __MHDSETS (A)'     'MHDSETS #A,B'
41869'uw1 __MHSETHIH (uw1, const)'    'B = __MHSETHIH (B,     'MHSETHIH #A,B'
41870                                 A)'
41871'sw1 __MHSETHIS (sw1, const)'    'B = __MHSETHIS (B,     'MHSETHIS #A,B'
41872                                 A)'
41873'uw1 __MHSETLOH (uw1, const)'    'B = __MHSETLOH (B,     'MHSETLOH #A,B'
41874                                 A)'
41875'sw1 __MHSETLOS (sw1, const)'    'B = __MHSETLOS (B,     'MHSETLOS #A,B'
41876                                 A)'
41877'uw1 __MHTOB (uw2)'              'B = __MHTOB (A)'       'MHTOB A,B'
41878'void __MMACHS (acc, sw1,        '__MMACHS (C, A, B)'    'MMACHS A,B,C'
41879sw1)'
41880'void __MMACHU (acc, uw1,        '__MMACHU (C, A, B)'    'MMACHU A,B,C'
41881uw1)'
41882'void __MMRDHS (acc, sw1,        '__MMRDHS (C, A, B)'    'MMRDHS A,B,C'
41883sw1)'
41884'void __MMRDHU (acc, uw1,        '__MMRDHU (C, A, B)'    'MMRDHU A,B,C'
41885uw1)'
41886'void __MMULHS (acc, sw1,        '__MMULHS (C, A, B)'    'MMULHS A,B,C'
41887sw1)'
41888'void __MMULHU (acc, uw1,        '__MMULHU (C, A, B)'    'MMULHU A,B,C'
41889uw1)'
41890'void __MMULXHS (acc, sw1,       '__MMULXHS (C, A, B)'   'MMULXHS A,B,C'
41891sw1)'
41892'void __MMULXHU (acc, uw1,       '__MMULXHU (C, A, B)'   'MMULXHU A,B,C'
41893uw1)'
41894'uw1 __MNOT (uw1)'               'B = __MNOT (A)'        'MNOT A,B'
41895'uw1 __MOR (uw1, uw1)'           'C = __MOR (A, B)'      'MOR A,B,C'
41896'uw1 __MPACKH (uh, uh)'          'C = __MPACKH (A, B)'   'MPACKH A,B,C'
41897'sw2 __MQADDHSS (sw2, sw2)'      'C = __MQADDHSS (A,     'MQADDHSS
41898                                 B)'                     A,B,C'
41899'uw2 __MQADDHUS (uw2, uw2)'      'C = __MQADDHUS (A,     'MQADDHUS
41900                                 B)'                     A,B,C'
41901'void __MQCPXIS (acc, sw2,       '__MQCPXIS (C, A, B)'   'MQCPXIS A,B,C'
41902sw2)'
41903'void __MQCPXIU (acc, uw2,       '__MQCPXIU (C, A, B)'   'MQCPXIU A,B,C'
41904uw2)'
41905'void __MQCPXRS (acc, sw2,       '__MQCPXRS (C, A, B)'   'MQCPXRS A,B,C'
41906sw2)'
41907'void __MQCPXRU (acc, uw2,       '__MQCPXRU (C, A, B)'   'MQCPXRU A,B,C'
41908uw2)'
41909'sw2 __MQLCLRHS (sw2, sw2)'      'C = __MQLCLRHS (A,     'MQLCLRHS
41910                                 B)'                     A,B,C'
41911'sw2 __MQLMTHS (sw2, sw2)'       'C = __MQLMTHS (A,      'MQLMTHS A,B,C'
41912                                 B)'
41913'void __MQMACHS (acc, sw2,       '__MQMACHS (C, A, B)'   'MQMACHS A,B,C'
41914sw2)'
41915'void __MQMACHU (acc, uw2,       '__MQMACHU (C, A, B)'   'MQMACHU A,B,C'
41916uw2)'
41917'void __MQMACXHS (acc, sw2,      '__MQMACXHS (C, A,      'MQMACXHS
41918sw2)'                            B)'                     A,B,C'
41919'void __MQMULHS (acc, sw2,       '__MQMULHS (C, A, B)'   'MQMULHS A,B,C'
41920sw2)'
41921'void __MQMULHU (acc, uw2,       '__MQMULHU (C, A, B)'   'MQMULHU A,B,C'
41922uw2)'
41923'void __MQMULXHS (acc, sw2,      '__MQMULXHS (C, A,      'MQMULXHS
41924sw2)'                            B)'                     A,B,C'
41925'void __MQMULXHU (acc, uw2,      '__MQMULXHU (C, A,      'MQMULXHU
41926uw2)'                            B)'                     A,B,C'
41927'sw2 __MQSATHS (sw2, sw2)'       'C = __MQSATHS (A,      'MQSATHS A,B,C'
41928                                 B)'
41929'uw2 __MQSLLHI (uw2, int)'       'C = __MQSLLHI (A,      'MQSLLHI A,B,C'
41930                                 B)'
41931'sw2 __MQSRAHI (sw2, int)'       'C = __MQSRAHI (A,      'MQSRAHI A,B,C'
41932                                 B)'
41933'sw2 __MQSUBHSS (sw2, sw2)'      'C = __MQSUBHSS (A,     'MQSUBHSS
41934                                 B)'                     A,B,C'
41935'uw2 __MQSUBHUS (uw2, uw2)'      'C = __MQSUBHUS (A,     'MQSUBHUS
41936                                 B)'                     A,B,C'
41937'void __MQXMACHS (acc, sw2,      '__MQXMACHS (C, A,      'MQXMACHS
41938sw2)'                            B)'                     A,B,C'
41939'void __MQXMACXHS (acc, sw2,     '__MQXMACXHS (C, A,     'MQXMACXHS
41940sw2)'                            B)'                     A,B,C'
41941'uw1 __MRDACC (acc)'             'B = __MRDACC (A)'      'MRDACC A,B'
41942'uw1 __MRDACCG (acc)'            'B = __MRDACCG (A)'     'MRDACCG A,B'
41943'uw1 __MROTLI (uw1, const)'      'C = __MROTLI (A, B)'   'MROTLI A,#B,C'
41944'uw1 __MROTRI (uw1, const)'      'C = __MROTRI (A, B)'   'MROTRI A,#B,C'
41945'sw1 __MSATHS (sw1, sw1)'        'C = __MSATHS (A, B)'   'MSATHS A,B,C'
41946'uw1 __MSATHU (uw1, uw1)'        'C = __MSATHU (A, B)'   'MSATHU A,B,C'
41947'uw1 __MSLLHI (uw1, const)'      'C = __MSLLHI (A, B)'   'MSLLHI A,#B,C'
41948'sw1 __MSRAHI (sw1, const)'      'C = __MSRAHI (A, B)'   'MSRAHI A,#B,C'
41949'uw1 __MSRLHI (uw1, const)'      'C = __MSRLHI (A, B)'   'MSRLHI A,#B,C'
41950'void __MSUBACCS (acc, acc)'     '__MSUBACCS (B, A)'     'MSUBACCS A,B'
41951'sw1 __MSUBHSS (sw1, sw1)'       'C = __MSUBHSS (A,      'MSUBHSS A,B,C'
41952                                 B)'
41953'uw1 __MSUBHUS (uw1, uw1)'       'C = __MSUBHUS (A,      'MSUBHUS A,B,C'
41954                                 B)'
41955'void __MTRAP (void)'            '__MTRAP ()'            'MTRAP'
41956'uw2 __MUNPACKH (uw1)'           'B = __MUNPACKH (A)'    'MUNPACKH A,B'
41957'uw1 __MWCUT (uw2, uw1)'         'C = __MWCUT (A, B)'    'MWCUT A,B,C'
41958'void __MWTACC (acc, uw1)'       '__MWTACC (B, A)'       'MWTACC A,B'
41959'void __MWTACCG (acc, uw1)'      '__MWTACCG (B, A)'      'MWTACCG A,B'
41960'uw1 __MXOR (uw1, uw1)'          'C = __MXOR (A, B)'     'MXOR A,B,C'
41961
41962
41963File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
41964
419656.59.12.4 Raw Read/Write Functions
41966..................................
41967
41968This sections describes built-in functions related to read and write
41969instructions to access memory.  These functions generate 'membar'
41970instructions to flush the I/O load and stores where appropriate, as
41971described in Fujitsu's manual described above.
41972
41973'unsigned char __builtin_read8 (void *DATA)'
41974'unsigned short __builtin_read16 (void *DATA)'
41975'unsigned long __builtin_read32 (void *DATA)'
41976'unsigned long long __builtin_read64 (void *DATA)'
41977
41978'void __builtin_write8 (void *DATA, unsigned char DATUM)'
41979'void __builtin_write16 (void *DATA, unsigned short DATUM)'
41980'void __builtin_write32 (void *DATA, unsigned long DATUM)'
41981'void __builtin_write64 (void *DATA, unsigned long long DATUM)'
41982
41983
41984File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
41985
419866.59.12.5 Other Built-in Functions
41987..................................
41988
41989This section describes built-in functions that are not named after a
41990specific FR-V instruction.
41991
41992'sw2 __IACCreadll (iacc REG)'
41993     Return the full 64-bit value of IACC0.  The REG argument is
41994     reserved for future expansion and must be 0.
41995
41996'sw1 __IACCreadl (iacc REG)'
41997     Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
41998     Other values of REG are rejected as invalid.
41999
42000'void __IACCsetll (iacc REG, sw2 X)'
42001     Set the full 64-bit value of IACC0 to X.  The REG argument is
42002     reserved for future expansion and must be 0.
42003
42004'void __IACCsetl (iacc REG, sw1 X)'
42005     Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
42006     values of REG are rejected as invalid.
42007
42008'void __data_prefetch0 (const void *X)'
42009     Use the 'dcpl' instruction to load the contents of address X into
42010     the data cache.
42011
42012'void __data_prefetch (const void *X)'
42013     Use the 'nldub' instruction to load the contents of address X into
42014     the data cache.  The instruction is issued in slot I1.
42015
42016
42017File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: FR-V Built-in Functions,  Up: Target Builtins
42018
420196.59.13 MIPS DSP Built-in Functions
42020-----------------------------------
42021
42022The MIPS DSP Application-Specific Extension (ASE) includes new
42023instructions that are designed to improve the performance of DSP and
42024media applications.  It provides instructions that operate on packed
420258-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
42026
42027 GCC supports MIPS DSP operations using both the generic vector
42028extensions (*note Vector Extensions::) and a collection of MIPS-specific
42029built-in functions.  Both kinds of support are enabled by the '-mdsp'
42030command-line option.
42031
42032 Revision 2 of the ASE was introduced in the second half of 2006.  This
42033revision adds extra instructions to the original ASE, but is otherwise
42034backwards-compatible with it.  You can select revision 2 using the
42035command-line option '-mdspr2'; this option implies '-mdsp'.
42036
42037 The SCOUNT and POS bits of the DSP control register are global.  The
42038WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and POS
42039bits.  During optimization, the compiler does not delete these
42040instructions and it does not delete calls to functions containing these
42041instructions.
42042
42043 At present, GCC only provides support for operations on 32-bit vectors.
42044The vector type associated with 8-bit integer data is usually called
42045'v4i8', the vector type associated with Q7 is usually called 'v4q7', the
42046vector type associated with 16-bit integer data is usually called
42047'v2i16', and the vector type associated with Q15 is usually called
42048'v2q15'.  They can be defined in C as follows:
42049
42050     typedef signed char v4i8 __attribute__ ((vector_size(4)));
42051     typedef signed char v4q7 __attribute__ ((vector_size(4)));
42052     typedef short v2i16 __attribute__ ((vector_size(4)));
42053     typedef short v2q15 __attribute__ ((vector_size(4)));
42054
42055 'v4i8', 'v4q7', 'v2i16' and 'v2q15' values are initialized in the same
42056way as aggregates.  For example:
42057
42058     v4i8 a = {1, 2, 3, 4};
42059     v4i8 b;
42060     b = (v4i8) {5, 6, 7, 8};
42061
42062     v2q15 c = {0x0fcb, 0x3a75};
42063     v2q15 d;
42064     d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
42065
42066 _Note:_ The CPU's endianness determines the order in which values are
42067packed.  On little-endian targets, the first value is the least
42068significant and the last value is the most significant.  The opposite
42069order applies to big-endian targets.  For example, the code above sets
42070the lowest byte of 'a' to '1' on little-endian targets and '4' on
42071big-endian targets.
42072
42073 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
42074representation.  As shown in this example, the integer representation of
42075a Q7 value can be obtained by multiplying the fractional value by
42076'0x1.0p7'.  The equivalent for Q15 values is to multiply by '0x1.0p15'.
42077The equivalent for Q31 values is to multiply by '0x1.0p31'.
42078
42079 The table below lists the 'v4i8' and 'v2q15' operations for which
42080hardware support exists.  'a' and 'b' are 'v4i8' values, and 'c' and 'd'
42081are 'v2q15' values.
42082
42083C code                               MIPS instruction
42084'a + b'                              'addu.qb'
42085'c + d'                              'addq.ph'
42086'a - b'                              'subu.qb'
42087'c - d'                              'subq.ph'
42088
42089 The table below lists the 'v2i16' operation for which hardware support
42090exists for the DSP ASE REV 2.  'e' and 'f' are 'v2i16' values.
42091
42092C code                               MIPS instruction
42093'e * f'                              'mul.ph'
42094
42095 It is easier to describe the DSP built-in functions if we first define
42096the following types:
42097
42098     typedef int q31;
42099     typedef int i32;
42100     typedef unsigned int ui32;
42101     typedef long long a64;
42102
42103 'q31' and 'i32' are actually the same as 'int', but we use 'q31' to
42104indicate a Q31 fractional value and 'i32' to indicate a 32-bit integer
42105value.  Similarly, 'a64' is the same as 'long long', but we use 'a64' to
42106indicate values that are placed in one of the four DSP accumulators
42107('$ac0', '$ac1', '$ac2' or '$ac3').
42108
42109 Also, some built-in functions prefer or require immediate numbers as
42110parameters, because the corresponding DSP instructions accept both
42111immediate numbers and register operands, or accept immediate numbers
42112only.  The immediate parameters are listed as follows.
42113
42114     imm0_3: 0 to 3.
42115     imm0_7: 0 to 7.
42116     imm0_15: 0 to 15.
42117     imm0_31: 0 to 31.
42118     imm0_63: 0 to 63.
42119     imm0_255: 0 to 255.
42120     imm_n32_31: -32 to 31.
42121     imm_n512_511: -512 to 511.
42122
42123 The following built-in functions map directly to a particular MIPS DSP
42124instruction.  Please refer to the architecture specification for details
42125on what each instruction does.
42126
42127     v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
42128     v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
42129     q31 __builtin_mips_addq_s_w (q31, q31)
42130     v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
42131     v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
42132     v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
42133     v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
42134     q31 __builtin_mips_subq_s_w (q31, q31)
42135     v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
42136     v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
42137     i32 __builtin_mips_addsc (i32, i32)
42138     i32 __builtin_mips_addwc (i32, i32)
42139     i32 __builtin_mips_modsub (i32, i32)
42140     i32 __builtin_mips_raddu_w_qb (v4i8)
42141     v2q15 __builtin_mips_absq_s_ph (v2q15)
42142     q31 __builtin_mips_absq_s_w (q31)
42143     v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
42144     v2q15 __builtin_mips_precrq_ph_w (q31, q31)
42145     v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
42146     v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
42147     q31 __builtin_mips_preceq_w_phl (v2q15)
42148     q31 __builtin_mips_preceq_w_phr (v2q15)
42149     v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
42150     v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
42151     v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
42152     v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
42153     v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
42154     v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
42155     v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
42156     v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
42157     v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
42158     v4i8 __builtin_mips_shll_qb (v4i8, i32)
42159     v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
42160     v2q15 __builtin_mips_shll_ph (v2q15, i32)
42161     v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
42162     v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
42163     q31 __builtin_mips_shll_s_w (q31, imm0_31)
42164     q31 __builtin_mips_shll_s_w (q31, i32)
42165     v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
42166     v4i8 __builtin_mips_shrl_qb (v4i8, i32)
42167     v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
42168     v2q15 __builtin_mips_shra_ph (v2q15, i32)
42169     v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
42170     v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
42171     q31 __builtin_mips_shra_r_w (q31, imm0_31)
42172     q31 __builtin_mips_shra_r_w (q31, i32)
42173     v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
42174     v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
42175     v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
42176     q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
42177     q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
42178     a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
42179     a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
42180     a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
42181     a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
42182     a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
42183     a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
42184     a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
42185     a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
42186     a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
42187     a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
42188     a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
42189     a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
42190     a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
42191     i32 __builtin_mips_bitrev (i32)
42192     i32 __builtin_mips_insv (i32, i32)
42193     v4i8 __builtin_mips_repl_qb (imm0_255)
42194     v4i8 __builtin_mips_repl_qb (i32)
42195     v2q15 __builtin_mips_repl_ph (imm_n512_511)
42196     v2q15 __builtin_mips_repl_ph (i32)
42197     void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
42198     void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
42199     void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
42200     i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
42201     i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
42202     i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
42203     void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
42204     void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
42205     void __builtin_mips_cmp_le_ph (v2q15, v2q15)
42206     v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
42207     v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
42208     v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
42209     i32 __builtin_mips_extr_w (a64, imm0_31)
42210     i32 __builtin_mips_extr_w (a64, i32)
42211     i32 __builtin_mips_extr_r_w (a64, imm0_31)
42212     i32 __builtin_mips_extr_s_h (a64, i32)
42213     i32 __builtin_mips_extr_rs_w (a64, imm0_31)
42214     i32 __builtin_mips_extr_rs_w (a64, i32)
42215     i32 __builtin_mips_extr_s_h (a64, imm0_31)
42216     i32 __builtin_mips_extr_r_w (a64, i32)
42217     i32 __builtin_mips_extp (a64, imm0_31)
42218     i32 __builtin_mips_extp (a64, i32)
42219     i32 __builtin_mips_extpdp (a64, imm0_31)
42220     i32 __builtin_mips_extpdp (a64, i32)
42221     a64 __builtin_mips_shilo (a64, imm_n32_31)
42222     a64 __builtin_mips_shilo (a64, i32)
42223     a64 __builtin_mips_mthlip (a64, i32)
42224     void __builtin_mips_wrdsp (i32, imm0_63)
42225     i32 __builtin_mips_rddsp (imm0_63)
42226     i32 __builtin_mips_lbux (void *, i32)
42227     i32 __builtin_mips_lhx (void *, i32)
42228     i32 __builtin_mips_lwx (void *, i32)
42229     a64 __builtin_mips_ldx (void *, i32) [MIPS64 only]
42230     i32 __builtin_mips_bposge32 (void)
42231     a64 __builtin_mips_madd (a64, i32, i32);
42232     a64 __builtin_mips_maddu (a64, ui32, ui32);
42233     a64 __builtin_mips_msub (a64, i32, i32);
42234     a64 __builtin_mips_msubu (a64, ui32, ui32);
42235     a64 __builtin_mips_mult (i32, i32);
42236     a64 __builtin_mips_multu (ui32, ui32);
42237
42238 The following built-in functions map directly to a particular MIPS DSP
42239REV 2 instruction.  Please refer to the architecture specification for
42240details on what each instruction does.
42241
42242     v4q7 __builtin_mips_absq_s_qb (v4q7);
42243     v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
42244     v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
42245     v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
42246     v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
42247     i32 __builtin_mips_append (i32, i32, imm0_31);
42248     i32 __builtin_mips_balign (i32, i32, imm0_3);
42249     i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
42250     i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
42251     i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
42252     a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
42253     a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
42254     v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
42255     v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
42256     q31 __builtin_mips_mulq_rs_w (q31, q31);
42257     v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
42258     q31 __builtin_mips_mulq_s_w (q31, q31);
42259     a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
42260     v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
42261     v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
42262     v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
42263     i32 __builtin_mips_prepend (i32, i32, imm0_31);
42264     v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
42265     v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
42266     v4i8 __builtin_mips_shra_qb (v4i8, i32);
42267     v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
42268     v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
42269     v2i16 __builtin_mips_shrl_ph (v2i16, i32);
42270     v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
42271     v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
42272     v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
42273     v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
42274     v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
42275     v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
42276     q31 __builtin_mips_addqh_w (q31, q31);
42277     q31 __builtin_mips_addqh_r_w (q31, q31);
42278     v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
42279     v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
42280     q31 __builtin_mips_subqh_w (q31, q31);
42281     q31 __builtin_mips_subqh_r_w (q31, q31);
42282     a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
42283     a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
42284     a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
42285     a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
42286     a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
42287     a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
42288
42289
42290File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
42291
422926.59.14 MIPS Paired-Single Support
42293----------------------------------
42294
42295The MIPS64 architecture includes a number of instructions that operate
42296on pairs of single-precision floating-point values.  Each pair is packed
42297into a 64-bit floating-point register, with one element being designated
42298the "upper half" and the other being designated the "lower half".
42299
42300 GCC supports paired-single operations using both the generic vector
42301extensions (*note Vector Extensions::) and a collection of MIPS-specific
42302built-in functions.  Both kinds of support are enabled by the
42303'-mpaired-single' command-line option.
42304
42305 The vector type associated with paired-single values is usually called
42306'v2sf'.  It can be defined in C as follows:
42307
42308     typedef float v2sf __attribute__ ((vector_size (8)));
42309
42310 'v2sf' values are initialized in the same way as aggregates.  For
42311example:
42312
42313     v2sf a = {1.5, 9.1};
42314     v2sf b;
42315     float e, f;
42316     b = (v2sf) {e, f};
42317
42318 _Note:_ The CPU's endianness determines which value is stored in the
42319upper half of a register and which value is stored in the lower half.
42320On little-endian targets, the first value is the lower one and the
42321second value is the upper one.  The opposite order applies to big-endian
42322targets.  For example, the code above sets the lower half of 'a' to
42323'1.5' on little-endian targets and '9.1' on big-endian targets.
42324
42325
42326File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: MIPS SIMD Architecture (MSA) Support,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
42327
423286.59.15 MIPS Loongson Built-in Functions
42329----------------------------------------
42330
42331GCC provides intrinsics to access the SIMD instructions provided by the
42332ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
42333available after inclusion of the 'loongson.h' header file, operate on
42334the following 64-bit vector types:
42335
42336   * 'uint8x8_t', a vector of eight unsigned 8-bit integers;
42337   * 'uint16x4_t', a vector of four unsigned 16-bit integers;
42338   * 'uint32x2_t', a vector of two unsigned 32-bit integers;
42339   * 'int8x8_t', a vector of eight signed 8-bit integers;
42340   * 'int16x4_t', a vector of four signed 16-bit integers;
42341   * 'int32x2_t', a vector of two signed 32-bit integers.
42342
42343 The intrinsics provided are listed below; each is named after the
42344machine instruction to which it corresponds, with suffixes added as
42345appropriate to distinguish intrinsics that expand to the same machine
42346instruction yet have different argument types.  Refer to the
42347architecture documentation for a description of the functionality of
42348each instruction.
42349
42350     int16x4_t packsswh (int32x2_t s, int32x2_t t);
42351     int8x8_t packsshb (int16x4_t s, int16x4_t t);
42352     uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
42353     uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
42354     uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
42355     uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
42356     int32x2_t paddw_s (int32x2_t s, int32x2_t t);
42357     int16x4_t paddh_s (int16x4_t s, int16x4_t t);
42358     int8x8_t paddb_s (int8x8_t s, int8x8_t t);
42359     uint64_t paddd_u (uint64_t s, uint64_t t);
42360     int64_t paddd_s (int64_t s, int64_t t);
42361     int16x4_t paddsh (int16x4_t s, int16x4_t t);
42362     int8x8_t paddsb (int8x8_t s, int8x8_t t);
42363     uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
42364     uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
42365     uint64_t pandn_ud (uint64_t s, uint64_t t);
42366     uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
42367     uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
42368     uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
42369     int64_t pandn_sd (int64_t s, int64_t t);
42370     int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
42371     int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
42372     int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
42373     uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
42374     uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
42375     uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
42376     uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
42377     uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
42378     int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
42379     int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
42380     int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
42381     uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
42382     uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
42383     uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
42384     int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
42385     int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
42386     int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
42387     uint16x4_t pextrh_u (uint16x4_t s, int field);
42388     int16x4_t pextrh_s (int16x4_t s, int field);
42389     uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
42390     uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
42391     uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
42392     uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
42393     int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
42394     int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
42395     int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
42396     int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
42397     int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
42398     int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
42399     uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
42400     int16x4_t pminsh (int16x4_t s, int16x4_t t);
42401     uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
42402     uint8x8_t pmovmskb_u (uint8x8_t s);
42403     int8x8_t pmovmskb_s (int8x8_t s);
42404     uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
42405     int16x4_t pmulhh (int16x4_t s, int16x4_t t);
42406     int16x4_t pmullh (int16x4_t s, int16x4_t t);
42407     int64_t pmuluw (uint32x2_t s, uint32x2_t t);
42408     uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
42409     uint16x4_t biadd (uint8x8_t s);
42410     uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
42411     uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
42412     int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
42413     uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
42414     int16x4_t psllh_s (int16x4_t s, uint8_t amount);
42415     uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
42416     int32x2_t psllw_s (int32x2_t s, uint8_t amount);
42417     uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
42418     int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
42419     uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
42420     int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
42421     uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
42422     int16x4_t psrah_s (int16x4_t s, uint8_t amount);
42423     uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
42424     int32x2_t psraw_s (int32x2_t s, uint8_t amount);
42425     uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
42426     uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
42427     uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
42428     int32x2_t psubw_s (int32x2_t s, int32x2_t t);
42429     int16x4_t psubh_s (int16x4_t s, int16x4_t t);
42430     int8x8_t psubb_s (int8x8_t s, int8x8_t t);
42431     uint64_t psubd_u (uint64_t s, uint64_t t);
42432     int64_t psubd_s (int64_t s, int64_t t);
42433     int16x4_t psubsh (int16x4_t s, int16x4_t t);
42434     int8x8_t psubsb (int8x8_t s, int8x8_t t);
42435     uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
42436     uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
42437     uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
42438     uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
42439     uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
42440     int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
42441     int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
42442     int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
42443     uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
42444     uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
42445     uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
42446     int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
42447     int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
42448     int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
42449
42450* Menu:
42451
42452* Paired-Single Arithmetic::
42453* Paired-Single Built-in Functions::
42454* MIPS-3D Built-in Functions::
42455
42456
42457File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
42458
424596.59.15.1 Paired-Single Arithmetic
42460..................................
42461
42462The table below lists the 'v2sf' operations for which hardware support
42463exists.  'a', 'b' and 'c' are 'v2sf' values and 'x' is an integral
42464value.
42465
42466C code                               MIPS instruction
42467'a + b'                              'add.ps'
42468'a - b'                              'sub.ps'
42469'-a'                                 'neg.ps'
42470'a * b'                              'mul.ps'
42471'a * b + c'                          'madd.ps'
42472'a * b - c'                          'msub.ps'
42473'-(a * b + c)'                       'nmadd.ps'
42474'-(a * b - c)'                       'nmsub.ps'
42475'x ? a : b'                          'movn.ps'/'movz.ps'
42476
42477 Note that the multiply-accumulate instructions can be disabled using
42478the command-line option '-mno-fused-madd'.
42479
42480
42481File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Loongson Built-in Functions
42482
424836.59.15.2 Paired-Single Built-in Functions
42484..........................................
42485
42486The following paired-single functions map directly to a particular MIPS
42487instruction.  Please refer to the architecture specification for details
42488on what each instruction does.
42489
42490'v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
42491     Pair lower lower ('pll.ps').
42492
42493'v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
42494     Pair upper lower ('pul.ps').
42495
42496'v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
42497     Pair lower upper ('plu.ps').
42498
42499'v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
42500     Pair upper upper ('puu.ps').
42501
42502'v2sf __builtin_mips_cvt_ps_s (float, float)'
42503     Convert pair to paired single ('cvt.ps.s').
42504
42505'float __builtin_mips_cvt_s_pl (v2sf)'
42506     Convert pair lower to single ('cvt.s.pl').
42507
42508'float __builtin_mips_cvt_s_pu (v2sf)'
42509     Convert pair upper to single ('cvt.s.pu').
42510
42511'v2sf __builtin_mips_abs_ps (v2sf)'
42512     Absolute value ('abs.ps').
42513
42514'v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
42515     Align variable ('alnv.ps').
42516
42517     _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
42518     otherwise the result is unpredictable.  Please read the instruction
42519     description for details.
42520
42521 The following multi-instruction functions are also available.  In each
42522case, COND can be any of the 16 floating-point conditions: 'f', 'un',
42523'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
42524'lt', 'nge', 'le' or 'ngt'.
42525
42526'v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
42527'v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
42528     Conditional move based on floating-point comparison ('c.COND.ps',
42529     'movt.ps'/'movf.ps').
42530
42531     The 'movt' functions return the value X computed by:
42532
42533          c.COND.ps CC,A,B
42534          mov.ps X,C
42535          movt.ps X,D,CC
42536
42537     The 'movf' functions are similar but use 'movf.ps' instead of
42538     'movt.ps'.
42539
42540'int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
42541'int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
42542     Comparison of two paired-single values ('c.COND.ps',
42543     'bc1t'/'bc1f').
42544
42545     These functions compare A and B using 'c.COND.ps' and return either
42546     the upper or lower half of the result.  For example:
42547
42548          v2sf a, b;
42549          if (__builtin_mips_upper_c_eq_ps (a, b))
42550            upper_halves_are_equal ();
42551          else
42552            upper_halves_are_unequal ();
42553
42554          if (__builtin_mips_lower_c_eq_ps (a, b))
42555            lower_halves_are_equal ();
42556          else
42557            lower_halves_are_unequal ();
42558
42559
42560File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
42561
425626.59.15.3 MIPS-3D Built-in Functions
42563....................................
42564
42565The MIPS-3D Application-Specific Extension (ASE) includes additional
42566paired-single instructions that are designed to improve the performance
42567of 3D graphics operations.  Support for these instructions is controlled
42568by the '-mips3d' command-line option.
42569
42570 The functions listed below map directly to a particular MIPS-3D
42571instruction.  Please refer to the architecture specification for more
42572details on what each instruction does.
42573
42574'v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
42575     Reduction add ('addr.ps').
42576
42577'v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
42578     Reduction multiply ('mulr.ps').
42579
42580'v2sf __builtin_mips_cvt_pw_ps (v2sf)'
42581     Convert paired single to paired word ('cvt.pw.ps').
42582
42583'v2sf __builtin_mips_cvt_ps_pw (v2sf)'
42584     Convert paired word to paired single ('cvt.ps.pw').
42585
42586'float __builtin_mips_recip1_s (float)'
42587'double __builtin_mips_recip1_d (double)'
42588'v2sf __builtin_mips_recip1_ps (v2sf)'
42589     Reduced-precision reciprocal (sequence step 1) ('recip1.FMT').
42590
42591'float __builtin_mips_recip2_s (float, float)'
42592'double __builtin_mips_recip2_d (double, double)'
42593'v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
42594     Reduced-precision reciprocal (sequence step 2) ('recip2.FMT').
42595
42596'float __builtin_mips_rsqrt1_s (float)'
42597'double __builtin_mips_rsqrt1_d (double)'
42598'v2sf __builtin_mips_rsqrt1_ps (v2sf)'
42599     Reduced-precision reciprocal square root (sequence step 1)
42600     ('rsqrt1.FMT').
42601
42602'float __builtin_mips_rsqrt2_s (float, float)'
42603'double __builtin_mips_rsqrt2_d (double, double)'
42604'v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
42605     Reduced-precision reciprocal square root (sequence step 2)
42606     ('rsqrt2.FMT').
42607
42608 The following multi-instruction functions are also available.  In each
42609case, COND can be any of the 16 floating-point conditions: 'f', 'un',
42610'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
42611'lt', 'nge', 'le' or 'ngt'.
42612
42613'int __builtin_mips_cabs_COND_s (float A, float B)'
42614'int __builtin_mips_cabs_COND_d (double A, double B)'
42615     Absolute comparison of two scalar values ('cabs.COND.FMT',
42616     'bc1t'/'bc1f').
42617
42618     These functions compare A and B using 'cabs.COND.s' or
42619     'cabs.COND.d' and return the result as a boolean value.  For
42620     example:
42621
42622          float a, b;
42623          if (__builtin_mips_cabs_eq_s (a, b))
42624            true ();
42625          else
42626            false ();
42627
42628'int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
42629'int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
42630     Absolute comparison of two paired-single values ('cabs.COND.ps',
42631     'bc1t'/'bc1f').
42632
42633     These functions compare A and B using 'cabs.COND.ps' and return
42634     either the upper or lower half of the result.  For example:
42635
42636          v2sf a, b;
42637          if (__builtin_mips_upper_cabs_eq_ps (a, b))
42638            upper_halves_are_equal ();
42639          else
42640            upper_halves_are_unequal ();
42641
42642          if (__builtin_mips_lower_cabs_eq_ps (a, b))
42643            lower_halves_are_equal ();
42644          else
42645            lower_halves_are_unequal ();
42646
42647'v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
42648'v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
42649     Conditional move based on absolute comparison ('cabs.COND.ps',
42650     'movt.ps'/'movf.ps').
42651
42652     The 'movt' functions return the value X computed by:
42653
42654          cabs.COND.ps CC,A,B
42655          mov.ps X,C
42656          movt.ps X,D,CC
42657
42658     The 'movf' functions are similar but use 'movf.ps' instead of
42659     'movt.ps'.
42660
42661'int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
42662'int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
42663'int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
42664'int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
42665     Comparison of two paired-single values ('c.COND.ps'/'cabs.COND.ps',
42666     'bc1any2t'/'bc1any2f').
42667
42668     These functions compare A and B using 'c.COND.ps' or
42669     'cabs.COND.ps'.  The 'any' forms return true if either result is
42670     true and the 'all' forms return true if both results are true.  For
42671     example:
42672
42673          v2sf a, b;
42674          if (__builtin_mips_any_c_eq_ps (a, b))
42675            one_is_true ();
42676          else
42677            both_are_false ();
42678
42679          if (__builtin_mips_all_c_eq_ps (a, b))
42680            both_are_true ();
42681          else
42682            one_is_false ();
42683
42684'int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
42685'int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
42686'int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
42687'int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
42688     Comparison of four paired-single values
42689     ('c.COND.ps'/'cabs.COND.ps', 'bc1any4t'/'bc1any4f').
42690
42691     These functions use 'c.COND.ps' or 'cabs.COND.ps' to compare A with
42692     B and to compare C with D.  The 'any' forms return true if any of
42693     the four results are true and the 'all' forms return true if all
42694     four results are true.  For example:
42695
42696          v2sf a, b, c, d;
42697          if (__builtin_mips_any_c_eq_4s (a, b, c, d))
42698            some_are_true ();
42699          else
42700            all_are_false ();
42701
42702          if (__builtin_mips_all_c_eq_4s (a, b, c, d))
42703            all_are_true ();
42704          else
42705            some_are_false ();
42706
42707
42708File: gcc.info,  Node: MIPS SIMD Architecture (MSA) Support,  Next: Other MIPS Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins
42709
427106.59.16 MIPS SIMD Architecture (MSA) Support
42711--------------------------------------------
42712
42713* Menu:
42714
42715* MIPS SIMD Architecture Built-in Functions::
42716
42717GCC provides intrinsics to access the SIMD instructions provided by the
42718MSA MIPS SIMD Architecture.  The interface is made available by
42719including '<msa.h>' and using '-mmsa -mhard-float -mfp64 -mnan=2008'.
42720For each '__builtin_msa_*', there is a shortened name of the intrinsic,
42721'__msa_*'.
42722
42723 MSA implements 128-bit wide vector registers, operating on 8-, 16-, 32-
42724and 64-bit integer, 16- and 32-bit fixed-point, or 32- and 64-bit
42725floating point data elements.  The following vectors typedefs are
42726included in 'msa.h':
42727   * 'v16i8', a vector of sixteen signed 8-bit integers;
42728   * 'v16u8', a vector of sixteen unsigned 8-bit integers;
42729   * 'v8i16', a vector of eight signed 16-bit integers;
42730   * 'v8u16', a vector of eight unsigned 16-bit integers;
42731   * 'v4i32', a vector of four signed 32-bit integers;
42732   * 'v4u32', a vector of four unsigned 32-bit integers;
42733   * 'v2i64', a vector of two signed 64-bit integers;
42734   * 'v2u64', a vector of two unsigned 64-bit integers;
42735   * 'v4f32', a vector of four 32-bit floats;
42736   * 'v2f64', a vector of two 64-bit doubles.
42737
42738 Instructions and corresponding built-ins may have additional
42739restrictions and/or input/output values manipulated:
42740   * 'imm0_1', an integer literal in range 0 to 1;
42741   * 'imm0_3', an integer literal in range 0 to 3;
42742   * 'imm0_7', an integer literal in range 0 to 7;
42743   * 'imm0_15', an integer literal in range 0 to 15;
42744   * 'imm0_31', an integer literal in range 0 to 31;
42745   * 'imm0_63', an integer literal in range 0 to 63;
42746   * 'imm0_255', an integer literal in range 0 to 255;
42747   * 'imm_n16_15', an integer literal in range -16 to 15;
42748   * 'imm_n512_511', an integer literal in range -512 to 511;
42749   * 'imm_n1024_1022', an integer literal in range -512 to 511 left
42750     shifted by 1 bit, i.e., -1024, -1022, ..., 1020, 1022;
42751   * 'imm_n2048_2044', an integer literal in range -512 to 511 left
42752     shifted by 2 bits, i.e., -2048, -2044, ..., 2040, 2044;
42753   * 'imm_n4096_4088', an integer literal in range -512 to 511 left
42754     shifted by 3 bits, i.e., -4096, -4088, ..., 4080, 4088;
42755   * 'imm1_4', an integer literal in range 1 to 4;
42756   * 'i32, i64, u32, u64, f32, f64', defined as follows:
42757
42758     {
42759     typedef int i32;
42760     #if __LONG_MAX__ == __LONG_LONG_MAX__
42761     typedef long i64;
42762     #else
42763     typedef long long i64;
42764     #endif
42765
42766     typedef unsigned int u32;
42767     #if __LONG_MAX__ == __LONG_LONG_MAX__
42768     typedef unsigned long u64;
42769     #else
42770     typedef unsigned long long u64;
42771     #endif
42772
42773     typedef double f64;
42774     typedef float f32;
42775     }
42776
42777
42778File: gcc.info,  Node: MIPS SIMD Architecture Built-in Functions,  Up: MIPS SIMD Architecture (MSA) Support
42779
427806.59.16.1 MIPS SIMD Architecture Built-in Functions
42781...................................................
42782
42783The intrinsics provided are listed below; each is named after the
42784machine instruction.
42785
42786     v16i8 __builtin_msa_add_a_b (v16i8, v16i8);
42787     v8i16 __builtin_msa_add_a_h (v8i16, v8i16);
42788     v4i32 __builtin_msa_add_a_w (v4i32, v4i32);
42789     v2i64 __builtin_msa_add_a_d (v2i64, v2i64);
42790
42791     v16i8 __builtin_msa_adds_a_b (v16i8, v16i8);
42792     v8i16 __builtin_msa_adds_a_h (v8i16, v8i16);
42793     v4i32 __builtin_msa_adds_a_w (v4i32, v4i32);
42794     v2i64 __builtin_msa_adds_a_d (v2i64, v2i64);
42795
42796     v16i8 __builtin_msa_adds_s_b (v16i8, v16i8);
42797     v8i16 __builtin_msa_adds_s_h (v8i16, v8i16);
42798     v4i32 __builtin_msa_adds_s_w (v4i32, v4i32);
42799     v2i64 __builtin_msa_adds_s_d (v2i64, v2i64);
42800
42801     v16u8 __builtin_msa_adds_u_b (v16u8, v16u8);
42802     v8u16 __builtin_msa_adds_u_h (v8u16, v8u16);
42803     v4u32 __builtin_msa_adds_u_w (v4u32, v4u32);
42804     v2u64 __builtin_msa_adds_u_d (v2u64, v2u64);
42805
42806     v16i8 __builtin_msa_addv_b (v16i8, v16i8);
42807     v8i16 __builtin_msa_addv_h (v8i16, v8i16);
42808     v4i32 __builtin_msa_addv_w (v4i32, v4i32);
42809     v2i64 __builtin_msa_addv_d (v2i64, v2i64);
42810
42811     v16i8 __builtin_msa_addvi_b (v16i8, imm0_31);
42812     v8i16 __builtin_msa_addvi_h (v8i16, imm0_31);
42813     v4i32 __builtin_msa_addvi_w (v4i32, imm0_31);
42814     v2i64 __builtin_msa_addvi_d (v2i64, imm0_31);
42815
42816     v16u8 __builtin_msa_and_v (v16u8, v16u8);
42817
42818     v16u8 __builtin_msa_andi_b (v16u8, imm0_255);
42819
42820     v16i8 __builtin_msa_asub_s_b (v16i8, v16i8);
42821     v8i16 __builtin_msa_asub_s_h (v8i16, v8i16);
42822     v4i32 __builtin_msa_asub_s_w (v4i32, v4i32);
42823     v2i64 __builtin_msa_asub_s_d (v2i64, v2i64);
42824
42825     v16u8 __builtin_msa_asub_u_b (v16u8, v16u8);
42826     v8u16 __builtin_msa_asub_u_h (v8u16, v8u16);
42827     v4u32 __builtin_msa_asub_u_w (v4u32, v4u32);
42828     v2u64 __builtin_msa_asub_u_d (v2u64, v2u64);
42829
42830     v16i8 __builtin_msa_ave_s_b (v16i8, v16i8);
42831     v8i16 __builtin_msa_ave_s_h (v8i16, v8i16);
42832     v4i32 __builtin_msa_ave_s_w (v4i32, v4i32);
42833     v2i64 __builtin_msa_ave_s_d (v2i64, v2i64);
42834
42835     v16u8 __builtin_msa_ave_u_b (v16u8, v16u8);
42836     v8u16 __builtin_msa_ave_u_h (v8u16, v8u16);
42837     v4u32 __builtin_msa_ave_u_w (v4u32, v4u32);
42838     v2u64 __builtin_msa_ave_u_d (v2u64, v2u64);
42839
42840     v16i8 __builtin_msa_aver_s_b (v16i8, v16i8);
42841     v8i16 __builtin_msa_aver_s_h (v8i16, v8i16);
42842     v4i32 __builtin_msa_aver_s_w (v4i32, v4i32);
42843     v2i64 __builtin_msa_aver_s_d (v2i64, v2i64);
42844
42845     v16u8 __builtin_msa_aver_u_b (v16u8, v16u8);
42846     v8u16 __builtin_msa_aver_u_h (v8u16, v8u16);
42847     v4u32 __builtin_msa_aver_u_w (v4u32, v4u32);
42848     v2u64 __builtin_msa_aver_u_d (v2u64, v2u64);
42849
42850     v16u8 __builtin_msa_bclr_b (v16u8, v16u8);
42851     v8u16 __builtin_msa_bclr_h (v8u16, v8u16);
42852     v4u32 __builtin_msa_bclr_w (v4u32, v4u32);
42853     v2u64 __builtin_msa_bclr_d (v2u64, v2u64);
42854
42855     v16u8 __builtin_msa_bclri_b (v16u8, imm0_7);
42856     v8u16 __builtin_msa_bclri_h (v8u16, imm0_15);
42857     v4u32 __builtin_msa_bclri_w (v4u32, imm0_31);
42858     v2u64 __builtin_msa_bclri_d (v2u64, imm0_63);
42859
42860     v16u8 __builtin_msa_binsl_b (v16u8, v16u8, v16u8);
42861     v8u16 __builtin_msa_binsl_h (v8u16, v8u16, v8u16);
42862     v4u32 __builtin_msa_binsl_w (v4u32, v4u32, v4u32);
42863     v2u64 __builtin_msa_binsl_d (v2u64, v2u64, v2u64);
42864
42865     v16u8 __builtin_msa_binsli_b (v16u8, v16u8, imm0_7);
42866     v8u16 __builtin_msa_binsli_h (v8u16, v8u16, imm0_15);
42867     v4u32 __builtin_msa_binsli_w (v4u32, v4u32, imm0_31);
42868     v2u64 __builtin_msa_binsli_d (v2u64, v2u64, imm0_63);
42869
42870     v16u8 __builtin_msa_binsr_b (v16u8, v16u8, v16u8);
42871     v8u16 __builtin_msa_binsr_h (v8u16, v8u16, v8u16);
42872     v4u32 __builtin_msa_binsr_w (v4u32, v4u32, v4u32);
42873     v2u64 __builtin_msa_binsr_d (v2u64, v2u64, v2u64);
42874
42875     v16u8 __builtin_msa_binsri_b (v16u8, v16u8, imm0_7);
42876     v8u16 __builtin_msa_binsri_h (v8u16, v8u16, imm0_15);
42877     v4u32 __builtin_msa_binsri_w (v4u32, v4u32, imm0_31);
42878     v2u64 __builtin_msa_binsri_d (v2u64, v2u64, imm0_63);
42879
42880     v16u8 __builtin_msa_bmnz_v (v16u8, v16u8, v16u8);
42881
42882     v16u8 __builtin_msa_bmnzi_b (v16u8, v16u8, imm0_255);
42883
42884     v16u8 __builtin_msa_bmz_v (v16u8, v16u8, v16u8);
42885
42886     v16u8 __builtin_msa_bmzi_b (v16u8, v16u8, imm0_255);
42887
42888     v16u8 __builtin_msa_bneg_b (v16u8, v16u8);
42889     v8u16 __builtin_msa_bneg_h (v8u16, v8u16);
42890     v4u32 __builtin_msa_bneg_w (v4u32, v4u32);
42891     v2u64 __builtin_msa_bneg_d (v2u64, v2u64);
42892
42893     v16u8 __builtin_msa_bnegi_b (v16u8, imm0_7);
42894     v8u16 __builtin_msa_bnegi_h (v8u16, imm0_15);
42895     v4u32 __builtin_msa_bnegi_w (v4u32, imm0_31);
42896     v2u64 __builtin_msa_bnegi_d (v2u64, imm0_63);
42897
42898     i32 __builtin_msa_bnz_b (v16u8);
42899     i32 __builtin_msa_bnz_h (v8u16);
42900     i32 __builtin_msa_bnz_w (v4u32);
42901     i32 __builtin_msa_bnz_d (v2u64);
42902
42903     i32 __builtin_msa_bnz_v (v16u8);
42904
42905     v16u8 __builtin_msa_bsel_v (v16u8, v16u8, v16u8);
42906
42907     v16u8 __builtin_msa_bseli_b (v16u8, v16u8, imm0_255);
42908
42909     v16u8 __builtin_msa_bset_b (v16u8, v16u8);
42910     v8u16 __builtin_msa_bset_h (v8u16, v8u16);
42911     v4u32 __builtin_msa_bset_w (v4u32, v4u32);
42912     v2u64 __builtin_msa_bset_d (v2u64, v2u64);
42913
42914     v16u8 __builtin_msa_bseti_b (v16u8, imm0_7);
42915     v8u16 __builtin_msa_bseti_h (v8u16, imm0_15);
42916     v4u32 __builtin_msa_bseti_w (v4u32, imm0_31);
42917     v2u64 __builtin_msa_bseti_d (v2u64, imm0_63);
42918
42919     i32 __builtin_msa_bz_b (v16u8);
42920     i32 __builtin_msa_bz_h (v8u16);
42921     i32 __builtin_msa_bz_w (v4u32);
42922     i32 __builtin_msa_bz_d (v2u64);
42923
42924     i32 __builtin_msa_bz_v (v16u8);
42925
42926     v16i8 __builtin_msa_ceq_b (v16i8, v16i8);
42927     v8i16 __builtin_msa_ceq_h (v8i16, v8i16);
42928     v4i32 __builtin_msa_ceq_w (v4i32, v4i32);
42929     v2i64 __builtin_msa_ceq_d (v2i64, v2i64);
42930
42931     v16i8 __builtin_msa_ceqi_b (v16i8, imm_n16_15);
42932     v8i16 __builtin_msa_ceqi_h (v8i16, imm_n16_15);
42933     v4i32 __builtin_msa_ceqi_w (v4i32, imm_n16_15);
42934     v2i64 __builtin_msa_ceqi_d (v2i64, imm_n16_15);
42935
42936     i32 __builtin_msa_cfcmsa (imm0_31);
42937
42938     v16i8 __builtin_msa_cle_s_b (v16i8, v16i8);
42939     v8i16 __builtin_msa_cle_s_h (v8i16, v8i16);
42940     v4i32 __builtin_msa_cle_s_w (v4i32, v4i32);
42941     v2i64 __builtin_msa_cle_s_d (v2i64, v2i64);
42942
42943     v16i8 __builtin_msa_cle_u_b (v16u8, v16u8);
42944     v8i16 __builtin_msa_cle_u_h (v8u16, v8u16);
42945     v4i32 __builtin_msa_cle_u_w (v4u32, v4u32);
42946     v2i64 __builtin_msa_cle_u_d (v2u64, v2u64);
42947
42948     v16i8 __builtin_msa_clei_s_b (v16i8, imm_n16_15);
42949     v8i16 __builtin_msa_clei_s_h (v8i16, imm_n16_15);
42950     v4i32 __builtin_msa_clei_s_w (v4i32, imm_n16_15);
42951     v2i64 __builtin_msa_clei_s_d (v2i64, imm_n16_15);
42952
42953     v16i8 __builtin_msa_clei_u_b (v16u8, imm0_31);
42954     v8i16 __builtin_msa_clei_u_h (v8u16, imm0_31);
42955     v4i32 __builtin_msa_clei_u_w (v4u32, imm0_31);
42956     v2i64 __builtin_msa_clei_u_d (v2u64, imm0_31);
42957
42958     v16i8 __builtin_msa_clt_s_b (v16i8, v16i8);
42959     v8i16 __builtin_msa_clt_s_h (v8i16, v8i16);
42960     v4i32 __builtin_msa_clt_s_w (v4i32, v4i32);
42961     v2i64 __builtin_msa_clt_s_d (v2i64, v2i64);
42962
42963     v16i8 __builtin_msa_clt_u_b (v16u8, v16u8);
42964     v8i16 __builtin_msa_clt_u_h (v8u16, v8u16);
42965     v4i32 __builtin_msa_clt_u_w (v4u32, v4u32);
42966     v2i64 __builtin_msa_clt_u_d (v2u64, v2u64);
42967
42968     v16i8 __builtin_msa_clti_s_b (v16i8, imm_n16_15);
42969     v8i16 __builtin_msa_clti_s_h (v8i16, imm_n16_15);
42970     v4i32 __builtin_msa_clti_s_w (v4i32, imm_n16_15);
42971     v2i64 __builtin_msa_clti_s_d (v2i64, imm_n16_15);
42972
42973     v16i8 __builtin_msa_clti_u_b (v16u8, imm0_31);
42974     v8i16 __builtin_msa_clti_u_h (v8u16, imm0_31);
42975     v4i32 __builtin_msa_clti_u_w (v4u32, imm0_31);
42976     v2i64 __builtin_msa_clti_u_d (v2u64, imm0_31);
42977
42978     i32 __builtin_msa_copy_s_b (v16i8, imm0_15);
42979     i32 __builtin_msa_copy_s_h (v8i16, imm0_7);
42980     i32 __builtin_msa_copy_s_w (v4i32, imm0_3);
42981     i64 __builtin_msa_copy_s_d (v2i64, imm0_1);
42982
42983     u32 __builtin_msa_copy_u_b (v16i8, imm0_15);
42984     u32 __builtin_msa_copy_u_h (v8i16, imm0_7);
42985     u32 __builtin_msa_copy_u_w (v4i32, imm0_3);
42986     u64 __builtin_msa_copy_u_d (v2i64, imm0_1);
42987
42988     void __builtin_msa_ctcmsa (imm0_31, i32);
42989
42990     v16i8 __builtin_msa_div_s_b (v16i8, v16i8);
42991     v8i16 __builtin_msa_div_s_h (v8i16, v8i16);
42992     v4i32 __builtin_msa_div_s_w (v4i32, v4i32);
42993     v2i64 __builtin_msa_div_s_d (v2i64, v2i64);
42994
42995     v16u8 __builtin_msa_div_u_b (v16u8, v16u8);
42996     v8u16 __builtin_msa_div_u_h (v8u16, v8u16);
42997     v4u32 __builtin_msa_div_u_w (v4u32, v4u32);
42998     v2u64 __builtin_msa_div_u_d (v2u64, v2u64);
42999
43000     v8i16 __builtin_msa_dotp_s_h (v16i8, v16i8);
43001     v4i32 __builtin_msa_dotp_s_w (v8i16, v8i16);
43002     v2i64 __builtin_msa_dotp_s_d (v4i32, v4i32);
43003
43004     v8u16 __builtin_msa_dotp_u_h (v16u8, v16u8);
43005     v4u32 __builtin_msa_dotp_u_w (v8u16, v8u16);
43006     v2u64 __builtin_msa_dotp_u_d (v4u32, v4u32);
43007
43008     v8i16 __builtin_msa_dpadd_s_h (v8i16, v16i8, v16i8);
43009     v4i32 __builtin_msa_dpadd_s_w (v4i32, v8i16, v8i16);
43010     v2i64 __builtin_msa_dpadd_s_d (v2i64, v4i32, v4i32);
43011
43012     v8u16 __builtin_msa_dpadd_u_h (v8u16, v16u8, v16u8);
43013     v4u32 __builtin_msa_dpadd_u_w (v4u32, v8u16, v8u16);
43014     v2u64 __builtin_msa_dpadd_u_d (v2u64, v4u32, v4u32);
43015
43016     v8i16 __builtin_msa_dpsub_s_h (v8i16, v16i8, v16i8);
43017     v4i32 __builtin_msa_dpsub_s_w (v4i32, v8i16, v8i16);
43018     v2i64 __builtin_msa_dpsub_s_d (v2i64, v4i32, v4i32);
43019
43020     v8i16 __builtin_msa_dpsub_u_h (v8i16, v16u8, v16u8);
43021     v4i32 __builtin_msa_dpsub_u_w (v4i32, v8u16, v8u16);
43022     v2i64 __builtin_msa_dpsub_u_d (v2i64, v4u32, v4u32);
43023
43024     v4f32 __builtin_msa_fadd_w (v4f32, v4f32);
43025     v2f64 __builtin_msa_fadd_d (v2f64, v2f64);
43026
43027     v4i32 __builtin_msa_fcaf_w (v4f32, v4f32);
43028     v2i64 __builtin_msa_fcaf_d (v2f64, v2f64);
43029
43030     v4i32 __builtin_msa_fceq_w (v4f32, v4f32);
43031     v2i64 __builtin_msa_fceq_d (v2f64, v2f64);
43032
43033     v4i32 __builtin_msa_fclass_w (v4f32);
43034     v2i64 __builtin_msa_fclass_d (v2f64);
43035
43036     v4i32 __builtin_msa_fcle_w (v4f32, v4f32);
43037     v2i64 __builtin_msa_fcle_d (v2f64, v2f64);
43038
43039     v4i32 __builtin_msa_fclt_w (v4f32, v4f32);
43040     v2i64 __builtin_msa_fclt_d (v2f64, v2f64);
43041
43042     v4i32 __builtin_msa_fcne_w (v4f32, v4f32);
43043     v2i64 __builtin_msa_fcne_d (v2f64, v2f64);
43044
43045     v4i32 __builtin_msa_fcor_w (v4f32, v4f32);
43046     v2i64 __builtin_msa_fcor_d (v2f64, v2f64);
43047
43048     v4i32 __builtin_msa_fcueq_w (v4f32, v4f32);
43049     v2i64 __builtin_msa_fcueq_d (v2f64, v2f64);
43050
43051     v4i32 __builtin_msa_fcule_w (v4f32, v4f32);
43052     v2i64 __builtin_msa_fcule_d (v2f64, v2f64);
43053
43054     v4i32 __builtin_msa_fcult_w (v4f32, v4f32);
43055     v2i64 __builtin_msa_fcult_d (v2f64, v2f64);
43056
43057     v4i32 __builtin_msa_fcun_w (v4f32, v4f32);
43058     v2i64 __builtin_msa_fcun_d (v2f64, v2f64);
43059
43060     v4i32 __builtin_msa_fcune_w (v4f32, v4f32);
43061     v2i64 __builtin_msa_fcune_d (v2f64, v2f64);
43062
43063     v4f32 __builtin_msa_fdiv_w (v4f32, v4f32);
43064     v2f64 __builtin_msa_fdiv_d (v2f64, v2f64);
43065
43066     v8i16 __builtin_msa_fexdo_h (v4f32, v4f32);
43067     v4f32 __builtin_msa_fexdo_w (v2f64, v2f64);
43068
43069     v4f32 __builtin_msa_fexp2_w (v4f32, v4i32);
43070     v2f64 __builtin_msa_fexp2_d (v2f64, v2i64);
43071
43072     v4f32 __builtin_msa_fexupl_w (v8i16);
43073     v2f64 __builtin_msa_fexupl_d (v4f32);
43074
43075     v4f32 __builtin_msa_fexupr_w (v8i16);
43076     v2f64 __builtin_msa_fexupr_d (v4f32);
43077
43078     v4f32 __builtin_msa_ffint_s_w (v4i32);
43079     v2f64 __builtin_msa_ffint_s_d (v2i64);
43080
43081     v4f32 __builtin_msa_ffint_u_w (v4u32);
43082     v2f64 __builtin_msa_ffint_u_d (v2u64);
43083
43084     v4f32 __builtin_msa_ffql_w (v8i16);
43085     v2f64 __builtin_msa_ffql_d (v4i32);
43086
43087     v4f32 __builtin_msa_ffqr_w (v8i16);
43088     v2f64 __builtin_msa_ffqr_d (v4i32);
43089
43090     v16i8 __builtin_msa_fill_b (i32);
43091     v8i16 __builtin_msa_fill_h (i32);
43092     v4i32 __builtin_msa_fill_w (i32);
43093     v2i64 __builtin_msa_fill_d (i64);
43094
43095     v4f32 __builtin_msa_flog2_w (v4f32);
43096     v2f64 __builtin_msa_flog2_d (v2f64);
43097
43098     v4f32 __builtin_msa_fmadd_w (v4f32, v4f32, v4f32);
43099     v2f64 __builtin_msa_fmadd_d (v2f64, v2f64, v2f64);
43100
43101     v4f32 __builtin_msa_fmax_w (v4f32, v4f32);
43102     v2f64 __builtin_msa_fmax_d (v2f64, v2f64);
43103
43104     v4f32 __builtin_msa_fmax_a_w (v4f32, v4f32);
43105     v2f64 __builtin_msa_fmax_a_d (v2f64, v2f64);
43106
43107     v4f32 __builtin_msa_fmin_w (v4f32, v4f32);
43108     v2f64 __builtin_msa_fmin_d (v2f64, v2f64);
43109
43110     v4f32 __builtin_msa_fmin_a_w (v4f32, v4f32);
43111     v2f64 __builtin_msa_fmin_a_d (v2f64, v2f64);
43112
43113     v4f32 __builtin_msa_fmsub_w (v4f32, v4f32, v4f32);
43114     v2f64 __builtin_msa_fmsub_d (v2f64, v2f64, v2f64);
43115
43116     v4f32 __builtin_msa_fmul_w (v4f32, v4f32);
43117     v2f64 __builtin_msa_fmul_d (v2f64, v2f64);
43118
43119     v4f32 __builtin_msa_frint_w (v4f32);
43120     v2f64 __builtin_msa_frint_d (v2f64);
43121
43122     v4f32 __builtin_msa_frcp_w (v4f32);
43123     v2f64 __builtin_msa_frcp_d (v2f64);
43124
43125     v4f32 __builtin_msa_frsqrt_w (v4f32);
43126     v2f64 __builtin_msa_frsqrt_d (v2f64);
43127
43128     v4i32 __builtin_msa_fsaf_w (v4f32, v4f32);
43129     v2i64 __builtin_msa_fsaf_d (v2f64, v2f64);
43130
43131     v4i32 __builtin_msa_fseq_w (v4f32, v4f32);
43132     v2i64 __builtin_msa_fseq_d (v2f64, v2f64);
43133
43134     v4i32 __builtin_msa_fsle_w (v4f32, v4f32);
43135     v2i64 __builtin_msa_fsle_d (v2f64, v2f64);
43136
43137     v4i32 __builtin_msa_fslt_w (v4f32, v4f32);
43138     v2i64 __builtin_msa_fslt_d (v2f64, v2f64);
43139
43140     v4i32 __builtin_msa_fsne_w (v4f32, v4f32);
43141     v2i64 __builtin_msa_fsne_d (v2f64, v2f64);
43142
43143     v4i32 __builtin_msa_fsor_w (v4f32, v4f32);
43144     v2i64 __builtin_msa_fsor_d (v2f64, v2f64);
43145
43146     v4f32 __builtin_msa_fsqrt_w (v4f32);
43147     v2f64 __builtin_msa_fsqrt_d (v2f64);
43148
43149     v4f32 __builtin_msa_fsub_w (v4f32, v4f32);
43150     v2f64 __builtin_msa_fsub_d (v2f64, v2f64);
43151
43152     v4i32 __builtin_msa_fsueq_w (v4f32, v4f32);
43153     v2i64 __builtin_msa_fsueq_d (v2f64, v2f64);
43154
43155     v4i32 __builtin_msa_fsule_w (v4f32, v4f32);
43156     v2i64 __builtin_msa_fsule_d (v2f64, v2f64);
43157
43158     v4i32 __builtin_msa_fsult_w (v4f32, v4f32);
43159     v2i64 __builtin_msa_fsult_d (v2f64, v2f64);
43160
43161     v4i32 __builtin_msa_fsun_w (v4f32, v4f32);
43162     v2i64 __builtin_msa_fsun_d (v2f64, v2f64);
43163
43164     v4i32 __builtin_msa_fsune_w (v4f32, v4f32);
43165     v2i64 __builtin_msa_fsune_d (v2f64, v2f64);
43166
43167     v4i32 __builtin_msa_ftint_s_w (v4f32);
43168     v2i64 __builtin_msa_ftint_s_d (v2f64);
43169
43170     v4u32 __builtin_msa_ftint_u_w (v4f32);
43171     v2u64 __builtin_msa_ftint_u_d (v2f64);
43172
43173     v8i16 __builtin_msa_ftq_h (v4f32, v4f32);
43174     v4i32 __builtin_msa_ftq_w (v2f64, v2f64);
43175
43176     v4i32 __builtin_msa_ftrunc_s_w (v4f32);
43177     v2i64 __builtin_msa_ftrunc_s_d (v2f64);
43178
43179     v4u32 __builtin_msa_ftrunc_u_w (v4f32);
43180     v2u64 __builtin_msa_ftrunc_u_d (v2f64);
43181
43182     v8i16 __builtin_msa_hadd_s_h (v16i8, v16i8);
43183     v4i32 __builtin_msa_hadd_s_w (v8i16, v8i16);
43184     v2i64 __builtin_msa_hadd_s_d (v4i32, v4i32);
43185
43186     v8u16 __builtin_msa_hadd_u_h (v16u8, v16u8);
43187     v4u32 __builtin_msa_hadd_u_w (v8u16, v8u16);
43188     v2u64 __builtin_msa_hadd_u_d (v4u32, v4u32);
43189
43190     v8i16 __builtin_msa_hsub_s_h (v16i8, v16i8);
43191     v4i32 __builtin_msa_hsub_s_w (v8i16, v8i16);
43192     v2i64 __builtin_msa_hsub_s_d (v4i32, v4i32);
43193
43194     v8i16 __builtin_msa_hsub_u_h (v16u8, v16u8);
43195     v4i32 __builtin_msa_hsub_u_w (v8u16, v8u16);
43196     v2i64 __builtin_msa_hsub_u_d (v4u32, v4u32);
43197
43198     v16i8 __builtin_msa_ilvev_b (v16i8, v16i8);
43199     v8i16 __builtin_msa_ilvev_h (v8i16, v8i16);
43200     v4i32 __builtin_msa_ilvev_w (v4i32, v4i32);
43201     v2i64 __builtin_msa_ilvev_d (v2i64, v2i64);
43202
43203     v16i8 __builtin_msa_ilvl_b (v16i8, v16i8);
43204     v8i16 __builtin_msa_ilvl_h (v8i16, v8i16);
43205     v4i32 __builtin_msa_ilvl_w (v4i32, v4i32);
43206     v2i64 __builtin_msa_ilvl_d (v2i64, v2i64);
43207
43208     v16i8 __builtin_msa_ilvod_b (v16i8, v16i8);
43209     v8i16 __builtin_msa_ilvod_h (v8i16, v8i16);
43210     v4i32 __builtin_msa_ilvod_w (v4i32, v4i32);
43211     v2i64 __builtin_msa_ilvod_d (v2i64, v2i64);
43212
43213     v16i8 __builtin_msa_ilvr_b (v16i8, v16i8);
43214     v8i16 __builtin_msa_ilvr_h (v8i16, v8i16);
43215     v4i32 __builtin_msa_ilvr_w (v4i32, v4i32);
43216     v2i64 __builtin_msa_ilvr_d (v2i64, v2i64);
43217
43218     v16i8 __builtin_msa_insert_b (v16i8, imm0_15, i32);
43219     v8i16 __builtin_msa_insert_h (v8i16, imm0_7, i32);
43220     v4i32 __builtin_msa_insert_w (v4i32, imm0_3, i32);
43221     v2i64 __builtin_msa_insert_d (v2i64, imm0_1, i64);
43222
43223     v16i8 __builtin_msa_insve_b (v16i8, imm0_15, v16i8);
43224     v8i16 __builtin_msa_insve_h (v8i16, imm0_7, v8i16);
43225     v4i32 __builtin_msa_insve_w (v4i32, imm0_3, v4i32);
43226     v2i64 __builtin_msa_insve_d (v2i64, imm0_1, v2i64);
43227
43228     v16i8 __builtin_msa_ld_b (void *, imm_n512_511);
43229     v8i16 __builtin_msa_ld_h (void *, imm_n1024_1022);
43230     v4i32 __builtin_msa_ld_w (void *, imm_n2048_2044);
43231     v2i64 __builtin_msa_ld_d (void *, imm_n4096_4088);
43232
43233     v16i8 __builtin_msa_ldi_b (imm_n512_511);
43234     v8i16 __builtin_msa_ldi_h (imm_n512_511);
43235     v4i32 __builtin_msa_ldi_w (imm_n512_511);
43236     v2i64 __builtin_msa_ldi_d (imm_n512_511);
43237
43238     v8i16 __builtin_msa_madd_q_h (v8i16, v8i16, v8i16);
43239     v4i32 __builtin_msa_madd_q_w (v4i32, v4i32, v4i32);
43240
43241     v8i16 __builtin_msa_maddr_q_h (v8i16, v8i16, v8i16);
43242     v4i32 __builtin_msa_maddr_q_w (v4i32, v4i32, v4i32);
43243
43244     v16i8 __builtin_msa_maddv_b (v16i8, v16i8, v16i8);
43245     v8i16 __builtin_msa_maddv_h (v8i16, v8i16, v8i16);
43246     v4i32 __builtin_msa_maddv_w (v4i32, v4i32, v4i32);
43247     v2i64 __builtin_msa_maddv_d (v2i64, v2i64, v2i64);
43248
43249     v16i8 __builtin_msa_max_a_b (v16i8, v16i8);
43250     v8i16 __builtin_msa_max_a_h (v8i16, v8i16);
43251     v4i32 __builtin_msa_max_a_w (v4i32, v4i32);
43252     v2i64 __builtin_msa_max_a_d (v2i64, v2i64);
43253
43254     v16i8 __builtin_msa_max_s_b (v16i8, v16i8);
43255     v8i16 __builtin_msa_max_s_h (v8i16, v8i16);
43256     v4i32 __builtin_msa_max_s_w (v4i32, v4i32);
43257     v2i64 __builtin_msa_max_s_d (v2i64, v2i64);
43258
43259     v16u8 __builtin_msa_max_u_b (v16u8, v16u8);
43260     v8u16 __builtin_msa_max_u_h (v8u16, v8u16);
43261     v4u32 __builtin_msa_max_u_w (v4u32, v4u32);
43262     v2u64 __builtin_msa_max_u_d (v2u64, v2u64);
43263
43264     v16i8 __builtin_msa_maxi_s_b (v16i8, imm_n16_15);
43265     v8i16 __builtin_msa_maxi_s_h (v8i16, imm_n16_15);
43266     v4i32 __builtin_msa_maxi_s_w (v4i32, imm_n16_15);
43267     v2i64 __builtin_msa_maxi_s_d (v2i64, imm_n16_15);
43268
43269     v16u8 __builtin_msa_maxi_u_b (v16u8, imm0_31);
43270     v8u16 __builtin_msa_maxi_u_h (v8u16, imm0_31);
43271     v4u32 __builtin_msa_maxi_u_w (v4u32, imm0_31);
43272     v2u64 __builtin_msa_maxi_u_d (v2u64, imm0_31);
43273
43274     v16i8 __builtin_msa_min_a_b (v16i8, v16i8);
43275     v8i16 __builtin_msa_min_a_h (v8i16, v8i16);
43276     v4i32 __builtin_msa_min_a_w (v4i32, v4i32);
43277     v2i64 __builtin_msa_min_a_d (v2i64, v2i64);
43278
43279     v16i8 __builtin_msa_min_s_b (v16i8, v16i8);
43280     v8i16 __builtin_msa_min_s_h (v8i16, v8i16);
43281     v4i32 __builtin_msa_min_s_w (v4i32, v4i32);
43282     v2i64 __builtin_msa_min_s_d (v2i64, v2i64);
43283
43284     v16u8 __builtin_msa_min_u_b (v16u8, v16u8);
43285     v8u16 __builtin_msa_min_u_h (v8u16, v8u16);
43286     v4u32 __builtin_msa_min_u_w (v4u32, v4u32);
43287     v2u64 __builtin_msa_min_u_d (v2u64, v2u64);
43288
43289     v16i8 __builtin_msa_mini_s_b (v16i8, imm_n16_15);
43290     v8i16 __builtin_msa_mini_s_h (v8i16, imm_n16_15);
43291     v4i32 __builtin_msa_mini_s_w (v4i32, imm_n16_15);
43292     v2i64 __builtin_msa_mini_s_d (v2i64, imm_n16_15);
43293
43294     v16u8 __builtin_msa_mini_u_b (v16u8, imm0_31);
43295     v8u16 __builtin_msa_mini_u_h (v8u16, imm0_31);
43296     v4u32 __builtin_msa_mini_u_w (v4u32, imm0_31);
43297     v2u64 __builtin_msa_mini_u_d (v2u64, imm0_31);
43298
43299     v16i8 __builtin_msa_mod_s_b (v16i8, v16i8);
43300     v8i16 __builtin_msa_mod_s_h (v8i16, v8i16);
43301     v4i32 __builtin_msa_mod_s_w (v4i32, v4i32);
43302     v2i64 __builtin_msa_mod_s_d (v2i64, v2i64);
43303
43304     v16u8 __builtin_msa_mod_u_b (v16u8, v16u8);
43305     v8u16 __builtin_msa_mod_u_h (v8u16, v8u16);
43306     v4u32 __builtin_msa_mod_u_w (v4u32, v4u32);
43307     v2u64 __builtin_msa_mod_u_d (v2u64, v2u64);
43308
43309     v16i8 __builtin_msa_move_v (v16i8);
43310
43311     v8i16 __builtin_msa_msub_q_h (v8i16, v8i16, v8i16);
43312     v4i32 __builtin_msa_msub_q_w (v4i32, v4i32, v4i32);
43313
43314     v8i16 __builtin_msa_msubr_q_h (v8i16, v8i16, v8i16);
43315     v4i32 __builtin_msa_msubr_q_w (v4i32, v4i32, v4i32);
43316
43317     v16i8 __builtin_msa_msubv_b (v16i8, v16i8, v16i8);
43318     v8i16 __builtin_msa_msubv_h (v8i16, v8i16, v8i16);
43319     v4i32 __builtin_msa_msubv_w (v4i32, v4i32, v4i32);
43320     v2i64 __builtin_msa_msubv_d (v2i64, v2i64, v2i64);
43321
43322     v8i16 __builtin_msa_mul_q_h (v8i16, v8i16);
43323     v4i32 __builtin_msa_mul_q_w (v4i32, v4i32);
43324
43325     v8i16 __builtin_msa_mulr_q_h (v8i16, v8i16);
43326     v4i32 __builtin_msa_mulr_q_w (v4i32, v4i32);
43327
43328     v16i8 __builtin_msa_mulv_b (v16i8, v16i8);
43329     v8i16 __builtin_msa_mulv_h (v8i16, v8i16);
43330     v4i32 __builtin_msa_mulv_w (v4i32, v4i32);
43331     v2i64 __builtin_msa_mulv_d (v2i64, v2i64);
43332
43333     v16i8 __builtin_msa_nloc_b (v16i8);
43334     v8i16 __builtin_msa_nloc_h (v8i16);
43335     v4i32 __builtin_msa_nloc_w (v4i32);
43336     v2i64 __builtin_msa_nloc_d (v2i64);
43337
43338     v16i8 __builtin_msa_nlzc_b (v16i8);
43339     v8i16 __builtin_msa_nlzc_h (v8i16);
43340     v4i32 __builtin_msa_nlzc_w (v4i32);
43341     v2i64 __builtin_msa_nlzc_d (v2i64);
43342
43343     v16u8 __builtin_msa_nor_v (v16u8, v16u8);
43344
43345     v16u8 __builtin_msa_nori_b (v16u8, imm0_255);
43346
43347     v16u8 __builtin_msa_or_v (v16u8, v16u8);
43348
43349     v16u8 __builtin_msa_ori_b (v16u8, imm0_255);
43350
43351     v16i8 __builtin_msa_pckev_b (v16i8, v16i8);
43352     v8i16 __builtin_msa_pckev_h (v8i16, v8i16);
43353     v4i32 __builtin_msa_pckev_w (v4i32, v4i32);
43354     v2i64 __builtin_msa_pckev_d (v2i64, v2i64);
43355
43356     v16i8 __builtin_msa_pckod_b (v16i8, v16i8);
43357     v8i16 __builtin_msa_pckod_h (v8i16, v8i16);
43358     v4i32 __builtin_msa_pckod_w (v4i32, v4i32);
43359     v2i64 __builtin_msa_pckod_d (v2i64, v2i64);
43360
43361     v16i8 __builtin_msa_pcnt_b (v16i8);
43362     v8i16 __builtin_msa_pcnt_h (v8i16);
43363     v4i32 __builtin_msa_pcnt_w (v4i32);
43364     v2i64 __builtin_msa_pcnt_d (v2i64);
43365
43366     v16i8 __builtin_msa_sat_s_b (v16i8, imm0_7);
43367     v8i16 __builtin_msa_sat_s_h (v8i16, imm0_15);
43368     v4i32 __builtin_msa_sat_s_w (v4i32, imm0_31);
43369     v2i64 __builtin_msa_sat_s_d (v2i64, imm0_63);
43370
43371     v16u8 __builtin_msa_sat_u_b (v16u8, imm0_7);
43372     v8u16 __builtin_msa_sat_u_h (v8u16, imm0_15);
43373     v4u32 __builtin_msa_sat_u_w (v4u32, imm0_31);
43374     v2u64 __builtin_msa_sat_u_d (v2u64, imm0_63);
43375
43376     v16i8 __builtin_msa_shf_b (v16i8, imm0_255);
43377     v8i16 __builtin_msa_shf_h (v8i16, imm0_255);
43378     v4i32 __builtin_msa_shf_w (v4i32, imm0_255);
43379
43380     v16i8 __builtin_msa_sld_b (v16i8, v16i8, i32);
43381     v8i16 __builtin_msa_sld_h (v8i16, v8i16, i32);
43382     v4i32 __builtin_msa_sld_w (v4i32, v4i32, i32);
43383     v2i64 __builtin_msa_sld_d (v2i64, v2i64, i32);
43384
43385     v16i8 __builtin_msa_sldi_b (v16i8, v16i8, imm0_15);
43386     v8i16 __builtin_msa_sldi_h (v8i16, v8i16, imm0_7);
43387     v4i32 __builtin_msa_sldi_w (v4i32, v4i32, imm0_3);
43388     v2i64 __builtin_msa_sldi_d (v2i64, v2i64, imm0_1);
43389
43390     v16i8 __builtin_msa_sll_b (v16i8, v16i8);
43391     v8i16 __builtin_msa_sll_h (v8i16, v8i16);
43392     v4i32 __builtin_msa_sll_w (v4i32, v4i32);
43393     v2i64 __builtin_msa_sll_d (v2i64, v2i64);
43394
43395     v16i8 __builtin_msa_slli_b (v16i8, imm0_7);
43396     v8i16 __builtin_msa_slli_h (v8i16, imm0_15);
43397     v4i32 __builtin_msa_slli_w (v4i32, imm0_31);
43398     v2i64 __builtin_msa_slli_d (v2i64, imm0_63);
43399
43400     v16i8 __builtin_msa_splat_b (v16i8, i32);
43401     v8i16 __builtin_msa_splat_h (v8i16, i32);
43402     v4i32 __builtin_msa_splat_w (v4i32, i32);
43403     v2i64 __builtin_msa_splat_d (v2i64, i32);
43404
43405     v16i8 __builtin_msa_splati_b (v16i8, imm0_15);
43406     v8i16 __builtin_msa_splati_h (v8i16, imm0_7);
43407     v4i32 __builtin_msa_splati_w (v4i32, imm0_3);
43408     v2i64 __builtin_msa_splati_d (v2i64, imm0_1);
43409
43410     v16i8 __builtin_msa_sra_b (v16i8, v16i8);
43411     v8i16 __builtin_msa_sra_h (v8i16, v8i16);
43412     v4i32 __builtin_msa_sra_w (v4i32, v4i32);
43413     v2i64 __builtin_msa_sra_d (v2i64, v2i64);
43414
43415     v16i8 __builtin_msa_srai_b (v16i8, imm0_7);
43416     v8i16 __builtin_msa_srai_h (v8i16, imm0_15);
43417     v4i32 __builtin_msa_srai_w (v4i32, imm0_31);
43418     v2i64 __builtin_msa_srai_d (v2i64, imm0_63);
43419
43420     v16i8 __builtin_msa_srar_b (v16i8, v16i8);
43421     v8i16 __builtin_msa_srar_h (v8i16, v8i16);
43422     v4i32 __builtin_msa_srar_w (v4i32, v4i32);
43423     v2i64 __builtin_msa_srar_d (v2i64, v2i64);
43424
43425     v16i8 __builtin_msa_srari_b (v16i8, imm0_7);
43426     v8i16 __builtin_msa_srari_h (v8i16, imm0_15);
43427     v4i32 __builtin_msa_srari_w (v4i32, imm0_31);
43428     v2i64 __builtin_msa_srari_d (v2i64, imm0_63);
43429
43430     v16i8 __builtin_msa_srl_b (v16i8, v16i8);
43431     v8i16 __builtin_msa_srl_h (v8i16, v8i16);
43432     v4i32 __builtin_msa_srl_w (v4i32, v4i32);
43433     v2i64 __builtin_msa_srl_d (v2i64, v2i64);
43434
43435     v16i8 __builtin_msa_srli_b (v16i8, imm0_7);
43436     v8i16 __builtin_msa_srli_h (v8i16, imm0_15);
43437     v4i32 __builtin_msa_srli_w (v4i32, imm0_31);
43438     v2i64 __builtin_msa_srli_d (v2i64, imm0_63);
43439
43440     v16i8 __builtin_msa_srlr_b (v16i8, v16i8);
43441     v8i16 __builtin_msa_srlr_h (v8i16, v8i16);
43442     v4i32 __builtin_msa_srlr_w (v4i32, v4i32);
43443     v2i64 __builtin_msa_srlr_d (v2i64, v2i64);
43444
43445     v16i8 __builtin_msa_srlri_b (v16i8, imm0_7);
43446     v8i16 __builtin_msa_srlri_h (v8i16, imm0_15);
43447     v4i32 __builtin_msa_srlri_w (v4i32, imm0_31);
43448     v2i64 __builtin_msa_srlri_d (v2i64, imm0_63);
43449
43450     void __builtin_msa_st_b (v16i8, void *, imm_n512_511);
43451     void __builtin_msa_st_h (v8i16, void *, imm_n1024_1022);
43452     void __builtin_msa_st_w (v4i32, void *, imm_n2048_2044);
43453     void __builtin_msa_st_d (v2i64, void *, imm_n4096_4088);
43454
43455     v16i8 __builtin_msa_subs_s_b (v16i8, v16i8);
43456     v8i16 __builtin_msa_subs_s_h (v8i16, v8i16);
43457     v4i32 __builtin_msa_subs_s_w (v4i32, v4i32);
43458     v2i64 __builtin_msa_subs_s_d (v2i64, v2i64);
43459
43460     v16u8 __builtin_msa_subs_u_b (v16u8, v16u8);
43461     v8u16 __builtin_msa_subs_u_h (v8u16, v8u16);
43462     v4u32 __builtin_msa_subs_u_w (v4u32, v4u32);
43463     v2u64 __builtin_msa_subs_u_d (v2u64, v2u64);
43464
43465     v16u8 __builtin_msa_subsus_u_b (v16u8, v16i8);
43466     v8u16 __builtin_msa_subsus_u_h (v8u16, v8i16);
43467     v4u32 __builtin_msa_subsus_u_w (v4u32, v4i32);
43468     v2u64 __builtin_msa_subsus_u_d (v2u64, v2i64);
43469
43470     v16i8 __builtin_msa_subsuu_s_b (v16u8, v16u8);
43471     v8i16 __builtin_msa_subsuu_s_h (v8u16, v8u16);
43472     v4i32 __builtin_msa_subsuu_s_w (v4u32, v4u32);
43473     v2i64 __builtin_msa_subsuu_s_d (v2u64, v2u64);
43474
43475     v16i8 __builtin_msa_subv_b (v16i8, v16i8);
43476     v8i16 __builtin_msa_subv_h (v8i16, v8i16);
43477     v4i32 __builtin_msa_subv_w (v4i32, v4i32);
43478     v2i64 __builtin_msa_subv_d (v2i64, v2i64);
43479
43480     v16i8 __builtin_msa_subvi_b (v16i8, imm0_31);
43481     v8i16 __builtin_msa_subvi_h (v8i16, imm0_31);
43482     v4i32 __builtin_msa_subvi_w (v4i32, imm0_31);
43483     v2i64 __builtin_msa_subvi_d (v2i64, imm0_31);
43484
43485     v16i8 __builtin_msa_vshf_b (v16i8, v16i8, v16i8);
43486     v8i16 __builtin_msa_vshf_h (v8i16, v8i16, v8i16);
43487     v4i32 __builtin_msa_vshf_w (v4i32, v4i32, v4i32);
43488     v2i64 __builtin_msa_vshf_d (v2i64, v2i64, v2i64);
43489
43490     v16u8 __builtin_msa_xor_v (v16u8, v16u8);
43491
43492     v16u8 __builtin_msa_xori_b (v16u8, imm0_255);
43493
43494
43495File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: MSP430 Built-in Functions,  Prev: MIPS SIMD Architecture (MSA) Support,  Up: Target Builtins
43496
434976.59.17 Other MIPS Built-in Functions
43498-------------------------------------
43499
43500GCC provides other MIPS-specific built-in functions:
43501
43502'void __builtin_mips_cache (int OP, const volatile void *ADDR)'
43503     Insert a 'cache' instruction with operands OP and ADDR.  GCC
43504     defines the preprocessor macro '___GCC_HAVE_BUILTIN_MIPS_CACHE'
43505     when this function is available.
43506
43507'unsigned int __builtin_mips_get_fcsr (void)'
43508'void __builtin_mips_set_fcsr (unsigned int VALUE)'
43509     Get and set the contents of the floating-point control and status
43510     register (FPU control register 31).  These functions are only
43511     available in hard-float code but can be called in both MIPS16 and
43512     non-MIPS16 contexts.
43513
43514     '__builtin_mips_set_fcsr' can be used to change any bit of the
43515     register except the condition codes, which GCC assumes are
43516     preserved.
43517
43518
43519File: gcc.info,  Node: MSP430 Built-in Functions,  Next: NDS32 Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins
43520
435216.59.18 MSP430 Built-in Functions
43522---------------------------------
43523
43524GCC provides a couple of special builtin functions to aid in the writing
43525of interrupt handlers in C.
43526
43527'__bic_SR_register_on_exit (int MASK)'
43528     This clears the indicated bits in the saved copy of the status
43529     register currently residing on the stack.  This only works inside
43530     interrupt handlers and the changes to the status register will only
43531     take affect once the handler returns.
43532
43533'__bis_SR_register_on_exit (int MASK)'
43534     This sets the indicated bits in the saved copy of the status
43535     register currently residing on the stack.  This only works inside
43536     interrupt handlers and the changes to the status register will only
43537     take affect once the handler returns.
43538
43539'__delay_cycles (long long CYCLES)'
43540     This inserts an instruction sequence that takes exactly CYCLES
43541     cycles (between 0 and about 17E9) to complete.  The inserted
43542     sequence may use jumps, loops, or no-ops, and does not interfere
43543     with any other instructions.  Note that CYCLES must be a
43544     compile-time constant integer - that is, you must pass a number,
43545     not a variable that may be optimized to a constant later.  The
43546     number of cycles delayed by this builtin is exact.
43547
43548
43549File: gcc.info,  Node: NDS32 Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MSP430 Built-in Functions,  Up: Target Builtins
43550
435516.59.19 NDS32 Built-in Functions
43552--------------------------------
43553
43554These built-in functions are available for the NDS32 target:
43555
43556 -- Built-in Function: void __builtin_nds32_isync (int *ADDR)
43557     Insert an ISYNC instruction into the instruction stream where ADDR
43558     is an instruction address for serialization.
43559
43560 -- Built-in Function: void __builtin_nds32_isb (void)
43561     Insert an ISB instruction into the instruction stream.
43562
43563 -- Built-in Function: int __builtin_nds32_mfsr (int SR)
43564     Return the content of a system register which is mapped by SR.
43565
43566 -- Built-in Function: int __builtin_nds32_mfusr (int USR)
43567     Return the content of a user space register which is mapped by USR.
43568
43569 -- Built-in Function: void __builtin_nds32_mtsr (int VALUE, int SR)
43570     Move the VALUE to a system register which is mapped by SR.
43571
43572 -- Built-in Function: void __builtin_nds32_mtusr (int VALUE, int USR)
43573     Move the VALUE to a user space register which is mapped by USR.
43574
43575 -- Built-in Function: void __builtin_nds32_setgie_en (void)
43576     Enable global interrupt.
43577
43578 -- Built-in Function: void __builtin_nds32_setgie_dis (void)
43579     Disable global interrupt.
43580
43581
43582File: gcc.info,  Node: picoChip Built-in Functions,  Next: PowerPC Built-in Functions,  Prev: NDS32 Built-in Functions,  Up: Target Builtins
43583
435846.59.20 picoChip Built-in Functions
43585-----------------------------------
43586
43587GCC provides an interface to selected machine instructions from the
43588picoChip instruction set.
43589
43590'int __builtin_sbc (int VALUE)'
43591     Sign bit count.  Return the number of consecutive bits in VALUE
43592     that have the same value as the sign bit.  The result is the number
43593     of leading sign bits minus one, giving the number of redundant sign
43594     bits in VALUE.
43595
43596'int __builtin_byteswap (int VALUE)'
43597     Byte swap.  Return the result of swapping the upper and lower bytes
43598     of VALUE.
43599
43600'int __builtin_brev (int VALUE)'
43601     Bit reversal.  Return the result of reversing the bits in VALUE.
43602     Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
43603     on.
43604
43605'int __builtin_adds (int X, int Y)'
43606     Saturating addition.  Return the result of adding X and Y, storing
43607     the value 32767 if the result overflows.
43608
43609'int __builtin_subs (int X, int Y)'
43610     Saturating subtraction.  Return the result of subtracting Y from X,
43611     storing the value -32768 if the result overflows.
43612
43613'void __builtin_halt (void)'
43614     Halt.  The processor stops execution.  This built-in is useful for
43615     implementing assertions.
43616
43617
43618File: gcc.info,  Node: PowerPC Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins
43619
436206.59.21 PowerPC Built-in Functions
43621----------------------------------
43622
43623The following built-in functions are always available and can be used to
43624check the PowerPC target platform type:
43625
43626 -- Built-in Function: void __builtin_cpu_init (void)
43627     This function is a 'nop' on the PowerPC platform and is included
43628     solely to maintain API compatibility with the x86 builtins.
43629
43630 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
43631     This function returns a value of '1' if the run-time CPU is of type
43632     CPUNAME and returns '0' otherwise
43633
43634     The '__builtin_cpu_is' function requires GLIBC 2.23 or newer which
43635     exports the hardware capability bits.  GCC defines the macro
43636     '__BUILTIN_CPU_SUPPORTS__' if the '__builtin_cpu_supports' built-in
43637     function is fully supported.
43638
43639     If GCC was configured to use a GLIBC before 2.23, the built-in
43640     function '__builtin_cpu_is' always returns a 0 and the compiler
43641     issues a warning.
43642
43643     The following CPU names can be detected:
43644
43645     'power9'
43646          IBM POWER9 Server CPU.
43647     'power8'
43648          IBM POWER8 Server CPU.
43649     'power7'
43650          IBM POWER7 Server CPU.
43651     'power6x'
43652          IBM POWER6 Server CPU (RAW mode).
43653     'power6'
43654          IBM POWER6 Server CPU (Architected mode).
43655     'power5+'
43656          IBM POWER5+ Server CPU.
43657     'power5'
43658          IBM POWER5 Server CPU.
43659     'ppc970'
43660          IBM 970 Server CPU (ie, Apple G5).
43661     'power4'
43662          IBM POWER4 Server CPU.
43663     'ppca2'
43664          IBM A2 64-bit Embedded CPU
43665     'ppc476'
43666          IBM PowerPC 476FP 32-bit Embedded CPU.
43667     'ppc464'
43668          IBM PowerPC 464 32-bit Embedded CPU.
43669     'ppc440'
43670          PowerPC 440 32-bit Embedded CPU.
43671     'ppc405'
43672          PowerPC 405 32-bit Embedded CPU.
43673     'ppc-cell-be'
43674          IBM PowerPC Cell Broadband Engine Architecture CPU.
43675
43676     Here is an example:
43677          #ifdef __BUILTIN_CPU_SUPPORTS__
43678            if (__builtin_cpu_is ("power8"))
43679              {
43680                 do_power8 (); // POWER8 specific implementation.
43681              }
43682            else
43683          #endif
43684              {
43685                 do_generic (); // Generic implementation.
43686              }
43687
43688 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
43689     This function returns a value of '1' if the run-time CPU supports
43690     the HWCAP feature FEATURE and returns '0' otherwise.
43691
43692     The '__builtin_cpu_supports' function requires GLIBC 2.23 or newer
43693     which exports the hardware capability bits.  GCC defines the macro
43694     '__BUILTIN_CPU_SUPPORTS__' if the '__builtin_cpu_supports' built-in
43695     function is fully supported.
43696
43697     If GCC was configured to use a GLIBC before 2.23, the built-in
43698     function '__builtin_cpu_suports' always returns a 0 and the
43699     compiler issues a warning.
43700
43701     The following features can be detected:
43702
43703     '4xxmac'
43704          4xx CPU has a Multiply Accumulator.
43705     'altivec'
43706          CPU has a SIMD/Vector Unit.
43707     'arch_2_05'
43708          CPU supports ISA 2.05 (eg, POWER6)
43709     'arch_2_06'
43710          CPU supports ISA 2.06 (eg, POWER7)
43711     'arch_2_07'
43712          CPU supports ISA 2.07 (eg, POWER8)
43713     'arch_3_00'
43714          CPU supports ISA 3.0 (eg, POWER9)
43715     'archpmu'
43716          CPU supports the set of compatible performance monitoring
43717          events.
43718     'booke'
43719          CPU supports the Embedded ISA category.
43720     'cellbe'
43721          CPU has a CELL broadband engine.
43722     'dfp'
43723          CPU has a decimal floating point unit.
43724     'dscr'
43725          CPU supports the data stream control register.
43726     'ebb'
43727          CPU supports event base branching.
43728     'efpdouble'
43729          CPU has a SPE double precision floating point unit.
43730     'efpsingle'
43731          CPU has a SPE single precision floating point unit.
43732     'fpu'
43733          CPU has a floating point unit.
43734     'htm'
43735          CPU has hardware transaction memory instructions.
43736     'htm-nosc'
43737          Kernel aborts hardware transactions when a syscall is made.
43738     'ic_snoop'
43739          CPU supports icache snooping capabilities.
43740     'ieee128'
43741          CPU supports 128-bit IEEE binary floating point instructions.
43742     'isel'
43743          CPU supports the integer select instruction.
43744     'mmu'
43745          CPU has a memory management unit.
43746     'notb'
43747          CPU does not have a timebase (eg, 601 and 403gx).
43748     'pa6t'
43749          CPU supports the PA Semi 6T CORE ISA.
43750     'power4'
43751          CPU supports ISA 2.00 (eg, POWER4)
43752     'power5'
43753          CPU supports ISA 2.02 (eg, POWER5)
43754     'power5+'
43755          CPU supports ISA 2.03 (eg, POWER5+)
43756     'power6x'
43757          CPU supports ISA 2.05 (eg, POWER6) extended opcodes mffgpr and
43758          mftgpr.
43759     'ppc32'
43760          CPU supports 32-bit mode execution.
43761     'ppc601'
43762          CPU supports the old POWER ISA (eg, 601)
43763     'ppc64'
43764          CPU supports 64-bit mode execution.
43765     'ppcle'
43766          CPU supports a little-endian mode that uses address swizzling.
43767     'smt'
43768          CPU support simultaneous multi-threading.
43769     'spe'
43770          CPU has a signal processing extension unit.
43771     'tar'
43772          CPU supports the target address register.
43773     'true_le'
43774          CPU supports true little-endian mode.
43775     'ucache'
43776          CPU has unified I/D cache.
43777     'vcrypto'
43778          CPU supports the vector cryptography instructions.
43779     'vsx'
43780          CPU supports the vector-scalar extension.
43781
43782     Here is an example:
43783          #ifdef __BUILTIN_CPU_SUPPORTS__
43784            if (__builtin_cpu_supports ("fpu"))
43785              {
43786                 asm("fadd %0,%1,%2" : "=d"(dst) : "d"(src1), "d"(src2));
43787              }
43788            else
43789          #endif
43790              {
43791                 dst = __fadd (src1, src2); // Software FP addition function.
43792              }
43793
43794 These built-in functions are available for the PowerPC family of
43795processors:
43796     float __builtin_recipdivf (float, float);
43797     float __builtin_rsqrtf (float);
43798     double __builtin_recipdiv (double, double);
43799     double __builtin_rsqrt (double);
43800     uint64_t __builtin_ppc_get_timebase ();
43801     unsigned long __builtin_ppc_mftb ();
43802     double __builtin_unpack_longdouble (long double, int);
43803     long double __builtin_pack_longdouble (double, double);
43804     __ibm128 __builtin_unpack_ibm128 (__ibm128, int);
43805     __ibm128 __builtin_pack_ibm128 (double, double);
43806
43807 The 'vec_rsqrt', '__builtin_rsqrt', and '__builtin_rsqrtf' functions
43808generate multiple instructions to implement the reciprocal sqrt
43809functionality using reciprocal sqrt estimate instructions.
43810
43811 The '__builtin_recipdiv', and '__builtin_recipdivf' functions generate
43812multiple instructions to implement division using the reciprocal
43813estimate instructions.
43814
43815 The '__builtin_ppc_get_timebase' and '__builtin_ppc_mftb' functions
43816generate instructions to read the Time Base Register.  The
43817'__builtin_ppc_get_timebase' function may generate multiple instructions
43818and always returns the 64 bits of the Time Base Register.  The
43819'__builtin_ppc_mftb' function always generates one instruction and
43820returns the Time Base Register value as an unsigned long, throwing away
43821the most significant word on 32-bit environments.
43822
43823 The '__builtin_unpack_longdouble' function takes a 'long double'
43824argument and a compile time constant of 0 or 1.  If the constant is 0,
43825the first 'double' within the 'long double' is returned, otherwise the
43826second 'double' is returned.  The '__builtin_unpack_longdouble' function
43827is only availble if 'long double' uses the IBM extended double
43828representation.
43829
43830 The '__builtin_pack_longdouble' function takes two 'double' arguments
43831and returns a 'long double' value that combines the two arguments.  The
43832'__builtin_pack_longdouble' function is only availble if 'long double'
43833uses the IBM extended double representation.
43834
43835 The '__builtin_unpack_ibm128' function takes a '__ibm128' argument and
43836a compile time constant of 0 or 1.  If the constant is 0, the first
43837'double' within the '__ibm128' is returned, otherwise the second
43838'double' is returned.
43839
43840 The '__builtin_pack_ibm128' function takes two 'double' arguments and
43841returns a '__ibm128' value that combines the two arguments.
43842
43843 Additional built-in functions are available for the 64-bit PowerPC
43844family of processors, for efficient use of 128-bit floating point
43845('__float128') values.
43846
43847 Previous versions of GCC supported some 'q' builtins for IEEE 128-bit
43848floating point.  These functions are now mapped into the equivalent
43849'f128' builtin functions.
43850
43851     __builtin_fabsq is mapped into __builtin_fabsf128
43852     __builtin_copysignq is mapped into __builtin_copysignf128
43853     __builtin_infq is mapped into __builtin_inff128
43854     __builtin_huge_valq is mapped into __builtin_huge_valf128
43855     __builtin_nanq is mapped into __builtin_nanf128
43856     __builtin_nansq is mapped into __builtin_nansf128
43857
43858 The following built-in functions are available on Linux 64-bit systems
43859that use the ISA 3.0 instruction set.
43860
43861'__float128 __builtin_sqrtf128 (__float128)'
43862     Perform a 128-bit IEEE floating point square root operation.
43863
43864'__float128 __builtin_fmaf128 (__float128, __float128, __float128)'
43865     Perform a 128-bit IEEE floating point fused multiply and add
43866     operation.
43867
43868'__float128 __builtin_addf128_round_to_odd (__float128, __float128)'
43869     Perform a 128-bit IEEE floating point add using round to odd as the
43870     rounding mode.
43871
43872'__float128 __builtin_subf128_round_to_odd (__float128, __float128)'
43873     Perform a 128-bit IEEE floating point subtract using round to odd
43874     as the rounding mode.
43875
43876'__float128 __builtin_mulf128_round_to_odd (__float128, __float128)'
43877     Perform a 128-bit IEEE floating point multiply using round to odd
43878     as the rounding mode.
43879
43880'__float128 __builtin_divf128_round_to_odd (__float128, __float128)'
43881     Perform a 128-bit IEEE floating point divide using round to odd as
43882     the rounding mode.
43883
43884'__float128 __builtin_sqrtf128_round_to_odd (__float128)'
43885     Perform a 128-bit IEEE floating point square root using round to
43886     odd as the rounding mode.
43887
43888'__float128 __builtin_fmaf128 (__float128, __float128, __float128)'
43889     Perform a 128-bit IEEE floating point fused multiply and add
43890     operation using round to odd as the rounding mode.
43891
43892'double __builtin_truncf128_round_to_odd (__float128)'
43893     Convert a 128-bit IEEE floating point value to 'double' using round
43894     to odd as the rounding mode.
43895
43896 The following built-in functions are available for the PowerPC family
43897of processors, starting with ISA 2.05 or later ('-mcpu=power6' or
43898'-mcmpb'):
43899     unsigned long long __builtin_cmpb (unsigned long long int, unsigned long long int);
43900     unsigned int __builtin_cmpb (unsigned int, unsigned int);
43901
43902 The '__builtin_cmpb' function performs a byte-wise compare on the
43903contents of its two arguments, returning the result of the byte-wise
43904comparison as the returned value.  For each byte comparison, the
43905corresponding byte of the return value holds 0xff if the input bytes are
43906equal and 0 if the input bytes are not equal.  If either of the
43907arguments to this built-in function is wider than 32 bits, the function
43908call expands into the form that expects 'unsigned long long int'
43909arguments which is only available on 64-bit targets.
43910
43911 The following built-in functions are available for the PowerPC family
43912of processors, starting with ISA 2.06 or later ('-mcpu=power7' or
43913'-mpopcntd'):
43914     long __builtin_bpermd (long, long);
43915     int __builtin_divwe (int, int);
43916     unsigned int __builtin_divweu (unsigned int, unsigned int);
43917     long __builtin_divde (long, long);
43918     unsigned long __builtin_divdeu (unsigned long, unsigned long);
43919     unsigned int cdtbcd (unsigned int);
43920     unsigned int cbcdtd (unsigned int);
43921     unsigned int addg6s (unsigned int, unsigned int);
43922     void __builtin_rs6000_speculation_barrier (void);
43923
43924 The '__builtin_divde' and '__builtin_divdeu' functions require a 64-bit
43925environment supporting ISA 2.06 or later.
43926
43927 The following built-in functions are available for the PowerPC family
43928of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
43929     long long __builtin_darn (void);
43930     long long __builtin_darn_raw (void);
43931     int __builtin_darn_32 (void);
43932
43933     unsigned int scalar_extract_exp (double source);
43934     unsigned long long int scalar_extract_exp (__ieee128 source);
43935
43936     unsigned long long int scalar_extract_sig (double source);
43937     unsigned __int128 scalar_extract_sig (__ieee128 source);
43938
43939     double
43940     scalar_insert_exp (unsigned long long int significand, unsigned long long int exponent);
43941     double
43942     scalar_insert_exp (double significand, unsigned long long int exponent);
43943
43944     ieee_128
43945     scalar_insert_exp (unsigned __int128 significand, unsigned long long int exponent);
43946     ieee_128
43947     scalar_insert_exp (ieee_128 significand, unsigned long long int exponent);
43948
43949     int scalar_cmp_exp_gt (double arg1, double arg2);
43950     int scalar_cmp_exp_lt (double arg1, double arg2);
43951     int scalar_cmp_exp_eq (double arg1, double arg2);
43952     int scalar_cmp_exp_unordered (double arg1, double arg2);
43953
43954     bool scalar_test_data_class (float source, const int condition);
43955     bool scalar_test_data_class (double source, const int condition);
43956     bool scalar_test_data_class (__ieee128 source, const int condition);
43957
43958     bool scalar_test_neg (float source);
43959     bool scalar_test_neg (double source);
43960     bool scalar_test_neg (__ieee128 source);
43961
43962     int __builtin_byte_in_set (unsigned char u, unsigned long long set);
43963     int __builtin_byte_in_range (unsigned char u, unsigned int range);
43964     int __builtin_byte_in_either_range (unsigned char u, unsigned int ranges);
43965
43966     int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal64 value);
43967     int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal128 value);
43968     int __builtin_dfp_dtstsfi_lt_dd (unsigned int comparison, _Decimal64 value);
43969     int __builtin_dfp_dtstsfi_lt_td (unsigned int comparison, _Decimal128 value);
43970
43971     int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal64 value);
43972     int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal128 value);
43973     int __builtin_dfp_dtstsfi_gt_dd (unsigned int comparison, _Decimal64 value);
43974     int __builtin_dfp_dtstsfi_gt_td (unsigned int comparison, _Decimal128 value);
43975
43976     int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal64 value);
43977     int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal128 value);
43978     int __builtin_dfp_dtstsfi_eq_dd (unsigned int comparison, _Decimal64 value);
43979     int __builtin_dfp_dtstsfi_eq_td (unsigned int comparison, _Decimal128 value);
43980
43981     int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal64 value);
43982     int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal128 value);
43983     int __builtin_dfp_dtstsfi_ov_dd (unsigned int comparison, _Decimal64 value);
43984     int __builtin_dfp_dtstsfi_ov_td (unsigned int comparison, _Decimal128 value);
43985
43986 The '__builtin_darn' and '__builtin_darn_raw' functions require a
4398764-bit environment supporting ISA 3.0 or later.  The '__builtin_darn'
43988function provides a 64-bit conditioned random number.  The
43989'__builtin_darn_raw' function provides a 64-bit raw random number.  The
43990'__builtin_darn_32' function provides a 32-bit random number.
43991
43992 The 'scalar_extract_exp' and 'scalar_extract_sig' functions require a
4399364-bit environment supporting ISA 3.0 or later.  The
43994'scalar_extract_exp' and 'scalar_extract_sig' built-in functions return
43995the significand and the biased exponent value respectively of their
43996'source' arguments.  When supplied with a 64-bit 'source' argument, the
43997result returned by 'scalar_extract_sig' has the '0x0010000000000000' bit
43998set if the function's 'source' argument is in normalized form.
43999Otherwise, this bit is set to 0.  When supplied with a 128-bit 'source'
44000argument, the '0x00010000000000000000000000000000' bit of the result is
44001treated similarly.  Note that the sign of the significand is not
44002represented in the result returned from the 'scalar_extract_sig'
44003function.  Use the 'scalar_test_neg' function to test the sign of its
44004'double' argument.
44005
44006 The 'scalar_insert_exp' functions require a 64-bit environment
44007supporting ISA 3.0 or later.  When supplied with a 64-bit first
44008argument, the 'scalar_insert_exp' built-in function returns a
44009double-precision floating point value that is constructed by assembling
44010the values of its 'significand' and 'exponent' arguments.  The sign of
44011the result is copied from the most significant bit of the 'significand'
44012argument.  The significand and exponent components of the result are
44013composed of the least significant 11 bits of the 'exponent' argument and
44014the least significant 52 bits of the 'significand' argument
44015respectively.
44016
44017 When supplied with a 128-bit first argument, the 'scalar_insert_exp'
44018built-in function returns a quad-precision ieee floating point value.
44019The sign bit of the result is copied from the most significant bit of
44020the 'significand' argument.  The significand and exponent components of
44021the result are composed of the least significant 15 bits of the
44022'exponent' argument and the least significant 112 bits of the
44023'significand' argument respectively.
44024
44025 The 'scalar_cmp_exp_gt', 'scalar_cmp_exp_lt', 'scalar_cmp_exp_eq', and
44026'scalar_cmp_exp_unordered' built-in functions return a non-zero value if
44027'arg1' is greater than, less than, equal to, or not comparable to 'arg2'
44028respectively.  The arguments are not comparable if one or the other
44029equals NaN (not a number).
44030
44031 The 'scalar_test_data_class' built-in function returns 1 if any of the
44032condition tests enabled by the value of the 'condition' variable are
44033true, and 0 otherwise.  The 'condition' argument must be a compile-time
44034constant integer with value not exceeding 127.  The 'condition' argument
44035is encoded as a bitmask with each bit enabling the testing of a
44036different condition, as characterized by the following:
44037     0x40    Test for NaN
44038     0x20    Test for +Infinity
44039     0x10    Test for -Infinity
44040     0x08    Test for +Zero
44041     0x04    Test for -Zero
44042     0x02    Test for +Denormal
44043     0x01    Test for -Denormal
44044
44045 The 'scalar_test_neg' built-in function returns 1 if its 'source'
44046argument holds a negative value, 0 otherwise.
44047
44048 The '__builtin_byte_in_set' function requires a 64-bit environment
44049supporting ISA 3.0 or later.  This function returns a non-zero value if
44050and only if its 'u' argument exactly equals one of the eight bytes
44051contained within its 64-bit 'set' argument.
44052
44053 The '__builtin_byte_in_range' and '__builtin_byte_in_either_range'
44054require an environment supporting ISA 3.0 or later.  For these two
44055functions, the 'range' argument is encoded as 4 bytes, organized as
44056'hi_1:lo_1:hi_2:lo_2'.  The '__builtin_byte_in_range' function returns a
44057non-zero value if and only if its 'u' argument is within the range
44058bounded between 'lo_2' and 'hi_2' inclusive.  The
44059'__builtin_byte_in_either_range' function returns non-zero if and only
44060if its 'u' argument is within either the range bounded between 'lo_1'
44061and 'hi_1' inclusive or the range bounded between 'lo_2' and 'hi_2'
44062inclusive.
44063
44064 The '__builtin_dfp_dtstsfi_lt' function returns a non-zero value if and
44065only if the number of signficant digits of its 'value' argument is less
44066than its 'comparison' argument.  The '__builtin_dfp_dtstsfi_lt_dd' and
44067'__builtin_dfp_dtstsfi_lt_td' functions behave similarly, but require
44068that the type of the 'value' argument be '__Decimal64' and
44069'__Decimal128' respectively.
44070
44071 The '__builtin_dfp_dtstsfi_gt' function returns a non-zero value if and
44072only if the number of signficant digits of its 'value' argument is
44073greater than its 'comparison' argument.  The
44074'__builtin_dfp_dtstsfi_gt_dd' and '__builtin_dfp_dtstsfi_gt_td'
44075functions behave similarly, but require that the type of the 'value'
44076argument be '__Decimal64' and '__Decimal128' respectively.
44077
44078 The '__builtin_dfp_dtstsfi_eq' function returns a non-zero value if and
44079only if the number of signficant digits of its 'value' argument equals
44080its 'comparison' argument.  The '__builtin_dfp_dtstsfi_eq_dd' and
44081'__builtin_dfp_dtstsfi_eq_td' functions behave similarly, but require
44082that the type of the 'value' argument be '__Decimal64' and
44083'__Decimal128' respectively.
44084
44085 The '__builtin_dfp_dtstsfi_ov' function returns a non-zero value if and
44086only if its 'value' argument has an undefined number of significant
44087digits, such as when 'value' is an encoding of 'NaN'.  The
44088'__builtin_dfp_dtstsfi_ov_dd' and '__builtin_dfp_dtstsfi_ov_td'
44089functions behave similarly, but require that the type of the 'value'
44090argument be '__Decimal64' and '__Decimal128' respectively.
44091
44092 The following built-in functions are also available for the PowerPC
44093family of processors, starting with ISA 3.0 or later ('-mcpu=power9').
44094These string functions are described separately in order to group the
44095descriptions closer to the function prototypes:
44096     int vec_all_nez (vector signed char, vector signed char);
44097     int vec_all_nez (vector unsigned char, vector unsigned char);
44098     int vec_all_nez (vector signed short, vector signed short);
44099     int vec_all_nez (vector unsigned short, vector unsigned short);
44100     int vec_all_nez (vector signed int, vector signed int);
44101     int vec_all_nez (vector unsigned int, vector unsigned int);
44102
44103     int vec_any_eqz (vector signed char, vector signed char);
44104     int vec_any_eqz (vector unsigned char, vector unsigned char);
44105     int vec_any_eqz (vector signed short, vector signed short);
44106     int vec_any_eqz (vector unsigned short, vector unsigned short);
44107     int vec_any_eqz (vector signed int, vector signed int);
44108     int vec_any_eqz (vector unsigned int, vector unsigned int);
44109
44110     vector bool char vec_cmpnez (vector signed char arg1, vector signed char arg2);
44111     vector bool char vec_cmpnez (vector unsigned char arg1, vector unsigned char arg2);
44112     vector bool short vec_cmpnez (vector signed short arg1, vector signed short arg2);
44113     vector bool short vec_cmpnez (vector unsigned short arg1, vector unsigned short arg2);
44114     vector bool int vec_cmpnez (vector signed int arg1, vector signed int arg2);
44115     vector bool int vec_cmpnez (vector unsigned int, vector unsigned int);
44116
44117     vector signed char vec_cnttz (vector signed char);
44118     vector unsigned char vec_cnttz (vector unsigned char);
44119     vector signed short vec_cnttz (vector signed short);
44120     vector unsigned short vec_cnttz (vector unsigned short);
44121     vector signed int vec_cnttz (vector signed int);
44122     vector unsigned int vec_cnttz (vector unsigned int);
44123     vector signed long long vec_cnttz (vector signed long long);
44124     vector unsigned long long vec_cnttz (vector unsigned long long);
44125
44126     signed int vec_cntlz_lsbb (vector signed char);
44127     signed int vec_cntlz_lsbb (vector unsigned char);
44128
44129     signed int vec_cnttz_lsbb (vector signed char);
44130     signed int vec_cnttz_lsbb (vector unsigned char);
44131
44132     unsigned int vec_first_match_index (vector signed char, vector signed char);
44133     unsigned int vec_first_match_index (vector unsigned char,
44134                                         vector unsigned char);
44135     unsigned int vec_first_match_index (vector signed int, vector signed int);
44136     unsigned int vec_first_match_index (vector unsigned int, vector unsigned int);
44137     unsigned int vec_first_match_index (vector signed short, vector signed short);
44138     unsigned int vec_first_match_index (vector unsigned short,
44139                                         vector unsigned short);
44140     unsigned int vec_first_match_or_eos_index (vector signed char,
44141                                                vector signed char);
44142     unsigned int vec_first_match_or_eos_index (vector unsigned char,
44143                                                vector unsigned char);
44144     unsigned int vec_first_match_or_eos_index (vector signed int,
44145                                                vector signed int);
44146     unsigned int vec_first_match_or_eos_index (vector unsigned int,
44147                                                vector unsigned int);
44148     unsigned int vec_first_match_or_eos_index (vector signed short,
44149                                                vector signed short);
44150     unsigned int vec_first_match_or_eos_index (vector unsigned short,
44151                                                vector unsigned short);
44152     unsigned int vec_first_mismatch_index (vector signed char,
44153                                            vector signed char);
44154     unsigned int vec_first_mismatch_index (vector unsigned char,
44155                                            vector unsigned char);
44156     unsigned int vec_first_mismatch_index (vector signed int,
44157                                            vector signed int);
44158     unsigned int vec_first_mismatch_index (vector unsigned int,
44159                                            vector unsigned int);
44160     unsigned int vec_first_mismatch_index (vector signed short,
44161                                            vector signed short);
44162     unsigned int vec_first_mismatch_index (vector unsigned short,
44163                                            vector unsigned short);
44164     unsigned int vec_first_mismatch_or_eos_index (vector signed char,
44165                                                   vector signed char);
44166     unsigned int vec_first_mismatch_or_eos_index (vector unsigned char,
44167                                                   vector unsigned char);
44168     unsigned int vec_first_mismatch_or_eos_index (vector signed int,
44169                                                   vector signed int);
44170     unsigned int vec_first_mismatch_or_eos_index (vector unsigned int,
44171                                                   vector unsigned int);
44172     unsigned int vec_first_mismatch_or_eos_index (vector signed short,
44173                                                   vector signed short);
44174     unsigned int vec_first_mismatch_or_eos_index (vector unsigned short,
44175                                                   vector unsigned short);
44176
44177     vector unsigned short vec_pack_to_short_fp32 (vector float, vector float);
44178
44179     vector signed char vec_xl_be (signed long long, signed char *);
44180     vector unsigned char vec_xl_be (signed long long, unsigned char *);
44181     vector signed int vec_xl_be (signed long long, signed int *);
44182     vector unsigned int vec_xl_be (signed long long, unsigned int *);
44183     vector signed __int128 vec_xl_be (signed long long, signed __int128 *);
44184     vector unsigned __int128 vec_xl_be (signed long long, unsigned __int128 *);
44185     vector signed long long vec_xl_be (signed long long, signed long long *);
44186     vector unsigned long long vec_xl_be (signed long long, unsigned long long *);
44187     vector signed short vec_xl_be (signed long long, signed short *);
44188     vector unsigned short vec_xl_be (signed long long, unsigned short *);
44189     vector double vec_xl_be (signed long long, double *);
44190     vector float vec_xl_be (signed long long, float *);
44191
44192     vector signed char vec_xl_len (signed char *addr, size_t len);
44193     vector unsigned char vec_xl_len (unsigned char *addr, size_t len);
44194     vector signed int vec_xl_len (signed int *addr, size_t len);
44195     vector unsigned int vec_xl_len (unsigned int *addr, size_t len);
44196     vector signed __int128 vec_xl_len (signed __int128 *addr, size_t len);
44197     vector unsigned __int128 vec_xl_len (unsigned __int128 *addr, size_t len);
44198     vector signed long long vec_xl_len (signed long long *addr, size_t len);
44199     vector unsigned long long vec_xl_len (unsigned long long *addr, size_t len);
44200     vector signed short vec_xl_len (signed short *addr, size_t len);
44201     vector unsigned short vec_xl_len (unsigned short *addr, size_t len);
44202     vector double vec_xl_len (double *addr, size_t len);
44203     vector float vec_xl_len (float *addr, size_t len);
44204
44205     vector unsigned char vec_xl_len_r (unsigned char *addr, size_t len);
44206
44207     void vec_xst_len (vector signed char data, signed char *addr, size_t len);
44208     void vec_xst_len (vector unsigned char data, unsigned char *addr, size_t len);
44209     void vec_xst_len (vector signed int data, signed int *addr, size_t len);
44210     void vec_xst_len (vector unsigned int data, unsigned int *addr, size_t len);
44211     void vec_xst_len (vector unsigned __int128 data, unsigned __int128 *addr, size_t len);
44212     void vec_xst_len (vector signed long long data, signed long long *addr, size_t len);
44213     void vec_xst_len (vector unsigned long long data, unsigned long long *addr, size_t len);
44214     void vec_xst_len (vector signed short data, signed short *addr, size_t len);
44215     void vec_xst_len (vector unsigned short data, unsigned short *addr, size_t len);
44216     void vec_xst_len (vector signed __int128 data, signed __int128 *addr, size_t len);
44217     void vec_xst_len (vector double data, double *addr, size_t len);
44218     void vec_xst_len (vector float data, float *addr, size_t len);
44219
44220     void vec_xst_len_r (vector unsigned char data, unsigned char *addr, size_t len);
44221
44222     signed char vec_xlx (unsigned int index, vector signed char data);
44223     unsigned char vec_xlx (unsigned int index, vector unsigned char data);
44224     signed short vec_xlx (unsigned int index, vector signed short data);
44225     unsigned short vec_xlx (unsigned int index, vector unsigned short data);
44226     signed int vec_xlx (unsigned int index, vector signed int data);
44227     unsigned int vec_xlx (unsigned int index, vector unsigned int data);
44228     float vec_xlx (unsigned int index, vector float data);
44229
44230     signed char vec_xrx (unsigned int index, vector signed char data);
44231     unsigned char vec_xrx (unsigned int index, vector unsigned char data);
44232     signed short vec_xrx (unsigned int index, vector signed short data);
44233     unsigned short vec_xrx (unsigned int index, vector unsigned short data);
44234     signed int vec_xrx (unsigned int index, vector signed int data);
44235     unsigned int vec_xrx (unsigned int index, vector unsigned int data);
44236     float vec_xrx (unsigned int index, vector float data);
44237
44238 The 'vec_all_nez', 'vec_any_eqz', and 'vec_cmpnez' perform pairwise
44239comparisons between the elements at the same positions within their two
44240vector arguments.  The 'vec_all_nez' function returns a non-zero value
44241if and only if all pairwise comparisons are not equal and no element of
44242either vector argument contains a zero.  The 'vec_any_eqz' function
44243returns a non-zero value if and only if at least one pairwise comparison
44244is equal or if at least one element of either vector argument contains a
44245zero.  The 'vec_cmpnez' function returns a vector of the same type as
44246its two arguments, within which each element consists of all ones to
44247denote that either the corresponding elements of the incoming arguments
44248are not equal or that at least one of the corresponding elements
44249contains zero.  Otherwise, the element of the returned vector contains
44250all zeros.
44251
44252 The 'vec_cntlz_lsbb' function returns the count of the number of
44253consecutive leading byte elements (starting from position 0 within the
44254supplied vector argument) for which the least-significant bit equals
44255zero.  The 'vec_cnttz_lsbb' function returns the count of the number of
44256consecutive trailing byte elements (starting from position 15 and
44257counting backwards within the supplied vector argument) for which the
44258least-significant bit equals zero.
44259
44260 The 'vec_xl_len' and 'vec_xst_len' functions require a 64-bit
44261environment supporting ISA 3.0 or later.  The 'vec_xl_len' function
44262loads a variable length vector from memory.  The 'vec_xst_len' function
44263stores a variable length vector to memory.  With both the 'vec_xl_len'
44264and 'vec_xst_len' functions, the 'addr' argument represents the memory
44265address to or from which data will be transferred, and the 'len'
44266argument represents the number of bytes to be transferred, as computed
44267by the C expression 'min((len & 0xff), 16)'.  If this expression's value
44268is not a multiple of the vector element's size, the behavior of this
44269function is undefined.  In the case that the underlying computer is
44270configured to run in big-endian mode, the data transfer moves bytes 0 to
44271'(len - 1)' of the corresponding vector.  In little-endian mode, the
44272data transfer moves bytes '(16 - len)' to '15' of the corresponding
44273vector.  For the load function, any bytes of the result vector that are
44274not loaded from memory are set to zero.  The value of the 'addr'
44275argument need not be aligned on a multiple of the vector's element size.
44276
44277 The 'vec_xlx' and 'vec_xrx' functions extract the single element
44278selected by the 'index' argument from the vector represented by the
44279'data' argument.  The 'index' argument always specifies a byte offset,
44280regardless of the size of the vector element.  With 'vec_xlx', 'index'
44281is the offset of the first byte of the element to be extracted.  With
44282'vec_xrx', 'index' represents the last byte of the element to be
44283extracted, measured from the right end of the vector.  In other words,
44284the last byte of the element to be extracted is found at position '(15 -
44285index)'.  There is no requirement that 'index' be a multiple of the
44286vector element size.  However, if the size of the vector element added
44287to 'index' is greater than 15, the content of the returned value is
44288undefined.
44289
44290 The following built-in functions are available for the PowerPC family
44291of processors when hardware decimal floating point ('-mhard-dfp') is
44292available:
44293     long long __builtin_dxex (_Decimal64);
44294     long long __builtin_dxexq (_Decimal128);
44295     _Decimal64 __builtin_ddedpd (int, _Decimal64);
44296     _Decimal128 __builtin_ddedpdq (int, _Decimal128);
44297     _Decimal64 __builtin_denbcd (int, _Decimal64);
44298     _Decimal128 __builtin_denbcdq (int, _Decimal128);
44299     _Decimal64 __builtin_diex (long long, _Decimal64);
44300     _Decimal128 _builtin_diexq (long long, _Decimal128);
44301     _Decimal64 __builtin_dscli (_Decimal64, int);
44302     _Decimal128 __builtin_dscliq (_Decimal128, int);
44303     _Decimal64 __builtin_dscri (_Decimal64, int);
44304     _Decimal128 __builtin_dscriq (_Decimal128, int);
44305     unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
44306     _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
44307
44308 The following built-in functions are available for the PowerPC family
44309of processors when the Vector Scalar (vsx) instruction set is available:
44310     unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int);
44311     vector __int128_t __builtin_pack_vector_int128 (unsigned long long,
44312                                                     unsigned long long);
44313
44314
44315File: gcc.info,  Node: PowerPC AltiVec/VSX Built-in Functions,  Next: PowerPC Hardware Transactional Memory Built-in Functions,  Prev: PowerPC Built-in Functions,  Up: Target Builtins
44316
443176.59.22 PowerPC AltiVec Built-in Functions
44318------------------------------------------
44319
44320GCC provides an interface for the PowerPC family of processors to access
44321the AltiVec operations described in Motorola's AltiVec Programming
44322Interface Manual.  The interface is made available by including
44323'<altivec.h>' and using '-maltivec' and '-mabi=altivec'.  The interface
44324supports the following vector types.
44325
44326     vector unsigned char
44327     vector signed char
44328     vector bool char
44329
44330     vector unsigned short
44331     vector signed short
44332     vector bool short
44333     vector pixel
44334
44335     vector unsigned int
44336     vector signed int
44337     vector bool int
44338     vector float
44339
44340 If '-mvsx' is used the following additional vector types are
44341implemented.
44342
44343     vector unsigned long
44344     vector signed long
44345     vector double
44346
44347 The long types are only implemented for 64-bit code generation, and the
44348long type is only used in the floating point/integer conversion
44349instructions.
44350
44351 GCC's implementation of the high-level language interface available
44352from C and C++ code differs from Motorola's documentation in several
44353ways.
44354
44355   * A vector constant is a list of constant expressions within curly
44356     braces.
44357
44358   * A vector initializer requires no cast if the vector constant is of
44359     the same type as the variable it is initializing.
44360
44361   * If 'signed' or 'unsigned' is omitted, the signedness of the vector
44362     type is the default signedness of the base type.  The default
44363     varies depending on the operating system, so a portable program
44364     should always specify the signedness.
44365
44366   * Compiling with '-maltivec' adds keywords '__vector', 'vector',
44367     '__pixel', 'pixel', '__bool' and 'bool'.  When compiling ISO C, the
44368     context-sensitive substitution of the keywords 'vector', 'pixel'
44369     and 'bool' is disabled.  To use them, you must include
44370     '<altivec.h>' instead.
44371
44372   * GCC allows using a 'typedef' name as the type specifier for a
44373     vector type, but only under the following circumstances:
44374
44375        * When using '__vector' instead of 'vector'; for example,
44376
44377               typedef signed short int16;
44378               __vector int16 data;
44379
44380        * When using 'vector' in keyword-and-predefine mode; for
44381          example,
44382
44383               typedef signed short int16;
44384               vector int16 data;
44385
44386          Note that keyword-and-predefine mode is enabled by disabling
44387          GNU extensions (e.g., by using '-std=c11') and including
44388          '<altivec.h>'.
44389
44390   * For C, overloaded functions are implemented with macros so the
44391     following does not work:
44392
44393            vec_add ((vector signed int){1, 2, 3, 4}, foo);
44394
44395     Since 'vec_add' is a macro, the vector constant in the example is
44396     treated as four separate arguments.  Wrap the entire argument in
44397     parentheses for this to work.
44398
44399 _Note:_ Only the '<altivec.h>' interface is supported.  Internally, GCC
44400uses built-in functions to achieve the functionality in the
44401aforementioned header file, but they are not supported and are subject
44402to change without notice.
44403
44404 GCC complies with the OpenPOWER 64-Bit ELF V2 ABI Specification, which
44405may be found at
44406<http://openpowerfoundation.org/wp-content/uploads/resources/leabi-prd/content/index.html>.
44407Appendix A of this document lists the vector API interfaces that must be
44408provided by compliant compilers.  Programmers should preferentially use
44409the interfaces described therein.  However, historically GCC has
44410provided additional interfaces for access to vector instructions.  These
44411are briefly described below.
44412
44413 The following interfaces are supported for the generic and specific
44414AltiVec operations and the AltiVec predicates.  In cases where there is
44415a direct mapping between generic and specific operations, only the
44416generic names are shown here, although the specific operations can also
44417be used.
44418
44419 Arguments that are documented as 'const int' require literal integral
44420values within the range required for that operation.
44421
44422     vector signed char vec_abs (vector signed char);
44423     vector signed short vec_abs (vector signed short);
44424     vector signed int vec_abs (vector signed int);
44425     vector float vec_abs (vector float);
44426
44427     vector signed char vec_abss (vector signed char);
44428     vector signed short vec_abss (vector signed short);
44429     vector signed int vec_abss (vector signed int);
44430
44431     vector signed char vec_add (vector bool char, vector signed char);
44432     vector signed char vec_add (vector signed char, vector bool char);
44433     vector signed char vec_add (vector signed char, vector signed char);
44434     vector unsigned char vec_add (vector bool char, vector unsigned char);
44435     vector unsigned char vec_add (vector unsigned char, vector bool char);
44436     vector unsigned char vec_add (vector unsigned char,
44437                                   vector unsigned char);
44438     vector signed short vec_add (vector bool short, vector signed short);
44439     vector signed short vec_add (vector signed short, vector bool short);
44440     vector signed short vec_add (vector signed short, vector signed short);
44441     vector unsigned short vec_add (vector bool short,
44442                                    vector unsigned short);
44443     vector unsigned short vec_add (vector unsigned short,
44444                                    vector bool short);
44445     vector unsigned short vec_add (vector unsigned short,
44446                                    vector unsigned short);
44447     vector signed int vec_add (vector bool int, vector signed int);
44448     vector signed int vec_add (vector signed int, vector bool int);
44449     vector signed int vec_add (vector signed int, vector signed int);
44450     vector unsigned int vec_add (vector bool int, vector unsigned int);
44451     vector unsigned int vec_add (vector unsigned int, vector bool int);
44452     vector unsigned int vec_add (vector unsigned int, vector unsigned int);
44453     vector float vec_add (vector float, vector float);
44454
44455     vector float vec_vaddfp (vector float, vector float);
44456
44457     vector signed int vec_vadduwm (vector bool int, vector signed int);
44458     vector signed int vec_vadduwm (vector signed int, vector bool int);
44459     vector signed int vec_vadduwm (vector signed int, vector signed int);
44460     vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
44461     vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
44462     vector unsigned int vec_vadduwm (vector unsigned int,
44463                                      vector unsigned int);
44464
44465     vector signed short vec_vadduhm (vector bool short,
44466                                      vector signed short);
44467     vector signed short vec_vadduhm (vector signed short,
44468                                      vector bool short);
44469     vector signed short vec_vadduhm (vector signed short,
44470                                      vector signed short);
44471     vector unsigned short vec_vadduhm (vector bool short,
44472                                        vector unsigned short);
44473     vector unsigned short vec_vadduhm (vector unsigned short,
44474                                        vector bool short);
44475     vector unsigned short vec_vadduhm (vector unsigned short,
44476                                        vector unsigned short);
44477
44478     vector signed char vec_vaddubm (vector bool char, vector signed char);
44479     vector signed char vec_vaddubm (vector signed char, vector bool char);
44480     vector signed char vec_vaddubm (vector signed char, vector signed char);
44481     vector unsigned char vec_vaddubm (vector bool char,
44482                                       vector unsigned char);
44483     vector unsigned char vec_vaddubm (vector unsigned char,
44484                                       vector bool char);
44485     vector unsigned char vec_vaddubm (vector unsigned char,
44486                                       vector unsigned char);
44487
44488     vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
44489
44490     vector unsigned char vec_adds (vector bool char, vector unsigned char);
44491     vector unsigned char vec_adds (vector unsigned char, vector bool char);
44492     vector unsigned char vec_adds (vector unsigned char,
44493                                    vector unsigned char);
44494     vector signed char vec_adds (vector bool char, vector signed char);
44495     vector signed char vec_adds (vector signed char, vector bool char);
44496     vector signed char vec_adds (vector signed char, vector signed char);
44497     vector unsigned short vec_adds (vector bool short,
44498                                     vector unsigned short);
44499     vector unsigned short vec_adds (vector unsigned short,
44500                                     vector bool short);
44501     vector unsigned short vec_adds (vector unsigned short,
44502                                     vector unsigned short);
44503     vector signed short vec_adds (vector bool short, vector signed short);
44504     vector signed short vec_adds (vector signed short, vector bool short);
44505     vector signed short vec_adds (vector signed short, vector signed short);
44506     vector unsigned int vec_adds (vector bool int, vector unsigned int);
44507     vector unsigned int vec_adds (vector unsigned int, vector bool int);
44508     vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
44509     vector signed int vec_adds (vector bool int, vector signed int);
44510     vector signed int vec_adds (vector signed int, vector bool int);
44511     vector signed int vec_adds (vector signed int, vector signed int);
44512
44513     vector signed int vec_vaddsws (vector bool int, vector signed int);
44514     vector signed int vec_vaddsws (vector signed int, vector bool int);
44515     vector signed int vec_vaddsws (vector signed int, vector signed int);
44516
44517     vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
44518     vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
44519     vector unsigned int vec_vadduws (vector unsigned int,
44520                                      vector unsigned int);
44521
44522     vector signed short vec_vaddshs (vector bool short,
44523                                      vector signed short);
44524     vector signed short vec_vaddshs (vector signed short,
44525                                      vector bool short);
44526     vector signed short vec_vaddshs (vector signed short,
44527                                      vector signed short);
44528
44529     vector unsigned short vec_vadduhs (vector bool short,
44530                                        vector unsigned short);
44531     vector unsigned short vec_vadduhs (vector unsigned short,
44532                                        vector bool short);
44533     vector unsigned short vec_vadduhs (vector unsigned short,
44534                                        vector unsigned short);
44535
44536     vector signed char vec_vaddsbs (vector bool char, vector signed char);
44537     vector signed char vec_vaddsbs (vector signed char, vector bool char);
44538     vector signed char vec_vaddsbs (vector signed char, vector signed char);
44539
44540     vector unsigned char vec_vaddubs (vector bool char,
44541                                       vector unsigned char);
44542     vector unsigned char vec_vaddubs (vector unsigned char,
44543                                       vector bool char);
44544     vector unsigned char vec_vaddubs (vector unsigned char,
44545                                       vector unsigned char);
44546
44547     vector float vec_and (vector float, vector float);
44548     vector float vec_and (vector float, vector bool int);
44549     vector float vec_and (vector bool int, vector float);
44550     vector bool long long vec_and (vector bool long long int,
44551                                    vector bool long long);
44552     vector bool int vec_and (vector bool int, vector bool int);
44553     vector signed int vec_and (vector bool int, vector signed int);
44554     vector signed int vec_and (vector signed int, vector bool int);
44555     vector signed int vec_and (vector signed int, vector signed int);
44556     vector unsigned int vec_and (vector bool int, vector unsigned int);
44557     vector unsigned int vec_and (vector unsigned int, vector bool int);
44558     vector unsigned int vec_and (vector unsigned int, vector unsigned int);
44559     vector bool short vec_and (vector bool short, vector bool short);
44560     vector signed short vec_and (vector bool short, vector signed short);
44561     vector signed short vec_and (vector signed short, vector bool short);
44562     vector signed short vec_and (vector signed short, vector signed short);
44563     vector unsigned short vec_and (vector bool short,
44564                                    vector unsigned short);
44565     vector unsigned short vec_and (vector unsigned short,
44566                                    vector bool short);
44567     vector unsigned short vec_and (vector unsigned short,
44568                                    vector unsigned short);
44569     vector signed char vec_and (vector bool char, vector signed char);
44570     vector bool char vec_and (vector bool char, vector bool char);
44571     vector signed char vec_and (vector signed char, vector bool char);
44572     vector signed char vec_and (vector signed char, vector signed char);
44573     vector unsigned char vec_and (vector bool char, vector unsigned char);
44574     vector unsigned char vec_and (vector unsigned char, vector bool char);
44575     vector unsigned char vec_and (vector unsigned char,
44576                                   vector unsigned char);
44577
44578     vector float vec_andc (vector float, vector float);
44579     vector float vec_andc (vector float, vector bool int);
44580     vector float vec_andc (vector bool int, vector float);
44581     vector bool int vec_andc (vector bool int, vector bool int);
44582     vector signed int vec_andc (vector bool int, vector signed int);
44583     vector signed int vec_andc (vector signed int, vector bool int);
44584     vector signed int vec_andc (vector signed int, vector signed int);
44585     vector unsigned int vec_andc (vector bool int, vector unsigned int);
44586     vector unsigned int vec_andc (vector unsigned int, vector bool int);
44587     vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
44588     vector bool short vec_andc (vector bool short, vector bool short);
44589     vector signed short vec_andc (vector bool short, vector signed short);
44590     vector signed short vec_andc (vector signed short, vector bool short);
44591     vector signed short vec_andc (vector signed short, vector signed short);
44592     vector unsigned short vec_andc (vector bool short,
44593                                     vector unsigned short);
44594     vector unsigned short vec_andc (vector unsigned short,
44595                                     vector bool short);
44596     vector unsigned short vec_andc (vector unsigned short,
44597                                     vector unsigned short);
44598     vector signed char vec_andc (vector bool char, vector signed char);
44599     vector bool char vec_andc (vector bool char, vector bool char);
44600     vector signed char vec_andc (vector signed char, vector bool char);
44601     vector signed char vec_andc (vector signed char, vector signed char);
44602     vector unsigned char vec_andc (vector bool char, vector unsigned char);
44603     vector unsigned char vec_andc (vector unsigned char, vector bool char);
44604     vector unsigned char vec_andc (vector unsigned char,
44605                                    vector unsigned char);
44606
44607     vector unsigned char vec_avg (vector unsigned char,
44608                                   vector unsigned char);
44609     vector signed char vec_avg (vector signed char, vector signed char);
44610     vector unsigned short vec_avg (vector unsigned short,
44611                                    vector unsigned short);
44612     vector signed short vec_avg (vector signed short, vector signed short);
44613     vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
44614     vector signed int vec_avg (vector signed int, vector signed int);
44615
44616     vector signed int vec_vavgsw (vector signed int, vector signed int);
44617
44618     vector unsigned int vec_vavguw (vector unsigned int,
44619                                     vector unsigned int);
44620
44621     vector signed short vec_vavgsh (vector signed short,
44622                                     vector signed short);
44623
44624     vector unsigned short vec_vavguh (vector unsigned short,
44625                                       vector unsigned short);
44626
44627     vector signed char vec_vavgsb (vector signed char, vector signed char);
44628
44629     vector unsigned char vec_vavgub (vector unsigned char,
44630                                      vector unsigned char);
44631
44632     vector float vec_copysign (vector float);
44633
44634     vector float vec_ceil (vector float);
44635
44636     vector signed int vec_cmpb (vector float, vector float);
44637
44638     vector bool char vec_cmpeq (vector bool char, vector bool char);
44639     vector bool short vec_cmpeq (vector bool short, vector bool short);
44640     vector bool int vec_cmpeq (vector bool int, vector bool int);
44641     vector bool char vec_cmpeq (vector signed char, vector signed char);
44642     vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
44643     vector bool short vec_cmpeq (vector signed short, vector signed short);
44644     vector bool short vec_cmpeq (vector unsigned short,
44645                                  vector unsigned short);
44646     vector bool int vec_cmpeq (vector signed int, vector signed int);
44647     vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
44648     vector bool int vec_cmpeq (vector float, vector float);
44649
44650     vector bool int vec_vcmpeqfp (vector float, vector float);
44651
44652     vector bool int vec_vcmpequw (vector signed int, vector signed int);
44653     vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
44654
44655     vector bool short vec_vcmpequh (vector signed short,
44656                                     vector signed short);
44657     vector bool short vec_vcmpequh (vector unsigned short,
44658                                     vector unsigned short);
44659
44660     vector bool char vec_vcmpequb (vector signed char, vector signed char);
44661     vector bool char vec_vcmpequb (vector unsigned char,
44662                                    vector unsigned char);
44663
44664     vector bool int vec_cmpge (vector float, vector float);
44665
44666     vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
44667     vector bool char vec_cmpgt (vector signed char, vector signed char);
44668     vector bool short vec_cmpgt (vector unsigned short,
44669                                  vector unsigned short);
44670     vector bool short vec_cmpgt (vector signed short, vector signed short);
44671     vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
44672     vector bool int vec_cmpgt (vector signed int, vector signed int);
44673     vector bool int vec_cmpgt (vector float, vector float);
44674
44675     vector bool int vec_vcmpgtfp (vector float, vector float);
44676
44677     vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
44678
44679     vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
44680
44681     vector bool short vec_vcmpgtsh (vector signed short,
44682                                     vector signed short);
44683
44684     vector bool short vec_vcmpgtuh (vector unsigned short,
44685                                     vector unsigned short);
44686
44687     vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
44688
44689     vector bool char vec_vcmpgtub (vector unsigned char,
44690                                    vector unsigned char);
44691
44692     vector bool int vec_cmple (vector float, vector float);
44693
44694     vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
44695     vector bool char vec_cmplt (vector signed char, vector signed char);
44696     vector bool short vec_cmplt (vector unsigned short,
44697                                  vector unsigned short);
44698     vector bool short vec_cmplt (vector signed short, vector signed short);
44699     vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
44700     vector bool int vec_cmplt (vector signed int, vector signed int);
44701     vector bool int vec_cmplt (vector float, vector float);
44702
44703     vector float vec_cpsgn (vector float, vector float);
44704
44705     vector float vec_ctf (vector unsigned int, const int);
44706     vector float vec_ctf (vector signed int, const int);
44707     vector double vec_ctf (vector unsigned long, const int);
44708     vector double vec_ctf (vector signed long, const int);
44709
44710     vector float vec_vcfsx (vector signed int, const int);
44711
44712     vector float vec_vcfux (vector unsigned int, const int);
44713
44714     vector signed int vec_cts (vector float, const int);
44715     vector signed long vec_cts (vector double, const int);
44716
44717     vector unsigned int vec_ctu (vector float, const int);
44718     vector unsigned long vec_ctu (vector double, const int);
44719
44720     vector double vec_doublee (vector float);
44721     vector double vec_doublee (vector signed int);
44722     vector double vec_doublee (vector unsigned int);
44723
44724     vector double vec_doubleo (vector float);
44725     vector double vec_doubleo (vector signed int);
44726     vector double vec_doubleo (vector unsigned int);
44727
44728     vector double vec_doubleh (vector float);
44729     vector double vec_doubleh (vector signed int);
44730     vector double vec_doubleh (vector unsigned int);
44731
44732     vector double vec_doublel (vector float);
44733     vector double vec_doublel (vector signed int);
44734     vector double vec_doublel (vector unsigned int);
44735
44736     void vec_dss (const int);
44737
44738     void vec_dssall (void);
44739
44740     void vec_dst (const vector unsigned char *, int, const int);
44741     void vec_dst (const vector signed char *, int, const int);
44742     void vec_dst (const vector bool char *, int, const int);
44743     void vec_dst (const vector unsigned short *, int, const int);
44744     void vec_dst (const vector signed short *, int, const int);
44745     void vec_dst (const vector bool short *, int, const int);
44746     void vec_dst (const vector pixel *, int, const int);
44747     void vec_dst (const vector unsigned int *, int, const int);
44748     void vec_dst (const vector signed int *, int, const int);
44749     void vec_dst (const vector bool int *, int, const int);
44750     void vec_dst (const vector float *, int, const int);
44751     void vec_dst (const unsigned char *, int, const int);
44752     void vec_dst (const signed char *, int, const int);
44753     void vec_dst (const unsigned short *, int, const int);
44754     void vec_dst (const short *, int, const int);
44755     void vec_dst (const unsigned int *, int, const int);
44756     void vec_dst (const int *, int, const int);
44757     void vec_dst (const unsigned long *, int, const int);
44758     void vec_dst (const long *, int, const int);
44759     void vec_dst (const float *, int, const int);
44760
44761     void vec_dstst (const vector unsigned char *, int, const int);
44762     void vec_dstst (const vector signed char *, int, const int);
44763     void vec_dstst (const vector bool char *, int, const int);
44764     void vec_dstst (const vector unsigned short *, int, const int);
44765     void vec_dstst (const vector signed short *, int, const int);
44766     void vec_dstst (const vector bool short *, int, const int);
44767     void vec_dstst (const vector pixel *, int, const int);
44768     void vec_dstst (const vector unsigned int *, int, const int);
44769     void vec_dstst (const vector signed int *, int, const int);
44770     void vec_dstst (const vector bool int *, int, const int);
44771     void vec_dstst (const vector float *, int, const int);
44772     void vec_dstst (const unsigned char *, int, const int);
44773     void vec_dstst (const signed char *, int, const int);
44774     void vec_dstst (const unsigned short *, int, const int);
44775     void vec_dstst (const short *, int, const int);
44776     void vec_dstst (const unsigned int *, int, const int);
44777     void vec_dstst (const int *, int, const int);
44778     void vec_dstst (const unsigned long *, int, const int);
44779     void vec_dstst (const long *, int, const int);
44780     void vec_dstst (const float *, int, const int);
44781
44782     void vec_dststt (const vector unsigned char *, int, const int);
44783     void vec_dststt (const vector signed char *, int, const int);
44784     void vec_dststt (const vector bool char *, int, const int);
44785     void vec_dststt (const vector unsigned short *, int, const int);
44786     void vec_dststt (const vector signed short *, int, const int);
44787     void vec_dststt (const vector bool short *, int, const int);
44788     void vec_dststt (const vector pixel *, int, const int);
44789     void vec_dststt (const vector unsigned int *, int, const int);
44790     void vec_dststt (const vector signed int *, int, const int);
44791     void vec_dststt (const vector bool int *, int, const int);
44792     void vec_dststt (const vector float *, int, const int);
44793     void vec_dststt (const unsigned char *, int, const int);
44794     void vec_dststt (const signed char *, int, const int);
44795     void vec_dststt (const unsigned short *, int, const int);
44796     void vec_dststt (const short *, int, const int);
44797     void vec_dststt (const unsigned int *, int, const int);
44798     void vec_dststt (const int *, int, const int);
44799     void vec_dststt (const unsigned long *, int, const int);
44800     void vec_dststt (const long *, int, const int);
44801     void vec_dststt (const float *, int, const int);
44802
44803     void vec_dstt (const vector unsigned char *, int, const int);
44804     void vec_dstt (const vector signed char *, int, const int);
44805     void vec_dstt (const vector bool char *, int, const int);
44806     void vec_dstt (const vector unsigned short *, int, const int);
44807     void vec_dstt (const vector signed short *, int, const int);
44808     void vec_dstt (const vector bool short *, int, const int);
44809     void vec_dstt (const vector pixel *, int, const int);
44810     void vec_dstt (const vector unsigned int *, int, const int);
44811     void vec_dstt (const vector signed int *, int, const int);
44812     void vec_dstt (const vector bool int *, int, const int);
44813     void vec_dstt (const vector float *, int, const int);
44814     void vec_dstt (const unsigned char *, int, const int);
44815     void vec_dstt (const signed char *, int, const int);
44816     void vec_dstt (const unsigned short *, int, const int);
44817     void vec_dstt (const short *, int, const int);
44818     void vec_dstt (const unsigned int *, int, const int);
44819     void vec_dstt (const int *, int, const int);
44820     void vec_dstt (const unsigned long *, int, const int);
44821     void vec_dstt (const long *, int, const int);
44822     void vec_dstt (const float *, int, const int);
44823
44824     vector float vec_expte (vector float);
44825
44826     vector float vec_floor (vector float);
44827
44828     vector float vec_float (vector signed int);
44829     vector float vec_float (vector unsigned int);
44830
44831     vector float vec_float2 (vector signed long long, vector signed long long);
44832     vector float vec_float2 (vector unsigned long long, vector signed long long);
44833
44834     vector float vec_floate (vector double);
44835     vector float vec_floate (vector signed long long);
44836     vector float vec_floate (vector unsigned long long);
44837
44838     vector float vec_floato (vector double);
44839     vector float vec_floato (vector signed long long);
44840     vector float vec_floato (vector unsigned long long);
44841
44842     vector float vec_ld (int, const vector float *);
44843     vector float vec_ld (int, const float *);
44844     vector bool int vec_ld (int, const vector bool int *);
44845     vector signed int vec_ld (int, const vector signed int *);
44846     vector signed int vec_ld (int, const int *);
44847     vector signed int vec_ld (int, const long *);
44848     vector unsigned int vec_ld (int, const vector unsigned int *);
44849     vector unsigned int vec_ld (int, const unsigned int *);
44850     vector unsigned int vec_ld (int, const unsigned long *);
44851     vector bool short vec_ld (int, const vector bool short *);
44852     vector pixel vec_ld (int, const vector pixel *);
44853     vector signed short vec_ld (int, const vector signed short *);
44854     vector signed short vec_ld (int, const short *);
44855     vector unsigned short vec_ld (int, const vector unsigned short *);
44856     vector unsigned short vec_ld (int, const unsigned short *);
44857     vector bool char vec_ld (int, const vector bool char *);
44858     vector signed char vec_ld (int, const vector signed char *);
44859     vector signed char vec_ld (int, const signed char *);
44860     vector unsigned char vec_ld (int, const vector unsigned char *);
44861     vector unsigned char vec_ld (int, const unsigned char *);
44862
44863     vector signed char vec_lde (int, const signed char *);
44864     vector unsigned char vec_lde (int, const unsigned char *);
44865     vector signed short vec_lde (int, const short *);
44866     vector unsigned short vec_lde (int, const unsigned short *);
44867     vector float vec_lde (int, const float *);
44868     vector signed int vec_lde (int, const int *);
44869     vector unsigned int vec_lde (int, const unsigned int *);
44870     vector signed int vec_lde (int, const long *);
44871     vector unsigned int vec_lde (int, const unsigned long *);
44872
44873     vector float vec_lvewx (int, float *);
44874     vector signed int vec_lvewx (int, int *);
44875     vector unsigned int vec_lvewx (int, unsigned int *);
44876     vector signed int vec_lvewx (int, long *);
44877     vector unsigned int vec_lvewx (int, unsigned long *);
44878
44879     vector signed short vec_lvehx (int, short *);
44880     vector unsigned short vec_lvehx (int, unsigned short *);
44881
44882     vector signed char vec_lvebx (int, char *);
44883     vector unsigned char vec_lvebx (int, unsigned char *);
44884
44885     vector float vec_ldl (int, const vector float *);
44886     vector float vec_ldl (int, const float *);
44887     vector bool int vec_ldl (int, const vector bool int *);
44888     vector signed int vec_ldl (int, const vector signed int *);
44889     vector signed int vec_ldl (int, const int *);
44890     vector signed int vec_ldl (int, const long *);
44891     vector unsigned int vec_ldl (int, const vector unsigned int *);
44892     vector unsigned int vec_ldl (int, const unsigned int *);
44893     vector unsigned int vec_ldl (int, const unsigned long *);
44894     vector bool short vec_ldl (int, const vector bool short *);
44895     vector pixel vec_ldl (int, const vector pixel *);
44896     vector signed short vec_ldl (int, const vector signed short *);
44897     vector signed short vec_ldl (int, const short *);
44898     vector unsigned short vec_ldl (int, const vector unsigned short *);
44899     vector unsigned short vec_ldl (int, const unsigned short *);
44900     vector bool char vec_ldl (int, const vector bool char *);
44901     vector signed char vec_ldl (int, const vector signed char *);
44902     vector signed char vec_ldl (int, const signed char *);
44903     vector unsigned char vec_ldl (int, const vector unsigned char *);
44904     vector unsigned char vec_ldl (int, const unsigned char *);
44905
44906     vector float vec_loge (vector float);
44907
44908     vector unsigned char vec_lvsl (int, const volatile unsigned char *);
44909     vector unsigned char vec_lvsl (int, const volatile signed char *);
44910     vector unsigned char vec_lvsl (int, const volatile unsigned short *);
44911     vector unsigned char vec_lvsl (int, const volatile short *);
44912     vector unsigned char vec_lvsl (int, const volatile unsigned int *);
44913     vector unsigned char vec_lvsl (int, const volatile int *);
44914     vector unsigned char vec_lvsl (int, const volatile unsigned long *);
44915     vector unsigned char vec_lvsl (int, const volatile long *);
44916     vector unsigned char vec_lvsl (int, const volatile float *);
44917
44918     vector unsigned char vec_lvsr (int, const volatile unsigned char *);
44919     vector unsigned char vec_lvsr (int, const volatile signed char *);
44920     vector unsigned char vec_lvsr (int, const volatile unsigned short *);
44921     vector unsigned char vec_lvsr (int, const volatile short *);
44922     vector unsigned char vec_lvsr (int, const volatile unsigned int *);
44923     vector unsigned char vec_lvsr (int, const volatile int *);
44924     vector unsigned char vec_lvsr (int, const volatile unsigned long *);
44925     vector unsigned char vec_lvsr (int, const volatile long *);
44926     vector unsigned char vec_lvsr (int, const volatile float *);
44927
44928     vector float vec_madd (vector float, vector float, vector float);
44929
44930     vector signed short vec_madds (vector signed short,
44931                                    vector signed short,
44932                                    vector signed short);
44933
44934     vector unsigned char vec_max (vector bool char, vector unsigned char);
44935     vector unsigned char vec_max (vector unsigned char, vector bool char);
44936     vector unsigned char vec_max (vector unsigned char,
44937                                   vector unsigned char);
44938     vector signed char vec_max (vector bool char, vector signed char);
44939     vector signed char vec_max (vector signed char, vector bool char);
44940     vector signed char vec_max (vector signed char, vector signed char);
44941     vector unsigned short vec_max (vector bool short,
44942                                    vector unsigned short);
44943     vector unsigned short vec_max (vector unsigned short,
44944                                    vector bool short);
44945     vector unsigned short vec_max (vector unsigned short,
44946                                    vector unsigned short);
44947     vector signed short vec_max (vector bool short, vector signed short);
44948     vector signed short vec_max (vector signed short, vector bool short);
44949     vector signed short vec_max (vector signed short, vector signed short);
44950     vector unsigned int vec_max (vector bool int, vector unsigned int);
44951     vector unsigned int vec_max (vector unsigned int, vector bool int);
44952     vector unsigned int vec_max (vector unsigned int, vector unsigned int);
44953     vector signed int vec_max (vector bool int, vector signed int);
44954     vector signed int vec_max (vector signed int, vector bool int);
44955     vector signed int vec_max (vector signed int, vector signed int);
44956     vector float vec_max (vector float, vector float);
44957
44958     vector float vec_vmaxfp (vector float, vector float);
44959
44960     vector signed int vec_vmaxsw (vector bool int, vector signed int);
44961     vector signed int vec_vmaxsw (vector signed int, vector bool int);
44962     vector signed int vec_vmaxsw (vector signed int, vector signed int);
44963
44964     vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
44965     vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
44966     vector unsigned int vec_vmaxuw (vector unsigned int,
44967                                     vector unsigned int);
44968
44969     vector signed short vec_vmaxsh (vector bool short, vector signed short);
44970     vector signed short vec_vmaxsh (vector signed short, vector bool short);
44971     vector signed short vec_vmaxsh (vector signed short,
44972                                     vector signed short);
44973
44974     vector unsigned short vec_vmaxuh (vector bool short,
44975                                       vector unsigned short);
44976     vector unsigned short vec_vmaxuh (vector unsigned short,
44977                                       vector bool short);
44978     vector unsigned short vec_vmaxuh (vector unsigned short,
44979                                       vector unsigned short);
44980
44981     vector signed char vec_vmaxsb (vector bool char, vector signed char);
44982     vector signed char vec_vmaxsb (vector signed char, vector bool char);
44983     vector signed char vec_vmaxsb (vector signed char, vector signed char);
44984
44985     vector unsigned char vec_vmaxub (vector bool char,
44986                                      vector unsigned char);
44987     vector unsigned char vec_vmaxub (vector unsigned char,
44988                                      vector bool char);
44989     vector unsigned char vec_vmaxub (vector unsigned char,
44990                                      vector unsigned char);
44991
44992     vector bool char vec_mergeh (vector bool char, vector bool char);
44993     vector signed char vec_mergeh (vector signed char, vector signed char);
44994     vector unsigned char vec_mergeh (vector unsigned char,
44995                                      vector unsigned char);
44996     vector bool short vec_mergeh (vector bool short, vector bool short);
44997     vector pixel vec_mergeh (vector pixel, vector pixel);
44998     vector signed short vec_mergeh (vector signed short,
44999                                     vector signed short);
45000     vector unsigned short vec_mergeh (vector unsigned short,
45001                                       vector unsigned short);
45002     vector float vec_mergeh (vector float, vector float);
45003     vector bool int vec_mergeh (vector bool int, vector bool int);
45004     vector signed int vec_mergeh (vector signed int, vector signed int);
45005     vector unsigned int vec_mergeh (vector unsigned int,
45006                                     vector unsigned int);
45007
45008     vector float vec_vmrghw (vector float, vector float);
45009     vector bool int vec_vmrghw (vector bool int, vector bool int);
45010     vector signed int vec_vmrghw (vector signed int, vector signed int);
45011     vector unsigned int vec_vmrghw (vector unsigned int,
45012                                     vector unsigned int);
45013
45014     vector bool short vec_vmrghh (vector bool short, vector bool short);
45015     vector signed short vec_vmrghh (vector signed short,
45016                                     vector signed short);
45017     vector unsigned short vec_vmrghh (vector unsigned short,
45018                                       vector unsigned short);
45019     vector pixel vec_vmrghh (vector pixel, vector pixel);
45020
45021     vector bool char vec_vmrghb (vector bool char, vector bool char);
45022     vector signed char vec_vmrghb (vector signed char, vector signed char);
45023     vector unsigned char vec_vmrghb (vector unsigned char,
45024                                      vector unsigned char);
45025
45026     vector bool char vec_mergel (vector bool char, vector bool char);
45027     vector signed char vec_mergel (vector signed char, vector signed char);
45028     vector unsigned char vec_mergel (vector unsigned char,
45029                                      vector unsigned char);
45030     vector bool short vec_mergel (vector bool short, vector bool short);
45031     vector pixel vec_mergel (vector pixel, vector pixel);
45032     vector signed short vec_mergel (vector signed short,
45033                                     vector signed short);
45034     vector unsigned short vec_mergel (vector unsigned short,
45035                                       vector unsigned short);
45036     vector float vec_mergel (vector float, vector float);
45037     vector bool int vec_mergel (vector bool int, vector bool int);
45038     vector signed int vec_mergel (vector signed int, vector signed int);
45039     vector unsigned int vec_mergel (vector unsigned int,
45040                                     vector unsigned int);
45041
45042     vector float vec_vmrglw (vector float, vector float);
45043     vector signed int vec_vmrglw (vector signed int, vector signed int);
45044     vector unsigned int vec_vmrglw (vector unsigned int,
45045                                     vector unsigned int);
45046     vector bool int vec_vmrglw (vector bool int, vector bool int);
45047
45048     vector bool short vec_vmrglh (vector bool short, vector bool short);
45049     vector signed short vec_vmrglh (vector signed short,
45050                                     vector signed short);
45051     vector unsigned short vec_vmrglh (vector unsigned short,
45052                                       vector unsigned short);
45053     vector pixel vec_vmrglh (vector pixel, vector pixel);
45054
45055     vector bool char vec_vmrglb (vector bool char, vector bool char);
45056     vector signed char vec_vmrglb (vector signed char, vector signed char);
45057     vector unsigned char vec_vmrglb (vector unsigned char,
45058                                      vector unsigned char);
45059
45060     vector unsigned short vec_mfvscr (void);
45061
45062     vector unsigned char vec_min (vector bool char, vector unsigned char);
45063     vector unsigned char vec_min (vector unsigned char, vector bool char);
45064     vector unsigned char vec_min (vector unsigned char,
45065                                   vector unsigned char);
45066     vector signed char vec_min (vector bool char, vector signed char);
45067     vector signed char vec_min (vector signed char, vector bool char);
45068     vector signed char vec_min (vector signed char, vector signed char);
45069     vector unsigned short vec_min (vector bool short,
45070                                    vector unsigned short);
45071     vector unsigned short vec_min (vector unsigned short,
45072                                    vector bool short);
45073     vector unsigned short vec_min (vector unsigned short,
45074                                    vector unsigned short);
45075     vector signed short vec_min (vector bool short, vector signed short);
45076     vector signed short vec_min (vector signed short, vector bool short);
45077     vector signed short vec_min (vector signed short, vector signed short);
45078     vector unsigned int vec_min (vector bool int, vector unsigned int);
45079     vector unsigned int vec_min (vector unsigned int, vector bool int);
45080     vector unsigned int vec_min (vector unsigned int, vector unsigned int);
45081     vector signed int vec_min (vector bool int, vector signed int);
45082     vector signed int vec_min (vector signed int, vector bool int);
45083     vector signed int vec_min (vector signed int, vector signed int);
45084     vector float vec_min (vector float, vector float);
45085
45086     vector float vec_vminfp (vector float, vector float);
45087
45088     vector signed int vec_vminsw (vector bool int, vector signed int);
45089     vector signed int vec_vminsw (vector signed int, vector bool int);
45090     vector signed int vec_vminsw (vector signed int, vector signed int);
45091
45092     vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
45093     vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
45094     vector unsigned int vec_vminuw (vector unsigned int,
45095                                     vector unsigned int);
45096
45097     vector signed short vec_vminsh (vector bool short, vector signed short);
45098     vector signed short vec_vminsh (vector signed short, vector bool short);
45099     vector signed short vec_vminsh (vector signed short,
45100                                     vector signed short);
45101
45102     vector unsigned short vec_vminuh (vector bool short,
45103                                       vector unsigned short);
45104     vector unsigned short vec_vminuh (vector unsigned short,
45105                                       vector bool short);
45106     vector unsigned short vec_vminuh (vector unsigned short,
45107                                       vector unsigned short);
45108
45109     vector signed char vec_vminsb (vector bool char, vector signed char);
45110     vector signed char vec_vminsb (vector signed char, vector bool char);
45111     vector signed char vec_vminsb (vector signed char, vector signed char);
45112
45113     vector unsigned char vec_vminub (vector bool char,
45114                                      vector unsigned char);
45115     vector unsigned char vec_vminub (vector unsigned char,
45116                                      vector bool char);
45117     vector unsigned char vec_vminub (vector unsigned char,
45118                                      vector unsigned char);
45119
45120     vector signed short vec_mladd (vector signed short,
45121                                    vector signed short,
45122                                    vector signed short);
45123     vector signed short vec_mladd (vector signed short,
45124                                    vector unsigned short,
45125                                    vector unsigned short);
45126     vector signed short vec_mladd (vector unsigned short,
45127                                    vector signed short,
45128                                    vector signed short);
45129     vector unsigned short vec_mladd (vector unsigned short,
45130                                      vector unsigned short,
45131                                      vector unsigned short);
45132
45133     vector signed short vec_mradds (vector signed short,
45134                                     vector signed short,
45135                                     vector signed short);
45136
45137     vector unsigned int vec_msum (vector unsigned char,
45138                                   vector unsigned char,
45139                                   vector unsigned int);
45140     vector signed int vec_msum (vector signed char,
45141                                 vector unsigned char,
45142                                 vector signed int);
45143     vector unsigned int vec_msum (vector unsigned short,
45144                                   vector unsigned short,
45145                                   vector unsigned int);
45146     vector signed int vec_msum (vector signed short,
45147                                 vector signed short,
45148                                 vector signed int);
45149
45150     vector signed int vec_vmsumshm (vector signed short,
45151                                     vector signed short,
45152                                     vector signed int);
45153
45154     vector unsigned int vec_vmsumuhm (vector unsigned short,
45155                                       vector unsigned short,
45156                                       vector unsigned int);
45157
45158     vector signed int vec_vmsummbm (vector signed char,
45159                                     vector unsigned char,
45160                                     vector signed int);
45161
45162     vector unsigned int vec_vmsumubm (vector unsigned char,
45163                                       vector unsigned char,
45164                                       vector unsigned int);
45165
45166     vector unsigned int vec_msums (vector unsigned short,
45167                                    vector unsigned short,
45168                                    vector unsigned int);
45169     vector signed int vec_msums (vector signed short,
45170                                  vector signed short,
45171                                  vector signed int);
45172
45173     vector signed int vec_vmsumshs (vector signed short,
45174                                     vector signed short,
45175                                     vector signed int);
45176
45177     vector unsigned int vec_vmsumuhs (vector unsigned short,
45178                                       vector unsigned short,
45179                                       vector unsigned int);
45180
45181     void vec_mtvscr (vector signed int);
45182     void vec_mtvscr (vector unsigned int);
45183     void vec_mtvscr (vector bool int);
45184     void vec_mtvscr (vector signed short);
45185     void vec_mtvscr (vector unsigned short);
45186     void vec_mtvscr (vector bool short);
45187     void vec_mtvscr (vector pixel);
45188     void vec_mtvscr (vector signed char);
45189     void vec_mtvscr (vector unsigned char);
45190     void vec_mtvscr (vector bool char);
45191
45192     vector unsigned short vec_mule (vector unsigned char,
45193                                     vector unsigned char);
45194     vector signed short vec_mule (vector signed char,
45195                                   vector signed char);
45196     vector unsigned int vec_mule (vector unsigned short,
45197                                   vector unsigned short);
45198     vector signed int vec_mule (vector signed short, vector signed short);
45199     vector unsigned long long vec_mule (vector unsigned int,
45200                                         vector unsigned int);
45201     vector signed long long vec_mule (vector signed int,
45202                                       vector signed int);
45203
45204     vector signed int vec_vmulesh (vector signed short,
45205                                    vector signed short);
45206
45207     vector unsigned int vec_vmuleuh (vector unsigned short,
45208                                      vector unsigned short);
45209
45210     vector signed short vec_vmulesb (vector signed char,
45211                                      vector signed char);
45212
45213     vector unsigned short vec_vmuleub (vector unsigned char,
45214                                       vector unsigned char);
45215
45216     vector unsigned short vec_mulo (vector unsigned char,
45217                                     vector unsigned char);
45218     vector signed short vec_mulo (vector signed char, vector signed char);
45219     vector unsigned int vec_mulo (vector unsigned short,
45220                                   vector unsigned short);
45221     vector signed int vec_mulo (vector signed short, vector signed short);
45222     vector unsigned long long vec_mulo (vector unsigned int,
45223                                         vector unsigned int);
45224     vector signed long long vec_mulo (vector signed int,
45225                                       vector signed int);
45226
45227     vector signed int vec_vmulosh (vector signed short,
45228                                    vector signed short);
45229
45230     vector unsigned int vec_vmulouh (vector unsigned short,
45231                                      vector unsigned short);
45232
45233     vector signed short vec_vmulosb (vector signed char,
45234                                      vector signed char);
45235
45236     vector unsigned short vec_vmuloub (vector unsigned char,
45237                                        vector unsigned char);
45238
45239     vector float vec_nmsub (vector float, vector float, vector float);
45240
45241     vector signed char vec_nabs (vector signed char);
45242     vector signed short vec_nabs (vector signed short);
45243     vector signed int vec_nabs (vector signed int);
45244     vector float vec_nabs (vector float);
45245     vector double vec_nabs (vector double);
45246
45247     vector signed char vec_neg (vector signed char);
45248     vector signed short vec_neg (vector signed short);
45249     vector signed int vec_neg (vector signed int);
45250     vector signed long long vec_neg (vector signed long long);
45251     vector float  char vec_neg (vector float);
45252     vector double vec_neg (vector double);
45253
45254     vector float vec_nor (vector float, vector float);
45255     vector signed int vec_nor (vector signed int, vector signed int);
45256     vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
45257     vector bool int vec_nor (vector bool int, vector bool int);
45258     vector signed short vec_nor (vector signed short, vector signed short);
45259     vector unsigned short vec_nor (vector unsigned short,
45260                                    vector unsigned short);
45261     vector bool short vec_nor (vector bool short, vector bool short);
45262     vector signed char vec_nor (vector signed char, vector signed char);
45263     vector unsigned char vec_nor (vector unsigned char,
45264                                   vector unsigned char);
45265     vector bool char vec_nor (vector bool char, vector bool char);
45266
45267     vector float vec_or (vector float, vector float);
45268     vector float vec_or (vector float, vector bool int);
45269     vector float vec_or (vector bool int, vector float);
45270     vector bool int vec_or (vector bool int, vector bool int);
45271     vector signed int vec_or (vector bool int, vector signed int);
45272     vector signed int vec_or (vector signed int, vector bool int);
45273     vector signed int vec_or (vector signed int, vector signed int);
45274     vector unsigned int vec_or (vector bool int, vector unsigned int);
45275     vector unsigned int vec_or (vector unsigned int, vector bool int);
45276     vector unsigned int vec_or (vector unsigned int, vector unsigned int);
45277     vector bool short vec_or (vector bool short, vector bool short);
45278     vector signed short vec_or (vector bool short, vector signed short);
45279     vector signed short vec_or (vector signed short, vector bool short);
45280     vector signed short vec_or (vector signed short, vector signed short);
45281     vector unsigned short vec_or (vector bool short, vector unsigned short);
45282     vector unsigned short vec_or (vector unsigned short, vector bool short);
45283     vector unsigned short vec_or (vector unsigned short,
45284                                   vector unsigned short);
45285     vector signed char vec_or (vector bool char, vector signed char);
45286     vector bool char vec_or (vector bool char, vector bool char);
45287     vector signed char vec_or (vector signed char, vector bool char);
45288     vector signed char vec_or (vector signed char, vector signed char);
45289     vector unsigned char vec_or (vector bool char, vector unsigned char);
45290     vector unsigned char vec_or (vector unsigned char, vector bool char);
45291     vector unsigned char vec_or (vector unsigned char,
45292                                  vector unsigned char);
45293
45294     vector signed char vec_pack (vector signed short, vector signed short);
45295     vector unsigned char vec_pack (vector unsigned short,
45296                                    vector unsigned short);
45297     vector bool char vec_pack (vector bool short, vector bool short);
45298     vector signed short vec_pack (vector signed int, vector signed int);
45299     vector unsigned short vec_pack (vector unsigned int,
45300                                     vector unsigned int);
45301     vector bool short vec_pack (vector bool int, vector bool int);
45302
45303     vector bool short vec_vpkuwum (vector bool int, vector bool int);
45304     vector signed short vec_vpkuwum (vector signed int, vector signed int);
45305     vector unsigned short vec_vpkuwum (vector unsigned int,
45306                                        vector unsigned int);
45307
45308     vector bool char vec_vpkuhum (vector bool short, vector bool short);
45309     vector signed char vec_vpkuhum (vector signed short,
45310                                     vector signed short);
45311     vector unsigned char vec_vpkuhum (vector unsigned short,
45312                                       vector unsigned short);
45313
45314     vector pixel vec_packpx (vector unsigned int, vector unsigned int);
45315
45316     vector unsigned char vec_packs (vector unsigned short,
45317                                     vector unsigned short);
45318     vector signed char vec_packs (vector signed short, vector signed short);
45319     vector unsigned short vec_packs (vector unsigned int,
45320                                      vector unsigned int);
45321     vector signed short vec_packs (vector signed int, vector signed int);
45322
45323     vector signed short vec_vpkswss (vector signed int, vector signed int);
45324
45325     vector unsigned short vec_vpkuwus (vector unsigned int,
45326                                        vector unsigned int);
45327
45328     vector signed char vec_vpkshss (vector signed short,
45329                                     vector signed short);
45330
45331     vector unsigned char vec_vpkuhus (vector unsigned short,
45332                                       vector unsigned short);
45333
45334     vector unsigned char vec_packsu (vector unsigned short,
45335                                      vector unsigned short);
45336     vector unsigned char vec_packsu (vector signed short,
45337                                      vector signed short);
45338     vector unsigned short vec_packsu (vector unsigned int,
45339                                       vector unsigned int);
45340     vector unsigned short vec_packsu (vector signed int, vector signed int);
45341
45342     vector unsigned short vec_vpkswus (vector signed int,
45343                                        vector signed int);
45344
45345     vector unsigned char vec_vpkshus (vector signed short,
45346                                       vector signed short);
45347
45348     vector float vec_perm (vector float,
45349                            vector float,
45350                            vector unsigned char);
45351     vector signed int vec_perm (vector signed int,
45352                                 vector signed int,
45353                                 vector unsigned char);
45354     vector unsigned int vec_perm (vector unsigned int,
45355                                   vector unsigned int,
45356                                   vector unsigned char);
45357     vector bool int vec_perm (vector bool int,
45358                               vector bool int,
45359                               vector unsigned char);
45360     vector signed short vec_perm (vector signed short,
45361                                   vector signed short,
45362                                   vector unsigned char);
45363     vector unsigned short vec_perm (vector unsigned short,
45364                                     vector unsigned short,
45365                                     vector unsigned char);
45366     vector bool short vec_perm (vector bool short,
45367                                 vector bool short,
45368                                 vector unsigned char);
45369     vector pixel vec_perm (vector pixel,
45370                            vector pixel,
45371                            vector unsigned char);
45372     vector signed char vec_perm (vector signed char,
45373                                  vector signed char,
45374                                  vector unsigned char);
45375     vector unsigned char vec_perm (vector unsigned char,
45376                                    vector unsigned char,
45377                                    vector unsigned char);
45378     vector bool char vec_perm (vector bool char,
45379                                vector bool char,
45380                                vector unsigned char);
45381
45382     vector float vec_re (vector float);
45383
45384     vector bool char vec_reve (vector bool char);
45385     vector signed char vec_reve (vector signed char);
45386     vector unsigned char vec_reve (vector unsigned char);
45387     vector bool int vec_reve (vector bool int);
45388     vector signed int vec_reve (vector signed int);
45389     vector unsigned int vec_reve (vector unsigned int);
45390     vector bool long long vec_reve (vector bool long long);
45391     vector signed long long vec_reve (vector signed long long);
45392     vector unsigned long long vec_reve (vector unsigned long long);
45393     vector bool short vec_reve (vector bool short);
45394     vector signed short vec_reve (vector signed short);
45395     vector unsigned short vec_reve (vector unsigned short);
45396
45397     vector signed char vec_rl (vector signed char,
45398                                vector unsigned char);
45399     vector unsigned char vec_rl (vector unsigned char,
45400                                  vector unsigned char);
45401     vector signed short vec_rl (vector signed short, vector unsigned short);
45402     vector unsigned short vec_rl (vector unsigned short,
45403                                   vector unsigned short);
45404     vector signed int vec_rl (vector signed int, vector unsigned int);
45405     vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
45406
45407     vector signed int vec_vrlw (vector signed int, vector unsigned int);
45408     vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
45409
45410     vector signed short vec_vrlh (vector signed short,
45411                                   vector unsigned short);
45412     vector unsigned short vec_vrlh (vector unsigned short,
45413                                     vector unsigned short);
45414
45415     vector signed char vec_vrlb (vector signed char, vector unsigned char);
45416     vector unsigned char vec_vrlb (vector unsigned char,
45417                                    vector unsigned char);
45418
45419     vector float vec_round (vector float);
45420
45421     vector float vec_recip (vector float, vector float);
45422
45423     vector float vec_rsqrt (vector float);
45424
45425     vector float vec_rsqrte (vector float);
45426
45427     vector float vec_sel (vector float, vector float, vector bool int);
45428     vector float vec_sel (vector float, vector float, vector unsigned int);
45429     vector signed int vec_sel (vector signed int,
45430                                vector signed int,
45431                                vector bool int);
45432     vector signed int vec_sel (vector signed int,
45433                                vector signed int,
45434                                vector unsigned int);
45435     vector unsigned int vec_sel (vector unsigned int,
45436                                  vector unsigned int,
45437                                  vector bool int);
45438     vector unsigned int vec_sel (vector unsigned int,
45439                                  vector unsigned int,
45440                                  vector unsigned int);
45441     vector bool int vec_sel (vector bool int,
45442                              vector bool int,
45443                              vector bool int);
45444     vector bool int vec_sel (vector bool int,
45445                              vector bool int,
45446                              vector unsigned int);
45447     vector signed short vec_sel (vector signed short,
45448                                  vector signed short,
45449                                  vector bool short);
45450     vector signed short vec_sel (vector signed short,
45451                                  vector signed short,
45452                                  vector unsigned short);
45453     vector unsigned short vec_sel (vector unsigned short,
45454                                    vector unsigned short,
45455                                    vector bool short);
45456     vector unsigned short vec_sel (vector unsigned short,
45457                                    vector unsigned short,
45458                                    vector unsigned short);
45459     vector bool short vec_sel (vector bool short,
45460                                vector bool short,
45461                                vector bool short);
45462     vector bool short vec_sel (vector bool short,
45463                                vector bool short,
45464                                vector unsigned short);
45465     vector signed char vec_sel (vector signed char,
45466                                 vector signed char,
45467                                 vector bool char);
45468     vector signed char vec_sel (vector signed char,
45469                                 vector signed char,
45470                                 vector unsigned char);
45471     vector unsigned char vec_sel (vector unsigned char,
45472                                   vector unsigned char,
45473                                   vector bool char);
45474     vector unsigned char vec_sel (vector unsigned char,
45475                                   vector unsigned char,
45476                                   vector unsigned char);
45477     vector bool char vec_sel (vector bool char,
45478                               vector bool char,
45479                               vector bool char);
45480     vector bool char vec_sel (vector bool char,
45481                               vector bool char,
45482                               vector unsigned char);
45483
45484     vector signed long long vec_signed (vector double);
45485     vector signed int vec_signed (vector float);
45486
45487     vector signed int vec_signede (vector double);
45488     vector signed int vec_signedo (vector double);
45489     vector signed int vec_signed2 (vector double, vector double);
45490
45491     vector signed char vec_sl (vector signed char,
45492                                vector unsigned char);
45493     vector unsigned char vec_sl (vector unsigned char,
45494                                  vector unsigned char);
45495     vector signed short vec_sl (vector signed short, vector unsigned short);
45496     vector unsigned short vec_sl (vector unsigned short,
45497                                   vector unsigned short);
45498     vector signed int vec_sl (vector signed int, vector unsigned int);
45499     vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
45500
45501     vector signed int vec_vslw (vector signed int, vector unsigned int);
45502     vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
45503
45504     vector signed short vec_vslh (vector signed short,
45505                                   vector unsigned short);
45506     vector unsigned short vec_vslh (vector unsigned short,
45507                                     vector unsigned short);
45508
45509     vector signed char vec_vslb (vector signed char, vector unsigned char);
45510     vector unsigned char vec_vslb (vector unsigned char,
45511                                    vector unsigned char);
45512
45513     vector float vec_sld (vector float, vector float, const int);
45514     vector double vec_sld (vector double, vector double, const int);
45515
45516     vector signed int vec_sld (vector signed int,
45517                                vector signed int,
45518                                const int);
45519     vector unsigned int vec_sld (vector unsigned int,
45520                                  vector unsigned int,
45521                                  const int);
45522     vector bool int vec_sld (vector bool int,
45523                              vector bool int,
45524                              const int);
45525     vector signed short vec_sld (vector signed short,
45526                                  vector signed short,
45527                                  const int);
45528     vector unsigned short vec_sld (vector unsigned short,
45529                                    vector unsigned short,
45530                                    const int);
45531     vector bool short vec_sld (vector bool short,
45532                                vector bool short,
45533                                const int);
45534     vector pixel vec_sld (vector pixel,
45535                           vector pixel,
45536                           const int);
45537     vector signed char vec_sld (vector signed char,
45538                                 vector signed char,
45539                                 const int);
45540     vector unsigned char vec_sld (vector unsigned char,
45541                                   vector unsigned char,
45542                                   const int);
45543     vector bool char vec_sld (vector bool char,
45544                               vector bool char,
45545                               const int);
45546     vector bool long long int vec_sld (vector bool long long int,
45547                                        vector bool long long int, const int);
45548     vector long long int vec_sld (vector long long int,
45549                                   vector  long long int, const int);
45550     vector unsigned long long int vec_sld (vector unsigned long long int,
45551                                            vector unsigned long long int,
45552                                            const int);
45553
45554     vector signed char vec_sldw (vector signed char,
45555                                  vector signed char,
45556                                  const int);
45557     vector unsigned char vec_sldw (vector unsigned char,
45558                                    vector unsigned char,
45559                                    const int);
45560     vector signed short vec_sldw (vector signed short,
45561                                   vector signed short,
45562                                   const int);
45563     vector unsigned short vec_sldw (vector unsigned short,
45564                                     vector unsigned short,
45565                                     const int);
45566     vector signed int vec_sldw (vector signed int,
45567                                 vector signed int,
45568                                 const int);
45569     vector unsigned int vec_sldw (vector unsigned int,
45570                                   vector unsigned int,
45571                                   const int);
45572     vector signed long long vec_sldw (vector signed long long,
45573                                       vector signed long long,
45574                                       const int);
45575     vector unsigned long long vec_sldw (vector unsigned long long,
45576                                         vector unsigned long long,
45577                                         const int);
45578
45579     vector signed int vec_sll (vector signed int,
45580                                vector unsigned int);
45581     vector signed int vec_sll (vector signed int,
45582                                vector unsigned short);
45583     vector signed int vec_sll (vector signed int,
45584                                vector unsigned char);
45585     vector unsigned int vec_sll (vector unsigned int,
45586                                  vector unsigned int);
45587     vector unsigned int vec_sll (vector unsigned int,
45588                                  vector unsigned short);
45589     vector unsigned int vec_sll (vector unsigned int,
45590                                  vector unsigned char);
45591     vector bool int vec_sll (vector bool int,
45592                              vector unsigned int);
45593     vector bool int vec_sll (vector bool int,
45594                              vector unsigned short);
45595     vector bool int vec_sll (vector bool int,
45596                              vector unsigned char);
45597     vector signed short vec_sll (vector signed short,
45598                                  vector unsigned int);
45599     vector signed short vec_sll (vector signed short,
45600                                  vector unsigned short);
45601     vector signed short vec_sll (vector signed short,
45602                                  vector unsigned char);
45603     vector unsigned short vec_sll (vector unsigned short,
45604                                    vector unsigned int);
45605     vector unsigned short vec_sll (vector unsigned short,
45606                                    vector unsigned short);
45607     vector unsigned short vec_sll (vector unsigned short,
45608                                    vector unsigned char);
45609     vector long long int vec_sll (vector long long int,
45610                                   vector unsigned char);
45611     vector unsigned long long int vec_sll (vector unsigned long long int,
45612                                            vector unsigned char);
45613     vector bool short vec_sll (vector bool short, vector unsigned int);
45614     vector bool short vec_sll (vector bool short, vector unsigned short);
45615     vector bool short vec_sll (vector bool short, vector unsigned char);
45616     vector pixel vec_sll (vector pixel, vector unsigned int);
45617     vector pixel vec_sll (vector pixel, vector unsigned short);
45618     vector pixel vec_sll (vector pixel, vector unsigned char);
45619     vector signed char vec_sll (vector signed char, vector unsigned int);
45620     vector signed char vec_sll (vector signed char, vector unsigned short);
45621     vector signed char vec_sll (vector signed char, vector unsigned char);
45622     vector unsigned char vec_sll (vector unsigned char,
45623                                   vector unsigned int);
45624     vector unsigned char vec_sll (vector unsigned char,
45625                                   vector unsigned short);
45626     vector unsigned char vec_sll (vector unsigned char,
45627                                   vector unsigned char);
45628     vector bool char vec_sll (vector bool char, vector unsigned int);
45629     vector bool char vec_sll (vector bool char, vector unsigned short);
45630     vector bool char vec_sll (vector bool char, vector unsigned char);
45631
45632     vector float vec_slo (vector float, vector signed char);
45633     vector float vec_slo (vector float, vector unsigned char);
45634     vector signed int vec_slo (vector signed int, vector signed char);
45635     vector signed int vec_slo (vector signed int, vector unsigned char);
45636     vector unsigned int vec_slo (vector unsigned int, vector signed char);
45637     vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
45638     vector signed short vec_slo (vector signed short, vector signed char);
45639     vector signed short vec_slo (vector signed short, vector unsigned char);
45640     vector unsigned short vec_slo (vector unsigned short,
45641                                    vector signed char);
45642     vector unsigned short vec_slo (vector unsigned short,
45643                                    vector unsigned char);
45644     vector pixel vec_slo (vector pixel, vector signed char);
45645     vector pixel vec_slo (vector pixel, vector unsigned char);
45646     vector signed char vec_slo (vector signed char, vector signed char);
45647     vector signed char vec_slo (vector signed char, vector unsigned char);
45648     vector unsigned char vec_slo (vector unsigned char, vector signed char);
45649     vector unsigned char vec_slo (vector unsigned char,
45650                                   vector unsigned char);
45651     vector signed long long vec_slo (vector signed long long, vector signed char);
45652     vector signed long long vec_slo (vector signed long long, vector unsigned char);
45653     vector unsigned long long vec_slo (vector unsigned long long, vector signed char);
45654     vector unsigned long long vec_slo (vector unsigned long long, vector unsigned char);
45655
45656     vector signed char vec_splat (vector signed char, const int);
45657     vector unsigned char vec_splat (vector unsigned char, const int);
45658     vector bool char vec_splat (vector bool char, const int);
45659     vector signed short vec_splat (vector signed short, const int);
45660     vector unsigned short vec_splat (vector unsigned short, const int);
45661     vector bool short vec_splat (vector bool short, const int);
45662     vector pixel vec_splat (vector pixel, const int);
45663     vector float vec_splat (vector float, const int);
45664     vector signed int vec_splat (vector signed int, const int);
45665     vector unsigned int vec_splat (vector unsigned int, const int);
45666     vector bool int vec_splat (vector bool int, const int);
45667     vector signed long vec_splat (vector signed long, const int);
45668     vector unsigned long vec_splat (vector unsigned long, const int);
45669
45670     vector signed char vec_splats (signed char);
45671     vector unsigned char vec_splats (unsigned char);
45672     vector signed short vec_splats (signed short);
45673     vector unsigned short vec_splats (unsigned short);
45674     vector signed int vec_splats (signed int);
45675     vector unsigned int vec_splats (unsigned int);
45676     vector float vec_splats (float);
45677
45678     vector float vec_vspltw (vector float, const int);
45679     vector signed int vec_vspltw (vector signed int, const int);
45680     vector unsigned int vec_vspltw (vector unsigned int, const int);
45681     vector bool int vec_vspltw (vector bool int, const int);
45682
45683     vector bool short vec_vsplth (vector bool short, const int);
45684     vector signed short vec_vsplth (vector signed short, const int);
45685     vector unsigned short vec_vsplth (vector unsigned short, const int);
45686     vector pixel vec_vsplth (vector pixel, const int);
45687
45688     vector signed char vec_vspltb (vector signed char, const int);
45689     vector unsigned char vec_vspltb (vector unsigned char, const int);
45690     vector bool char vec_vspltb (vector bool char, const int);
45691
45692     vector signed char vec_splat_s8 (const int);
45693
45694     vector signed short vec_splat_s16 (const int);
45695
45696     vector signed int vec_splat_s32 (const int);
45697
45698     vector unsigned char vec_splat_u8 (const int);
45699
45700     vector unsigned short vec_splat_u16 (const int);
45701
45702     vector unsigned int vec_splat_u32 (const int);
45703
45704     vector signed char vec_sr (vector signed char, vector unsigned char);
45705     vector unsigned char vec_sr (vector unsigned char,
45706                                  vector unsigned char);
45707     vector signed short vec_sr (vector signed short,
45708                                 vector unsigned short);
45709     vector unsigned short vec_sr (vector unsigned short,
45710                                   vector unsigned short);
45711     vector signed int vec_sr (vector signed int, vector unsigned int);
45712     vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
45713
45714     vector signed int vec_vsrw (vector signed int, vector unsigned int);
45715     vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
45716
45717     vector signed short vec_vsrh (vector signed short,
45718                                   vector unsigned short);
45719     vector unsigned short vec_vsrh (vector unsigned short,
45720                                     vector unsigned short);
45721
45722     vector signed char vec_vsrb (vector signed char, vector unsigned char);
45723     vector unsigned char vec_vsrb (vector unsigned char,
45724                                    vector unsigned char);
45725
45726     vector signed char vec_sra (vector signed char, vector unsigned char);
45727     vector unsigned char vec_sra (vector unsigned char,
45728                                   vector unsigned char);
45729     vector signed short vec_sra (vector signed short,
45730                                  vector unsigned short);
45731     vector unsigned short vec_sra (vector unsigned short,
45732                                    vector unsigned short);
45733     vector signed int vec_sra (vector signed int, vector unsigned int);
45734     vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
45735
45736     vector signed int vec_vsraw (vector signed int, vector unsigned int);
45737     vector unsigned int vec_vsraw (vector unsigned int,
45738                                    vector unsigned int);
45739
45740     vector signed short vec_vsrah (vector signed short,
45741                                    vector unsigned short);
45742     vector unsigned short vec_vsrah (vector unsigned short,
45743                                      vector unsigned short);
45744
45745     vector signed char vec_vsrab (vector signed char, vector unsigned char);
45746     vector unsigned char vec_vsrab (vector unsigned char,
45747                                     vector unsigned char);
45748
45749     vector signed int vec_srl (vector signed int, vector unsigned int);
45750     vector signed int vec_srl (vector signed int, vector unsigned short);
45751     vector signed int vec_srl (vector signed int, vector unsigned char);
45752     vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
45753     vector unsigned int vec_srl (vector unsigned int,
45754                                  vector unsigned short);
45755     vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
45756     vector bool int vec_srl (vector bool int, vector unsigned int);
45757     vector bool int vec_srl (vector bool int, vector unsigned short);
45758     vector bool int vec_srl (vector bool int, vector unsigned char);
45759     vector signed short vec_srl (vector signed short, vector unsigned int);
45760     vector signed short vec_srl (vector signed short,
45761                                  vector unsigned short);
45762     vector signed short vec_srl (vector signed short, vector unsigned char);
45763     vector unsigned short vec_srl (vector unsigned short,
45764                                    vector unsigned int);
45765     vector unsigned short vec_srl (vector unsigned short,
45766                                    vector unsigned short);
45767     vector unsigned short vec_srl (vector unsigned short,
45768                                    vector unsigned char);
45769     vector long long int vec_srl (vector long long int,
45770                                   vector unsigned char);
45771     vector unsigned long long int vec_srl (vector unsigned long long int,
45772                                            vector unsigned char);
45773     vector bool short vec_srl (vector bool short, vector unsigned int);
45774     vector bool short vec_srl (vector bool short, vector unsigned short);
45775     vector bool short vec_srl (vector bool short, vector unsigned char);
45776     vector pixel vec_srl (vector pixel, vector unsigned int);
45777     vector pixel vec_srl (vector pixel, vector unsigned short);
45778     vector pixel vec_srl (vector pixel, vector unsigned char);
45779     vector signed char vec_srl (vector signed char, vector unsigned int);
45780     vector signed char vec_srl (vector signed char, vector unsigned short);
45781     vector signed char vec_srl (vector signed char, vector unsigned char);
45782     vector unsigned char vec_srl (vector unsigned char,
45783                                   vector unsigned int);
45784     vector unsigned char vec_srl (vector unsigned char,
45785                                   vector unsigned short);
45786     vector unsigned char vec_srl (vector unsigned char,
45787                                   vector unsigned char);
45788     vector bool char vec_srl (vector bool char, vector unsigned int);
45789     vector bool char vec_srl (vector bool char, vector unsigned short);
45790     vector bool char vec_srl (vector bool char, vector unsigned char);
45791
45792     vector float vec_sro (vector float, vector signed char);
45793     vector float vec_sro (vector float, vector unsigned char);
45794     vector signed int vec_sro (vector signed int, vector signed char);
45795     vector signed int vec_sro (vector signed int, vector unsigned char);
45796     vector unsigned int vec_sro (vector unsigned int, vector signed char);
45797     vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
45798     vector signed short vec_sro (vector signed short, vector signed char);
45799     vector signed short vec_sro (vector signed short, vector unsigned char);
45800     vector unsigned short vec_sro (vector unsigned short,
45801                                    vector signed char);
45802     vector unsigned short vec_sro (vector unsigned short,
45803                                    vector unsigned char);
45804     vector long long int vec_sro (vector long long int,
45805                                   vector char);
45806     vector long long int vec_sro (vector long long int,
45807                                   vector unsigned char);
45808     vector unsigned long long int vec_sro (vector unsigned long long int,
45809                                            vector char);
45810     vector unsigned long long int vec_sro (vector unsigned long long int,
45811                                            vector unsigned char);
45812     vector pixel vec_sro (vector pixel, vector signed char);
45813     vector pixel vec_sro (vector pixel, vector unsigned char);
45814     vector signed char vec_sro (vector signed char, vector signed char);
45815     vector signed char vec_sro (vector signed char, vector unsigned char);
45816     vector unsigned char vec_sro (vector unsigned char, vector signed char);
45817     vector unsigned char vec_sro (vector unsigned char,
45818                                   vector unsigned char);
45819
45820     void vec_st (vector float, int, vector float *);
45821     void vec_st (vector float, int, float *);
45822     void vec_st (vector signed int, int, vector signed int *);
45823     void vec_st (vector signed int, int, int *);
45824     void vec_st (vector unsigned int, int, vector unsigned int *);
45825     void vec_st (vector unsigned int, int, unsigned int *);
45826     void vec_st (vector bool int, int, vector bool int *);
45827     void vec_st (vector bool int, int, unsigned int *);
45828     void vec_st (vector bool int, int, int *);
45829     void vec_st (vector signed short, int, vector signed short *);
45830     void vec_st (vector signed short, int, short *);
45831     void vec_st (vector unsigned short, int, vector unsigned short *);
45832     void vec_st (vector unsigned short, int, unsigned short *);
45833     void vec_st (vector bool short, int, vector bool short *);
45834     void vec_st (vector bool short, int, unsigned short *);
45835     void vec_st (vector pixel, int, vector pixel *);
45836     void vec_st (vector pixel, int, unsigned short *);
45837     void vec_st (vector pixel, int, short *);
45838     void vec_st (vector bool short, int, short *);
45839     void vec_st (vector signed char, int, vector signed char *);
45840     void vec_st (vector signed char, int, signed char *);
45841     void vec_st (vector unsigned char, int, vector unsigned char *);
45842     void vec_st (vector unsigned char, int, unsigned char *);
45843     void vec_st (vector bool char, int, vector bool char *);
45844     void vec_st (vector bool char, int, unsigned char *);
45845     void vec_st (vector bool char, int, signed char *);
45846
45847     void vec_ste (vector signed char, int, signed char *);
45848     void vec_ste (vector unsigned char, int, unsigned char *);
45849     void vec_ste (vector bool char, int, signed char *);
45850     void vec_ste (vector bool char, int, unsigned char *);
45851     void vec_ste (vector signed short, int, short *);
45852     void vec_ste (vector unsigned short, int, unsigned short *);
45853     void vec_ste (vector bool short, int, short *);
45854     void vec_ste (vector bool short, int, unsigned short *);
45855     void vec_ste (vector pixel, int, short *);
45856     void vec_ste (vector pixel, int, unsigned short *);
45857     void vec_ste (vector float, int, float *);
45858     void vec_ste (vector signed int, int, int *);
45859     void vec_ste (vector unsigned int, int, unsigned int *);
45860     void vec_ste (vector bool int, int, int *);
45861     void vec_ste (vector bool int, int, unsigned int *);
45862
45863     void vec_stvewx (vector float, int, float *);
45864     void vec_stvewx (vector signed int, int, int *);
45865     void vec_stvewx (vector unsigned int, int, unsigned int *);
45866     void vec_stvewx (vector bool int, int, int *);
45867     void vec_stvewx (vector bool int, int, unsigned int *);
45868
45869     void vec_stvehx (vector signed short, int, short *);
45870     void vec_stvehx (vector unsigned short, int, unsigned short *);
45871     void vec_stvehx (vector bool short, int, short *);
45872     void vec_stvehx (vector bool short, int, unsigned short *);
45873     void vec_stvehx (vector pixel, int, short *);
45874     void vec_stvehx (vector pixel, int, unsigned short *);
45875
45876     void vec_stvebx (vector signed char, int, signed char *);
45877     void vec_stvebx (vector unsigned char, int, unsigned char *);
45878     void vec_stvebx (vector bool char, int, signed char *);
45879     void vec_stvebx (vector bool char, int, unsigned char *);
45880
45881     void vec_stl (vector float, int, vector float *);
45882     void vec_stl (vector float, int, float *);
45883     void vec_stl (vector signed int, int, vector signed int *);
45884     void vec_stl (vector signed int, int, int *);
45885     void vec_stl (vector unsigned int, int, vector unsigned int *);
45886     void vec_stl (vector unsigned int, int, unsigned int *);
45887     void vec_stl (vector bool int, int, vector bool int *);
45888     void vec_stl (vector bool int, int, unsigned int *);
45889     void vec_stl (vector bool int, int, int *);
45890     void vec_stl (vector signed short, int, vector signed short *);
45891     void vec_stl (vector signed short, int, short *);
45892     void vec_stl (vector unsigned short, int, vector unsigned short *);
45893     void vec_stl (vector unsigned short, int, unsigned short *);
45894     void vec_stl (vector bool short, int, vector bool short *);
45895     void vec_stl (vector bool short, int, unsigned short *);
45896     void vec_stl (vector bool short, int, short *);
45897     void vec_stl (vector pixel, int, vector pixel *);
45898     void vec_stl (vector pixel, int, unsigned short *);
45899     void vec_stl (vector pixel, int, short *);
45900     void vec_stl (vector signed char, int, vector signed char *);
45901     void vec_stl (vector signed char, int, signed char *);
45902     void vec_stl (vector unsigned char, int, vector unsigned char *);
45903     void vec_stl (vector unsigned char, int, unsigned char *);
45904     void vec_stl (vector bool char, int, vector bool char *);
45905     void vec_stl (vector bool char, int, unsigned char *);
45906     void vec_stl (vector bool char, int, signed char *);
45907
45908     vector signed char vec_sub (vector bool char, vector signed char);
45909     vector signed char vec_sub (vector signed char, vector bool char);
45910     vector signed char vec_sub (vector signed char, vector signed char);
45911     vector unsigned char vec_sub (vector bool char, vector unsigned char);
45912     vector unsigned char vec_sub (vector unsigned char, vector bool char);
45913     vector unsigned char vec_sub (vector unsigned char,
45914                                   vector unsigned char);
45915     vector signed short vec_sub (vector bool short, vector signed short);
45916     vector signed short vec_sub (vector signed short, vector bool short);
45917     vector signed short vec_sub (vector signed short, vector signed short);
45918     vector unsigned short vec_sub (vector bool short,
45919                                    vector unsigned short);
45920     vector unsigned short vec_sub (vector unsigned short,
45921                                    vector bool short);
45922     vector unsigned short vec_sub (vector unsigned short,
45923                                    vector unsigned short);
45924     vector signed int vec_sub (vector bool int, vector signed int);
45925     vector signed int vec_sub (vector signed int, vector bool int);
45926     vector signed int vec_sub (vector signed int, vector signed int);
45927     vector unsigned int vec_sub (vector bool int, vector unsigned int);
45928     vector unsigned int vec_sub (vector unsigned int, vector bool int);
45929     vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
45930     vector float vec_sub (vector float, vector float);
45931
45932     vector float vec_vsubfp (vector float, vector float);
45933
45934     vector signed int vec_vsubuwm (vector bool int, vector signed int);
45935     vector signed int vec_vsubuwm (vector signed int, vector bool int);
45936     vector signed int vec_vsubuwm (vector signed int, vector signed int);
45937     vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
45938     vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
45939     vector unsigned int vec_vsubuwm (vector unsigned int,
45940                                      vector unsigned int);
45941
45942     vector signed short vec_vsubuhm (vector bool short,
45943                                      vector signed short);
45944     vector signed short vec_vsubuhm (vector signed short,
45945                                      vector bool short);
45946     vector signed short vec_vsubuhm (vector signed short,
45947                                      vector signed short);
45948     vector unsigned short vec_vsubuhm (vector bool short,
45949                                        vector unsigned short);
45950     vector unsigned short vec_vsubuhm (vector unsigned short,
45951                                        vector bool short);
45952     vector unsigned short vec_vsubuhm (vector unsigned short,
45953                                        vector unsigned short);
45954
45955     vector signed char vec_vsububm (vector bool char, vector signed char);
45956     vector signed char vec_vsububm (vector signed char, vector bool char);
45957     vector signed char vec_vsububm (vector signed char, vector signed char);
45958     vector unsigned char vec_vsububm (vector bool char,
45959                                       vector unsigned char);
45960     vector unsigned char vec_vsububm (vector unsigned char,
45961                                       vector bool char);
45962     vector unsigned char vec_vsububm (vector unsigned char,
45963                                       vector unsigned char);
45964
45965     vector signed int vec_subc (vector signed int, vector signed int);
45966     vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
45967     vector signed __int128 vec_subc (vector signed __int128,
45968                                      vector signed __int128);
45969     vector unsigned __int128 vec_subc (vector unsigned __int128,
45970                                        vector unsigned __int128);
45971
45972     vector signed int vec_sube (vector signed int, vector signed int,
45973                                 vector signed int);
45974     vector unsigned int vec_sube (vector unsigned int, vector unsigned int,
45975                                   vector unsigned int);
45976     vector signed __int128 vec_sube (vector signed __int128,
45977                                      vector signed __int128,
45978                                      vector signed __int128);
45979     vector unsigned __int128 vec_sube (vector unsigned __int128,
45980                                        vector unsigned __int128,
45981                                        vector unsigned __int128);
45982
45983     vector signed int vec_subec (vector signed int, vector signed int,
45984                                  vector signed int);
45985     vector unsigned int vec_subec (vector unsigned int, vector unsigned int,
45986                                    vector unsigned int);
45987     vector signed __int128 vec_subec (vector signed __int128,
45988                                       vector signed __int128,
45989                                       vector signed __int128);
45990     vector unsigned __int128 vec_subec (vector unsigned __int128,
45991                                         vector unsigned __int128,
45992                                         vector unsigned __int128);
45993
45994     vector unsigned char vec_subs (vector bool char, vector unsigned char);
45995     vector unsigned char vec_subs (vector unsigned char, vector bool char);
45996     vector unsigned char vec_subs (vector unsigned char,
45997                                    vector unsigned char);
45998     vector signed char vec_subs (vector bool char, vector signed char);
45999     vector signed char vec_subs (vector signed char, vector bool char);
46000     vector signed char vec_subs (vector signed char, vector signed char);
46001     vector unsigned short vec_subs (vector bool short,
46002                                     vector unsigned short);
46003     vector unsigned short vec_subs (vector unsigned short,
46004                                     vector bool short);
46005     vector unsigned short vec_subs (vector unsigned short,
46006                                     vector unsigned short);
46007     vector signed short vec_subs (vector bool short, vector signed short);
46008     vector signed short vec_subs (vector signed short, vector bool short);
46009     vector signed short vec_subs (vector signed short, vector signed short);
46010     vector unsigned int vec_subs (vector bool int, vector unsigned int);
46011     vector unsigned int vec_subs (vector unsigned int, vector bool int);
46012     vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
46013     vector signed int vec_subs (vector bool int, vector signed int);
46014     vector signed int vec_subs (vector signed int, vector bool int);
46015     vector signed int vec_subs (vector signed int, vector signed int);
46016
46017     vector signed int vec_vsubsws (vector bool int, vector signed int);
46018     vector signed int vec_vsubsws (vector signed int, vector bool int);
46019     vector signed int vec_vsubsws (vector signed int, vector signed int);
46020
46021     vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
46022     vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
46023     vector unsigned int vec_vsubuws (vector unsigned int,
46024                                      vector unsigned int);
46025
46026     vector signed short vec_vsubshs (vector bool short,
46027                                      vector signed short);
46028     vector signed short vec_vsubshs (vector signed short,
46029                                      vector bool short);
46030     vector signed short vec_vsubshs (vector signed short,
46031                                      vector signed short);
46032
46033     vector unsigned short vec_vsubuhs (vector bool short,
46034                                        vector unsigned short);
46035     vector unsigned short vec_vsubuhs (vector unsigned short,
46036                                        vector bool short);
46037     vector unsigned short vec_vsubuhs (vector unsigned short,
46038                                        vector unsigned short);
46039
46040     vector signed char vec_vsubsbs (vector bool char, vector signed char);
46041     vector signed char vec_vsubsbs (vector signed char, vector bool char);
46042     vector signed char vec_vsubsbs (vector signed char, vector signed char);
46043
46044     vector unsigned char vec_vsububs (vector bool char,
46045                                       vector unsigned char);
46046     vector unsigned char vec_vsububs (vector unsigned char,
46047                                       vector bool char);
46048     vector unsigned char vec_vsububs (vector unsigned char,
46049                                       vector unsigned char);
46050
46051     vector unsigned int vec_sum4s (vector unsigned char,
46052                                    vector unsigned int);
46053     vector signed int vec_sum4s (vector signed char, vector signed int);
46054     vector signed int vec_sum4s (vector signed short, vector signed int);
46055
46056     vector signed int vec_vsum4shs (vector signed short, vector signed int);
46057
46058     vector signed int vec_vsum4sbs (vector signed char, vector signed int);
46059
46060     vector unsigned int vec_vsum4ubs (vector unsigned char,
46061                                       vector unsigned int);
46062
46063     vector signed int vec_sum2s (vector signed int, vector signed int);
46064
46065     vector signed int vec_sums (vector signed int, vector signed int);
46066
46067     vector float vec_trunc (vector float);
46068
46069     vector signed long long vec_unsigned (vector double);
46070     vector signed int vec_unsigned (vector float);
46071
46072     vector signed int vec_unsignede (vector double);
46073     vector signed int vec_unsignedo (vector double);
46074     vector signed int vec_unsigned2 (vector double, vector double);
46075
46076     vector signed short vec_unpackh (vector signed char);
46077     vector bool short vec_unpackh (vector bool char);
46078     vector signed int vec_unpackh (vector signed short);
46079     vector bool int vec_unpackh (vector bool short);
46080     vector unsigned int vec_unpackh (vector pixel);
46081     vector double vec_unpackh (vector float);
46082
46083     vector bool int vec_vupkhsh (vector bool short);
46084     vector signed int vec_vupkhsh (vector signed short);
46085
46086     vector unsigned int vec_vupkhpx (vector pixel);
46087
46088     vector bool short vec_vupkhsb (vector bool char);
46089     vector signed short vec_vupkhsb (vector signed char);
46090
46091     vector signed short vec_unpackl (vector signed char);
46092     vector bool short vec_unpackl (vector bool char);
46093     vector unsigned int vec_unpackl (vector pixel);
46094     vector signed int vec_unpackl (vector signed short);
46095     vector bool int vec_unpackl (vector bool short);
46096     vector double vec_unpackl (vector float);
46097
46098     vector unsigned int vec_vupklpx (vector pixel);
46099
46100     vector bool int vec_vupklsh (vector bool short);
46101     vector signed int vec_vupklsh (vector signed short);
46102
46103     vector bool short vec_vupklsb (vector bool char);
46104     vector signed short vec_vupklsb (vector signed char);
46105
46106     vector float vec_xor (vector float, vector float);
46107     vector float vec_xor (vector float, vector bool int);
46108     vector float vec_xor (vector bool int, vector float);
46109     vector bool int vec_xor (vector bool int, vector bool int);
46110     vector signed int vec_xor (vector bool int, vector signed int);
46111     vector signed int vec_xor (vector signed int, vector bool int);
46112     vector signed int vec_xor (vector signed int, vector signed int);
46113     vector unsigned int vec_xor (vector bool int, vector unsigned int);
46114     vector unsigned int vec_xor (vector unsigned int, vector bool int);
46115     vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
46116     vector bool short vec_xor (vector bool short, vector bool short);
46117     vector signed short vec_xor (vector bool short, vector signed short);
46118     vector signed short vec_xor (vector signed short, vector bool short);
46119     vector signed short vec_xor (vector signed short, vector signed short);
46120     vector unsigned short vec_xor (vector bool short,
46121                                    vector unsigned short);
46122     vector unsigned short vec_xor (vector unsigned short,
46123                                    vector bool short);
46124     vector unsigned short vec_xor (vector unsigned short,
46125                                    vector unsigned short);
46126     vector signed char vec_xor (vector bool char, vector signed char);
46127     vector bool char vec_xor (vector bool char, vector bool char);
46128     vector signed char vec_xor (vector signed char, vector bool char);
46129     vector signed char vec_xor (vector signed char, vector signed char);
46130     vector unsigned char vec_xor (vector bool char, vector unsigned char);
46131     vector unsigned char vec_xor (vector unsigned char, vector bool char);
46132     vector unsigned char vec_xor (vector unsigned char,
46133                                   vector unsigned char);
46134
46135     int vec_all_eq (vector signed char, vector bool char);
46136     int vec_all_eq (vector signed char, vector signed char);
46137     int vec_all_eq (vector unsigned char, vector bool char);
46138     int vec_all_eq (vector unsigned char, vector unsigned char);
46139     int vec_all_eq (vector bool char, vector bool char);
46140     int vec_all_eq (vector bool char, vector unsigned char);
46141     int vec_all_eq (vector bool char, vector signed char);
46142     int vec_all_eq (vector signed short, vector bool short);
46143     int vec_all_eq (vector signed short, vector signed short);
46144     int vec_all_eq (vector unsigned short, vector bool short);
46145     int vec_all_eq (vector unsigned short, vector unsigned short);
46146     int vec_all_eq (vector bool short, vector bool short);
46147     int vec_all_eq (vector bool short, vector unsigned short);
46148     int vec_all_eq (vector bool short, vector signed short);
46149     int vec_all_eq (vector pixel, vector pixel);
46150     int vec_all_eq (vector signed int, vector bool int);
46151     int vec_all_eq (vector signed int, vector signed int);
46152     int vec_all_eq (vector unsigned int, vector bool int);
46153     int vec_all_eq (vector unsigned int, vector unsigned int);
46154     int vec_all_eq (vector bool int, vector bool int);
46155     int vec_all_eq (vector bool int, vector unsigned int);
46156     int vec_all_eq (vector bool int, vector signed int);
46157     int vec_all_eq (vector float, vector float);
46158
46159     int vec_all_ge (vector bool char, vector unsigned char);
46160     int vec_all_ge (vector unsigned char, vector bool char);
46161     int vec_all_ge (vector unsigned char, vector unsigned char);
46162     int vec_all_ge (vector bool char, vector signed char);
46163     int vec_all_ge (vector signed char, vector bool char);
46164     int vec_all_ge (vector signed char, vector signed char);
46165     int vec_all_ge (vector bool short, vector unsigned short);
46166     int vec_all_ge (vector unsigned short, vector bool short);
46167     int vec_all_ge (vector unsigned short, vector unsigned short);
46168     int vec_all_ge (vector signed short, vector signed short);
46169     int vec_all_ge (vector bool short, vector signed short);
46170     int vec_all_ge (vector signed short, vector bool short);
46171     int vec_all_ge (vector bool int, vector unsigned int);
46172     int vec_all_ge (vector unsigned int, vector bool int);
46173     int vec_all_ge (vector unsigned int, vector unsigned int);
46174     int vec_all_ge (vector bool int, vector signed int);
46175     int vec_all_ge (vector signed int, vector bool int);
46176     int vec_all_ge (vector signed int, vector signed int);
46177     int vec_all_ge (vector float, vector float);
46178
46179     int vec_all_gt (vector bool char, vector unsigned char);
46180     int vec_all_gt (vector unsigned char, vector bool char);
46181     int vec_all_gt (vector unsigned char, vector unsigned char);
46182     int vec_all_gt (vector bool char, vector signed char);
46183     int vec_all_gt (vector signed char, vector bool char);
46184     int vec_all_gt (vector signed char, vector signed char);
46185     int vec_all_gt (vector bool short, vector unsigned short);
46186     int vec_all_gt (vector unsigned short, vector bool short);
46187     int vec_all_gt (vector unsigned short, vector unsigned short);
46188     int vec_all_gt (vector bool short, vector signed short);
46189     int vec_all_gt (vector signed short, vector bool short);
46190     int vec_all_gt (vector signed short, vector signed short);
46191     int vec_all_gt (vector bool int, vector unsigned int);
46192     int vec_all_gt (vector unsigned int, vector bool int);
46193     int vec_all_gt (vector unsigned int, vector unsigned int);
46194     int vec_all_gt (vector bool int, vector signed int);
46195     int vec_all_gt (vector signed int, vector bool int);
46196     int vec_all_gt (vector signed int, vector signed int);
46197     int vec_all_gt (vector float, vector float);
46198
46199     int vec_all_in (vector float, vector float);
46200
46201     int vec_all_le (vector bool char, vector unsigned char);
46202     int vec_all_le (vector unsigned char, vector bool char);
46203     int vec_all_le (vector unsigned char, vector unsigned char);
46204     int vec_all_le (vector bool char, vector signed char);
46205     int vec_all_le (vector signed char, vector bool char);
46206     int vec_all_le (vector signed char, vector signed char);
46207     int vec_all_le (vector bool short, vector unsigned short);
46208     int vec_all_le (vector unsigned short, vector bool short);
46209     int vec_all_le (vector unsigned short, vector unsigned short);
46210     int vec_all_le (vector bool short, vector signed short);
46211     int vec_all_le (vector signed short, vector bool short);
46212     int vec_all_le (vector signed short, vector signed short);
46213     int vec_all_le (vector bool int, vector unsigned int);
46214     int vec_all_le (vector unsigned int, vector bool int);
46215     int vec_all_le (vector unsigned int, vector unsigned int);
46216     int vec_all_le (vector bool int, vector signed int);
46217     int vec_all_le (vector signed int, vector bool int);
46218     int vec_all_le (vector signed int, vector signed int);
46219     int vec_all_le (vector float, vector float);
46220
46221     int vec_all_lt (vector bool char, vector unsigned char);
46222     int vec_all_lt (vector unsigned char, vector bool char);
46223     int vec_all_lt (vector unsigned char, vector unsigned char);
46224     int vec_all_lt (vector bool char, vector signed char);
46225     int vec_all_lt (vector signed char, vector bool char);
46226     int vec_all_lt (vector signed char, vector signed char);
46227     int vec_all_lt (vector bool short, vector unsigned short);
46228     int vec_all_lt (vector unsigned short, vector bool short);
46229     int vec_all_lt (vector unsigned short, vector unsigned short);
46230     int vec_all_lt (vector bool short, vector signed short);
46231     int vec_all_lt (vector signed short, vector bool short);
46232     int vec_all_lt (vector signed short, vector signed short);
46233     int vec_all_lt (vector bool int, vector unsigned int);
46234     int vec_all_lt (vector unsigned int, vector bool int);
46235     int vec_all_lt (vector unsigned int, vector unsigned int);
46236     int vec_all_lt (vector bool int, vector signed int);
46237     int vec_all_lt (vector signed int, vector bool int);
46238     int vec_all_lt (vector signed int, vector signed int);
46239     int vec_all_lt (vector float, vector float);
46240
46241     int vec_all_nan (vector float);
46242
46243     int vec_all_ne (vector signed char, vector bool char);
46244     int vec_all_ne (vector signed char, vector signed char);
46245     int vec_all_ne (vector unsigned char, vector bool char);
46246     int vec_all_ne (vector unsigned char, vector unsigned char);
46247     int vec_all_ne (vector bool char, vector bool char);
46248     int vec_all_ne (vector bool char, vector unsigned char);
46249     int vec_all_ne (vector bool char, vector signed char);
46250     int vec_all_ne (vector signed short, vector bool short);
46251     int vec_all_ne (vector signed short, vector signed short);
46252     int vec_all_ne (vector unsigned short, vector bool short);
46253     int vec_all_ne (vector unsigned short, vector unsigned short);
46254     int vec_all_ne (vector bool short, vector bool short);
46255     int vec_all_ne (vector bool short, vector unsigned short);
46256     int vec_all_ne (vector bool short, vector signed short);
46257     int vec_all_ne (vector pixel, vector pixel);
46258     int vec_all_ne (vector signed int, vector bool int);
46259     int vec_all_ne (vector signed int, vector signed int);
46260     int vec_all_ne (vector unsigned int, vector bool int);
46261     int vec_all_ne (vector unsigned int, vector unsigned int);
46262     int vec_all_ne (vector bool int, vector bool int);
46263     int vec_all_ne (vector bool int, vector unsigned int);
46264     int vec_all_ne (vector bool int, vector signed int);
46265     int vec_all_ne (vector float, vector float);
46266
46267     int vec_all_nge (vector float, vector float);
46268
46269     int vec_all_ngt (vector float, vector float);
46270
46271     int vec_all_nle (vector float, vector float);
46272
46273     int vec_all_nlt (vector float, vector float);
46274
46275     int vec_all_numeric (vector float);
46276
46277     int vec_any_eq (vector signed char, vector bool char);
46278     int vec_any_eq (vector signed char, vector signed char);
46279     int vec_any_eq (vector unsigned char, vector bool char);
46280     int vec_any_eq (vector unsigned char, vector unsigned char);
46281     int vec_any_eq (vector bool char, vector bool char);
46282     int vec_any_eq (vector bool char, vector unsigned char);
46283     int vec_any_eq (vector bool char, vector signed char);
46284     int vec_any_eq (vector signed short, vector bool short);
46285     int vec_any_eq (vector signed short, vector signed short);
46286     int vec_any_eq (vector unsigned short, vector bool short);
46287     int vec_any_eq (vector unsigned short, vector unsigned short);
46288     int vec_any_eq (vector bool short, vector bool short);
46289     int vec_any_eq (vector bool short, vector unsigned short);
46290     int vec_any_eq (vector bool short, vector signed short);
46291     int vec_any_eq (vector pixel, vector pixel);
46292     int vec_any_eq (vector signed int, vector bool int);
46293     int vec_any_eq (vector signed int, vector signed int);
46294     int vec_any_eq (vector unsigned int, vector bool int);
46295     int vec_any_eq (vector unsigned int, vector unsigned int);
46296     int vec_any_eq (vector bool int, vector bool int);
46297     int vec_any_eq (vector bool int, vector unsigned int);
46298     int vec_any_eq (vector bool int, vector signed int);
46299     int vec_any_eq (vector float, vector float);
46300
46301     int vec_any_ge (vector signed char, vector bool char);
46302     int vec_any_ge (vector unsigned char, vector bool char);
46303     int vec_any_ge (vector unsigned char, vector unsigned char);
46304     int vec_any_ge (vector signed char, vector signed char);
46305     int vec_any_ge (vector bool char, vector unsigned char);
46306     int vec_any_ge (vector bool char, vector signed char);
46307     int vec_any_ge (vector unsigned short, vector bool short);
46308     int vec_any_ge (vector unsigned short, vector unsigned short);
46309     int vec_any_ge (vector signed short, vector signed short);
46310     int vec_any_ge (vector signed short, vector bool short);
46311     int vec_any_ge (vector bool short, vector unsigned short);
46312     int vec_any_ge (vector bool short, vector signed short);
46313     int vec_any_ge (vector signed int, vector bool int);
46314     int vec_any_ge (vector unsigned int, vector bool int);
46315     int vec_any_ge (vector unsigned int, vector unsigned int);
46316     int vec_any_ge (vector signed int, vector signed int);
46317     int vec_any_ge (vector bool int, vector unsigned int);
46318     int vec_any_ge (vector bool int, vector signed int);
46319     int vec_any_ge (vector float, vector float);
46320
46321     int vec_any_gt (vector bool char, vector unsigned char);
46322     int vec_any_gt (vector unsigned char, vector bool char);
46323     int vec_any_gt (vector unsigned char, vector unsigned char);
46324     int vec_any_gt (vector bool char, vector signed char);
46325     int vec_any_gt (vector signed char, vector bool char);
46326     int vec_any_gt (vector signed char, vector signed char);
46327     int vec_any_gt (vector bool short, vector unsigned short);
46328     int vec_any_gt (vector unsigned short, vector bool short);
46329     int vec_any_gt (vector unsigned short, vector unsigned short);
46330     int vec_any_gt (vector bool short, vector signed short);
46331     int vec_any_gt (vector signed short, vector bool short);
46332     int vec_any_gt (vector signed short, vector signed short);
46333     int vec_any_gt (vector bool int, vector unsigned int);
46334     int vec_any_gt (vector unsigned int, vector bool int);
46335     int vec_any_gt (vector unsigned int, vector unsigned int);
46336     int vec_any_gt (vector bool int, vector signed int);
46337     int vec_any_gt (vector signed int, vector bool int);
46338     int vec_any_gt (vector signed int, vector signed int);
46339     int vec_any_gt (vector float, vector float);
46340
46341     int vec_any_le (vector bool char, vector unsigned char);
46342     int vec_any_le (vector unsigned char, vector bool char);
46343     int vec_any_le (vector unsigned char, vector unsigned char);
46344     int vec_any_le (vector bool char, vector signed char);
46345     int vec_any_le (vector signed char, vector bool char);
46346     int vec_any_le (vector signed char, vector signed char);
46347     int vec_any_le (vector bool short, vector unsigned short);
46348     int vec_any_le (vector unsigned short, vector bool short);
46349     int vec_any_le (vector unsigned short, vector unsigned short);
46350     int vec_any_le (vector bool short, vector signed short);
46351     int vec_any_le (vector signed short, vector bool short);
46352     int vec_any_le (vector signed short, vector signed short);
46353     int vec_any_le (vector bool int, vector unsigned int);
46354     int vec_any_le (vector unsigned int, vector bool int);
46355     int vec_any_le (vector unsigned int, vector unsigned int);
46356     int vec_any_le (vector bool int, vector signed int);
46357     int vec_any_le (vector signed int, vector bool int);
46358     int vec_any_le (vector signed int, vector signed int);
46359     int vec_any_le (vector float, vector float);
46360
46361     int vec_any_lt (vector bool char, vector unsigned char);
46362     int vec_any_lt (vector unsigned char, vector bool char);
46363     int vec_any_lt (vector unsigned char, vector unsigned char);
46364     int vec_any_lt (vector bool char, vector signed char);
46365     int vec_any_lt (vector signed char, vector bool char);
46366     int vec_any_lt (vector signed char, vector signed char);
46367     int vec_any_lt (vector bool short, vector unsigned short);
46368     int vec_any_lt (vector unsigned short, vector bool short);
46369     int vec_any_lt (vector unsigned short, vector unsigned short);
46370     int vec_any_lt (vector bool short, vector signed short);
46371     int vec_any_lt (vector signed short, vector bool short);
46372     int vec_any_lt (vector signed short, vector signed short);
46373     int vec_any_lt (vector bool int, vector unsigned int);
46374     int vec_any_lt (vector unsigned int, vector bool int);
46375     int vec_any_lt (vector unsigned int, vector unsigned int);
46376     int vec_any_lt (vector bool int, vector signed int);
46377     int vec_any_lt (vector signed int, vector bool int);
46378     int vec_any_lt (vector signed int, vector signed int);
46379     int vec_any_lt (vector float, vector float);
46380
46381     int vec_any_nan (vector float);
46382
46383     int vec_any_ne (vector signed char, vector bool char);
46384     int vec_any_ne (vector signed char, vector signed char);
46385     int vec_any_ne (vector unsigned char, vector bool char);
46386     int vec_any_ne (vector unsigned char, vector unsigned char);
46387     int vec_any_ne (vector bool char, vector bool char);
46388     int vec_any_ne (vector bool char, vector unsigned char);
46389     int vec_any_ne (vector bool char, vector signed char);
46390     int vec_any_ne (vector signed short, vector bool short);
46391     int vec_any_ne (vector signed short, vector signed short);
46392     int vec_any_ne (vector unsigned short, vector bool short);
46393     int vec_any_ne (vector unsigned short, vector unsigned short);
46394     int vec_any_ne (vector bool short, vector bool short);
46395     int vec_any_ne (vector bool short, vector unsigned short);
46396     int vec_any_ne (vector bool short, vector signed short);
46397     int vec_any_ne (vector pixel, vector pixel);
46398     int vec_any_ne (vector signed int, vector bool int);
46399     int vec_any_ne (vector signed int, vector signed int);
46400     int vec_any_ne (vector unsigned int, vector bool int);
46401     int vec_any_ne (vector unsigned int, vector unsigned int);
46402     int vec_any_ne (vector bool int, vector bool int);
46403     int vec_any_ne (vector bool int, vector unsigned int);
46404     int vec_any_ne (vector bool int, vector signed int);
46405     int vec_any_ne (vector float, vector float);
46406
46407     int vec_any_nge (vector float, vector float);
46408
46409     int vec_any_ngt (vector float, vector float);
46410
46411     int vec_any_nle (vector float, vector float);
46412
46413     int vec_any_nlt (vector float, vector float);
46414
46415     int vec_any_numeric (vector float);
46416
46417     int vec_any_out (vector float, vector float);
46418
46419 If the vector/scalar (VSX) instruction set is available, the following
46420additional functions are available:
46421
46422     vector double vec_abs (vector double);
46423     vector double vec_add (vector double, vector double);
46424     vector double vec_and (vector double, vector double);
46425     vector double vec_and (vector double, vector bool long);
46426     vector double vec_and (vector bool long, vector double);
46427     vector long vec_and (vector long, vector long);
46428     vector long vec_and (vector long, vector bool long);
46429     vector long vec_and (vector bool long, vector long);
46430     vector unsigned long vec_and (vector unsigned long, vector unsigned long);
46431     vector unsigned long vec_and (vector unsigned long, vector bool long);
46432     vector unsigned long vec_and (vector bool long, vector unsigned long);
46433     vector double vec_andc (vector double, vector double);
46434     vector double vec_andc (vector double, vector bool long);
46435     vector double vec_andc (vector bool long, vector double);
46436     vector long vec_andc (vector long, vector long);
46437     vector long vec_andc (vector long, vector bool long);
46438     vector long vec_andc (vector bool long, vector long);
46439     vector unsigned long vec_andc (vector unsigned long, vector unsigned long);
46440     vector unsigned long vec_andc (vector unsigned long, vector bool long);
46441     vector unsigned long vec_andc (vector bool long, vector unsigned long);
46442     vector double vec_ceil (vector double);
46443     vector bool long vec_cmpeq (vector double, vector double);
46444     vector bool long vec_cmpge (vector double, vector double);
46445     vector bool long vec_cmpgt (vector double, vector double);
46446     vector bool long vec_cmple (vector double, vector double);
46447     vector bool long vec_cmplt (vector double, vector double);
46448     vector double vec_cpsgn (vector double, vector double);
46449     vector float vec_div (vector float, vector float);
46450     vector double vec_div (vector double, vector double);
46451     vector long vec_div (vector long, vector long);
46452     vector unsigned long vec_div (vector unsigned long, vector unsigned long);
46453     vector double vec_floor (vector double);
46454     vector signed long long vec_ld (int, const vector signed long long *);
46455     vector signed long long vec_ld (int, const signed long long *);
46456     vector unsigned long long vec_ld (int, const vector unsigned long long *);
46457     vector unsigned long long vec_ld (int, const unsigned long long *);
46458     vector __int128 vec_ld (int, const vector __int128 *);
46459     vector unsigned __int128 vec_ld (int, const vector unsigned __int128 *);
46460     vector __int128 vec_ld (int, const __int128 *);
46461     vector unsigned __int128 vec_ld (int, const unsigned __int128 *);
46462     vector double vec_ld (int, const vector double *);
46463     vector double vec_ld (int, const double *);
46464     vector double vec_ldl (int, const vector double *);
46465     vector double vec_ldl (int, const double *);
46466     vector unsigned char vec_lvsl (int, const volatile double *);
46467     vector unsigned char vec_lvsr (int, const volatile double *);
46468     vector double vec_madd (vector double, vector double, vector double);
46469     vector double vec_max (vector double, vector double);
46470     vector signed long vec_mergeh (vector signed long, vector signed long);
46471     vector signed long vec_mergeh (vector signed long, vector bool long);
46472     vector signed long vec_mergeh (vector bool long, vector signed long);
46473     vector unsigned long vec_mergeh (vector unsigned long, vector unsigned long);
46474     vector unsigned long vec_mergeh (vector unsigned long, vector bool long);
46475     vector unsigned long vec_mergeh (vector bool long, vector unsigned long);
46476     vector signed long vec_mergel (vector signed long, vector signed long);
46477     vector signed long vec_mergel (vector signed long, vector bool long);
46478     vector signed long vec_mergel (vector bool long, vector signed long);
46479     vector unsigned long vec_mergel (vector unsigned long, vector unsigned long);
46480     vector unsigned long vec_mergel (vector unsigned long, vector bool long);
46481     vector unsigned long vec_mergel (vector bool long, vector unsigned long);
46482     vector double vec_min (vector double, vector double);
46483     vector float vec_msub (vector float, vector float, vector float);
46484     vector double vec_msub (vector double, vector double, vector double);
46485     vector float vec_mul (vector float, vector float);
46486     vector double vec_mul (vector double, vector double);
46487     vector long vec_mul (vector long, vector long);
46488     vector unsigned long vec_mul (vector unsigned long, vector unsigned long);
46489     vector float vec_nearbyint (vector float);
46490     vector double vec_nearbyint (vector double);
46491     vector float vec_nmadd (vector float, vector float, vector float);
46492     vector double vec_nmadd (vector double, vector double, vector double);
46493     vector double vec_nmsub (vector double, vector double, vector double);
46494     vector double vec_nor (vector double, vector double);
46495     vector long vec_nor (vector long, vector long);
46496     vector long vec_nor (vector long, vector bool long);
46497     vector long vec_nor (vector bool long, vector long);
46498     vector unsigned long vec_nor (vector unsigned long, vector unsigned long);
46499     vector unsigned long vec_nor (vector unsigned long, vector bool long);
46500     vector unsigned long vec_nor (vector bool long, vector unsigned long);
46501     vector double vec_or (vector double, vector double);
46502     vector double vec_or (vector double, vector bool long);
46503     vector double vec_or (vector bool long, vector double);
46504     vector long vec_or (vector long, vector long);
46505     vector long vec_or (vector long, vector bool long);
46506     vector long vec_or (vector bool long, vector long);
46507     vector unsigned long vec_or (vector unsigned long, vector unsigned long);
46508     vector unsigned long vec_or (vector unsigned long, vector bool long);
46509     vector unsigned long vec_or (vector bool long, vector unsigned long);
46510     vector double vec_perm (vector double, vector double, vector unsigned char);
46511     vector long vec_perm (vector long, vector long, vector unsigned char);
46512     vector unsigned long vec_perm (vector unsigned long, vector unsigned long,
46513                                    vector unsigned char);
46514     vector bool char vec_permxor (vector bool char, vector bool char,
46515                                   vector bool char);
46516     vector unsigned char vec_permxor (vector signed char, vector signed char,
46517                                       vector signed char);
46518     vector unsigned char vec_permxor (vector unsigned char, vector unsigned char,
46519                                       vector unsigned char);
46520     vector double vec_rint (vector double);
46521     vector double vec_recip (vector double, vector double);
46522     vector double vec_rsqrt (vector double);
46523     vector double vec_rsqrte (vector double);
46524     vector double vec_sel (vector double, vector double, vector bool long);
46525     vector double vec_sel (vector double, vector double, vector unsigned long);
46526     vector long vec_sel (vector long, vector long, vector long);
46527     vector long vec_sel (vector long, vector long, vector unsigned long);
46528     vector long vec_sel (vector long, vector long, vector bool long);
46529     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
46530                                   vector long);
46531     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
46532                                   vector unsigned long);
46533     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
46534                                   vector bool long);
46535     vector double vec_splats (double);
46536     vector signed long vec_splats (signed long);
46537     vector unsigned long vec_splats (unsigned long);
46538     vector float vec_sqrt (vector float);
46539     vector double vec_sqrt (vector double);
46540     void vec_st (vector signed long long, int, vector signed long long *);
46541     void vec_st (vector signed long long, int, signed long long *);
46542     void vec_st (vector unsigned long long, int, vector unsigned long long *);
46543     void vec_st (vector unsigned long long, int, unsigned long long *);
46544     void vec_st (vector bool long long, int, vector bool long long *);
46545     void vec_st (vector bool long long, int, signed long long *);
46546     void vec_st (vector bool long long, int, unsigned long long *);
46547     void vec_st (vector double, int, vector double *);
46548     void vec_st (vector double, int, double *);
46549     vector double vec_sub (vector double, vector double);
46550     vector double vec_trunc (vector double);
46551     vector double vec_xl (int, vector double *);
46552     vector double vec_xl (int, double *);
46553     vector long long vec_xl (int, vector long long *);
46554     vector long long vec_xl (int, long long *);
46555     vector unsigned long long vec_xl (int, vector unsigned long long *);
46556     vector unsigned long long vec_xl (int, unsigned long long *);
46557     vector float vec_xl (int, vector float *);
46558     vector float vec_xl (int, float *);
46559     vector int vec_xl (int, vector int *);
46560     vector int vec_xl (int, int *);
46561     vector unsigned int vec_xl (int, vector unsigned int *);
46562     vector unsigned int vec_xl (int, unsigned int *);
46563     vector double vec_xor (vector double, vector double);
46564     vector double vec_xor (vector double, vector bool long);
46565     vector double vec_xor (vector bool long, vector double);
46566     vector long vec_xor (vector long, vector long);
46567     vector long vec_xor (vector long, vector bool long);
46568     vector long vec_xor (vector bool long, vector long);
46569     vector unsigned long vec_xor (vector unsigned long, vector unsigned long);
46570     vector unsigned long vec_xor (vector unsigned long, vector bool long);
46571     vector unsigned long vec_xor (vector bool long, vector unsigned long);
46572     void vec_xst (vector double, int, vector double *);
46573     void vec_xst (vector double, int, double *);
46574     void vec_xst (vector long long, int, vector long long *);
46575     void vec_xst (vector long long, int, long long *);
46576     void vec_xst (vector unsigned long long, int, vector unsigned long long *);
46577     void vec_xst (vector unsigned long long, int, unsigned long long *);
46578     void vec_xst (vector float, int, vector float *);
46579     void vec_xst (vector float, int, float *);
46580     void vec_xst (vector int, int, vector int *);
46581     void vec_xst (vector int, int, int *);
46582     void vec_xst (vector unsigned int, int, vector unsigned int *);
46583     void vec_xst (vector unsigned int, int, unsigned int *);
46584     int vec_all_eq (vector double, vector double);
46585     int vec_all_ge (vector double, vector double);
46586     int vec_all_gt (vector double, vector double);
46587     int vec_all_le (vector double, vector double);
46588     int vec_all_lt (vector double, vector double);
46589     int vec_all_nan (vector double);
46590     int vec_all_ne (vector double, vector double);
46591     int vec_all_nge (vector double, vector double);
46592     int vec_all_ngt (vector double, vector double);
46593     int vec_all_nle (vector double, vector double);
46594     int vec_all_nlt (vector double, vector double);
46595     int vec_all_numeric (vector double);
46596     int vec_any_eq (vector double, vector double);
46597     int vec_any_ge (vector double, vector double);
46598     int vec_any_gt (vector double, vector double);
46599     int vec_any_le (vector double, vector double);
46600     int vec_any_lt (vector double, vector double);
46601     int vec_any_nan (vector double);
46602     int vec_any_ne (vector double, vector double);
46603     int vec_any_nge (vector double, vector double);
46604     int vec_any_ngt (vector double, vector double);
46605     int vec_any_nle (vector double, vector double);
46606     int vec_any_nlt (vector double, vector double);
46607     int vec_any_numeric (vector double);
46608
46609     vector double vec_vsx_ld (int, const vector double *);
46610     vector double vec_vsx_ld (int, const double *);
46611     vector float vec_vsx_ld (int, const vector float *);
46612     vector float vec_vsx_ld (int, const float *);
46613     vector bool int vec_vsx_ld (int, const vector bool int *);
46614     vector signed int vec_vsx_ld (int, const vector signed int *);
46615     vector signed int vec_vsx_ld (int, const int *);
46616     vector signed int vec_vsx_ld (int, const long *);
46617     vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
46618     vector unsigned int vec_vsx_ld (int, const unsigned int *);
46619     vector unsigned int vec_vsx_ld (int, const unsigned long *);
46620     vector bool short vec_vsx_ld (int, const vector bool short *);
46621     vector pixel vec_vsx_ld (int, const vector pixel *);
46622     vector signed short vec_vsx_ld (int, const vector signed short *);
46623     vector signed short vec_vsx_ld (int, const short *);
46624     vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
46625     vector unsigned short vec_vsx_ld (int, const unsigned short *);
46626     vector bool char vec_vsx_ld (int, const vector bool char *);
46627     vector signed char vec_vsx_ld (int, const vector signed char *);
46628     vector signed char vec_vsx_ld (int, const signed char *);
46629     vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
46630     vector unsigned char vec_vsx_ld (int, const unsigned char *);
46631
46632     void vec_vsx_st (vector double, int, vector double *);
46633     void vec_vsx_st (vector double, int, double *);
46634     void vec_vsx_st (vector float, int, vector float *);
46635     void vec_vsx_st (vector float, int, float *);
46636     void vec_vsx_st (vector signed int, int, vector signed int *);
46637     void vec_vsx_st (vector signed int, int, int *);
46638     void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
46639     void vec_vsx_st (vector unsigned int, int, unsigned int *);
46640     void vec_vsx_st (vector bool int, int, vector bool int *);
46641     void vec_vsx_st (vector bool int, int, unsigned int *);
46642     void vec_vsx_st (vector bool int, int, int *);
46643     void vec_vsx_st (vector signed short, int, vector signed short *);
46644     void vec_vsx_st (vector signed short, int, short *);
46645     void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
46646     void vec_vsx_st (vector unsigned short, int, unsigned short *);
46647     void vec_vsx_st (vector bool short, int, vector bool short *);
46648     void vec_vsx_st (vector bool short, int, unsigned short *);
46649     void vec_vsx_st (vector pixel, int, vector pixel *);
46650     void vec_vsx_st (vector pixel, int, unsigned short *);
46651     void vec_vsx_st (vector pixel, int, short *);
46652     void vec_vsx_st (vector bool short, int, short *);
46653     void vec_vsx_st (vector signed char, int, vector signed char *);
46654     void vec_vsx_st (vector signed char, int, signed char *);
46655     void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
46656     void vec_vsx_st (vector unsigned char, int, unsigned char *);
46657     void vec_vsx_st (vector bool char, int, vector bool char *);
46658     void vec_vsx_st (vector bool char, int, unsigned char *);
46659     void vec_vsx_st (vector bool char, int, signed char *);
46660
46661     vector double vec_xxpermdi (vector double, vector double, const int);
46662     vector float vec_xxpermdi (vector float, vector float, const int);
46663     vector long long vec_xxpermdi (vector long long, vector long long, const int);
46664     vector unsigned long long vec_xxpermdi (vector unsigned long long,
46665                                             vector unsigned long long, const int);
46666     vector int vec_xxpermdi (vector int, vector int, const int);
46667     vector unsigned int vec_xxpermdi (vector unsigned int,
46668                                       vector unsigned int, const int);
46669     vector short vec_xxpermdi (vector short, vector short, const int);
46670     vector unsigned short vec_xxpermdi (vector unsigned short,
46671                                         vector unsigned short, const int);
46672     vector signed char vec_xxpermdi (vector signed char, vector signed char,
46673                                      const int);
46674     vector unsigned char vec_xxpermdi (vector unsigned char,
46675                                        vector unsigned char, const int);
46676
46677     vector double vec_xxsldi (vector double, vector double, int);
46678     vector float vec_xxsldi (vector float, vector float, int);
46679     vector long long vec_xxsldi (vector long long, vector long long, int);
46680     vector unsigned long long vec_xxsldi (vector unsigned long long,
46681                                           vector unsigned long long, int);
46682     vector int vec_xxsldi (vector int, vector int, int);
46683     vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int);
46684     vector short vec_xxsldi (vector short, vector short, int);
46685     vector unsigned short vec_xxsldi (vector unsigned short,
46686                                       vector unsigned short, int);
46687     vector signed char vec_xxsldi (vector signed char, vector signed char, int);
46688     vector unsigned char vec_xxsldi (vector unsigned char,
46689                                      vector unsigned char, int);
46690
46691 Note that the 'vec_ld' and 'vec_st' built-in functions always generate
46692the AltiVec 'LVX' and 'STVX' instructions even if the VSX instruction
46693set is available.  The 'vec_vsx_ld' and 'vec_vsx_st' built-in functions
46694always generate the VSX 'LXVD2X', 'LXVW4X', 'STXVD2X', and 'STXVW4X'
46695instructions.
46696
46697 If the ISA 2.07 additions to the vector/scalar (power8-vector)
46698instruction set are available, the following additional functions are
46699available for both 32-bit and 64-bit targets.  For 64-bit targets, you
46700can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG
46701instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of
46702VECTOR UNSIGNED LONG LONG.
46703
46704     vector long long vec_abs (vector long long);
46705
46706     vector long long vec_add (vector long long, vector long long);
46707     vector unsigned long long vec_add (vector unsigned long long,
46708                                        vector unsigned long long);
46709
46710     int vec_all_eq (vector long long, vector long long);
46711     int vec_all_eq (vector unsigned long long, vector unsigned long long);
46712     int vec_all_ge (vector long long, vector long long);
46713     int vec_all_ge (vector unsigned long long, vector unsigned long long);
46714     int vec_all_gt (vector long long, vector long long);
46715     int vec_all_gt (vector unsigned long long, vector unsigned long long);
46716     int vec_all_le (vector long long, vector long long);
46717     int vec_all_le (vector unsigned long long, vector unsigned long long);
46718     int vec_all_lt (vector long long, vector long long);
46719     int vec_all_lt (vector unsigned long long, vector unsigned long long);
46720     int vec_all_ne (vector long long, vector long long);
46721     int vec_all_ne (vector unsigned long long, vector unsigned long long);
46722
46723     int vec_any_eq (vector long long, vector long long);
46724     int vec_any_eq (vector unsigned long long, vector unsigned long long);
46725     int vec_any_ge (vector long long, vector long long);
46726     int vec_any_ge (vector unsigned long long, vector unsigned long long);
46727     int vec_any_gt (vector long long, vector long long);
46728     int vec_any_gt (vector unsigned long long, vector unsigned long long);
46729     int vec_any_le (vector long long, vector long long);
46730     int vec_any_le (vector unsigned long long, vector unsigned long long);
46731     int vec_any_lt (vector long long, vector long long);
46732     int vec_any_lt (vector unsigned long long, vector unsigned long long);
46733     int vec_any_ne (vector long long, vector long long);
46734     int vec_any_ne (vector unsigned long long, vector unsigned long long);
46735
46736     vector bool long long vec_cmpeq (vector bool long long, vector bool long long);
46737
46738     vector long long vec_eqv (vector long long, vector long long);
46739     vector long long vec_eqv (vector bool long long, vector long long);
46740     vector long long vec_eqv (vector long long, vector bool long long);
46741     vector unsigned long long vec_eqv (vector unsigned long long,
46742                                        vector unsigned long long);
46743     vector unsigned long long vec_eqv (vector bool long long,
46744                                        vector unsigned long long);
46745     vector unsigned long long vec_eqv (vector unsigned long long,
46746                                        vector bool long long);
46747     vector int vec_eqv (vector int, vector int);
46748     vector int vec_eqv (vector bool int, vector int);
46749     vector int vec_eqv (vector int, vector bool int);
46750     vector unsigned int vec_eqv (vector unsigned int, vector unsigned int);
46751     vector unsigned int vec_eqv (vector bool unsigned int,
46752                                  vector unsigned int);
46753     vector unsigned int vec_eqv (vector unsigned int,
46754                                  vector bool unsigned int);
46755     vector short vec_eqv (vector short, vector short);
46756     vector short vec_eqv (vector bool short, vector short);
46757     vector short vec_eqv (vector short, vector bool short);
46758     vector unsigned short vec_eqv (vector unsigned short, vector unsigned short);
46759     vector unsigned short vec_eqv (vector bool unsigned short,
46760                                    vector unsigned short);
46761     vector unsigned short vec_eqv (vector unsigned short,
46762                                    vector bool unsigned short);
46763     vector signed char vec_eqv (vector signed char, vector signed char);
46764     vector signed char vec_eqv (vector bool signed char, vector signed char);
46765     vector signed char vec_eqv (vector signed char, vector bool signed char);
46766     vector unsigned char vec_eqv (vector unsigned char, vector unsigned char);
46767     vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char);
46768     vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char);
46769
46770     vector long long vec_max (vector long long, vector long long);
46771     vector unsigned long long vec_max (vector unsigned long long,
46772                                        vector unsigned long long);
46773
46774     vector signed int vec_mergee (vector signed int, vector signed int);
46775     vector unsigned int vec_mergee (vector unsigned int, vector unsigned int);
46776     vector bool int vec_mergee (vector bool int, vector bool int);
46777
46778     vector signed int vec_mergeo (vector signed int, vector signed int);
46779     vector unsigned int vec_mergeo (vector unsigned int, vector unsigned int);
46780     vector bool int vec_mergeo (vector bool int, vector bool int);
46781
46782     vector long long vec_min (vector long long, vector long long);
46783     vector unsigned long long vec_min (vector unsigned long long,
46784                                        vector unsigned long long);
46785
46786     vector signed long long vec_nabs (vector signed long long);
46787
46788     vector long long vec_nand (vector long long, vector long long);
46789     vector long long vec_nand (vector bool long long, vector long long);
46790     vector long long vec_nand (vector long long, vector bool long long);
46791     vector unsigned long long vec_nand (vector unsigned long long,
46792                                         vector unsigned long long);
46793     vector unsigned long long vec_nand (vector bool long long,
46794                                        vector unsigned long long);
46795     vector unsigned long long vec_nand (vector unsigned long long,
46796                                         vector bool long long);
46797     vector int vec_nand (vector int, vector int);
46798     vector int vec_nand (vector bool int, vector int);
46799     vector int vec_nand (vector int, vector bool int);
46800     vector unsigned int vec_nand (vector unsigned int, vector unsigned int);
46801     vector unsigned int vec_nand (vector bool unsigned int,
46802                                   vector unsigned int);
46803     vector unsigned int vec_nand (vector unsigned int,
46804                                   vector bool unsigned int);
46805     vector short vec_nand (vector short, vector short);
46806     vector short vec_nand (vector bool short, vector short);
46807     vector short vec_nand (vector short, vector bool short);
46808     vector unsigned short vec_nand (vector unsigned short, vector unsigned short);
46809     vector unsigned short vec_nand (vector bool unsigned short,
46810                                     vector unsigned short);
46811     vector unsigned short vec_nand (vector unsigned short,
46812                                     vector bool unsigned short);
46813     vector signed char vec_nand (vector signed char, vector signed char);
46814     vector signed char vec_nand (vector bool signed char, vector signed char);
46815     vector signed char vec_nand (vector signed char, vector bool signed char);
46816     vector unsigned char vec_nand (vector unsigned char, vector unsigned char);
46817     vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char);
46818     vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char);
46819
46820     vector long long vec_orc (vector long long, vector long long);
46821     vector long long vec_orc (vector bool long long, vector long long);
46822     vector long long vec_orc (vector long long, vector bool long long);
46823     vector unsigned long long vec_orc (vector unsigned long long,
46824                                        vector unsigned long long);
46825     vector unsigned long long vec_orc (vector bool long long,
46826                                        vector unsigned long long);
46827     vector unsigned long long vec_orc (vector unsigned long long,
46828                                        vector bool long long);
46829     vector int vec_orc (vector int, vector int);
46830     vector int vec_orc (vector bool int, vector int);
46831     vector int vec_orc (vector int, vector bool int);
46832     vector unsigned int vec_orc (vector unsigned int, vector unsigned int);
46833     vector unsigned int vec_orc (vector bool unsigned int,
46834                                  vector unsigned int);
46835     vector unsigned int vec_orc (vector unsigned int,
46836                                  vector bool unsigned int);
46837     vector short vec_orc (vector short, vector short);
46838     vector short vec_orc (vector bool short, vector short);
46839     vector short vec_orc (vector short, vector bool short);
46840     vector unsigned short vec_orc (vector unsigned short, vector unsigned short);
46841     vector unsigned short vec_orc (vector bool unsigned short,
46842                                    vector unsigned short);
46843     vector unsigned short vec_orc (vector unsigned short,
46844                                    vector bool unsigned short);
46845     vector signed char vec_orc (vector signed char, vector signed char);
46846     vector signed char vec_orc (vector bool signed char, vector signed char);
46847     vector signed char vec_orc (vector signed char, vector bool signed char);
46848     vector unsigned char vec_orc (vector unsigned char, vector unsigned char);
46849     vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char);
46850     vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char);
46851
46852     vector int vec_pack (vector long long, vector long long);
46853     vector unsigned int vec_pack (vector unsigned long long,
46854                                   vector unsigned long long);
46855     vector bool int vec_pack (vector bool long long, vector bool long long);
46856     vector float vec_pack (vector double, vector double);
46857
46858     vector int vec_packs (vector long long, vector long long);
46859     vector unsigned int vec_packs (vector unsigned long long,
46860                                    vector unsigned long long);
46861
46862     test_vsi_packsu_vssi_vssi (vector signed short x,
46863
46864     vector unsigned char vec_packsu (vector signed short, vector signed short )
46865     vector unsigned char vec_packsu (vector unsigned short, vector unsigned short )
46866     vector unsigned short int vec_packsu (vector signed int, vector signed int);
46867     vector unsigned short int vec_packsu (vector unsigned int,
46868                                           vector unsigned int);
46869     vector unsigned int vec_packsu (vector long long, vector long long);
46870     vector unsigned int vec_packsu (vector unsigned long long,
46871                                     vector unsigned long long);
46872     vector unsigned int vec_packsu (vector signed long long,
46873                                     vector signed long long);
46874
46875     vector unsigned char vec_popcnt (vector signed char);
46876     vector unsigned char vec_popcnt (vector unsigned char);
46877     vector unsigned short vec_popcnt (vector signed short);
46878     vector unsigned short vec_popcnt (vector unsigned short);
46879     vector unsigned int vec_popcnt (vector signed int);
46880     vector unsigned int vec_popcnt (vector unsigned int);
46881     vector unsigned long long vec_popcnt (vector signed long long);
46882     vector unsigned long long vec_popcnt (vector unsigned long long);
46883
46884     vector long long vec_rl (vector long long,
46885                              vector unsigned long long);
46886     vector long long vec_rl (vector unsigned long long,
46887                              vector unsigned long long);
46888
46889     vector long long vec_sl (vector long long, vector unsigned long long);
46890     vector long long vec_sl (vector unsigned long long,
46891                              vector unsigned long long);
46892
46893     vector long long vec_sr (vector long long, vector unsigned long long);
46894     vector unsigned long long char vec_sr (vector unsigned long long,
46895                                            vector unsigned long long);
46896
46897     vector long long vec_sra (vector long long, vector unsigned long long);
46898     vector unsigned long long vec_sra (vector unsigned long long,
46899                                        vector unsigned long long);
46900
46901     vector long long vec_sub (vector long long, vector long long);
46902     vector unsigned long long vec_sub (vector unsigned long long,
46903                                        vector unsigned long long);
46904
46905     vector long long vec_unpackh (vector int);
46906     vector unsigned long long vec_unpackh (vector unsigned int);
46907
46908     vector long long vec_unpackl (vector int);
46909     vector unsigned long long vec_unpackl (vector unsigned int);
46910
46911     vector long long vec_vaddudm (vector long long, vector long long);
46912     vector long long vec_vaddudm (vector bool long long, vector long long);
46913     vector long long vec_vaddudm (vector long long, vector bool long long);
46914     vector unsigned long long vec_vaddudm (vector unsigned long long,
46915                                            vector unsigned long long);
46916     vector unsigned long long vec_vaddudm (vector bool unsigned long long,
46917                                            vector unsigned long long);
46918     vector unsigned long long vec_vaddudm (vector unsigned long long,
46919                                            vector bool unsigned long long);
46920
46921     vector long long vec_vbpermq (vector signed char, vector signed char);
46922     vector long long vec_vbpermq (vector unsigned char, vector unsigned char);
46923
46924     vector unsigned char vec_bperm (vector unsigned char, vector unsigned char);
46925     vector unsigned char vec_bperm (vector unsigned long long,
46926                                     vector unsigned char);
46927     vector unsigned long long vec_bperm (vector unsigned __int128,
46928                                          vector unsigned char);
46929
46930     vector long long vec_cntlz (vector long long);
46931     vector unsigned long long vec_cntlz (vector unsigned long long);
46932     vector int vec_cntlz (vector int);
46933     vector unsigned int vec_cntlz (vector int);
46934     vector short vec_cntlz (vector short);
46935     vector unsigned short vec_cntlz (vector unsigned short);
46936     vector signed char vec_cntlz (vector signed char);
46937     vector unsigned char vec_cntlz (vector unsigned char);
46938
46939     vector long long vec_vclz (vector long long);
46940     vector unsigned long long vec_vclz (vector unsigned long long);
46941     vector int vec_vclz (vector int);
46942     vector unsigned int vec_vclz (vector int);
46943     vector short vec_vclz (vector short);
46944     vector unsigned short vec_vclz (vector unsigned short);
46945     vector signed char vec_vclz (vector signed char);
46946     vector unsigned char vec_vclz (vector unsigned char);
46947
46948     vector signed char vec_vclzb (vector signed char);
46949     vector unsigned char vec_vclzb (vector unsigned char);
46950
46951     vector long long vec_vclzd (vector long long);
46952     vector unsigned long long vec_vclzd (vector unsigned long long);
46953
46954     vector short vec_vclzh (vector short);
46955     vector unsigned short vec_vclzh (vector unsigned short);
46956
46957     vector int vec_vclzw (vector int);
46958     vector unsigned int vec_vclzw (vector int);
46959
46960     vector signed char vec_vgbbd (vector signed char);
46961     vector unsigned char vec_vgbbd (vector unsigned char);
46962
46963     vector long long vec_vmaxsd (vector long long, vector long long);
46964
46965     vector unsigned long long vec_vmaxud (vector unsigned long long,
46966                                           unsigned vector long long);
46967
46968     vector long long vec_vminsd (vector long long, vector long long);
46969
46970     vector unsigned long long vec_vminud (vector long long,
46971                                           vector long long);
46972
46973     vector int vec_vpksdss (vector long long, vector long long);
46974     vector unsigned int vec_vpksdss (vector long long, vector long long);
46975
46976     vector unsigned int vec_vpkudus (vector unsigned long long,
46977                                      vector unsigned long long);
46978
46979     vector int vec_vpkudum (vector long long, vector long long);
46980     vector unsigned int vec_vpkudum (vector unsigned long long,
46981                                      vector unsigned long long);
46982     vector bool int vec_vpkudum (vector bool long long, vector bool long long);
46983
46984     vector long long vec_vpopcnt (vector long long);
46985     vector unsigned long long vec_vpopcnt (vector unsigned long long);
46986     vector int vec_vpopcnt (vector int);
46987     vector unsigned int vec_vpopcnt (vector int);
46988     vector short vec_vpopcnt (vector short);
46989     vector unsigned short vec_vpopcnt (vector unsigned short);
46990     vector signed char vec_vpopcnt (vector signed char);
46991     vector unsigned char vec_vpopcnt (vector unsigned char);
46992
46993     vector signed char vec_vpopcntb (vector signed char);
46994     vector unsigned char vec_vpopcntb (vector unsigned char);
46995
46996     vector long long vec_vpopcntd (vector long long);
46997     vector unsigned long long vec_vpopcntd (vector unsigned long long);
46998
46999     vector short vec_vpopcnth (vector short);
47000     vector unsigned short vec_vpopcnth (vector unsigned short);
47001
47002     vector int vec_vpopcntw (vector int);
47003     vector unsigned int vec_vpopcntw (vector int);
47004
47005     vector long long vec_vrld (vector long long, vector unsigned long long);
47006     vector unsigned long long vec_vrld (vector unsigned long long,
47007                                         vector unsigned long long);
47008
47009     vector long long vec_vsld (vector long long, vector unsigned long long);
47010     vector long long vec_vsld (vector unsigned long long,
47011                                vector unsigned long long);
47012
47013     vector long long vec_vsrad (vector long long, vector unsigned long long);
47014     vector unsigned long long vec_vsrad (vector unsigned long long,
47015                                          vector unsigned long long);
47016
47017     vector long long vec_vsrd (vector long long, vector unsigned long long);
47018     vector unsigned long long char vec_vsrd (vector unsigned long long,
47019                                              vector unsigned long long);
47020
47021     vector long long vec_vsubudm (vector long long, vector long long);
47022     vector long long vec_vsubudm (vector bool long long, vector long long);
47023     vector long long vec_vsubudm (vector long long, vector bool long long);
47024     vector unsigned long long vec_vsubudm (vector unsigned long long,
47025                                            vector unsigned long long);
47026     vector unsigned long long vec_vsubudm (vector bool long long,
47027                                            vector unsigned long long);
47028     vector unsigned long long vec_vsubudm (vector unsigned long long,
47029                                            vector bool long long);
47030
47031     vector long long vec_vupkhsw (vector int);
47032     vector unsigned long long vec_vupkhsw (vector unsigned int);
47033
47034     vector long long vec_vupklsw (vector int);
47035     vector unsigned long long vec_vupklsw (vector int);
47036
47037 If the ISA 2.07 additions to the vector/scalar (power8-vector)
47038instruction set are available, the following additional functions are
47039available for 64-bit targets.  New vector types (VECTOR __INT128_T and
47040VECTOR __UINT128_T) are available to hold the __INT128_T and __UINT128_T
47041types to use these builtins.
47042
47043 The normal vector extract, and set operations work on VECTOR __INT128_T
47044and VECTOR __UINT128_T types, but the index value must be 0.
47045
47046     vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t);
47047     vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t);
47048
47049     vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t);
47050     vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t);
47051
47052     vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t,
47053                                     vector __int128_t);
47054     vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t,
47055                                      vector __uint128_t);
47056
47057     vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t,
47058                                     vector __int128_t);
47059     vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t,
47060                                      vector __uint128_t);
47061
47062     vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t,
47063                                     vector __int128_t);
47064     vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t,
47065                                      vector __uint128_t);
47066
47067     vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t,
47068                                     vector __int128_t);
47069     vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t,
47070                                      vector __uint128_t);
47071
47072     vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t);
47073     vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t);
47074
47075     __int128_t vec_vsubuqm (__int128_t, __int128_t);
47076     __uint128_t vec_vsubuqm (__uint128_t, __uint128_t);
47077
47078     vector __int128_t __builtin_bcdadd (vector __int128_t, vector __int128_t);
47079     int __builtin_bcdadd_lt (vector __int128_t, vector __int128_t);
47080     int __builtin_bcdadd_eq (vector __int128_t, vector __int128_t);
47081     int __builtin_bcdadd_gt (vector __int128_t, vector __int128_t);
47082     int __builtin_bcdadd_ov (vector __int128_t, vector __int128_t);
47083     vector __int128_t bcdsub (vector __int128_t, vector __int128_t);
47084     int __builtin_bcdsub_lt (vector __int128_t, vector __int128_t);
47085     int __builtin_bcdsub_eq (vector __int128_t, vector __int128_t);
47086     int __builtin_bcdsub_gt (vector __int128_t, vector __int128_t);
47087     int __builtin_bcdsub_ov (vector __int128_t, vector __int128_t);
47088
47089 If the ISA 3.0 instruction set additions ('-mcpu=power9') are
47090available:
47091
47092     vector unsigned long long vec_bperm (vector unsigned long long,
47093                                          vector unsigned char);
47094
47095     vector bool char vec_cmpne (vector bool char, vector bool char);
47096     vector bool char vec_cmpne (vector signed char, vector signed char);
47097     vector bool char vec_cmpne (vector unsigned char, vector unsigned char);
47098     vector bool int vec_cmpne (vector bool int, vector bool int);
47099     vector bool int vec_cmpne (vector signed int, vector signed int);
47100     vector bool int vec_cmpne (vector unsigned int, vector unsigned int);
47101     vector bool long long vec_cmpne (vector bool long long, vector bool long long);
47102     vector bool long long vec_cmpne (vector signed long long,
47103                                      vector signed long long);
47104     vector bool long long vec_cmpne (vector unsigned long long,
47105                                      vector unsigned long long);
47106     vector bool short vec_cmpne (vector bool short, vector bool short);
47107     vector bool short vec_cmpne (vector signed short, vector signed short);
47108     vector bool short vec_cmpne (vector unsigned short, vector unsigned short);
47109     vector bool long long vec_cmpne (vector double, vector double);
47110     vector bool int vec_cmpne (vector float, vector float);
47111
47112     vector float vec_extract_fp32_from_shorth (vector unsigned short);
47113     vector float vec_extract_fp32_from_shortl (vector unsigned short);
47114
47115     vector long long vec_vctz (vector long long);
47116     vector unsigned long long vec_vctz (vector unsigned long long);
47117     vector int vec_vctz (vector int);
47118     vector unsigned int vec_vctz (vector int);
47119     vector short vec_vctz (vector short);
47120     vector unsigned short vec_vctz (vector unsigned short);
47121     vector signed char vec_vctz (vector signed char);
47122     vector unsigned char vec_vctz (vector unsigned char);
47123
47124     vector signed char vec_vctzb (vector signed char);
47125     vector unsigned char vec_vctzb (vector unsigned char);
47126
47127     vector long long vec_vctzd (vector long long);
47128     vector unsigned long long vec_vctzd (vector unsigned long long);
47129
47130     vector short vec_vctzh (vector short);
47131     vector unsigned short vec_vctzh (vector unsigned short);
47132
47133     vector int vec_vctzw (vector int);
47134     vector unsigned int vec_vctzw (vector int);
47135
47136     vector unsigned long long vec_extract4b (vector unsigned char, const int);
47137
47138     vector unsigned char vec_insert4b (vector signed int, vector unsigned char,
47139                                        const int);
47140     vector unsigned char vec_insert4b (vector unsigned int, vector unsigned char,
47141                                        const int);
47142
47143     vector unsigned int vec_parity_lsbb (vector signed int);
47144     vector unsigned int vec_parity_lsbb (vector unsigned int);
47145     vector unsigned __int128 vec_parity_lsbb (vector signed __int128);
47146     vector unsigned __int128 vec_parity_lsbb (vector unsigned __int128);
47147     vector unsigned long long vec_parity_lsbb (vector signed long long);
47148     vector unsigned long long vec_parity_lsbb (vector unsigned long long);
47149
47150     vector int vec_vprtyb (vector int);
47151     vector unsigned int vec_vprtyb (vector unsigned int);
47152     vector long long vec_vprtyb (vector long long);
47153     vector unsigned long long vec_vprtyb (vector unsigned long long);
47154
47155     vector int vec_vprtybw (vector int);
47156     vector unsigned int vec_vprtybw (vector unsigned int);
47157
47158     vector long long vec_vprtybd (vector long long);
47159     vector unsigned long long vec_vprtybd (vector unsigned long long);
47160
47161 On 64-bit targets, if the ISA 3.0 additions ('-mcpu=power9') are
47162available:
47163
47164     vector long vec_vprtyb (vector long);
47165     vector unsigned long vec_vprtyb (vector unsigned long);
47166     vector __int128_t vec_vprtyb (vector __int128_t);
47167     vector __uint128_t vec_vprtyb (vector __uint128_t);
47168
47169     vector long vec_vprtybd (vector long);
47170     vector unsigned long vec_vprtybd (vector unsigned long);
47171
47172     vector __int128_t vec_vprtybq (vector __int128_t);
47173     vector __uint128_t vec_vprtybd (vector __uint128_t);
47174
47175 The following built-in vector functions are available for the PowerPC
47176family of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
47177     __vector unsigned char
47178     vec_slv (__vector unsigned char src, __vector unsigned char shift_distance);
47179     __vector unsigned char
47180     vec_srv (__vector unsigned char src, __vector unsigned char shift_distance);
47181
47182 The 'vec_slv' and 'vec_srv' functions operate on all of the bytes of
47183their 'src' and 'shift_distance' arguments in parallel.  The behavior of
47184the 'vec_slv' is as if there existed a temporary array of 17 unsigned
47185characters 'slv_array' within which elements 0 through 15 are the same
47186as the entries in the 'src' array and element 16 equals 0.  The result
47187returned from the 'vec_slv' function is a '__vector' of 16 unsigned
47188characters within which element 'i' is computed using the C expression
47189'0xff & (*((unsigned short *)(slv_array + i)) << (0x07 &
47190shift_distance[i]))', with this resulting value coerced to the 'unsigned
47191char' type.  The behavior of the 'vec_srv' is as if there existed a
47192temporary array of 17 unsigned characters 'srv_array' within which
47193element 0 equals zero and elements 1 through 16 equal the elements 0
47194through 15 of the 'src' array.  The result returned from the 'vec_srv'
47195function is a '__vector' of 16 unsigned characters within which element
47196'i' is computed using the C expression '0xff & (*((unsigned short
47197*)(srv_array + i)) >> (0x07 & shift_distance[i]))', with this resulting
47198value coerced to the 'unsigned char' type.
47199
47200 The following built-in functions are available for the PowerPC family
47201of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
47202     __vector unsigned char
47203     vec_absd (__vector unsigned char arg1, __vector unsigned char arg2);
47204     __vector unsigned short
47205     vec_absd (__vector unsigned short arg1, __vector unsigned short arg2);
47206     __vector unsigned int
47207     vec_absd (__vector unsigned int arg1, __vector unsigned int arg2);
47208
47209     __vector unsigned char
47210     vec_absdb (__vector unsigned char arg1, __vector unsigned char arg2);
47211     __vector unsigned short
47212     vec_absdh (__vector unsigned short arg1, __vector unsigned short arg2);
47213     __vector unsigned int
47214     vec_absdw (__vector unsigned int arg1, __vector unsigned int arg2);
47215
47216 The 'vec_absd', 'vec_absdb', 'vec_absdh', and 'vec_absdw' built-in
47217functions each computes the absolute differences of the pairs of vector
47218elements supplied in its two vector arguments, placing the absolute
47219differences into the corresponding elements of the vector result.
47220
47221 The following built-in functions are available for the PowerPC family
47222of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
47223     __vector unsigned int
47224     vec_extract_exp (__vector float source);
47225     __vector unsigned long long int
47226     vec_extract_exp (__vector double source);
47227
47228     __vector unsigned int
47229     vec_extract_sig (__vector float source);
47230     __vector unsigned long long int
47231     vec_extract_sig (__vector double source);
47232
47233     __vector float
47234     vec_insert_exp (__vector unsigned int significands,
47235                     __vector unsigned int exponents);
47236     __vector float
47237     vec_insert_exp (__vector unsigned float significands,
47238                     __vector unsigned int exponents);
47239     __vector double
47240     vec_insert_exp (__vector unsigned long long int significands,
47241                     __vector unsigned long long int exponents);
47242     __vector double
47243     vec_insert_exp (__vector unsigned double significands,
47244                     __vector unsigned long long int exponents);
47245
47246     __vector bool int vec_test_data_class (__vector float source,
47247                                            const int condition);
47248     __vector bool long long int vec_test_data_class (__vector double source,
47249                                                      const int condition);
47250
47251 The 'vec_extract_sig' and 'vec_extract_exp' built-in functions return
47252vectors representing the significands and biased exponent values of
47253their 'source' arguments respectively.  Within the result vector
47254returned by 'vec_extract_sig', the '0x800000' bit of each vector element
47255returned when the function's 'source' argument is of type 'float' is set
47256to 1 if the corresponding floating point value is in normalized form.
47257Otherwise, this bit is set to 0.  When the 'source' argument is of type
47258'double', the '0x10000000000000' bit within each of the result vector's
47259elements is set according to the same rules.  Note that the sign of the
47260significand is not represented in the result returned from the
47261'vec_extract_sig' function.  To extract the sign bits, use the
47262'vec_cpsgn' function, which returns a new vector within which all of the
47263sign bits of its second argument vector are overwritten with the sign
47264bits copied from the coresponding elements of its first argument vector,
47265and all other (non-sign) bits of the second argument vector are copied
47266unchanged into the result vector.
47267
47268 The 'vec_insert_exp' built-in functions return a vector of single- or
47269double-precision floating point values constructed by assembling the
47270values of their 'significands' and 'exponents' arguments into the
47271corresponding elements of the returned vector.  The sign of each element
47272of the result is copied from the most significant bit of the
47273corresponding entry within the 'significands' argument.  Note that the
47274relevant bits of the 'significands' argument are the same, for both
47275integer and floating point types.  The significand and exponent
47276components of each element of the result are composed of the least
47277significant bits of the corresponding 'significands' element and the
47278least significant bits of the corresponding 'exponents' element.
47279
47280 The 'vec_test_data_class' built-in function returns a vector
47281representing the results of testing the 'source' vector for the
47282condition selected by the 'condition' argument.  The 'condition'
47283argument must be a compile-time constant integer with value not
47284exceeding 127.  The 'condition' argument is encoded as a bitmask with
47285each bit enabling the testing of a different condition, as characterized
47286by the following:
47287     0x40    Test for NaN
47288     0x20    Test for +Infinity
47289     0x10    Test for -Infinity
47290     0x08    Test for +Zero
47291     0x04    Test for -Zero
47292     0x02    Test for +Denormal
47293     0x01    Test for -Denormal
47294
47295 If any of the enabled test conditions is true, the corresponding entry
47296in the result vector is -1.  Otherwise (all of the enabled test
47297conditions are false), the corresponding entry of the result vector is
472980.
47299
47300 The following built-in functions are available for the PowerPC family
47301of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
47302     vector unsigned int vec_rlmi (vector unsigned int, vector unsigned int,
47303                                   vector unsigned int);
47304     vector unsigned long long vec_rlmi (vector unsigned long long,
47305                                         vector unsigned long long,
47306                                         vector unsigned long long);
47307     vector unsigned int vec_rlnm (vector unsigned int, vector unsigned int,
47308                                   vector unsigned int);
47309     vector unsigned long long vec_rlnm (vector unsigned long long,
47310                                         vector unsigned long long,
47311                                         vector unsigned long long);
47312     vector unsigned int vec_vrlnm (vector unsigned int, vector unsigned int);
47313     vector unsigned long long vec_vrlnm (vector unsigned long long,
47314                                          vector unsigned long long);
47315
47316 The result of 'vec_rlmi' is obtained by rotating each element of the
47317first argument vector left and inserting it under mask into the second
47318argument vector.  The third argument vector contains the mask beginning
47319in bits 11:15, the mask end in bits 19:23, and the shift count in bits
4732027:31, of each element.
47321
47322 The result of 'vec_rlnm' is obtained by rotating each element of the
47323first argument vector left and ANDing it with a mask specified by the
47324second and third argument vectors.  The second argument vector contains
47325the shift count for each element in the low-order byte.  The third
47326argument vector contains the mask end for each element in the low-order
47327byte, with the mask begin in the next higher byte.
47328
47329 The result of 'vec_vrlnm' is obtained by rotating each element of the
47330first argument vector left and ANDing it with a mask.  The second
47331argument vector contains the mask beginning in bits 11:15, the mask end
47332in bits 19:23, and the shift count in bits 27:31, of each element.
47333
47334 If the ISA 3.0 instruction set additions ('-mcpu=power9') are
47335available:
47336     vector signed bool char vec_revb (vector signed char);
47337     vector signed char vec_revb (vector signed char);
47338     vector unsigned char vec_revb (vector unsigned char);
47339     vector bool short vec_revb (vector bool short);
47340     vector short vec_revb (vector short);
47341     vector unsigned short vec_revb (vector unsigned short);
47342     vector bool int vec_revb (vector bool int);
47343     vector int vec_revb (vector int);
47344     vector unsigned int vec_revb (vector unsigned int);
47345     vector float vec_revb (vector float);
47346     vector bool long long vec_revb (vector bool long long);
47347     vector long long vec_revb (vector long long);
47348     vector unsigned long long vec_revb (vector unsigned long long);
47349     vector double vec_revb (vector double);
47350
47351 On 64-bit targets, if the ISA 3.0 additions ('-mcpu=power9') are
47352available:
47353     vector long vec_revb (vector long);
47354     vector unsigned long vec_revb (vector unsigned long);
47355     vector __int128_t vec_revb (vector __int128_t);
47356     vector __uint128_t vec_revb (vector __uint128_t);
47357
47358 The 'vec_revb' built-in function reverses the bytes on an element by
47359element basis.  A vector of 'vector unsigned char' or 'vector signed
47360char' reverses the bytes in the whole word.
47361
47362 If the cryptographic instructions are enabled ('-mcrypto' or
47363'-mcpu=power8'), the following builtins are enabled.
47364
47365     vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long);
47366
47367     vector unsigned char vec_sbox_be (vector unsigned char);
47368
47369     vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long,
47370                                                         vector unsigned long long);
47371
47372     vector unsigned char vec_cipher_be (vector unsigned char, vector unsigned char);
47373
47374     vector unsigned long long __builtin_crypto_vcipherlast
47375                                          (vector unsigned long long,
47376                                           vector unsigned long long);
47377
47378     vector unsigned char vec_cipherlast_be (vector unsigned char,
47379                                             vector unsigned char);
47380
47381     vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
47382                                                          vector unsigned long long);
47383
47384     vector unsigned char vec_ncipher_be (vector unsigned char,
47385                                          vector unsigned char);
47386
47387     vector unsigned long long __builtin_crypto_vncipherlast
47388                                          (vector unsigned long long,
47389                                           vector unsigned long long);
47390
47391     vector unsigned char vec_ncipherlast_be (vector unsigned char,
47392                                              vector unsigned char);
47393
47394     vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
47395                                                     vector unsigned char,
47396                                                     vector unsigned char);
47397
47398     vector unsigned short __builtin_crypto_vpermxor (vector unsigned short,
47399                                                      vector unsigned short,
47400                                                      vector unsigned short);
47401
47402     vector unsigned int __builtin_crypto_vpermxor (vector unsigned int,
47403                                                    vector unsigned int,
47404                                                    vector unsigned int);
47405
47406     vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long,
47407                                                          vector unsigned long long,
47408                                                          vector unsigned long long);
47409
47410     vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char,
47411                                                    vector unsigned char);
47412
47413     vector unsigned short __builtin_crypto_vpmsumh (vector unsigned short,
47414                                                     vector unsigned short);
47415
47416     vector unsigned int __builtin_crypto_vpmsumw (vector unsigned int,
47417                                                   vector unsigned int);
47418
47419     vector unsigned long long __builtin_crypto_vpmsumd (vector unsigned long long,
47420                                                         vector unsigned long long);
47421
47422     vector unsigned long long __builtin_crypto_vshasigmad
47423                                    (vector unsigned long long, int, int);
47424
47425     vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int,
47426                                                      int, int);
47427
47428 The second argument to __BUILTIN_CRYPTO_VSHASIGMAD and
47429__BUILTIN_CRYPTO_VSHASIGMAW must be a constant integer that is 0 or 1.
47430The third argument to these built-in functions must be a constant
47431integer in the range of 0 to 15.
47432
47433 If the ISA 3.0 instruction set additions are enabled ('-mcpu=power9'),
47434the following additional functions are available for both 32-bit and
4743564-bit targets.
47436
47437 vector short vec_xl (int, vector short *); vector short vec_xl (int,
47438short *); vector unsigned short vec_xl (int, vector unsigned short *);
47439vector unsigned short vec_xl (int, unsigned short *); vector char vec_xl
47440(int, vector char *); vector char vec_xl (int, char *); vector unsigned
47441char vec_xl (int, vector unsigned char *); vector unsigned char vec_xl
47442(int, unsigned char *);
47443
47444 void vec_xst (vector short, int, vector short *); void vec_xst (vector
47445short, int, short *); void vec_xst (vector unsigned short, int, vector
47446unsigned short *); void vec_xst (vector unsigned short, int, unsigned
47447short *); void vec_xst (vector char, int, vector char *); void vec_xst
47448(vector char, int, char *); void vec_xst (vector unsigned char, int,
47449vector unsigned char *); void vec_xst (vector unsigned char, int,
47450unsigned char *);
47451
47452
47453File: 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
47454
474556.59.23 PowerPC Hardware Transactional Memory Built-in Functions
47456----------------------------------------------------------------
47457
47458GCC provides two interfaces for accessing the Hardware Transactional
47459Memory (HTM) instructions available on some of the PowerPC family of
47460processors (eg, POWER8).  The two interfaces come in a low level
47461interface, consisting of built-in functions specific to PowerPC and a
47462higher level interface consisting of inline functions that are common
47463between PowerPC and S/390.
47464
474656.59.23.1 PowerPC HTM Low Level Built-in Functions
47466..................................................
47467
47468The following low level built-in functions are available with '-mhtm' or
47469'-mcpu=CPU' where CPU is 'power8' or later.  They all generate the
47470machine instruction that is part of the name.
47471
47472 The HTM builtins (with the exception of '__builtin_tbegin') return the
47473full 4-bit condition register value set by their associated hardware
47474instruction.  The header file 'htmintrin.h' defines some macros that can
47475be used to decipher the return value.  The '__builtin_tbegin' builtin
47476returns a simple true or false value depending on whether a transaction
47477was successfully started or not.  The arguments of the builtins match
47478exactly the type and order of the associated hardware instruction's
47479operands, except for the '__builtin_tcheck' builtin, which does not take
47480any input arguments.  Refer to the ISA manual for a description of each
47481instruction's operands.
47482
47483     unsigned int __builtin_tbegin (unsigned int)
47484     unsigned int __builtin_tend (unsigned int)
47485
47486     unsigned int __builtin_tabort (unsigned int)
47487     unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int)
47488     unsigned int __builtin_tabortdci (unsigned int, unsigned int, int)
47489     unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
47490     unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)
47491
47492     unsigned int __builtin_tcheck (void)
47493     unsigned int __builtin_treclaim (unsigned int)
47494     unsigned int __builtin_trechkpt (void)
47495     unsigned int __builtin_tsr (unsigned int)
47496
47497 In addition to the above HTM built-ins, we have added built-ins for
47498some common extended mnemonics of the HTM instructions:
47499
47500     unsigned int __builtin_tendall (void)
47501     unsigned int __builtin_tresume (void)
47502     unsigned int __builtin_tsuspend (void)
47503
47504 Note that the semantics of the above HTM builtins are required to mimic
47505the locking semantics used for critical sections.  Builtins that are
47506used to create a new transaction or restart a suspended transaction must
47507have lock acquisition like semantics while those builtins that end or
47508suspend a transaction must have lock release like semantics.
47509Specifically, this must mimic lock semantics as specified by C++11, for
47510example: Lock acquisition is as-if an execution of
47511__atomic_exchange_n(&globallock,1,__ATOMIC_ACQUIRE) that returns 0, and
47512lock release is as-if an execution of
47513__atomic_store(&globallock,0,__ATOMIC_RELEASE), with globallock being an
47514implicit implementation-defined lock used for all transactions.  The HTM
47515instructions associated with with the builtins inherently provide the
47516correct acquisition and release hardware barriers required.  However,
47517the compiler must also be prohibited from moving loads and stores across
47518the builtins in a way that would violate their semantics.  This has been
47519accomplished by adding memory barriers to the associated HTM
47520instructions (which is a conservative approach to provide acquire and
47521release semantics).  Earlier versions of the compiler did not treat the
47522HTM instructions as memory barriers.  A '__TM_FENCE__' macro has been
47523added, which can be used to determine whether the current compiler
47524treats HTM instructions as memory barriers or not.  This allows the user
47525to explicitly add memory barriers to their code when using an older
47526version of the compiler.
47527
47528 The following set of built-in functions are available to gain access to
47529the HTM specific special purpose registers.
47530
47531     unsigned long __builtin_get_texasr (void)
47532     unsigned long __builtin_get_texasru (void)
47533     unsigned long __builtin_get_tfhar (void)
47534     unsigned long __builtin_get_tfiar (void)
47535
47536     void __builtin_set_texasr (unsigned long);
47537     void __builtin_set_texasru (unsigned long);
47538     void __builtin_set_tfhar (unsigned long);
47539     void __builtin_set_tfiar (unsigned long);
47540
47541 Example usage of these low level built-in functions may look like:
47542
47543     #include <htmintrin.h>
47544
47545     int num_retries = 10;
47546
47547     while (1)
47548       {
47549         if (__builtin_tbegin (0))
47550           {
47551             /* Transaction State Initiated.  */
47552             if (is_locked (lock))
47553               __builtin_tabort (0);
47554             ... transaction code...
47555             __builtin_tend (0);
47556             break;
47557           }
47558         else
47559           {
47560             /* Transaction State Failed.  Use locks if the transaction
47561                failure is "persistent" or we've tried too many times.  */
47562             if (num_retries-- <= 0
47563                 || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
47564               {
47565                 acquire_lock (lock);
47566                 ... non transactional fallback path...
47567                 release_lock (lock);
47568                 break;
47569               }
47570           }
47571       }
47572
47573 One final built-in function has been added that returns the value of
47574the 2-bit Transaction State field of the Machine Status Register (MSR)
47575as stored in 'CR0'.
47576
47577     unsigned long __builtin_ttest (void)
47578
47579 This built-in can be used to determine the current transaction state
47580using the following code example:
47581
47582     #include <htmintrin.h>
47583
47584     unsigned char tx_state = _HTM_STATE (__builtin_ttest ());
47585
47586     if (tx_state == _HTM_TRANSACTIONAL)
47587       {
47588         /* Code to use in transactional state.  */
47589       }
47590     else if (tx_state == _HTM_NONTRANSACTIONAL)
47591       {
47592         /* Code to use in non-transactional state.  */
47593       }
47594     else if (tx_state == _HTM_SUSPENDED)
47595       {
47596         /* Code to use in transaction suspended state.  */
47597       }
47598
475996.59.23.2 PowerPC HTM High Level Inline Functions
47600.................................................
47601
47602The following high level HTM interface is made available by including
47603'<htmxlintrin.h>' and using '-mhtm' or '-mcpu=CPU' where CPU is 'power8'
47604or later.  This interface is common between PowerPC and S/390, allowing
47605users to write one HTM source implementation that can be compiled and
47606executed on either system.
47607
47608     long __TM_simple_begin (void)
47609     long __TM_begin (void* const TM_buff)
47610     long __TM_end (void)
47611     void __TM_abort (void)
47612     void __TM_named_abort (unsigned char const code)
47613     void __TM_resume (void)
47614     void __TM_suspend (void)
47615
47616     long __TM_is_user_abort (void* const TM_buff)
47617     long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code)
47618     long __TM_is_illegal (void* const TM_buff)
47619     long __TM_is_footprint_exceeded (void* const TM_buff)
47620     long __TM_nesting_depth (void* const TM_buff)
47621     long __TM_is_nested_too_deep(void* const TM_buff)
47622     long __TM_is_conflict(void* const TM_buff)
47623     long __TM_is_failure_persistent(void* const TM_buff)
47624     long __TM_failure_address(void* const TM_buff)
47625     long long __TM_failure_code(void* const TM_buff)
47626
47627 Using these common set of HTM inline functions, we can create a more
47628portable version of the HTM example in the previous section that will
47629work on either PowerPC or S/390:
47630
47631     #include <htmxlintrin.h>
47632
47633     int num_retries = 10;
47634     TM_buff_type TM_buff;
47635
47636     while (1)
47637       {
47638         if (__TM_begin (TM_buff) == _HTM_TBEGIN_STARTED)
47639           {
47640             /* Transaction State Initiated.  */
47641             if (is_locked (lock))
47642               __TM_abort ();
47643             ... transaction code...
47644             __TM_end ();
47645             break;
47646           }
47647         else
47648           {
47649             /* Transaction State Failed.  Use locks if the transaction
47650                failure is "persistent" or we've tried too many times.  */
47651             if (num_retries-- <= 0
47652                 || __TM_is_failure_persistent (TM_buff))
47653               {
47654                 acquire_lock (lock);
47655                 ... non transactional fallback path...
47656                 release_lock (lock);
47657                 break;
47658               }
47659           }
47660       }
47661
47662
47663File: gcc.info,  Node: PowerPC Atomic Memory Operation Functions,  Next: RX Built-in Functions,  Prev: PowerPC Hardware Transactional Memory Built-in Functions,  Up: Target Builtins
47664
476656.59.24 PowerPC Atomic Memory Operation Functions
47666-------------------------------------------------
47667
47668ISA 3.0 of the PowerPC added new atomic memory operation (amo)
47669instructions.  GCC provides support for these instructions in 64-bit
47670environments.  All of the functions are declared in the include file
47671'amo.h'.
47672
47673 The functions supported are:
47674
47675     #include <amo.h>
47676
47677     uint32_t amo_lwat_add (uint32_t *, uint32_t);
47678     uint32_t amo_lwat_xor (uint32_t *, uint32_t);
47679     uint32_t amo_lwat_ior (uint32_t *, uint32_t);
47680     uint32_t amo_lwat_and (uint32_t *, uint32_t);
47681     uint32_t amo_lwat_umax (uint32_t *, uint32_t);
47682     uint32_t amo_lwat_umin (uint32_t *, uint32_t);
47683     uint32_t amo_lwat_swap (uint32_t *, uint32_t);
47684
47685     int32_t amo_lwat_sadd (int32_t *, int32_t);
47686     int32_t amo_lwat_smax (int32_t *, int32_t);
47687     int32_t amo_lwat_smin (int32_t *, int32_t);
47688     int32_t amo_lwat_sswap (int32_t *, int32_t);
47689
47690     uint64_t amo_ldat_add (uint64_t *, uint64_t);
47691     uint64_t amo_ldat_xor (uint64_t *, uint64_t);
47692     uint64_t amo_ldat_ior (uint64_t *, uint64_t);
47693     uint64_t amo_ldat_and (uint64_t *, uint64_t);
47694     uint64_t amo_ldat_umax (uint64_t *, uint64_t);
47695     uint64_t amo_ldat_umin (uint64_t *, uint64_t);
47696     uint64_t amo_ldat_swap (uint64_t *, uint64_t);
47697
47698     int64_t amo_ldat_sadd (int64_t *, int64_t);
47699     int64_t amo_ldat_smax (int64_t *, int64_t);
47700     int64_t amo_ldat_smin (int64_t *, int64_t);
47701     int64_t amo_ldat_sswap (int64_t *, int64_t);
47702
47703     void amo_stwat_add (uint32_t *, uint32_t);
47704     void amo_stwat_xor (uint32_t *, uint32_t);
47705     void amo_stwat_ior (uint32_t *, uint32_t);
47706     void amo_stwat_and (uint32_t *, uint32_t);
47707     void amo_stwat_umax (uint32_t *, uint32_t);
47708     void amo_stwat_umin (uint32_t *, uint32_t);
47709
47710     void amo_stwat_sadd (int32_t *, int32_t);
47711     void amo_stwat_smax (int32_t *, int32_t);
47712     void amo_stwat_smin (int32_t *, int32_t);
47713
47714     void amo_stdat_add (uint64_t *, uint64_t);
47715     void amo_stdat_xor (uint64_t *, uint64_t);
47716     void amo_stdat_ior (uint64_t *, uint64_t);
47717     void amo_stdat_and (uint64_t *, uint64_t);
47718     void amo_stdat_umax (uint64_t *, uint64_t);
47719     void amo_stdat_umin (uint64_t *, uint64_t);
47720
47721     void amo_stdat_sadd (int64_t *, int64_t);
47722     void amo_stdat_smax (int64_t *, int64_t);
47723     void amo_stdat_smin (int64_t *, int64_t);
47724
47725
47726File: gcc.info,  Node: RX Built-in Functions,  Next: S/390 System z Built-in Functions,  Prev: PowerPC Atomic Memory Operation Functions,  Up: Target Builtins
47727
477286.59.25 RX Built-in Functions
47729-----------------------------
47730
47731GCC supports some of the RX instructions which cannot be expressed in
47732the C programming language via the use of built-in functions.  The
47733following functions are supported:
47734
47735 -- Built-in Function: void __builtin_rx_brk (void)
47736     Generates the 'brk' machine instruction.
47737
47738 -- Built-in Function: void __builtin_rx_clrpsw (int)
47739     Generates the 'clrpsw' machine instruction to clear the specified
47740     bit in the processor status word.
47741
47742 -- Built-in Function: void __builtin_rx_int (int)
47743     Generates the 'int' machine instruction to generate an interrupt
47744     with the specified value.
47745
47746 -- Built-in Function: void __builtin_rx_machi (int, int)
47747     Generates the 'machi' machine instruction to add the result of
47748     multiplying the top 16 bits of the two arguments into the
47749     accumulator.
47750
47751 -- Built-in Function: void __builtin_rx_maclo (int, int)
47752     Generates the 'maclo' machine instruction to add the result of
47753     multiplying the bottom 16 bits of the two arguments into the
47754     accumulator.
47755
47756 -- Built-in Function: void __builtin_rx_mulhi (int, int)
47757     Generates the 'mulhi' machine instruction to place the result of
47758     multiplying the top 16 bits of the two arguments into the
47759     accumulator.
47760
47761 -- Built-in Function: void __builtin_rx_mullo (int, int)
47762     Generates the 'mullo' machine instruction to place the result of
47763     multiplying the bottom 16 bits of the two arguments into the
47764     accumulator.
47765
47766 -- Built-in Function: int __builtin_rx_mvfachi (void)
47767     Generates the 'mvfachi' machine instruction to read the top 32 bits
47768     of the accumulator.
47769
47770 -- Built-in Function: int __builtin_rx_mvfacmi (void)
47771     Generates the 'mvfacmi' machine instruction to read the middle 32
47772     bits of the accumulator.
47773
47774 -- Built-in Function: int __builtin_rx_mvfc (int)
47775     Generates the 'mvfc' machine instruction which reads the control
47776     register specified in its argument and returns its value.
47777
47778 -- Built-in Function: void __builtin_rx_mvtachi (int)
47779     Generates the 'mvtachi' machine instruction to set the top 32 bits
47780     of the accumulator.
47781
47782 -- Built-in Function: void __builtin_rx_mvtaclo (int)
47783     Generates the 'mvtaclo' machine instruction to set the bottom 32
47784     bits of the accumulator.
47785
47786 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val)
47787     Generates the 'mvtc' machine instruction which sets control
47788     register number 'reg' to 'val'.
47789
47790 -- Built-in Function: void __builtin_rx_mvtipl (int)
47791     Generates the 'mvtipl' machine instruction set the interrupt
47792     priority level.
47793
47794 -- Built-in Function: void __builtin_rx_racw (int)
47795     Generates the 'racw' machine instruction to round the accumulator
47796     according to the specified mode.
47797
47798 -- Built-in Function: int __builtin_rx_revw (int)
47799     Generates the 'revw' machine instruction which swaps the bytes in
47800     the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
47801     and also bits 16-23 occupy bits 24-31 and vice versa.
47802
47803 -- Built-in Function: void __builtin_rx_rmpa (void)
47804     Generates the 'rmpa' machine instruction which initiates a repeated
47805     multiply and accumulate sequence.
47806
47807 -- Built-in Function: void __builtin_rx_round (float)
47808     Generates the 'round' machine instruction which returns the
47809     floating-point argument rounded according to the current rounding
47810     mode set in the floating-point status word register.
47811
47812 -- Built-in Function: int __builtin_rx_sat (int)
47813     Generates the 'sat' machine instruction which returns the saturated
47814     value of the argument.
47815
47816 -- Built-in Function: void __builtin_rx_setpsw (int)
47817     Generates the 'setpsw' machine instruction to set the specified bit
47818     in the processor status word.
47819
47820 -- Built-in Function: void __builtin_rx_wait (void)
47821     Generates the 'wait' machine instruction.
47822
47823
47824File: gcc.info,  Node: S/390 System z Built-in Functions,  Next: SH Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
47825
478266.59.26 S/390 System z Built-in Functions
47827-----------------------------------------
47828
47829 -- Built-in Function: int __builtin_tbegin (void*)
47830     Generates the 'tbegin' machine instruction starting a
47831     non-constrained hardware transaction.  If the parameter is non-NULL
47832     the memory area is used to store the transaction diagnostic buffer
47833     and will be passed as first operand to 'tbegin'.  This buffer can
47834     be defined using the 'struct __htm_tdb' C struct defined in
47835     'htmintrin.h' and must reside on a double-word boundary.  The
47836     second tbegin operand is set to '0xff0c'.  This enables
47837     save/restore of all GPRs and disables aborts for FPR and AR
47838     manipulations inside the transaction body.  The condition code set
47839     by the tbegin instruction is returned as integer value.  The tbegin
47840     instruction by definition overwrites the content of all FPRs.  The
47841     compiler will generate code which saves and restores the FPRs.  For
47842     soft-float code it is recommended to used the '*_nofloat' variant.
47843     In order to prevent a TDB from being written it is required to pass
47844     a constant zero value as parameter.  Passing a zero value through a
47845     variable is not sufficient.  Although modifications of access
47846     registers inside the transaction will not trigger an transaction
47847     abort it is not supported to actually modify them.  Access
47848     registers do not get saved when entering a transaction.  They will
47849     have undefined state when reaching the abort code.
47850
47851 Macros for the possible return codes of tbegin are defined in the
47852'htmintrin.h' header file:
47853
47854'_HTM_TBEGIN_STARTED'
47855     'tbegin' has been executed as part of normal processing.  The
47856     transaction body is supposed to be executed.
47857'_HTM_TBEGIN_INDETERMINATE'
47858     The transaction was aborted due to an indeterminate condition which
47859     might be persistent.
47860'_HTM_TBEGIN_TRANSIENT'
47861     The transaction aborted due to a transient failure.  The
47862     transaction should be re-executed in that case.
47863'_HTM_TBEGIN_PERSISTENT'
47864     The transaction aborted due to a persistent failure.  Re-execution
47865     under same circumstances will not be productive.
47866
47867 -- Macro: _HTM_FIRST_USER_ABORT_CODE
47868     The '_HTM_FIRST_USER_ABORT_CODE' defined in 'htmintrin.h' specifies
47869     the first abort code which can be used for '__builtin_tabort'.
47870     Values below this threshold are reserved for machine use.
47871
47872 -- Data type: struct __htm_tdb
47873     The 'struct __htm_tdb' defined in 'htmintrin.h' describes the
47874     structure of the transaction diagnostic block as specified in the
47875     Principles of Operation manual chapter 5-91.
47876
47877 -- Built-in Function: int __builtin_tbegin_nofloat (void*)
47878     Same as '__builtin_tbegin' but without FPR saves and restores.
47879     Using this variant in code making use of FPRs will leave the FPRs
47880     in undefined state when entering the transaction abort handler
47881     code.
47882
47883 -- Built-in Function: int __builtin_tbegin_retry (void*, int)
47884     In addition to '__builtin_tbegin' a loop for transient failures is
47885     generated.  If tbegin returns a condition code of 2 the transaction
47886     will be retried as often as specified in the second argument.  The
47887     perform processor assist instruction is used to tell the CPU about
47888     the number of fails so far.
47889
47890 -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int)
47891     Same as '__builtin_tbegin_retry' but without FPR saves and
47892     restores.  Using this variant in code making use of FPRs will leave
47893     the FPRs in undefined state when entering the transaction abort
47894     handler code.
47895
47896 -- Built-in Function: void __builtin_tbeginc (void)
47897     Generates the 'tbeginc' machine instruction starting a constrained
47898     hardware transaction.  The second operand is set to '0xff08'.
47899
47900 -- Built-in Function: int __builtin_tend (void)
47901     Generates the 'tend' machine instruction finishing a transaction
47902     and making the changes visible to other threads.  The condition
47903     code generated by tend is returned as integer value.
47904
47905 -- Built-in Function: void __builtin_tabort (int)
47906     Generates the 'tabort' machine instruction with the specified abort
47907     code.  Abort codes from 0 through 255 are reserved and will result
47908     in an error message.
47909
47910 -- Built-in Function: void __builtin_tx_assist (int)
47911     Generates the 'ppa rX,rY,1' machine instruction.  Where the integer
47912     parameter is loaded into rX and a value of zero is loaded into rY.
47913     The integer parameter specifies the number of times the transaction
47914     repeatedly aborted.
47915
47916 -- Built-in Function: int __builtin_tx_nesting_depth (void)
47917     Generates the 'etnd' machine instruction.  The current nesting
47918     depth is returned as integer value.  For a nesting depth of 0 the
47919     code is not executed as part of an transaction.
47920
47921 -- Built-in Function: void __builtin_non_tx_store (uint64_t *,
47922          uint64_t)
47923
47924     Generates the 'ntstg' machine instruction.  The second argument is
47925     written to the first arguments location.  The store operation will
47926     not be rolled-back in case of an transaction abort.
47927
47928
47929File: gcc.info,  Node: SH Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: S/390 System z Built-in Functions,  Up: Target Builtins
47930
479316.59.27 SH Built-in Functions
47932-----------------------------
47933
47934The following built-in functions are supported on the SH1, SH2, SH3 and
47935SH4 families of processors:
47936
47937 -- Built-in Function: void __builtin_set_thread_pointer (void *PTR)
47938     Sets the 'GBR' register to the specified value PTR.  This is
47939     usually used by system code that manages threads and execution
47940     contexts.  The compiler normally does not generate code that
47941     modifies the contents of 'GBR' and thus the value is preserved
47942     across function calls.  Changing the 'GBR' value in user code must
47943     be done with caution, since the compiler might use 'GBR' in order
47944     to access thread local variables.
47945
47946 -- Built-in Function: void * __builtin_thread_pointer (void)
47947     Returns the value that is currently set in the 'GBR' register.
47948     Memory loads and stores that use the thread pointer as a base
47949     address are turned into 'GBR' based displacement loads and stores,
47950     if possible.  For example:
47951          struct my_tcb
47952          {
47953             int a, b, c, d, e;
47954          };
47955
47956          int get_tcb_value (void)
47957          {
47958            // Generate 'mov.l @(8,gbr),r0' instruction
47959            return ((my_tcb*)__builtin_thread_pointer ())->c;
47960          }
47961
47962
47963 -- Built-in Function: unsigned int __builtin_sh_get_fpscr (void)
47964     Returns the value that is currently set in the 'FPSCR' register.
47965
47966 -- Built-in Function: void __builtin_sh_set_fpscr (unsigned int VAL)
47967     Sets the 'FPSCR' register to the specified value VAL, while
47968     preserving the current values of the FR, SZ and PR bits.
47969
47970
47971File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: SPU Built-in Functions,  Prev: SH Built-in Functions,  Up: Target Builtins
47972
479736.59.28 SPARC VIS Built-in Functions
47974------------------------------------
47975
47976GCC supports SIMD operations on the SPARC using both the generic vector
47977extensions (*note Vector Extensions::) as well as built-in functions for
47978the SPARC Visual Instruction Set (VIS). When you use the '-mvis' switch,
47979the VIS extension is exposed as the following built-in functions:
47980
47981     typedef int v1si __attribute__ ((vector_size (4)));
47982     typedef int v2si __attribute__ ((vector_size (8)));
47983     typedef short v4hi __attribute__ ((vector_size (8)));
47984     typedef short v2hi __attribute__ ((vector_size (4)));
47985     typedef unsigned char v8qi __attribute__ ((vector_size (8)));
47986     typedef unsigned char v4qi __attribute__ ((vector_size (4)));
47987
47988     void __builtin_vis_write_gsr (int64_t);
47989     int64_t __builtin_vis_read_gsr (void);
47990
47991     void * __builtin_vis_alignaddr (void *, long);
47992     void * __builtin_vis_alignaddrl (void *, long);
47993     int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
47994     v2si __builtin_vis_faligndatav2si (v2si, v2si);
47995     v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
47996     v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
47997
47998     v4hi __builtin_vis_fexpand (v4qi);
47999
48000     v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
48001     v4hi __builtin_vis_fmul8x16au (v4qi, v2hi);
48002     v4hi __builtin_vis_fmul8x16al (v4qi, v2hi);
48003     v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
48004     v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
48005     v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
48006     v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
48007
48008     v4qi __builtin_vis_fpack16 (v4hi);
48009     v8qi __builtin_vis_fpack32 (v2si, v8qi);
48010     v2hi __builtin_vis_fpackfix (v2si);
48011     v8qi __builtin_vis_fpmerge (v4qi, v4qi);
48012
48013     int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
48014
48015     long __builtin_vis_edge8 (void *, void *);
48016     long __builtin_vis_edge8l (void *, void *);
48017     long __builtin_vis_edge16 (void *, void *);
48018     long __builtin_vis_edge16l (void *, void *);
48019     long __builtin_vis_edge32 (void *, void *);
48020     long __builtin_vis_edge32l (void *, void *);
48021
48022     long __builtin_vis_fcmple16 (v4hi, v4hi);
48023     long __builtin_vis_fcmple32 (v2si, v2si);
48024     long __builtin_vis_fcmpne16 (v4hi, v4hi);
48025     long __builtin_vis_fcmpne32 (v2si, v2si);
48026     long __builtin_vis_fcmpgt16 (v4hi, v4hi);
48027     long __builtin_vis_fcmpgt32 (v2si, v2si);
48028     long __builtin_vis_fcmpeq16 (v4hi, v4hi);
48029     long __builtin_vis_fcmpeq32 (v2si, v2si);
48030
48031     v4hi __builtin_vis_fpadd16 (v4hi, v4hi);
48032     v2hi __builtin_vis_fpadd16s (v2hi, v2hi);
48033     v2si __builtin_vis_fpadd32 (v2si, v2si);
48034     v1si __builtin_vis_fpadd32s (v1si, v1si);
48035     v4hi __builtin_vis_fpsub16 (v4hi, v4hi);
48036     v2hi __builtin_vis_fpsub16s (v2hi, v2hi);
48037     v2si __builtin_vis_fpsub32 (v2si, v2si);
48038     v1si __builtin_vis_fpsub32s (v1si, v1si);
48039
48040     long __builtin_vis_array8 (long, long);
48041     long __builtin_vis_array16 (long, long);
48042     long __builtin_vis_array32 (long, long);
48043
48044 When you use the '-mvis2' switch, the VIS version 2.0 built-in
48045functions also become available:
48046
48047     long __builtin_vis_bmask (long, long);
48048     int64_t __builtin_vis_bshuffledi (int64_t, int64_t);
48049     v2si __builtin_vis_bshufflev2si (v2si, v2si);
48050     v4hi __builtin_vis_bshufflev2si (v4hi, v4hi);
48051     v8qi __builtin_vis_bshufflev2si (v8qi, v8qi);
48052
48053     long __builtin_vis_edge8n (void *, void *);
48054     long __builtin_vis_edge8ln (void *, void *);
48055     long __builtin_vis_edge16n (void *, void *);
48056     long __builtin_vis_edge16ln (void *, void *);
48057     long __builtin_vis_edge32n (void *, void *);
48058     long __builtin_vis_edge32ln (void *, void *);
48059
48060 When you use the '-mvis3' switch, the VIS version 3.0 built-in
48061functions also become available:
48062
48063     void __builtin_vis_cmask8 (long);
48064     void __builtin_vis_cmask16 (long);
48065     void __builtin_vis_cmask32 (long);
48066
48067     v4hi __builtin_vis_fchksm16 (v4hi, v4hi);
48068
48069     v4hi __builtin_vis_fsll16 (v4hi, v4hi);
48070     v4hi __builtin_vis_fslas16 (v4hi, v4hi);
48071     v4hi __builtin_vis_fsrl16 (v4hi, v4hi);
48072     v4hi __builtin_vis_fsra16 (v4hi, v4hi);
48073     v2si __builtin_vis_fsll16 (v2si, v2si);
48074     v2si __builtin_vis_fslas16 (v2si, v2si);
48075     v2si __builtin_vis_fsrl16 (v2si, v2si);
48076     v2si __builtin_vis_fsra16 (v2si, v2si);
48077
48078     long __builtin_vis_pdistn (v8qi, v8qi);
48079
48080     v4hi __builtin_vis_fmean16 (v4hi, v4hi);
48081
48082     int64_t __builtin_vis_fpadd64 (int64_t, int64_t);
48083     int64_t __builtin_vis_fpsub64 (int64_t, int64_t);
48084
48085     v4hi __builtin_vis_fpadds16 (v4hi, v4hi);
48086     v2hi __builtin_vis_fpadds16s (v2hi, v2hi);
48087     v4hi __builtin_vis_fpsubs16 (v4hi, v4hi);
48088     v2hi __builtin_vis_fpsubs16s (v2hi, v2hi);
48089     v2si __builtin_vis_fpadds32 (v2si, v2si);
48090     v1si __builtin_vis_fpadds32s (v1si, v1si);
48091     v2si __builtin_vis_fpsubs32 (v2si, v2si);
48092     v1si __builtin_vis_fpsubs32s (v1si, v1si);
48093
48094     long __builtin_vis_fucmple8 (v8qi, v8qi);
48095     long __builtin_vis_fucmpne8 (v8qi, v8qi);
48096     long __builtin_vis_fucmpgt8 (v8qi, v8qi);
48097     long __builtin_vis_fucmpeq8 (v8qi, v8qi);
48098
48099     float __builtin_vis_fhadds (float, float);
48100     double __builtin_vis_fhaddd (double, double);
48101     float __builtin_vis_fhsubs (float, float);
48102     double __builtin_vis_fhsubd (double, double);
48103     float __builtin_vis_fnhadds (float, float);
48104     double __builtin_vis_fnhaddd (double, double);
48105
48106     int64_t __builtin_vis_umulxhi (int64_t, int64_t);
48107     int64_t __builtin_vis_xmulx (int64_t, int64_t);
48108     int64_t __builtin_vis_xmulxhi (int64_t, int64_t);
48109
48110 When you use the '-mvis4' switch, the VIS version 4.0 built-in
48111functions also become available:
48112
48113     v8qi __builtin_vis_fpadd8 (v8qi, v8qi);
48114     v8qi __builtin_vis_fpadds8 (v8qi, v8qi);
48115     v8qi __builtin_vis_fpaddus8 (v8qi, v8qi);
48116     v4hi __builtin_vis_fpaddus16 (v4hi, v4hi);
48117
48118     v8qi __builtin_vis_fpsub8 (v8qi, v8qi);
48119     v8qi __builtin_vis_fpsubs8 (v8qi, v8qi);
48120     v8qi __builtin_vis_fpsubus8 (v8qi, v8qi);
48121     v4hi __builtin_vis_fpsubus16 (v4hi, v4hi);
48122
48123     long __builtin_vis_fpcmple8 (v8qi, v8qi);
48124     long __builtin_vis_fpcmpgt8 (v8qi, v8qi);
48125     long __builtin_vis_fpcmpule16 (v4hi, v4hi);
48126     long __builtin_vis_fpcmpugt16 (v4hi, v4hi);
48127     long __builtin_vis_fpcmpule32 (v2si, v2si);
48128     long __builtin_vis_fpcmpugt32 (v2si, v2si);
48129
48130     v8qi __builtin_vis_fpmax8 (v8qi, v8qi);
48131     v4hi __builtin_vis_fpmax16 (v4hi, v4hi);
48132     v2si __builtin_vis_fpmax32 (v2si, v2si);
48133
48134     v8qi __builtin_vis_fpmaxu8 (v8qi, v8qi);
48135     v4hi __builtin_vis_fpmaxu16 (v4hi, v4hi);
48136     v2si __builtin_vis_fpmaxu32 (v2si, v2si);
48137
48138
48139     v8qi __builtin_vis_fpmin8 (v8qi, v8qi);
48140     v4hi __builtin_vis_fpmin16 (v4hi, v4hi);
48141     v2si __builtin_vis_fpmin32 (v2si, v2si);
48142
48143     v8qi __builtin_vis_fpminu8 (v8qi, v8qi);
48144     v4hi __builtin_vis_fpminu16 (v4hi, v4hi);
48145     v2si __builtin_vis_fpminu32 (v2si, v2si);
48146
48147 When you use the '-mvis4b' switch, the VIS version 4.0B built-in
48148functions also become available:
48149
48150     v8qi __builtin_vis_dictunpack8 (double, int);
48151     v4hi __builtin_vis_dictunpack16 (double, int);
48152     v2si __builtin_vis_dictunpack32 (double, int);
48153
48154     long __builtin_vis_fpcmple8shl (v8qi, v8qi, int);
48155     long __builtin_vis_fpcmpgt8shl (v8qi, v8qi, int);
48156     long __builtin_vis_fpcmpeq8shl (v8qi, v8qi, int);
48157     long __builtin_vis_fpcmpne8shl (v8qi, v8qi, int);
48158
48159     long __builtin_vis_fpcmple16shl (v4hi, v4hi, int);
48160     long __builtin_vis_fpcmpgt16shl (v4hi, v4hi, int);
48161     long __builtin_vis_fpcmpeq16shl (v4hi, v4hi, int);
48162     long __builtin_vis_fpcmpne16shl (v4hi, v4hi, int);
48163
48164     long __builtin_vis_fpcmple32shl (v2si, v2si, int);
48165     long __builtin_vis_fpcmpgt32shl (v2si, v2si, int);
48166     long __builtin_vis_fpcmpeq32shl (v2si, v2si, int);
48167     long __builtin_vis_fpcmpne32shl (v2si, v2si, int);
48168
48169     long __builtin_vis_fpcmpule8shl (v8qi, v8qi, int);
48170     long __builtin_vis_fpcmpugt8shl (v8qi, v8qi, int);
48171     long __builtin_vis_fpcmpule16shl (v4hi, v4hi, int);
48172     long __builtin_vis_fpcmpugt16shl (v4hi, v4hi, int);
48173     long __builtin_vis_fpcmpule32shl (v2si, v2si, int);
48174     long __builtin_vis_fpcmpugt32shl (v2si, v2si, int);
48175
48176     long __builtin_vis_fpcmpde8shl (v8qi, v8qi, int);
48177     long __builtin_vis_fpcmpde16shl (v4hi, v4hi, int);
48178     long __builtin_vis_fpcmpde32shl (v2si, v2si, int);
48179
48180     long __builtin_vis_fpcmpur8shl (v8qi, v8qi, int);
48181     long __builtin_vis_fpcmpur16shl (v4hi, v4hi, int);
48182     long __builtin_vis_fpcmpur32shl (v2si, v2si, int);
48183
48184
48185File: gcc.info,  Node: SPU Built-in Functions,  Next: TI C6X Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
48186
481876.59.29 SPU Built-in Functions
48188------------------------------
48189
48190GCC provides extensions for the SPU processor as described in the
48191Sony/Toshiba/IBM SPU Language Extensions Specification.  GCC's
48192implementation differs in several ways.
48193
48194   * The optional extension of specifying vector constants in
48195     parentheses is not supported.
48196
48197   * A vector initializer requires no cast if the vector constant is of
48198     the same type as the variable it is initializing.
48199
48200   * If 'signed' or 'unsigned' is omitted, the signedness of the vector
48201     type is the default signedness of the base type.  The default
48202     varies depending on the operating system, so a portable program
48203     should always specify the signedness.
48204
48205   * By default, the keyword '__vector' is added.  The macro 'vector' is
48206     defined in '<spu_intrinsics.h>' and can be undefined.
48207
48208   * GCC allows using a 'typedef' name as the type specifier for a
48209     vector type.
48210
48211   * For C, overloaded functions are implemented with macros so the
48212     following does not work:
48213
48214            spu_add ((vector signed int){1, 2, 3, 4}, foo);
48215
48216     Since 'spu_add' is a macro, the vector constant in the example is
48217     treated as four separate arguments.  Wrap the entire argument in
48218     parentheses for this to work.
48219
48220   * The extended version of '__builtin_expect' is not supported.
48221
48222 _Note:_ Only the interface described in the aforementioned
48223specification is supported.  Internally, GCC uses built-in functions to
48224implement the required functionality, but these are not supported and
48225are subject to change without notice.
48226
48227
48228File: gcc.info,  Node: TI C6X Built-in Functions,  Next: TILE-Gx Built-in Functions,  Prev: SPU Built-in Functions,  Up: Target Builtins
48229
482306.59.30 TI C6X Built-in Functions
48231---------------------------------
48232
48233GCC provides intrinsics to access certain instructions of the TI C6X
48234processors.  These intrinsics, listed below, are available after
48235inclusion of the 'c6x_intrinsics.h' header file.  They map directly to
48236C6X instructions.
48237
48238
48239     int _sadd (int, int)
48240     int _ssub (int, int)
48241     int _sadd2 (int, int)
48242     int _ssub2 (int, int)
48243     long long _mpy2 (int, int)
48244     long long _smpy2 (int, int)
48245     int _add4 (int, int)
48246     int _sub4 (int, int)
48247     int _saddu4 (int, int)
48248
48249     int _smpy (int, int)
48250     int _smpyh (int, int)
48251     int _smpyhl (int, int)
48252     int _smpylh (int, int)
48253
48254     int _sshl (int, int)
48255     int _subc (int, int)
48256
48257     int _avg2 (int, int)
48258     int _avgu4 (int, int)
48259
48260     int _clrr (int, int)
48261     int _extr (int, int)
48262     int _extru (int, int)
48263     int _abs (int)
48264     int _abs2 (int)
48265
48266
48267
48268File: gcc.info,  Node: TILE-Gx Built-in Functions,  Next: TILEPro Built-in Functions,  Prev: TI C6X Built-in Functions,  Up: Target Builtins
48269
482706.59.31 TILE-Gx Built-in Functions
48271----------------------------------
48272
48273GCC provides intrinsics to access every instruction of the TILE-Gx
48274processor.  The intrinsics are of the form:
48275
48276
48277     unsigned long long __insn_OP (...)
48278
48279
48280 Where OP is the name of the instruction.  Refer to the ISA manual for
48281the complete list of instructions.
48282
48283 GCC also provides intrinsics to directly access the network registers.
48284The intrinsics are:
48285
48286
48287     unsigned long long __tile_idn0_receive (void)
48288     unsigned long long __tile_idn1_receive (void)
48289     unsigned long long __tile_udn0_receive (void)
48290     unsigned long long __tile_udn1_receive (void)
48291     unsigned long long __tile_udn2_receive (void)
48292     unsigned long long __tile_udn3_receive (void)
48293     void __tile_idn_send (unsigned long long)
48294     void __tile_udn_send (unsigned long long)
48295
48296
48297 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
48298that no network operations before it are reordered with those after it.
48299
48300
48301File: gcc.info,  Node: TILEPro Built-in Functions,  Next: x86 Built-in Functions,  Prev: TILE-Gx Built-in Functions,  Up: Target Builtins
48302
483036.59.32 TILEPro Built-in Functions
48304----------------------------------
48305
48306GCC provides intrinsics to access every instruction of the TILEPro
48307processor.  The intrinsics are of the form:
48308
48309
48310     unsigned __insn_OP (...)
48311
48312
48313where OP is the name of the instruction.  Refer to the ISA manual for
48314the complete list of instructions.
48315
48316 GCC also provides intrinsics to directly access the network registers.
48317The intrinsics are:
48318
48319
48320     unsigned __tile_idn0_receive (void)
48321     unsigned __tile_idn1_receive (void)
48322     unsigned __tile_sn_receive (void)
48323     unsigned __tile_udn0_receive (void)
48324     unsigned __tile_udn1_receive (void)
48325     unsigned __tile_udn2_receive (void)
48326     unsigned __tile_udn3_receive (void)
48327     void __tile_idn_send (unsigned)
48328     void __tile_sn_send (unsigned)
48329     void __tile_udn_send (unsigned)
48330
48331
48332 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
48333that no network operations before it are reordered with those after it.
48334
48335
48336File: gcc.info,  Node: x86 Built-in Functions,  Next: x86 transactional memory intrinsics,  Prev: TILEPro Built-in Functions,  Up: Target Builtins
48337
483386.59.33 x86 Built-in Functions
48339------------------------------
48340
48341These built-in functions are available for the x86-32 and x86-64 family
48342of computers, depending on the command-line switches used.
48343
48344 If you specify command-line switches such as '-msse', the compiler
48345could use the extended instruction sets even if the built-ins are not
48346used explicitly in the program.  For this reason, applications that
48347perform run-time CPU detection must compile separate files for each
48348supported architecture, using the appropriate flags.  In particular, the
48349file containing the CPU detection code should be compiled without these
48350options.
48351
48352 The following machine modes are available for use with MMX built-in
48353functions (*note Vector Extensions::): 'V2SI' for a vector of two 32-bit
48354integers, 'V4HI' for a vector of four 16-bit integers, and 'V8QI' for a
48355vector of eight 8-bit integers.  Some of the built-in functions operate
48356on MMX registers as a whole 64-bit entity, these use 'V1DI' as their
48357mode.
48358
48359 If 3DNow! extensions are enabled, 'V2SF' is used as a mode for a vector
48360of two 32-bit floating-point values.
48361
48362 If SSE extensions are enabled, 'V4SF' is used for a vector of four
4836332-bit floating-point values.  Some instructions use a vector of four
4836432-bit integers, these use 'V4SI'.  Finally, some instructions operate
48365on an entire vector register, interpreting it as a 128-bit integer,
48366these use mode 'TI'.
48367
48368 The x86-32 and x86-64 family of processors use additional built-in
48369functions for efficient use of 'TF' ('__float128') 128-bit floating
48370point and 'TC' 128-bit complex floating-point values.
48371
48372 The following floating-point built-in functions are always available.
48373All of them implement the function that is part of the name.
48374
48375     __float128 __builtin_fabsq (__float128)
48376     __float128 __builtin_copysignq (__float128, __float128)
48377
48378 The following built-in functions are always available.
48379
48380'__float128 __builtin_infq (void)'
48381     Similar to '__builtin_inf', except the return type is '__float128'.
48382
48383'__float128 __builtin_huge_valq (void)'
48384     Similar to '__builtin_huge_val', except the return type is
48385     '__float128'.
48386
48387'__float128 __builtin_nanq (void)'
48388     Similar to '__builtin_nan', except the return type is '__float128'.
48389
48390'__float128 __builtin_nansq (void)'
48391     Similar to '__builtin_nans', except the return type is
48392     '__float128'.
48393
48394 The following built-in function is always available.
48395
48396'void __builtin_ia32_pause (void)'
48397     Generates the 'pause' machine instruction with a compiler memory
48398     barrier.
48399
48400 The following built-in functions are always available and can be used
48401to check the target platform type.
48402
48403 -- Built-in Function: void __builtin_cpu_init (void)
48404     This function runs the CPU detection code to check the type of CPU
48405     and the features supported.  This built-in function needs to be
48406     invoked along with the built-in functions to check CPU type and
48407     features, '__builtin_cpu_is' and '__builtin_cpu_supports', only
48408     when used in a function that is executed before any constructors
48409     are called.  The CPU detection code is automatically executed in a
48410     very high priority constructor.
48411
48412     For example, this function has to be used in 'ifunc' resolvers that
48413     check for CPU type using the built-in functions '__builtin_cpu_is'
48414     and '__builtin_cpu_supports', or in constructors on targets that
48415     don't support constructor priority.
48416
48417          static void (*resolve_memcpy (void)) (void)
48418          {
48419            // ifunc resolvers fire before constructors, explicitly call the init
48420            // function.
48421            __builtin_cpu_init ();
48422            if (__builtin_cpu_supports ("ssse3"))
48423              return ssse3_memcpy; // super fast memcpy with ssse3 instructions.
48424            else
48425              return default_memcpy;
48426          }
48427
48428          void *memcpy (void *, const void *, size_t)
48429               __attribute__ ((ifunc ("resolve_memcpy")));
48430
48431 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
48432     This function returns a positive integer if the run-time CPU is of
48433     type CPUNAME and returns '0' otherwise.  The following CPU names
48434     can be detected:
48435
48436     'intel'
48437          Intel CPU.
48438
48439     'atom'
48440          Intel Atom CPU.
48441
48442     'core2'
48443          Intel Core 2 CPU.
48444
48445     'corei7'
48446          Intel Core i7 CPU.
48447
48448     'nehalem'
48449          Intel Core i7 Nehalem CPU.
48450
48451     'westmere'
48452          Intel Core i7 Westmere CPU.
48453
48454     'sandybridge'
48455          Intel Core i7 Sandy Bridge CPU.
48456
48457     'amd'
48458          AMD CPU.
48459
48460     'amdfam10h'
48461          AMD Family 10h CPU.
48462
48463     'barcelona'
48464          AMD Family 10h Barcelona CPU.
48465
48466     'shanghai'
48467          AMD Family 10h Shanghai CPU.
48468
48469     'istanbul'
48470          AMD Family 10h Istanbul CPU.
48471
48472     'btver1'
48473          AMD Family 14h CPU.
48474
48475     'amdfam15h'
48476          AMD Family 15h CPU.
48477
48478     'bdver1'
48479          AMD Family 15h Bulldozer version 1.
48480
48481     'bdver2'
48482          AMD Family 15h Bulldozer version 2.
48483
48484     'bdver3'
48485          AMD Family 15h Bulldozer version 3.
48486
48487     'bdver4'
48488          AMD Family 15h Bulldozer version 4.
48489
48490     'btver2'
48491          AMD Family 16h CPU.
48492
48493     'amdfam17h'
48494          AMD Family 17h CPU.
48495
48496     'znver1'
48497          AMD Family 17h Zen version 1.
48498
48499     Here is an example:
48500          if (__builtin_cpu_is ("corei7"))
48501            {
48502               do_corei7 (); // Core i7 specific implementation.
48503            }
48504          else
48505            {
48506               do_generic (); // Generic implementation.
48507            }
48508
48509 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
48510     This function returns a positive integer if the run-time CPU
48511     supports FEATURE and returns '0' otherwise.  The following features
48512     can be detected:
48513
48514     'cmov'
48515          CMOV instruction.
48516     'mmx'
48517          MMX instructions.
48518     'popcnt'
48519          POPCNT instruction.
48520     'sse'
48521          SSE instructions.
48522     'sse2'
48523          SSE2 instructions.
48524     'sse3'
48525          SSE3 instructions.
48526     'ssse3'
48527          SSSE3 instructions.
48528     'sse4.1'
48529          SSE4.1 instructions.
48530     'sse4.2'
48531          SSE4.2 instructions.
48532     'avx'
48533          AVX instructions.
48534     'avx2'
48535          AVX2 instructions.
48536     'avx512f'
48537          AVX512F instructions.
48538
48539     Here is an example:
48540          if (__builtin_cpu_supports ("popcnt"))
48541            {
48542               asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc");
48543            }
48544          else
48545            {
48546               count = generic_countbits (n); //generic implementation.
48547            }
48548
48549 The following built-in functions are made available by '-mmmx'.  All of
48550them generate the machine instruction that is part of the name.
48551
48552     v8qi __builtin_ia32_paddb (v8qi, v8qi)
48553     v4hi __builtin_ia32_paddw (v4hi, v4hi)
48554     v2si __builtin_ia32_paddd (v2si, v2si)
48555     v8qi __builtin_ia32_psubb (v8qi, v8qi)
48556     v4hi __builtin_ia32_psubw (v4hi, v4hi)
48557     v2si __builtin_ia32_psubd (v2si, v2si)
48558     v8qi __builtin_ia32_paddsb (v8qi, v8qi)
48559     v4hi __builtin_ia32_paddsw (v4hi, v4hi)
48560     v8qi __builtin_ia32_psubsb (v8qi, v8qi)
48561     v4hi __builtin_ia32_psubsw (v4hi, v4hi)
48562     v8qi __builtin_ia32_paddusb (v8qi, v8qi)
48563     v4hi __builtin_ia32_paddusw (v4hi, v4hi)
48564     v8qi __builtin_ia32_psubusb (v8qi, v8qi)
48565     v4hi __builtin_ia32_psubusw (v4hi, v4hi)
48566     v4hi __builtin_ia32_pmullw (v4hi, v4hi)
48567     v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
48568     di __builtin_ia32_pand (di, di)
48569     di __builtin_ia32_pandn (di,di)
48570     di __builtin_ia32_por (di, di)
48571     di __builtin_ia32_pxor (di, di)
48572     v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
48573     v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
48574     v2si __builtin_ia32_pcmpeqd (v2si, v2si)
48575     v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
48576     v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
48577     v2si __builtin_ia32_pcmpgtd (v2si, v2si)
48578     v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
48579     v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
48580     v2si __builtin_ia32_punpckhdq (v2si, v2si)
48581     v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
48582     v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
48583     v2si __builtin_ia32_punpckldq (v2si, v2si)
48584     v8qi __builtin_ia32_packsswb (v4hi, v4hi)
48585     v4hi __builtin_ia32_packssdw (v2si, v2si)
48586     v8qi __builtin_ia32_packuswb (v4hi, v4hi)
48587
48588     v4hi __builtin_ia32_psllw (v4hi, v4hi)
48589     v2si __builtin_ia32_pslld (v2si, v2si)
48590     v1di __builtin_ia32_psllq (v1di, v1di)
48591     v4hi __builtin_ia32_psrlw (v4hi, v4hi)
48592     v2si __builtin_ia32_psrld (v2si, v2si)
48593     v1di __builtin_ia32_psrlq (v1di, v1di)
48594     v4hi __builtin_ia32_psraw (v4hi, v4hi)
48595     v2si __builtin_ia32_psrad (v2si, v2si)
48596     v4hi __builtin_ia32_psllwi (v4hi, int)
48597     v2si __builtin_ia32_pslldi (v2si, int)
48598     v1di __builtin_ia32_psllqi (v1di, int)
48599     v4hi __builtin_ia32_psrlwi (v4hi, int)
48600     v2si __builtin_ia32_psrldi (v2si, int)
48601     v1di __builtin_ia32_psrlqi (v1di, int)
48602     v4hi __builtin_ia32_psrawi (v4hi, int)
48603     v2si __builtin_ia32_psradi (v2si, int)
48604
48605
48606 The following built-in functions are made available either with
48607'-msse', or with '-m3dnowa'.  All of them generate the machine
48608instruction that is part of the name.
48609
48610     v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
48611     v8qi __builtin_ia32_pavgb (v8qi, v8qi)
48612     v4hi __builtin_ia32_pavgw (v4hi, v4hi)
48613     v1di __builtin_ia32_psadbw (v8qi, v8qi)
48614     v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
48615     v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
48616     v8qi __builtin_ia32_pminub (v8qi, v8qi)
48617     v4hi __builtin_ia32_pminsw (v4hi, v4hi)
48618     int __builtin_ia32_pmovmskb (v8qi)
48619     void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
48620     void __builtin_ia32_movntq (di *, di)
48621     void __builtin_ia32_sfence (void)
48622
48623 The following built-in functions are available when '-msse' is used.
48624All of them generate the machine instruction that is part of the name.
48625
48626     int __builtin_ia32_comieq (v4sf, v4sf)
48627     int __builtin_ia32_comineq (v4sf, v4sf)
48628     int __builtin_ia32_comilt (v4sf, v4sf)
48629     int __builtin_ia32_comile (v4sf, v4sf)
48630     int __builtin_ia32_comigt (v4sf, v4sf)
48631     int __builtin_ia32_comige (v4sf, v4sf)
48632     int __builtin_ia32_ucomieq (v4sf, v4sf)
48633     int __builtin_ia32_ucomineq (v4sf, v4sf)
48634     int __builtin_ia32_ucomilt (v4sf, v4sf)
48635     int __builtin_ia32_ucomile (v4sf, v4sf)
48636     int __builtin_ia32_ucomigt (v4sf, v4sf)
48637     int __builtin_ia32_ucomige (v4sf, v4sf)
48638     v4sf __builtin_ia32_addps (v4sf, v4sf)
48639     v4sf __builtin_ia32_subps (v4sf, v4sf)
48640     v4sf __builtin_ia32_mulps (v4sf, v4sf)
48641     v4sf __builtin_ia32_divps (v4sf, v4sf)
48642     v4sf __builtin_ia32_addss (v4sf, v4sf)
48643     v4sf __builtin_ia32_subss (v4sf, v4sf)
48644     v4sf __builtin_ia32_mulss (v4sf, v4sf)
48645     v4sf __builtin_ia32_divss (v4sf, v4sf)
48646     v4sf __builtin_ia32_cmpeqps (v4sf, v4sf)
48647     v4sf __builtin_ia32_cmpltps (v4sf, v4sf)
48648     v4sf __builtin_ia32_cmpleps (v4sf, v4sf)
48649     v4sf __builtin_ia32_cmpgtps (v4sf, v4sf)
48650     v4sf __builtin_ia32_cmpgeps (v4sf, v4sf)
48651     v4sf __builtin_ia32_cmpunordps (v4sf, v4sf)
48652     v4sf __builtin_ia32_cmpneqps (v4sf, v4sf)
48653     v4sf __builtin_ia32_cmpnltps (v4sf, v4sf)
48654     v4sf __builtin_ia32_cmpnleps (v4sf, v4sf)
48655     v4sf __builtin_ia32_cmpngtps (v4sf, v4sf)
48656     v4sf __builtin_ia32_cmpngeps (v4sf, v4sf)
48657     v4sf __builtin_ia32_cmpordps (v4sf, v4sf)
48658     v4sf __builtin_ia32_cmpeqss (v4sf, v4sf)
48659     v4sf __builtin_ia32_cmpltss (v4sf, v4sf)
48660     v4sf __builtin_ia32_cmpless (v4sf, v4sf)
48661     v4sf __builtin_ia32_cmpunordss (v4sf, v4sf)
48662     v4sf __builtin_ia32_cmpneqss (v4sf, v4sf)
48663     v4sf __builtin_ia32_cmpnltss (v4sf, v4sf)
48664     v4sf __builtin_ia32_cmpnless (v4sf, v4sf)
48665     v4sf __builtin_ia32_cmpordss (v4sf, v4sf)
48666     v4sf __builtin_ia32_maxps (v4sf, v4sf)
48667     v4sf __builtin_ia32_maxss (v4sf, v4sf)
48668     v4sf __builtin_ia32_minps (v4sf, v4sf)
48669     v4sf __builtin_ia32_minss (v4sf, v4sf)
48670     v4sf __builtin_ia32_andps (v4sf, v4sf)
48671     v4sf __builtin_ia32_andnps (v4sf, v4sf)
48672     v4sf __builtin_ia32_orps (v4sf, v4sf)
48673     v4sf __builtin_ia32_xorps (v4sf, v4sf)
48674     v4sf __builtin_ia32_movss (v4sf, v4sf)
48675     v4sf __builtin_ia32_movhlps (v4sf, v4sf)
48676     v4sf __builtin_ia32_movlhps (v4sf, v4sf)
48677     v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
48678     v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
48679     v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
48680     v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
48681     v2si __builtin_ia32_cvtps2pi (v4sf)
48682     int __builtin_ia32_cvtss2si (v4sf)
48683     v2si __builtin_ia32_cvttps2pi (v4sf)
48684     int __builtin_ia32_cvttss2si (v4sf)
48685     v4sf __builtin_ia32_rcpps (v4sf)
48686     v4sf __builtin_ia32_rsqrtps (v4sf)
48687     v4sf __builtin_ia32_sqrtps (v4sf)
48688     v4sf __builtin_ia32_rcpss (v4sf)
48689     v4sf __builtin_ia32_rsqrtss (v4sf)
48690     v4sf __builtin_ia32_sqrtss (v4sf)
48691     v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
48692     void __builtin_ia32_movntps (float *, v4sf)
48693     int __builtin_ia32_movmskps (v4sf)
48694
48695 The following built-in functions are available when '-msse' is used.
48696
48697'v4sf __builtin_ia32_loadups (float *)'
48698     Generates the 'movups' machine instruction as a load from memory.
48699'void __builtin_ia32_storeups (float *, v4sf)'
48700     Generates the 'movups' machine instruction as a store to memory.
48701'v4sf __builtin_ia32_loadss (float *)'
48702     Generates the 'movss' machine instruction as a load from memory.
48703'v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
48704     Generates the 'movhps' machine instruction as a load from memory.
48705'v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
48706     Generates the 'movlps' machine instruction as a load from memory
48707'void __builtin_ia32_storehps (v2sf *, v4sf)'
48708     Generates the 'movhps' machine instruction as a store to memory.
48709'void __builtin_ia32_storelps (v2sf *, v4sf)'
48710     Generates the 'movlps' machine instruction as a store to memory.
48711
48712 The following built-in functions are available when '-msse2' is used.
48713All of them generate the machine instruction that is part of the name.
48714
48715     int __builtin_ia32_comisdeq (v2df, v2df)
48716     int __builtin_ia32_comisdlt (v2df, v2df)
48717     int __builtin_ia32_comisdle (v2df, v2df)
48718     int __builtin_ia32_comisdgt (v2df, v2df)
48719     int __builtin_ia32_comisdge (v2df, v2df)
48720     int __builtin_ia32_comisdneq (v2df, v2df)
48721     int __builtin_ia32_ucomisdeq (v2df, v2df)
48722     int __builtin_ia32_ucomisdlt (v2df, v2df)
48723     int __builtin_ia32_ucomisdle (v2df, v2df)
48724     int __builtin_ia32_ucomisdgt (v2df, v2df)
48725     int __builtin_ia32_ucomisdge (v2df, v2df)
48726     int __builtin_ia32_ucomisdneq (v2df, v2df)
48727     v2df __builtin_ia32_cmpeqpd (v2df, v2df)
48728     v2df __builtin_ia32_cmpltpd (v2df, v2df)
48729     v2df __builtin_ia32_cmplepd (v2df, v2df)
48730     v2df __builtin_ia32_cmpgtpd (v2df, v2df)
48731     v2df __builtin_ia32_cmpgepd (v2df, v2df)
48732     v2df __builtin_ia32_cmpunordpd (v2df, v2df)
48733     v2df __builtin_ia32_cmpneqpd (v2df, v2df)
48734     v2df __builtin_ia32_cmpnltpd (v2df, v2df)
48735     v2df __builtin_ia32_cmpnlepd (v2df, v2df)
48736     v2df __builtin_ia32_cmpngtpd (v2df, v2df)
48737     v2df __builtin_ia32_cmpngepd (v2df, v2df)
48738     v2df __builtin_ia32_cmpordpd (v2df, v2df)
48739     v2df __builtin_ia32_cmpeqsd (v2df, v2df)
48740     v2df __builtin_ia32_cmpltsd (v2df, v2df)
48741     v2df __builtin_ia32_cmplesd (v2df, v2df)
48742     v2df __builtin_ia32_cmpunordsd (v2df, v2df)
48743     v2df __builtin_ia32_cmpneqsd (v2df, v2df)
48744     v2df __builtin_ia32_cmpnltsd (v2df, v2df)
48745     v2df __builtin_ia32_cmpnlesd (v2df, v2df)
48746     v2df __builtin_ia32_cmpordsd (v2df, v2df)
48747     v2di __builtin_ia32_paddq (v2di, v2di)
48748     v2di __builtin_ia32_psubq (v2di, v2di)
48749     v2df __builtin_ia32_addpd (v2df, v2df)
48750     v2df __builtin_ia32_subpd (v2df, v2df)
48751     v2df __builtin_ia32_mulpd (v2df, v2df)
48752     v2df __builtin_ia32_divpd (v2df, v2df)
48753     v2df __builtin_ia32_addsd (v2df, v2df)
48754     v2df __builtin_ia32_subsd (v2df, v2df)
48755     v2df __builtin_ia32_mulsd (v2df, v2df)
48756     v2df __builtin_ia32_divsd (v2df, v2df)
48757     v2df __builtin_ia32_minpd (v2df, v2df)
48758     v2df __builtin_ia32_maxpd (v2df, v2df)
48759     v2df __builtin_ia32_minsd (v2df, v2df)
48760     v2df __builtin_ia32_maxsd (v2df, v2df)
48761     v2df __builtin_ia32_andpd (v2df, v2df)
48762     v2df __builtin_ia32_andnpd (v2df, v2df)
48763     v2df __builtin_ia32_orpd (v2df, v2df)
48764     v2df __builtin_ia32_xorpd (v2df, v2df)
48765     v2df __builtin_ia32_movsd (v2df, v2df)
48766     v2df __builtin_ia32_unpckhpd (v2df, v2df)
48767     v2df __builtin_ia32_unpcklpd (v2df, v2df)
48768     v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
48769     v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
48770     v4si __builtin_ia32_paddd128 (v4si, v4si)
48771     v2di __builtin_ia32_paddq128 (v2di, v2di)
48772     v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
48773     v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
48774     v4si __builtin_ia32_psubd128 (v4si, v4si)
48775     v2di __builtin_ia32_psubq128 (v2di, v2di)
48776     v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
48777     v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
48778     v2di __builtin_ia32_pand128 (v2di, v2di)
48779     v2di __builtin_ia32_pandn128 (v2di, v2di)
48780     v2di __builtin_ia32_por128 (v2di, v2di)
48781     v2di __builtin_ia32_pxor128 (v2di, v2di)
48782     v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
48783     v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
48784     v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
48785     v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
48786     v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
48787     v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
48788     v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
48789     v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
48790     v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
48791     v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
48792     v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
48793     v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
48794     v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
48795     v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
48796     v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
48797     v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
48798     v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
48799     v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
48800     v4si __builtin_ia32_punpckldq128 (v4si, v4si)
48801     v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
48802     v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
48803     v8hi __builtin_ia32_packssdw128 (v4si, v4si)
48804     v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
48805     v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
48806     void __builtin_ia32_maskmovdqu (v16qi, v16qi)
48807     v2df __builtin_ia32_loadupd (double *)
48808     void __builtin_ia32_storeupd (double *, v2df)
48809     v2df __builtin_ia32_loadhpd (v2df, double const *)
48810     v2df __builtin_ia32_loadlpd (v2df, double const *)
48811     int __builtin_ia32_movmskpd (v2df)
48812     int __builtin_ia32_pmovmskb128 (v16qi)
48813     void __builtin_ia32_movnti (int *, int)
48814     void __builtin_ia32_movnti64 (long long int *, long long int)
48815     void __builtin_ia32_movntpd (double *, v2df)
48816     void __builtin_ia32_movntdq (v2df *, v2df)
48817     v4si __builtin_ia32_pshufd (v4si, int)
48818     v8hi __builtin_ia32_pshuflw (v8hi, int)
48819     v8hi __builtin_ia32_pshufhw (v8hi, int)
48820     v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
48821     v2df __builtin_ia32_sqrtpd (v2df)
48822     v2df __builtin_ia32_sqrtsd (v2df)
48823     v2df __builtin_ia32_shufpd (v2df, v2df, int)
48824     v2df __builtin_ia32_cvtdq2pd (v4si)
48825     v4sf __builtin_ia32_cvtdq2ps (v4si)
48826     v4si __builtin_ia32_cvtpd2dq (v2df)
48827     v2si __builtin_ia32_cvtpd2pi (v2df)
48828     v4sf __builtin_ia32_cvtpd2ps (v2df)
48829     v4si __builtin_ia32_cvttpd2dq (v2df)
48830     v2si __builtin_ia32_cvttpd2pi (v2df)
48831     v2df __builtin_ia32_cvtpi2pd (v2si)
48832     int __builtin_ia32_cvtsd2si (v2df)
48833     int __builtin_ia32_cvttsd2si (v2df)
48834     long long __builtin_ia32_cvtsd2si64 (v2df)
48835     long long __builtin_ia32_cvttsd2si64 (v2df)
48836     v4si __builtin_ia32_cvtps2dq (v4sf)
48837     v2df __builtin_ia32_cvtps2pd (v4sf)
48838     v4si __builtin_ia32_cvttps2dq (v4sf)
48839     v2df __builtin_ia32_cvtsi2sd (v2df, int)
48840     v2df __builtin_ia32_cvtsi642sd (v2df, long long)
48841     v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
48842     v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
48843     void __builtin_ia32_clflush (const void *)
48844     void __builtin_ia32_lfence (void)
48845     void __builtin_ia32_mfence (void)
48846     v16qi __builtin_ia32_loaddqu (const char *)
48847     void __builtin_ia32_storedqu (char *, v16qi)
48848     v1di __builtin_ia32_pmuludq (v2si, v2si)
48849     v2di __builtin_ia32_pmuludq128 (v4si, v4si)
48850     v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
48851     v4si __builtin_ia32_pslld128 (v4si, v4si)
48852     v2di __builtin_ia32_psllq128 (v2di, v2di)
48853     v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
48854     v4si __builtin_ia32_psrld128 (v4si, v4si)
48855     v2di __builtin_ia32_psrlq128 (v2di, v2di)
48856     v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
48857     v4si __builtin_ia32_psrad128 (v4si, v4si)
48858     v2di __builtin_ia32_pslldqi128 (v2di, int)
48859     v8hi __builtin_ia32_psllwi128 (v8hi, int)
48860     v4si __builtin_ia32_pslldi128 (v4si, int)
48861     v2di __builtin_ia32_psllqi128 (v2di, int)
48862     v2di __builtin_ia32_psrldqi128 (v2di, int)
48863     v8hi __builtin_ia32_psrlwi128 (v8hi, int)
48864     v4si __builtin_ia32_psrldi128 (v4si, int)
48865     v2di __builtin_ia32_psrlqi128 (v2di, int)
48866     v8hi __builtin_ia32_psrawi128 (v8hi, int)
48867     v4si __builtin_ia32_psradi128 (v4si, int)
48868     v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
48869     v2di __builtin_ia32_movq128 (v2di)
48870
48871 The following built-in functions are available when '-msse3' is used.
48872All of them generate the machine instruction that is part of the name.
48873
48874     v2df __builtin_ia32_addsubpd (v2df, v2df)
48875     v4sf __builtin_ia32_addsubps (v4sf, v4sf)
48876     v2df __builtin_ia32_haddpd (v2df, v2df)
48877     v4sf __builtin_ia32_haddps (v4sf, v4sf)
48878     v2df __builtin_ia32_hsubpd (v2df, v2df)
48879     v4sf __builtin_ia32_hsubps (v4sf, v4sf)
48880     v16qi __builtin_ia32_lddqu (char const *)
48881     void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
48882     v4sf __builtin_ia32_movshdup (v4sf)
48883     v4sf __builtin_ia32_movsldup (v4sf)
48884     void __builtin_ia32_mwait (unsigned int, unsigned int)
48885
48886 The following built-in functions are available when '-mssse3' is used.
48887All of them generate the machine instruction that is part of the name.
48888
48889     v2si __builtin_ia32_phaddd (v2si, v2si)
48890     v4hi __builtin_ia32_phaddw (v4hi, v4hi)
48891     v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
48892     v2si __builtin_ia32_phsubd (v2si, v2si)
48893     v4hi __builtin_ia32_phsubw (v4hi, v4hi)
48894     v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
48895     v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
48896     v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
48897     v8qi __builtin_ia32_pshufb (v8qi, v8qi)
48898     v8qi __builtin_ia32_psignb (v8qi, v8qi)
48899     v2si __builtin_ia32_psignd (v2si, v2si)
48900     v4hi __builtin_ia32_psignw (v4hi, v4hi)
48901     v1di __builtin_ia32_palignr (v1di, v1di, int)
48902     v8qi __builtin_ia32_pabsb (v8qi)
48903     v2si __builtin_ia32_pabsd (v2si)
48904     v4hi __builtin_ia32_pabsw (v4hi)
48905
48906 The following built-in functions are available when '-mssse3' is used.
48907All of them generate the machine instruction that is part of the name.
48908
48909     v4si __builtin_ia32_phaddd128 (v4si, v4si)
48910     v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
48911     v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
48912     v4si __builtin_ia32_phsubd128 (v4si, v4si)
48913     v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
48914     v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
48915     v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
48916     v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
48917     v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
48918     v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
48919     v4si __builtin_ia32_psignd128 (v4si, v4si)
48920     v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
48921     v2di __builtin_ia32_palignr128 (v2di, v2di, int)
48922     v16qi __builtin_ia32_pabsb128 (v16qi)
48923     v4si __builtin_ia32_pabsd128 (v4si)
48924     v8hi __builtin_ia32_pabsw128 (v8hi)
48925
48926 The following built-in functions are available when '-msse4.1' is used.
48927All of them generate the machine instruction that is part of the name.
48928
48929     v2df __builtin_ia32_blendpd (v2df, v2df, const int)
48930     v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
48931     v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
48932     v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
48933     v2df __builtin_ia32_dppd (v2df, v2df, const int)
48934     v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
48935     v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
48936     v2di __builtin_ia32_movntdqa (v2di *);
48937     v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
48938     v8hi __builtin_ia32_packusdw128 (v4si, v4si)
48939     v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
48940     v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
48941     v2di __builtin_ia32_pcmpeqq (v2di, v2di)
48942     v8hi __builtin_ia32_phminposuw128 (v8hi)
48943     v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
48944     v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
48945     v4si __builtin_ia32_pmaxud128 (v4si, v4si)
48946     v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
48947     v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
48948     v4si __builtin_ia32_pminsd128 (v4si, v4si)
48949     v4si __builtin_ia32_pminud128 (v4si, v4si)
48950     v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
48951     v4si __builtin_ia32_pmovsxbd128 (v16qi)
48952     v2di __builtin_ia32_pmovsxbq128 (v16qi)
48953     v8hi __builtin_ia32_pmovsxbw128 (v16qi)
48954     v2di __builtin_ia32_pmovsxdq128 (v4si)
48955     v4si __builtin_ia32_pmovsxwd128 (v8hi)
48956     v2di __builtin_ia32_pmovsxwq128 (v8hi)
48957     v4si __builtin_ia32_pmovzxbd128 (v16qi)
48958     v2di __builtin_ia32_pmovzxbq128 (v16qi)
48959     v8hi __builtin_ia32_pmovzxbw128 (v16qi)
48960     v2di __builtin_ia32_pmovzxdq128 (v4si)
48961     v4si __builtin_ia32_pmovzxwd128 (v8hi)
48962     v2di __builtin_ia32_pmovzxwq128 (v8hi)
48963     v2di __builtin_ia32_pmuldq128 (v4si, v4si)
48964     v4si __builtin_ia32_pmulld128 (v4si, v4si)
48965     int __builtin_ia32_ptestc128 (v2di, v2di)
48966     int __builtin_ia32_ptestnzc128 (v2di, v2di)
48967     int __builtin_ia32_ptestz128 (v2di, v2di)
48968     v2df __builtin_ia32_roundpd (v2df, const int)
48969     v4sf __builtin_ia32_roundps (v4sf, const int)
48970     v2df __builtin_ia32_roundsd (v2df, v2df, const int)
48971     v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
48972
48973 The following built-in functions are available when '-msse4.1' is used.
48974
48975'v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
48976     Generates the 'insertps' machine instruction.
48977'int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
48978     Generates the 'pextrb' machine instruction.
48979'v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
48980     Generates the 'pinsrb' machine instruction.
48981'v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
48982     Generates the 'pinsrd' machine instruction.
48983'v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
48984     Generates the 'pinsrq' machine instruction in 64bit mode.
48985
48986 The following built-in functions are changed to generate new SSE4.1
48987instructions when '-msse4.1' is used.
48988
48989'float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
48990     Generates the 'extractps' machine instruction.
48991'int __builtin_ia32_vec_ext_v4si (v4si, const int)'
48992     Generates the 'pextrd' machine instruction.
48993'long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
48994     Generates the 'pextrq' machine instruction in 64bit mode.
48995
48996 The following built-in functions are available when '-msse4.2' is used.
48997All of them generate the machine instruction that is part of the name.
48998
48999     v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
49000     int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
49001     int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
49002     int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
49003     int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
49004     int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
49005     int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
49006     v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
49007     int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
49008     int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
49009     int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
49010     int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
49011     int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
49012     int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
49013     v2di __builtin_ia32_pcmpgtq (v2di, v2di)
49014
49015 The following built-in functions are available when '-msse4.2' is used.
49016
49017'unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
49018     Generates the 'crc32b' machine instruction.
49019'unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
49020     Generates the 'crc32w' machine instruction.
49021'unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
49022     Generates the 'crc32l' machine instruction.
49023'unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
49024     Generates the 'crc32q' machine instruction.
49025
49026 The following built-in functions are changed to generate new SSE4.2
49027instructions when '-msse4.2' is used.
49028
49029'int __builtin_popcount (unsigned int)'
49030     Generates the 'popcntl' machine instruction.
49031'int __builtin_popcountl (unsigned long)'
49032     Generates the 'popcntl' or 'popcntq' machine instruction, depending
49033     on the size of 'unsigned long'.
49034'int __builtin_popcountll (unsigned long long)'
49035     Generates the 'popcntq' machine instruction.
49036
49037 The following built-in functions are available when '-mavx' is used.
49038All of them generate the machine instruction that is part of the name.
49039
49040     v4df __builtin_ia32_addpd256 (v4df,v4df)
49041     v8sf __builtin_ia32_addps256 (v8sf,v8sf)
49042     v4df __builtin_ia32_addsubpd256 (v4df,v4df)
49043     v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
49044     v4df __builtin_ia32_andnpd256 (v4df,v4df)
49045     v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
49046     v4df __builtin_ia32_andpd256 (v4df,v4df)
49047     v8sf __builtin_ia32_andps256 (v8sf,v8sf)
49048     v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
49049     v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
49050     v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
49051     v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
49052     v2df __builtin_ia32_cmppd (v2df,v2df,int)
49053     v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
49054     v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
49055     v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
49056     v2df __builtin_ia32_cmpsd (v2df,v2df,int)
49057     v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
49058     v4df __builtin_ia32_cvtdq2pd256 (v4si)
49059     v8sf __builtin_ia32_cvtdq2ps256 (v8si)
49060     v4si __builtin_ia32_cvtpd2dq256 (v4df)
49061     v4sf __builtin_ia32_cvtpd2ps256 (v4df)
49062     v8si __builtin_ia32_cvtps2dq256 (v8sf)
49063     v4df __builtin_ia32_cvtps2pd256 (v4sf)
49064     v4si __builtin_ia32_cvttpd2dq256 (v4df)
49065     v8si __builtin_ia32_cvttps2dq256 (v8sf)
49066     v4df __builtin_ia32_divpd256 (v4df,v4df)
49067     v8sf __builtin_ia32_divps256 (v8sf,v8sf)
49068     v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
49069     v4df __builtin_ia32_haddpd256 (v4df,v4df)
49070     v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
49071     v4df __builtin_ia32_hsubpd256 (v4df,v4df)
49072     v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
49073     v32qi __builtin_ia32_lddqu256 (pcchar)
49074     v32qi __builtin_ia32_loaddqu256 (pcchar)
49075     v4df __builtin_ia32_loadupd256 (pcdouble)
49076     v8sf __builtin_ia32_loadups256 (pcfloat)
49077     v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
49078     v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
49079     v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
49080     v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
49081     void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
49082     void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
49083     void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
49084     void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
49085     v4df __builtin_ia32_maxpd256 (v4df,v4df)
49086     v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
49087     v4df __builtin_ia32_minpd256 (v4df,v4df)
49088     v8sf __builtin_ia32_minps256 (v8sf,v8sf)
49089     v4df __builtin_ia32_movddup256 (v4df)
49090     int __builtin_ia32_movmskpd256 (v4df)
49091     int __builtin_ia32_movmskps256 (v8sf)
49092     v8sf __builtin_ia32_movshdup256 (v8sf)
49093     v8sf __builtin_ia32_movsldup256 (v8sf)
49094     v4df __builtin_ia32_mulpd256 (v4df,v4df)
49095     v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
49096     v4df __builtin_ia32_orpd256 (v4df,v4df)
49097     v8sf __builtin_ia32_orps256 (v8sf,v8sf)
49098     v2df __builtin_ia32_pd_pd256 (v4df)
49099     v4df __builtin_ia32_pd256_pd (v2df)
49100     v4sf __builtin_ia32_ps_ps256 (v8sf)
49101     v8sf __builtin_ia32_ps256_ps (v4sf)
49102     int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
49103     int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
49104     int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
49105     v8sf __builtin_ia32_rcpps256 (v8sf)
49106     v4df __builtin_ia32_roundpd256 (v4df,int)
49107     v8sf __builtin_ia32_roundps256 (v8sf,int)
49108     v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
49109     v8sf __builtin_ia32_rsqrtps256 (v8sf)
49110     v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
49111     v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
49112     v4si __builtin_ia32_si_si256 (v8si)
49113     v8si __builtin_ia32_si256_si (v4si)
49114     v4df __builtin_ia32_sqrtpd256 (v4df)
49115     v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
49116     v8sf __builtin_ia32_sqrtps256 (v8sf)
49117     void __builtin_ia32_storedqu256 (pchar,v32qi)
49118     void __builtin_ia32_storeupd256 (pdouble,v4df)
49119     void __builtin_ia32_storeups256 (pfloat,v8sf)
49120     v4df __builtin_ia32_subpd256 (v4df,v4df)
49121     v8sf __builtin_ia32_subps256 (v8sf,v8sf)
49122     v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
49123     v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
49124     v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
49125     v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
49126     v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
49127     v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
49128     v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
49129     v4sf __builtin_ia32_vbroadcastss (pcfloat)
49130     v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
49131     v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
49132     v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
49133     v4si __builtin_ia32_vextractf128_si256 (v8si,int)
49134     v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
49135     v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
49136     v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
49137     v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
49138     v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
49139     v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
49140     v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
49141     v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
49142     v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
49143     v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
49144     v2df __builtin_ia32_vpermilpd (v2df,int)
49145     v4df __builtin_ia32_vpermilpd256 (v4df,int)
49146     v4sf __builtin_ia32_vpermilps (v4sf,int)
49147     v8sf __builtin_ia32_vpermilps256 (v8sf,int)
49148     v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
49149     v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
49150     v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
49151     v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
49152     int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
49153     int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
49154     int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
49155     int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
49156     int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
49157     int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
49158     int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
49159     int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
49160     int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
49161     int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
49162     int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
49163     int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
49164     void __builtin_ia32_vzeroall (void)
49165     void __builtin_ia32_vzeroupper (void)
49166     v4df __builtin_ia32_xorpd256 (v4df,v4df)
49167     v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
49168
49169 The following built-in functions are available when '-mavx2' is used.
49170All of them generate the machine instruction that is part of the name.
49171
49172     v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int)
49173     v32qi __builtin_ia32_pabsb256 (v32qi)
49174     v16hi __builtin_ia32_pabsw256 (v16hi)
49175     v8si __builtin_ia32_pabsd256 (v8si)
49176     v16hi __builtin_ia32_packssdw256 (v8si,v8si)
49177     v32qi __builtin_ia32_packsswb256 (v16hi,v16hi)
49178     v16hi __builtin_ia32_packusdw256 (v8si,v8si)
49179     v32qi __builtin_ia32_packuswb256 (v16hi,v16hi)
49180     v32qi __builtin_ia32_paddb256 (v32qi,v32qi)
49181     v16hi __builtin_ia32_paddw256 (v16hi,v16hi)
49182     v8si __builtin_ia32_paddd256 (v8si,v8si)
49183     v4di __builtin_ia32_paddq256 (v4di,v4di)
49184     v32qi __builtin_ia32_paddsb256 (v32qi,v32qi)
49185     v16hi __builtin_ia32_paddsw256 (v16hi,v16hi)
49186     v32qi __builtin_ia32_paddusb256 (v32qi,v32qi)
49187     v16hi __builtin_ia32_paddusw256 (v16hi,v16hi)
49188     v4di __builtin_ia32_palignr256 (v4di,v4di,int)
49189     v4di __builtin_ia32_andsi256 (v4di,v4di)
49190     v4di __builtin_ia32_andnotsi256 (v4di,v4di)
49191     v32qi __builtin_ia32_pavgb256 (v32qi,v32qi)
49192     v16hi __builtin_ia32_pavgw256 (v16hi,v16hi)
49193     v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi)
49194     v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int)
49195     v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi)
49196     v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi)
49197     v8si __builtin_ia32_pcmpeqd256 (c8si,v8si)
49198     v4di __builtin_ia32_pcmpeqq256 (v4di,v4di)
49199     v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi)
49200     v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi)
49201     v8si __builtin_ia32_pcmpgtd256 (v8si,v8si)
49202     v4di __builtin_ia32_pcmpgtq256 (v4di,v4di)
49203     v16hi __builtin_ia32_phaddw256 (v16hi,v16hi)
49204     v8si __builtin_ia32_phaddd256 (v8si,v8si)
49205     v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi)
49206     v16hi __builtin_ia32_phsubw256 (v16hi,v16hi)
49207     v8si __builtin_ia32_phsubd256 (v8si,v8si)
49208     v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi)
49209     v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi)
49210     v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi)
49211     v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi)
49212     v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi)
49213     v8si __builtin_ia32_pmaxsd256 (v8si,v8si)
49214     v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi)
49215     v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi)
49216     v8si __builtin_ia32_pmaxud256 (v8si,v8si)
49217     v32qi __builtin_ia32_pminsb256 (v32qi,v32qi)
49218     v16hi __builtin_ia32_pminsw256 (v16hi,v16hi)
49219     v8si __builtin_ia32_pminsd256 (v8si,v8si)
49220     v32qi __builtin_ia32_pminub256 (v32qi,v32qi)
49221     v16hi __builtin_ia32_pminuw256 (v16hi,v16hi)
49222     v8si __builtin_ia32_pminud256 (v8si,v8si)
49223     int __builtin_ia32_pmovmskb256 (v32qi)
49224     v16hi __builtin_ia32_pmovsxbw256 (v16qi)
49225     v8si __builtin_ia32_pmovsxbd256 (v16qi)
49226     v4di __builtin_ia32_pmovsxbq256 (v16qi)
49227     v8si __builtin_ia32_pmovsxwd256 (v8hi)
49228     v4di __builtin_ia32_pmovsxwq256 (v8hi)
49229     v4di __builtin_ia32_pmovsxdq256 (v4si)
49230     v16hi __builtin_ia32_pmovzxbw256 (v16qi)
49231     v8si __builtin_ia32_pmovzxbd256 (v16qi)
49232     v4di __builtin_ia32_pmovzxbq256 (v16qi)
49233     v8si __builtin_ia32_pmovzxwd256 (v8hi)
49234     v4di __builtin_ia32_pmovzxwq256 (v8hi)
49235     v4di __builtin_ia32_pmovzxdq256 (v4si)
49236     v4di __builtin_ia32_pmuldq256 (v8si,v8si)
49237     v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi)
49238     v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi)
49239     v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi)
49240     v16hi __builtin_ia32_pmullw256 (v16hi,v16hi)
49241     v8si __builtin_ia32_pmulld256 (v8si,v8si)
49242     v4di __builtin_ia32_pmuludq256 (v8si,v8si)
49243     v4di __builtin_ia32_por256 (v4di,v4di)
49244     v16hi __builtin_ia32_psadbw256 (v32qi,v32qi)
49245     v32qi __builtin_ia32_pshufb256 (v32qi,v32qi)
49246     v8si __builtin_ia32_pshufd256 (v8si,int)
49247     v16hi __builtin_ia32_pshufhw256 (v16hi,int)
49248     v16hi __builtin_ia32_pshuflw256 (v16hi,int)
49249     v32qi __builtin_ia32_psignb256 (v32qi,v32qi)
49250     v16hi __builtin_ia32_psignw256 (v16hi,v16hi)
49251     v8si __builtin_ia32_psignd256 (v8si,v8si)
49252     v4di __builtin_ia32_pslldqi256 (v4di,int)
49253     v16hi __builtin_ia32_psllwi256 (16hi,int)
49254     v16hi __builtin_ia32_psllw256(v16hi,v8hi)
49255     v8si __builtin_ia32_pslldi256 (v8si,int)
49256     v8si __builtin_ia32_pslld256(v8si,v4si)
49257     v4di __builtin_ia32_psllqi256 (v4di,int)
49258     v4di __builtin_ia32_psllq256(v4di,v2di)
49259     v16hi __builtin_ia32_psrawi256 (v16hi,int)
49260     v16hi __builtin_ia32_psraw256 (v16hi,v8hi)
49261     v8si __builtin_ia32_psradi256 (v8si,int)
49262     v8si __builtin_ia32_psrad256 (v8si,v4si)
49263     v4di __builtin_ia32_psrldqi256 (v4di, int)
49264     v16hi __builtin_ia32_psrlwi256 (v16hi,int)
49265     v16hi __builtin_ia32_psrlw256 (v16hi,v8hi)
49266     v8si __builtin_ia32_psrldi256 (v8si,int)
49267     v8si __builtin_ia32_psrld256 (v8si,v4si)
49268     v4di __builtin_ia32_psrlqi256 (v4di,int)
49269     v4di __builtin_ia32_psrlq256(v4di,v2di)
49270     v32qi __builtin_ia32_psubb256 (v32qi,v32qi)
49271     v32hi __builtin_ia32_psubw256 (v16hi,v16hi)
49272     v8si __builtin_ia32_psubd256 (v8si,v8si)
49273     v4di __builtin_ia32_psubq256 (v4di,v4di)
49274     v32qi __builtin_ia32_psubsb256 (v32qi,v32qi)
49275     v16hi __builtin_ia32_psubsw256 (v16hi,v16hi)
49276     v32qi __builtin_ia32_psubusb256 (v32qi,v32qi)
49277     v16hi __builtin_ia32_psubusw256 (v16hi,v16hi)
49278     v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi)
49279     v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi)
49280     v8si __builtin_ia32_punpckhdq256 (v8si,v8si)
49281     v4di __builtin_ia32_punpckhqdq256 (v4di,v4di)
49282     v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi)
49283     v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi)
49284     v8si __builtin_ia32_punpckldq256 (v8si,v8si)
49285     v4di __builtin_ia32_punpcklqdq256 (v4di,v4di)
49286     v4di __builtin_ia32_pxor256 (v4di,v4di)
49287     v4di __builtin_ia32_movntdqa256 (pv4di)
49288     v4sf __builtin_ia32_vbroadcastss_ps (v4sf)
49289     v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf)
49290     v4df __builtin_ia32_vbroadcastsd_pd256 (v2df)
49291     v4di __builtin_ia32_vbroadcastsi256 (v2di)
49292     v4si __builtin_ia32_pblendd128 (v4si,v4si)
49293     v8si __builtin_ia32_pblendd256 (v8si,v8si)
49294     v32qi __builtin_ia32_pbroadcastb256 (v16qi)
49295     v16hi __builtin_ia32_pbroadcastw256 (v8hi)
49296     v8si __builtin_ia32_pbroadcastd256 (v4si)
49297     v4di __builtin_ia32_pbroadcastq256 (v2di)
49298     v16qi __builtin_ia32_pbroadcastb128 (v16qi)
49299     v8hi __builtin_ia32_pbroadcastw128 (v8hi)
49300     v4si __builtin_ia32_pbroadcastd128 (v4si)
49301     v2di __builtin_ia32_pbroadcastq128 (v2di)
49302     v8si __builtin_ia32_permvarsi256 (v8si,v8si)
49303     v4df __builtin_ia32_permdf256 (v4df,int)
49304     v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf)
49305     v4di __builtin_ia32_permdi256 (v4di,int)
49306     v4di __builtin_ia32_permti256 (v4di,v4di,int)
49307     v4di __builtin_ia32_extract128i256 (v4di,int)
49308     v4di __builtin_ia32_insert128i256 (v4di,v2di,int)
49309     v8si __builtin_ia32_maskloadd256 (pcv8si,v8si)
49310     v4di __builtin_ia32_maskloadq256 (pcv4di,v4di)
49311     v4si __builtin_ia32_maskloadd (pcv4si,v4si)
49312     v2di __builtin_ia32_maskloadq (pcv2di,v2di)
49313     void __builtin_ia32_maskstored256 (pv8si,v8si,v8si)
49314     void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di)
49315     void __builtin_ia32_maskstored (pv4si,v4si,v4si)
49316     void __builtin_ia32_maskstoreq (pv2di,v2di,v2di)
49317     v8si __builtin_ia32_psllv8si (v8si,v8si)
49318     v4si __builtin_ia32_psllv4si (v4si,v4si)
49319     v4di __builtin_ia32_psllv4di (v4di,v4di)
49320     v2di __builtin_ia32_psllv2di (v2di,v2di)
49321     v8si __builtin_ia32_psrav8si (v8si,v8si)
49322     v4si __builtin_ia32_psrav4si (v4si,v4si)
49323     v8si __builtin_ia32_psrlv8si (v8si,v8si)
49324     v4si __builtin_ia32_psrlv4si (v4si,v4si)
49325     v4di __builtin_ia32_psrlv4di (v4di,v4di)
49326     v2di __builtin_ia32_psrlv2di (v2di,v2di)
49327     v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int)
49328     v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int)
49329     v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int)
49330     v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int)
49331     v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int)
49332     v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int)
49333     v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int)
49334     v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int)
49335     v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int)
49336     v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int)
49337     v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int)
49338     v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int)
49339     v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int)
49340     v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int)
49341     v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int)
49342     v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int)
49343
49344 The following built-in functions are available when '-maes' is used.
49345All of them generate the machine instruction that is part of the name.
49346
49347     v2di __builtin_ia32_aesenc128 (v2di, v2di)
49348     v2di __builtin_ia32_aesenclast128 (v2di, v2di)
49349     v2di __builtin_ia32_aesdec128 (v2di, v2di)
49350     v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
49351     v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
49352     v2di __builtin_ia32_aesimc128 (v2di)
49353
49354 The following built-in function is available when '-mpclmul' is used.
49355
49356'v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
49357     Generates the 'pclmulqdq' machine instruction.
49358
49359 The following built-in function is available when '-mfsgsbase' is used.
49360All of them generate the machine instruction that is part of the name.
49361
49362     unsigned int __builtin_ia32_rdfsbase32 (void)
49363     unsigned long long __builtin_ia32_rdfsbase64 (void)
49364     unsigned int __builtin_ia32_rdgsbase32 (void)
49365     unsigned long long __builtin_ia32_rdgsbase64 (void)
49366     void _writefsbase_u32 (unsigned int)
49367     void _writefsbase_u64 (unsigned long long)
49368     void _writegsbase_u32 (unsigned int)
49369     void _writegsbase_u64 (unsigned long long)
49370
49371 The following built-in function is available when '-mrdrnd' is used.
49372All of them generate the machine instruction that is part of the name.
49373
49374     unsigned int __builtin_ia32_rdrand16_step (unsigned short *)
49375     unsigned int __builtin_ia32_rdrand32_step (unsigned int *)
49376     unsigned int __builtin_ia32_rdrand64_step (unsigned long long *)
49377
49378 The following built-in functions are available when '-msse4a' is used.
49379All of them generate the machine instruction that is part of the name.
49380
49381     void __builtin_ia32_movntsd (double *, v2df)
49382     void __builtin_ia32_movntss (float *, v4sf)
49383     v2di __builtin_ia32_extrq  (v2di, v16qi)
49384     v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
49385     v2di __builtin_ia32_insertq (v2di, v2di)
49386     v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
49387
49388 The following built-in functions are available when '-mxop' is used.
49389     v2df __builtin_ia32_vfrczpd (v2df)
49390     v4sf __builtin_ia32_vfrczps (v4sf)
49391     v2df __builtin_ia32_vfrczsd (v2df)
49392     v4sf __builtin_ia32_vfrczss (v4sf)
49393     v4df __builtin_ia32_vfrczpd256 (v4df)
49394     v8sf __builtin_ia32_vfrczps256 (v8sf)
49395     v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
49396     v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di)
49397     v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si)
49398     v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi)
49399     v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi)
49400     v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df)
49401     v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf)
49402     v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di)
49403     v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si)
49404     v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi)
49405     v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi)
49406     v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df)
49407     v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf)
49408     v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi)
49409     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
49410     v4si __builtin_ia32_vpcomeqd (v4si, v4si)
49411     v2di __builtin_ia32_vpcomeqq (v2di, v2di)
49412     v16qi __builtin_ia32_vpcomequb (v16qi, v16qi)
49413     v4si __builtin_ia32_vpcomequd (v4si, v4si)
49414     v2di __builtin_ia32_vpcomequq (v2di, v2di)
49415     v8hi __builtin_ia32_vpcomequw (v8hi, v8hi)
49416     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
49417     v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi)
49418     v4si __builtin_ia32_vpcomfalsed (v4si, v4si)
49419     v2di __builtin_ia32_vpcomfalseq (v2di, v2di)
49420     v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi)
49421     v4si __builtin_ia32_vpcomfalseud (v4si, v4si)
49422     v2di __builtin_ia32_vpcomfalseuq (v2di, v2di)
49423     v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi)
49424     v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi)
49425     v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi)
49426     v4si __builtin_ia32_vpcomged (v4si, v4si)
49427     v2di __builtin_ia32_vpcomgeq (v2di, v2di)
49428     v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi)
49429     v4si __builtin_ia32_vpcomgeud (v4si, v4si)
49430     v2di __builtin_ia32_vpcomgeuq (v2di, v2di)
49431     v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi)
49432     v8hi __builtin_ia32_vpcomgew (v8hi, v8hi)
49433     v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi)
49434     v4si __builtin_ia32_vpcomgtd (v4si, v4si)
49435     v2di __builtin_ia32_vpcomgtq (v2di, v2di)
49436     v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi)
49437     v4si __builtin_ia32_vpcomgtud (v4si, v4si)
49438     v2di __builtin_ia32_vpcomgtuq (v2di, v2di)
49439     v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi)
49440     v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi)
49441     v16qi __builtin_ia32_vpcomleb (v16qi, v16qi)
49442     v4si __builtin_ia32_vpcomled (v4si, v4si)
49443     v2di __builtin_ia32_vpcomleq (v2di, v2di)
49444     v16qi __builtin_ia32_vpcomleub (v16qi, v16qi)
49445     v4si __builtin_ia32_vpcomleud (v4si, v4si)
49446     v2di __builtin_ia32_vpcomleuq (v2di, v2di)
49447     v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi)
49448     v8hi __builtin_ia32_vpcomlew (v8hi, v8hi)
49449     v16qi __builtin_ia32_vpcomltb (v16qi, v16qi)
49450     v4si __builtin_ia32_vpcomltd (v4si, v4si)
49451     v2di __builtin_ia32_vpcomltq (v2di, v2di)
49452     v16qi __builtin_ia32_vpcomltub (v16qi, v16qi)
49453     v4si __builtin_ia32_vpcomltud (v4si, v4si)
49454     v2di __builtin_ia32_vpcomltuq (v2di, v2di)
49455     v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi)
49456     v8hi __builtin_ia32_vpcomltw (v8hi, v8hi)
49457     v16qi __builtin_ia32_vpcomneb (v16qi, v16qi)
49458     v4si __builtin_ia32_vpcomned (v4si, v4si)
49459     v2di __builtin_ia32_vpcomneq (v2di, v2di)
49460     v16qi __builtin_ia32_vpcomneub (v16qi, v16qi)
49461     v4si __builtin_ia32_vpcomneud (v4si, v4si)
49462     v2di __builtin_ia32_vpcomneuq (v2di, v2di)
49463     v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi)
49464     v8hi __builtin_ia32_vpcomnew (v8hi, v8hi)
49465     v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi)
49466     v4si __builtin_ia32_vpcomtrued (v4si, v4si)
49467     v2di __builtin_ia32_vpcomtrueq (v2di, v2di)
49468     v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi)
49469     v4si __builtin_ia32_vpcomtrueud (v4si, v4si)
49470     v2di __builtin_ia32_vpcomtrueuq (v2di, v2di)
49471     v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi)
49472     v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi)
49473     v4si __builtin_ia32_vphaddbd (v16qi)
49474     v2di __builtin_ia32_vphaddbq (v16qi)
49475     v8hi __builtin_ia32_vphaddbw (v16qi)
49476     v2di __builtin_ia32_vphadddq (v4si)
49477     v4si __builtin_ia32_vphaddubd (v16qi)
49478     v2di __builtin_ia32_vphaddubq (v16qi)
49479     v8hi __builtin_ia32_vphaddubw (v16qi)
49480     v2di __builtin_ia32_vphaddudq (v4si)
49481     v4si __builtin_ia32_vphadduwd (v8hi)
49482     v2di __builtin_ia32_vphadduwq (v8hi)
49483     v4si __builtin_ia32_vphaddwd (v8hi)
49484     v2di __builtin_ia32_vphaddwq (v8hi)
49485     v8hi __builtin_ia32_vphsubbw (v16qi)
49486     v2di __builtin_ia32_vphsubdq (v4si)
49487     v4si __builtin_ia32_vphsubwd (v8hi)
49488     v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si)
49489     v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di)
49490     v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di)
49491     v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si)
49492     v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di)
49493     v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di)
49494     v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si)
49495     v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi)
49496     v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si)
49497     v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi)
49498     v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si)
49499     v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si)
49500     v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi)
49501     v16qi __builtin_ia32_vprotb (v16qi, v16qi)
49502     v4si __builtin_ia32_vprotd (v4si, v4si)
49503     v2di __builtin_ia32_vprotq (v2di, v2di)
49504     v8hi __builtin_ia32_vprotw (v8hi, v8hi)
49505     v16qi __builtin_ia32_vpshab (v16qi, v16qi)
49506     v4si __builtin_ia32_vpshad (v4si, v4si)
49507     v2di __builtin_ia32_vpshaq (v2di, v2di)
49508     v8hi __builtin_ia32_vpshaw (v8hi, v8hi)
49509     v16qi __builtin_ia32_vpshlb (v16qi, v16qi)
49510     v4si __builtin_ia32_vpshld (v4si, v4si)
49511     v2di __builtin_ia32_vpshlq (v2di, v2di)
49512     v8hi __builtin_ia32_vpshlw (v8hi, v8hi)
49513
49514 The following built-in functions are available when '-mfma4' is used.
49515All of them generate the machine instruction that is part of the name.
49516
49517     v2df __builtin_ia32_vfmaddpd (v2df, v2df, v2df)
49518     v4sf __builtin_ia32_vfmaddps (v4sf, v4sf, v4sf)
49519     v2df __builtin_ia32_vfmaddsd (v2df, v2df, v2df)
49520     v4sf __builtin_ia32_vfmaddss (v4sf, v4sf, v4sf)
49521     v2df __builtin_ia32_vfmsubpd (v2df, v2df, v2df)
49522     v4sf __builtin_ia32_vfmsubps (v4sf, v4sf, v4sf)
49523     v2df __builtin_ia32_vfmsubsd (v2df, v2df, v2df)
49524     v4sf __builtin_ia32_vfmsubss (v4sf, v4sf, v4sf)
49525     v2df __builtin_ia32_vfnmaddpd (v2df, v2df, v2df)
49526     v4sf __builtin_ia32_vfnmaddps (v4sf, v4sf, v4sf)
49527     v2df __builtin_ia32_vfnmaddsd (v2df, v2df, v2df)
49528     v4sf __builtin_ia32_vfnmaddss (v4sf, v4sf, v4sf)
49529     v2df __builtin_ia32_vfnmsubpd (v2df, v2df, v2df)
49530     v4sf __builtin_ia32_vfnmsubps (v4sf, v4sf, v4sf)
49531     v2df __builtin_ia32_vfnmsubsd (v2df, v2df, v2df)
49532     v4sf __builtin_ia32_vfnmsubss (v4sf, v4sf, v4sf)
49533     v2df __builtin_ia32_vfmaddsubpd  (v2df, v2df, v2df)
49534     v4sf __builtin_ia32_vfmaddsubps  (v4sf, v4sf, v4sf)
49535     v2df __builtin_ia32_vfmsubaddpd  (v2df, v2df, v2df)
49536     v4sf __builtin_ia32_vfmsubaddps  (v4sf, v4sf, v4sf)
49537     v4df __builtin_ia32_vfmaddpd256 (v4df, v4df, v4df)
49538     v8sf __builtin_ia32_vfmaddps256 (v8sf, v8sf, v8sf)
49539     v4df __builtin_ia32_vfmsubpd256 (v4df, v4df, v4df)
49540     v8sf __builtin_ia32_vfmsubps256 (v8sf, v8sf, v8sf)
49541     v4df __builtin_ia32_vfnmaddpd256 (v4df, v4df, v4df)
49542     v8sf __builtin_ia32_vfnmaddps256 (v8sf, v8sf, v8sf)
49543     v4df __builtin_ia32_vfnmsubpd256 (v4df, v4df, v4df)
49544     v8sf __builtin_ia32_vfnmsubps256 (v8sf, v8sf, v8sf)
49545     v4df __builtin_ia32_vfmaddsubpd256 (v4df, v4df, v4df)
49546     v8sf __builtin_ia32_vfmaddsubps256 (v8sf, v8sf, v8sf)
49547     v4df __builtin_ia32_vfmsubaddpd256 (v4df, v4df, v4df)
49548     v8sf __builtin_ia32_vfmsubaddps256 (v8sf, v8sf, v8sf)
49549
49550
49551 The following built-in functions are available when '-mlwp' is used.
49552
49553     void __builtin_ia32_llwpcb16 (void *);
49554     void __builtin_ia32_llwpcb32 (void *);
49555     void __builtin_ia32_llwpcb64 (void *);
49556     void * __builtin_ia32_llwpcb16 (void);
49557     void * __builtin_ia32_llwpcb32 (void);
49558     void * __builtin_ia32_llwpcb64 (void);
49559     void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short)
49560     void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int)
49561     void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int)
49562     unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short)
49563     unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int)
49564     unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int)
49565
49566 The following built-in functions are available when '-mbmi' is used.
49567All of them generate the machine instruction that is part of the name.
49568     unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
49569     unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
49570
49571 The following built-in functions are available when '-mbmi2' is used.
49572All of them generate the machine instruction that is part of the name.
49573     unsigned int _bzhi_u32 (unsigned int, unsigned int)
49574     unsigned int _pdep_u32 (unsigned int, unsigned int)
49575     unsigned int _pext_u32 (unsigned int, unsigned int)
49576     unsigned long long _bzhi_u64 (unsigned long long, unsigned long long)
49577     unsigned long long _pdep_u64 (unsigned long long, unsigned long long)
49578     unsigned long long _pext_u64 (unsigned long long, unsigned long long)
49579
49580 The following built-in functions are available when '-mlzcnt' is used.
49581All of them generate the machine instruction that is part of the name.
49582     unsigned short __builtin_ia32_lzcnt_u16(unsigned short);
49583     unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
49584     unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
49585
49586 The following built-in functions are available when '-mfxsr' is used.
49587All of them generate the machine instruction that is part of the name.
49588     void __builtin_ia32_fxsave (void *)
49589     void __builtin_ia32_fxrstor (void *)
49590     void __builtin_ia32_fxsave64 (void *)
49591     void __builtin_ia32_fxrstor64 (void *)
49592
49593 The following built-in functions are available when '-mxsave' is used.
49594All of them generate the machine instruction that is part of the name.
49595     void __builtin_ia32_xsave (void *, long long)
49596     void __builtin_ia32_xrstor (void *, long long)
49597     void __builtin_ia32_xsave64 (void *, long long)
49598     void __builtin_ia32_xrstor64 (void *, long long)
49599
49600 The following built-in functions are available when '-mxsaveopt' is
49601used.  All of them generate the machine instruction that is part of the
49602name.
49603     void __builtin_ia32_xsaveopt (void *, long long)
49604     void __builtin_ia32_xsaveopt64 (void *, long long)
49605
49606 The following built-in functions are available when '-mtbm' is used.
49607Both of them generate the immediate form of the bextr machine
49608instruction.
49609     unsigned int __builtin_ia32_bextri_u32 (unsigned int,
49610                                             const unsigned int);
49611     unsigned long long __builtin_ia32_bextri_u64 (unsigned long long,
49612                                                   const unsigned long long);
49613
49614 The following built-in functions are available when '-m3dnow' is used.
49615All of them generate the machine instruction that is part of the name.
49616
49617     void __builtin_ia32_femms (void)
49618     v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
49619     v2si __builtin_ia32_pf2id (v2sf)
49620     v2sf __builtin_ia32_pfacc (v2sf, v2sf)
49621     v2sf __builtin_ia32_pfadd (v2sf, v2sf)
49622     v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
49623     v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
49624     v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
49625     v2sf __builtin_ia32_pfmax (v2sf, v2sf)
49626     v2sf __builtin_ia32_pfmin (v2sf, v2sf)
49627     v2sf __builtin_ia32_pfmul (v2sf, v2sf)
49628     v2sf __builtin_ia32_pfrcp (v2sf)
49629     v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
49630     v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
49631     v2sf __builtin_ia32_pfrsqrt (v2sf)
49632     v2sf __builtin_ia32_pfsub (v2sf, v2sf)
49633     v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
49634     v2sf __builtin_ia32_pi2fd (v2si)
49635     v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
49636
49637 The following built-in functions are available when '-m3dnowa' is used.
49638All of them generate the machine instruction that is part of the name.
49639
49640     v2si __builtin_ia32_pf2iw (v2sf)
49641     v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
49642     v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
49643     v2sf __builtin_ia32_pi2fw (v2si)
49644     v2sf __builtin_ia32_pswapdsf (v2sf)
49645     v2si __builtin_ia32_pswapdsi (v2si)
49646
49647 The following built-in functions are available when '-mrtm' is used
49648They are used for restricted transactional memory.  These are the
49649internal low level functions.  Normally the functions in *note x86
49650transactional memory intrinsics:: should be used instead.
49651
49652     int __builtin_ia32_xbegin ()
49653     void __builtin_ia32_xend ()
49654     void __builtin_ia32_xabort (status)
49655     int __builtin_ia32_xtest ()
49656
49657 The following built-in functions are available when '-mmwaitx' is used.
49658All of them generate the machine instruction that is part of the name.
49659     void __builtin_ia32_monitorx (void *, unsigned int, unsigned int)
49660     void __builtin_ia32_mwaitx (unsigned int, unsigned int, unsigned int)
49661
49662 The following built-in functions are available when '-mclzero' is used.
49663All of them generate the machine instruction that is part of the name.
49664     void __builtin_i32_clzero (void *)
49665
49666 The following built-in functions are available when '-mpku' is used.
49667They generate reads and writes to PKRU.
49668     void __builtin_ia32_wrpkru (unsigned int)
49669     unsigned int __builtin_ia32_rdpkru ()
49670
49671 The following built-in functions are available when '-mcet' or
49672'-mshstk' option is used.  They support shadow stack machine
49673instructions from Intel Control-flow Enforcement Technology (CET). Each
49674built-in function generates the machine instruction that is part of the
49675function's name.  These are the internal low-level functions.  Normally
49676the functions in *note x86 control-flow protection intrinsics:: should
49677be used instead.
49678
49679     unsigned int __builtin_ia32_rdsspd (void)
49680     unsigned long long __builtin_ia32_rdsspq (void)
49681     void __builtin_ia32_incsspd (unsigned int)
49682     void __builtin_ia32_incsspq (unsigned long long)
49683     void __builtin_ia32_saveprevssp(void);
49684     void __builtin_ia32_rstorssp(void *);
49685     void __builtin_ia32_wrssd(unsigned int, void *);
49686     void __builtin_ia32_wrssq(unsigned long long, void *);
49687     void __builtin_ia32_wrussd(unsigned int, void *);
49688     void __builtin_ia32_wrussq(unsigned long long, void *);
49689     void __builtin_ia32_setssbsy(void);
49690     void __builtin_ia32_clrssbsy(void *);
49691
49692
49693File: gcc.info,  Node: x86 transactional memory intrinsics,  Next: x86 control-flow protection intrinsics,  Prev: x86 Built-in Functions,  Up: Target Builtins
49694
496956.59.34 x86 Transactional Memory Intrinsics
49696-------------------------------------------
49697
49698These hardware transactional memory intrinsics for x86 allow you to use
49699memory transactions with RTM (Restricted Transactional Memory).  This
49700support is enabled with the '-mrtm' option.  For using HLE (Hardware
49701Lock Elision) see *note x86 specific memory model extensions for
49702transactional memory:: instead.
49703
49704 A memory transaction commits all changes to memory in an atomic way, as
49705visible to other threads.  If the transaction fails it is rolled back
49706and all side effects discarded.
49707
49708 Generally there is no guarantee that a memory transaction ever succeeds
49709and suitable fallback code always needs to be supplied.
49710
49711 -- RTM Function: unsigned _xbegin ()
49712     Start a RTM (Restricted Transactional Memory) transaction.  Returns
49713     '_XBEGIN_STARTED' when the transaction started successfully (note
49714     this is not 0, so the constant has to be explicitly tested).
49715
49716     If the transaction aborts, all side effects are undone and an abort
49717     code encoded as a bit mask is returned.  The following macros are
49718     defined:
49719
49720     '_XABORT_EXPLICIT'
49721          Transaction was explicitly aborted with '_xabort'.  The
49722          parameter passed to '_xabort' is available with
49723          '_XABORT_CODE(status)'.
49724     '_XABORT_RETRY'
49725          Transaction retry is possible.
49726     '_XABORT_CONFLICT'
49727          Transaction abort due to a memory conflict with another
49728          thread.
49729     '_XABORT_CAPACITY'
49730          Transaction abort due to the transaction using too much
49731          memory.
49732     '_XABORT_DEBUG'
49733          Transaction abort due to a debug trap.
49734     '_XABORT_NESTED'
49735          Transaction abort in an inner nested transaction.
49736
49737     There is no guarantee any transaction ever succeeds, so there
49738     always needs to be a valid fallback path.
49739
49740 -- RTM Function: void _xend ()
49741     Commit the current transaction.  When no transaction is active this
49742     faults.  All memory side effects of the transaction become visible
49743     to other threads in an atomic manner.
49744
49745 -- RTM Function: int _xtest ()
49746     Return a nonzero value if a transaction is currently active,
49747     otherwise 0.
49748
49749 -- RTM Function: void _xabort (status)
49750     Abort the current transaction.  When no transaction is active this
49751     is a no-op.  The STATUS is an 8-bit constant; its value is encoded
49752     in the return value from '_xbegin'.
49753
49754 Here is an example showing handling for '_XABORT_RETRY' and a fallback
49755path for other failures:
49756
49757     #include <immintrin.h>
49758
49759     int n_tries, max_tries;
49760     unsigned status = _XABORT_EXPLICIT;
49761     ...
49762
49763     for (n_tries = 0; n_tries < max_tries; n_tries++)
49764       {
49765         status = _xbegin ();
49766         if (status == _XBEGIN_STARTED || !(status & _XABORT_RETRY))
49767           break;
49768       }
49769     if (status == _XBEGIN_STARTED)
49770       {
49771         ... transaction code...
49772         _xend ();
49773       }
49774     else
49775       {
49776         ... non-transactional fallback path...
49777       }
49778
49779Note that, in most cases, the transactional and non-transactional code
49780must synchronize together to ensure consistency.
49781
49782
49783File: gcc.info,  Node: x86 control-flow protection intrinsics,  Prev: x86 transactional memory intrinsics,  Up: Target Builtins
49784
497856.59.35 x86 Control-Flow Protection Intrinsics
49786----------------------------------------------
49787
49788 -- CET Function: ret_type _get_ssp (void)
49789     Get the current value of shadow stack pointer if shadow stack
49790     support from Intel CET is enabled in the hardware or '0' otherwise.
49791     The 'ret_type' is 'unsigned long long' for 64-bit targets and
49792     'unsigned int' for 32-bit targets.
49793
49794 -- CET Function: void _inc_ssp (unsigned int)
49795     Increment the current shadow stack pointer by the size specified by
49796     the function argument.  The argument is masked to a byte value for
49797     security reasons, so to increment by more than 255 bytes you must
49798     call the function multiple times.
49799
49800 The shadow stack unwind code looks like:
49801
49802     #include <immintrin.h>
49803
49804     /* Unwind the shadow stack for EH.  */
49805     #define _Unwind_Frames_Extra(x)       \
49806       do                                  \
49807         {                                \
49808           _Unwind_Word ssp = _get_ssp (); \
49809           if (ssp != 0)                   \
49810             {                            \
49811               _Unwind_Word tmp = (x);     \
49812               while (tmp > 255)           \
49813                 {                        \
49814                   _inc_ssp (tmp);         \
49815                   tmp -= 255;             \
49816                 }                        \
49817               _inc_ssp (tmp);             \
49818             }                            \
49819         }                                \
49820         while (0)
49821
49822This code runs unconditionally on all 64-bit processors.  For 32-bit
49823processors the code runs on those that support multi-byte NOP
49824instructions.
49825
49826
49827File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
49828
498296.60 Format Checks Specific to Particular Target Machines
49830=========================================================
49831
49832For some target machines, GCC supports additional options to the format
49833attribute (*note Declaring Attributes of Functions: Function
49834Attributes.).
49835
49836* Menu:
49837
49838* Solaris Format Checks::
49839* Darwin Format Checks::
49840
49841
49842File: gcc.info,  Node: Solaris Format Checks,  Next: Darwin Format Checks,  Up: Target Format Checks
49843
498446.60.1 Solaris Format Checks
49845----------------------------
49846
49847Solaris targets support the 'cmn_err' (or '__cmn_err__') format check.
49848'cmn_err' accepts a subset of the standard 'printf' conversions, and the
49849two-argument '%b' conversion for displaying bit-fields.  See the Solaris
49850man page for 'cmn_err' for more information.
49851
49852
49853File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks
49854
498556.60.2 Darwin Format Checks
49856---------------------------
49857
49858Darwin targets support the 'CFString' (or '__CFString__') in the format
49859attribute context.  Declarations made with such attribution are parsed
49860for correct syntax and format argument types.  However, parsing of the
49861format string itself is currently undefined and is not carried out by
49862this version of the compiler.
49863
49864 Additionally, 'CFStringRefs' (defined by the 'CoreFoundation' headers)
49865may also be used as format arguments.  Note that the relevant headers
49866are only likely to be available on Darwin (OSX) installations.  On such
49867installations, the XCode and system documentation provide descriptions
49868of 'CFString', 'CFStringRefs' and associated functions.
49869
49870
49871File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
49872
498736.61 Pragmas Accepted by GCC
49874============================
49875
49876GCC supports several types of pragmas, primarily in order to compile
49877code originally written for other compilers.  Note that in general we do
49878not recommend the use of pragmas; *Note Function Attributes::, for
49879further explanation.
49880
49881* Menu:
49882
49883* AArch64 Pragmas::
49884* ARM Pragmas::
49885* M32C Pragmas::
49886* MeP Pragmas::
49887* RS/6000 and PowerPC Pragmas::
49888* S/390 Pragmas::
49889* Darwin Pragmas::
49890* Solaris Pragmas::
49891* Symbol-Renaming Pragmas::
49892* Structure-Layout Pragmas::
49893* Weak Pragmas::
49894* Diagnostic Pragmas::
49895* Visibility Pragmas::
49896* Push/Pop Macro Pragmas::
49897* Function Specific Option Pragmas::
49898* Loop-Specific Pragmas::
49899
49900
49901File: gcc.info,  Node: AArch64 Pragmas,  Next: ARM Pragmas,  Up: Pragmas
49902
499036.61.1 AArch64 Pragmas
49904----------------------
49905
49906The pragmas defined by the AArch64 target correspond to the AArch64
49907target function attributes.  They can be specified as below:
49908     #pragma GCC target("string")
49909
49910 where 'STRING' can be any string accepted as an AArch64 target
49911attribute.  *Note AArch64 Function Attributes::, for more details on the
49912permissible values of 'string'.
49913
49914
49915File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Prev: AArch64 Pragmas,  Up: Pragmas
49916
499176.61.2 ARM Pragmas
49918------------------
49919
49920The ARM target defines pragmas for controlling the default addition of
49921'long_call' and 'short_call' attributes to functions.  *Note Function
49922Attributes::, for information about the effects of these attributes.
49923
49924'long_calls'
49925     Set all subsequent functions to have the 'long_call' attribute.
49926
49927'no_long_calls'
49928     Set all subsequent functions to have the 'short_call' attribute.
49929
49930'long_calls_off'
49931     Do not affect the 'long_call' or 'short_call' attributes of
49932     subsequent functions.
49933
49934
49935File: gcc.info,  Node: M32C Pragmas,  Next: MeP Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
49936
499376.61.3 M32C Pragmas
49938-------------------
49939
49940'GCC memregs NUMBER'
49941     Overrides the command-line option '-memregs=' for the current file.
49942     Use with care!  This pragma must be before any function in the
49943     file, and mixing different memregs values in different objects may
49944     make them incompatible.  This pragma is useful when a
49945     performance-critical function uses a memreg for temporary values,
49946     as it may allow you to reduce the number of memregs used.
49947
49948'ADDRESS NAME ADDRESS'
49949     For any declared symbols matching NAME, this does three things to
49950     that symbol: it forces the symbol to be located at the given
49951     address (a number), it forces the symbol to be volatile, and it
49952     changes the symbol's scope to be static.  This pragma exists for
49953     compatibility with other compilers, but note that the common
49954     '1234H' numeric syntax is not supported (use '0x1234' instead).
49955     Example:
49956
49957          #pragma ADDRESS port3 0x103
49958          char port3;
49959
49960
49961File: gcc.info,  Node: MeP Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
49962
499636.61.4 MeP Pragmas
49964------------------
49965
49966'custom io_volatile (on|off)'
49967     Overrides the command-line option '-mio-volatile' for the current
49968     file.  Note that for compatibility with future GCC releases, this
49969     option should only be used once before any 'io' variables in each
49970     file.
49971
49972'GCC coprocessor available REGISTERS'
49973     Specifies which coprocessor registers are available to the register
49974     allocator.  REGISTERS may be a single register, register range
49975     separated by ellipses, or comma-separated list of those.  Example:
49976
49977          #pragma GCC coprocessor available $c0...$c10, $c28
49978
49979'GCC coprocessor call_saved REGISTERS'
49980     Specifies which coprocessor registers are to be saved and restored
49981     by any function using them.  REGISTERS may be a single register,
49982     register range separated by ellipses, or comma-separated list of
49983     those.  Example:
49984
49985          #pragma GCC coprocessor call_saved $c4...$c6, $c31
49986
49987'GCC coprocessor subclass '(A|B|C|D)' = REGISTERS'
49988     Creates and defines a register class.  These register classes can
49989     be used by inline 'asm' constructs.  REGISTERS may be a single
49990     register, register range separated by ellipses, or comma-separated
49991     list of those.  Example:
49992
49993          #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
49994
49995          asm ("cpfoo %0" : "=B" (x));
49996
49997'GCC disinterrupt NAME , NAME ...'
49998     For the named functions, the compiler adds code to disable
49999     interrupts for the duration of those functions.  If any functions
50000     so named are not encountered in the source, a warning is emitted
50001     that the pragma is not used.  Examples:
50002
50003          #pragma disinterrupt foo
50004          #pragma disinterrupt bar, grill
50005          int foo () { ... }
50006
50007'GCC call NAME , NAME ...'
50008     For the named functions, the compiler always uses a
50009     register-indirect call model when calling the named functions.
50010     Examples:
50011
50012          extern int foo ();
50013          #pragma call foo
50014
50015
50016File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: S/390 Pragmas,  Prev: MeP Pragmas,  Up: Pragmas
50017
500186.61.5 RS/6000 and PowerPC Pragmas
50019----------------------------------
50020
50021The RS/6000 and PowerPC targets define one pragma for controlling
50022whether or not the 'longcall' attribute is added to function
50023declarations by default.  This pragma overrides the '-mlongcall' option,
50024but not the 'longcall' and 'shortcall' attributes.  *Note RS/6000 and
50025PowerPC Options::, for more information about when long calls are and
50026are not necessary.
50027
50028'longcall (1)'
50029     Apply the 'longcall' attribute to all subsequent function
50030     declarations.
50031
50032'longcall (0)'
50033     Do not apply the 'longcall' attribute to subsequent function
50034     declarations.
50035
50036
50037File: gcc.info,  Node: S/390 Pragmas,  Next: Darwin Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
50038
500396.61.6 S/390 Pragmas
50040--------------------
50041
50042The pragmas defined by the S/390 target correspond to the S/390 target
50043function attributes and some the additional options:
50044
50045'zvector'
50046'no-zvector'
50047
50048 Note that options of the pragma, unlike options of the target
50049attribute, do change the value of preprocessor macros like '__VEC__'.
50050They can be specified as below:
50051
50052     #pragma GCC target("string[,string]...")
50053     #pragma GCC target("string"[,"string"]...)
50054
50055
50056File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: S/390 Pragmas,  Up: Pragmas
50057
500586.61.7 Darwin Pragmas
50059---------------------
50060
50061The following pragmas are available for all architectures running the
50062Darwin operating system.  These are useful for compatibility with other
50063Mac OS compilers.
50064
50065'mark TOKENS...'
50066     This pragma is accepted, but has no effect.
50067
50068'options align=ALIGNMENT'
50069     This pragma sets the alignment of fields in structures.  The values
50070     of ALIGNMENT may be 'mac68k', to emulate m68k alignment, or
50071     'power', to emulate PowerPC alignment.  Uses of this pragma nest
50072     properly; to restore the previous setting, use 'reset' for the
50073     ALIGNMENT.
50074
50075'segment TOKENS...'
50076     This pragma is accepted, but has no effect.
50077
50078'unused (VAR [, VAR]...)'
50079     This pragma declares variables to be possibly unused.  GCC does not
50080     produce warnings for the listed variables.  The effect is similar
50081     to that of the 'unused' attribute, except that this pragma may
50082     appear anywhere within the variables' scopes.
50083
50084
50085File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
50086
500876.61.8 Solaris Pragmas
50088----------------------
50089
50090The Solaris target supports '#pragma redefine_extname' (*note
50091Symbol-Renaming Pragmas::).  It also supports additional '#pragma'
50092directives for compatibility with the system compiler.
50093
50094'align ALIGNMENT (VARIABLE [, VARIABLE]...)'
50095
50096     Increase the minimum alignment of each VARIABLE to ALIGNMENT.  This
50097     is the same as GCC's 'aligned' attribute *note Variable
50098     Attributes::).  Macro expansion occurs on the arguments to this
50099     pragma when compiling C and Objective-C.  It does not currently
50100     occur when compiling C++, but this is a bug which may be fixed in a
50101     future release.
50102
50103'fini (FUNCTION [, FUNCTION]...)'
50104
50105     This pragma causes each listed FUNCTION to be called after main, or
50106     during shared module unloading, by adding a call to the '.fini'
50107     section.
50108
50109'init (FUNCTION [, FUNCTION]...)'
50110
50111     This pragma causes each listed FUNCTION to be called during
50112     initialization (before 'main') or during shared module loading, by
50113     adding a call to the '.init' section.
50114
50115
50116File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Layout Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
50117
501186.61.9 Symbol-Renaming Pragmas
50119------------------------------
50120
50121GCC supports a '#pragma' directive that changes the name used in
50122assembly for a given declaration.  While this pragma is supported on all
50123platforms, it is intended primarily to provide compatibility with the
50124Solaris system headers.  This effect can also be achieved using the asm
50125labels extension (*note Asm Labels::).
50126
50127'redefine_extname OLDNAME NEWNAME'
50128
50129     This pragma gives the C function OLDNAME the assembly symbol
50130     NEWNAME.  The preprocessor macro '__PRAGMA_REDEFINE_EXTNAME' is
50131     defined if this pragma is available (currently on all platforms).
50132
50133 This pragma and the asm labels extension interact in a complicated
50134manner.  Here are some corner cases you may want to be aware of:
50135
50136  1. This pragma silently applies only to declarations with external
50137     linkage.  Asm labels do not have this restriction.
50138
50139  2. In C++, this pragma silently applies only to declarations with "C"
50140     linkage.  Again, asm labels do not have this restriction.
50141
50142  3. If either of the ways of changing the assembly name of a
50143     declaration are applied to a declaration whose assembly name has
50144     already been determined (either by a previous use of one of these
50145     features, or because the compiler needed the assembly name in order
50146     to generate code), and the new name is different, a warning issues
50147     and the name does not change.
50148
50149  4. The OLDNAME used by '#pragma redefine_extname' is always the
50150     C-language name.
50151
50152
50153File: gcc.info,  Node: Structure-Layout Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
50154
501556.61.10 Structure-Layout Pragmas
50156--------------------------------
50157
50158For compatibility with Microsoft Windows compilers, GCC supports a set
50159of '#pragma' directives that change the maximum alignment of members of
50160structures (other than zero-width bit-fields), unions, and classes
50161subsequently defined.  The N value below always is required to be a
50162small power of two and specifies the new alignment in bytes.
50163
50164  1. '#pragma pack(N)' simply sets the new alignment.
50165  2. '#pragma pack()' sets the alignment to the one that was in effect
50166     when compilation started (see also command-line option
50167     '-fpack-struct[=N]' *note Code Gen Options::).
50168  3. '#pragma pack(push[,N])' pushes the current alignment setting on an
50169     internal stack and then optionally sets the new alignment.
50170  4. '#pragma pack(pop)' restores the alignment setting to the one saved
50171     at the top of the internal stack (and removes that stack entry).
50172     Note that '#pragma pack([N])' does not influence this internal
50173     stack; thus it is possible to have '#pragma pack(push)' followed by
50174     multiple '#pragma pack(N)' instances and finalized by a single
50175     '#pragma pack(pop)'.
50176
50177 Some targets, e.g. x86 and PowerPC, support the '#pragma ms_struct'
50178directive which lays out structures and unions subsequently defined as
50179the documented '__attribute__ ((ms_struct))'.
50180
50181  1. '#pragma ms_struct on' turns on the Microsoft layout.
50182  2. '#pragma ms_struct off' turns off the Microsoft layout.
50183  3. '#pragma ms_struct reset' goes back to the default layout.
50184
50185 Most targets also support the '#pragma scalar_storage_order' directive
50186which lays out structures and unions subsequently defined as the
50187documented '__attribute__ ((scalar_storage_order))'.
50188
50189  1. '#pragma scalar_storage_order big-endian' sets the storage order of
50190     the scalar fields to big-endian.
50191  2. '#pragma scalar_storage_order little-endian' sets the storage order
50192     of the scalar fields to little-endian.
50193  3. '#pragma scalar_storage_order default' goes back to the endianness
50194     that was in effect when compilation started (see also command-line
50195     option '-fsso-struct=ENDIANNESS' *note C Dialect Options::).
50196
50197
50198File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Layout Pragmas,  Up: Pragmas
50199
502006.61.11 Weak Pragmas
50201--------------------
50202
50203For compatibility with SVR4, GCC supports a set of '#pragma' directives
50204for declaring symbols to be weak, and defining weak aliases.
50205
50206'#pragma weak SYMBOL'
50207     This pragma declares SYMBOL to be weak, as if the declaration had
50208     the attribute of the same name.  The pragma may appear before or
50209     after the declaration of SYMBOL.  It is not an error for SYMBOL to
50210     never be defined at all.
50211
50212'#pragma weak SYMBOL1 = SYMBOL2'
50213     This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
50214     an error if SYMBOL2 is not defined in the current translation unit.
50215
50216
50217File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
50218
502196.61.12 Diagnostic Pragmas
50220--------------------------
50221
50222GCC allows the user to selectively enable or disable certain types of
50223diagnostics, and change the kind of the diagnostic.  For example, a
50224project's policy might require that all sources compile with '-Werror'
50225but certain files might have exceptions allowing specific types of
50226warnings.  Or, a project might selectively enable diagnostics and treat
50227them as errors depending on which preprocessor macros are defined.
50228
50229'#pragma GCC diagnostic KIND OPTION'
50230
50231     Modifies the disposition of a diagnostic.  Note that not all
50232     diagnostics are modifiable; at the moment only warnings (normally
50233     controlled by '-W...') can be controlled, and not all of them.  Use
50234     '-fdiagnostics-show-option' to determine which diagnostics are
50235     controllable and which option controls them.
50236
50237     KIND is 'error' to treat this diagnostic as an error, 'warning' to
50238     treat it like a warning (even if '-Werror' is in effect), or
50239     'ignored' if the diagnostic is to be ignored.  OPTION is a double
50240     quoted string that matches the command-line option.
50241
50242          #pragma GCC diagnostic warning "-Wformat"
50243          #pragma GCC diagnostic error "-Wformat"
50244          #pragma GCC diagnostic ignored "-Wformat"
50245
50246     Note that these pragmas override any command-line options.  GCC
50247     keeps track of the location of each pragma, and issues diagnostics
50248     according to the state as of that point in the source file.  Thus,
50249     pragmas occurring after a line do not affect diagnostics caused by
50250     that line.
50251
50252'#pragma GCC diagnostic push'
50253'#pragma GCC diagnostic pop'
50254
50255     Causes GCC to remember the state of the diagnostics as of each
50256     'push', and restore to that point at each 'pop'.  If a 'pop' has no
50257     matching 'push', the command-line options are restored.
50258
50259          #pragma GCC diagnostic error "-Wuninitialized"
50260            foo(a);                       /* error is given for this one */
50261          #pragma GCC diagnostic push
50262          #pragma GCC diagnostic ignored "-Wuninitialized"
50263            foo(b);                       /* no diagnostic for this one */
50264          #pragma GCC diagnostic pop
50265            foo(c);                       /* error is given for this one */
50266          #pragma GCC diagnostic pop
50267            foo(d);                       /* depends on command-line options */
50268
50269 GCC also offers a simple mechanism for printing messages during
50270compilation.
50271
50272'#pragma message STRING'
50273
50274     Prints STRING as a compiler message on compilation.  The message is
50275     informational only, and is neither a compilation warning nor an
50276     error.
50277
50278          #pragma message "Compiling " __FILE__ "..."
50279
50280     STRING may be parenthesized, and is printed with location
50281     information.  For example,
50282
50283          #define DO_PRAGMA(x) _Pragma (#x)
50284          #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
50285
50286          TODO(Remember to fix this)
50287
50288     prints '/tmp/file.c:4: note: #pragma message: TODO - Remember to
50289     fix this'.
50290
50291
50292File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
50293
502946.61.13 Visibility Pragmas
50295--------------------------
50296
50297'#pragma GCC visibility push(VISIBILITY)'
50298'#pragma GCC visibility pop'
50299
50300     This pragma allows the user to set the visibility for multiple
50301     declarations without having to give each a visibility attribute
50302     (*note Function Attributes::).
50303
50304     In C++, '#pragma GCC visibility' affects only namespace-scope
50305     declarations.  Class members and template specializations are not
50306     affected; if you want to override the visibility for a particular
50307     member or instantiation, you must use an attribute.
50308
50309
50310File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas
50311
503126.61.14 Push/Pop Macro Pragmas
50313------------------------------
50314
50315For compatibility with Microsoft Windows compilers, GCC supports
50316'#pragma push_macro("MACRO_NAME")' and '#pragma
50317pop_macro("MACRO_NAME")'.
50318
50319'#pragma push_macro("MACRO_NAME")'
50320     This pragma saves the value of the macro named as MACRO_NAME to the
50321     top of the stack for this macro.
50322
50323'#pragma pop_macro("MACRO_NAME")'
50324     This pragma sets the value of the macro named as MACRO_NAME to the
50325     value on top of the stack for this macro.  If the stack for
50326     MACRO_NAME is empty, the value of the macro remains unchanged.
50327
50328 For example:
50329
50330     #define X  1
50331     #pragma push_macro("X")
50332     #undef X
50333     #define X -1
50334     #pragma pop_macro("X")
50335     int x [X];
50336
50337In this example, the definition of X as 1 is saved by '#pragma
50338push_macro' and restored by '#pragma pop_macro'.
50339
50340
50341File: gcc.info,  Node: Function Specific Option Pragmas,  Next: Loop-Specific Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
50342
503436.61.15 Function Specific Option Pragmas
50344----------------------------------------
50345
50346'#pragma GCC target ("STRING"...)'
50347
50348     This pragma allows you to set target specific options for functions
50349     defined later in the source file.  One or more strings can be
50350     specified.  Each function that is defined after this point is as if
50351     'attribute((target("STRING")))' was specified for that function.
50352     The parenthesis around the options is optional.  *Note Function
50353     Attributes::, for more information about the 'target' attribute and
50354     the attribute syntax.
50355
50356     The '#pragma GCC target' pragma is presently implemented for x86,
50357     ARM, AArch64, PowerPC, S/390, and Nios II targets only.
50358
50359'#pragma GCC optimize ("STRING"...)'
50360
50361     This pragma allows you to set global optimization options for
50362     functions defined later in the source file.  One or more strings
50363     can be specified.  Each function that is defined after this point
50364     is as if 'attribute((optimize("STRING")))' was specified for that
50365     function.  The parenthesis around the options is optional.  *Note
50366     Function Attributes::, for more information about the 'optimize'
50367     attribute and the attribute syntax.
50368
50369'#pragma GCC push_options'
50370'#pragma GCC pop_options'
50371
50372     These pragmas maintain a stack of the current target and
50373     optimization options.  It is intended for include files where you
50374     temporarily want to switch to using a different '#pragma GCC
50375     target' or '#pragma GCC optimize' and then to pop back to the
50376     previous options.
50377
50378'#pragma GCC reset_options'
50379
50380     This pragma clears the current '#pragma GCC target' and '#pragma
50381     GCC optimize' to use the default switches as specified on the
50382     command line.
50383
50384
50385File: gcc.info,  Node: Loop-Specific Pragmas,  Prev: Function Specific Option Pragmas,  Up: Pragmas
50386
503876.61.16 Loop-Specific Pragmas
50388-----------------------------
50389
50390'#pragma GCC ivdep'
50391
50392     With this pragma, the programmer asserts that there are no
50393     loop-carried dependencies which would prevent consecutive
50394     iterations of the following loop from executing concurrently with
50395     SIMD (single instruction multiple data) instructions.
50396
50397     For example, the compiler can only unconditionally vectorize the
50398     following loop with the pragma:
50399
50400          void foo (int n, int *a, int *b, int *c)
50401          {
50402            int i, j;
50403          #pragma GCC ivdep
50404            for (i = 0; i < n; ++i)
50405              a[i] = b[i] + c[i];
50406          }
50407
50408     In this example, using the 'restrict' qualifier had the same
50409     effect.  In the following example, that would not be possible.
50410     Assume k < -m or k >= m.  Only with the pragma, the compiler knows
50411     that it can unconditionally vectorize the following loop:
50412
50413          void ignore_vec_dep (int *a, int k, int c, int m)
50414          {
50415          #pragma GCC ivdep
50416            for (int i = 0; i < m; i++)
50417              a[i] = a[i + k] * c;
50418          }
50419
50420'#pragma GCC unroll N'
50421
50422     You can use this pragma to control how many times a loop should be
50423     unrolled.  It must be placed immediately before a 'for', 'while' or
50424     'do' loop or a '#pragma GCC ivdep', and applies only to the loop
50425     that follows.  N is an integer constant expression specifying the
50426     unrolling factor.  The values of 0 and 1 block any unrolling of the
50427     loop.
50428
50429
50430File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
50431
504326.62 Unnamed Structure and Union Fields
50433=======================================
50434
50435As permitted by ISO C11 and for compatibility with other compilers, GCC
50436allows you to define a structure or union that contains, as fields,
50437structures and unions without names.  For example:
50438
50439     struct {
50440       int a;
50441       union {
50442         int b;
50443         float c;
50444       };
50445       int d;
50446     } foo;
50447
50448In this example, you are able to access members of the unnamed union
50449with code like 'foo.b'.  Note that only unnamed structs and unions are
50450allowed, you may not have, for example, an unnamed 'int'.
50451
50452 You must never create such structures that cause ambiguous field
50453definitions.  For example, in this structure:
50454
50455     struct {
50456       int a;
50457       struct {
50458         int a;
50459       };
50460     } foo;
50461
50462it is ambiguous which 'a' is being referred to with 'foo.a'.  The
50463compiler gives errors for such constructs.
50464
50465 Unless '-fms-extensions' is used, the unnamed field must be a structure
50466or union definition without a tag (for example, 'struct { int a; };').
50467If '-fms-extensions' is used, the field may also be a definition with a
50468tag such as 'struct foo { int a; };', a reference to a previously
50469defined structure or union such as 'struct foo;', or a reference to a
50470'typedef' name for a previously defined structure or union type.
50471
50472 The option '-fplan9-extensions' enables '-fms-extensions' as well as
50473two other extensions.  First, a pointer to a structure is automatically
50474converted to a pointer to an anonymous field for assignments and
50475function calls.  For example:
50476
50477     struct s1 { int a; };
50478     struct s2 { struct s1; };
50479     extern void f1 (struct s1 *);
50480     void f2 (struct s2 *p) { f1 (p); }
50481
50482In the call to 'f1' inside 'f2', the pointer 'p' is converted into a
50483pointer to the anonymous field.
50484
50485 Second, when the type of an anonymous field is a 'typedef' for a
50486'struct' or 'union', code may refer to the field using the name of the
50487'typedef'.
50488
50489     typedef struct { int a; } s1;
50490     struct s2 { s1; };
50491     s1 f1 (struct s2 *p) { return p->s1; }
50492
50493 These usages are only permitted when they are not ambiguous.
50494
50495
50496File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
50497
504986.63 Thread-Local Storage
50499=========================
50500
50501Thread-local storage (TLS) is a mechanism by which variables are
50502allocated such that there is one instance of the variable per extant
50503thread.  The runtime model GCC uses to implement this originates in the
50504IA-64 processor-specific ABI, but has since been migrated to other
50505processors as well.  It requires significant support from the linker
50506('ld'), dynamic linker ('ld.so'), and system libraries ('libc.so' and
50507'libpthread.so'), so it is not available everywhere.
50508
50509 At the user level, the extension is visible with a new storage class
50510keyword: '__thread'.  For example:
50511
50512     __thread int i;
50513     extern __thread struct state s;
50514     static __thread char *p;
50515
50516 The '__thread' specifier may be used alone, with the 'extern' or
50517'static' specifiers, but with no other storage class specifier.  When
50518used with 'extern' or 'static', '__thread' must appear immediately after
50519the other storage class specifier.
50520
50521 The '__thread' specifier may be applied to any global, file-scoped
50522static, function-scoped static, or static data member of a class.  It
50523may not be applied to block-scoped automatic or non-static data member.
50524
50525 When the address-of operator is applied to a thread-local variable, it
50526is evaluated at run time and returns the address of the current thread's
50527instance of that variable.  An address so obtained may be used by any
50528thread.  When a thread terminates, any pointers to thread-local
50529variables in that thread become invalid.
50530
50531 No static initialization may refer to the address of a thread-local
50532variable.
50533
50534 In C++, if an initializer is present for a thread-local variable, it
50535must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
50536standard.
50537
50538 See ELF Handling For Thread-Local Storage
50539(https://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of
50540the four thread-local storage addressing models, and how the runtime is
50541expected to function.
50542
50543* Menu:
50544
50545* C99 Thread-Local Edits::
50546* C++98 Thread-Local Edits::
50547
50548
50549File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
50550
505516.63.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
50552-------------------------------------------------------
50553
50554The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
50555document the exact semantics of the language extension.
50556
50557   * '5.1.2 Execution environments'
50558
50559     Add new text after paragraph 1
50560
50561          Within either execution environment, a "thread" is a flow of
50562          control within a program.  It is implementation defined
50563          whether or not there may be more than one thread associated
50564          with a program.  It is implementation defined how threads
50565          beyond the first are created, the name and type of the
50566          function called at thread startup, and how threads may be
50567          terminated.  However, objects with thread storage duration
50568          shall be initialized before thread startup.
50569
50570   * '6.2.4 Storage durations of objects'
50571
50572     Add new text before paragraph 3
50573
50574          An object whose identifier is declared with the storage-class
50575          specifier '__thread' has "thread storage duration".  Its
50576          lifetime is the entire execution of the thread, and its stored
50577          value is initialized only once, prior to thread startup.
50578
50579   * '6.4.1 Keywords'
50580
50581     Add '__thread'.
50582
50583   * '6.7.1 Storage-class specifiers'
50584
50585     Add '__thread' to the list of storage class specifiers in paragraph
50586     1.
50587
50588     Change paragraph 2 to
50589
50590          With the exception of '__thread', at most one storage-class
50591          specifier may be given [...].  The '__thread' specifier may be
50592          used alone, or immediately following 'extern' or 'static'.
50593
50594     Add new text after paragraph 6
50595
50596          The declaration of an identifier for a variable that has block
50597          scope that specifies '__thread' shall also specify either
50598          'extern' or 'static'.
50599
50600          The '__thread' specifier shall be used only with variables.
50601
50602
50603File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
50604
506056.63.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
50606--------------------------------------------------------
50607
50608The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
50609that document the exact semantics of the language extension.
50610
50611   * [intro.execution]
50612
50613     New text after paragraph 4
50614
50615          A "thread" is a flow of control within the abstract machine.
50616          It is implementation defined whether or not there may be more
50617          than one thread.
50618
50619     New text after paragraph 7
50620
50621          It is unspecified whether additional action must be taken to
50622          ensure when and whether side effects are visible to other
50623          threads.
50624
50625   * [lex.key]
50626
50627     Add '__thread'.
50628
50629   * [basic.start.main]
50630
50631     Add after paragraph 5
50632
50633          The thread that begins execution at the 'main' function is
50634          called the "main thread".  It is implementation defined how
50635          functions beginning threads other than the main thread are
50636          designated or typed.  A function so designated, as well as the
50637          'main' function, is called a "thread startup function".  It is
50638          implementation defined what happens if a thread startup
50639          function returns.  It is implementation defined what happens
50640          to other threads when any thread calls 'exit'.
50641
50642   * [basic.start.init]
50643
50644     Add after paragraph 4
50645
50646          The storage for an object of thread storage duration shall be
50647          statically initialized before the first statement of the
50648          thread startup function.  An object of thread storage duration
50649          shall not require dynamic initialization.
50650
50651   * [basic.start.term]
50652
50653     Add after paragraph 3
50654
50655          The type of an object with thread storage duration shall not
50656          have a non-trivial destructor, nor shall it be an array type
50657          whose elements (directly or indirectly) have non-trivial
50658          destructors.
50659
50660   * [basic.stc]
50661
50662     Add "thread storage duration" to the list in paragraph 1.
50663
50664     Change paragraph 2
50665
50666          Thread, static, and automatic storage durations are associated
50667          with objects introduced by declarations [...].
50668
50669     Add '__thread' to the list of specifiers in paragraph 3.
50670
50671   * [basic.stc.thread]
50672
50673     New section before [basic.stc.static]
50674
50675          The keyword '__thread' applied to a non-local object gives the
50676          object thread storage duration.
50677
50678          A local variable or class data member declared both 'static'
50679          and '__thread' gives the variable or member thread storage
50680          duration.
50681
50682   * [basic.stc.static]
50683
50684     Change paragraph 1
50685
50686          All objects that have neither thread storage duration, dynamic
50687          storage duration nor are local [...].
50688
50689   * [dcl.stc]
50690
50691     Add '__thread' to the list in paragraph 1.
50692
50693     Change paragraph 1
50694
50695          With the exception of '__thread', at most one
50696          STORAGE-CLASS-SPECIFIER shall appear in a given
50697          DECL-SPECIFIER-SEQ.  The '__thread' specifier may be used
50698          alone, or immediately following the 'extern' or 'static'
50699          specifiers.  [...]
50700
50701     Add after paragraph 5
50702
50703          The '__thread' specifier can be applied only to the names of
50704          objects and to anonymous unions.
50705
50706   * [class.mem]
50707
50708     Add after paragraph 6
50709
50710          Non-'static' members shall not be '__thread'.
50711
50712
50713File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
50714
507156.64 Binary Constants using the '0b' Prefix
50716===========================================
50717
50718Integer constants can be written as binary constants, consisting of a
50719sequence of '0' and '1' digits, prefixed by '0b' or '0B'.  This is
50720particularly useful in environments that operate a lot on the bit level
50721(like microcontrollers).
50722
50723 The following statements are identical:
50724
50725     i =       42;
50726     i =     0x2a;
50727     i =      052;
50728     i = 0b101010;
50729
50730 The type of these constants follows the same rules as for octal or
50731hexadecimal integer constants, so suffixes like 'L' or 'UL' can be
50732applied.
50733
50734
50735File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
50736
507377 Extensions to the C++ Language
50738********************************
50739
50740The GNU compiler provides these extensions to the C++ language (and you
50741can also use most of the C language extensions in your C++ programs).
50742If you want to write code that checks whether these features are
50743available, you can test for the GNU compiler the same way as for C
50744programs: check for a predefined macro '__GNUC__'.  You can also use
50745'__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
50746(cpp)Common Predefined Macros.).
50747
50748* Menu:
50749
50750* C++ Volatiles::       What constitutes an access to a volatile object.
50751* Restricted Pointers:: C99 restricted pointers and references.
50752* Vague Linkage::       Where G++ puts inlines, vtables and such.
50753* C++ Interface::       You can use a single C++ header file for both
50754                        declarations and definitions.
50755* Template Instantiation:: Methods for ensuring that exactly one copy of
50756                        each needed template instantiation is emitted.
50757* Bound member functions:: You can extract a function pointer to the
50758                        method denoted by a '->*' or '.*' expression.
50759* C++ Attributes::      Variable, function, and type attributes for C++ only.
50760* Function Multiversioning::   Declaring multiple function versions.
50761* Type Traits::         Compiler support for type traits.
50762* C++ Concepts::        Improved support for generic programming.
50763* Deprecated Features:: Things will disappear from G++.
50764* Backwards Compatibility:: Compatibilities with earlier definitions of C++.
50765
50766
50767File: gcc.info,  Node: C++ Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
50768
507697.1 When is a Volatile C++ Object Accessed?
50770===========================================
50771
50772The C++ standard differs from the C standard in its treatment of
50773volatile objects.  It fails to specify what constitutes a volatile
50774access, except to say that C++ should behave in a similar manner to C
50775with respect to volatiles, where possible.  However, the different
50776lvalueness of expressions between C and C++ complicate the behavior.
50777G++ behaves the same as GCC for volatile access, *Note Volatiles: C
50778Extensions, for a description of GCC's behavior.
50779
50780 The C and C++ language specifications differ when an object is accessed
50781in a void context:
50782
50783     volatile int *src = SOMEVALUE;
50784     *src;
50785
50786 The C++ standard specifies that such expressions do not undergo lvalue
50787to rvalue conversion, and that the type of the dereferenced object may
50788be incomplete.  The C++ standard does not specify explicitly that it is
50789lvalue to rvalue conversion that is responsible for causing an access.
50790There is reason to believe that it is, because otherwise certain simple
50791expressions become undefined.  However, because it would surprise most
50792programmers, G++ treats dereferencing a pointer to volatile object of
50793complete type as GCC would do for an equivalent type in C.  When the
50794object has incomplete type, G++ issues a warning; if you wish to force
50795an error, you must force a conversion to rvalue with, for instance, a
50796static cast.
50797
50798 When using a reference to volatile, G++ does not treat equivalent
50799expressions as accesses to volatiles, but instead issues a warning that
50800no volatile is accessed.  The rationale for this is that otherwise it
50801becomes difficult to determine where volatile access occur, and not
50802possible to ignore the return value from functions returning volatile
50803references.  Again, if you wish to force a read, cast the reference to
50804an rvalue.
50805
50806 G++ implements the same behavior as GCC does when assigning to a
50807volatile object--there is no reread of the assigned-to object, the
50808assigned rvalue is reused.  Note that in C++ assignment expressions are
50809lvalues, and if used as an lvalue, the volatile object is referred to.
50810For instance, VREF refers to VOBJ, as expected, in the following
50811example:
50812
50813     volatile int vobj;
50814     volatile int &vref = vobj = SOMETHING;
50815
50816
50817File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: C++ Volatiles,  Up: C++ Extensions
50818
508197.2 Restricting Pointer Aliasing
50820================================
50821
50822As with the C front end, G++ understands the C99 feature of restricted
50823pointers, specified with the '__restrict__', or '__restrict' type
50824qualifier.  Because you cannot compile C++ by specifying the '-std=c99'
50825language flag, 'restrict' is not a keyword in C++.
50826
50827 In addition to allowing restricted pointers, you can specify restricted
50828references, which indicate that the reference is not aliased in the
50829local context.
50830
50831     void fn (int *__restrict__ rptr, int &__restrict__ rref)
50832     {
50833       /* ... */
50834     }
50835
50836In the body of 'fn', RPTR points to an unaliased integer and RREF refers
50837to a (different) unaliased integer.
50838
50839 You may also specify whether a member function's THIS pointer is
50840unaliased by using '__restrict__' as a member function qualifier.
50841
50842     void T::fn () __restrict__
50843     {
50844       /* ... */
50845     }
50846
50847Within the body of 'T::fn', THIS has the effective definition 'T
50848*__restrict__ const this'.  Notice that the interpretation of a
50849'__restrict__' member function qualifier is different to that of 'const'
50850or 'volatile' qualifier, in that it is applied to the pointer rather
50851than the object.  This is consistent with other compilers that implement
50852restricted pointers.
50853
50854 As with all outermost parameter qualifiers, '__restrict__' is ignored
50855in function definition matching.  This means you only need to specify
50856'__restrict__' in a function definition, rather than in a function
50857prototype as well.
50858
50859
50860File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
50861
508627.3 Vague Linkage
50863=================
50864
50865There are several constructs in C++ that require space in the object
50866file but are not clearly tied to a single translation unit.  We say that
50867these constructs have "vague linkage".  Typically such constructs are
50868emitted wherever they are needed, though sometimes we can be more
50869clever.
50870
50871Inline Functions
50872     Inline functions are typically defined in a header file which can
50873     be included in many different compilations.  Hopefully they can
50874     usually be inlined, but sometimes an out-of-line copy is necessary,
50875     if the address of the function is taken or if inlining fails.  In
50876     general, we emit an out-of-line copy in all translation units where
50877     one is needed.  As an exception, we only emit inline virtual
50878     functions with the vtable, since it always requires a copy.
50879
50880     Local static variables and string constants used in an inline
50881     function are also considered to have vague linkage, since they must
50882     be shared between all inlined and out-of-line instances of the
50883     function.
50884
50885VTables
50886     C++ virtual functions are implemented in most compilers using a
50887     lookup table, known as a vtable.  The vtable contains pointers to
50888     the virtual functions provided by a class, and each object of the
50889     class contains a pointer to its vtable (or vtables, in some
50890     multiple-inheritance situations).  If the class declares any
50891     non-inline, non-pure virtual functions, the first one is chosen as
50892     the "key method" for the class, and the vtable is only emitted in
50893     the translation unit where the key method is defined.
50894
50895     _Note:_ If the chosen key method is later defined as inline, the
50896     vtable is still emitted in every translation unit that defines it.
50897     Make sure that any inline virtuals are declared inline in the class
50898     body, even if they are not defined there.
50899
50900'type_info' objects
50901     C++ requires information about types to be written out in order to
50902     implement 'dynamic_cast', 'typeid' and exception handling.  For
50903     polymorphic classes (classes with virtual functions), the
50904     'type_info' object is written out along with the vtable so that
50905     'dynamic_cast' can determine the dynamic type of a class object at
50906     run time.  For all other types, we write out the 'type_info' object
50907     when it is used: when applying 'typeid' to an expression, throwing
50908     an object, or referring to a type in a catch clause or exception
50909     specification.
50910
50911Template Instantiations
50912     Most everything in this section also applies to template
50913     instantiations, but there are other options as well.  *Note Where's
50914     the Template?: Template Instantiation.
50915
50916 When used with GNU ld version 2.8 or later on an ELF system such as
50917GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
50918these constructs will be discarded at link time.  This is known as
50919COMDAT support.
50920
50921 On targets that don't support COMDAT, but do support weak symbols, GCC
50922uses them.  This way one copy overrides all the others, but the unused
50923copies still take up space in the executable.
50924
50925 For targets that do not support either COMDAT or weak symbols, most
50926entities with vague linkage are emitted as local symbols to avoid
50927duplicate definition errors from the linker.  This does not happen for
50928local statics in inlines, however, as having multiple copies almost
50929certainly breaks things.
50930
50931 *Note Declarations and Definitions in One Header: C++ Interface, for
50932another way to control placement of these constructs.
50933
50934
50935File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
50936
509377.4 C++ Interface and Implementation Pragmas
50938============================================
50939
50940'#pragma interface' and '#pragma implementation' provide the user with a
50941way of explicitly directing the compiler to emit entities with vague
50942linkage (and debugging information) in a particular translation unit.
50943
50944 _Note:_ These '#pragma's have been superceded as of GCC 2.7.2 by COMDAT
50945support and the "key method" heuristic mentioned in *note Vague
50946Linkage::.  Using them can actually cause your program to grow due to
50947unnecessary out-of-line copies of inline functions.
50948
50949'#pragma interface'
50950'#pragma interface "SUBDIR/OBJECTS.h"'
50951     Use this directive in _header files_ that define object classes, to
50952     save space in most of the object files that use those classes.
50953     Normally, local copies of certain information (backup copies of
50954     inline member functions, debugging information, and the internal
50955     tables that implement virtual functions) must be kept in each
50956     object file that includes class definitions.  You can use this
50957     pragma to avoid such duplication.  When a header file containing
50958     '#pragma interface' is included in a compilation, this auxiliary
50959     information is not generated (unless the main input source file
50960     itself uses '#pragma implementation').  Instead, the object files
50961     contain references to be resolved at link time.
50962
50963     The second form of this directive is useful for the case where you
50964     have multiple headers with the same name in different directories.
50965     If you use this form, you must specify the same string to '#pragma
50966     implementation'.
50967
50968'#pragma implementation'
50969'#pragma implementation "OBJECTS.h"'
50970     Use this pragma in a _main input file_, when you want full output
50971     from included header files to be generated (and made globally
50972     visible).  The included header file, in turn, should use '#pragma
50973     interface'.  Backup copies of inline member functions, debugging
50974     information, and the internal tables used to implement virtual
50975     functions are all generated in implementation files.
50976
50977     If you use '#pragma implementation' with no argument, it applies to
50978     an include file with the same basename(1) as your source file.  For
50979     example, in 'allclass.cc', giving just '#pragma implementation' by
50980     itself is equivalent to '#pragma implementation "allclass.h"'.
50981
50982     Use the string argument if you want a single implementation file to
50983     include code from multiple header files.  (You must also use
50984     '#include' to include the header file; '#pragma implementation'
50985     only specifies how to use the file--it doesn't actually include
50986     it.)
50987
50988     There is no way to split up the contents of a single header file
50989     into multiple implementation files.
50990
50991 '#pragma implementation' and '#pragma interface' also have an effect on
50992function inlining.
50993
50994 If you define a class in a header file marked with '#pragma interface',
50995the effect on an inline function defined in that class is similar to an
50996explicit 'extern' declaration--the compiler emits no code at all to
50997define an independent version of the function.  Its definition is used
50998only for inlining with its callers.
50999
51000 Conversely, when you include the same header file in a main source file
51001that declares it as '#pragma implementation', the compiler emits code
51002for the function itself; this defines a version of the function that can
51003be found via pointers (or by callers compiled without inlining).  If all
51004calls to the function can be inlined, you can avoid emitting the
51005function by compiling with '-fno-implement-inlines'.  If any calls are
51006not inlined, you will get linker errors.
51007
51008   ---------- Footnotes ----------
51009
51010   (1) A file's "basename" is the name stripped of all leading path
51011information and of trailing suffixes, such as '.h' or '.C' or '.cc'.
51012
51013
51014File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
51015
510167.5 Where's the Template?
51017=========================
51018
51019C++ templates were the first language feature to require more
51020intelligence from the environment than was traditionally found on a UNIX
51021system.  Somehow the compiler and linker have to make sure that each
51022template instance occurs exactly once in the executable if it is needed,
51023and not at all otherwise.  There are two basic approaches to this
51024problem, which are referred to as the Borland model and the Cfront
51025model.
51026
51027Borland model
51028     Borland C++ solved the template instantiation problem by adding the
51029     code equivalent of common blocks to their linker; the compiler
51030     emits template instances in each translation unit that uses them,
51031     and the linker collapses them together.  The advantage of this
51032     model is that the linker only has to consider the object files
51033     themselves; there is no external complexity to worry about.  The
51034     disadvantage is that compilation time is increased because the
51035     template code is being compiled repeatedly.  Code written for this
51036     model tends to include definitions of all templates in the header
51037     file, since they must be seen to be instantiated.
51038
51039Cfront model
51040     The AT&T C++ translator, Cfront, solved the template instantiation
51041     problem by creating the notion of a template repository, an
51042     automatically maintained place where template instances are stored.
51043     A more modern version of the repository works as follows: As
51044     individual object files are built, the compiler places any template
51045     definitions and instantiations encountered in the repository.  At
51046     link time, the link wrapper adds in the objects in the repository
51047     and compiles any needed instances that were not previously emitted.
51048     The advantages of this model are more optimal compilation speed and
51049     the ability to use the system linker; to implement the Borland
51050     model a compiler vendor also needs to replace the linker.  The
51051     disadvantages are vastly increased complexity, and thus potential
51052     for error; for some code this can be just as transparent, but in
51053     practice it can been very difficult to build multiple programs in
51054     one directory and one program in multiple directories.  Code
51055     written for this model tends to separate definitions of non-inline
51056     member templates into a separate file, which should be compiled
51057     separately.
51058
51059 G++ implements the Borland model on targets where the linker supports
51060it, including ELF targets (such as GNU/Linux), Mac OS X and Microsoft
51061Windows.  Otherwise G++ implements neither automatic model.
51062
51063 You have the following options for dealing with template
51064instantiations:
51065
51066  1. Do nothing.  Code written for the Borland model works fine, but
51067     each translation unit contains instances of each of the templates
51068     it uses.  The duplicate instances will be discarded by the linker,
51069     but in a large program, this can lead to an unacceptable amount of
51070     code duplication in object files or shared libraries.
51071
51072     Duplicate instances of a template can be avoided by defining an
51073     explicit instantiation in one object file, and preventing the
51074     compiler from doing implicit instantiations in any other object
51075     files by using an explicit instantiation declaration, using the
51076     'extern template' syntax:
51077
51078          extern template int max (int, int);
51079
51080     This syntax is defined in the C++ 2011 standard, but has been
51081     supported by G++ and other compilers since well before 2011.
51082
51083     Explicit instantiations can be used for the largest or most
51084     frequently duplicated instances, without having to know exactly
51085     which other instances are used in the rest of the program.  You can
51086     scatter the explicit instantiations throughout your program,
51087     perhaps putting them in the translation units where the instances
51088     are used or the translation units that define the templates
51089     themselves; you can put all of the explicit instantiations you need
51090     into one big file; or you can create small files like
51091
51092          #include "Foo.h"
51093          #include "Foo.cc"
51094
51095          template class Foo<int>;
51096          template ostream& operator <<
51097                          (ostream&, const Foo<int>&);
51098
51099     for each of the instances you need, and create a template
51100     instantiation library from those.
51101
51102     This is the simplest option, but also offers flexibility and
51103     fine-grained control when necessary.  It is also the most portable
51104     alternative and programs using this approach will work with most
51105     modern compilers.
51106
51107  2. Compile your template-using code with '-frepo'.  The compiler
51108     generates files with the extension '.rpo' listing all of the
51109     template instantiations used in the corresponding object files that
51110     could be instantiated there; the link wrapper, 'collect2', then
51111     updates the '.rpo' files to tell the compiler where to place those
51112     instantiations and rebuild any affected object files.  The
51113     link-time overhead is negligible after the first pass, as the
51114     compiler continues to place the instantiations in the same files.
51115
51116     This can be a suitable option for application code written for the
51117     Borland model, as it usually just works.  Code written for the
51118     Cfront model needs to be modified so that the template definitions
51119     are available at one or more points of instantiation; usually this
51120     is as simple as adding '#include <tmethods.cc>' to the end of each
51121     template header.
51122
51123     For library code, if you want the library to provide all of the
51124     template instantiations it needs, just try to link all of its
51125     object files together; the link will fail, but cause the
51126     instantiations to be generated as a side effect.  Be warned,
51127     however, that this may cause conflicts if multiple libraries try to
51128     provide the same instantiations.  For greater control, use explicit
51129     instantiation as described in the next option.
51130
51131  3. Compile your code with '-fno-implicit-templates' to disable the
51132     implicit generation of template instances, and explicitly
51133     instantiate all the ones you use.  This approach requires more
51134     knowledge of exactly which instances you need than do the others,
51135     but it's less mysterious and allows greater control if you want to
51136     ensure that only the intended instances are used.
51137
51138     If you are using Cfront-model code, you can probably get away with
51139     not using '-fno-implicit-templates' when compiling files that don't
51140     '#include' the member template definitions.
51141
51142     If you use one big file to do the instantiations, you may want to
51143     compile it without '-fno-implicit-templates' so you get all of the
51144     instances required by your explicit instantiations (but not by any
51145     other files) without having to specify them as well.
51146
51147     In addition to forward declaration of explicit instantiations (with
51148     'extern'), G++ has extended the template instantiation syntax to
51149     support instantiation of the compiler support data for a template
51150     class (i.e. the vtable) without instantiating any of its members
51151     (with 'inline'), and instantiation of only the static data members
51152     of a template class, without the support data or member functions
51153     (with 'static'):
51154
51155          inline template class Foo<int>;
51156          static template class Foo<int>;
51157
51158
51159File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
51160
511617.6 Extracting the Function Pointer from a Bound Pointer to Member Function
51162===========================================================================
51163
51164In C++, pointer to member functions (PMFs) are implemented using a wide
51165pointer of sorts to handle all the possible call mechanisms; the PMF
51166needs to store information about how to adjust the 'this' pointer, and
51167if the function pointed to is virtual, where to find the vtable, and
51168where in the vtable to look for the member function.  If you are using
51169PMFs in an inner loop, you should really reconsider that decision.  If
51170that is not an option, you can extract the pointer to the function that
51171would be called for a given object/PMF pair and call it directly inside
51172the inner loop, to save a bit of time.
51173
51174 Note that you still pay the penalty for the call through a function
51175pointer; on most modern architectures, such a call defeats the branch
51176prediction features of the CPU.  This is also true of normal virtual
51177function calls.
51178
51179 The syntax for this extension is
51180
51181     extern A a;
51182     extern int (A::*fp)();
51183     typedef int (*fptr)(A *);
51184
51185     fptr p = (fptr)(a.*fp);
51186
51187 For PMF constants (i.e. expressions of the form '&Klasse::Member'), no
51188object is needed to obtain the address of the function.  They can be
51189converted to function pointers directly:
51190
51191     fptr p1 = (fptr)(&A::foo);
51192
51193 You must specify '-Wno-pmf-conversions' to use this extension.
51194
51195
51196File: gcc.info,  Node: C++ Attributes,  Next: Function Multiversioning,  Prev: Bound member functions,  Up: C++ Extensions
51197
511987.7 C++-Specific Variable, Function, and Type Attributes
51199========================================================
51200
51201Some attributes only make sense for C++ programs.
51202
51203'abi_tag ("TAG", ...)'
51204     The 'abi_tag' attribute can be applied to a function, variable, or
51205     class declaration.  It modifies the mangled name of the entity to
51206     incorporate the tag name, in order to distinguish the function or
51207     class from an earlier version with a different ABI; perhaps the
51208     class has changed size, or the function has a different return type
51209     that is not encoded in the mangled name.
51210
51211     The attribute can also be applied to an inline namespace, but does
51212     not affect the mangled name of the namespace; in this case it is
51213     only used for '-Wabi-tag' warnings and automatic tagging of
51214     functions and variables.  Tagging inline namespaces is generally
51215     preferable to tagging individual declarations, but the latter is
51216     sometimes necessary, such as when only certain members of a class
51217     need to be tagged.
51218
51219     The argument can be a list of strings of arbitrary length.  The
51220     strings are sorted on output, so the order of the list is
51221     unimportant.
51222
51223     A redeclaration of an entity must not add new ABI tags, since doing
51224     so would change the mangled name.
51225
51226     The ABI tags apply to a name, so all instantiations and
51227     specializations of a template have the same tags.  The attribute
51228     will be ignored if applied to an explicit specialization or
51229     instantiation.
51230
51231     The '-Wabi-tag' flag enables a warning about a class which does not
51232     have all the ABI tags used by its subobjects and virtual functions;
51233     for users with code that needs to coexist with an earlier ABI,
51234     using this option can help to find all affected types that need to
51235     be tagged.
51236
51237     When a type involving an ABI tag is used as the type of a variable
51238     or return type of a function where that tag is not already present
51239     in the signature of the function, the tag is automatically applied
51240     to the variable or function.  '-Wabi-tag' also warns about this
51241     situation; this warning can be avoided by explicitly tagging the
51242     variable or function or moving it into a tagged inline namespace.
51243
51244'init_priority (PRIORITY)'
51245
51246     In Standard C++, objects defined at namespace scope are guaranteed
51247     to be initialized in an order in strict accordance with that of
51248     their definitions _in a given translation unit_.  No guarantee is
51249     made for initializations across translation units.  However, GNU
51250     C++ allows users to control the order of initialization of objects
51251     defined at namespace scope with the 'init_priority' attribute by
51252     specifying a relative PRIORITY, a constant integral expression
51253     currently bounded between 101 and 65535 inclusive.  Lower numbers
51254     indicate a higher priority.
51255
51256     In the following example, 'A' would normally be created before 'B',
51257     but the 'init_priority' attribute reverses that order:
51258
51259          Some_Class  A  __attribute__ ((init_priority (2000)));
51260          Some_Class  B  __attribute__ ((init_priority (543)));
51261
51262     Note that the particular values of PRIORITY do not matter; only
51263     their relative ordering.
51264
51265'warn_unused'
51266
51267     For C++ types with non-trivial constructors and/or destructors it
51268     is impossible for the compiler to determine whether a variable of
51269     this type is truly unused if it is not referenced.  This type
51270     attribute informs the compiler that variables of this type should
51271     be warned about if they appear to be unused, just like variables of
51272     fundamental types.
51273
51274     This attribute is appropriate for types which just represent a
51275     value, such as 'std::string'; it is not appropriate for types which
51276     control a resource, such as 'std::lock_guard'.
51277
51278     This attribute is also accepted in C, but it is unnecessary because
51279     C does not have constructors or destructors.
51280
51281
51282File: gcc.info,  Node: Function Multiversioning,  Next: Type Traits,  Prev: C++ Attributes,  Up: C++ Extensions
51283
512847.8 Function Multiversioning
51285============================
51286
51287With the GNU C++ front end, for x86 targets, you may specify multiple
51288versions of a function, where each function is specialized for a
51289specific target feature.  At runtime, the appropriate version of the
51290function is automatically executed depending on the characteristics of
51291the execution platform.  Here is an example.
51292
51293     __attribute__ ((target ("default")))
51294     int foo ()
51295     {
51296       // The default version of foo.
51297       return 0;
51298     }
51299
51300     __attribute__ ((target ("sse4.2")))
51301     int foo ()
51302     {
51303       // foo version for SSE4.2
51304       return 1;
51305     }
51306
51307     __attribute__ ((target ("arch=atom")))
51308     int foo ()
51309     {
51310       // foo version for the Intel ATOM processor
51311       return 2;
51312     }
51313
51314     __attribute__ ((target ("arch=amdfam10")))
51315     int foo ()
51316     {
51317       // foo version for the AMD Family 0x10 processors.
51318       return 3;
51319     }
51320
51321     int main ()
51322     {
51323       int (*p)() = &foo;
51324       assert ((*p) () == foo ());
51325       return 0;
51326     }
51327
51328 In the above example, four versions of function foo are created.  The
51329first version of foo with the target attribute "default" is the default
51330version.  This version gets executed when no other target specific
51331version qualifies for execution on a particular platform.  A new version
51332of foo is created by using the same function signature but with a
51333different target string.  Function foo is called or a pointer to it is
51334taken just like a regular function.  GCC takes care of doing the
51335dispatching to call the right version at runtime.  Refer to the GCC wiki
51336on Function Multiversioning
51337(http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details.
51338
51339
51340File: gcc.info,  Node: Type Traits,  Next: C++ Concepts,  Prev: Function Multiversioning,  Up: C++ Extensions
51341
513427.9 Type Traits
51343===============
51344
51345The C++ front end implements syntactic extensions that allow
51346compile-time determination of various characteristics of a type (or of a
51347pair of types).
51348
51349'__has_nothrow_assign (type)'
51350     If 'type' is const qualified or is a reference type then the trait
51351     is false.  Otherwise if '__has_trivial_assign (type)' is true then
51352     the trait is true, else if 'type' is a cv class or union type with
51353     copy assignment operators that are known not to throw an exception
51354     then the trait is true, else it is false.  Requires: 'type' shall
51355     be a complete type, (possibly cv-qualified) 'void', or an array of
51356     unknown bound.
51357
51358'__has_nothrow_copy (type)'
51359     If '__has_trivial_copy (type)' is true then the trait is true, else
51360     if 'type' is a cv class or union type with copy constructors that
51361     are known not to throw an exception then the trait is true, else it
51362     is false.  Requires: 'type' shall be a complete type, (possibly
51363     cv-qualified) 'void', or an array of unknown bound.
51364
51365'__has_nothrow_constructor (type)'
51366     If '__has_trivial_constructor (type)' is true then the trait is
51367     true, else if 'type' is a cv class or union type (or array thereof)
51368     with a default constructor that is known not to throw an exception
51369     then the trait is true, else it is false.  Requires: 'type' shall
51370     be a complete type, (possibly cv-qualified) 'void', or an array of
51371     unknown bound.
51372
51373'__has_trivial_assign (type)'
51374     If 'type' is const qualified or is a reference type then the trait
51375     is false.  Otherwise if '__is_pod (type)' is true then the trait is
51376     true, else if 'type' is a cv class or union type with a trivial
51377     copy assignment ([class.copy]) then the trait is true, else it is
51378     false.  Requires: 'type' shall be a complete type, (possibly
51379     cv-qualified) 'void', or an array of unknown bound.
51380
51381'__has_trivial_copy (type)'
51382     If '__is_pod (type)' is true or 'type' is a reference type then the
51383     trait is true, else if 'type' is a cv class or union type with a
51384     trivial copy constructor ([class.copy]) then the trait is true,
51385     else it is false.  Requires: 'type' shall be a complete type,
51386     (possibly cv-qualified) 'void', or an array of unknown bound.
51387
51388'__has_trivial_constructor (type)'
51389     If '__is_pod (type)' is true then the trait is true, else if 'type'
51390     is a cv class or union type (or array thereof) with a trivial
51391     default constructor ([class.ctor]) then the trait is true, else it
51392     is false.  Requires: 'type' shall be a complete type, (possibly
51393     cv-qualified) 'void', or an array of unknown bound.
51394
51395'__has_trivial_destructor (type)'
51396     If '__is_pod (type)' is true or 'type' is a reference type then the
51397     trait is true, else if 'type' is a cv class or union type (or array
51398     thereof) with a trivial destructor ([class.dtor]) then the trait is
51399     true, else it is false.  Requires: 'type' shall be a complete type,
51400     (possibly cv-qualified) 'void', or an array of unknown bound.
51401
51402'__has_virtual_destructor (type)'
51403     If 'type' is a class type with a virtual destructor ([class.dtor])
51404     then the trait is true, else it is false.  Requires: 'type' shall
51405     be a complete type, (possibly cv-qualified) 'void', or an array of
51406     unknown bound.
51407
51408'__is_abstract (type)'
51409     If 'type' is an abstract class ([class.abstract]) then the trait is
51410     true, else it is false.  Requires: 'type' shall be a complete type,
51411     (possibly cv-qualified) 'void', or an array of unknown bound.
51412
51413'__is_base_of (base_type, derived_type)'
51414     If 'base_type' is a base class of 'derived_type' ([class.derived])
51415     then the trait is true, otherwise it is false.  Top-level cv
51416     qualifications of 'base_type' and 'derived_type' are ignored.  For
51417     the purposes of this trait, a class type is considered is own base.
51418     Requires: if '__is_class (base_type)' and '__is_class
51419     (derived_type)' are true and 'base_type' and 'derived_type' are not
51420     the same type (disregarding cv-qualifiers), 'derived_type' shall be
51421     a complete type.  A diagnostic is produced if this requirement is
51422     not met.
51423
51424'__is_class (type)'
51425     If 'type' is a cv class type, and not a union type
51426     ([basic.compound]) the trait is true, else it is false.
51427
51428'__is_empty (type)'
51429     If '__is_class (type)' is false then the trait is false.  Otherwise
51430     'type' is considered empty if and only if: 'type' has no non-static
51431     data members, or all non-static data members, if any, are
51432     bit-fields of length 0, and 'type' has no virtual members, and
51433     'type' has no virtual base classes, and 'type' has no base classes
51434     'base_type' for which '__is_empty (base_type)' is false.  Requires:
51435     'type' shall be a complete type, (possibly cv-qualified) 'void', or
51436     an array of unknown bound.
51437
51438'__is_enum (type)'
51439     If 'type' is a cv enumeration type ([basic.compound]) the trait is
51440     true, else it is false.
51441
51442'__is_literal_type (type)'
51443     If 'type' is a literal type ([basic.types]) the trait is true, else
51444     it is false.  Requires: 'type' shall be a complete type, (possibly
51445     cv-qualified) 'void', or an array of unknown bound.
51446
51447'__is_pod (type)'
51448     If 'type' is a cv POD type ([basic.types]) then the trait is true,
51449     else it is false.  Requires: 'type' shall be a complete type,
51450     (possibly cv-qualified) 'void', or an array of unknown bound.
51451
51452'__is_polymorphic (type)'
51453     If 'type' is a polymorphic class ([class.virtual]) then the trait
51454     is true, else it is false.  Requires: 'type' shall be a complete
51455     type, (possibly cv-qualified) 'void', or an array of unknown bound.
51456
51457'__is_standard_layout (type)'
51458     If 'type' is a standard-layout type ([basic.types]) the trait is
51459     true, else it is false.  Requires: 'type' shall be a complete type,
51460     (possibly cv-qualified) 'void', or an array of unknown bound.
51461
51462'__is_trivial (type)'
51463     If 'type' is a trivial type ([basic.types]) the trait is true, else
51464     it is false.  Requires: 'type' shall be a complete type, (possibly
51465     cv-qualified) 'void', or an array of unknown bound.
51466
51467'__is_union (type)'
51468     If 'type' is a cv union type ([basic.compound]) the trait is true,
51469     else it is false.
51470
51471'__underlying_type (type)'
51472     The underlying type of 'type'.  Requires: 'type' shall be an
51473     enumeration type ([dcl.enum]).
51474
51475'__integer_pack (length)'
51476     When used as the pattern of a pack expansion within a template
51477     definition, expands to a template argument pack containing integers
51478     from '0' to 'length-1'.  This is provided for efficient
51479     implementation of 'std::make_integer_sequence'.
51480
51481
51482File: gcc.info,  Node: C++ Concepts,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
51483
514847.10 C++ Concepts
51485=================
51486
51487C++ concepts provide much-improved support for generic programming.  In
51488particular, they allow the specification of constraints on template
51489arguments.  The constraints are used to extend the usual overloading and
51490partial specialization capabilities of the language, allowing generic
51491data structures and algorithms to be "refined" based on their properties
51492rather than their type names.
51493
51494 The following keywords are reserved for concepts.
51495
51496'assumes'
51497     States an expression as an assumption, and if possible, verifies
51498     that the assumption is valid.  For example, 'assume(n > 0)'.
51499
51500'axiom'
51501     Introduces an axiom definition.  Axioms introduce requirements on
51502     values.
51503
51504'forall'
51505     Introduces a universally quantified object in an axiom.  For
51506     example, 'forall (int n) n + 0 == n').
51507
51508'concept'
51509     Introduces a concept definition.  Concepts are sets of syntactic
51510     and semantic requirements on types and their values.
51511
51512'requires'
51513     Introduces constraints on template arguments or requirements for a
51514     member function of a class template.
51515
51516 The front end also exposes a number of internal mechanism that can be
51517used to simplify the writing of type traits.  Note that some of these
51518traits are likely to be removed in the future.
51519
51520'__is_same (type1, type2)'
51521     A binary type trait: true whenever the type arguments are the same.
51522
51523
51524File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: C++ Concepts,  Up: C++ Extensions
51525
515267.11 Deprecated Features
51527========================
51528
51529In the past, the GNU C++ compiler was extended to experiment with new
51530features, at a time when the C++ language was still evolving.  Now that
51531the C++ standard is complete, some of those features are superseded by
51532superior alternatives.  Using the old features might cause a warning in
51533some cases that the feature will be dropped in the future.  In other
51534cases, the feature might be gone already.
51535
51536 While the list below is not exhaustive, it documents some of the
51537options that are now deprecated or have been removed:
51538
51539'-fno-for-scope'
51540'-ffriend-injection'
51541     These two options provide compatibility with pre-standard C++.
51542     *Note Backwards Compatibility::.
51543
51544 G++ allows a virtual function returning 'void *' to be overridden by
51545one returning a different pointer type.  This extension to the covariant
51546return type rules is now deprecated and will be removed from a future
51547version.
51548
51549 The use of default arguments in function pointers, function typedefs
51550and other places where they are not permitted by the standard is
51551deprecated and will be removed from a future version of G++.
51552
51553 G++ allows floating-point literals to appear in integral constant
51554expressions, e.g. ' enum E { e = int(2.2 * 3.7) } ' This extension is
51555deprecated and will be removed from a future version.
51556
51557 G++ allows static data members of const floating-point type to be
51558declared with an initializer in a class definition.  The standard only
51559allows initializers for static members of const integral types and const
51560enumeration types so this extension has been deprecated and will be
51561removed from a future version.
51562
51563 G++ allows attributes to follow a parenthesized direct initializer,
51564e.g. ' int f (0) __attribute__ ((something)); ' This extension has been
51565ignored since G++ 3.3 and is deprecated.
51566
51567 G++ allows anonymous structs and unions to have members that are not
51568public non-static data members (i.e. fields).  These extensions are
51569deprecated.
51570
51571
51572File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
51573
515747.12 Backwards Compatibility
51575============================
51576
51577Now that there is a definitive ISO standard C++, G++ has a specification
51578to adhere to.  The C++ language evolved over time, and features that
51579used to be acceptable in previous drafts of the standard, such as the
51580ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
51581to allow compilation of C++ written to such drafts, G++ contains some
51582backwards compatibilities.  _All such backwards compatibility features
51583are liable to disappear in future versions of G++._  They should be
51584considered deprecated.  *Note Deprecated Features::.
51585
51586'For scope'
51587     If a variable is declared at for scope, it used to remain in scope
51588     until the end of the scope that contained the for statement (rather
51589     than just within the for scope).  The deprecated '-fno-for-scope'
51590     option enables this non-standard behavior.  Without the option, G++
51591     retains this, but issues a warning, if such a variable is accessed
51592     outside the for scope.
51593
51594     The behavior is deprecated, only available with '-std=c++98'
51595     '-std=gnu++98' languages and you must use the '-fpermissive' option
51596     to enable it.  The behavior will be removed.
51597
51598'Friend Injection'
51599     The '-ffriend-injection' option makes injected friends visible to
51600     regular name lookup, unlike standard C++.  This option is
51601     deprecated and will be removed.
51602
51603'Implicit C language'
51604     Old C system header files did not contain an 'extern "C" {...}'
51605     scope to set the language.  On such systems, all header files are
51606     implicitly scoped inside a C language scope.  Also, an empty
51607     prototype '()' is treated as an unspecified number of arguments,
51608     rather than no arguments, as C++ demands.
51609
51610
51611File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
51612
516138 GNU Objective-C Features
51614**************************
51615
51616This document is meant to describe some of the GNU Objective-C features.
51617It is not intended to teach you Objective-C. There are several resources
51618on the Internet that present the language.
51619
51620* Menu:
51621
51622* GNU Objective-C runtime API::
51623* Executing code before main::
51624* Type encoding::
51625* Garbage Collection::
51626* Constant string objects::
51627* compatibility_alias::
51628* Exceptions::
51629* Synchronization::
51630* Fast enumeration::
51631* Messaging with the GNU Objective-C runtime::
51632
51633
51634File: gcc.info,  Node: GNU Objective-C runtime API,  Next: Executing code before main,  Up: Objective-C
51635
516368.1 GNU Objective-C Runtime API
51637===============================
51638
51639This section is specific for the GNU Objective-C runtime.  If you are
51640using a different runtime, you can skip it.
51641
51642 The GNU Objective-C runtime provides an API that allows you to interact
51643with the Objective-C runtime system, querying the live runtime
51644structures and even manipulating them.  This allows you for example to
51645inspect and navigate classes, methods and protocols; to define new
51646classes or new methods, and even to modify existing classes or
51647protocols.
51648
51649 If you are using a "Foundation" library such as GNUstep-Base, this
51650library will provide you with a rich set of functionality to do most of
51651the inspection tasks, and you probably will only need direct access to
51652the GNU Objective-C runtime API to define new classes or methods.
51653
51654* Menu:
51655
51656* Modern GNU Objective-C runtime API::
51657* Traditional GNU Objective-C runtime API::
51658
51659
51660File: gcc.info,  Node: Modern GNU Objective-C runtime API,  Next: Traditional GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
51661
516628.1.1 Modern GNU Objective-C Runtime API
51663----------------------------------------
51664
51665The GNU Objective-C runtime provides an API which is similar to the one
51666provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime.  The
51667API is documented in the public header files of the GNU Objective-C
51668runtime:
51669
51670   * 'objc/objc.h': this is the basic Objective-C header file, defining
51671     the basic Objective-C types such as 'id', 'Class' and 'BOOL'.  You
51672     have to include this header to do almost anything with Objective-C.
51673
51674   * 'objc/runtime.h': this header declares most of the public runtime
51675     API functions allowing you to inspect and manipulate the
51676     Objective-C runtime data structures.  These functions are fairly
51677     standardized across Objective-C runtimes and are almost identical
51678     to the Apple/NeXT Objective-C runtime ones.  It does not declare
51679     functions in some specialized areas (constructing and forwarding
51680     message invocations, threading) which are in the other headers
51681     below.  You have to include 'objc/objc.h' and 'objc/runtime.h' to
51682     use any of the functions, such as 'class_getName()', declared in
51683     'objc/runtime.h'.
51684
51685   * 'objc/message.h': this header declares public functions used to
51686     construct, deconstruct and forward message invocations.  Because
51687     messaging is done in quite a different way on different runtimes,
51688     functions in this header are specific to the GNU Objective-C
51689     runtime implementation.
51690
51691   * 'objc/objc-exception.h': this header declares some public functions
51692     related to Objective-C exceptions.  For example functions in this
51693     header allow you to throw an Objective-C exception from plain C/C++
51694     code.
51695
51696   * 'objc/objc-sync.h': this header declares some public functions
51697     related to the Objective-C '@synchronized()' syntax, allowing you
51698     to emulate an Objective-C '@synchronized()' block in plain C/C++
51699     code.
51700
51701   * 'objc/thr.h': this header declares a public runtime API threading
51702     layer that is only provided by the GNU Objective-C runtime.  It
51703     declares functions such as 'objc_mutex_lock()', which provide a
51704     platform-independent set of threading functions.
51705
51706 The header files contain detailed documentation for each function in
51707the GNU Objective-C runtime API.
51708
51709
51710File: gcc.info,  Node: Traditional GNU Objective-C runtime API,  Prev: Modern GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
51711
517128.1.2 Traditional GNU Objective-C Runtime API
51713---------------------------------------------
51714
51715The GNU Objective-C runtime used to provide a different API, which we
51716call the "traditional" GNU Objective-C runtime API. Functions belonging
51717to this API are easy to recognize because they use a different naming
51718convention, such as 'class_get_super_class()' (traditional API) instead
51719of 'class_getSuperclass()' (modern API). Software using this API
51720includes the file 'objc/objc-api.h' where it is declared.
51721
51722 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer
51723available.
51724
51725
51726File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C
51727
517288.2 '+load': Executing Code before 'main'
51729=========================================
51730
51731This section is specific for the GNU Objective-C runtime.  If you are
51732using a different runtime, you can skip it.
51733
51734 The GNU Objective-C runtime provides a way that allows you to execute
51735code before the execution of the program enters the 'main' function.
51736The code is executed on a per-class and a per-category basis, through a
51737special class method '+load'.
51738
51739 This facility is very useful if you want to initialize global variables
51740which can be accessed by the program directly, without sending a message
51741to the class first.  The usual way to initialize global variables, in
51742the '+initialize' method, might not be useful because '+initialize' is
51743only called when the first message is sent to a class object, which in
51744some cases could be too late.
51745
51746 Suppose for example you have a 'FileStream' class that declares
51747'Stdin', 'Stdout' and 'Stderr' as global variables, like below:
51748
51749
51750     FileStream *Stdin = nil;
51751     FileStream *Stdout = nil;
51752     FileStream *Stderr = nil;
51753
51754     @implementation FileStream
51755
51756     + (void)initialize
51757     {
51758         Stdin = [[FileStream new] initWithFd:0];
51759         Stdout = [[FileStream new] initWithFd:1];
51760         Stderr = [[FileStream new] initWithFd:2];
51761     }
51762
51763     /* Other methods here */
51764     @end
51765
51766
51767 In this example, the initialization of 'Stdin', 'Stdout' and 'Stderr'
51768in '+initialize' occurs too late.  The programmer can send a message to
51769one of these objects before the variables are actually initialized, thus
51770sending messages to the 'nil' object.  The '+initialize' method which
51771actually initializes the global variables is not invoked until the first
51772message is sent to the class object.  The solution would require these
51773variables to be initialized just before entering 'main'.
51774
51775 The correct solution of the above problem is to use the '+load' method
51776instead of '+initialize':
51777
51778
51779     @implementation FileStream
51780
51781     + (void)load
51782     {
51783         Stdin = [[FileStream new] initWithFd:0];
51784         Stdout = [[FileStream new] initWithFd:1];
51785         Stderr = [[FileStream new] initWithFd:2];
51786     }
51787
51788     /* Other methods here */
51789     @end
51790
51791
51792 The '+load' is a method that is not overridden by categories.  If a
51793class and a category of it both implement '+load', both methods are
51794invoked.  This allows some additional initializations to be performed in
51795a category.
51796
51797 This mechanism is not intended to be a replacement for '+initialize'.
51798You should be aware of its limitations when you decide to use it instead
51799of '+initialize'.
51800
51801* Menu:
51802
51803* What you can and what you cannot do in +load::
51804
51805
51806File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main
51807
518088.2.1 What You Can and Cannot Do in '+load'
51809-------------------------------------------
51810
51811'+load' is to be used only as a last resort.  Because it is executed
51812very early, most of the Objective-C runtime machinery will not be ready
51813when '+load' is executed; hence '+load' works best for executing C code
51814that is independent on the Objective-C runtime.
51815
51816 The '+load' implementation in the GNU runtime guarantees you the
51817following things:
51818
51819   * you can write whatever C code you like;
51820
51821   * you can allocate and send messages to objects whose class is
51822     implemented in the same file;
51823
51824   * the '+load' implementation of all super classes of a class are
51825     executed before the '+load' of that class is executed;
51826
51827   * the '+load' implementation of a class is executed before the
51828     '+load' implementation of any category.
51829
51830 In particular, the following things, even if they can work in a
51831particular case, are not guaranteed:
51832
51833   * allocation of or sending messages to arbitrary objects;
51834
51835   * allocation of or sending messages to objects whose classes have a
51836     category implemented in the same file;
51837
51838   * sending messages to Objective-C constant strings ('@"this is a
51839     constant string"');
51840
51841 You should make no assumptions about receiving '+load' in sibling
51842classes when you write '+load' of a class.  The order in which sibling
51843classes receive '+load' is not guaranteed.
51844
51845 The order in which '+load' and '+initialize' are called could be
51846problematic if this matters.  If you don't allocate objects inside
51847'+load', it is guaranteed that '+load' is called before '+initialize'.
51848If you create an object inside '+load' the '+initialize' method of
51849object's class is invoked even if '+load' was not invoked.  Note if you
51850explicitly call '+load' on a class, '+initialize' will be called first.
51851To avoid possible problems try to implement only one of these methods.
51852
51853 The '+load' method is also invoked when a bundle is dynamically loaded
51854into your running program.  This happens automatically without any
51855intervening operation from you.  When you write bundles and you need to
51856write '+load' you can safely create and send messages to objects whose
51857classes already exist in the running program.  The same restrictions as
51858above apply to classes defined in bundle.
51859
51860
51861File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
51862
518638.3 Type Encoding
51864=================
51865
51866This is an advanced section.  Type encodings are used extensively by the
51867compiler and by the runtime, but you generally do not need to know about
51868them to use Objective-C.
51869
51870 The Objective-C compiler generates type encodings for all the types.
51871These type encodings are used at runtime to find out information about
51872selectors and methods and about objects and classes.
51873
51874 The types are encoded in the following way:
51875
51876'_Bool'            'B'
51877'char'             'c'
51878'unsigned char'    'C'
51879'short'            's'
51880'unsigned short'   'S'
51881'int'              'i'
51882'unsigned int'     'I'
51883'long'             'l'
51884'unsigned long'    'L'
51885'long long'        'q'
51886'unsigned long     'Q'
51887long'
51888'float'            'f'
51889'double'           'd'
51890'long double'      'D'
51891'void'             'v'
51892'id'               '@'
51893'Class'            '#'
51894'SEL'              ':'
51895'char*'            '*'
51896'enum'             an 'enum' is encoded exactly as the integer type
51897                   that the compiler uses for it, which depends on the
51898                   enumeration values.  Often the compiler users
51899                   'unsigned int', which is then encoded as 'I'.
51900unknown type       '?'
51901Complex types      'j' followed by the inner type.  For example
51902                   '_Complex double' is encoded as "jd".
51903bit-fields         'b' followed by the starting position of the
51904                   bit-field, the type of the bit-field and the size of
51905                   the bit-field (the bit-fields encoding was changed
51906                   from the NeXT's compiler encoding, see below)
51907
51908 The encoding of bit-fields has changed to allow bit-fields to be
51909properly handled by the runtime functions that compute sizes and
51910alignments of types that contain bit-fields.  The previous encoding
51911contained only the size of the bit-field.  Using only this information
51912it is not possible to reliably compute the size occupied by the
51913bit-field.  This is very important in the presence of the Boehm's
51914garbage collector because the objects are allocated using the typed
51915memory facility available in this collector.  The typed memory
51916allocation requires information about where the pointers are located
51917inside the object.
51918
51919 The position in the bit-field is the position, counting in bits, of the
51920bit closest to the beginning of the structure.
51921
51922 The non-atomic types are encoded as follows:
51923
51924pointers       '^' followed by the pointed type.
51925arrays         '[' followed by the number of elements in the array
51926               followed by the type of the elements followed by ']'
51927structures     '{' followed by the name of the structure (or '?' if the
51928               structure is unnamed), the '=' sign, the type of the
51929               members and by '}'
51930unions         '(' followed by the name of the structure (or '?' if the
51931               union is unnamed), the '=' sign, the type of the members
51932               followed by ')'
51933vectors        '![' followed by the vector_size (the number of bytes
51934               composing the vector) followed by a comma, followed by
51935               the alignment (in bytes) of the vector, followed by the
51936               type of the elements followed by ']'
51937
51938 Here are some types and their encodings, as they are generated by the
51939compiler on an i386 machine:
51940
51941
51942Objective-C type                            Compiler encoding
51943     int a[10];                             '[10i]'
51944     struct {                               '{?=i[3f]b128i3b131i2c}'
51945       int i;
51946       float f[3];
51947       int a:3;
51948       int b:2;
51949       char c;
51950     }
51951     int a __attribute__ ((vector_size (16)));'![16,16i]' (alignment
51952                                            depends on the machine)
51953
51954
51955 In addition to the types the compiler also encodes the type specifiers.
51956The table below describes the encoding of the current Objective-C type
51957specifiers:
51958
51959
51960Specifier          Encoding
51961'const'            'r'
51962'in'               'n'
51963'inout'            'N'
51964'out'              'o'
51965'bycopy'           'O'
51966'byref'            'R'
51967'oneway'           'V'
51968
51969
51970 The type specifiers are encoded just before the type.  Unlike types
51971however, the type specifiers are only encoded when they appear in method
51972argument types.
51973
51974 Note how 'const' interacts with pointers:
51975
51976
51977Objective-C type   Compiler encoding
51978     const int     'ri'
51979     const int*    '^ri'
51980     int *const    'r^i'
51981
51982
51983 'const int*' is a pointer to a 'const int', and so is encoded as '^ri'.
51984'int* const', instead, is a 'const' pointer to an 'int', and so is
51985encoded as 'r^i'.
51986
51987 Finally, there is a complication when encoding 'const char *' versus
51988'char * const'.  Because 'char *' is encoded as '*' and not as '^c',
51989there is no way to express the fact that 'r' applies to the pointer or
51990to the pointee.
51991
51992 Hence, it is assumed as a convention that 'r*' means 'const char *'
51993(since it is what is most often meant), and there is no way to encode
51994'char *const'.  'char *const' would simply be encoded as '*', and the
51995'const' is lost.
51996
51997* Menu:
51998
51999* Legacy type encoding::
52000* @encode::
52001* Method signatures::
52002
52003
52004File: gcc.info,  Node: Legacy type encoding,  Next: @encode,  Up: Type encoding
52005
520068.3.1 Legacy Type Encoding
52007--------------------------
52008
52009Unfortunately, historically GCC used to have a number of bugs in its
52010encoding code.  The NeXT runtime expects GCC to emit type encodings in
52011this historical format (compatible with GCC-3.3), so when using the NeXT
52012runtime, GCC will introduce on purpose a number of incorrect encodings:
52013
52014   * the read-only qualifier of the pointee gets emitted before the '^'.
52015     The read-only qualifier of the pointer itself gets ignored, unless
52016     it is a typedef.  Also, the 'r' is only emitted for the outermost
52017     type.
52018
52019   * 32-bit longs are encoded as 'l' or 'L', but not always.  For
52020     typedefs, the compiler uses 'i' or 'I' instead if encoding a struct
52021     field or a pointer.
52022
52023   * 'enum's are always encoded as 'i' (int) even if they are actually
52024     unsigned or long.
52025
52026 In addition to that, the NeXT runtime uses a different encoding for
52027bitfields.  It encodes them as 'b' followed by the size, without a bit
52028offset or the underlying field type.
52029
52030
52031File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding
52032
520338.3.2 '@encode'
52034---------------
52035
52036GNU Objective-C supports the '@encode' syntax that allows you to create
52037a type encoding from a C/Objective-C type.  For example, '@encode(int)'
52038is compiled by the compiler into '"i"'.
52039
52040 '@encode' does not support type qualifiers other than 'const'.  For
52041example, '@encode(const char*)' is valid and is compiled into '"r*"',
52042while '@encode(bycopy char *)' is invalid and will cause a compilation
52043error.
52044
52045
52046File: gcc.info,  Node: Method signatures,  Prev: @encode,  Up: Type encoding
52047
520488.3.3 Method Signatures
52049-----------------------
52050
52051This section documents the encoding of method types, which is rarely
52052needed to use Objective-C. You should skip it at a first reading; the
52053runtime provides functions that will work on methods and can walk
52054through the list of parameters and interpret them for you.  These
52055functions are part of the public "API" and are the preferred way to
52056interact with method signatures from user code.
52057
52058 But if you need to debug a problem with method signatures and need to
52059know how they are implemented (i.e., the "ABI"), read on.
52060
52061 Methods have their "signature" encoded and made available to the
52062runtime.  The "signature" encodes all the information required to
52063dynamically build invocations of the method at runtime: return type and
52064arguments.
52065
52066 The "signature" is a null-terminated string, composed of the following:
52067
52068   * The return type, including type qualifiers.  For example, a method
52069     returning 'int' would have 'i' here.
52070
52071   * The total size (in bytes) required to pass all the parameters.
52072     This includes the two hidden parameters (the object 'self' and the
52073     method selector '_cmd').
52074
52075   * Each argument, with the type encoding, followed by the offset (in
52076     bytes) of the argument in the list of parameters.
52077
52078 For example, a method with no arguments and returning 'int' would have
52079the signature 'i8@0:4' if the size of a pointer is 4.  The signature is
52080interpreted as follows: the 'i' is the return type (an 'int'), the '8'
52081is the total size of the parameters in bytes (two pointers each of size
520824), the '@0' is the first parameter (an object at byte offset '0') and
52083':4' is the second parameter (a 'SEL' at byte offset '4').
52084
52085 You can easily find more examples by running the "strings" program on
52086an Objective-C object file compiled by GCC. You'll see a lot of strings
52087that look very much like 'i8@0:4'.  They are signatures of Objective-C
52088methods.
52089
52090
52091File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
52092
520938.4 Garbage Collection
52094======================
52095
52096This section is specific for the GNU Objective-C runtime.  If you are
52097using a different runtime, you can skip it.
52098
52099 Support for garbage collection with the GNU runtime has been added by
52100using a powerful conservative garbage collector, known as the
52101Boehm-Demers-Weiser conservative garbage collector.
52102
52103 To enable the support for it you have to configure the compiler using
52104an additional argument, '--enable-objc-gc'.  This will build the
52105boehm-gc library, and build an additional runtime library which has
52106several enhancements to support the garbage collector.  The new library
52107has a new name, 'libobjc_gc.a' to not conflict with the
52108non-garbage-collected library.
52109
52110 When the garbage collector is used, the objects are allocated using the
52111so-called typed memory allocation mechanism available in the
52112Boehm-Demers-Weiser collector.  This mode requires precise information
52113on where pointers are located inside objects.  This information is
52114computed once per class, immediately after the class has been
52115initialized.
52116
52117 There is a new runtime function 'class_ivar_set_gcinvisible()' which
52118can be used to declare a so-called "weak pointer" reference.  Such a
52119pointer is basically hidden for the garbage collector; this can be
52120useful in certain situations, especially when you want to keep track of
52121the allocated objects, yet allow them to be collected.  This kind of
52122pointers can only be members of objects, you cannot declare a global
52123pointer as a weak reference.  Every type which is a pointer type can be
52124declared a weak pointer, including 'id', 'Class' and 'SEL'.
52125
52126 Here is an example of how to use this feature.  Suppose you want to
52127implement a class whose instances hold a weak pointer reference; the
52128following class does this:
52129
52130
52131     @interface WeakPointer : Object
52132     {
52133         const void* weakPointer;
52134     }
52135
52136     - initWithPointer:(const void*)p;
52137     - (const void*)weakPointer;
52138     @end
52139
52140
52141     @implementation WeakPointer
52142
52143     + (void)initialize
52144     {
52145       if (self == objc_lookUpClass ("WeakPointer"))
52146         class_ivar_set_gcinvisible (self, "weakPointer", YES);
52147     }
52148
52149     - initWithPointer:(const void*)p
52150     {
52151       weakPointer = p;
52152       return self;
52153     }
52154
52155     - (const void*)weakPointer
52156     {
52157       return weakPointer;
52158     }
52159
52160     @end
52161
52162
52163 Weak pointers are supported through a new type character specifier
52164represented by the '!' character.  The 'class_ivar_set_gcinvisible()'
52165function adds or removes this specifier to the string type description
52166of the instance variable named as argument.
52167
52168
52169File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
52170
521718.5 Constant String Objects
52172===========================
52173
52174GNU Objective-C provides constant string objects that are generated
52175directly by the compiler.  You declare a constant string object by
52176prefixing a C constant string with the character '@':
52177
52178       id myString = @"this is a constant string object";
52179
52180 The constant string objects are by default instances of the
52181'NXConstantString' class which is provided by the GNU Objective-C
52182runtime.  To get the definition of this class you must include the
52183'objc/NXConstStr.h' header file.
52184
52185 User defined libraries may want to implement their own constant string
52186class.  To be able to support them, the GNU Objective-C compiler
52187provides a new command line options
52188'-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
52189to a strict structure, the same as 'NXConstantString''s structure:
52190
52191
52192     @interface MyConstantStringClass
52193     {
52194       Class isa;
52195       char *c_string;
52196       unsigned int len;
52197     }
52198     @end
52199
52200
52201 'NXConstantString' inherits from 'Object'; user class libraries may
52202choose to inherit the customized constant string class from a different
52203class than 'Object'.  There is no requirement in the methods the
52204constant string class has to implement, but the final ivar layout of the
52205class must be the compatible with the given structure.
52206
52207 When the compiler creates the statically allocated constant string
52208object, the 'c_string' field will be filled by the compiler with the
52209string; the 'length' field will be filled by the compiler with the
52210string length; the 'isa' pointer will be filled with 'NULL' by the
52211compiler, and it will later be fixed up automatically at runtime by the
52212GNU Objective-C runtime library to point to the class which was set by
52213the '-fconstant-string-class' option when the object file is loaded (if
52214you wonder how it works behind the scenes, the name of the class to use,
52215and the list of static objects to fixup, are stored by the compiler in
52216the object file in a place where the GNU runtime library will find them
52217at runtime).
52218
52219 As a result, when a file is compiled with the '-fconstant-string-class'
52220option, all the constant string objects will be instances of the class
52221specified as argument to this option.  It is possible to have multiple
52222compilation units referring to different constant string classes,
52223neither the compiler nor the linker impose any restrictions in doing
52224this.
52225
52226
52227File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C
52228
522298.6 'compatibility_alias'
52230=========================
52231
52232The keyword '@compatibility_alias' allows you to define a class name as
52233equivalent to another class name.  For example:
52234
52235     @compatibility_alias WOApplication GSWApplication;
52236
52237 tells the compiler that each time it encounters 'WOApplication' as a
52238class name, it should replace it with 'GSWApplication' (that is,
52239'WOApplication' is just an alias for 'GSWApplication').
52240
52241 There are some constraints on how this can be used--
52242
52243   * 'WOApplication' (the alias) must not be an existing class;
52244
52245   * 'GSWApplication' (the real class) must be an existing class.
52246
52247
52248File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C
52249
522508.7 Exceptions
52251==============
52252
52253GNU Objective-C provides exception support built into the language, as
52254in the following example:
52255
52256       @try {
52257         ...
52258            @throw expr;
52259         ...
52260       }
52261       @catch (AnObjCClass *exc) {
52262         ...
52263           @throw expr;
52264         ...
52265           @throw;
52266         ...
52267       }
52268       @catch (AnotherClass *exc) {
52269         ...
52270       }
52271       @catch (id allOthers) {
52272         ...
52273       }
52274       @finally {
52275         ...
52276           @throw expr;
52277         ...
52278       }
52279
52280 The '@throw' statement may appear anywhere in an Objective-C or
52281Objective-C++ program; when used inside of a '@catch' block, the
52282'@throw' may appear without an argument (as shown above), in which case
52283the object caught by the '@catch' will be rethrown.
52284
52285 Note that only (pointers to) Objective-C objects may be thrown and
52286caught using this scheme.  When an object is thrown, it will be caught
52287by the nearest '@catch' clause capable of handling objects of that type,
52288analogously to how 'catch' blocks work in C++ and Java.  A '@catch(id
52289...)' clause (as shown above) may also be provided to catch any and all
52290Objective-C exceptions not caught by previous '@catch' clauses (if any).
52291
52292 The '@finally' clause, if present, will be executed upon exit from the
52293immediately preceding '@try ... @catch' section.  This will happen
52294regardless of whether any exceptions are thrown, caught or rethrown
52295inside the '@try ... @catch' section, analogously to the behavior of the
52296'finally' clause in Java.
52297
52298 There are several caveats to using the new exception mechanism:
52299
52300   * The '-fobjc-exceptions' command line option must be used when
52301     compiling Objective-C files that use exceptions.
52302
52303   * With the GNU runtime, exceptions are always implemented as "native"
52304     exceptions and it is recommended that the '-fexceptions' and
52305     '-shared-libgcc' options are used when linking.
52306
52307   * With the NeXT runtime, although currently designed to be binary
52308     compatible with 'NS_HANDLER'-style idioms provided by the
52309     'NSException' class, the new exceptions can only be used on Mac OS
52310     X 10.3 (Panther) and later systems, due to additional functionality
52311     needed in the NeXT Objective-C runtime.
52312
52313   * As mentioned above, the new exceptions do not support handling
52314     types other than Objective-C objects.  Furthermore, when used from
52315     Objective-C++, the Objective-C exception model does not
52316     interoperate with C++ exceptions at this time.  This means you
52317     cannot '@throw' an exception from Objective-C and 'catch' it in
52318     C++, or vice versa (i.e., 'throw ... @catch').
52319
52320
52321File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C
52322
523238.8 Synchronization
52324===================
52325
52326GNU Objective-C provides support for synchronized blocks:
52327
52328       @synchronized (ObjCClass *guard) {
52329         ...
52330       }
52331
52332 Upon entering the '@synchronized' block, a thread of execution shall
52333first check whether a lock has been placed on the corresponding 'guard'
52334object by another thread.  If it has, the current thread shall wait
52335until the other thread relinquishes its lock.  Once 'guard' becomes
52336available, the current thread will place its own lock on it, execute the
52337code contained in the '@synchronized' block, and finally relinquish the
52338lock (thereby making 'guard' available to other threads).
52339
52340 Unlike Java, Objective-C does not allow for entire methods to be marked
52341'@synchronized'.  Note that throwing exceptions out of '@synchronized'
52342blocks is allowed, and will cause the guarding object to be unlocked
52343properly.
52344
52345 Because of the interactions between synchronization and exception
52346handling, you can only use '@synchronized' when compiling with
52347exceptions enabled, that is with the command line option
52348'-fobjc-exceptions'.
52349
52350
52351File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C
52352
523538.9 Fast Enumeration
52354====================
52355
52356* Menu:
52357
52358* Using fast enumeration::
52359* c99-like fast enumeration syntax::
52360* Fast enumeration details::
52361* Fast enumeration protocol::
52362
52363
52364File: gcc.info,  Node: Using fast enumeration,  Next: c99-like fast enumeration syntax,  Up: Fast enumeration
52365
523668.9.1 Using Fast Enumeration
52367----------------------------
52368
52369GNU Objective-C provides support for the fast enumeration syntax:
52370
52371       id array = ...;
52372       id object;
52373
52374       for (object in array)
52375       {
52376         /* Do something with 'object' */
52377       }
52378
52379 'array' needs to be an Objective-C object (usually a collection object,
52380for example an array, a dictionary or a set) which implements the "Fast
52381Enumeration Protocol" (see below).  If you are using a Foundation
52382library such as GNUstep Base or Apple Cocoa Foundation, all collection
52383objects in the library implement this protocol and can be used in this
52384way.
52385
52386 The code above would iterate over all objects in 'array'.  For each of
52387them, it assigns it to 'object', then executes the 'Do something with
52388'object'' statements.
52389
52390 Here is a fully worked-out example using a Foundation library (which
52391provides the implementation of 'NSArray', 'NSString' and 'NSLog'):
52392
52393       NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
52394       NSString *object;
52395
52396       for (object in array)
52397         NSLog (@"Iterating over %@", object);
52398
52399
52400File: gcc.info,  Node: c99-like fast enumeration syntax,  Next: Fast enumeration details,  Prev: Using fast enumeration,  Up: Fast enumeration
52401
524028.9.2 C99-Like Fast Enumeration Syntax
52403--------------------------------------
52404
52405A c99-like declaration syntax is also allowed:
52406
52407       id array = ...;
52408
52409       for (id object in array)
52410       {
52411         /* Do something with 'object'  */
52412       }
52413
52414 this is completely equivalent to:
52415
52416       id array = ...;
52417
52418       {
52419         id object;
52420         for (object in array)
52421         {
52422           /* Do something with 'object'  */
52423         }
52424       }
52425
52426 but can save some typing.
52427
52428 Note that the option '-std=c99' is not required to allow this syntax in
52429Objective-C.
52430
52431
52432File: gcc.info,  Node: Fast enumeration details,  Next: Fast enumeration protocol,  Prev: c99-like fast enumeration syntax,  Up: Fast enumeration
52433
524348.9.3 Fast Enumeration Details
52435------------------------------
52436
52437Here is a more technical description with the gory details.  Consider
52438the code
52439
52440       for (OBJECT EXPRESSION in COLLECTION EXPRESSION)
52441       {
52442         STATEMENTS
52443       }
52444
52445 here is what happens when you run it:
52446
52447   * 'COLLECTION EXPRESSION' is evaluated exactly once and the result is
52448     used as the collection object to iterate over.  This means it is
52449     safe to write code such as 'for (object in [NSDictionary
52450     keyEnumerator]) ...'.
52451
52452   * the iteration is implemented by the compiler by repeatedly getting
52453     batches of objects from the collection object using the fast
52454     enumeration protocol (see below), then iterating over all objects
52455     in the batch.  This is faster than a normal enumeration where
52456     objects are retrieved one by one (hence the name "fast
52457     enumeration").
52458
52459   * if there are no objects in the collection, then 'OBJECT EXPRESSION'
52460     is set to 'nil' and the loop immediately terminates.
52461
52462   * if there are objects in the collection, then for each object in the
52463     collection (in the order they are returned) 'OBJECT EXPRESSION' is
52464     set to the object, then 'STATEMENTS' are executed.
52465
52466   * 'STATEMENTS' can contain 'break' and 'continue' commands, which
52467     will abort the iteration or skip to the next loop iteration as
52468     expected.
52469
52470   * when the iteration ends because there are no more objects to
52471     iterate over, 'OBJECT EXPRESSION' is set to 'nil'.  This allows you
52472     to determine whether the iteration finished because a 'break'
52473     command was used (in which case 'OBJECT EXPRESSION' will remain set
52474     to the last object that was iterated over) or because it iterated
52475     over all the objects (in which case 'OBJECT EXPRESSION' will be set
52476     to 'nil').
52477
52478   * 'STATEMENTS' must not make any changes to the collection object; if
52479     they do, it is a hard error and the fast enumeration terminates by
52480     invoking 'objc_enumerationMutation', a runtime function that
52481     normally aborts the program but which can be customized by
52482     Foundation libraries via 'objc_set_mutation_handler' to do
52483     something different, such as raising an exception.
52484
52485
52486File: gcc.info,  Node: Fast enumeration protocol,  Prev: Fast enumeration details,  Up: Fast enumeration
52487
524888.9.4 Fast Enumeration Protocol
52489-------------------------------
52490
52491If you want your own collection object to be usable with fast
52492enumeration, you need to have it implement the method
52493
52494     - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state
52495                                           objects: (id *)objects
52496                                             count: (unsigned long)len;
52497
52498 where 'NSFastEnumerationState' must be defined in your code as follows:
52499
52500     typedef struct
52501     {
52502       unsigned long state;
52503       id            *itemsPtr;
52504       unsigned long *mutationsPtr;
52505       unsigned long extra[5];
52506     } NSFastEnumerationState;
52507
52508 If no 'NSFastEnumerationState' is defined in your code, the compiler
52509will automatically replace 'NSFastEnumerationState *' with 'struct
52510__objcFastEnumerationState *', where that type is silently defined by
52511the compiler in an identical way.  This can be confusing and we
52512recommend that you define 'NSFastEnumerationState' (as shown above)
52513instead.
52514
52515 The method is called repeatedly during a fast enumeration to retrieve
52516batches of objects.  Each invocation of the method should retrieve the
52517next batch of objects.
52518
52519 The return value of the method is the number of objects in the current
52520batch; this should not exceed 'len', which is the maximum size of a
52521batch as requested by the caller.  The batch itself is returned in the
52522'itemsPtr' field of the 'NSFastEnumerationState' struct.
52523
52524 To help with returning the objects, the 'objects' array is a C array
52525preallocated by the caller (on the stack) of size 'len'.  In many cases
52526you can put the objects you want to return in that 'objects' array, then
52527do 'itemsPtr = objects'.  But you don't have to; if your collection
52528already has the objects to return in some form of C array, it could
52529return them from there instead.
52530
52531 The 'state' and 'extra' fields of the 'NSFastEnumerationState'
52532structure allows your collection object to keep track of the state of
52533the enumeration.  In a simple array implementation, 'state' may keep
52534track of the index of the last object that was returned, and 'extra' may
52535be unused.
52536
52537 The 'mutationsPtr' field of the 'NSFastEnumerationState' is used to
52538keep track of mutations.  It should point to a number; before working on
52539each object, the fast enumeration loop will check that this number has
52540not changed.  If it has, a mutation has happened and the fast
52541enumeration will abort.  So, 'mutationsPtr' could be set to point to
52542some sort of version number of your collection, which is increased by
52543one every time there is a change (for example when an object is added or
52544removed).  Or, if you are content with less strict mutation checks, it
52545could point to the number of objects in your collection or some other
52546value that can be checked to perform an approximate check that the
52547collection has not been mutated.
52548
52549 Finally, note how we declared the 'len' argument and the return value
52550to be of type 'unsigned long'.  They could also be declared to be of
52551type 'unsigned int' and everything would still work.
52552
52553
52554File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C
52555
525568.10 Messaging with the GNU Objective-C Runtime
52557===============================================
52558
52559This section is specific for the GNU Objective-C runtime.  If you are
52560using a different runtime, you can skip it.
52561
52562 The implementation of messaging in the GNU Objective-C runtime is
52563designed to be portable, and so is based on standard C.
52564
52565 Sending a message in the GNU Objective-C runtime is composed of two
52566separate steps.  First, there is a call to the lookup function,
52567'objc_msg_lookup ()' (or, in the case of messages to super,
52568'objc_msg_lookup_super ()').  This runtime function takes as argument
52569the receiver and the selector of the method to be called; it returns the
52570'IMP', that is a pointer to the function implementing the method.  The
52571second step of method invocation consists of casting this pointer
52572function to the appropriate function pointer type, and calling the
52573function pointed to it with the right arguments.
52574
52575 For example, when the compiler encounters a method invocation such as
52576'[object init]', it compiles it into a call to 'objc_msg_lookup (object,
52577@selector(init))' followed by a cast of the returned value to the
52578appropriate function pointer type, and then it calls it.
52579
52580* Menu:
52581
52582* Dynamically registering methods::
52583* Forwarding hook::
52584
52585
52586File: gcc.info,  Node: Dynamically registering methods,  Next: Forwarding hook,  Up: Messaging with the GNU Objective-C runtime
52587
525888.10.1 Dynamically Registering Methods
52589--------------------------------------
52590
52591If 'objc_msg_lookup()' does not find a suitable method implementation,
52592because the receiver does not implement the required method, it tries to
52593see if the class can dynamically register the method.
52594
52595 To do so, the runtime checks if the class of the receiver implements
52596the method
52597
52598     + (BOOL) resolveInstanceMethod: (SEL)selector;
52599
52600 in the case of an instance method, or
52601
52602     + (BOOL) resolveClassMethod: (SEL)selector;
52603
52604 in the case of a class method.  If the class implements it, the runtime
52605invokes it, passing as argument the selector of the original method, and
52606if it returns 'YES', the runtime tries the lookup again, which could now
52607succeed if a matching method was added dynamically by
52608'+resolveInstanceMethod:' or '+resolveClassMethod:'.
52609
52610 This allows classes to dynamically register methods (by adding them to
52611the class using 'class_addMethod') when they are first called.  To do
52612so, a class should implement '+resolveInstanceMethod:' (or, depending on
52613the case, '+resolveClassMethod:') and have it recognize the selectors of
52614methods that can be registered dynamically at runtime, register them,
52615and return 'YES'.  It should return 'NO' for methods that it does not
52616dynamically registered at runtime.
52617
52618 If '+resolveInstanceMethod:' (or '+resolveClassMethod:') is not
52619implemented or returns 'NO', the runtime then tries the forwarding hook.
52620
52621 Support for '+resolveInstanceMethod:' and 'resolveClassMethod:' was
52622added to the GNU Objective-C runtime in GCC version 4.6.
52623
52624
52625File: gcc.info,  Node: Forwarding hook,  Prev: Dynamically registering methods,  Up: Messaging with the GNU Objective-C runtime
52626
526278.10.2 Forwarding Hook
52628----------------------
52629
52630The GNU Objective-C runtime provides a hook, called
52631'__objc_msg_forward2', which is called by 'objc_msg_lookup()' when it
52632cannot find a method implementation in the runtime tables and after
52633calling '+resolveInstanceMethod:' and '+resolveClassMethod:' has been
52634attempted and did not succeed in dynamically registering the method.
52635
52636 To configure the hook, you set the global variable
52637'__objc_msg_forward2' to a function with the same argument and return
52638types of 'objc_msg_lookup()'.  When 'objc_msg_lookup()' can not find a
52639method implementation, it invokes the hook function you provided to get
52640a method implementation to return.  So, in practice
52641'__objc_msg_forward2' allows you to extend 'objc_msg_lookup()' by adding
52642some custom code that is called to do a further lookup when no standard
52643method implementation can be found using the normal lookup.
52644
52645 This hook is generally reserved for "Foundation" libraries such as
52646GNUstep Base, which use it to implement their high-level method
52647forwarding API, typically based around the 'forwardInvocation:' method.
52648So, unless you are implementing your own "Foundation" library, you
52649should not set this hook.
52650
52651 In a typical forwarding implementation, the '__objc_msg_forward2' hook
52652function determines the argument and return type of the method that is
52653being looked up, and then creates a function that takes these arguments
52654and has that return type, and returns it to the caller.  Creating this
52655function is non-trivial and is typically performed using a dedicated
52656library such as 'libffi'.
52657
52658 The forwarding method implementation thus created is returned by
52659'objc_msg_lookup()' and is executed as if it was a normal method
52660implementation.  When the forwarding method implementation is called, it
52661is usually expected to pack all arguments into some sort of object
52662(typically, an 'NSInvocation' in a "Foundation" library), and hand it
52663over to the programmer ('forwardInvocation:') who is then allowed to
52664manipulate the method invocation using a high-level API provided by the
52665"Foundation" library.  For example, the programmer may want to examine
52666the method invocation arguments and name and potentially change them
52667before forwarding the method invocation to one or more local objects
52668('performInvocation:') or even to remote objects (by using Distributed
52669Objects or some other mechanism).  When all this completes, the return
52670value is passed back and must be returned correctly to the original
52671caller.
52672
52673 Note that the GNU Objective-C runtime currently provides no support for
52674method forwarding or method invocations other than the
52675'__objc_msg_forward2' hook.
52676
52677 If the forwarding hook does not exist or returns 'NULL', the runtime
52678currently attempts forwarding using an older, deprecated API, and if
52679that fails, it aborts the program.  In future versions of the GNU
52680Objective-C runtime, the runtime will immediately abort.
52681
52682
52683File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
52684
526859 Binary Compatibility
52686**********************
52687
52688Binary compatibility encompasses several related concepts:
52689
52690"application binary interface (ABI)"
52691     The set of runtime conventions followed by all of the tools that
52692     deal with binary representations of a program, including compilers,
52693     assemblers, linkers, and language runtime support.  Some ABIs are
52694     formal with a written specification, possibly designed by multiple
52695     interested parties.  Others are simply the way things are actually
52696     done by a particular set of tools.
52697
52698"ABI conformance"
52699     A compiler conforms to an ABI if it generates code that follows all
52700     of the specifications enumerated by that ABI.  A library conforms
52701     to an ABI if it is implemented according to that ABI.  An
52702     application conforms to an ABI if it is built using tools that
52703     conform to that ABI and does not contain source code that
52704     specifically changes behavior specified by the ABI.
52705
52706"calling conventions"
52707     Calling conventions are a subset of an ABI that specify of how
52708     arguments are passed and function results are returned.
52709
52710"interoperability"
52711     Different sets of tools are interoperable if they generate files
52712     that can be used in the same program.  The set of tools includes
52713     compilers, assemblers, linkers, libraries, header files, startup
52714     files, and debuggers.  Binaries produced by different sets of tools
52715     are not interoperable unless they implement the same ABI.  This
52716     applies to different versions of the same tools as well as tools
52717     from different vendors.
52718
52719"intercallability"
52720     Whether a function in a binary built by one set of tools can call a
52721     function in a binary built by a different set of tools is a subset
52722     of interoperability.
52723
52724"implementation-defined features"
52725     Language standards include lists of implementation-defined features
52726     whose behavior can vary from one implementation to another.  Some
52727     of these features are normally covered by a platform's ABI and
52728     others are not.  The features that are not covered by an ABI
52729     generally affect how a program behaves, but not intercallability.
52730
52731"compatibility"
52732     Conformance to the same ABI and the same behavior of
52733     implementation-defined features are both relevant for
52734     compatibility.
52735
52736 The application binary interface implemented by a C or C++ compiler
52737affects code generation and runtime support for:
52738
52739   * size and alignment of data types
52740   * layout of structured types
52741   * calling conventions
52742   * register usage conventions
52743   * interfaces for runtime arithmetic support
52744   * object file formats
52745
52746 In addition, the application binary interface implemented by a C++
52747compiler affects code generation and runtime support for:
52748   * name mangling
52749   * exception handling
52750   * invoking constructors and destructors
52751   * layout, alignment, and padding of classes
52752   * layout and alignment of virtual tables
52753
52754 Some GCC compilation options cause the compiler to generate code that
52755does not conform to the platform's default ABI.  Other options cause
52756different program behavior for implementation-defined features that are
52757not covered by an ABI.  These options are provided for consistency with
52758other compilers that do not follow the platform's default ABI or the
52759usual behavior of implementation-defined features for the platform.  Be
52760very careful about using such options.
52761
52762 Most platforms have a well-defined ABI that covers C code, but ABIs
52763that cover C++ functionality are not yet common.
52764
52765 Starting with GCC 3.2, GCC binary conventions for C++ are based on a
52766written, vendor-neutral C++ ABI that was designed to be specific to
5276764-bit Itanium but also includes generic specifications that apply to
52768any platform.  This C++ ABI is also implemented by other compiler
52769vendors on some platforms, notably GNU/Linux and BSD systems.  We have
52770tried hard to provide a stable ABI that will be compatible with future
52771GCC releases, but it is possible that we will encounter problems that
52772make this difficult.  Such problems could include different
52773interpretations of the C++ ABI by different vendors, bugs in the ABI, or
52774bugs in the implementation of the ABI in different compilers.  GCC's
52775'-Wabi' switch warns when G++ generates code that is probably not
52776compatible with the C++ ABI.
52777
52778 The C++ library used with a C++ compiler includes the Standard C++
52779Library, with functionality defined in the C++ Standard, plus language
52780runtime support.  The runtime support is included in a C++ ABI, but
52781there is no formal ABI for the Standard C++ Library.  Two
52782implementations of that library are interoperable if one follows the
52783de-facto ABI of the other and if they are both built with the same
52784compiler, or with compilers that conform to the same ABI for C++
52785compiler and runtime support.
52786
52787 When G++ and another C++ compiler conform to the same C++ ABI, but the
52788implementations of the Standard C++ Library that they normally use do
52789not follow the same ABI for the Standard C++ Library, object files built
52790with those compilers can be used in the same program only if they use
52791the same C++ library.  This requires specifying the location of the C++
52792library header files when invoking the compiler whose usual library is
52793not being used.  The location of GCC's C++ header files depends on how
52794the GCC build was configured, but can be seen by using the G++ '-v'
52795option.  With default configuration options for G++ 3.3 the compile line
52796for a different C++ compiler needs to include
52797
52798         -IGCC_INSTALL_DIRECTORY/include/c++/3.3
52799
52800 Similarly, compiling code with G++ that must use a C++ library other
52801than the GNU C++ library requires specifying the location of the header
52802files for that other library.
52803
52804 The most straightforward way to link a program to use a particular C++
52805library is to use a C++ driver that specifies that C++ library by
52806default.  The 'g++' driver, for example, tells the linker where to find
52807GCC's C++ library ('libstdc++') plus the other libraries and startup
52808files it needs, in the proper order.
52809
52810 If a program must use a different C++ library and it's not possible to
52811do the final link using a C++ driver that uses that library by default,
52812it is necessary to tell 'g++' the location and name of that library.  It
52813might also be necessary to specify different startup files and other
52814runtime support libraries, and to suppress the use of GCC's support
52815libraries with one or more of the options '-nostdlib', '-nostartfiles',
52816and '-nodefaultlibs'.
52817
52818
52819File: gcc.info,  Node: Gcov,  Next: Gcov-tool,  Prev: Compatibility,  Up: Top
52820
5282110 'gcov'--a Test Coverage Program
52822**********************************
52823
52824'gcov' is a tool you can use in conjunction with GCC to test code
52825coverage in your programs.
52826
52827* Menu:
52828
52829* Gcov Intro::                  Introduction to gcov.
52830* Invoking Gcov::               How to use gcov.
52831* Gcov and Optimization::       Using gcov with GCC optimization.
52832* Gcov Data Files::             The files used by gcov.
52833* Cross-profiling::             Data file relocation.
52834
52835
52836File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
52837
5283810.1 Introduction to 'gcov'
52839===========================
52840
52841'gcov' is a test coverage program.  Use it in concert with GCC to
52842analyze your programs to help create more efficient, faster running code
52843and to discover untested parts of your program.  You can use 'gcov' as a
52844profiling tool to help discover where your optimization efforts will
52845best affect your code.  You can also use 'gcov' along with the other
52846profiling tool, 'gprof', to assess which parts of your code use the
52847greatest amount of computing time.
52848
52849 Profiling tools help you analyze your code's performance.  Using a
52850profiler such as 'gcov' or 'gprof', you can find out some basic
52851performance statistics, such as:
52852
52853   * how often each line of code executes
52854
52855   * what lines of code are actually executed
52856
52857   * how much computing time each section of code uses
52858
52859 Once you know these things about how your code works when compiled, you
52860can look at each module to see which modules should be optimized.
52861'gcov' helps you determine where to work on optimization.
52862
52863 Software developers also use coverage testing in concert with
52864testsuites, to make sure software is actually good enough for a release.
52865Testsuites can verify that a program works as expected; a coverage
52866program tests to see how much of the program is exercised by the
52867testsuite.  Developers can then determine what kinds of test cases need
52868to be added to the testsuites to create both better testing and a better
52869final product.
52870
52871 You should compile your code without optimization if you plan to use
52872'gcov' because the optimization, by combining some lines of code into
52873one function, may not give you as much information as you need to look
52874for 'hot spots' where the code is using a great deal of computer time.
52875Likewise, because 'gcov' accumulates statistics by line (at the lowest
52876resolution), it works best with a programming style that places only one
52877statement on each line.  If you use complicated macros that expand to
52878loops or to other control structures, the statistics are less
52879helpful--they only report on the line where the macro call appears.  If
52880your complex macros behave like functions, you can replace them with
52881inline functions to solve this problem.
52882
52883 'gcov' creates a logfile called 'SOURCEFILE.gcov' which indicates how
52884many times each line of a source file 'SOURCEFILE.c' has executed.  You
52885can use these logfiles along with 'gprof' to aid in fine-tuning the
52886performance of your programs.  'gprof' gives timing information you can
52887use along with the information you get from 'gcov'.
52888
52889 'gcov' works only on code compiled with GCC.  It is not compatible with
52890any other profiling or test coverage mechanism.
52891
52892
52893File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
52894
5289510.2 Invoking 'gcov'
52896====================
52897
52898     gcov [OPTIONS] FILES
52899
52900 'gcov' accepts the following options:
52901
52902'-a'
52903'--all-blocks'
52904     Write individual execution counts for every basic block.  Normally
52905     gcov outputs execution counts only for the main blocks of a line.
52906     With this option you can determine if blocks within a single line
52907     are not being executed.
52908
52909'-b'
52910'--branch-probabilities'
52911     Write branch frequencies to the output file, and write branch
52912     summary info to the standard output.  This option allows you to see
52913     how often each branch in your program was taken.  Unconditional
52914     branches will not be shown, unless the '-u' option is given.
52915
52916'-c'
52917'--branch-counts'
52918     Write branch frequencies as the number of branches taken, rather
52919     than the percentage of branches taken.
52920
52921'-d'
52922'--display-progress'
52923     Display the progress on the standard output.
52924
52925'-f'
52926'--function-summaries'
52927     Output summaries for each function in addition to the file level
52928     summary.
52929
52930'-h'
52931'--help'
52932     Display help about using 'gcov' (on the standard output), and exit
52933     without doing any further processing.
52934
52935'-i'
52936'--intermediate-format'
52937     Output gcov file in an easy-to-parse intermediate text format that
52938     can be used by 'lcov' or other tools.  The output is a single
52939     '.gcov' file per '.gcda' file.  No source code is required.
52940
52941     The format of the intermediate '.gcov' file is plain text with one
52942     entry per line
52943
52944          version:GCC_VERSION
52945          file:SOURCE_FILE_NAME
52946          function:START_LINE_NUMBER,END_LINE_NUMBER,EXECUTION_COUNT,FUNCTION_NAME
52947          lcount:LINE NUMBER,EXECUTION_COUNT,HAS_UNEXECUTED_BLOCK
52948          branch:LINE_NUMBER,BRANCH_COVERAGE_TYPE
52949
52950          Where the BRANCH_COVERAGE_TYPE is
52951             notexec (Branch not executed)
52952             taken (Branch executed and taken)
52953             nottaken (Branch executed, but not taken)
52954
52955     There can be multiple FILE entries in an intermediate gcov file.
52956     All entries following a FILE pertain to that source file until the
52957     next FILE entry.  If there are multiple functions that start on a
52958     single line, then corresponding lcount is repeated multiple times.
52959
52960     Here is a sample when '-i' is used in conjunction with '-b' option:
52961
52962          version: 8.1.0 20180103
52963          file:tmp.cpp
52964          function:7,7,0,_ZN3FooIcEC2Ev
52965          function:7,7,1,_ZN3FooIiEC2Ev
52966          function:8,8,0,_ZN3FooIcE3incEv
52967          function:8,8,2,_ZN3FooIiE3incEv
52968          function:18,37,1,main
52969          lcount:7,0,1
52970          lcount:7,1,0
52971          lcount:8,0,1
52972          lcount:8,2,0
52973          lcount:18,1,0
52974          lcount:21,1,0
52975          branch:21,taken
52976          branch:21,nottaken
52977          lcount:23,1,0
52978          branch:23,taken
52979          branch:23,nottaken
52980          lcount:24,1,0
52981          branch:24,taken
52982          branch:24,nottaken
52983          lcount:25,1,0
52984          lcount:27,11,0
52985          branch:27,taken
52986          branch:27,taken
52987          lcount:28,10,0
52988          lcount:30,1,1
52989          branch:30,nottaken
52990          branch:30,taken
52991          lcount:32,1,0
52992          branch:32,nottaken
52993          branch:32,taken
52994          lcount:33,0,1
52995          branch:33,notexec
52996          branch:33,notexec
52997          lcount:35,1,0
52998          branch:35,taken
52999          branch:35,nottaken
53000          lcount:36,1,0
53001
53002'-j'
53003'--human-readable'
53004     Write counts in human readable format (like 24k).
53005
53006'-k'
53007'--use-colors'
53008
53009     Use colors for lines of code that have zero coverage.  We use red
53010     color for non-exceptional lines and cyan for exceptional.  Same
53011     colors are used for basic blocks with '-a' option.
53012
53013'-l'
53014'--long-file-names'
53015     Create long file names for included source files.  For example, if
53016     the header file 'x.h' contains code, and was included in the file
53017     'a.c', then running 'gcov' on the file 'a.c' will produce an output
53018     file called 'a.c##x.h.gcov' instead of 'x.h.gcov'.  This can be
53019     useful if 'x.h' is included in multiple source files and you want
53020     to see the individual contributions.  If you use the '-p' option,
53021     both the including and included file names will be complete path
53022     names.
53023
53024'-m'
53025'--demangled-names'
53026     Display demangled function names in output.  The default is to show
53027     mangled function names.
53028
53029'-n'
53030'--no-output'
53031     Do not create the 'gcov' output file.
53032
53033'-o DIRECTORY|FILE'
53034'--object-directory DIRECTORY'
53035'--object-file FILE'
53036     Specify either the directory containing the gcov data files, or the
53037     object path name.  The '.gcno', and '.gcda' data files are searched
53038     for using this option.  If a directory is specified, the data files
53039     are in that directory and named after the input file name, without
53040     its extension.  If a file is specified here, the data files are
53041     named after that file, without its extension.
53042
53043'-p'
53044'--preserve-paths'
53045     Preserve complete path information in the names of generated
53046     '.gcov' files.  Without this option, just the filename component is
53047     used.  With this option, all directories are used, with '/'
53048     characters translated to '#' characters, '.' directory components
53049     removed and unremoveable '..' components renamed to '^'.  This is
53050     useful if sourcefiles are in several different directories.
53051
53052'-r'
53053'--relative-only'
53054     Only output information about source files with a relative pathname
53055     (after source prefix elision).  Absolute paths are usually system
53056     header files and coverage of any inline functions therein is
53057     normally uninteresting.
53058
53059'-s DIRECTORY'
53060'--source-prefix DIRECTORY'
53061     A prefix for source file names to remove when generating the output
53062     coverage files.  This option is useful when building in a separate
53063     directory, and the pathname to the source directory is not wanted
53064     when determining the output file names.  Note that this prefix
53065     detection is applied before determining whether the source file is
53066     absolute.
53067
53068'-u'
53069'--unconditional-branches'
53070     When branch probabilities are given, include those of unconditional
53071     branches.  Unconditional branches are normally not interesting.
53072
53073'-v'
53074'--version'
53075     Display the 'gcov' version number (on the standard output), and
53076     exit without doing any further processing.
53077
53078'-w'
53079'--verbose'
53080     Print verbose informations related to basic blocks and arcs.
53081
53082'-x'
53083'--hash-filenames'
53084     By default, gcov uses the full pathname of the source files to
53085     create an output filename.  This can lead to long filenames that
53086     can overflow filesystem limits.  This option creates names of the
53087     form 'SOURCE-FILE##MD5.gcov', where the SOURCE-FILE component is
53088     the final filename part and the MD5 component is calculated from
53089     the full mangled name that would have been used otherwise.
53090
53091 'gcov' should be run with the current directory the same as that when
53092you invoked the compiler.  Otherwise it will not be able to locate the
53093source files.  'gcov' produces files called 'MANGLEDNAME.gcov' in the
53094current directory.  These contain the coverage information of the source
53095file they correspond to.  One '.gcov' file is produced for each source
53096(or header) file containing code, which was compiled to produce the data
53097files.  The MANGLEDNAME part of the output file name is usually simply
53098the source file name, but can be something more complicated if the '-l'
53099or '-p' options are given.  Refer to those options for details.
53100
53101 If you invoke 'gcov' with multiple input files, the contributions from
53102each input file are summed.  Typically you would invoke it with the same
53103list of files as the final link of your executable.
53104
53105 The '.gcov' files contain the ':' separated fields along with program
53106source code.  The format is
53107
53108     EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
53109
53110 Additional block information may succeed each line, when requested by
53111command line option.  The EXECUTION_COUNT is '-' for lines containing no
53112code.  Unexecuted lines are marked '#####' or '=====', depending on
53113whether they are reachable by non-exceptional paths or only exceptional
53114paths such as C++ exception handlers, respectively.  Given '-a' option,
53115unexecuted blocks are marked '$$$$$' or '%%%%%', depending on whether a
53116basic block is reachable via non-exceptional or exceptional paths.
53117Executed basic blocks having a statement with zero EXECUTION_COUNT end
53118with '*' character and are colored with magenta color with '-k' option.
53119The functionality is not supported in Ada.
53120
53121 Note that GCC can completely remove the bodies of functions that are
53122not needed - for instance if they are inlined everywhere.  Such
53123functions are marked with '-', which can be confusing.  Use the
53124'-fkeep-inline-functions' and '-fkeep-static-functions' options to
53125retain these functions and allow gcov to properly show their
53126EXECUTION_COUNT.
53127
53128 Some lines of information at the start have LINE_NUMBER of zero.  These
53129preamble lines are of the form
53130
53131     -:0:TAG:VALUE
53132
53133 The ordering and number of these preamble lines will be augmented as
53134'gcov' development progresses -- do not rely on them remaining
53135unchanged.  Use TAG to locate a particular preamble line.
53136
53137 The additional block information is of the form
53138
53139     TAG INFORMATION
53140
53141 The INFORMATION is human readable, but designed to be simple enough for
53142machine parsing too.
53143
53144 When printing percentages, 0% and 100% are only printed when the values
53145are _exactly_ 0% and 100% respectively.  Other values which would
53146conventionally be rounded to 0% or 100% are instead printed as the
53147nearest non-boundary value.
53148
53149 When using 'gcov', you must first compile your program with two special
53150GCC options: '-fprofile-arcs -ftest-coverage'.  This tells the compiler
53151to generate additional information needed by gcov (basically a flow
53152graph of the program) and also includes additional code in the object
53153files for generating the extra profiling information needed by gcov.
53154These additional files are placed in the directory where the object file
53155is located.
53156
53157 Running the program will cause profile output to be generated.  For
53158each source file compiled with '-fprofile-arcs', an accompanying '.gcda'
53159file will be placed in the object file directory.
53160
53161 Running 'gcov' with your program's source file names as arguments will
53162now produce a listing of the code along with frequency of execution for
53163each line.  For example, if your program is called 'tmp.cpp', this is
53164what you see when you use the basic 'gcov' facility:
53165
53166     $ g++ -fprofile-arcs -ftest-coverage tmp.cpp
53167     $ a.out
53168     $ gcov tmp.cpp -m
53169     File 'tmp.cpp'
53170     Lines executed:92.86% of 14
53171     Creating 'tmp.cpp.gcov'
53172
53173 The file 'tmp.cpp.gcov' contains output from 'gcov'.  Here is a sample:
53174
53175             -:    0:Source:tmp.cpp
53176             -:    0:Graph:tmp.gcno
53177             -:    0:Data:tmp.gcda
53178             -:    0:Runs:1
53179             -:    0:Programs:1
53180             -:    1:#include <stdio.h>
53181             -:    2:
53182             -:    3:template<class T>
53183             -:    4:class Foo
53184             -:    5:{
53185             -:    6:  public:
53186            1*:    7:  Foo(): b (1000) {}
53187     ------------------
53188     Foo<char>::Foo():
53189         #####:    7:  Foo(): b (1000) {}
53190     ------------------
53191     Foo<int>::Foo():
53192             1:    7:  Foo(): b (1000) {}
53193     ------------------
53194            2*:    8:  void inc () { b++; }
53195     ------------------
53196     Foo<char>::inc():
53197         #####:    8:  void inc () { b++; }
53198     ------------------
53199     Foo<int>::inc():
53200             2:    8:  void inc () { b++; }
53201     ------------------
53202             -:    9:
53203             -:   10:  private:
53204             -:   11:  int b;
53205             -:   12:};
53206             -:   13:
53207             -:   14:template class Foo<int>;
53208             -:   15:template class Foo<char>;
53209             -:   16:
53210             -:   17:int
53211             1:   18:main (void)
53212             -:   19:{
53213             -:   20:  int i, total;
53214             1:   21:  Foo<int> counter;
53215             -:   22:
53216             1:   23:  counter.inc();
53217             1:   24:  counter.inc();
53218             1:   25:  total = 0;
53219             -:   26:
53220            11:   27:  for (i = 0; i < 10; i++)
53221            10:   28:    total += i;
53222             -:   29:
53223            1*:   30:  int v = total > 100 ? 1 : 2;
53224             -:   31:
53225             1:   32:  if (total != 45)
53226         #####:   33:    printf ("Failure\n");
53227             -:   34:  else
53228             1:   35:    printf ("Success\n");
53229             1:   36:  return 0;
53230             -:   37:}
53231
53232 Note that line 7 is shown in the report multiple times.  First
53233occurrence presents total number of execution of the line and the next
53234two belong to instances of class Foo constructors.  As you can also see,
53235line 30 contains some unexecuted basic blocks and thus execution count
53236has asterisk symbol.
53237
53238 When you use the '-a' option, you will get individual block counts, and
53239the output looks like this:
53240
53241             -:    0:Source:tmp.cpp
53242             -:    0:Graph:tmp.gcno
53243             -:    0:Data:tmp.gcda
53244             -:    0:Runs:1
53245             -:    0:Programs:1
53246             -:    1:#include <stdio.h>
53247             -:    2:
53248             -:    3:template<class T>
53249             -:    4:class Foo
53250             -:    5:{
53251             -:    6:  public:
53252            1*:    7:  Foo(): b (1000) {}
53253     ------------------
53254     Foo<char>::Foo():
53255         #####:    7:  Foo(): b (1000) {}
53256     ------------------
53257     Foo<int>::Foo():
53258             1:    7:  Foo(): b (1000) {}
53259     ------------------
53260            2*:    8:  void inc () { b++; }
53261     ------------------
53262     Foo<char>::inc():
53263         #####:    8:  void inc () { b++; }
53264     ------------------
53265     Foo<int>::inc():
53266             2:    8:  void inc () { b++; }
53267     ------------------
53268             -:    9:
53269             -:   10:  private:
53270             -:   11:  int b;
53271             -:   12:};
53272             -:   13:
53273             -:   14:template class Foo<int>;
53274             -:   15:template class Foo<char>;
53275             -:   16:
53276             -:   17:int
53277             1:   18:main (void)
53278             -:   19:{
53279             -:   20:  int i, total;
53280             1:   21:  Foo<int> counter;
53281             1:   21-block  0
53282             -:   22:
53283             1:   23:  counter.inc();
53284             1:   23-block  0
53285             1:   24:  counter.inc();
53286             1:   24-block  0
53287             1:   25:  total = 0;
53288             -:   26:
53289            11:   27:  for (i = 0; i < 10; i++)
53290             1:   27-block  0
53291            11:   27-block  1
53292            10:   28:    total += i;
53293            10:   28-block  0
53294             -:   29:
53295            1*:   30:  int v = total > 100 ? 1 : 2;
53296             1:   30-block  0
53297         %%%%%:   30-block  1
53298             1:   30-block  2
53299             -:   31:
53300             1:   32:  if (total != 45)
53301             1:   32-block  0
53302         #####:   33:    printf ("Failure\n");
53303         %%%%%:   33-block  0
53304             -:   34:  else
53305             1:   35:    printf ("Success\n");
53306             1:   35-block  0
53307             1:   36:  return 0;
53308             1:   36-block  0
53309             -:   37:}
53310
53311 In this mode, each basic block is only shown on one line - the last
53312line of the block.  A multi-line block will only contribute to the
53313execution count of that last line, and other lines will not be shown to
53314contain code, unless previous blocks end on those lines.  The total
53315execution count of a line is shown and subsequent lines show the
53316execution counts for individual blocks that end on that line.  After
53317each block, the branch and call counts of the block will be shown, if
53318the '-b' option is given.
53319
53320 Because of the way GCC instruments calls, a call count can be shown
53321after a line with no individual blocks.  As you can see, line 33
53322contains a basic block that was not executed.
53323
53324 When you use the '-b' option, your output looks like this:
53325
53326             -:    0:Source:tmp.cpp
53327             -:    0:Graph:tmp.gcno
53328             -:    0:Data:tmp.gcda
53329             -:    0:Runs:1
53330             -:    0:Programs:1
53331             -:    1:#include <stdio.h>
53332             -:    2:
53333             -:    3:template<class T>
53334             -:    4:class Foo
53335             -:    5:{
53336             -:    6:  public:
53337            1*:    7:  Foo(): b (1000) {}
53338     ------------------
53339     Foo<char>::Foo():
53340     function Foo<char>::Foo() called 0 returned 0% blocks executed 0%
53341         #####:    7:  Foo(): b (1000) {}
53342     ------------------
53343     Foo<int>::Foo():
53344     function Foo<int>::Foo() called 1 returned 100% blocks executed 100%
53345             1:    7:  Foo(): b (1000) {}
53346     ------------------
53347            2*:    8:  void inc () { b++; }
53348     ------------------
53349     Foo<char>::inc():
53350     function Foo<char>::inc() called 0 returned 0% blocks executed 0%
53351         #####:    8:  void inc () { b++; }
53352     ------------------
53353     Foo<int>::inc():
53354     function Foo<int>::inc() called 2 returned 100% blocks executed 100%
53355             2:    8:  void inc () { b++; }
53356     ------------------
53357             -:    9:
53358             -:   10:  private:
53359             -:   11:  int b;
53360             -:   12:};
53361             -:   13:
53362             -:   14:template class Foo<int>;
53363             -:   15:template class Foo<char>;
53364             -:   16:
53365             -:   17:int
53366     function main called 1 returned 100% blocks executed 81%
53367             1:   18:main (void)
53368             -:   19:{
53369             -:   20:  int i, total;
53370             1:   21:  Foo<int> counter;
53371     call    0 returned 100%
53372     branch  1 taken 100% (fallthrough)
53373     branch  2 taken 0% (throw)
53374             -:   22:
53375             1:   23:  counter.inc();
53376     call    0 returned 100%
53377     branch  1 taken 100% (fallthrough)
53378     branch  2 taken 0% (throw)
53379             1:   24:  counter.inc();
53380     call    0 returned 100%
53381     branch  1 taken 100% (fallthrough)
53382     branch  2 taken 0% (throw)
53383             1:   25:  total = 0;
53384             -:   26:
53385            11:   27:  for (i = 0; i < 10; i++)
53386     branch  0 taken 91% (fallthrough)
53387     branch  1 taken 9%
53388            10:   28:    total += i;
53389             -:   29:
53390            1*:   30:  int v = total > 100 ? 1 : 2;
53391     branch  0 taken 0% (fallthrough)
53392     branch  1 taken 100%
53393             -:   31:
53394             1:   32:  if (total != 45)
53395     branch  0 taken 0% (fallthrough)
53396     branch  1 taken 100%
53397         #####:   33:    printf ("Failure\n");
53398     call    0 never executed
53399     branch  1 never executed
53400     branch  2 never executed
53401             -:   34:  else
53402             1:   35:    printf ("Success\n");
53403     call    0 returned 100%
53404     branch  1 taken 100% (fallthrough)
53405     branch  2 taken 0% (throw)
53406             1:   36:  return 0;
53407             -:   37:}
53408
53409 For each function, a line is printed showing how many times the
53410function is called, how many times it returns and what percentage of the
53411function's blocks were executed.
53412
53413 For each basic block, a line is printed after the last line of the
53414basic block describing the branch or call that ends the basic block.
53415There can be multiple branches and calls listed for a single source line
53416if there are multiple basic blocks that end on that line.  In this case,
53417the branches and calls are each given a number.  There is no simple way
53418to map these branches and calls back to source constructs.  In general,
53419though, the lowest numbered branch or call will correspond to the
53420leftmost construct on the source line.
53421
53422 For a branch, if it was executed at least once, then a percentage
53423indicating the number of times the branch was taken divided by the
53424number of times the branch was executed will be printed.  Otherwise, the
53425message "never executed" is printed.
53426
53427 For a call, if it was executed at least once, then a percentage
53428indicating the number of times the call returned divided by the number
53429of times the call was executed will be printed.  This will usually be
53430100%, but may be less for functions that call 'exit' or 'longjmp', and
53431thus may not return every time they are called.
53432
53433 The execution counts are cumulative.  If the example program were
53434executed again without removing the '.gcda' file, the count for the
53435number of times each line in the source was executed would be added to
53436the results of the previous run(s).  This is potentially useful in
53437several ways.  For example, it could be used to accumulate data over a
53438number of program runs as part of a test verification suite, or to
53439provide more accurate long-term information over a large number of
53440program runs.
53441
53442 The data in the '.gcda' files is saved immediately before the program
53443exits.  For each source file compiled with '-fprofile-arcs', the
53444profiling code first attempts to read in an existing '.gcda' file; if
53445the file doesn't match the executable (differing number of basic block
53446counts) it will ignore the contents of the file.  It then adds in the
53447new execution counts and finally writes the data to the file.
53448
53449
53450File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
53451
5345210.3 Using 'gcov' with GCC Optimization
53453=======================================
53454
53455If you plan to use 'gcov' to help optimize your code, you must first
53456compile your program with two special GCC options: '-fprofile-arcs
53457-ftest-coverage'.  Aside from that, you can use any other GCC options;
53458but if you want to prove that every single line in your program was
53459executed, you should not compile with optimization at the same time.  On
53460some machines the optimizer can eliminate some simple code lines by
53461combining them with other lines.  For example, code like this:
53462
53463     if (a != b)
53464       c = 1;
53465     else
53466       c = 0;
53467
53468can be compiled into one instruction on some machines.  In this case,
53469there is no way for 'gcov' to calculate separate execution counts for
53470each line because there isn't separate code for each line.  Hence the
53471'gcov' output looks like this if you compiled the program with
53472optimization:
53473
53474           100:   12:if (a != b)
53475           100:   13:  c = 1;
53476           100:   14:else
53477           100:   15:  c = 0;
53478
53479 The output shows that this block of code, combined by optimization,
53480executed 100 times.  In one sense this result is correct, because there
53481was only one instruction representing all four of these lines.  However,
53482the output does not indicate how many times the result was 0 and how
53483many times the result was 1.
53484
53485 Inlineable functions can create unexpected line counts.  Line counts
53486are shown for the source code of the inlineable function, but what is
53487shown depends on where the function is inlined, or if it is not inlined
53488at all.
53489
53490 If the function is not inlined, the compiler must emit an out of line
53491copy of the function, in any object file that needs it.  If 'fileA.o'
53492and 'fileB.o' both contain out of line bodies of a particular inlineable
53493function, they will also both contain coverage counts for that function.
53494When 'fileA.o' and 'fileB.o' are linked together, the linker will, on
53495many systems, select one of those out of line bodies for all calls to
53496that function, and remove or ignore the other.  Unfortunately, it will
53497not remove the coverage counters for the unused function body.  Hence
53498when instrumented, all but one use of that function will show zero
53499counts.
53500
53501 If the function is inlined in several places, the block structure in
53502each location might not be the same.  For instance, a condition might
53503now be calculable at compile time in some instances.  Because the
53504coverage of all the uses of the inline function will be shown for the
53505same source lines, the line counts themselves might seem inconsistent.
53506
53507 Long-running applications can use the '__gcov_reset' and '__gcov_dump'
53508facilities to restrict profile collection to the program region of
53509interest.  Calling '__gcov_reset(void)' will clear all profile counters
53510to zero, and calling '__gcov_dump(void)' will cause the profile
53511information collected at that point to be dumped to '.gcda' output
53512files.  Instrumented applications use a static destructor with priority
5351399 to invoke the '__gcov_dump' function.  Thus '__gcov_dump' is executed
53514after all user defined static destructors, as well as handlers
53515registered with 'atexit'.  If an executable loads a dynamic shared
53516object via dlopen functionality, '-Wl,--dynamic-list-data' is needed to
53517dump all profile data.
53518
53519
53520File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
53521
5352210.4 Brief Description of 'gcov' Data Files
53523===========================================
53524
53525'gcov' uses two files for profiling.  The names of these files are
53526derived from the original _object_ file by substituting the file suffix
53527with either '.gcno', or '.gcda'.  The files contain coverage and profile
53528data stored in a platform-independent format.  The '.gcno' files are
53529placed in the same directory as the object file.  By default, the
53530'.gcda' files are also stored in the same directory as the object file,
53531but the GCC '-fprofile-dir' option may be used to store the '.gcda'
53532files in a separate directory.
53533
53534 The '.gcno' notes file is generated when the source file is compiled
53535with the GCC '-ftest-coverage' option.  It contains information to
53536reconstruct the basic block graphs and assign source line numbers to
53537blocks.
53538
53539 The '.gcda' count data file is generated when a program containing
53540object files built with the GCC '-fprofile-arcs' option is executed.  A
53541separate '.gcda' file is created for each object file compiled with this
53542option.  It contains arc transition counts, value profile counts, and
53543some summary information.
53544
53545 It is not recommended to access the coverage files directly.  Consumers
53546should use the intermediate format that is provided by 'gcov' tool via
53547'--intermediate-format' option.
53548
53549
53550File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
53551
5355210.5 Data File Relocation to Support Cross-Profiling
53553====================================================
53554
53555Running the program will cause profile output to be generated.  For each
53556source file compiled with '-fprofile-arcs', an accompanying '.gcda' file
53557will be placed in the object file directory.  That implicitly requires
53558running the program on the same system as it was built or having the
53559same absolute directory structure on the target system.  The program
53560will try to create the needed directory structure, if it is not already
53561present.
53562
53563 To support cross-profiling, a program compiled with '-fprofile-arcs'
53564can relocate the data files based on two environment variables:
53565
53566   * GCOV_PREFIX contains the prefix to add to the absolute paths in the
53567     object file.  Prefix can be absolute, or relative.  The default is
53568     no prefix.
53569
53570   * GCOV_PREFIX_STRIP indicates the how many initial directory names to
53571     strip off the hardwired absolute paths.  Default value is 0.
53572
53573     _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
53574     undefined, then a relative path is made out of the hardwired
53575     absolute paths.
53576
53577 For example, if the object file '/user/build/foo.o' was built with
53578'-fprofile-arcs', the final executable will try to create the data file
53579'/user/build/foo.gcda' when running on the target system.  This will
53580fail if the corresponding directory does not exist and it is unable to
53581create it.  This can be overcome by, for example, setting the
53582environment as 'GCOV_PREFIX=/target/run' and 'GCOV_PREFIX_STRIP=1'.
53583Such a setting will name the data file '/target/run/build/foo.gcda'.
53584
53585 You must move the data files to the expected directory tree in order to
53586use them for profile directed optimizations ('-fprofile-use'), or to use
53587the 'gcov' tool.
53588
53589
53590File: gcc.info,  Node: Gcov-tool,  Next: Gcov-dump,  Prev: Gcov,  Up: Top
53591
5359211 'gcov-tool'--an Offline Gcda Profile Processing Tool
53593*******************************************************
53594
53595'gcov-tool' is a tool you can use in conjunction with GCC to manipulate
53596or process gcda profile files offline.
53597
53598* Menu:
53599
53600* Gcov-tool Intro::             Introduction to gcov-tool.
53601* Invoking Gcov-tool::          How to use gcov-tool.
53602
53603
53604File: gcc.info,  Node: Gcov-tool Intro,  Next: Invoking Gcov-tool,  Up: Gcov-tool
53605
5360611.1 Introduction to 'gcov-tool'
53607================================
53608
53609'gcov-tool' is an offline tool to process gcc's gcda profile files.
53610
53611 Current gcov-tool supports the following functionalities:
53612
53613   * merge two sets of profiles with weights.
53614
53615   * read one set of profile and rewrite profile contents.  One can
53616     scale or normalize the count values.
53617
53618 Examples of the use cases for this tool are:
53619   * Collect the profiles for different set of inputs, and use this tool
53620     to merge them.  One can specify the weight to factor in the
53621     relative importance of each input.
53622
53623   * Rewrite the profile after removing a subset of the gcda files,
53624     while maintaining the consistency of the summary and the histogram.
53625
53626   * It can also be used to debug or libgcov code as the tools shares
53627     the majority code as the runtime library.
53628
53629 Note that for the merging operation, this profile generated offline may
53630contain slight different values from the online merged profile.  Here
53631are a list of typical differences:
53632
53633   * histogram difference: This offline tool recomputes the histogram
53634     after merging the counters.  The resulting histogram, therefore, is
53635     precise.  The online merging does not have this capability - the
53636     histogram is merged from two histograms and the result is an
53637     approximation.
53638
53639   * summary checksum difference: Summary checksum uses a CRC32
53640     operation.  The value depends on the link list order of gcov-info
53641     objects.  This order is different in gcov-tool from that in the
53642     online merge.  It's expected to have different summary checksums.
53643     It does not really matter as the compiler does not use this
53644     checksum anywhere.
53645
53646   * value profile counter values difference: Some counter values for
53647     value profile are runtime dependent, like heap addresses.  It's
53648     normal to see some difference in these kind of counters.
53649
53650
53651File: gcc.info,  Node: Invoking Gcov-tool,  Prev: Gcov-tool Intro,  Up: Gcov-tool
53652
5365311.2 Invoking 'gcov-tool'
53654=========================
53655
53656     gcov-tool [GLOBAL-OPTIONS] SUB_COMMAND [SUB_COMMAND-OPTIONS] PROFILE_DIR
53657
53658 'gcov-tool' accepts the following options:
53659
53660'-h'
53661'--help'
53662     Display help about using 'gcov-tool' (on the standard output), and
53663     exit without doing any further processing.
53664
53665'-v'
53666'--version'
53667     Display the 'gcov-tool' version number (on the standard output),
53668     and exit without doing any further processing.
53669
53670'merge'
53671     Merge two profile directories.
53672
53673     '-o DIRECTORY'
53674     '--output DIRECTORY'
53675          Set the output profile directory.  Default output directory
53676          name is MERGED_PROFILE.
53677
53678     '-v'
53679     '--verbose'
53680          Set the verbose mode.
53681
53682     '-w W1,W2'
53683     '--weight W1,W2'
53684          Set the merge weights of the DIRECTORY1 and DIRECTORY2,
53685          respectively.  The default weights are 1 for both.
53686
53687'rewrite'
53688     Read the specified profile directory and rewrite to a new
53689     directory.
53690
53691     '-n LONG_LONG_VALUE'
53692     '--normalize <long_long_value>'
53693          Normalize the profile.  The specified value is the max counter
53694          value in the new profile.
53695
53696     '-o DIRECTORY'
53697     '--output DIRECTORY'
53698          Set the output profile directory.  Default output name is
53699          REWRITE_PROFILE.
53700
53701     '-s FLOAT_OR_SIMPLE-FRAC_VALUE'
53702     '--scale FLOAT_OR_SIMPLE-FRAC_VALUE'
53703          Scale the profile counters.  The specified value can be in
53704          floating point value, or simple fraction value form, such 1,
53705          2, 2/3, and 5/3.
53706
53707     '-v'
53708     '--verbose'
53709          Set the verbose mode.
53710
53711'overlap'
53712     Compute the overlap score between the two specified profile
53713     directories.  The overlap score is computed based on the arc
53714     profiles.  It is defined as the sum of min (p1_counter[i] /
53715     p1_sum_all, p2_counter[i] / p2_sum_all), for all arc counter i,
53716     where p1_counter[i] and p2_counter[i] are two matched counters and
53717     p1_sum_all and p2_sum_all are the sum of counter values in profile
53718     1 and profile 2, respectively.
53719
53720     '-f'
53721     '--function'
53722          Print function level overlap score.
53723
53724     '-F'
53725     '--fullname'
53726          Print full gcda filename.
53727
53728     '-h'
53729     '--hotonly'
53730          Only print info for hot objects/functions.
53731
53732     '-o'
53733     '--object'
53734          Print object level overlap score.
53735
53736     '-t FLOAT'
53737     '--hot_threshold <float>'
53738          Set the threshold for hot counter value.
53739
53740     '-v'
53741     '--verbose'
53742          Set the verbose mode.
53743
53744
53745File: gcc.info,  Node: Gcov-dump,  Next: Trouble,  Prev: Gcov-tool,  Up: Top
53746
5374712 'gcov-dump'--an Offline Gcda and Gcno Profile Dump Tool
53748**********************************************************
53749
53750* Menu:
53751
53752* Gcov-dump Intro::             Introduction to gcov-dump.
53753* Invoking Gcov-dump::          How to use gcov-dump.
53754
53755
53756File: gcc.info,  Node: Gcov-dump Intro,  Next: Invoking Gcov-dump,  Up: Gcov-dump
53757
5375812.1 Introduction to 'gcov-dump'
53759================================
53760
53761'gcov-dump' is a tool you can use in conjunction with GCC to dump
53762content of gcda and gcno profile files offline.
53763
53764
53765File: gcc.info,  Node: Invoking Gcov-dump,  Prev: Gcov-dump Intro,  Up: Gcov-dump
53766
5376712.2 Invoking 'gcov-dump'
53768=========================
53769
53770     Usage: gcov-dump [OPTION] ... GCOVFILES
53771
53772 'gcov-dump' accepts the following options:
53773
53774'-h'
53775'--help'
53776     Display help about using 'gcov-dump' (on the standard output), and
53777     exit without doing any further processing.
53778
53779'-l'
53780'--long'
53781     Dump content of records.
53782
53783'-p'
53784'--positions'
53785     Dump positions of records.
53786
53787'-v'
53788'--version'
53789     Display the 'gcov-dump' version number (on the standard output),
53790     and exit without doing any further processing.
53791
53792'-w'
53793'--working-sets'
53794     Dump working set computed from summary.
53795
53796
53797File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov-dump,  Up: Top
53798
5379913 Known Causes of Trouble with GCC
53800***********************************
53801
53802This section describes known problems that affect users of GCC.  Most of
53803these are not GCC bugs per se--if they were, we would fix them.  But the
53804result for a user may be like the result of a bug.
53805
53806 Some of these problems are due to bugs in other software, some are
53807missing features that are too much work to add, and some are places
53808where people's opinions differ as to what is best.
53809
53810* Menu:
53811
53812* Actual Bugs::         Bugs we will fix later.
53813* Interoperation::      Problems using GCC with other compilers,
53814                        and with certain linkers, assemblers and debuggers.
53815* Incompatibilities::   GCC is incompatible with traditional C.
53816* Fixed Headers::       GCC uses corrected versions of system header files.
53817                        This is necessary, but doesn't always work smoothly.
53818* Standard Libraries::  GCC uses the system C library, which might not be
53819                        compliant with the ISO C standard.
53820* Disappointments::     Regrettable things we cannot change, but not quite bugs.
53821* C++ Misunderstandings:: Common misunderstandings with GNU C++.
53822* Non-bugs::            Things we think are right, but some others disagree.
53823* Warnings and Errors:: Which problems in your code get warnings,
53824                        and which get errors.
53825
53826
53827File: gcc.info,  Node: Actual Bugs,  Next: Interoperation,  Up: Trouble
53828
5382913.1 Actual Bugs We Haven't Fixed Yet
53830=====================================
53831
53832   * The 'fixincludes' script interacts badly with automounters; if the
53833     directory of system header files is automounted, it tends to be
53834     unmounted while 'fixincludes' is running.  This would seem to be a
53835     bug in the automounter.  We don't know any good way to work around
53836     it.
53837
53838
53839File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Actual Bugs,  Up: Trouble
53840
5384113.2 Interoperation
53842===================
53843
53844This section lists various difficulties encountered in using GCC
53845together with other compilers or with the assemblers, linkers, libraries
53846and debuggers on certain systems.
53847
53848   * On many platforms, GCC supports a different ABI for C++ than do
53849     other compilers, so the object files compiled by GCC cannot be used
53850     with object files generated by another C++ compiler.
53851
53852     An area where the difference is most apparent is name mangling.
53853     The use of different name mangling is intentional, to protect you
53854     from more subtle problems.  Compilers differ as to many internal
53855     details of C++ implementation, including: how class instances are
53856     laid out, how multiple inheritance is implemented, and how virtual
53857     function calls are handled.  If the name encoding were made the
53858     same, your programs would link against libraries provided from
53859     other compilers--but the programs would then crash when run.
53860     Incompatible libraries are then detected at link time, rather than
53861     at run time.
53862
53863   * On some BSD systems, including some versions of Ultrix, use of
53864     profiling causes static variable destructors (currently used only
53865     in C++) not to be run.
53866
53867   * On a SPARC, GCC aligns all values of type 'double' on an 8-byte
53868     boundary, and it expects every 'double' to be so aligned.  The Sun
53869     compiler usually gives 'double' values 8-byte alignment, with one
53870     exception: function arguments of type 'double' may not be aligned.
53871
53872     As a result, if a function compiled with Sun CC takes the address
53873     of an argument of type 'double' and passes this pointer of type
53874     'double *' to a function compiled with GCC, dereferencing the
53875     pointer may cause a fatal signal.
53876
53877     One way to solve this problem is to compile your entire program
53878     with GCC.  Another solution is to modify the function that is
53879     compiled with Sun CC to copy the argument into a local variable;
53880     local variables are always properly aligned.  A third solution is
53881     to modify the function that uses the pointer to dereference it via
53882     the following function 'access_double' instead of directly with
53883     '*':
53884
53885          inline double
53886          access_double (double *unaligned_ptr)
53887          {
53888            union d2i { double d; int i[2]; };
53889
53890            union d2i *p = (union d2i *) unaligned_ptr;
53891            union d2i u;
53892
53893            u.i[0] = p->i[0];
53894            u.i[1] = p->i[1];
53895
53896            return u.d;
53897          }
53898
53899     Storing into the pointer can be done likewise with the same union.
53900
53901   * On Solaris, the 'malloc' function in the 'libmalloc.a' library may
53902     allocate memory that is only 4 byte aligned.  Since GCC on the
53903     SPARC assumes that doubles are 8 byte aligned, this may result in a
53904     fatal signal if doubles are stored in memory allocated by the
53905     'libmalloc.a' library.
53906
53907     The solution is to not use the 'libmalloc.a' library.  Use instead
53908     'malloc' and related functions from 'libc.a'; they do not have this
53909     problem.
53910
53911   * On the HP PA machine, ADB sometimes fails to work on functions
53912     compiled with GCC.  Specifically, it fails to work on functions
53913     that use 'alloca' or variable-size arrays.  This is because GCC
53914     doesn't generate HP-UX unwind descriptors for such functions.  It
53915     may even be impossible to generate them.
53916
53917   * Debugging ('-g') is not supported on the HP PA machine, unless you
53918     use the preliminary GNU tools.
53919
53920   * Taking the address of a label may generate errors from the HP-UX PA
53921     assembler.  GAS for the PA does not have this problem.
53922
53923   * Using floating point parameters for indirect calls to static
53924     functions will not work when using the HP assembler.  There simply
53925     is no way for GCC to specify what registers hold arguments for
53926     static functions when using the HP assembler.  GAS for the PA does
53927     not have this problem.
53928
53929   * In extremely rare cases involving some very large functions you may
53930     receive errors from the HP linker complaining about an out of
53931     bounds unconditional branch offset.  This used to occur more often
53932     in previous versions of GCC, but is now exceptionally rare.  If you
53933     should run into it, you can work around by making your function
53934     smaller.
53935
53936   * GCC compiled code sometimes emits warnings from the HP-UX assembler
53937     of the form:
53938
53939          (warning) Use of GR3 when
53940            frame >= 8192 may cause conflict.
53941
53942     These warnings are harmless and can be safely ignored.
53943
53944   * In extremely rare cases involving some very large functions you may
53945     receive errors from the AIX Assembler complaining about a
53946     displacement that is too large.  If you should run into it, you can
53947     work around by making your function smaller.
53948
53949   * The 'libstdc++.a' library in GCC relies on the SVR4 dynamic linker
53950     semantics which merges global symbols between libraries and
53951     applications, especially necessary for C++ streams functionality.
53952     This is not the default behavior of AIX shared libraries and
53953     dynamic linking.  'libstdc++.a' is built on AIX with
53954     "runtime-linking" enabled so that symbol merging can occur.  To
53955     utilize this feature, the application linked with 'libstdc++.a'
53956     must include the '-Wl,-brtl' flag on the link line.  G++ cannot
53957     impose this because this option may interfere with the semantics of
53958     the user program and users may not always use 'g++' to link his or
53959     her application.  Applications are not required to use the
53960     '-Wl,-brtl' flag on the link line--the rest of the 'libstdc++.a'
53961     library which is not dependent on the symbol merging semantics will
53962     continue to function correctly.
53963
53964   * An application can interpose its own definition of functions for
53965     functions invoked by 'libstdc++.a' with "runtime-linking" enabled
53966     on AIX.  To accomplish this the application must be linked with
53967     "runtime-linking" option and the functions explicitly must be
53968     exported by the application ('-Wl,-brtl,-bE:exportfile').
53969
53970   * AIX on the RS/6000 provides support (NLS) for environments outside
53971     of the United States.  Compilers and assemblers use NLS to support
53972     locale-specific representations of various objects including
53973     floating-point numbers ('.' vs ',' for separating decimal
53974     fractions).  There have been problems reported where the library
53975     linked with GCC does not produce the same floating-point formats
53976     that the assembler accepts.  If you have this problem, set the
53977     'LANG' environment variable to 'C' or 'En_US'.
53978
53979   * Even if you specify '-fdollars-in-identifiers', you cannot
53980     successfully use '$' in identifiers on the RS/6000 due to a
53981     restriction in the IBM assembler.  GAS supports these identifiers.
53982
53983
53984File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
53985
5398613.3 Incompatibilities of GCC
53987=============================
53988
53989There are several noteworthy incompatibilities between GNU C and K&R
53990(non-ISO) versions of C.
53991
53992   * GCC normally makes string constants read-only.  If several
53993     identical-looking string constants are used, GCC stores only one
53994     copy of the string.
53995
53996     One consequence is that you cannot call 'mktemp' with a string
53997     constant argument.  The function 'mktemp' always alters the string
53998     its argument points to.
53999
54000     Another consequence is that 'sscanf' does not work on some very old
54001     systems when passed a string constant as its format control string
54002     or input.  This is because 'sscanf' incorrectly tries to write into
54003     the string constant.  Likewise 'fscanf' and 'scanf'.
54004
54005     The solution to these problems is to change the program to use
54006     'char'-array variables with initialization strings for these
54007     purposes instead of string constants.
54008
54009   * '-2147483648' is positive.
54010
54011     This is because 2147483648 cannot fit in the type 'int', so
54012     (following the ISO C rules) its data type is 'unsigned long int'.
54013     Negating this value yields 2147483648 again.
54014
54015   * GCC does not substitute macro arguments when they appear inside of
54016     string constants.  For example, the following macro in GCC
54017
54018          #define foo(a) "a"
54019
54020     will produce output '"a"' regardless of what the argument A is.
54021
54022   * When you use 'setjmp' and 'longjmp', the only automatic variables
54023     guaranteed to remain valid are those declared 'volatile'.  This is
54024     a consequence of automatic register allocation.  Consider this
54025     function:
54026
54027          jmp_buf j;
54028
54029          foo ()
54030          {
54031            int a, b;
54032
54033            a = fun1 ();
54034            if (setjmp (j))
54035              return a;
54036
54037            a = fun2 ();
54038            /* 'longjmp (j)' may occur in 'fun3'. */
54039            return a + fun3 ();
54040          }
54041
54042     Here 'a' may or may not be restored to its first value when the
54043     'longjmp' occurs.  If 'a' is allocated in a register, then its
54044     first value is restored; otherwise, it keeps the last value stored
54045     in it.
54046
54047     If you use the '-W' option with the '-O' option, you will get a
54048     warning when GCC thinks such a problem might be possible.
54049
54050   * Programs that use preprocessing directives in the middle of macro
54051     arguments do not work with GCC.  For example, a program like this
54052     will not work:
54053
54054          foobar (
54055          #define luser
54056                  hack)
54057
54058     ISO C does not permit such a construct.
54059
54060   * K&R compilers allow comments to cross over an inclusion boundary
54061     (i.e. started in an include file and ended in the including file).
54062
54063   * Declarations of external variables and functions within a block
54064     apply only to the block containing the declaration.  In other
54065     words, they have the same scope as any other declaration in the
54066     same place.
54067
54068     In some other C compilers, an 'extern' declaration affects all the
54069     rest of the file even if it happens within a block.
54070
54071   * In traditional C, you can combine 'long', etc., with a typedef
54072     name, as shown here:
54073
54074          typedef int foo;
54075          typedef long foo bar;
54076
54077     In ISO C, this is not allowed: 'long' and other type modifiers
54078     require an explicit 'int'.
54079
54080   * PCC allows typedef names to be used as function parameters.
54081
54082   * Traditional C allows the following erroneous pair of declarations
54083     to appear together in a given scope:
54084
54085          typedef int foo;
54086          typedef foo foo;
54087
54088   * GCC treats all characters of identifiers as significant.  According
54089     to K&R-1 (2.2), "No more than the first eight characters are
54090     significant, although more may be used.".  Also according to K&R-1
54091     (2.2), "An identifier is a sequence of letters and digits; the
54092     first character must be a letter.  The underscore _ counts as a
54093     letter.", but GCC also allows dollar signs in identifiers.
54094
54095   * PCC allows whitespace in the middle of compound assignment
54096     operators such as '+='.  GCC, following the ISO standard, does not
54097     allow this.
54098
54099   * GCC complains about unterminated character constants inside of
54100     preprocessing conditionals that fail.  Some programs have English
54101     comments enclosed in conditionals that are guaranteed to fail; if
54102     these comments contain apostrophes, GCC will probably report an
54103     error.  For example, this code would produce an error:
54104
54105          #if 0
54106          You can't expect this to work.
54107          #endif
54108
54109     The best solution to such a problem is to put the text into an
54110     actual C comment delimited by '/*...*/'.
54111
54112   * Many user programs contain the declaration 'long time ();'.  In the
54113     past, the system header files on many systems did not actually
54114     declare 'time', so it did not matter what type your program
54115     declared it to return.  But in systems with ISO C headers, 'time'
54116     is declared to return 'time_t', and if that is not the same as
54117     'long', then 'long time ();' is erroneous.
54118
54119     The solution is to change your program to use appropriate system
54120     headers ('<time.h>' on systems with ISO C headers) and not to
54121     declare 'time' if the system header files declare it, or failing
54122     that to use 'time_t' as the return type of 'time'.
54123
54124   * When compiling functions that return 'float', PCC converts it to a
54125     double.  GCC actually returns a 'float'.  If you are concerned with
54126     PCC compatibility, you should declare your functions to return
54127     'double'; you might as well say what you mean.
54128
54129   * When compiling functions that return structures or unions, GCC
54130     output code normally uses a method different from that used on most
54131     versions of Unix.  As a result, code compiled with GCC cannot call
54132     a structure-returning function compiled with PCC, and vice versa.
54133
54134     The method used by GCC is as follows: a structure or union which is
54135     1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
54136     union with any other size is stored into an address supplied by the
54137     caller (usually in a special, fixed register, but on some machines
54138     it is passed on the stack).  The target hook
54139     'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
54140
54141     By contrast, PCC on most target machines returns structures and
54142     unions of any size by copying the data into an area of static
54143     storage, and then returning the address of that storage as if it
54144     were a pointer value.  The caller must copy the data from that
54145     memory area to the place where the value is wanted.  GCC does not
54146     use this method because it is slower and nonreentrant.
54147
54148     On some newer machines, PCC uses a reentrant convention for all
54149     structure and union returning.  GCC on most of these machines uses
54150     a compatible convention when returning structures and unions in
54151     memory, but still returns small structures and unions in registers.
54152
54153     You can tell GCC to use a compatible convention for all structure
54154     and union returning with the option '-fpcc-struct-return'.
54155
54156   * GCC complains about program fragments such as '0x74ae-0x4000' which
54157     appear to be two hexadecimal constants separated by the minus
54158     operator.  Actually, this string is a single "preprocessing token".
54159     Each such token must correspond to one token in C.  Since this does
54160     not, GCC prints an error message.  Although it may appear obvious
54161     that what is meant is an operator and two values, the ISO C
54162     standard specifically requires that this be treated as erroneous.
54163
54164     A "preprocessing token" is a "preprocessing number" if it begins
54165     with a digit and is followed by letters, underscores, digits,
54166     periods and 'e+', 'e-', 'E+', 'E-', 'p+', 'p-', 'P+', or 'P-'
54167     character sequences.  (In strict C90 mode, the sequences 'p+',
54168     'p-', 'P+' and 'P-' cannot appear in preprocessing numbers.)
54169
54170     To make the above program fragment valid, place whitespace in front
54171     of the minus sign.  This whitespace will end the preprocessing
54172     number.
54173
54174
54175File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
54176
5417713.4 Fixed Header Files
54178=======================
54179
54180GCC needs to install corrected versions of some system header files.
54181This is because most target systems have some header files that won't
54182work with GCC unless they are changed.  Some have bugs, some are
54183incompatible with ISO C, and some depend on special features of other
54184compilers.
54185
54186 Installing GCC automatically creates and installs the fixed header
54187files, by running a program called 'fixincludes'.  Normally, you don't
54188need to pay attention to this.  But there are cases where it doesn't do
54189the right thing automatically.
54190
54191   * If you update the system's header files, such as by installing a
54192     new system version, the fixed header files of GCC are not
54193     automatically updated.  They can be updated using the 'mkheaders'
54194     script installed in 'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
54195
54196   * On some systems, header file directories contain machine-specific
54197     symbolic links in certain places.  This makes it possible to share
54198     most of the header files among hosts running the same version of
54199     the system on different machine models.
54200
54201     The programs that fix the header files do not understand this
54202     special way of using symbolic links; therefore, the directory of
54203     fixed header files is good only for the machine model used to build
54204     it.
54205
54206     It is possible to make separate sets of fixed header files for the
54207     different machine models, and arrange a structure of symbolic links
54208     so as to use the proper set, but you'll have to do this by hand.
54209
54210
54211File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
54212
5421313.5 Standard Libraries
54214=======================
54215
54216GCC by itself attempts to be a conforming freestanding implementation.
54217*Note Language Standards Supported by GCC: Standards, for details of
54218what this means.  Beyond the library facilities required of such an
54219implementation, the rest of the C library is supplied by the vendor of
54220the operating system.  If that C library doesn't conform to the C
54221standards, then your programs might get warnings (especially when using
54222'-Wall') that you don't expect.
54223
54224 For example, the 'sprintf' function on SunOS 4.1.3 returns 'char *'
54225while the C standard says that 'sprintf' returns an 'int'.  The
54226'fixincludes' program could make the prototype for this function match
54227the Standard, but that would be wrong, since the function will still
54228return 'char *'.
54229
54230 If you need a Standard compliant library, then you need to find one, as
54231GCC does not provide one.  The GNU C library (called 'glibc') provides
54232ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
54233HURD-based GNU systems; no recent version of it supports other systems,
54234though some very old versions did.  Version 2.2 of the GNU C library
54235includes nearly complete C99 support.  You could also ask your operating
54236system vendor if newer libraries are available.
54237
54238
54239File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
54240
5424113.6 Disappointments and Misunderstandings
54242==========================================
54243
54244These problems are perhaps regrettable, but we don't know any practical
54245way around them.
54246
54247   * Certain local variables aren't recognized by debuggers when you
54248     compile with optimization.
54249
54250     This occurs because sometimes GCC optimizes the variable out of
54251     existence.  There is no way to tell the debugger how to compute the
54252     value such a variable "would have had", and it is not clear that
54253     would be desirable anyway.  So GCC simply does not mention the
54254     eliminated variable when it writes debugging information.
54255
54256     You have to expect a certain amount of disagreement between the
54257     executable and your source code, when you use optimization.
54258
54259   * Users often think it is a bug when GCC reports an error for code
54260     like this:
54261
54262          int foo (struct mumble *);
54263
54264          struct mumble { ... };
54265
54266          int foo (struct mumble *x)
54267          { ... }
54268
54269     This code really is erroneous, because the scope of 'struct mumble'
54270     in the prototype is limited to the argument list containing it.  It
54271     does not refer to the 'struct mumble' defined with file scope
54272     immediately below--they are two unrelated types with similar names
54273     in different scopes.
54274
54275     But in the definition of 'foo', the file-scope type is used because
54276     that is available to be inherited.  Thus, the definition and the
54277     prototype do not match, and you get an error.
54278
54279     This behavior may seem silly, but it's what the ISO standard
54280     specifies.  It is easy enough for you to make your code work by
54281     moving the definition of 'struct mumble' above the prototype.  It's
54282     not worth being incompatible with ISO C just to avoid an error for
54283     the example shown above.
54284
54285   * Accesses to bit-fields even in volatile objects works by accessing
54286     larger objects, such as a byte or a word.  You cannot rely on what
54287     size of object is accessed in order to read or write the bit-field;
54288     it may even vary for a given bit-field according to the precise
54289     usage.
54290
54291     If you care about controlling the amount of memory that is
54292     accessed, use volatile but do not use bit-fields.
54293
54294   * GCC comes with shell scripts to fix certain known problems in
54295     system header files.  They install corrected copies of various
54296     header files in a special directory where only GCC will normally
54297     look for them.  The scripts adapt to various systems by searching
54298     all the system header files for the problem cases that we know
54299     about.
54300
54301     If new system header files are installed, nothing automatically
54302     arranges to update the corrected header files.  They can be updated
54303     using the 'mkheaders' script installed in
54304     'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
54305
54306   * On 68000 and x86 systems, for instance, you can get paradoxical
54307     results if you test the precise values of floating point numbers.
54308     For example, you can find that a floating point value which is not
54309     a NaN is not equal to itself.  This results from the fact that the
54310     floating point registers hold a few more bits of precision than fit
54311     in a 'double' in memory.  Compiled code moves values between memory
54312     and floating point registers at its convenience, and moving them
54313     into memory truncates them.
54314
54315     You can partially avoid this problem by using the '-ffloat-store'
54316     option (*note Optimize Options::).
54317
54318   * On AIX and other platforms without weak symbol support, templates
54319     need to be instantiated explicitly and symbols for static members
54320     of templates will not be generated.
54321
54322   * On AIX, GCC scans object files and library archives for static
54323     constructors and destructors when linking an application before the
54324     linker prunes unreferenced symbols.  This is necessary to prevent
54325     the AIX linker from mistakenly assuming that static constructor or
54326     destructor are unused and removing them before the scanning can
54327     occur.  All static constructors and destructors found will be
54328     referenced even though the modules in which they occur may not be
54329     used by the program.  This may lead to both increased executable
54330     size and unexpected symbol references.
54331
54332
54333File: gcc.info,  Node: C++ Misunderstandings,  Next: Non-bugs,  Prev: Disappointments,  Up: Trouble
54334
5433513.7 Common Misunderstandings with GNU C++
54336==========================================
54337
54338C++ is a complex language and an evolving one, and its standard
54339definition (the ISO C++ standard) was only recently completed.  As a
54340result, your C++ compiler may occasionally surprise you, even when its
54341behavior is correct.  This section discusses some areas that frequently
54342give rise to questions of this sort.
54343
54344* Menu:
54345
54346* Static Definitions::  Static member declarations are not definitions
54347* Name lookup::         Name lookup, templates, and accessing members of base classes
54348* Temporaries::         Temporaries may vanish before you expect
54349* Copy Assignment::     Copy Assignment operators copy virtual bases twice
54350
54351
54352File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
54353
5435413.7.1 Declare _and_ Define Static Members
54355------------------------------------------
54356
54357When a class has static data members, it is not enough to _declare_ the
54358static member; you must also _define_ it.  For example:
54359
54360     class Foo
54361     {
54362       ...
54363       void method();
54364       static int bar;
54365     };
54366
54367 This declaration only establishes that the class 'Foo' has an 'int'
54368named 'Foo::bar', and a member function named 'Foo::method'.  But you
54369still need to define _both_ 'method' and 'bar' elsewhere.  According to
54370the ISO standard, you must supply an initializer in one (and only one)
54371source file, such as:
54372
54373     int Foo::bar = 0;
54374
54375 Other C++ compilers may not correctly implement the standard behavior.
54376As a result, when you switch to 'g++' from one of these compilers, you
54377may discover that a program that appeared to work correctly in fact does
54378not conform to the standard: 'g++' reports as undefined symbols any
54379static data members that lack definitions.
54380
54381
54382File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
54383
5438413.7.2 Name Lookup, Templates, and Accessing Members of Base Classes
54385--------------------------------------------------------------------
54386
54387The C++ standard prescribes that all names that are not dependent on
54388template parameters are bound to their present definitions when parsing
54389a template function or class.(1)  Only names that are dependent are
54390looked up at the point of instantiation.  For example, consider
54391
54392       void foo(double);
54393
54394       struct A {
54395         template <typename T>
54396         void f () {
54397           foo (1);        // 1
54398           int i = N;      // 2
54399           T t;
54400           t.bar();        // 3
54401           foo (t);        // 4
54402         }
54403
54404         static const int N;
54405       };
54406
54407 Here, the names 'foo' and 'N' appear in a context that does not depend
54408on the type of 'T'.  The compiler will thus require that they are
54409defined in the context of use in the template, not only before the point
54410of instantiation, and will here use '::foo(double)' and 'A::N',
54411respectively.  In particular, it will convert the integer value to a
54412'double' when passing it to '::foo(double)'.
54413
54414 Conversely, 'bar' and the call to 'foo' in the fourth marked line are
54415used in contexts that do depend on the type of 'T', so they are only
54416looked up at the point of instantiation, and you can provide
54417declarations for them after declaring the template, but before
54418instantiating it.  In particular, if you instantiate 'A::f<int>', the
54419last line will call an overloaded '::foo(int)' if one was provided, even
54420if after the declaration of 'struct A'.
54421
54422 This distinction between lookup of dependent and non-dependent names is
54423called two-stage (or dependent) name lookup.  G++ implements it since
54424version 3.4.
54425
54426 Two-stage name lookup sometimes leads to situations with behavior
54427different from non-template codes.  The most common is probably this:
54428
54429       template <typename T> struct Base {
54430         int i;
54431       };
54432
54433       template <typename T> struct Derived : public Base<T> {
54434         int get_i() { return i; }
54435       };
54436
54437 In 'get_i()', 'i' is not used in a dependent context, so the compiler
54438will look for a name declared at the enclosing namespace scope (which is
54439the global scope here).  It will not look into the base class, since
54440that is dependent and you may declare specializations of 'Base' even
54441after declaring 'Derived', so the compiler cannot really know what 'i'
54442would refer to.  If there is no global variable 'i', then you will get
54443an error message.
54444
54445 In order to make it clear that you want the member of the base class,
54446you need to defer lookup until instantiation time, at which the base
54447class is known.  For this, you need to access 'i' in a dependent
54448context, by either using 'this->i' (remember that 'this' is of type
54449'Derived<T>*', so is obviously dependent), or using 'Base<T>::i'.
54450Alternatively, 'Base<T>::i' might be brought into scope by a
54451'using'-declaration.
54452
54453 Another, similar example involves calling member functions of a base
54454class:
54455
54456       template <typename T> struct Base {
54457           int f();
54458       };
54459
54460       template <typename T> struct Derived : Base<T> {
54461           int g() { return f(); };
54462       };
54463
54464 Again, the call to 'f()' is not dependent on template arguments (there
54465are no arguments that depend on the type 'T', and it is also not
54466otherwise specified that the call should be in a dependent context).
54467Thus a global declaration of such a function must be available, since
54468the one in the base class is not visible until instantiation time.  The
54469compiler will consequently produce the following error message:
54470
54471       x.cc: In member function `int Derived<T>::g()':
54472       x.cc:6: error: there are no arguments to `f' that depend on a template
54473          parameter, so a declaration of `f' must be available
54474       x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
54475          allowing the use of an undeclared name is deprecated)
54476
54477 To make the code valid either use 'this->f()', or 'Base<T>::f()'.
54478Using the '-fpermissive' flag will also let the compiler accept the
54479code, by marking all function calls for which no declaration is visible
54480at the time of definition of the template for later lookup at
54481instantiation time, as if it were a dependent call.  We do not recommend
54482using '-fpermissive' to work around invalid code, and it will also only
54483catch cases where functions in base classes are called, not where
54484variables in base classes are used (as in the example above).
54485
54486 Note that some compilers (including G++ versions prior to 3.4) get
54487these examples wrong and accept above code without an error.  Those
54488compilers do not implement two-stage name lookup correctly.
54489
54490   ---------- Footnotes ----------
54491
54492   (1) The C++ standard just uses the term "dependent" for names that
54493depend on the type or value of template parameters.  This shorter term
54494will also be used in the rest of this section.
54495
54496
54497File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
54498
5449913.7.3 Temporaries May Vanish Before You Expect
54500-----------------------------------------------
54501
54502It is dangerous to use pointers or references to _portions_ of a
54503temporary object.  The compiler may very well delete the object before
54504you expect it to, leaving a pointer to garbage.  The most common place
54505where this problem crops up is in classes like string classes,
54506especially ones that define a conversion function to type 'char *' or
54507'const char *'--which is one reason why the standard 'string' class
54508requires you to call the 'c_str' member function.  However, any class
54509that returns a pointer to some internal structure is potentially subject
54510to this problem.
54511
54512 For example, a program may use a function 'strfunc' that returns
54513'string' objects, and another function 'charfunc' that operates on
54514pointers to 'char':
54515
54516     string strfunc ();
54517     void charfunc (const char *);
54518
54519     void
54520     f ()
54521     {
54522       const char *p = strfunc().c_str();
54523       ...
54524       charfunc (p);
54525       ...
54526       charfunc (p);
54527     }
54528
54529In this situation, it may seem reasonable to save a pointer to the C
54530string returned by the 'c_str' member function and use that rather than
54531call 'c_str' repeatedly.  However, the temporary string created by the
54532call to 'strfunc' is destroyed after 'p' is initialized, at which point
54533'p' is left pointing to freed memory.
54534
54535 Code like this may run successfully under some other compilers,
54536particularly obsolete cfront-based compilers that delete temporaries
54537along with normal local variables.  However, the GNU C++ behavior is
54538standard-conforming, so if your program depends on late destruction of
54539temporaries it is not portable.
54540
54541 The safe way to write such code is to give the temporary a name, which
54542forces it to remain until the end of the scope of the name.  For
54543example:
54544
54545     const string& tmp = strfunc ();
54546     charfunc (tmp.c_str ());
54547
54548
54549File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
54550
5455113.7.4 Implicit Copy-Assignment for Virtual Bases
54552-------------------------------------------------
54553
54554When a base class is virtual, only one subobject of the base class
54555belongs to each full object.  Also, the constructors and destructors are
54556invoked only once, and called from the most-derived class.  However,
54557such objects behave unspecified when being assigned.  For example:
54558
54559     struct Base{
54560       char *name;
54561       Base(char *n) : name(strdup(n)){}
54562       Base& operator= (const Base& other){
54563        free (name);
54564        name = strdup (other.name);
54565       }
54566     };
54567
54568     struct A:virtual Base{
54569       int val;
54570       A():Base("A"){}
54571     };
54572
54573     struct B:virtual Base{
54574       int bval;
54575       B():Base("B"){}
54576     };
54577
54578     struct Derived:public A, public B{
54579       Derived():Base("Derived"){}
54580     };
54581
54582     void func(Derived &d1, Derived &d2)
54583     {
54584       d1 = d2;
54585     }
54586
54587 The C++ standard specifies that 'Base::Base' is only called once when
54588constructing or copy-constructing a Derived object.  It is unspecified
54589whether 'Base::operator=' is called more than once when the implicit
54590copy-assignment for Derived objects is invoked (as it is inside 'func'
54591in the example).
54592
54593 G++ implements the "intuitive" algorithm for copy-assignment: assign
54594all direct bases, then assign all members.  In that algorithm, the
54595virtual base subobject can be encountered more than once.  In the
54596example, copying proceeds in the following order: 'val', 'name' (via
54597'strdup'), 'bval', and 'name' again.
54598
54599 If application code relies on copy-assignment, a user-defined
54600copy-assignment operator removes any uncertainties.  With such an
54601operator, the application can define whether and how the virtual base
54602subobject is assigned.
54603
54604
54605File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: C++ Misunderstandings,  Up: Trouble
54606
5460713.8 Certain Changes We Don't Want to Make
54608==========================================
54609
54610This section lists changes that people frequently request, but which we
54611do not make because we think GCC is better without them.
54612
54613   * Checking the number and type of arguments to a function which has
54614     an old-fashioned definition and no prototype.
54615
54616     Such a feature would work only occasionally--only for calls that
54617     appear in the same file as the called function, following the
54618     definition.  The only way to check all calls reliably is to add a
54619     prototype for the function.  But adding a prototype eliminates the
54620     motivation for this feature.  So the feature is not worthwhile.
54621
54622   * Warning about using an expression whose type is signed as a shift
54623     count.
54624
54625     Shift count operands are probably signed more often than unsigned.
54626     Warning about this would cause far more annoyance than good.
54627
54628   * Warning about assigning a signed value to an unsigned variable.
54629
54630     Such assignments must be very common; warning about them would
54631     cause more annoyance than good.
54632
54633   * Warning when a non-void function value is ignored.
54634
54635     C contains many standard functions that return a value that most
54636     programs choose to ignore.  One obvious example is 'printf'.
54637     Warning about this practice only leads the defensive programmer to
54638     clutter programs with dozens of casts to 'void'.  Such casts are
54639     required so frequently that they become visual noise.  Writing
54640     those casts becomes so automatic that they no longer convey useful
54641     information about the intentions of the programmer.  For functions
54642     where the return value should never be ignored, use the
54643     'warn_unused_result' function attribute (*note Function
54644     Attributes::).
54645
54646   * Making '-fshort-enums' the default.
54647
54648     This would cause storage layout to be incompatible with most other
54649     C compilers.  And it doesn't seem very important, given that you
54650     can get the same result in other ways.  The case where it matters
54651     most is when the enumeration-valued object is inside a structure,
54652     and in that case you can specify a field width explicitly.
54653
54654   * Making bit-fields unsigned by default on particular machines where
54655     "the ABI standard" says to do so.
54656
54657     The ISO C standard leaves it up to the implementation whether a
54658     bit-field declared plain 'int' is signed or not.  This in effect
54659     creates two alternative dialects of C.
54660
54661     The GNU C compiler supports both dialects; you can specify the
54662     signed dialect with '-fsigned-bitfields' and the unsigned dialect
54663     with '-funsigned-bitfields'.  However, this leaves open the
54664     question of which dialect to use by default.
54665
54666     Currently, the preferred dialect makes plain bit-fields signed,
54667     because this is simplest.  Since 'int' is the same as 'signed int'
54668     in every other context, it is cleanest for them to be the same in
54669     bit-fields as well.
54670
54671     Some computer manufacturers have published Application Binary
54672     Interface standards which specify that plain bit-fields should be
54673     unsigned.  It is a mistake, however, to say anything about this
54674     issue in an ABI.  This is because the handling of plain bit-fields
54675     distinguishes two dialects of C.  Both dialects are meaningful on
54676     every type of machine.  Whether a particular object file was
54677     compiled using signed bit-fields or unsigned is of no concern to
54678     other object files, even if they access the same bit-fields in the
54679     same data structures.
54680
54681     A given program is written in one or the other of these two
54682     dialects.  The program stands a chance to work on most any machine
54683     if it is compiled with the proper dialect.  It is unlikely to work
54684     at all if compiled with the wrong dialect.
54685
54686     Many users appreciate the GNU C compiler because it provides an
54687     environment that is uniform across machines.  These users would be
54688     inconvenienced if the compiler treated plain bit-fields differently
54689     on certain machines.
54690
54691     Occasionally users write programs intended only for a particular
54692     machine type.  On these occasions, the users would benefit if the
54693     GNU C compiler were to support by default the same dialect as the
54694     other compilers on that machine.  But such applications are rare.
54695     And users writing a program to run on more than one type of machine
54696     cannot possibly benefit from this kind of compatibility.
54697
54698     This is why GCC does and will treat plain bit-fields in the same
54699     fashion on all types of machines (by default).
54700
54701     There are some arguments for making bit-fields unsigned by default
54702     on all machines.  If, for example, this becomes a universal de
54703     facto standard, it would make sense for GCC to go along with it.
54704     This is something to be considered in the future.
54705
54706     (Of course, users strongly concerned about portability should
54707     indicate explicitly in each bit-field whether it is signed or not.
54708     In this way, they write programs which have the same meaning in
54709     both C dialects.)
54710
54711   * Undefining '__STDC__' when '-ansi' is not used.
54712
54713     Currently, GCC defines '__STDC__' unconditionally.  This provides
54714     good results in practice.
54715
54716     Programmers normally use conditionals on '__STDC__' to ask whether
54717     it is safe to use certain features of ISO C, such as function
54718     prototypes or ISO token concatenation.  Since plain 'gcc' supports
54719     all the features of ISO C, the correct answer to these questions is
54720     "yes".
54721
54722     Some users try to use '__STDC__' to check for the availability of
54723     certain library facilities.  This is actually incorrect usage in an
54724     ISO C program, because the ISO C standard says that a conforming
54725     freestanding implementation should define '__STDC__' even though it
54726     does not have the library facilities.  'gcc -ansi -pedantic' is a
54727     conforming freestanding implementation, and it is therefore
54728     required to define '__STDC__', even though it does not come with an
54729     ISO C library.
54730
54731     Sometimes people say that defining '__STDC__' in a compiler that
54732     does not completely conform to the ISO C standard somehow violates
54733     the standard.  This is illogical.  The standard is a standard for
54734     compilers that claim to support ISO C, such as 'gcc -ansi'--not for
54735     other compilers such as plain 'gcc'.  Whatever the ISO C standard
54736     says is relevant to the design of plain 'gcc' without '-ansi' only
54737     for pragmatic reasons, not as a requirement.
54738
54739     GCC normally defines '__STDC__' to be 1, and in addition defines
54740     '__STRICT_ANSI__' if you specify the '-ansi' option, or a '-std'
54741     option for strict conformance to some version of ISO C.  On some
54742     hosts, system include files use a different convention, where
54743     '__STDC__' is normally 0, but is 1 if the user specifies strict
54744     conformance to the C Standard.  GCC follows the host convention
54745     when processing system include files, but when processing user
54746     files it follows the usual GNU C convention.
54747
54748   * Undefining '__STDC__' in C++.
54749
54750     Programs written to compile with C++-to-C translators get the value
54751     of '__STDC__' that goes with the C compiler that is subsequently
54752     used.  These programs must test '__STDC__' to determine what kind
54753     of C preprocessor that compiler uses: whether they should
54754     concatenate tokens in the ISO C fashion or in the traditional
54755     fashion.
54756
54757     These programs work properly with GNU C++ if '__STDC__' is defined.
54758     They would not work otherwise.
54759
54760     In addition, many header files are written to provide prototypes in
54761     ISO C but not in traditional C.  Many of these header files can
54762     work without change in C++ provided '__STDC__' is defined.  If
54763     '__STDC__' is not defined, they will all fail, and will all need to
54764     be changed to test explicitly for C++ as well.
54765
54766   * Deleting "empty" loops.
54767
54768     Historically, GCC has not deleted "empty" loops under the
54769     assumption that the most likely reason you would put one in a
54770     program is to have a delay, so deleting them will not make real
54771     programs run any faster.
54772
54773     However, the rationale here is that optimization of a nonempty loop
54774     cannot produce an empty one.  This held for carefully written C
54775     compiled with less powerful optimizers but is not always the case
54776     for carefully written C++ or with more powerful optimizers.  Thus
54777     GCC will remove operations from loops whenever it can determine
54778     those operations are not externally visible (apart from the time
54779     taken to execute them, of course).  In case the loop can be proved
54780     to be finite, GCC will also remove the loop itself.
54781
54782     Be aware of this when performing timing tests, for instance the
54783     following loop can be completely removed, provided
54784     'some_expression' can provably not change any global state.
54785
54786          {
54787             int sum = 0;
54788             int ix;
54789
54790             for (ix = 0; ix != 10000; ix++)
54791                sum += some_expression;
54792          }
54793
54794     Even though 'sum' is accumulated in the loop, no use is made of
54795     that summation, so the accumulation can be removed.
54796
54797   * Making side effects happen in the same order as in some other
54798     compiler.
54799
54800     It is never safe to depend on the order of evaluation of side
54801     effects.  For example, a function call like this may very well
54802     behave differently from one compiler to another:
54803
54804          void func (int, int);
54805
54806          int i = 2;
54807          func (i++, i++);
54808
54809     There is no guarantee (in either the C or the C++ standard language
54810     definitions) that the increments will be evaluated in any
54811     particular order.  Either increment might happen first.  'func'
54812     might get the arguments '2, 3', or it might get '3, 2', or even '2,
54813     2'.
54814
54815   * Making certain warnings into errors by default.
54816
54817     Some ISO C testsuites report failure when the compiler does not
54818     produce an error message for a certain program.
54819
54820     ISO C requires a "diagnostic" message for certain kinds of invalid
54821     programs, but a warning is defined by GCC to count as a diagnostic.
54822     If GCC produces a warning but not an error, that is correct ISO C
54823     support.  If testsuites call this "failure", they should be run
54824     with the GCC option '-pedantic-errors', which will turn these
54825     warnings into errors.
54826
54827
54828File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
54829
5483013.9 Warning Messages and Error Messages
54831========================================
54832
54833The GNU compiler can produce two kinds of diagnostics: errors and
54834warnings.  Each kind has a different purpose:
54835
54836     "Errors" report problems that make it impossible to compile your
54837     program.  GCC reports errors with the source file name and line
54838     number where the problem is apparent.
54839
54840     "Warnings" report other unusual conditions in your code that _may_
54841     indicate a problem, although compilation can (and does) proceed.
54842     Warning messages also report the source file name and line number,
54843     but include the text 'warning:' to distinguish them from error
54844     messages.
54845
54846 Warnings may indicate danger points where you should check to make sure
54847that your program really does what you intend; or the use of obsolete
54848features; or the use of nonstandard features of GNU C or C++.  Many
54849warnings are issued only if you ask for them, with one of the '-W'
54850options (for instance, '-Wall' requests a variety of useful warnings).
54851
54852 GCC always tries to compile your program if possible; it never
54853gratuitously rejects a program whose meaning is clear merely because
54854(for instance) it fails to conform to a standard.  In some cases,
54855however, the C and C++ standards specify that certain extensions are
54856forbidden, and a diagnostic _must_ be issued by a conforming compiler.
54857The '-pedantic' option tells GCC to issue warnings in such cases;
54858'-pedantic-errors' says to make them errors instead.  This does not mean
54859that _all_ non-ISO constructs get warnings or errors.
54860
54861 *Note Options to Request or Suppress Warnings: Warning Options, for
54862more detail on these and related command-line options.
54863
54864
54865File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
54866
5486714 Reporting Bugs
54868*****************
54869
54870Your bug reports play an essential role in making GCC reliable.
54871
54872 When you encounter a problem, the first thing to do is to see if it is
54873already known.  *Note Trouble::.  If it isn't known, then you should
54874report the problem.
54875
54876* Menu:
54877
54878* Criteria:  Bug Criteria.   Have you really found a bug?
54879* Reporting: Bug Reporting.  How to report a bug effectively.
54880
54881
54882File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
54883
5488414.1 Have You Found a Bug?
54885==========================
54886
54887If you are not sure whether you have found a bug, here are some
54888guidelines:
54889
54890   * If the compiler gets a fatal signal, for any input whatever, that
54891     is a compiler bug.  Reliable compilers never crash.
54892
54893   * If the compiler produces invalid assembly code, for any input
54894     whatever (except an 'asm' statement), that is a compiler bug,
54895     unless the compiler reports errors (not just warnings) which would
54896     ordinarily prevent the assembler from being run.
54897
54898   * If the compiler produces valid assembly code that does not
54899     correctly execute the input source code, that is a compiler bug.
54900
54901     However, you must double-check to make sure, because you may have a
54902     program whose behavior is undefined, which happened by chance to
54903     give the desired results with another C or C++ compiler.
54904
54905     For example, in many nonoptimizing compilers, you can write 'x;' at
54906     the end of a function instead of 'return x;', with the same
54907     results.  But the value of the function is undefined if 'return' is
54908     omitted; it is not a bug when GCC produces different results.
54909
54910     Problems often result from expressions with two increment
54911     operators, as in 'f (*p++, *p++)'.  Your previous compiler might
54912     have interpreted that expression the way you intended; GCC might
54913     interpret it another way.  Neither compiler is wrong.  The bug is
54914     in your code.
54915
54916     After you have localized the error to a single source line, it
54917     should be easy to check for these things.  If your program is
54918     correct and well defined, you have found a compiler bug.
54919
54920   * If the compiler produces an error message for valid input, that is
54921     a compiler bug.
54922
54923   * If the compiler does not produce an error message for invalid
54924     input, that is a compiler bug.  However, you should note that your
54925     idea of "invalid input" might be someone else's idea of "an
54926     extension" or "support for traditional practice".
54927
54928   * If you are an experienced user of one of the languages GCC
54929     supports, your suggestions for improvement of GCC are welcome in
54930     any case.
54931
54932
54933File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
54934
5493514.2 How and Where to Report Bugs
54936=================================
54937
54938Bugs should be reported to the bug database at
54939<https://gcc.gnu.org/bugs/>.
54940
54941
54942File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
54943
5494415 How To Get Help with GCC
54945***************************
54946
54947If you need help installing, using or changing GCC, there are two ways
54948to find it:
54949
54950   * Send a message to a suitable network mailing list.  First try
54951     <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
54952     that brings no response, try <gcc@gcc.gnu.org>.  For help changing
54953     GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
54954     GCC, please report it following the instructions at *note Bug
54955     Reporting::.
54956
54957   * Look in the service directory for someone who might help you for a
54958     fee.  The service directory is found at
54959     <http://www.fsf.org/resources/service>.
54960
54961 For further information, see <http://gcc.gnu.org/faq.html#support>.
54962
54963
54964File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
54965
5496616 Contributing to GCC Development
54967**********************************
54968
54969If you would like to help pretest GCC releases to assure they work well,
54970current development sources are available via Git (see
54971<http://gcc.gnu.org/git.html>).  Source and binary snapshots are also
54972available for FTP; see <http://gcc.gnu.org/snapshots.html>.
54973
54974 If you would like to work on improvements to GCC, please read the
54975advice at these URLs:
54976
54977     <http://gcc.gnu.org/contribute.html>
54978     <http://gcc.gnu.org/contributewhy.html>
54979
54980for information on how to make useful contributions and avoid
54981duplication of effort.  Suggested projects are listed at
54982<http://gcc.gnu.org/projects/>.
54983
54984
54985File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
54986
54987Funding Free Software
54988*********************
54989
54990If you want to have more free software a few years from now, it makes
54991sense for you to help encourage people to contribute funds for its
54992development.  The most effective approach known is to encourage
54993commercial redistributors to donate.
54994
54995 Users of free software systems can boost the pace of development by
54996encouraging for-a-fee distributors to donate part of their selling price
54997to free software developers--the Free Software Foundation, and others.
54998
54999 The way to convince distributors to do this is to demand it and expect
55000it from them.  So when you compare distributors, judge them partly by
55001how much they give to free software development.  Show distributors they
55002must compete to be the one who gives the most.
55003
55004 To make this approach work, you must insist on numbers that you can
55005compare, such as, "We will donate ten dollars to the Frobnitz project
55006for each disk sold."  Don't be satisfied with a vague promise, such as
55007"A portion of the profits are donated," since it doesn't give a basis
55008for comparison.
55009
55010 Even a precise fraction "of the profits from this disk" is not very
55011meaningful, since creative accounting and unrelated business decisions
55012can greatly alter what fraction of the sales price counts as profit.  If
55013the price you pay is $50, ten percent of the profit is probably less
55014than a dollar; it might be a few cents, or nothing at all.
55015
55016 Some redistributors do development work themselves.  This is useful
55017too; but to keep everyone honest, you need to inquire how much they do,
55018and what kind.  Some kinds of development make much more long-term
55019difference than others.  For example, maintaining a separate version of
55020a program contributes very little; maintaining the standard version of a
55021program for the whole community contributes much.  Easy new ports
55022contribute little, since someone else would surely do them; difficult
55023ports such as adding a new CPU to the GNU Compiler Collection contribute
55024more; major new features or packages contribute the most.
55025
55026 By establishing the idea that supporting further development is "the
55027proper thing to do" when distributing free software for a fee, we can
55028assure a steady flow of resources into making more free software.
55029
55030     Copyright (C) 1994 Free Software Foundation, Inc.
55031     Verbatim copying and redistribution of this section is permitted
55032     without royalty; alteration is not permitted.
55033
55034
55035File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
55036
55037The GNU Project and GNU/Linux
55038*****************************
55039
55040The GNU Project was launched in 1984 to develop a complete Unix-like
55041operating system which is free software: the GNU system.  (GNU is a
55042recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
55043Variants of the GNU operating system, which use the kernel Linux, are
55044now widely used; though these systems are often referred to as "Linux",
55045they are more accurately called GNU/Linux systems.
55046
55047 For more information, see:
55048     <http://www.gnu.org/>
55049     <http://www.gnu.org/gnu/linux-and-gnu.html>
55050
55051
55052File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
55053
55054GNU General Public License
55055**************************
55056
55057                        Version 3, 29 June 2007
55058
55059     Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
55060
55061     Everyone is permitted to copy and distribute verbatim copies of this
55062     license document, but changing it is not allowed.
55063
55064Preamble
55065========
55066
55067The GNU General Public License is a free, copyleft license for software
55068and other kinds of works.
55069
55070 The licenses for most software and other practical works are designed
55071to take away your freedom to share and change the works.  By contrast,
55072the GNU General Public License is intended to guarantee your freedom to
55073share and change all versions of a program-to make sure it remains free
55074software for all its users.  We, the Free Software Foundation, use the
55075GNU General Public License for most of our software; it applies also to
55076any other work released this way by its authors.  You can apply it to
55077your programs, too.
55078
55079 When we speak of free software, we are referring to freedom, not price.
55080Our General Public Licenses are designed to make sure that you have the
55081freedom to distribute copies of free software (and charge for them if
55082you wish), that you receive source code or can get it if you want it,
55083that you can change the software or use pieces of it in new free
55084programs, and that you know you can do these things.
55085
55086 To protect your rights, we need to prevent others from denying you
55087these rights or asking you to surrender the rights.  Therefore, you have
55088certain responsibilities if you distribute copies of the software, or if
55089you modify it: responsibilities to respect the freedom of others.
55090
55091 For example, if you distribute copies of such a program, whether gratis
55092or for a fee, you must pass on to the recipients the same freedoms that
55093you received.  You must make sure that they, too, receive or can get the
55094source code.  And you must show them these terms so they know their
55095rights.
55096
55097 Developers that use the GNU GPL protect your rights with two steps: (1)
55098assert copyright on the software, and (2) offer you this License giving
55099you legal permission to copy, distribute and/or modify it.
55100
55101 For the developers' and authors' protection, the GPL clearly explains
55102that there is no warranty for this free software.  For both users' and
55103authors' sake, the GPL requires that modified versions be marked as
55104changed, so that their problems will not be attributed erroneously to
55105authors of previous versions.
55106
55107 Some devices are designed to deny users access to install or run
55108modified versions of the software inside them, although the manufacturer
55109can do so.  This is fundamentally incompatible with the aim of
55110protecting users' freedom to change the software.  The systematic
55111pattern of such abuse occurs in the area of products for individuals to
55112use, which is precisely where it is most unacceptable.  Therefore, we
55113have designed this version of the GPL to prohibit the practice for those
55114products.  If such problems arise substantially in other domains, we
55115stand ready to extend this provision to those domains in future versions
55116of the GPL, as needed to protect the freedom of users.
55117
55118 Finally, every program is threatened constantly by software patents.
55119States should not allow patents to restrict development and use of
55120software on general-purpose computers, but in those that do, we wish to
55121avoid the special danger that patents applied to a free program could
55122make it effectively proprietary.  To prevent this, the GPL assures that
55123patents cannot be used to render the program non-free.
55124
55125 The precise terms and conditions for copying, distribution and
55126modification follow.
55127
55128TERMS AND CONDITIONS
55129====================
55130
55131  0. Definitions.
55132
55133     "This License" refers to version 3 of the GNU General Public
55134     License.
55135
55136     "Copyright" also means copyright-like laws that apply to other
55137     kinds of works, such as semiconductor masks.
55138
55139     "The Program" refers to any copyrightable work licensed under this
55140     License.  Each licensee is addressed as "you".  "Licensees" and
55141     "recipients" may be individuals or organizations.
55142
55143     To "modify" a work means to copy from or adapt all or part of the
55144     work in a fashion requiring copyright permission, other than the
55145     making of an exact copy.  The resulting work is called a "modified
55146     version" of the earlier work or a work "based on" the earlier work.
55147
55148     A "covered work" means either the unmodified Program or a work
55149     based on the Program.
55150
55151     To "propagate" a work means to do anything with it that, without
55152     permission, would make you directly or secondarily liable for
55153     infringement under applicable copyright law, except executing it on
55154     a computer or modifying a private copy.  Propagation includes
55155     copying, distribution (with or without modification), making
55156     available to the public, and in some countries other activities as
55157     well.
55158
55159     To "convey" a work means any kind of propagation that enables other
55160     parties to make or receive copies.  Mere interaction with a user
55161     through a computer network, with no transfer of a copy, is not
55162     conveying.
55163
55164     An interactive user interface displays "Appropriate Legal Notices"
55165     to the extent that it includes a convenient and prominently visible
55166     feature that (1) displays an appropriate copyright notice, and (2)
55167     tells the user that there is no warranty for the work (except to
55168     the extent that warranties are provided), that licensees may convey
55169     the work under this License, and how to view a copy of this
55170     License.  If the interface presents a list of user commands or
55171     options, such as a menu, a prominent item in the list meets this
55172     criterion.
55173
55174  1. Source Code.
55175
55176     The "source code" for a work means the preferred form of the work
55177     for making modifications to it.  "Object code" means any non-source
55178     form of a work.
55179
55180     A "Standard Interface" means an interface that either is an
55181     official standard defined by a recognized standards body, or, in
55182     the case of interfaces specified for a particular programming
55183     language, one that is widely used among developers working in that
55184     language.
55185
55186     The "System Libraries" of an executable work include anything,
55187     other than the work as a whole, that (a) is included in the normal
55188     form of packaging a Major Component, but which is not part of that
55189     Major Component, and (b) serves only to enable use of the work with
55190     that Major Component, or to implement a Standard Interface for
55191     which an implementation is available to the public in source code
55192     form.  A "Major Component", in this context, means a major
55193     essential component (kernel, window system, and so on) of the
55194     specific operating system (if any) on which the executable work
55195     runs, or a compiler used to produce the work, or an object code
55196     interpreter used to run it.
55197
55198     The "Corresponding Source" for a work in object code form means all
55199     the source code needed to generate, install, and (for an executable
55200     work) run the object code and to modify the work, including scripts
55201     to control those activities.  However, it does not include the
55202     work's System Libraries, or general-purpose tools or generally
55203     available free programs which are used unmodified in performing
55204     those activities but which are not part of the work.  For example,
55205     Corresponding Source includes interface definition files associated
55206     with source files for the work, and the source code for shared
55207     libraries and dynamically linked subprograms that the work is
55208     specifically designed to require, such as by intimate data
55209     communication or control flow between those subprograms and other
55210     parts of the work.
55211
55212     The Corresponding Source need not include anything that users can
55213     regenerate automatically from other parts of the Corresponding
55214     Source.
55215
55216     The Corresponding Source for a work in source code form is that
55217     same work.
55218
55219  2. Basic Permissions.
55220
55221     All rights granted under this License are granted for the term of
55222     copyright on the Program, and are irrevocable provided the stated
55223     conditions are met.  This License explicitly affirms your unlimited
55224     permission to run the unmodified Program.  The output from running
55225     a covered work is covered by this License only if the output, given
55226     its content, constitutes a covered work.  This License acknowledges
55227     your rights of fair use or other equivalent, as provided by
55228     copyright law.
55229
55230     You may make, run and propagate covered works that you do not
55231     convey, without conditions so long as your license otherwise
55232     remains in force.  You may convey covered works to others for the
55233     sole purpose of having them make modifications exclusively for you,
55234     or provide you with facilities for running those works, provided
55235     that you comply with the terms of this License in conveying all
55236     material for which you do not control copyright.  Those thus making
55237     or running the covered works for you must do so exclusively on your
55238     behalf, under your direction and control, on terms that prohibit
55239     them from making any copies of your copyrighted material outside
55240     their relationship with you.
55241
55242     Conveying under any other circumstances is permitted solely under
55243     the conditions stated below.  Sublicensing is not allowed; section
55244     10 makes it unnecessary.
55245
55246  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
55247
55248     No covered work shall be deemed part of an effective technological
55249     measure under any applicable law fulfilling obligations under
55250     article 11 of the WIPO copyright treaty adopted on 20 December
55251     1996, or similar laws prohibiting or restricting circumvention of
55252     such measures.
55253
55254     When you convey a covered work, you waive any legal power to forbid
55255     circumvention of technological measures to the extent such
55256     circumvention is effected by exercising rights under this License
55257     with respect to the covered work, and you disclaim any intention to
55258     limit operation or modification of the work as a means of
55259     enforcing, against the work's users, your or third parties' legal
55260     rights to forbid circumvention of technological measures.
55261
55262  4. Conveying Verbatim Copies.
55263
55264     You may convey verbatim copies of the Program's source code as you
55265     receive it, in any medium, provided that you conspicuously and
55266     appropriately publish on each copy an appropriate copyright notice;
55267     keep intact all notices stating that this License and any
55268     non-permissive terms added in accord with section 7 apply to the
55269     code; keep intact all notices of the absence of any warranty; and
55270     give all recipients a copy of this License along with the Program.
55271
55272     You may charge any price or no price for each copy that you convey,
55273     and you may offer support or warranty protection for a fee.
55274
55275  5. Conveying Modified Source Versions.
55276
55277     You may convey a work based on the Program, or the modifications to
55278     produce it from the Program, in the form of source code under the
55279     terms of section 4, provided that you also meet all of these
55280     conditions:
55281
55282       a. The work must carry prominent notices stating that you
55283          modified it, and giving a relevant date.
55284
55285       b. The work must carry prominent notices stating that it is
55286          released under this License and any conditions added under
55287          section 7.  This requirement modifies the requirement in
55288          section 4 to "keep intact all notices".
55289
55290       c. You must license the entire work, as a whole, under this
55291          License to anyone who comes into possession of a copy.  This
55292          License will therefore apply, along with any applicable
55293          section 7 additional terms, to the whole of the work, and all
55294          its parts, regardless of how they are packaged.  This License
55295          gives no permission to license the work in any other way, but
55296          it does not invalidate such permission if you have separately
55297          received it.
55298
55299       d. If the work has interactive user interfaces, each must display
55300          Appropriate Legal Notices; however, if the Program has
55301          interactive interfaces that do not display Appropriate Legal
55302          Notices, your work need not make them do so.
55303
55304     A compilation of a covered work with other separate and independent
55305     works, which are not by their nature extensions of the covered
55306     work, and which are not combined with it such as to form a larger
55307     program, in or on a volume of a storage or distribution medium, is
55308     called an "aggregate" if the compilation and its resulting
55309     copyright are not used to limit the access or legal rights of the
55310     compilation's users beyond what the individual works permit.
55311     Inclusion of a covered work in an aggregate does not cause this
55312     License to apply to the other parts of the aggregate.
55313
55314  6. Conveying Non-Source Forms.
55315
55316     You may convey a covered work in object code form under the terms
55317     of sections 4 and 5, provided that you also convey the
55318     machine-readable Corresponding Source under the terms of this
55319     License, in one of these ways:
55320
55321       a. Convey the object code in, or embodied in, a physical product
55322          (including a physical distribution medium), accompanied by the
55323          Corresponding Source fixed on a durable physical medium
55324          customarily used for software interchange.
55325
55326       b. Convey the object code in, or embodied in, a physical product
55327          (including a physical distribution medium), accompanied by a
55328          written offer, valid for at least three years and valid for as
55329          long as you offer spare parts or customer support for that
55330          product model, to give anyone who possesses the object code
55331          either (1) a copy of the Corresponding Source for all the
55332          software in the product that is covered by this License, on a
55333          durable physical medium customarily used for software
55334          interchange, for a price no more than your reasonable cost of
55335          physically performing this conveying of source, or (2) access
55336          to copy the Corresponding Source from a network server at no
55337          charge.
55338
55339       c. Convey individual copies of the object code with a copy of the
55340          written offer to provide the Corresponding Source.  This
55341          alternative is allowed only occasionally and noncommercially,
55342          and only if you received the object code with such an offer,
55343          in accord with subsection 6b.
55344
55345       d. Convey the object code by offering access from a designated
55346          place (gratis or for a charge), and offer equivalent access to
55347          the Corresponding Source in the same way through the same
55348          place at no further charge.  You need not require recipients
55349          to copy the Corresponding Source along with the object code.
55350          If the place to copy the object code is a network server, the
55351          Corresponding Source may be on a different server (operated by
55352          you or a third party) that supports equivalent copying
55353          facilities, provided you maintain clear directions next to the
55354          object code saying where to find the Corresponding Source.
55355          Regardless of what server hosts the Corresponding Source, you
55356          remain obligated to ensure that it is available for as long as
55357          needed to satisfy these requirements.
55358
55359       e. Convey the object code using peer-to-peer transmission,
55360          provided you inform other peers where the object code and
55361          Corresponding Source of the work are being offered to the
55362          general public at no charge under subsection 6d.
55363
55364     A separable portion of the object code, whose source code is
55365     excluded from the Corresponding Source as a System Library, need
55366     not be included in conveying the object code work.
55367
55368     A "User Product" is either (1) a "consumer product", which means
55369     any tangible personal property which is normally used for personal,
55370     family, or household purposes, or (2) anything designed or sold for
55371     incorporation into a dwelling.  In determining whether a product is
55372     a consumer product, doubtful cases shall be resolved in favor of
55373     coverage.  For a particular product received by a particular user,
55374     "normally used" refers to a typical or common use of that class of
55375     product, regardless of the status of the particular user or of the
55376     way in which the particular user actually uses, or expects or is
55377     expected to use, the product.  A product is a consumer product
55378     regardless of whether the product has substantial commercial,
55379     industrial or non-consumer uses, unless such uses represent the
55380     only significant mode of use of the product.
55381
55382     "Installation Information" for a User Product means any methods,
55383     procedures, authorization keys, or other information required to
55384     install and execute modified versions of a covered work in that
55385     User Product from a modified version of its Corresponding Source.
55386     The information must suffice to ensure that the continued
55387     functioning of the modified object code is in no case prevented or
55388     interfered with solely because modification has been made.
55389
55390     If you convey an object code work under this section in, or with,
55391     or specifically for use in, a User Product, and the conveying
55392     occurs as part of a transaction in which the right of possession
55393     and use of the User Product is transferred to the recipient in
55394     perpetuity or for a fixed term (regardless of how the transaction
55395     is characterized), the Corresponding Source conveyed under this
55396     section must be accompanied by the Installation Information.  But
55397     this requirement does not apply if neither you nor any third party
55398     retains the ability to install modified object code on the User
55399     Product (for example, the work has been installed in ROM).
55400
55401     The requirement to provide Installation Information does not
55402     include a requirement to continue to provide support service,
55403     warranty, or updates for a work that has been modified or installed
55404     by the recipient, or for the User Product in which it has been
55405     modified or installed.  Access to a network may be denied when the
55406     modification itself materially and adversely affects the operation
55407     of the network or violates the rules and protocols for
55408     communication across the network.
55409
55410     Corresponding Source conveyed, and Installation Information
55411     provided, in accord with this section must be in a format that is
55412     publicly documented (and with an implementation available to the
55413     public in source code form), and must require no special password
55414     or key for unpacking, reading or copying.
55415
55416  7. Additional Terms.
55417
55418     "Additional permissions" are terms that supplement the terms of
55419     this License by making exceptions from one or more of its
55420     conditions.  Additional permissions that are applicable to the
55421     entire Program shall be treated as though they were included in
55422     this License, to the extent that they are valid under applicable
55423     law.  If additional permissions apply only to part of the Program,
55424     that part may be used separately under those permissions, but the
55425     entire Program remains governed by this License without regard to
55426     the additional permissions.
55427
55428     When you convey a copy of a covered work, you may at your option
55429     remove any additional permissions from that copy, or from any part
55430     of it.  (Additional permissions may be written to require their own
55431     removal in certain cases when you modify the work.)  You may place
55432     additional permissions on material, added by you to a covered work,
55433     for which you have or can give appropriate copyright permission.
55434
55435     Notwithstanding any other provision of this License, for material
55436     you add to a covered work, you may (if authorized by the copyright
55437     holders of that material) supplement the terms of this License with
55438     terms:
55439
55440       a. Disclaiming warranty or limiting liability differently from
55441          the terms of sections 15 and 16 of this License; or
55442
55443       b. Requiring preservation of specified reasonable legal notices
55444          or author attributions in that material or in the Appropriate
55445          Legal Notices displayed by works containing it; or
55446
55447       c. Prohibiting misrepresentation of the origin of that material,
55448          or requiring that modified versions of such material be marked
55449          in reasonable ways as different from the original version; or
55450
55451       d. Limiting the use for publicity purposes of names of licensors
55452          or authors of the material; or
55453
55454       e. Declining to grant rights under trademark law for use of some
55455          trade names, trademarks, or service marks; or
55456
55457       f. Requiring indemnification of licensors and authors of that
55458          material by anyone who conveys the material (or modified
55459          versions of it) with contractual assumptions of liability to
55460          the recipient, for any liability that these contractual
55461          assumptions directly impose on those licensors and authors.
55462
55463     All other non-permissive additional terms are considered "further
55464     restrictions" within the meaning of section 10.  If the Program as
55465     you received it, or any part of it, contains a notice stating that
55466     it is governed by this License along with a term that is a further
55467     restriction, you may remove that term.  If a license document
55468     contains a further restriction but permits relicensing or conveying
55469     under this License, you may add to a covered work material governed
55470     by the terms of that license document, provided that the further
55471     restriction does not survive such relicensing or conveying.
55472
55473     If you add terms to a covered work in accord with this section, you
55474     must place, in the relevant source files, a statement of the
55475     additional terms that apply to those files, or a notice indicating
55476     where to find the applicable terms.
55477
55478     Additional terms, permissive or non-permissive, may be stated in
55479     the form of a separately written license, or stated as exceptions;
55480     the above requirements apply either way.
55481
55482  8. Termination.
55483
55484     You may not propagate or modify a covered work except as expressly
55485     provided under this License.  Any attempt otherwise to propagate or
55486     modify it is void, and will automatically terminate your rights
55487     under this License (including any patent licenses granted under the
55488     third paragraph of section 11).
55489
55490     However, if you cease all violation of this License, then your
55491     license from a particular copyright holder is reinstated (a)
55492     provisionally, unless and until the copyright holder explicitly and
55493     finally terminates your license, and (b) permanently, if the
55494     copyright holder fails to notify you of the violation by some
55495     reasonable means prior to 60 days after the cessation.
55496
55497     Moreover, your license from a particular copyright holder is
55498     reinstated permanently if the copyright holder notifies you of the
55499     violation by some reasonable means, this is the first time you have
55500     received notice of violation of this License (for any work) from
55501     that copyright holder, and you cure the violation prior to 30 days
55502     after your receipt of the notice.
55503
55504     Termination of your rights under this section does not terminate
55505     the licenses of parties who have received copies or rights from you
55506     under this License.  If your rights have been terminated and not
55507     permanently reinstated, you do not qualify to receive new licenses
55508     for the same material under section 10.
55509
55510  9. Acceptance Not Required for Having Copies.
55511
55512     You are not required to accept this License in order to receive or
55513     run a copy of the Program.  Ancillary propagation of a covered work
55514     occurring solely as a consequence of using peer-to-peer
55515     transmission to receive a copy likewise does not require
55516     acceptance.  However, nothing other than this License grants you
55517     permission to propagate or modify any covered work.  These actions
55518     infringe copyright if you do not accept this License.  Therefore,
55519     by modifying or propagating a covered work, you indicate your
55520     acceptance of this License to do so.
55521
55522  10. Automatic Licensing of Downstream Recipients.
55523
55524     Each time you convey a covered work, the recipient automatically
55525     receives a license from the original licensors, to run, modify and
55526     propagate that work, subject to this License.  You are not
55527     responsible for enforcing compliance by third parties with this
55528     License.
55529
55530     An "entity transaction" is a transaction transferring control of an
55531     organization, or substantially all assets of one, or subdividing an
55532     organization, or merging organizations.  If propagation of a
55533     covered work results from an entity transaction, each party to that
55534     transaction who receives a copy of the work also receives whatever
55535     licenses to the work the party's predecessor in interest had or
55536     could give under the previous paragraph, plus a right to possession
55537     of the Corresponding Source of the work from the predecessor in
55538     interest, if the predecessor has it or can get it with reasonable
55539     efforts.
55540
55541     You may not impose any further restrictions on the exercise of the
55542     rights granted or affirmed under this License.  For example, you
55543     may not impose a license fee, royalty, or other charge for exercise
55544     of rights granted under this License, and you may not initiate
55545     litigation (including a cross-claim or counterclaim in a lawsuit)
55546     alleging that any patent claim is infringed by making, using,
55547     selling, offering for sale, or importing the Program or any portion
55548     of it.
55549
55550  11. Patents.
55551
55552     A "contributor" is a copyright holder who authorizes use under this
55553     License of the Program or a work on which the Program is based.
55554     The work thus licensed is called the contributor's "contributor
55555     version".
55556
55557     A contributor's "essential patent claims" are all patent claims
55558     owned or controlled by the contributor, whether already acquired or
55559     hereafter acquired, that would be infringed by some manner,
55560     permitted by this License, of making, using, or selling its
55561     contributor version, but do not include claims that would be
55562     infringed only as a consequence of further modification of the
55563     contributor version.  For purposes of this definition, "control"
55564     includes the right to grant patent sublicenses in a manner
55565     consistent with the requirements of this License.
55566
55567     Each contributor grants you a non-exclusive, worldwide,
55568     royalty-free patent license under the contributor's essential
55569     patent claims, to make, use, sell, offer for sale, import and
55570     otherwise run, modify and propagate the contents of its contributor
55571     version.
55572
55573     In the following three paragraphs, a "patent license" is any
55574     express agreement or commitment, however denominated, not to
55575     enforce a patent (such as an express permission to practice a
55576     patent or covenant not to sue for patent infringement).  To "grant"
55577     such a patent license to a party means to make such an agreement or
55578     commitment not to enforce a patent against the party.
55579
55580     If you convey a covered work, knowingly relying on a patent
55581     license, and the Corresponding Source of the work is not available
55582     for anyone to copy, free of charge and under the terms of this
55583     License, through a publicly available network server or other
55584     readily accessible means, then you must either (1) cause the
55585     Corresponding Source to be so available, or (2) arrange to deprive
55586     yourself of the benefit of the patent license for this particular
55587     work, or (3) arrange, in a manner consistent with the requirements
55588     of this License, to extend the patent license to downstream
55589     recipients.  "Knowingly relying" means you have actual knowledge
55590     that, but for the patent license, your conveying the covered work
55591     in a country, or your recipient's use of the covered work in a
55592     country, would infringe one or more identifiable patents in that
55593     country that you have reason to believe are valid.
55594
55595     If, pursuant to or in connection with a single transaction or
55596     arrangement, you convey, or propagate by procuring conveyance of, a
55597     covered work, and grant a patent license to some of the parties
55598     receiving the covered work authorizing them to use, propagate,
55599     modify or convey a specific copy of the covered work, then the
55600     patent license you grant is automatically extended to all
55601     recipients of the covered work and works based on it.
55602
55603     A patent license is "discriminatory" if it does not include within
55604     the scope of its coverage, prohibits the exercise of, or is
55605     conditioned on the non-exercise of one or more of the rights that
55606     are specifically granted under this License.  You may not convey a
55607     covered work if you are a party to an arrangement with a third
55608     party that is in the business of distributing software, under which
55609     you make payment to the third party based on the extent of your
55610     activity of conveying the work, and under which the third party
55611     grants, to any of the parties who would receive the covered work
55612     from you, a discriminatory patent license (a) in connection with
55613     copies of the covered work conveyed by you (or copies made from
55614     those copies), or (b) primarily for and in connection with specific
55615     products or compilations that contain the covered work, unless you
55616     entered into that arrangement, or that patent license was granted,
55617     prior to 28 March 2007.
55618
55619     Nothing in this License shall be construed as excluding or limiting
55620     any implied license or other defenses to infringement that may
55621     otherwise be available to you under applicable patent law.
55622
55623  12. No Surrender of Others' Freedom.
55624
55625     If conditions are imposed on you (whether by court order, agreement
55626     or otherwise) that contradict the conditions of this License, they
55627     do not excuse you from the conditions of this License.  If you
55628     cannot convey a covered work so as to satisfy simultaneously your
55629     obligations under this License and any other pertinent obligations,
55630     then as a consequence you may not convey it at all.  For example,
55631     if you agree to terms that obligate you to collect a royalty for
55632     further conveying from those to whom you convey the Program, the
55633     only way you could satisfy both those terms and this License would
55634     be to refrain entirely from conveying the Program.
55635
55636  13. Use with the GNU Affero General Public License.
55637
55638     Notwithstanding any other provision of this License, you have
55639     permission to link or combine any covered work with a work licensed
55640     under version 3 of the GNU Affero General Public License into a
55641     single combined work, and to convey the resulting work.  The terms
55642     of this License will continue to apply to the part which is the
55643     covered work, but the special requirements of the GNU Affero
55644     General Public License, section 13, concerning interaction through
55645     a network will apply to the combination as such.
55646
55647  14. Revised Versions of this License.
55648
55649     The Free Software Foundation may publish revised and/or new
55650     versions of the GNU General Public License from time to time.  Such
55651     new versions will be similar in spirit to the present version, but
55652     may differ in detail to address new problems or concerns.
55653
55654     Each version is given a distinguishing version number.  If the
55655     Program specifies that a certain numbered version of the GNU
55656     General Public License "or any later version" applies to it, you
55657     have the option of following the terms and conditions either of
55658     that numbered version or of any later version published by the Free
55659     Software Foundation.  If the Program does not specify a version
55660     number of the GNU General Public License, you may choose any
55661     version ever published by the Free Software Foundation.
55662
55663     If the Program specifies that a proxy can decide which future
55664     versions of the GNU General Public License can be used, that
55665     proxy's public statement of acceptance of a version permanently
55666     authorizes you to choose that version for the Program.
55667
55668     Later license versions may give you additional or different
55669     permissions.  However, no additional obligations are imposed on any
55670     author or copyright holder as a result of your choosing to follow a
55671     later version.
55672
55673  15. Disclaimer of Warranty.
55674
55675     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
55676     APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
55677     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
55678     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
55679     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
55680     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
55681     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
55682     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
55683     NECESSARY SERVICING, REPAIR OR CORRECTION.
55684
55685  16. Limitation of Liability.
55686
55687     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
55688     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
55689     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
55690     DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
55691     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
55692     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
55693     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
55694     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
55695     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
55696     THE POSSIBILITY OF SUCH DAMAGES.
55697
55698  17. Interpretation of Sections 15 and 16.
55699
55700     If the disclaimer of warranty and limitation of liability provided
55701     above cannot be given local legal effect according to their terms,
55702     reviewing courts shall apply local law that most closely
55703     approximates an absolute waiver of all civil liability in
55704     connection with the Program, unless a warranty or assumption of
55705     liability accompanies a copy of the Program in return for a fee.
55706
55707END OF TERMS AND CONDITIONS
55708===========================
55709
55710How to Apply These Terms to Your New Programs
55711=============================================
55712
55713If you develop a new program, and you want it to be of the greatest
55714possible use to the public, the best way to achieve this is to make it
55715free software which everyone can redistribute and change under these
55716terms.
55717
55718 To do so, attach the following notices to the program.  It is safest to
55719attach them to the start of each source file to most effectively state
55720the exclusion of warranty; and each file should have at least the
55721"copyright" line and a pointer to where the full notice is found.
55722
55723     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
55724     Copyright (C) YEAR NAME OF AUTHOR
55725
55726     This program is free software: you can redistribute it and/or modify
55727     it under the terms of the GNU General Public License as published by
55728     the Free Software Foundation, either version 3 of the License, or (at
55729     your option) any later version.
55730
55731     This program is distributed in the hope that it will be useful, but
55732     WITHOUT ANY WARRANTY; without even the implied warranty of
55733     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
55734     General Public License for more details.
55735
55736     You should have received a copy of the GNU General Public License
55737     along with this program.  If not, see <http://www.gnu.org/licenses/>.
55738
55739 Also add information on how to contact you by electronic and paper
55740mail.
55741
55742 If the program does terminal interaction, make it output a short notice
55743like this when it starts in an interactive mode:
55744
55745     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
55746     This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
55747     This is free software, and you are welcome to redistribute it
55748     under certain conditions; type 'show c' for details.
55749
55750 The hypothetical commands 'show w' and 'show c' should show the
55751appropriate parts of the General Public License.  Of course, your
55752program's commands might be different; for a GUI interface, you would
55753use an "about box".
55754
55755 You should also get your employer (if you work as a programmer) or
55756school, if any, to sign a "copyright disclaimer" for the program, if
55757necessary.  For more information on this, and how to apply and follow
55758the GNU GPL, see <http://www.gnu.org/licenses/>.
55759
55760 The GNU General Public License does not permit incorporating your
55761program into proprietary programs.  If your program is a subroutine
55762library, you may consider it more useful to permit linking proprietary
55763applications with the library.  If this is what you want to do, use the
55764GNU Lesser General Public License instead of this License.  But first,
55765please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
55766
55767
55768File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
55769
55770GNU Free Documentation License
55771******************************
55772
55773                     Version 1.3, 3 November 2008
55774
55775     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
55776     <http://fsf.org/>
55777
55778     Everyone is permitted to copy and distribute verbatim copies
55779     of this license document, but changing it is not allowed.
55780
55781  0. PREAMBLE
55782
55783     The purpose of this License is to make a manual, textbook, or other
55784     functional and useful document "free" in the sense of freedom: to
55785     assure everyone the effective freedom to copy and redistribute it,
55786     with or without modifying it, either commercially or
55787     noncommercially.  Secondarily, this License preserves for the
55788     author and publisher a way to get credit for their work, while not
55789     being considered responsible for modifications made by others.
55790
55791     This License is a kind of "copyleft", which means that derivative
55792     works of the document must themselves be free in the same sense.
55793     It complements the GNU General Public License, which is a copyleft
55794     license designed for free software.
55795
55796     We have designed this License in order to use it for manuals for
55797     free software, because free software needs free documentation: a
55798     free program should come with manuals providing the same freedoms
55799     that the software does.  But this License is not limited to
55800     software manuals; it can be used for any textual work, regardless
55801     of subject matter or whether it is published as a printed book.  We
55802     recommend this License principally for works whose purpose is
55803     instruction or reference.
55804
55805  1. APPLICABILITY AND DEFINITIONS
55806
55807     This License applies to any manual or other work, in any medium,
55808     that contains a notice placed by the copyright holder saying it can
55809     be distributed under the terms of this License.  Such a notice
55810     grants a world-wide, royalty-free license, unlimited in duration,
55811     to use that work under the conditions stated herein.  The
55812     "Document", below, refers to any such manual or work.  Any member
55813     of the public is a licensee, and is addressed as "you".  You accept
55814     the license if you copy, modify or distribute the work in a way
55815     requiring permission under copyright law.
55816
55817     A "Modified Version" of the Document means any work containing the
55818     Document or a portion of it, either copied verbatim, or with
55819     modifications and/or translated into another language.
55820
55821     A "Secondary Section" is a named appendix or a front-matter section
55822     of the Document that deals exclusively with the relationship of the
55823     publishers or authors of the Document to the Document's overall
55824     subject (or to related matters) and contains nothing that could
55825     fall directly within that overall subject.  (Thus, if the Document
55826     is in part a textbook of mathematics, a Secondary Section may not
55827     explain any mathematics.)  The relationship could be a matter of
55828     historical connection with the subject or with related matters, or
55829     of legal, commercial, philosophical, ethical or political position
55830     regarding them.
55831
55832     The "Invariant Sections" are certain Secondary Sections whose
55833     titles are designated, as being those of Invariant Sections, in the
55834     notice that says that the Document is released under this License.
55835     If a section does not fit the above definition of Secondary then it
55836     is not allowed to be designated as Invariant.  The Document may
55837     contain zero Invariant Sections.  If the Document does not identify
55838     any Invariant Sections then there are none.
55839
55840     The "Cover Texts" are certain short passages of text that are
55841     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
55842     that says that the Document is released under this License.  A
55843     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
55844     be at most 25 words.
55845
55846     A "Transparent" copy of the Document means a machine-readable copy,
55847     represented in a format whose specification is available to the
55848     general public, that is suitable for revising the document
55849     straightforwardly with generic text editors or (for images composed
55850     of pixels) generic paint programs or (for drawings) some widely
55851     available drawing editor, and that is suitable for input to text
55852     formatters or for automatic translation to a variety of formats
55853     suitable for input to text formatters.  A copy made in an otherwise
55854     Transparent file format whose markup, or absence of markup, has
55855     been arranged to thwart or discourage subsequent modification by
55856     readers is not Transparent.  An image format is not Transparent if
55857     used for any substantial amount of text.  A copy that is not
55858     "Transparent" is called "Opaque".
55859
55860     Examples of suitable formats for Transparent copies include plain
55861     ASCII without markup, Texinfo input format, LaTeX input format,
55862     SGML or XML using a publicly available DTD, and standard-conforming
55863     simple HTML, PostScript or PDF designed for human modification.
55864     Examples of transparent image formats include PNG, XCF and JPG.
55865     Opaque formats include proprietary formats that can be read and
55866     edited only by proprietary word processors, SGML or XML for which
55867     the DTD and/or processing tools are not generally available, and
55868     the machine-generated HTML, PostScript or PDF produced by some word
55869     processors for output purposes only.
55870
55871     The "Title Page" means, for a printed book, the title page itself,
55872     plus such following pages as are needed to hold, legibly, the
55873     material this License requires to appear in the title page.  For
55874     works in formats which do not have any title page as such, "Title
55875     Page" means the text near the most prominent appearance of the
55876     work's title, preceding the beginning of the body of the text.
55877
55878     The "publisher" means any person or entity that distributes copies
55879     of the Document to the public.
55880
55881     A section "Entitled XYZ" means a named subunit of the Document
55882     whose title either is precisely XYZ or contains XYZ in parentheses
55883     following text that translates XYZ in another language.  (Here XYZ
55884     stands for a specific section name mentioned below, such as
55885     "Acknowledgements", "Dedications", "Endorsements", or "History".)
55886     To "Preserve the Title" of such a section when you modify the
55887     Document means that it remains a section "Entitled XYZ" according
55888     to this definition.
55889
55890     The Document may include Warranty Disclaimers next to the notice
55891     which states that this License applies to the Document.  These
55892     Warranty Disclaimers are considered to be included by reference in
55893     this License, but only as regards disclaiming warranties: any other
55894     implication that these Warranty Disclaimers may have is void and
55895     has no effect on the meaning of this License.
55896
55897  2. VERBATIM COPYING
55898
55899     You may copy and distribute the Document in any medium, either
55900     commercially or noncommercially, provided that this License, the
55901     copyright notices, and the license notice saying this License
55902     applies to the Document are reproduced in all copies, and that you
55903     add no other conditions whatsoever to those of this License.  You
55904     may not use technical measures to obstruct or control the reading
55905     or further copying of the copies you make or distribute.  However,
55906     you may accept compensation in exchange for copies.  If you
55907     distribute a large enough number of copies you must also follow the
55908     conditions in section 3.
55909
55910     You may also lend copies, under the same conditions stated above,
55911     and you may publicly display copies.
55912
55913  3. COPYING IN QUANTITY
55914
55915     If you publish printed copies (or copies in media that commonly
55916     have printed covers) of the Document, numbering more than 100, and
55917     the Document's license notice requires Cover Texts, you must
55918     enclose the copies in covers that carry, clearly and legibly, all
55919     these Cover Texts: Front-Cover Texts on the front cover, and
55920     Back-Cover Texts on the back cover.  Both covers must also clearly
55921     and legibly identify you as the publisher of these copies.  The
55922     front cover must present the full title with all words of the title
55923     equally prominent and visible.  You may add other material on the
55924     covers in addition.  Copying with changes limited to the covers, as
55925     long as they preserve the title of the Document and satisfy these
55926     conditions, can be treated as verbatim copying in other respects.
55927
55928     If the required texts for either cover are too voluminous to fit
55929     legibly, you should put the first ones listed (as many as fit
55930     reasonably) on the actual cover, and continue the rest onto
55931     adjacent pages.
55932
55933     If you publish or distribute Opaque copies of the Document
55934     numbering more than 100, you must either include a machine-readable
55935     Transparent copy along with each Opaque copy, or state in or with
55936     each Opaque copy a computer-network location from which the general
55937     network-using public has access to download using public-standard
55938     network protocols a complete Transparent copy of the Document, free
55939     of added material.  If you use the latter option, you must take
55940     reasonably prudent steps, when you begin distribution of Opaque
55941     copies in quantity, to ensure that this Transparent copy will
55942     remain thus accessible at the stated location until at least one
55943     year after the last time you distribute an Opaque copy (directly or
55944     through your agents or retailers) of that edition to the public.
55945
55946     It is requested, but not required, that you contact the authors of
55947     the Document well before redistributing any large number of copies,
55948     to give them a chance to provide you with an updated version of the
55949     Document.
55950
55951  4. MODIFICATIONS
55952
55953     You may copy and distribute a Modified Version of the Document
55954     under the conditions of sections 2 and 3 above, provided that you
55955     release the Modified Version under precisely this License, with the
55956     Modified Version filling the role of the Document, thus licensing
55957     distribution and modification of the Modified Version to whoever
55958     possesses a copy of it.  In addition, you must do these things in
55959     the Modified Version:
55960
55961       A. Use in the Title Page (and on the covers, if any) a title
55962          distinct from that of the Document, and from those of previous
55963          versions (which should, if there were any, be listed in the
55964          History section of the Document).  You may use the same title
55965          as a previous version if the original publisher of that
55966          version gives permission.
55967
55968       B. List on the Title Page, as authors, one or more persons or
55969          entities responsible for authorship of the modifications in
55970          the Modified Version, together with at least five of the
55971          principal authors of the Document (all of its principal
55972          authors, if it has fewer than five), unless they release you
55973          from this requirement.
55974
55975       C. State on the Title page the name of the publisher of the
55976          Modified Version, as the publisher.
55977
55978       D. Preserve all the copyright notices of the Document.
55979
55980       E. Add an appropriate copyright notice for your modifications
55981          adjacent to the other copyright notices.
55982
55983       F. Include, immediately after the copyright notices, a license
55984          notice giving the public permission to use the Modified
55985          Version under the terms of this License, in the form shown in
55986          the Addendum below.
55987
55988       G. Preserve in that license notice the full lists of Invariant
55989          Sections and required Cover Texts given in the Document's
55990          license notice.
55991
55992       H. Include an unaltered copy of this License.
55993
55994       I. Preserve the section Entitled "History", Preserve its Title,
55995          and add to it an item stating at least the title, year, new
55996          authors, and publisher of the Modified Version as given on the
55997          Title Page.  If there is no section Entitled "History" in the
55998          Document, create one stating the title, year, authors, and
55999          publisher of the Document as given on its Title Page, then add
56000          an item describing the Modified Version as stated in the
56001          previous sentence.
56002
56003       J. Preserve the network location, if any, given in the Document
56004          for public access to a Transparent copy of the Document, and
56005          likewise the network locations given in the Document for
56006          previous versions it was based on.  These may be placed in the
56007          "History" section.  You may omit a network location for a work
56008          that was published at least four years before the Document
56009          itself, or if the original publisher of the version it refers
56010          to gives permission.
56011
56012       K. For any section Entitled "Acknowledgements" or "Dedications",
56013          Preserve the Title of the section, and preserve in the section
56014          all the substance and tone of each of the contributor
56015          acknowledgements and/or dedications given therein.
56016
56017       L. Preserve all the Invariant Sections of the Document, unaltered
56018          in their text and in their titles.  Section numbers or the
56019          equivalent are not considered part of the section titles.
56020
56021       M. Delete any section Entitled "Endorsements".  Such a section
56022          may not be included in the Modified Version.
56023
56024       N. Do not retitle any existing section to be Entitled
56025          "Endorsements" or to conflict in title with any Invariant
56026          Section.
56027
56028       O. Preserve any Warranty Disclaimers.
56029
56030     If the Modified Version includes new front-matter sections or
56031     appendices that qualify as Secondary Sections and contain no
56032     material copied from the Document, you may at your option designate
56033     some or all of these sections as invariant.  To do this, add their
56034     titles to the list of Invariant Sections in the Modified Version's
56035     license notice.  These titles must be distinct from any other
56036     section titles.
56037
56038     You may add a section Entitled "Endorsements", provided it contains
56039     nothing but endorsements of your Modified Version by various
56040     parties--for example, statements of peer review or that the text
56041     has been approved by an organization as the authoritative
56042     definition of a standard.
56043
56044     You may add a passage of up to five words as a Front-Cover Text,
56045     and a passage of up to 25 words as a Back-Cover Text, to the end of
56046     the list of Cover Texts in the Modified Version.  Only one passage
56047     of Front-Cover Text and one of Back-Cover Text may be added by (or
56048     through arrangements made by) any one entity.  If the Document
56049     already includes a cover text for the same cover, previously added
56050     by you or by arrangement made by the same entity you are acting on
56051     behalf of, you may not add another; but you may replace the old
56052     one, on explicit permission from the previous publisher that added
56053     the old one.
56054
56055     The author(s) and publisher(s) of the Document do not by this
56056     License give permission to use their names for publicity for or to
56057     assert or imply endorsement of any Modified Version.
56058
56059  5. COMBINING DOCUMENTS
56060
56061     You may combine the Document with other documents released under
56062     this License, under the terms defined in section 4 above for
56063     modified versions, provided that you include in the combination all
56064     of the Invariant Sections of all of the original documents,
56065     unmodified, and list them all as Invariant Sections of your
56066     combined work in its license notice, and that you preserve all
56067     their Warranty Disclaimers.
56068
56069     The combined work need only contain one copy of this License, and
56070     multiple identical Invariant Sections may be replaced with a single
56071     copy.  If there are multiple Invariant Sections with the same name
56072     but different contents, make the title of each such section unique
56073     by adding at the end of it, in parentheses, the name of the
56074     original author or publisher of that section if known, or else a
56075     unique number.  Make the same adjustment to the section titles in
56076     the list of Invariant Sections in the license notice of the
56077     combined work.
56078
56079     In the combination, you must combine any sections Entitled
56080     "History" in the various original documents, forming one section
56081     Entitled "History"; likewise combine any sections Entitled
56082     "Acknowledgements", and any sections Entitled "Dedications".  You
56083     must delete all sections Entitled "Endorsements."
56084
56085  6. COLLECTIONS OF DOCUMENTS
56086
56087     You may make a collection consisting of the Document and other
56088     documents released under this License, and replace the individual
56089     copies of this License in the various documents with a single copy
56090     that is included in the collection, provided that you follow the
56091     rules of this License for verbatim copying of each of the documents
56092     in all other respects.
56093
56094     You may extract a single document from such a collection, and
56095     distribute it individually under this License, provided you insert
56096     a copy of this License into the extracted document, and follow this
56097     License in all other respects regarding verbatim copying of that
56098     document.
56099
56100  7. AGGREGATION WITH INDEPENDENT WORKS
56101
56102     A compilation of the Document or its derivatives with other
56103     separate and independent documents or works, in or on a volume of a
56104     storage or distribution medium, is called an "aggregate" if the
56105     copyright resulting from the compilation is not used to limit the
56106     legal rights of the compilation's users beyond what the individual
56107     works permit.  When the Document is included in an aggregate, this
56108     License does not apply to the other works in the aggregate which
56109     are not themselves derivative works of the Document.
56110
56111     If the Cover Text requirement of section 3 is applicable to these
56112     copies of the Document, then if the Document is less than one half
56113     of the entire aggregate, the Document's Cover Texts may be placed
56114     on covers that bracket the Document within the aggregate, or the
56115     electronic equivalent of covers if the Document is in electronic
56116     form.  Otherwise they must appear on printed covers that bracket
56117     the whole aggregate.
56118
56119  8. TRANSLATION
56120
56121     Translation is considered a kind of modification, so you may
56122     distribute translations of the Document under the terms of section
56123     4.  Replacing Invariant Sections with translations requires special
56124     permission from their copyright holders, but you may include
56125     translations of some or all Invariant Sections in addition to the
56126     original versions of these Invariant Sections.  You may include a
56127     translation of this License, and all the license notices in the
56128     Document, and any Warranty Disclaimers, provided that you also
56129     include the original English version of this License and the
56130     original versions of those notices and disclaimers.  In case of a
56131     disagreement between the translation and the original version of
56132     this License or a notice or disclaimer, the original version will
56133     prevail.
56134
56135     If a section in the Document is Entitled "Acknowledgements",
56136     "Dedications", or "History", the requirement (section 4) to
56137     Preserve its Title (section 1) will typically require changing the
56138     actual title.
56139
56140  9. TERMINATION
56141
56142     You may not copy, modify, sublicense, or distribute the Document
56143     except as expressly provided under this License.  Any attempt
56144     otherwise to copy, modify, sublicense, or distribute it is void,
56145     and will automatically terminate your rights under this License.
56146
56147     However, if you cease all violation of this License, then your
56148     license from a particular copyright holder is reinstated (a)
56149     provisionally, unless and until the copyright holder explicitly and
56150     finally terminates your license, and (b) permanently, if the
56151     copyright holder fails to notify you of the violation by some
56152     reasonable means prior to 60 days after the cessation.
56153
56154     Moreover, your license from a particular copyright holder is
56155     reinstated permanently if the copyright holder notifies you of the
56156     violation by some reasonable means, this is the first time you have
56157     received notice of violation of this License (for any work) from
56158     that copyright holder, and you cure the violation prior to 30 days
56159     after your receipt of the notice.
56160
56161     Termination of your rights under this section does not terminate
56162     the licenses of parties who have received copies or rights from you
56163     under this License.  If your rights have been terminated and not
56164     permanently reinstated, receipt of a copy of some or all of the
56165     same material does not give you any rights to use it.
56166
56167  10. FUTURE REVISIONS OF THIS LICENSE
56168
56169     The Free Software Foundation may publish new, revised versions of
56170     the GNU Free Documentation License from time to time.  Such new
56171     versions will be similar in spirit to the present version, but may
56172     differ in detail to address new problems or concerns.  See
56173     <http://www.gnu.org/copyleft/>.
56174
56175     Each version of the License is given a distinguishing version
56176     number.  If the Document specifies that a particular numbered
56177     version of this License "or any later version" applies to it, you
56178     have the option of following the terms and conditions either of
56179     that specified version or of any later version that has been
56180     published (not as a draft) by the Free Software Foundation.  If the
56181     Document does not specify a version number of this License, you may
56182     choose any version ever published (not as a draft) by the Free
56183     Software Foundation.  If the Document specifies that a proxy can
56184     decide which future versions of this License can be used, that
56185     proxy's public statement of acceptance of a version permanently
56186     authorizes you to choose that version for the Document.
56187
56188  11. RELICENSING
56189
56190     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
56191     World Wide Web server that publishes copyrightable works and also
56192     provides prominent facilities for anybody to edit those works.  A
56193     public wiki that anybody can edit is an example of such a server.
56194     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
56195     site means any set of copyrightable works thus published on the MMC
56196     site.
56197
56198     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
56199     license published by Creative Commons Corporation, a not-for-profit
56200     corporation with a principal place of business in San Francisco,
56201     California, as well as future copyleft versions of that license
56202     published by that same organization.
56203
56204     "Incorporate" means to publish or republish a Document, in whole or
56205     in part, as part of another Document.
56206
56207     An MMC is "eligible for relicensing" if it is licensed under this
56208     License, and if all works that were first published under this
56209     License somewhere other than this MMC, and subsequently
56210     incorporated in whole or in part into the MMC, (1) had no cover
56211     texts or invariant sections, and (2) were thus incorporated prior
56212     to November 1, 2008.
56213
56214     The operator of an MMC Site may republish an MMC contained in the
56215     site under CC-BY-SA on the same site at any time before August 1,
56216     2009, provided the MMC is eligible for relicensing.
56217
56218ADDENDUM: How to use this License for your documents
56219====================================================
56220
56221To use this License in a document you have written, include a copy of
56222the License in the document and put the following copyright and license
56223notices just after the title page:
56224
56225       Copyright (C)  YEAR  YOUR NAME.
56226       Permission is granted to copy, distribute and/or modify this document
56227       under the terms of the GNU Free Documentation License, Version 1.3
56228       or any later version published by the Free Software Foundation;
56229       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
56230       Texts.  A copy of the license is included in the section entitled ``GNU
56231       Free Documentation License''.
56232
56233 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
56234replace the "with...Texts."  line with this:
56235
56236         with the Invariant Sections being LIST THEIR TITLES, with
56237         the Front-Cover Texts being LIST, and with the Back-Cover Texts
56238         being LIST.
56239
56240 If you have Invariant Sections without Cover Texts, or some other
56241combination of the three, merge those two alternatives to suit the
56242situation.
56243
56244 If your document contains nontrivial examples of program code, we
56245recommend releasing these examples in parallel under your choice of free
56246software license, such as the GNU General Public License, to permit
56247their use in free software.
56248
56249
56250File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
56251
56252Contributors to GCC
56253*******************
56254
56255The GCC project would like to thank its many contributors.  Without them
56256the project would not have been nearly as successful as it has been.
56257Any omissions in this list are accidental.  Feel free to contact
56258<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
56259some of your contributions are not listed.  Please keep this list in
56260alphabetical order.
56261
56262   * Analog Devices helped implement the support for complex data types
56263     and iterators.
56264
56265   * John David Anglin for threading-related fixes and improvements to
56266     libstdc++-v3, and the HP-UX port.
56267
56268   * James van Artsdalen wrote the code that makes efficient use of the
56269     Intel 80387 register stack.
56270
56271   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
56272     Series port.
56273
56274   * Alasdair Baird for various bug fixes.
56275
56276   * Giovanni Bajo for analyzing lots of complicated C++ problem
56277     reports.
56278
56279   * Peter Barada for his work to improve code generation for new
56280     ColdFire cores.
56281
56282   * Gerald Baumgartner added the signature extension to the C++ front
56283     end.
56284
56285   * Godmar Back for his Java improvements and encouragement.
56286
56287   * Scott Bambrough for help porting the Java compiler.
56288
56289   * Wolfgang Bangerth for processing tons of bug reports.
56290
56291   * Jon Beniston for his Microsoft Windows port of Java and port to
56292     Lattice Mico32.
56293
56294   * Daniel Berlin for better DWARF 2 support, faster/better
56295     optimizations, improved alias analysis, plus migrating GCC to
56296     Bugzilla.
56297
56298   * Geoff Berry for his Java object serialization work and various
56299     patches.
56300
56301   * David Binderman tests weekly snapshots of GCC trunk against Fedora
56302     Rawhide for several architectures.
56303
56304   * Laurynas Biveinis for memory management work and DJGPP port fixes.
56305
56306   * Uros Bizjak for the implementation of x87 math built-in functions
56307     and for various middle end and i386 back end improvements and bug
56308     fixes.
56309
56310   * Eric Blake for helping to make GCJ and libgcj conform to the
56311     specifications.
56312
56313   * Janne Blomqvist for contributions to GNU Fortran.
56314
56315   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
56316     other Java work.
56317
56318   * Segher Boessenkool for helping maintain the PowerPC port and the
56319     instruction combiner plus various contributions to the middle end.
56320
56321   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
56322     miscellaneous clean-ups.
56323
56324   * Steven Bosscher for integrating the GNU Fortran front end into GCC
56325     and for contributing to the tree-ssa branch.
56326
56327   * Eric Botcazou for fixing middle- and backend bugs left and right.
56328
56329   * Per Bothner for his direction via the steering committee and
56330     various improvements to the infrastructure for supporting new
56331     languages.  Chill front end implementation.  Initial
56332     implementations of cpplib, fix-header, config.guess, libio, and
56333     past C++ library (libg++) maintainer.  Dreaming up, designing and
56334     implementing much of GCJ.
56335
56336   * Devon Bowen helped port GCC to the Tahoe.
56337
56338   * Don Bowman for mips-vxworks contributions.
56339
56340   * James Bowman for the FT32 port.
56341
56342   * Dave Brolley for work on cpplib and Chill.
56343
56344   * Paul Brook for work on the ARM architecture and maintaining GNU
56345     Fortran.
56346
56347   * Robert Brown implemented the support for Encore 32000 systems.
56348
56349   * Christian Bruel for improvements to local store elimination.
56350
56351   * Herman A.J. ten Brugge for various fixes.
56352
56353   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
56354     FAQ.
56355
56356   * Joe Buck for his direction via the steering committee from its
56357     creation to 2013.
56358
56359   * Craig Burley for leadership of the G77 Fortran effort.
56360
56361   * Tobias Burnus for contributions to GNU Fortran.
56362
56363   * Stephan Buys for contributing Doxygen notes for libstdc++.
56364
56365   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
56366     to the C++ strings, streambufs and formatted I/O, hard detective
56367     work on the frustrating localization issues, and keeping up with
56368     the problem reports.
56369
56370   * John Carr for his alias work, SPARC hacking, infrastructure
56371     improvements, previous contributions to the steering committee,
56372     loop optimizations, etc.
56373
56374   * Stephane Carrez for 68HC11 and 68HC12 ports.
56375
56376   * Steve Chamberlain for support for the Renesas SH and H8 processors
56377     and the PicoJava processor, and for GCJ config fixes.
56378
56379   * Glenn Chambers for help with the GCJ FAQ.
56380
56381   * John-Marc Chandonia for various libgcj patches.
56382
56383   * Denis Chertykov for contributing and maintaining the AVR port, the
56384     first GCC port for an 8-bit architecture.
56385
56386   * Kito Cheng for his work on the RISC-V port, including bringing up
56387     the test suite and maintenance.
56388
56389   * Scott Christley for his Objective-C contributions.
56390
56391   * Eric Christopher for his Java porting help and clean-ups.
56392
56393   * Branko Cibej for more warning contributions.
56394
56395   * The GNU Classpath project for all of their merged runtime code.
56396
56397   * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work,
56398     '--help', and other random hacking.
56399
56400   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
56401
56402   * R. Kelley Cook for making GCC buildable from a read-only directory
56403     as well as other miscellaneous build process and documentation
56404     clean-ups.
56405
56406   * Ralf Corsepius for SH testing and minor bug fixing.
56407
56408   * Franc,ois-Xavier Coudert for contributions to GNU Fortran.
56409
56410   * Stan Cox for care and feeding of the x86 port and lots of behind
56411     the scenes hacking.
56412
56413   * Alex Crain provided changes for the 3b1.
56414
56415   * Ian Dall for major improvements to the NS32k port.
56416
56417   * Paul Dale for his work to add uClinux platform support to the m68k
56418     backend.
56419
56420   * Palmer Dabbelt for his work maintaining the RISC-V port.
56421
56422   * Dario Dariol contributed the four varieties of sample programs that
56423     print a copy of their source.
56424
56425   * Russell Davidson for fstream and stringstream fixes in libstdc++.
56426
56427   * Bud Davis for work on the G77 and GNU Fortran compilers.
56428
56429   * Mo DeJong for GCJ and libgcj bug fixes.
56430
56431   * Jerry DeLisle for contributions to GNU Fortran.
56432
56433   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
56434     various bug fixes, and the M32C, MeP, MSP430, and RL78 ports.
56435
56436   * Arnaud Desitter for helping to debug GNU Fortran.
56437
56438   * Gabriel Dos Reis for contributions to G++, contributions and
56439     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
56440     including 'valarray<>', 'complex<>', maintaining the numerics
56441     library (including that pesky '<limits>' :-) and keeping up-to-date
56442     anything to do with numbers.
56443
56444   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
56445     ISO C99 support, CFG dumping support, etc., plus support of the C++
56446     runtime libraries including for all kinds of C interface issues,
56447     contributing and maintaining 'complex<>', sanity checking and
56448     disbursement, configuration architecture, libio maintenance, and
56449     early math work.
56450
56451   * Franc,ois Dumont for his work on libstdc++-v3, especially
56452     maintaining and improving 'debug-mode' and associative and
56453     unordered containers.
56454
56455   * Zdenek Dvorak for a new loop unroller and various fixes.
56456
56457   * Michael Eager for his work on the Xilinx MicroBlaze port.
56458
56459   * Richard Earnshaw for his ongoing work with the ARM.
56460
56461   * David Edelsohn for his direction via the steering committee,
56462     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
56463     loop changes, doing the entire AIX port of libstdc++ with his bare
56464     hands, and for ensuring GCC properly keeps working on AIX.
56465
56466   * Kevin Ediger for the floating point formatting of num_put::do_put
56467     in libstdc++.
56468
56469   * Phil Edwards for libstdc++ work including configuration hackery,
56470     documentation maintainer, chief breaker of the web pages, the
56471     occasional iostream bug fix, and work on shared library symbol
56472     versioning.
56473
56474   * Paul Eggert for random hacking all over GCC.
56475
56476   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
56477     configuration support for locales and fstream-related fixes.
56478
56479   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
56480     iostreams.
56481
56482   * Christian Ehrhardt for dealing with bug reports.
56483
56484   * Ben Elliston for his work to move the Objective-C runtime into its
56485     own subdirectory and for his work on autoconf.
56486
56487   * Revital Eres for work on the PowerPC 750CL port.
56488
56489   * Marc Espie for OpenBSD support.
56490
56491   * Doug Evans for much of the global optimization framework, arc,
56492     m32r, and SPARC work.
56493
56494   * Christopher Faylor for his work on the Cygwin port and for caring
56495     and feeding the gcc.gnu.org box and saving its users tons of spam.
56496
56497   * Fred Fish for BeOS support and Ada fixes.
56498
56499   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
56500
56501   * Peter Gerwinski for various bug fixes and the Pascal front end.
56502
56503   * Kaveh R. Ghazi for his direction via the steering committee,
56504     amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC
56505     on a plethora of platforms.  Kaveh extends his gratitude to the
56506     CAIP Center at Rutgers University for providing him with computing
56507     resources to work on Free Software from the late 1980s to 2010.
56508
56509   * John Gilmore for a donation to the FSF earmarked improving GNU
56510     Java.
56511
56512   * Judy Goldberg for c++ contributions.
56513
56514   * Torbjorn Granlund for various fixes and the c-torture testsuite,
56515     multiply- and divide-by-constant optimization, improved long long
56516     support, improved leaf function register allocation, and his
56517     direction via the steering committee.
56518
56519   * Jonny Grant for improvements to 'collect2's' '--help'
56520     documentation.
56521
56522   * Anthony Green for his '-Os' contributions, the moxie port, and Java
56523     front end work.
56524
56525   * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java
56526     code.
56527
56528   * Michael K. Gschwind contributed the port to the PDP-11.
56529
56530   * Richard Biener for his ongoing middle-end contributions and bug
56531     fixes and for release management.
56532
56533   * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools,
56534     the support for DWARF 1 symbolic debugging information, and much of
56535     the support for System V Release 4.  He has also worked heavily on
56536     the Intel 386 and 860 support.
56537
56538   * Sumanth Gundapaneni for contributing the CR16 port.
56539
56540   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
56541     GCSE.
56542
56543   * Bruno Haible for improvements in the runtime overhead for EH, new
56544     warnings and assorted bug fixes.
56545
56546   * Andrew Haley for his amazing Java compiler and library efforts.
56547
56548   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
56549     series 300.
56550
56551   * Michael Hayes for various thankless work he's done trying to get
56552     the c30/c40 ports functional.  Lots of loop and unroll improvements
56553     and fixes.
56554
56555   * Dara Hazeghi for wading through myriads of target-specific bug
56556     reports.
56557
56558   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
56559
56560   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
56561     work, loop opts, and generally fixing lots of old problems we've
56562     ignored for years, flow rewrite and lots of further stuff,
56563     including reviewing tons of patches.
56564
56565   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
56566     various fixes.
56567
56568   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
56569     contributed the support for the Sony NEWS machine.
56570
56571   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
56572     various fixes.
56573
56574   * Katherine Holcomb for work on GNU Fortran.
56575
56576   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
56577     of testing and bug fixing, particularly of GCC configury code.
56578
56579   * Steve Holmgren for MachTen patches.
56580
56581   * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
56582
56583   * Jan Hubicka for his x86 port improvements.
56584
56585   * Falk Hueffner for working on C and optimization bug reports.
56586
56587   * Bernardo Innocenti for his m68k work, including merging of ColdFire
56588     improvements and uClinux support.
56589
56590   * Christian Iseli for various bug fixes.
56591
56592   * Kamil Iskra for general m68k hacking.
56593
56594   * Lee Iverson for random fixes and MIPS testing.
56595
56596   * Balaji V. Iyer for Cilk+ development and merging.
56597
56598   * Andreas Jaeger for testing and benchmarking of GCC and various bug
56599     fixes.
56600
56601   * Martin Jambor for his work on inter-procedural optimizations, the
56602     switch conversion pass, and scalar replacement of aggregates.
56603
56604   * Jakub Jelinek for his SPARC work and sibling call optimizations as
56605     well as lots of bug fixes and test cases, and for improving the
56606     Java build system.
56607
56608   * Janis Johnson for ia64 testing and fixes, her quality improvement
56609     sidetracks, and web page maintenance.
56610
56611   * Kean Johnston for SCO OpenServer support and various fixes.
56612
56613   * Tim Josling for the sample language treelang based originally on
56614     Richard Kenner's "toy" language.
56615
56616   * Nicolai Josuttis for additional libstdc++ documentation.
56617
56618   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
56619     target.
56620
56621   * Steven G. Kargl for work on GNU Fortran.
56622
56623   * David Kashtan of SRI adapted GCC to VMS.
56624
56625   * Ryszard Kabatek for many, many libstdc++ bug fixes and
56626     optimizations of strings, especially member functions, and for
56627     auto_ptr fixes.
56628
56629   * Geoffrey Keating for his ongoing work to make the PPC work for
56630     GNU/Linux and his automatic regression tester.
56631
56632   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
56633     work in just about every part of libstdc++.
56634
56635   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
56636     MIL-STD-1750A.
56637
56638   * Richard Kenner of the New York University Ultracomputer Research
56639     Laboratory wrote the machine descriptions for the AMD 29000, the
56640     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
56641     support for instruction attributes.  He also made changes to better
56642     support RISC processors including changes to common subexpression
56643     elimination, strength reduction, function calling sequence
56644     handling, and condition code support, in addition to generalizing
56645     the code for frame pointer elimination and delay slot scheduling.
56646     Richard Kenner was also the head maintainer of GCC for several
56647     years.
56648
56649   * Mumit Khan for various contributions to the Cygwin and Mingw32
56650     ports and maintaining binary releases for Microsoft Windows hosts,
56651     and for massive libstdc++ porting work to Cygwin/Mingw32.
56652
56653   * Robin Kirkham for cpu32 support.
56654
56655   * Mark Klein for PA improvements.
56656
56657   * Thomas Koenig for various bug fixes.
56658
56659   * Bruce Korb for the new and improved fixincludes code.
56660
56661   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
56662     effort.
56663
56664   * Maxim Kuvyrkov for contributions to the instruction scheduler, the
56665     Android and m68k/Coldfire ports, and optimizations.
56666
56667   * Charles LaBrec contributed the support for the Integrated Solutions
56668     68020 system.
56669
56670   * Asher Langton and Mike Kumbera for contributing Cray pointer
56671     support to GNU Fortran, and for other GNU Fortran improvements.
56672
56673   * Jeff Law for his direction via the steering committee, coordinating
56674     the entire egcs project and GCC 2.95, rolling out snapshots and
56675     releases, handling merges from GCC2, reviewing tons of patches that
56676     might have fallen through the cracks else, and random but extensive
56677     hacking.
56678
56679   * Walter Lee for work on the TILE-Gx and TILEPro ports.
56680
56681   * Marc Lehmann for his direction via the steering committee and
56682     helping with analysis and improvements of x86 performance.
56683
56684   * Victor Leikehman for work on GNU Fortran.
56685
56686   * Ted Lemon wrote parts of the RTL reader and printer.
56687
56688   * Kriang Lerdsuwanakij for C++ improvements including template as
56689     template parameter support, and many C++ fixes.
56690
56691   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
56692     and random work on the Java front end.
56693
56694   * Alain Lichnewsky ported GCC to the MIPS CPU.
56695
56696   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
56697     and patches.
56698
56699   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
56700
56701   * Chen Liqin for various S+core related fixes/improvement, and for
56702     maintaining the S+core port.
56703
56704   * Martin Liska for his work on identical code folding, the
56705     sanitizers, HSA, general bug fixing and for running automated
56706     regression testing of GCC and reporting numerous bugs.
56707
56708   * Weiwen Liu for testing and various bug fixes.
56709
56710   * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other
56711     diagnostics fixes and improvements.
56712
56713   * Dave Love for his ongoing work with the Fortran front end and
56714     runtime libraries.
56715
56716   * Martin von Lo"wis for internal consistency checking infrastructure,
56717     various C++ improvements including namespace support, and tons of
56718     assistance with libstdc++/compiler merges.
56719
56720   * H.J. Lu for his previous contributions to the steering committee,
56721     many x86 bug reports, prototype patches, and keeping the GNU/Linux
56722     ports working.
56723
56724   * Greg McGary for random fixes and (someday) bounded pointers.
56725
56726   * Andrew MacLeod for his ongoing work in building a real EH system,
56727     various code generation improvements, work on the global optimizer,
56728     etc.
56729
56730   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
56731     hacking improvements to compile-time performance, overall knowledge
56732     and direction in the area of instruction scheduling, design and
56733     implementation of the automaton based instruction scheduler and
56734     design and implementation of the integrated and local register
56735     allocators.
56736
56737   * David Malcolm for his work on improving GCC diagnostics, JIT,
56738     self-tests and unit testing.
56739
56740   * Bob Manson for his behind the scenes work on dejagnu.
56741
56742   * John Marino for contributing the DragonFly BSD port.
56743
56744   * Philip Martin for lots of libstdc++ string and vector iterator
56745     fixes and improvements, and string clean up and testsuites.
56746
56747   * Michael Matz for his work on dominance tree discovery, the x86-64
56748     port, link-time optimization framework and general optimization
56749     improvements.
56750
56751   * All of the Mauve project contributors for Java test code.
56752
56753   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
56754
56755   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
56756
56757   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
56758     powerpc, haifa, ECOFF debug support, and other assorted hacking.
56759
56760   * Jason Merrill for his direction via the steering committee and
56761     leading the G++ effort.
56762
56763   * Martin Michlmayr for testing GCC on several architectures using the
56764     entire Debian archive.
56765
56766   * David Miller for his direction via the steering committee, lots of
56767     SPARC work, improvements in jump.c and interfacing with the Linux
56768     kernel developers.
56769
56770   * Gary Miller ported GCC to Charles River Data Systems machines.
56771
56772   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
56773     the entire libstdc++ testsuite namespace-compatible.
56774
56775   * Mark Mitchell for his direction via the steering committee,
56776     mountains of C++ work, load/store hoisting out of loops, alias
56777     analysis improvements, ISO C 'restrict' support, and serving as
56778     release manager from 2000 to 2011.
56779
56780   * Alan Modra for various GNU/Linux bits and testing.
56781
56782   * Toon Moene for his direction via the steering committee, Fortran
56783     maintenance, and his ongoing work to make us make Fortran run fast.
56784
56785   * Jason Molenda for major help in the care and feeding of all the
56786     services on the gcc.gnu.org (formerly egcs.cygnus.com)
56787     machine--mail, web services, ftp services, etc etc.  Doing all this
56788     work on scrap paper and the backs of envelopes would have been...
56789     difficult.
56790
56791   * Catherine Moore for fixing various ugly problems we have sent her
56792     way, including the haifa bug which was killing the Alpha & PowerPC
56793     Linux kernels.
56794
56795   * Mike Moreton for his various Java patches.
56796
56797   * David Mosberger-Tang for various Alpha improvements, and for the
56798     initial IA-64 port.
56799
56800   * Stephen Moshier contributed the floating point emulator that
56801     assists in cross-compilation and permits support for floating point
56802     numbers wider than 64 bits and for ISO C99 support.
56803
56804   * Bill Moyer for his behind the scenes work on various issues.
56805
56806   * Philippe De Muyter for his work on the m68k port.
56807
56808   * Joseph S. Myers for his work on the PDP-11 port, format checking
56809     and ISO C99 support, and continuous emphasis on (and contributions
56810     to) documentation.
56811
56812   * Nathan Myers for his work on libstdc++-v3: architecture and
56813     authorship through the first three snapshots, including
56814     implementation of locale infrastructure, string, shadow C headers,
56815     and the initial project documentation (DESIGN, CHECKLIST, and so
56816     forth).  Later, more work on MT-safe string and shadow headers.
56817
56818   * Felix Natter for documentation on porting libstdc++.
56819
56820   * Nathanael Nerode for cleaning up the configuration/build process.
56821
56822   * NeXT, Inc. donated the front end that supports the Objective-C
56823     language.
56824
56825   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the
56826     search engine setup, various documentation fixes and other small
56827     fixes.
56828
56829   * Geoff Noer for his work on getting cygwin native builds working.
56830
56831   * Vegard Nossum for running automated regression testing of GCC and
56832     reporting numerous bugs.
56833
56834   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
56835     tracking web pages, GIMPLE tuples, and assorted fixes.
56836
56837   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
56838     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related
56839     infrastructure improvements.
56840
56841   * Alexandre Oliva for various build infrastructure improvements,
56842     scripts and amazing testing work, including keeping libtool issues
56843     sane and happy.
56844
56845   * Stefan Olsson for work on mt_alloc.
56846
56847   * Melissa O'Neill for various NeXT fixes.
56848
56849   * Rainer Orth for random MIPS work, including improvements to GCC's
56850     o32 ABI support, improvements to dejagnu's MIPS support, Java
56851     configuration clean-ups and porting work, and maintaining the IRIX,
56852     Solaris 2, and Tru64 UNIX ports.
56853
56854   * Steven Pemberton for his contribution of 'enquire' which allowed
56855     GCC to determine various properties of the floating point unit and
56856     generate 'float.h' in older versions of GCC.
56857
56858   * Hartmut Penner for work on the s390 port.
56859
56860   * Paul Petersen wrote the machine description for the Alliant FX/8.
56861
56862   * Alexandre Petit-Bianco for implementing much of the Java compiler
56863     and continued Java maintainership.
56864
56865   * Matthias Pfaller for major improvements to the NS32k port.
56866
56867   * Gerald Pfeifer for his direction via the steering committee,
56868     pointing out lots of problems we need to solve, maintenance of the
56869     web pages, and taking care of documentation maintenance in general.
56870
56871   * Marek Polacek for his work on the C front end, the sanitizers and
56872     general bug fixing.
56873
56874   * Andrew Pinski for processing bug reports by the dozen.
56875
56876   * Ovidiu Predescu for his work on the Objective-C front end and
56877     runtime libraries.
56878
56879   * Jerry Quinn for major performance improvements in C++ formatted
56880     I/O.
56881
56882   * Ken Raeburn for various improvements to checker, MIPS ports and
56883     various cleanups in the compiler.
56884
56885   * Rolf W. Rasmussen for hacking on AWT.
56886
56887   * David Reese of Sun Microsystems contributed to the Solaris on
56888     PowerPC port.
56889
56890   * John Regehr for running automated regression testing of GCC and
56891     reporting numerous bugs.
56892
56893   * Volker Reichelt for running automated regression testing of GCC and
56894     reporting numerous bugs and for keeping up with the problem
56895     reports.
56896
56897   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
56898     hacking and developing and maintaining the Epiphany port.
56899
56900   * Loren J. Rittle for improvements to libstdc++-v3 including the
56901     FreeBSD port, threading fixes, thread-related configury changes,
56902     critical threading documentation, and solutions to really tricky
56903     I/O problems, as well as keeping GCC properly working on FreeBSD
56904     and continuous testing.
56905
56906   * Craig Rodrigues for processing tons of bug reports.
56907
56908   * Ola Ro"nnerup for work on mt_alloc.
56909
56910   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
56911
56912   * David Ronis inspired and encouraged Craig to rewrite the G77
56913     documentation in texinfo format by contributing a first pass at a
56914     translation of the old 'g77-0.5.16/f/DOC' file.
56915
56916   * Ken Rose for fixes to GCC's delay slot filling code.
56917
56918   * Ira Rosen for her contributions to the auto-vectorizer.
56919
56920   * Paul Rubin wrote most of the preprocessor.
56921
56922   * Pe'tur Runo'lfsson for major performance improvements in C++
56923     formatted I/O and large file support in C++ filebuf.
56924
56925   * Chip Salzenberg for libstdc++ patches and improvements to locales,
56926     traits, Makefiles, libio, libtool hackery, and "long long" support.
56927
56928   * Juha Sarlin for improvements to the H8 code generator.
56929
56930   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
56931     300.
56932
56933   * Roger Sayle for improvements to constant folding and GCC's RTL
56934     optimizers as well as for fixing numerous bugs.
56935
56936   * Bradley Schatz for his work on the GCJ FAQ.
56937
56938   * Peter Schauer wrote the code to allow debugging to work on the
56939     Alpha.
56940
56941   * William Schelter did most of the work on the Intel 80386 support.
56942
56943   * Tobias Schlu"ter for work on GNU Fortran.
56944
56945   * Bernd Schmidt for various code generation improvements and major
56946     work in the reload pass, serving as release manager for GCC 2.95.3,
56947     and work on the Blackfin and C6X ports.
56948
56949   * Peter Schmid for constant testing of libstdc++--especially
56950     application testing, going above and beyond what was requested for
56951     the release criteria--and libstdc++ header file tweaks.
56952
56953   * Jason Schroeder for jcf-dump patches.
56954
56955   * Andreas Schwab for his work on the m68k port.
56956
56957   * Lars Segerlund for work on GNU Fortran.
56958
56959   * Dodji Seketeli for numerous C++ bug fixes and debug info
56960     improvements.
56961
56962   * Tim Shen for major work on '<regex>'.
56963
56964   * Joel Sherrill for his direction via the steering committee, RTEMS
56965     contributions and RTEMS testing.
56966
56967   * Nathan Sidwell for many C++ fixes/improvements.
56968
56969   * Jeffrey Siegal for helping RMS with the original design of GCC,
56970     some code which handles the parse tree and RTL data structures,
56971     constant folding and help with the original VAX & m68k ports.
56972
56973   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
56974     from the LWG (thereby keeping GCC in line with updates from the
56975     ISO).
56976
56977   * Franz Sirl for his ongoing work with making the PPC port stable for
56978     GNU/Linux.
56979
56980   * Andrey Slepuhin for assorted AIX hacking.
56981
56982   * Trevor Smigiel for contributing the SPU port.
56983
56984   * Christopher Smith did the port for Convex machines.
56985
56986   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
56987     Retired from GCC maintainership August 2010, having mentored two
56988     new maintainers into the role.
56989
56990   * Randy Smith finished the Sun FPA support.
56991
56992   * Ed Smith-Rowland for his continuous work on libstdc++-v3, special
56993     functions, '<random>', and various improvements to C++11 features.
56994
56995   * Scott Snyder for queue, iterator, istream, and string fixes and
56996     libstdc++ testsuite entries.  Also for providing the patch to G77
56997     to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and
56998     'LOGICAL*1'.
56999
57000   * Zdenek Sojka for running automated regression testing of GCC and
57001     reporting numerous bugs.
57002
57003   * Arseny Solokha for running automated regression testing of GCC and
57004     reporting numerous bugs.
57005
57006   * Jayant Sonar for contributing the CR16 port.
57007
57008   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
57009
57010   * Richard Stallman, for writing the original GCC and launching the
57011     GNU project.
57012
57013   * Jan Stein of the Chalmers Computer Society provided support for
57014     Genix, as well as part of the 32000 machine description.
57015
57016   * Gerhard Steinmetz for running automated regression testing of GCC
57017     and reporting numerous bugs.
57018
57019   * Nigel Stephens for various mips16 related fixes/improvements.
57020
57021   * Jonathan Stone wrote the machine description for the Pyramid
57022     computer.
57023
57024   * Graham Stott for various infrastructure improvements.
57025
57026   * John Stracke for his Java HTTP protocol fixes.
57027
57028   * Mike Stump for his Elxsi port, G++ contributions over the years and
57029     more recently his vxworks contributions
57030
57031   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
57032
57033   * Zhendong Su for running automated regression testing of GCC and
57034     reporting numerous bugs.
57035
57036   * Chengnian Sun for running automated regression testing of GCC and
57037     reporting numerous bugs.
57038
57039   * Shigeya Suzuki for this fixes for the bsdi platforms.
57040
57041   * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
57042     support, general configury hacking, fixincludes, etc.
57043
57044   * Holger Teutsch provided the support for the Clipper CPU.
57045
57046   * Gary Thomas for his ongoing work to make the PPC work for
57047     GNU/Linux.
57048
57049   * Paul Thomas for contributions to GNU Fortran.
57050
57051   * Philipp Thomas for random bug fixes throughout the compiler
57052
57053   * Jason Thorpe for thread support in libstdc++ on NetBSD.
57054
57055   * Kresten Krab Thorup wrote the run time support for the Objective-C
57056     language and the fantastic Java bytecode interpreter.
57057
57058   * Michael Tiemann for random bug fixes, the first instruction
57059     scheduler, initial C++ support, function integration, NS32k, SPARC
57060     and M88k machine description work, delay slot scheduling.
57061
57062   * Andreas Tobler for his work porting libgcj to Darwin.
57063
57064   * Teemu Torma for thread safe exception handling support.
57065
57066   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
57067     definitions, and of the VAX machine description.
57068
57069   * Daniel Towner and Hariharan Sandanagobalane contributed and
57070     maintain the picoChip port.
57071
57072   * Tom Tromey for internationalization support and for his many Java
57073     contributions and libgcj maintainership.
57074
57075   * Lassi Tuura for improvements to config.guess to determine HP
57076     processor types.
57077
57078   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
57079
57080   * Andy Vaught for the design and initial implementation of the GNU
57081     Fortran front end.
57082
57083   * Brent Verner for work with the libstdc++ cshadow files and their
57084     associated configure steps.
57085
57086   * Todd Vierling for contributions for NetBSD ports.
57087
57088   * Andrew Waterman for contributing the RISC-V port, as well as
57089     maintaining it.
57090
57091   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
57092     guidance and maintaining libstdc++.
57093
57094   * Dean Wakerley for converting the install documentation from HTML to
57095     texinfo in time for GCC 3.0.
57096
57097   * Krister Walfridsson for random bug fixes.
57098
57099   * Feng Wang for contributions to GNU Fortran.
57100
57101   * Stephen M. Webb for time and effort on making libstdc++ shadow
57102     files work with the tricky Solaris 8+ headers, and for pushing the
57103     build-time header tree.  Also, for starting and driving the
57104     '<regex>' effort.
57105
57106   * John Wehle for various improvements for the x86 code generator,
57107     related infrastructure improvements to help x86 code generation,
57108     value range propagation and other work, WE32k port.
57109
57110   * Ulrich Weigand for work on the s390 port.
57111
57112   * Janus Weil for contributions to GNU Fortran.
57113
57114   * Zack Weinberg for major work on cpplib and various other bug fixes.
57115
57116   * Matt Welsh for help with Linux Threads support in GCJ.
57117
57118   * Urban Widmark for help fixing java.io.
57119
57120   * Mark Wielaard for new Java library code and his work integrating
57121     with Classpath.
57122
57123   * Dale Wiles helped port GCC to the Tahoe.
57124
57125   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
57126
57127   * Jim Wilson for his direction via the steering committee, tackling
57128     hard problems in various places that nobody else wanted to work on,
57129     strength reduction and other loop optimizations.
57130
57131   * Paul Woegerer and Tal Agmon for the CRX port.
57132
57133   * Carlo Wood for various fixes.
57134
57135   * Tom Wood for work on the m88k port.
57136
57137   * Chung-Ju Wu for his work on the Andes NDS32 port.
57138
57139   * Canqun Yang for work on GNU Fortran.
57140
57141   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
57142     description for the Tron architecture (specifically, the Gmicro).
57143
57144   * Kevin Zachmann helped port GCC to the Tahoe.
57145
57146   * Ayal Zaks for Swing Modulo Scheduling (SMS).
57147
57148   * Qirun Zhang for running automated regression testing of GCC and
57149     reporting numerous bugs.
57150
57151   * Xiaoqiang Zhang for work on GNU Fortran.
57152
57153   * Gilles Zunino for help porting Java to Irix.
57154
57155 The following people are recognized for their contributions to GNAT,
57156the Ada front end of GCC:
57157   * Bernard Banner
57158
57159   * Romain Berrendonner
57160
57161   * Geert Bosch
57162
57163   * Emmanuel Briot
57164
57165   * Joel Brobecker
57166
57167   * Ben Brosgol
57168
57169   * Vincent Celier
57170
57171   * Arnaud Charlet
57172
57173   * Chien Chieng
57174
57175   * Cyrille Comar
57176
57177   * Cyrille Crozes
57178
57179   * Robert Dewar
57180
57181   * Gary Dismukes
57182
57183   * Robert Duff
57184
57185   * Ed Falis
57186
57187   * Ramon Fernandez
57188
57189   * Sam Figueroa
57190
57191   * Vasiliy Fofanov
57192
57193   * Michael Friess
57194
57195   * Franco Gasperoni
57196
57197   * Ted Giering
57198
57199   * Matthew Gingell
57200
57201   * Laurent Guerby
57202
57203   * Jerome Guitton
57204
57205   * Olivier Hainque
57206
57207   * Jerome Hugues
57208
57209   * Hristian Kirtchev
57210
57211   * Jerome Lambourg
57212
57213   * Bruno Leclerc
57214
57215   * Albert Lee
57216
57217   * Sean McNeil
57218
57219   * Javier Miranda
57220
57221   * Laurent Nana
57222
57223   * Pascal Obry
57224
57225   * Dong-Ik Oh
57226
57227   * Laurent Pautet
57228
57229   * Brett Porter
57230
57231   * Thomas Quinot
57232
57233   * Nicolas Roche
57234
57235   * Pat Rogers
57236
57237   * Jose Ruiz
57238
57239   * Douglas Rupp
57240
57241   * Sergey Rybin
57242
57243   * Gail Schenker
57244
57245   * Ed Schonberg
57246
57247   * Nicolas Setton
57248
57249   * Samuel Tardieu
57250
57251 The following people are recognized for their contributions of new
57252features, bug reports, testing and integration of classpath/libgcj for
57253GCC version 4.1:
57254   * Lillian Angel for 'JTree' implementation and lots Free Swing
57255     additions and bug fixes.
57256
57257   * Wolfgang Baer for 'GapContent' bug fixes.
57258
57259   * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse
57260     event fixes, lots of Free Swing work including 'JTable' editing.
57261
57262   * Stuart Ballard for RMI constant fixes.
57263
57264   * Goffredo Baroncelli for 'HTTPURLConnection' fixes.
57265
57266   * Gary Benson for 'MessageFormat' fixes.
57267
57268   * Daniel Bonniot for 'Serialization' fixes.
57269
57270   * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX'
57271     and 'DOM xml:id' support.
57272
57273   * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes.
57274
57275   * Archie Cobbs for build fixes, VM interface updates,
57276     'URLClassLoader' updates.
57277
57278   * Kelley Cook for build fixes.
57279
57280   * Martin Cordova for Suggestions for better 'SocketTimeoutException'.
57281
57282   * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and
57283     improvements.
57284
57285   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
57286     2D support.  Lots of imageio framework additions, lots of AWT and
57287     Free Swing bug fixes.
57288
57289   * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization
57290     fixes, better 'Proxy' support, bug fixes and IKVM integration.
57291
57292   * Santiago Gala for 'AccessControlContext' fixes.
57293
57294   * Nicolas Geoffray for 'VMClassLoader' and 'AccessController'
57295     improvements.
57296
57297   * David Gilbert for 'basic' and 'metal' icon and plaf support and
57298     lots of documenting, Lots of Free Swing and metal theme additions.
57299     'MetalIconFactory' implementation.
57300
57301   * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers.
57302
57303   * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj
57304     build speedups.
57305
57306   * Kim Ho for 'JFileChooser' implementation.
57307
57308   * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates,
57309     'Serialization' fixes, 'Properties' XML support and generic branch
57310     work, VMIntegration guide update.
57311
57312   * Bastiaan Huisman for 'TimeZone' bug fixing.
57313
57314   * Andreas Jaeger for mprec updates.
57315
57316   * Paul Jenner for better '-Werror' support.
57317
57318   * Ito Kazumitsu for 'NetworkInterface' implementation and updates.
57319
57320   * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus
57321     bug fixes all over.  Lots of Free Swing work including styled text.
57322
57323   * Simon Kitching for 'String' cleanups and optimization suggestions.
57324
57325   * Michael Koch for configuration fixes, 'Locale' updates, bug and
57326     build fixes.
57327
57328   * Guilhem Lavaux for configuration, thread and channel fixes and
57329     Kaffe integration.  JCL native 'Pointer' updates.  Logger bug
57330     fixes.
57331
57332   * David Lichteblau for JCL support library global/local reference
57333     cleanups.
57334
57335   * Aaron Luchko for JDWP updates and documentation fixes.
57336
57337   * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex
57338     features.
57339
57340   * Sven de Marothy for BMP imageio support, CSS and 'TextLayout'
57341     fixes.  'GtkImage' rewrite, 2D, awt, free swing and date/time fixes
57342     and implementing the Qt4 peers.
57343
57344   * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock,
57345     'SystemLogger' and 'FileHandler' rotate implementations, NIO
57346     'FileChannel.map' support, security and policy updates.
57347
57348   * Bryce McKinlay for RMI work.
57349
57350   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
57351     testing and documenting.
57352
57353   * Kalle Olavi Niemitalo for build fixes.
57354
57355   * Rainer Orth for build fixes.
57356
57357   * Andrew Overholt for 'File' locking fixes.
57358
57359   * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates.
57360
57361   * Olga Rodimina for 'MenuSelectionManager' implementation.
57362
57363   * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes.
57364
57365   * Julian Scheid for documentation updates and gjdoc support.
57366
57367   * Christian Schlichtherle for zip fixes and cleanups.
57368
57369   * Robert Schuster for documentation updates and beans fixes,
57370     'TreeNode' enumerations and 'ActionCommand' and various fixes, XML
57371     and URL, AWT and Free Swing bug fixes.
57372
57373   * Keith Seitz for lots of JDWP work.
57374
57375   * Christian Thalinger for 64-bit cleanups, Configuration and VM
57376     interface fixes and 'CACAO' integration, 'fdlibm' updates.
57377
57378   * Gael Thomas for 'VMClassLoader' boot packages support suggestions.
57379
57380   * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4'
57381     support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates.
57382
57383   * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe
57384     integration.  'Qt4' build infrastructure, 'SHA1PRNG' and
57385     'GdkPixbugDecoder' updates.
57386
57387   * Tom Tromey for Eclipse integration, generics work, lots of bug
57388     fixes and gcj integration including coordinating The Big Merge.
57389
57390   * Mark Wielaard for bug fixes, packaging and release management,
57391     'Clipboard' implementation, system call interrupts and network
57392     timeouts and 'GdkPixpufDecoder' fixes.
57393
57394 In addition to the above, all of which also contributed time and energy
57395in testing GCC, we would like to thank the following for their
57396contributions to testing:
57397
57398   * Michael Abd-El-Malek
57399
57400   * Thomas Arend
57401
57402   * Bonzo Armstrong
57403
57404   * Steven Ashe
57405
57406   * Chris Baldwin
57407
57408   * David Billinghurst
57409
57410   * Jim Blandy
57411
57412   * Stephane Bortzmeyer
57413
57414   * Horst von Brand
57415
57416   * Frank Braun
57417
57418   * Rodney Brown
57419
57420   * Sidney Cadot
57421
57422   * Bradford Castalia
57423
57424   * Robert Clark
57425
57426   * Jonathan Corbet
57427
57428   * Ralph Doncaster
57429
57430   * Richard Emberson
57431
57432   * Levente Farkas
57433
57434   * Graham Fawcett
57435
57436   * Mark Fernyhough
57437
57438   * Robert A. French
57439
57440   * Jo"rgen Freyh
57441
57442   * Mark K. Gardner
57443
57444   * Charles-Antoine Gauthier
57445
57446   * Yung Shing Gene
57447
57448   * David Gilbert
57449
57450   * Simon Gornall
57451
57452   * Fred Gray
57453
57454   * John Griffin
57455
57456   * Patrik Hagglund
57457
57458   * Phil Hargett
57459
57460   * Amancio Hasty
57461
57462   * Takafumi Hayashi
57463
57464   * Bryan W. Headley
57465
57466   * Kevin B. Hendricks
57467
57468   * Joep Jansen
57469
57470   * Christian Joensson
57471
57472   * Michel Kern
57473
57474   * David Kidd
57475
57476   * Tobias Kuipers
57477
57478   * Anand Krishnaswamy
57479
57480   * A. O. V. Le Blanc
57481
57482   * llewelly
57483
57484   * Damon Love
57485
57486   * Brad Lucier
57487
57488   * Matthias Klose
57489
57490   * Martin Knoblauch
57491
57492   * Rick Lutowski
57493
57494   * Jesse Macnish
57495
57496   * Stefan Morrell
57497
57498   * Anon A. Mous
57499
57500   * Matthias Mueller
57501
57502   * Pekka Nikander
57503
57504   * Rick Niles
57505
57506   * Jon Olson
57507
57508   * Magnus Persson
57509
57510   * Chris Pollard
57511
57512   * Richard Polton
57513
57514   * Derk Reefman
57515
57516   * David Rees
57517
57518   * Paul Reilly
57519
57520   * Tom Reilly
57521
57522   * Torsten Rueger
57523
57524   * Danny Sadinoff
57525
57526   * Marc Schifer
57527
57528   * Erik Schnetter
57529
57530   * Wayne K. Schroll
57531
57532   * David Schuler
57533
57534   * Vin Shelton
57535
57536   * Tim Souder
57537
57538   * Adam Sulmicki
57539
57540   * Bill Thorson
57541
57542   * George Talbot
57543
57544   * Pedro A. M. Vazquez
57545
57546   * Gregory Warnes
57547
57548   * Ian Watson
57549
57550   * David E. Young
57551
57552   * And many others
57553
57554 And finally we'd like to thank everyone who uses the compiler, provides
57555feedback and generally reminds us why we're doing this work in the first
57556place.
57557
57558
57559File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
57560
57561Option Index
57562************
57563
57564GCC's command line options are indexed here without any initial '-' or
57565'--'.  Where an option has both positive and negative forms (such as
57566'-fOPTION' and '-fno-OPTION'), relevant entries in the manual are
57567indexed under the most appropriate form; it may sometimes be useful to
57568look up both forms.
57569
57570�[index�]
57571* Menu:
57572
57573* ###:                                   Overall Options.    (line  204)
57574* -fipa-bit-cp:                          Optimize Options.   (line 1025)
57575* -fipa-vrp:                             Optimize Options.   (line 1030)
57576* -mfunction-return:                     x86 Options.        (line 1305)
57577* -mindirect-branch:                     x86 Options.        (line 1286)
57578* -mindirect-branch-register:            x86 Options.        (line 1320)
57579* -mlow-precision-div:                   AArch64 Options.    (line  103)
57580* -mlow-precision-sqrt:                  AArch64 Options.    (line   94)
57581* -mno-low-precision-div:                AArch64 Options.    (line  103)
57582* -mno-low-precision-sqrt:               AArch64 Options.    (line   94)
57583* -Wabi-tag:                             C++ Dialect Options.
57584                                                             (line  559)
57585* -Wno-scalar-storage-order:             Warning Options.    (line 2230)
57586* -Wscalar-storage-order:                Warning Options.    (line 2230)
57587* 80387:                                 x86 Options.        (line  465)
57588* A:                                     Preprocessor Options.
57589                                                             (line  328)
57590* allowable_client:                      Darwin Options.     (line  196)
57591* all_load:                              Darwin Options.     (line  110)
57592* ansi:                                  Standards.          (line   13)
57593* ansi <1>:                              C Dialect Options.  (line   11)
57594* ansi <2>:                              Other Builtins.     (line   31)
57595* ansi <3>:                              Non-bugs.           (line  107)
57596* arch_errors_fatal:                     Darwin Options.     (line  114)
57597* aux-info:                              C Dialect Options.  (line  217)
57598* B:                                     Directory Options.  (line  122)
57599* Bdynamic:                              VxWorks Options.    (line   22)
57600* bind_at_load:                          Darwin Options.     (line  118)
57601* Bstatic:                               VxWorks Options.    (line   22)
57602* bundle:                                Darwin Options.     (line  123)
57603* bundle_loader:                         Darwin Options.     (line  127)
57604* c:                                     Overall Options.    (line  159)
57605* C:                                     Preprocessor Options.
57606                                                             (line  337)
57607* c <1>:                                 Link Options.       (line   20)
57608* CC:                                    Preprocessor Options.
57609                                                             (line  349)
57610* client_name:                           Darwin Options.     (line  196)
57611* compatibility_version:                 Darwin Options.     (line  196)
57612* coverage:                              Instrumentation Options.
57613                                                             (line   51)
57614* current_version:                       Darwin Options.     (line  196)
57615* D:                                     Preprocessor Options.
57616                                                             (line   19)
57617* d:                                     Preprocessor Options.
57618                                                             (line  403)
57619* d <1>:                                 Developer Options.  (line   18)
57620* da:                                    Developer Options.  (line  225)
57621* dA:                                    Developer Options.  (line  228)
57622* dD:                                    Preprocessor Options.
57623                                                             (line  427)
57624* dD <1>:                                Developer Options.  (line  232)
57625* dead_strip:                            Darwin Options.     (line  196)
57626* dependency-file:                       Darwin Options.     (line  196)
57627* dH:                                    Developer Options.  (line  236)
57628* dI:                                    Preprocessor Options.
57629                                                             (line  437)
57630* dM:                                    Preprocessor Options.
57631                                                             (line  412)
57632* dN:                                    Preprocessor Options.
57633                                                             (line  433)
57634* dp:                                    Developer Options.  (line  239)
57635* dP:                                    Developer Options.  (line  244)
57636* dU:                                    Preprocessor Options.
57637                                                             (line  441)
57638* dumpfullversion:                       Developer Options.  (line  951)
57639* dumpmachine:                           Developer Options.  (line  939)
57640* dumpspecs:                             Developer Options.  (line  955)
57641* dumpversion:                           Developer Options.  (line  943)
57642* dx:                                    Developer Options.  (line  248)
57643* dylib_file:                            Darwin Options.     (line  196)
57644* dylinker_install_name:                 Darwin Options.     (line  196)
57645* dynamic:                               Darwin Options.     (line  196)
57646* dynamiclib:                            Darwin Options.     (line  131)
57647* E:                                     Overall Options.    (line  180)
57648* E <1>:                                 Link Options.       (line   20)
57649* EB:                                    ARC Options.        (line  589)
57650* EB <1>:                                MIPS Options.       (line    7)
57651* EL:                                    ARC Options.        (line  598)
57652* EL <1>:                                MIPS Options.       (line   10)
57653* exported_symbols_list:                 Darwin Options.     (line  196)
57654* F:                                     Darwin Options.     (line   31)
57655* fabi-compat-version:                   C++ Dialect Options.
57656                                                             (line   85)
57657* fabi-version:                          C++ Dialect Options.
57658                                                             (line   24)
57659* fada-spec-parent:                      Overall Options.    (line  384)
57660* faggressive-loop-optimizations:        Optimize Options.   (line  523)
57661* falign-functions:                      Optimize Options.   (line 1536)
57662* falign-jumps:                          Optimize Options.   (line 1594)
57663* falign-labels:                         Optimize Options.   (line 1561)
57664* falign-loops:                          Optimize Options.   (line 1580)
57665* faligned-new:                          C++ Dialect Options.
57666                                                             (line  105)
57667* fallow-parameterless-variadic-functions: C Dialect Options.
57668                                                             (line  233)
57669* fasan-shadow-offset:                   Instrumentation Options.
57670                                                             (line  380)
57671* fassociative-math:                     Optimize Options.   (line 2076)
57672* fasynchronous-unwind-tables:           Code Gen Options.   (line  156)
57673* fauto-inc-dec:                         Optimize Options.   (line  545)
57674* fauto-profile:                         Optimize Options.   (line 1955)
57675* fbounds-check:                         Instrumentation Options.
57676                                                             (line  453)
57677* fbranch-probabilities:                 Optimize Options.   (line 2221)
57678* fbranch-target-load-optimize:          Optimize Options.   (line 2357)
57679* fbranch-target-load-optimize2:         Optimize Options.   (line 2363)
57680* fbtr-bb-exclusive:                     Optimize Options.   (line 2367)
57681* fcall-saved:                           Code Gen Options.   (line  454)
57682* fcall-used:                            Code Gen Options.   (line  440)
57683* fcaller-saves:                         Optimize Options.   (line  903)
57684* fcf-protection:                        Instrumentation Options.
57685                                                             (line  581)
57686* fcheck-new:                            C++ Dialect Options.
57687                                                             (line  114)
57688* fcheck-pointer-bounds:                 Instrumentation Options.
57689                                                             (line  459)
57690* fchecking:                             Developer Options.  (line  633)
57691* fchkp-check-incomplete-type:           Instrumentation Options.
57692                                                             (line  497)
57693* fchkp-check-read:                      Instrumentation Options.
57694                                                             (line  553)
57695* fchkp-check-write:                     Instrumentation Options.
57696                                                             (line  557)
57697* fchkp-first-field-has-own-bounds:      Instrumentation Options.
57698                                                             (line  508)
57699* fchkp-flexible-struct-trailing-arrays: Instrumentation Options.
57700                                                             (line  514)
57701* fchkp-instrument-calls:                Instrumentation Options.
57702                                                             (line  565)
57703* fchkp-instrument-marked-only:          Instrumentation Options.
57704                                                             (line  569)
57705* fchkp-narrow-bounds:                   Instrumentation Options.
57706                                                             (line  501)
57707* fchkp-narrow-to-innermost-array:       Instrumentation Options.
57708                                                             (line  520)
57709* fchkp-optimize:                        Instrumentation Options.
57710                                                             (line  525)
57711* fchkp-store-bounds:                    Instrumentation Options.
57712                                                             (line  561)
57713* fchkp-treat-zero-dynamic-size-as-infinite: Instrumentation Options.
57714                                                             (line  546)
57715* fchkp-use-fast-string-functions:       Instrumentation Options.
57716                                                             (line  529)
57717* fchkp-use-nochk-string-functions:      Instrumentation Options.
57718                                                             (line  533)
57719* fchkp-use-static-bounds:               Instrumentation Options.
57720                                                             (line  537)
57721* fchkp-use-static-const-bounds:         Instrumentation Options.
57722                                                             (line  541)
57723* fchkp-use-wrappers:                    Instrumentation Options.
57724                                                             (line  574)
57725* fcode-hoisting:                        Optimize Options.   (line  944)
57726* fcombine-stack-adjustments:            Optimize Options.   (line  915)
57727* fcommon:                               Common Variable Attributes.
57728                                                             (line  118)
57729* fcompare-debug:                        Developer Options.  (line  727)
57730* fcompare-debug-second:                 Developer Options.  (line  753)
57731* fcompare-elim:                         Optimize Options.   (line 1908)
57732* fconcepts:                             C++ Dialect Options.
57733                                                             (line  124)
57734* fcond-mismatch:                        C Dialect Options.  (line  384)
57735* fconserve-stack:                       Optimize Options.   (line  934)
57736* fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
57737                                                             (line   30)
57738* fconstexpr-depth:                      C++ Dialect Options.
57739                                                             (line  131)
57740* fconstexpr-loop-limit:                 C++ Dialect Options.
57741                                                             (line  137)
57742* fcprop-registers:                      Optimize Options.   (line 1920)
57743* fcrossjumping:                         Optimize Options.   (line  538)
57744* fcse-follow-jumps:                     Optimize Options.   (line  459)
57745* fcse-skip-blocks:                      Optimize Options.   (line  468)
57746* fcx-fortran-rules:                     Optimize Options.   (line 2208)
57747* fcx-limited-range:                     Optimize Options.   (line 2196)
57748* fdata-sections:                        Optimize Options.   (line 2328)
57749* fdbg-cnt:                              Developer Options.  (line  863)
57750* fdbg-cnt-list:                         Developer Options.  (line  860)
57751* fdce:                                  Optimize Options.   (line  551)
57752* fdebug-cpp:                            Preprocessor Options.
57753                                                             (line  448)
57754* fdebug-prefix-map:                     Debugging Options.  (line  137)
57755* fdebug-types-section:                  Debugging Options.  (line  183)
57756* fdeclone-ctor-dtor:                    Optimize Options.   (line  574)
57757* fdeduce-init-list:                     C++ Dialect Options.
57758                                                             (line  142)
57759* fdelayed-branch:                       Optimize Options.   (line  727)
57760* fdelete-dead-exceptions:               Code Gen Options.   (line  141)
57761* fdelete-null-pointer-checks:           Optimize Options.   (line  585)
57762* fdevirtualize:                         Optimize Options.   (line  606)
57763* fdevirtualize-at-ltrans:               Optimize Options.   (line  623)
57764* fdevirtualize-speculatively:           Optimize Options.   (line  613)
57765* fdiagnostics-color:                    Diagnostic Message Formatting Options.
57766                                                             (line   35)
57767* fdiagnostics-generate-patch:           Diagnostic Message Formatting Options.
57768                                                             (line  160)
57769* fdiagnostics-parseable-fixits:         Diagnostic Message Formatting Options.
57770                                                             (line  133)
57771* fdiagnostics-show-caret:               Diagnostic Message Formatting Options.
57772                                                             (line  124)
57773* fdiagnostics-show-location:            Diagnostic Message Formatting Options.
57774                                                             (line   20)
57775* fdiagnostics-show-option:              Diagnostic Message Formatting Options.
57776                                                             (line  118)
57777* fdiagnostics-show-template-tree:       Diagnostic Message Formatting Options.
57778                                                             (line  178)
57779* fdirectives-only:                      Preprocessor Options.
57780                                                             (line  202)
57781* fdisable-:                             Developer Options.  (line  564)
57782* fdollars-in-identifiers:               Preprocessor Options.
57783                                                             (line  223)
57784* fdollars-in-identifiers <1>:           Interoperation.     (line  141)
57785* fdpic:                                 SH Options.         (line  388)
57786* fdse:                                  Optimize Options.   (line  555)
57787* fdump-ada-spec:                        Overall Options.    (line  379)
57788* fdump-final-insns:                     Developer Options.  (line  721)
57789* fdump-go-spec:                         Overall Options.    (line  388)
57790* fdump-ipa:                             Developer Options.  (line  273)
57791* fdump-lang:                            Developer Options.  (line  293)
57792* fdump-lang-all:                        Developer Options.  (line  293)
57793* fdump-noaddr:                          Developer Options.  (line  252)
57794* fdump-passes:                          Developer Options.  (line  311)
57795* fdump-rtl-alignments:                  Developer Options.  (line   44)
57796* fdump-rtl-all:                         Developer Options.  (line  225)
57797* fdump-rtl-asmcons:                     Developer Options.  (line   47)
57798* fdump-rtl-auto_inc_dec:                Developer Options.  (line   51)
57799* fdump-rtl-barriers:                    Developer Options.  (line   55)
57800* fdump-rtl-bbpart:                      Developer Options.  (line   58)
57801* fdump-rtl-bbro:                        Developer Options.  (line   61)
57802* fdump-rtl-btl2:                        Developer Options.  (line   65)
57803* fdump-rtl-btl2 <1>:                    Developer Options.  (line   65)
57804* fdump-rtl-bypass:                      Developer Options.  (line   69)
57805* fdump-rtl-ce1:                         Developer Options.  (line   80)
57806* fdump-rtl-ce2:                         Developer Options.  (line   80)
57807* fdump-rtl-ce3:                         Developer Options.  (line   80)
57808* fdump-rtl-combine:                     Developer Options.  (line   72)
57809* fdump-rtl-compgotos:                   Developer Options.  (line   75)
57810* fdump-rtl-cprop_hardreg:               Developer Options.  (line   84)
57811* fdump-rtl-csa:                         Developer Options.  (line   87)
57812* fdump-rtl-cse1:                        Developer Options.  (line   91)
57813* fdump-rtl-cse2:                        Developer Options.  (line   91)
57814* fdump-rtl-dbr:                         Developer Options.  (line   98)
57815* fdump-rtl-dce:                         Developer Options.  (line   95)
57816* fdump-rtl-dce1:                        Developer Options.  (line  102)
57817* fdump-rtl-dce2:                        Developer Options.  (line  102)
57818* fdump-rtl-dfinish:                     Developer Options.  (line  221)
57819* fdump-rtl-dfinit:                      Developer Options.  (line  221)
57820* fdump-rtl-eh:                          Developer Options.  (line  106)
57821* fdump-rtl-eh_ranges:                   Developer Options.  (line  109)
57822* fdump-rtl-expand:                      Developer Options.  (line  112)
57823* fdump-rtl-fwprop1:                     Developer Options.  (line  116)
57824* fdump-rtl-fwprop2:                     Developer Options.  (line  116)
57825* fdump-rtl-gcse1:                       Developer Options.  (line  121)
57826* fdump-rtl-gcse2:                       Developer Options.  (line  121)
57827* fdump-rtl-init-regs:                   Developer Options.  (line  125)
57828* fdump-rtl-initvals:                    Developer Options.  (line  128)
57829* fdump-rtl-into_cfglayout:              Developer Options.  (line  131)
57830* fdump-rtl-ira:                         Developer Options.  (line  134)
57831* fdump-rtl-jump:                        Developer Options.  (line  137)
57832* fdump-rtl-loop2:                       Developer Options.  (line  140)
57833* fdump-rtl-mach:                        Developer Options.  (line  144)
57834* fdump-rtl-mode_sw:                     Developer Options.  (line  148)
57835* fdump-rtl-outof_cfglayout:             Developer Options.  (line  154)
57836* fdump-rtl-PASS:                        Developer Options.  (line   18)
57837* fdump-rtl-peephole2:                   Developer Options.  (line  157)
57838* fdump-rtl-postreload:                  Developer Options.  (line  160)
57839* fdump-rtl-pro_and_epilogue:            Developer Options.  (line  163)
57840* fdump-rtl-ree:                         Developer Options.  (line  171)
57841* fdump-rtl-regclass:                    Developer Options.  (line  221)
57842* fdump-rtl-rnreg:                       Developer Options.  (line  151)
57843* fdump-rtl-sched1:                      Developer Options.  (line  167)
57844* fdump-rtl-sched2:                      Developer Options.  (line  167)
57845* fdump-rtl-seqabstr:                    Developer Options.  (line  174)
57846* fdump-rtl-shorten:                     Developer Options.  (line  177)
57847* fdump-rtl-sibling:                     Developer Options.  (line  180)
57848* fdump-rtl-sms:                         Developer Options.  (line  191)
57849* fdump-rtl-split1:                      Developer Options.  (line  187)
57850* fdump-rtl-split2:                      Developer Options.  (line  187)
57851* fdump-rtl-split3:                      Developer Options.  (line  187)
57852* fdump-rtl-split4:                      Developer Options.  (line  187)
57853* fdump-rtl-split5:                      Developer Options.  (line  187)
57854* fdump-rtl-stack:                       Developer Options.  (line  195)
57855* fdump-rtl-subreg1:                     Developer Options.  (line  201)
57856* fdump-rtl-subreg2:                     Developer Options.  (line  201)
57857* fdump-rtl-subregs_of_mode_finish:      Developer Options.  (line  221)
57858* fdump-rtl-subregs_of_mode_init:        Developer Options.  (line  221)
57859* fdump-rtl-unshare:                     Developer Options.  (line  205)
57860* fdump-rtl-vartrack:                    Developer Options.  (line  208)
57861* fdump-rtl-vregs:                       Developer Options.  (line  211)
57862* fdump-rtl-web:                         Developer Options.  (line  214)
57863* fdump-statistics:                      Developer Options.  (line  315)
57864* fdump-tree:                            Developer Options.  (line  328)
57865* fdump-tree-all:                        Developer Options.  (line  328)
57866* fdump-unnumbered:                      Developer Options.  (line  262)
57867* fdump-unnumbered-links:                Developer Options.  (line  268)
57868* fdwarf2-cfi-asm:                       Debugging Options.  (line  388)
57869* fearly-inlining:                       Optimize Options.   (line  304)
57870* felide-type:                           Diagnostic Message Formatting Options.
57871                                                             (line  198)
57872* feliminate-unused-debug-symbols:       Debugging Options.  (line  118)
57873* feliminate-unused-debug-types:         Debugging Options.  (line  392)
57874* femit-class-debug-always:              Debugging Options.  (line  122)
57875* femit-struct-debug-baseonly:           Debugging Options.  (line  319)
57876* femit-struct-debug-detailed:           Debugging Options.  (line  346)
57877* femit-struct-debug-reduced:            Debugging Options.  (line  332)
57878* fenable-:                              Developer Options.  (line  564)
57879* fexceptions:                           Code Gen Options.   (line  119)
57880* fexcess-precision:                     Optimize Options.   (line 2002)
57881* fexec-charset:                         Preprocessor Options.
57882                                                             (line  266)
57883* fexpensive-optimizations:              Optimize Options.   (line  630)
57884* fext-numeric-literals:                 C++ Dialect Options.
57885                                                             (line  695)
57886* fextended-identifiers:                 Preprocessor Options.
57887                                                             (line  226)
57888* fextern-tls-init:                      C++ Dialect Options.
57889                                                             (line  195)
57890* ffast-math:                            Optimize Options.   (line 2026)
57891* ffat-lto-objects:                      Optimize Options.   (line 1885)
57892* ffile-prefix-map:                      Overall Options.    (line  359)
57893* ffinite-math-only:                     Optimize Options.   (line 2103)
57894* ffix-and-continue:                     Darwin Options.     (line  104)
57895* ffixed:                                Code Gen Options.   (line  428)
57896* ffloat-store:                          Optimize Options.   (line 1988)
57897* ffloat-store <1>:                      Disappointments.    (line   77)
57898* ffor-scope:                            C++ Dialect Options.
57899                                                             (line  216)
57900* fforward-propagate:                    Optimize Options.   (line  212)
57901* ffp-contract:                          Optimize Options.   (line  221)
57902* ffreestanding:                         Standards.          (line   94)
57903* ffreestanding <1>:                     C Dialect Options.  (line  302)
57904* ffreestanding <2>:                     Warning Options.    (line  294)
57905* ffreestanding <3>:                     Common Function Attributes.
57906                                                             (line  283)
57907* ffriend-injection:                     C++ Dialect Options.
57908                                                             (line  163)
57909* ffunction-sections:                    Optimize Options.   (line 2328)
57910* fgcse:                                 Optimize Options.   (line  482)
57911* fgcse-after-reload:                    Optimize Options.   (line  518)
57912* fgcse-las:                             Optimize Options.   (line  511)
57913* fgcse-lm:                              Optimize Options.   (line  493)
57914* fgcse-sm:                              Optimize Options.   (line  502)
57915* fgimple:                               C Dialect Options.  (line  288)
57916* fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
57917                                                             (line   39)
57918* fgnu-tm:                               C Dialect Options.  (line  341)
57919* fgnu89-inline:                         C Dialect Options.  (line  178)
57920* fgraphite-identity:                    Optimize Options.   (line 1146)
57921* fhoist-adjacent-loads:                 Optimize Options.   (line  974)
57922* fhosted:                               C Dialect Options.  (line  294)
57923* fif-conversion:                        Optimize Options.   (line  559)
57924* fif-conversion2:                       Optimize Options.   (line  568)
57925* filelist:                              Darwin Options.     (line  196)
57926* findirect-data:                        Darwin Options.     (line  104)
57927* findirect-inlining:                    Optimize Options.   (line  276)
57928* finhibit-size-directive:               Code Gen Options.   (line  261)
57929* finline-functions:                     Optimize Options.   (line  285)
57930* finline-functions-called-once:         Optimize Options.   (line  296)
57931* finline-limit:                         Optimize Options.   (line  320)
57932* finline-small-functions:               Optimize Options.   (line  267)
57933* finput-charset:                        Preprocessor Options.
57934                                                             (line  279)
57935* finstrument-functions:                 Instrumentation Options.
57936                                                             (line  774)
57937* finstrument-functions <1>:             Common Function Attributes.
57938                                                             (line  543)
57939* finstrument-functions-exclude-file-list: Instrumentation Options.
57940                                                             (line  809)
57941* finstrument-functions-exclude-function-list: Instrumentation Options.
57942                                                             (line  830)
57943* fipa-cp:                               Optimize Options.   (line 1007)
57944* fipa-cp-clone:                         Optimize Options.   (line 1015)
57945* fipa-icf:                              Optimize Options.   (line 1035)
57946* fipa-profile:                          Optimize Options.   (line  999)
57947* fipa-pta:                              Optimize Options.   (line  993)
57948* fipa-pure-const:                       Optimize Options.   (line  985)
57949* fipa-ra:                               Optimize Options.   (line  921)
57950* fipa-reference:                        Optimize Options.   (line  989)
57951* fipa-sra:                              Optimize Options.   (line  313)
57952* fira-algorithm:                        Optimize Options.   (line  664)
57953* fira-hoist-pressure:                   Optimize Options.   (line  693)
57954* fira-loop-pressure:                    Optimize Options.   (line  700)
57955* fira-region:                           Optimize Options.   (line  672)
57956* fira-verbose:                          Developer Options.  (line  790)
57957* fisolate-erroneous-paths-attribute:    Optimize Options.   (line 1057)
57958* fisolate-erroneous-paths-dereference:  Optimize Options.   (line 1049)
57959* fivar-visibility:                      Objective-C and Objective-C++ Dialect Options.
57960                                                             (line  161)
57961* fivopts:                               Optimize Options.   (line 1257)
57962* fkeep-inline-functions:                Optimize Options.   (line  351)
57963* fkeep-inline-functions <1>:            Inline.             (line   51)
57964* fkeep-static-consts:                   Optimize Options.   (line  362)
57965* fkeep-static-functions:                Optimize Options.   (line  358)
57966* flat_namespace:                        Darwin Options.     (line  196)
57967* flax-vector-conversions:               C Dialect Options.  (line  389)
57968* fleading-underscore:                   Code Gen Options.   (line  484)
57969* flive-range-shrinkage:                 Optimize Options.   (line  659)
57970* flocal-ivars:                          Objective-C and Objective-C++ Dialect Options.
57971                                                             (line  152)
57972* floop-block:                           Optimize Options.   (line 1140)
57973* floop-interchange:                     Optimize Options.   (line 1220)
57974* floop-nest-optimize:                   Optimize Options.   (line 1154)
57975* floop-parallelize-all:                 Optimize Options.   (line 1160)
57976* floop-strip-mine:                      Optimize Options.   (line 1140)
57977* floop-unroll-and-jam:                  Optimize Options.   (line 1236)
57978* flra-remat:                            Optimize Options.   (line  720)
57979* flto:                                  Optimize Options.   (line 1649)
57980* flto-compression-level:                Optimize Options.   (line 1859)
57981* flto-odr-type-merging:                 Optimize Options.   (line 1854)
57982* flto-partition:                        Optimize Options.   (line 1840)
57983* flto-report:                           Developer Options.  (line  796)
57984* flto-report-wpa:                       Developer Options.  (line  804)
57985* fmacro-prefix-map:                     Preprocessor Options.
57986                                                             (line  257)
57987* fmax-errors:                           Warning Options.    (line   18)
57988* fmem-report:                           Developer Options.  (line  808)
57989* fmem-report-wpa:                       Developer Options.  (line  812)
57990* fmerge-all-constants:                  Optimize Options.   (line  381)
57991* fmerge-constants:                      Optimize Options.   (line  371)
57992* fmerge-debug-strings:                  Debugging Options.  (line  130)
57993* fmessage-length:                       Diagnostic Message Formatting Options.
57994                                                             (line   14)
57995* fmodulo-sched:                         Optimize Options.   (line  392)
57996* fmodulo-sched-allow-regmoves:          Optimize Options.   (line  397)
57997* fmove-loop-invariants:                 Optimize Options.   (line 2314)
57998* fms-extensions:                        C Dialect Options.  (line  356)
57999* fms-extensions <1>:                    C++ Dialect Options.
58000                                                             (line  250)
58001* fms-extensions <2>:                    Unnamed Fields.     (line   36)
58002* fnew-inheriting-ctors:                 C++ Dialect Options.
58003                                                             (line  255)
58004* fnew-ttp-matching:                     C++ Dialect Options.
58005                                                             (line  261)
58006* fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
58007                                                             (line   43)
58008* fno-access-control:                    C++ Dialect Options.
58009                                                             (line  101)
58010* fno-asm:                               C Dialect Options.  (line  240)
58011* fno-branch-count-reg:                  Optimize Options.   (line  404)
58012* fno-builtin:                           C Dialect Options.  (line  254)
58013* fno-builtin <1>:                       Warning Options.    (line  294)
58014* fno-builtin <2>:                       Common Function Attributes.
58015                                                             (line  283)
58016* fno-builtin <3>:                       Other Builtins.     (line   21)
58017* fno-canonical-system-headers:          Preprocessor Options.
58018                                                             (line  230)
58019* fno-check-pointer-bounds:              Instrumentation Options.
58020                                                             (line  459)
58021* fno-checking:                          Developer Options.  (line  633)
58022* fno-chkp-check-incomplete-type:        Instrumentation Options.
58023                                                             (line  497)
58024* fno-chkp-check-read:                   Instrumentation Options.
58025                                                             (line  553)
58026* fno-chkp-check-write:                  Instrumentation Options.
58027                                                             (line  557)
58028* fno-chkp-first-field-has-own-bounds:   Instrumentation Options.
58029                                                             (line  508)
58030* fno-chkp-flexible-struct-trailing-arrays: Instrumentation Options.
58031                                                             (line  514)
58032* fno-chkp-instrument-calls:             Instrumentation Options.
58033                                                             (line  565)
58034* fno-chkp-instrument-marked-only:       Instrumentation Options.
58035                                                             (line  569)
58036* fno-chkp-narrow-bounds:                Instrumentation Options.
58037                                                             (line  501)
58038* fno-chkp-narrow-to-innermost-array:    Instrumentation Options.
58039                                                             (line  520)
58040* fno-chkp-optimize:                     Instrumentation Options.
58041                                                             (line  525)
58042* fno-chkp-store-bounds:                 Instrumentation Options.
58043                                                             (line  561)
58044* fno-chkp-treat-zero-dynamic-size-as-infinite: Instrumentation Options.
58045                                                             (line  546)
58046* fno-chkp-use-fast-string-functions:    Instrumentation Options.
58047                                                             (line  529)
58048* fno-chkp-use-nochk-string-functions:   Instrumentation Options.
58049                                                             (line  533)
58050* fno-chkp-use-static-bounds:            Instrumentation Options.
58051                                                             (line  537)
58052* fno-chkp-use-static-const-bounds:      Instrumentation Options.
58053                                                             (line  541)
58054* fno-chkp-use-wrappers:                 Instrumentation Options.
58055                                                             (line  574)
58056* fno-common:                            Code Gen Options.   (line  231)
58057* fno-common <1>:                        Common Variable Attributes.
58058                                                             (line  118)
58059* fno-compare-debug:                     Developer Options.  (line  727)
58060* fno-debug-types-section:               Debugging Options.  (line  183)
58061* fno-default-inline:                    Inline.             (line   68)
58062* fno-defer-pop:                         Optimize Options.   (line  204)
58063* fno-diagnostics-show-caret:            Diagnostic Message Formatting Options.
58064                                                             (line  124)
58065* fno-diagnostics-show-option:           Diagnostic Message Formatting Options.
58066                                                             (line  118)
58067* fno-dwarf2-cfi-asm:                    Debugging Options.  (line  388)
58068* fno-elide-constructors:                C++ Dialect Options.
58069                                                             (line  174)
58070* fno-elide-type:                        Diagnostic Message Formatting Options.
58071                                                             (line  198)
58072* fno-eliminate-unused-debug-types:      Debugging Options.  (line  392)
58073* fno-enforce-eh-specs:                  C++ Dialect Options.
58074                                                             (line  185)
58075* fno-ext-numeric-literals:              C++ Dialect Options.
58076                                                             (line  695)
58077* fno-extern-tls-init:                   C++ Dialect Options.
58078                                                             (line  195)
58079* fno-for-scope:                         C++ Dialect Options.
58080                                                             (line  216)
58081* fno-fp-int-builtin-inexact:            Optimize Options.   (line 2175)
58082* fno-function-cse:                      Optimize Options.   (line  419)
58083* fno-gnu-keywords:                      C++ Dialect Options.
58084                                                             (line  227)
58085* fno-gnu-unique:                        Code Gen Options.   (line  162)
58086* fno-guess-branch-probability:          Optimize Options.   (line 1425)
58087* fno-ident:                             Code Gen Options.   (line  258)
58088* fno-implement-inlines:                 C++ Dialect Options.
58089                                                             (line  245)
58090* fno-implement-inlines <1>:             C++ Interface.      (line   66)
58091* fno-implicit-inline-templates:         C++ Dialect Options.
58092                                                             (line  239)
58093* fno-implicit-templates:                C++ Dialect Options.
58094                                                             (line  233)
58095* fno-implicit-templates <1>:            Template Instantiation.
58096                                                             (line  118)
58097* fno-inline:                            Optimize Options.   (line  259)
58098* fno-ira-share-save-slots:              Optimize Options.   (line  708)
58099* fno-ira-share-spill-slots:             Optimize Options.   (line  714)
58100* fno-jump-tables:                       Code Gen Options.   (line  420)
58101* fno-keep-inline-dllexport:             Optimize Options.   (line  345)
58102* fno-lifetime-dse:                      Optimize Options.   (line  644)
58103* fno-local-ivars:                       Objective-C and Objective-C++ Dialect Options.
58104                                                             (line  152)
58105* fno-math-errno:                        Optimize Options.   (line 2040)
58106* fno-merge-debug-strings:               Debugging Options.  (line  130)
58107* fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
58108                                                             (line   49)
58109* fno-nonansi-builtins:                  C++ Dialect Options.
58110                                                             (line  268)
58111* fno-operator-names:                    C++ Dialect Options.
58112                                                             (line  284)
58113* fno-optional-diags:                    C++ Dialect Options.
58114                                                             (line  288)
58115* fno-peephole:                          Optimize Options.   (line 1416)
58116* fno-peephole2:                         Optimize Options.   (line 1416)
58117* fno-plt:                               Code Gen Options.   (line  402)
58118* fno-pretty-templates:                  C++ Dialect Options.
58119                                                             (line  298)
58120* fno-printf-return-value:               Optimize Options.   (line 1393)
58121* fno-rtti:                              C++ Dialect Options.
58122                                                             (line  315)
58123* fno-sanitize-recover:                  Instrumentation Options.
58124                                                             (line  389)
58125* fno-sanitize=all:                      Instrumentation Options.
58126                                                             (line  374)
58127* fno-sched-interblock:                  Optimize Options.   (line  753)
58128* fno-sched-spec:                        Optimize Options.   (line  758)
58129* fno-set-stack-executable:              x86 Windows Options.
58130                                                             (line   46)
58131* fno-show-column:                       Diagnostic Message Formatting Options.
58132                                                             (line  210)
58133* fno-signed-bitfields:                  C Dialect Options.  (line  422)
58134* fno-signed-zeros:                      Optimize Options.   (line 2115)
58135* fno-stack-limit:                       Instrumentation Options.
58136                                                             (line  686)
58137* fno-threadsafe-statics:                C++ Dialect Options.
58138                                                             (line  365)
58139* fno-toplevel-reorder:                  Optimize Options.   (line 1615)
58140* fno-trapping-math:                     Optimize Options.   (line 2125)
58141* fno-unsigned-bitfields:                C Dialect Options.  (line  422)
58142* fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
58143                                                             (line  378)
58144* fno-var-tracking-assignments:          Debugging Options.  (line  157)
58145* fno-var-tracking-assignments-toggle:   Developer Options.  (line  774)
58146* fno-weak:                              C++ Dialect Options.
58147                                                             (line  440)
58148* fno-working-directory:                 Preprocessor Options.
58149                                                             (line  314)
58150* fno-writable-relocated-rdata:          x86 Windows Options.
58151                                                             (line   53)
58152* fno-zero-initialized-in-bss:           Optimize Options.   (line  430)
58153* fnon-call-exceptions:                  Code Gen Options.   (line  133)
58154* fnothrow-opt:                          C++ Dialect Options.
58155                                                             (line  273)
58156* fobjc-abi-version:                     Objective-C and Objective-C++ Dialect Options.
58157                                                             (line   56)
58158* fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
58159                                                             (line   67)
58160* fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
58161                                                             (line   92)
58162* fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
58163                                                             (line   96)
58164* fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
58165                                                             (line  104)
58166* fobjc-nilcheck:                        Objective-C and Objective-C++ Dialect Options.
58167                                                             (line  110)
58168* fobjc-std:                             Objective-C and Objective-C++ Dialect Options.
58169                                                             (line  119)
58170* fomit-frame-pointer:                   Optimize Options.   (line  232)
58171* fopenacc:                              C Dialect Options.  (line  313)
58172* fopenacc-dim:                          C Dialect Options.  (line  322)
58173* fopenmp:                               C Dialect Options.  (line  328)
58174* fopenmp-simd:                          C Dialect Options.  (line  337)
58175* fopt-info:                             Developer Options.  (line  453)
58176* foptimize-sibling-calls:               Optimize Options.   (line  247)
58177* foptimize-strlen:                      Optimize Options.   (line  252)
58178* force_cpusubtype_ALL:                  Darwin Options.     (line  135)
58179* force_flat_namespace:                  Darwin Options.     (line  196)
58180* fpack-struct:                          Code Gen Options.   (line  471)
58181* fpartial-inlining:                     Optimize Options.   (line 1369)
58182* fpatchable-function-entry:             Instrumentation Options.
58183                                                             (line  842)
58184* fpcc-struct-return:                    Code Gen Options.   (line  175)
58185* fpcc-struct-return <1>:                Incompatibilities.  (line  170)
58186* fpch-deps:                             Preprocessor Options.
58187                                                             (line  289)
58188* fpch-preprocess:                       Preprocessor Options.
58189                                                             (line  297)
58190* fpeel-loops:                           Optimize Options.   (line 2306)
58191* fpermissive:                           C++ Dialect Options.
58192                                                             (line  293)
58193* fpermitted-flt-eval-methods:           C Dialect Options.  (line  195)
58194* fpermitted-flt-eval-methods=c11:       C Dialect Options.  (line  195)
58195* fpermitted-flt-eval-methods=ts-18661-3: C Dialect Options. (line  195)
58196* fpic:                                  Code Gen Options.   (line  359)
58197* fPIC:                                  Code Gen Options.   (line  380)
58198* fpie:                                  Code Gen Options.   (line  393)
58199* fPIE:                                  Code Gen Options.   (line  393)
58200* fplan9-extensions:                     C Dialect Options.  (line  374)
58201* fplan9-extensions <1>:                 Unnamed Fields.     (line   43)
58202* fplugin:                               Overall Options.    (line  368)
58203* fplugin-arg:                           Overall Options.    (line  375)
58204* fpost-ipa-mem-report:                  Developer Options.  (line  817)
58205* fpre-ipa-mem-report:                   Developer Options.  (line  816)
58206* fpredictive-commoning:                 Optimize Options.   (line 1376)
58207* fprefetch-loop-arrays:                 Optimize Options.   (line 1383)
58208* fpreprocessed:                         Preprocessor Options.
58209                                                             (line  189)
58210* fprofile-abs-path:                     Instrumentation Options.
58211                                                             (line  107)
58212* fprofile-arcs:                         Instrumentation Options.
58213                                                             (line   31)
58214* fprofile-arcs <1>:                     Other Builtins.     (line  425)
58215* fprofile-correction:                   Optimize Options.   (line 1927)
58216* fprofile-dir:                          Instrumentation Options.
58217                                                             (line  113)
58218* fprofile-generate:                     Instrumentation Options.
58219                                                             (line  124)
58220* fprofile-reorder-functions:            Optimize Options.   (line 2248)
58221* fprofile-report:                       Developer Options.  (line  821)
58222* fprofile-update:                       Instrumentation Options.
58223                                                             (line  141)
58224* fprofile-use:                          Optimize Options.   (line 1935)
58225* fprofile-values:                       Optimize Options.   (line 2239)
58226* fpu:                                   RX Options.         (line   17)
58227* frandom-seed:                          Developer Options.  (line  638)
58228* freciprocal-math:                      Optimize Options.   (line 2093)
58229* frecord-gcc-switches:                  Code Gen Options.   (line  347)
58230* free:                                  Optimize Options.   (line  636)
58231* freg-struct-return:                    Code Gen Options.   (line  193)
58232* frename-registers:                     Optimize Options.   (line 2265)
58233* freorder-blocks:                       Optimize Options.   (line 1442)
58234* freorder-blocks-algorithm:             Optimize Options.   (line 1448)
58235* freorder-blocks-and-partition:         Optimize Options.   (line 1459)
58236* freorder-functions:                    Optimize Options.   (line 1476)
58237* freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
58238                                                             (line  130)
58239* frepo:                                 C++ Dialect Options.
58240                                                             (line  310)
58241* frepo <1>:                             Template Instantiation.
58242                                                             (line   94)
58243* freport-bug:                           Developer Options.  (line  258)
58244* frerun-cse-after-loop:                 Optimize Options.   (line  476)
58245* freschedule-modulo-scheduled-loops:    Optimize Options.   (line  852)
58246* frounding-math:                        Optimize Options.   (line 2140)
58247* fsanitize-address-use-after-scope:     Instrumentation Options.
58248                                                             (line  425)
58249* fsanitize-coverage=trace-cmp:          Instrumentation Options.
58250                                                             (line  440)
58251* fsanitize-coverage=trace-pc:           Instrumentation Options.
58252                                                             (line  436)
58253* fsanitize-recover:                     Instrumentation Options.
58254                                                             (line  389)
58255* fsanitize-sections:                    Instrumentation Options.
58256                                                             (line  385)
58257* fsanitize-undefined-trap-on-error:     Instrumentation Options.
58258                                                             (line  429)
58259* fsanitize=address:                     Instrumentation Options.
58260                                                             (line  158)
58261* fsanitize=alignment:                   Instrumentation Options.
58262                                                             (line  300)
58263* fsanitize=bool:                        Instrumentation Options.
58264                                                             (line  338)
58265* fsanitize=bounds:                      Instrumentation Options.
58266                                                             (line  285)
58267* fsanitize=bounds-strict:               Instrumentation Options.
58268                                                             (line  292)
58269* fsanitize=builtin:                     Instrumentation Options.
58270                                                             (line  362)
58271* fsanitize=enum:                        Instrumentation Options.
58272                                                             (line  343)
58273* fsanitize=float-cast-overflow:         Instrumentation Options.
58274                                                             (line  318)
58275* fsanitize=float-divide-by-zero:        Instrumentation Options.
58276                                                             (line  312)
58277* fsanitize=integer-divide-by-zero:      Instrumentation Options.
58278                                                             (line  248)
58279* fsanitize=kernel-address:              Instrumentation Options.
58280                                                             (line  172)
58281* fsanitize=leak:                        Instrumentation Options.
58282                                                             (line  213)
58283* fsanitize=nonnull-attribute:           Instrumentation Options.
58284                                                             (line  326)
58285* fsanitize=null:                        Instrumentation Options.
58286                                                             (line  262)
58287* fsanitize=object-size:                 Instrumentation Options.
58288                                                             (line  307)
58289* fsanitize=pointer-compare:             Instrumentation Options.
58290                                                             (line  177)
58291* fsanitize=pointer-overflow:            Instrumentation Options.
58292                                                             (line  356)
58293* fsanitize=pointer-subtract:            Instrumentation Options.
58294                                                             (line  188)
58295* fsanitize=return:                      Instrumentation Options.
58296                                                             (line  270)
58297* fsanitize=returns-nonnull-attribute:   Instrumentation Options.
58298                                                             (line  332)
58299* fsanitize=shift:                       Instrumentation Options.
58300                                                             (line  228)
58301* fsanitize=shift-base:                  Instrumentation Options.
58302                                                             (line  241)
58303* fsanitize=shift-exponent:              Instrumentation Options.
58304                                                             (line  236)
58305* fsanitize=signed-integer-overflow:     Instrumentation Options.
58306                                                             (line  276)
58307* fsanitize=thread:                      Instrumentation Options.
58308                                                             (line  198)
58309* fsanitize=undefined:                   Instrumentation Options.
58310                                                             (line  223)
58311* fsanitize=unreachable:                 Instrumentation Options.
58312                                                             (line  252)
58313* fsanitize=vla-bound:                   Instrumentation Options.
58314                                                             (line  258)
58315* fsanitize=vptr:                        Instrumentation Options.
58316                                                             (line  349)
58317* fsched-critical-path-heuristic:        Optimize Options.   (line  818)
58318* fsched-dep-count-heuristic:            Optimize Options.   (line  845)
58319* fsched-group-heuristic:                Optimize Options.   (line  812)
58320* fsched-last-insn-heuristic:            Optimize Options.   (line  838)
58321* fsched-pressure:                       Optimize Options.   (line  763)
58322* fsched-rank-heuristic:                 Optimize Options.   (line  831)
58323* fsched-spec-insn-heuristic:            Optimize Options.   (line  824)
58324* fsched-spec-load:                      Optimize Options.   (line  772)
58325* fsched-spec-load-dangerous:            Optimize Options.   (line  777)
58326* fsched-stalled-insns:                  Optimize Options.   (line  783)
58327* fsched-stalled-insns-dep:              Optimize Options.   (line  793)
58328* fsched-verbose:                        Developer Options.  (line  550)
58329* fsched2-use-superblocks:               Optimize Options.   (line  802)
58330* fschedule-fusion:                      Optimize Options.   (line 2275)
58331* fschedule-insns:                       Optimize Options.   (line  734)
58332* fschedule-insns2:                      Optimize Options.   (line  744)
58333* fsection-anchors:                      Optimize Options.   (line 2375)
58334* fsel-sched-pipelining:                 Optimize Options.   (line  865)
58335* fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  870)
58336* fselective-scheduling:                 Optimize Options.   (line  857)
58337* fselective-scheduling2:                Optimize Options.   (line  861)
58338* fsemantic-interposition:               Optimize Options.   (line  875)
58339* fshort-enums:                          Code Gen Options.   (line  211)
58340* fshort-enums <1>:                      Structures unions enumerations and bit-fields implementation.
58341                                                             (line   48)
58342* fshort-enums <2>:                      Common Type Attributes.
58343                                                             (line  235)
58344* fshort-enums <3>:                      Non-bugs.           (line   42)
58345* fshort-wchar:                          Code Gen Options.   (line  221)
58346* fshrink-wrap:                          Optimize Options.   (line  892)
58347* fshrink-wrap-separate:                 Optimize Options.   (line  897)
58348* fsignaling-nans:                       Optimize Options.   (line 2160)
58349* fsigned-bitfields:                     C Dialect Options.  (line  422)
58350* fsigned-bitfields <1>:                 Non-bugs.           (line   57)
58351* fsigned-char:                          C Dialect Options.  (line  412)
58352* fsigned-char <1>:                      Characters implementation.
58353                                                             (line   31)
58354* fsimd-cost-model:                      Optimize Options.   (line 1329)
58355* fsingle-precision-constant:            Optimize Options.   (line 2192)
58356* fsized-deallocation:                   C++ Dialect Options.
58357                                                             (line  325)
58358* fsplit-ivs-in-unroller:                Optimize Options.   (line 1350)
58359* fsplit-loops:                          Optimize Options.   (line 2318)
58360* fsplit-paths:                          Optimize Options.   (line 1345)
58361* fsplit-stack:                          Instrumentation Options.
58362                                                             (line  703)
58363* fsplit-stack <1>:                      Common Function Attributes.
58364                                                             (line  592)
58365* fsplit-wide-types:                     Optimize Options.   (line  451)
58366* fssa-backprop:                         Optimize Options.   (line 1080)
58367* fssa-phiopt:                           Optimize Options.   (line 1086)
58368* fsso-struct:                           C Dialect Options.  (line  428)
58369* fstack-check:                          Instrumentation Options.
58370                                                             (line  629)
58371* fstack-clash-protection:               Instrumentation Options.
58372                                                             (line  671)
58373* fstack-limit-register:                 Instrumentation Options.
58374                                                             (line  686)
58375* fstack-limit-symbol:                   Instrumentation Options.
58376                                                             (line  686)
58377* fstack-protector:                      Instrumentation Options.
58378                                                             (line  608)
58379* fstack-protector-all:                  Instrumentation Options.
58380                                                             (line  617)
58381* fstack-protector-explicit:             Instrumentation Options.
58382                                                             (line  625)
58383* fstack-protector-strong:               Instrumentation Options.
58384                                                             (line  620)
58385* fstack-usage:                          Developer Options.  (line  825)
58386* fstack_reuse:                          Code Gen Options.   (line   15)
58387* fstats:                                Developer Options.  (line  854)
58388* fstdarg-opt:                           Optimize Options.   (line 2371)
58389* fstore-merging:                        Optimize Options.   (line 1281)
58390* fstrict-aliasing:                      Optimize Options.   (line 1489)
58391* fstrict-enums:                         C++ Dialect Options.
58392                                                             (line  335)
58393* fstrict-overflow:                      Code Gen Options.   (line  115)
58394* fstrict-volatile-bitfields:            Code Gen Options.   (line  595)
58395* fstrong-eval-order:                    C++ Dialect Options.
58396                                                             (line  344)
58397* fsync-libcalls:                        Code Gen Options.   (line  627)
58398* fsyntax-only:                          Warning Options.    (line   14)
58399* ftabstop:                              Preprocessor Options.
58400                                                             (line  234)
58401* ftemplate-backtrace-limit:             C++ Dialect Options.
58402                                                             (line  352)
58403* ftemplate-depth:                       C++ Dialect Options.
58404                                                             (line  356)
58405* ftest-coverage:                        Instrumentation Options.
58406                                                             (line   98)
58407* fthread-jumps:                         Optimize Options.   (line  442)
58408* ftime-report:                          Developer Options.  (line  782)
58409* ftime-report-details:                  Developer Options.  (line  786)
58410* ftls-model:                            Code Gen Options.   (line  495)
58411* ftracer:                               Optimize Options.   (line 2283)
58412* ftrack-macro-expansion:                Preprocessor Options.
58413                                                             (line  240)
58414* ftrampolines:                          Code Gen Options.   (line  506)
58415* ftrapv:                                Code Gen Options.   (line   91)
58416* ftree-bit-ccp:                         Optimize Options.   (line 1069)
58417* ftree-builtin-call-dce:                Optimize Options.   (line 1107)
58418* ftree-ccp:                             Optimize Options.   (line 1075)
58419* ftree-ch:                              Optimize Options.   (line 1127)
58420* ftree-coalesce-vars:                   Optimize Options.   (line 1166)
58421* ftree-copy-prop:                       Optimize Options.   (line  980)
58422* ftree-dce:                             Optimize Options.   (line 1103)
58423* ftree-dominator-opts:                  Optimize Options.   (line 1113)
58424* ftree-dse:                             Optimize Options.   (line 1120)
58425* ftree-forwprop:                        Optimize Options.   (line  959)
58426* ftree-fre:                             Optimize Options.   (line  963)
58427* ftree-loop-distribute-patterns:        Optimize Options.   (line 1200)
58428* ftree-loop-distribution:               Optimize Options.   (line 1183)
58429* ftree-loop-if-convert:                 Optimize Options.   (line 1176)
58430* ftree-loop-im:                         Optimize Options.   (line 1242)
58431* ftree-loop-ivcanon:                    Optimize Options.   (line 1251)
58432* ftree-loop-linear:                     Optimize Options.   (line 1140)
58433* ftree-loop-optimize:                   Optimize Options.   (line 1134)
58434* ftree-loop-vectorize:                  Optimize Options.   (line 1307)
58435* ftree-parallelize-loops:               Optimize Options.   (line 1262)
58436* ftree-partial-pre:                     Optimize Options.   (line  955)
58437* ftree-phiprop:                         Optimize Options.   (line  970)
58438* ftree-pre:                             Optimize Options.   (line  951)
58439* ftree-pta:                             Optimize Options.   (line 1271)
58440* ftree-reassoc:                         Optimize Options.   (line  940)
58441* ftree-sink:                            Optimize Options.   (line 1065)
58442* ftree-slp-vectorize:                   Optimize Options.   (line 1311)
58443* ftree-slsr:                            Optimize Options.   (line 1296)
58444* ftree-sra:                             Optimize Options.   (line 1275)
58445* ftree-switch-conversion:               Optimize Options.   (line 1090)
58446* ftree-tail-merge:                      Optimize Options.   (line 1095)
58447* ftree-ter:                             Optimize Options.   (line 1288)
58448* ftree-vectorize:                       Optimize Options.   (line 1302)
58449* ftree-vrp:                             Optimize Options.   (line 1336)
58450* funconstrained-commons:                Optimize Options.   (line  532)
58451* funit-at-a-time:                       Optimize Options.   (line 1608)
58452* funroll-all-loops:                     Optimize Options.   (line 2300)
58453* funroll-loops:                         Optimize Options.   (line 2290)
58454* funsafe-math-optimizations:            Optimize Options.   (line 2058)
58455* funsigned-bitfields:                   C Dialect Options.  (line  422)
58456* funsigned-bitfields <1>:               Structures unions enumerations and bit-fields implementation.
58457                                                             (line   17)
58458* funsigned-bitfields <2>:               Non-bugs.           (line   57)
58459* funsigned-char:                        C Dialect Options.  (line  394)
58460* funsigned-char <1>:                    Characters implementation.
58461                                                             (line   31)
58462* funswitch-loops:                       Optimize Options.   (line 2322)
58463* funwind-tables:                        Code Gen Options.   (line  149)
58464* fuse-cxa-atexit:                       C++ Dialect Options.
58465                                                             (line  371)
58466* fuse-ld=bfd:                           Link Options.       (line   25)
58467* fuse-ld=gold:                          Link Options.       (line   28)
58468* fuse-linker-plugin:                    Optimize Options.   (line 1867)
58469* fvar-tracking:                         Debugging Options.  (line  147)
58470* fvar-tracking-assignments:             Debugging Options.  (line  157)
58471* fvar-tracking-assignments-toggle:      Developer Options.  (line  774)
58472* fvariable-expansion-in-unroller:       Optimize Options.   (line 1364)
58473* fvect-cost-model:                      Optimize Options.   (line 1315)
58474* fverbose-asm:                          Code Gen Options.   (line  268)
58475* fvisibility:                           Code Gen Options.   (line  530)
58476* fvisibility-inlines-hidden:            C++ Dialect Options.
58477                                                             (line  383)
58478* fvisibility-ms-compat:                 C++ Dialect Options.
58479                                                             (line  411)
58480* fvpt:                                  Optimize Options.   (line 2255)
58481* fvtable-verify:                        Instrumentation Options.
58482                                                             (line  721)
58483* fvtv-counts:                           Instrumentation Options.
58484                                                             (line  757)
58485* fvtv-debug:                            Instrumentation Options.
58486                                                             (line  744)
58487* fweb:                                  Optimize Options.   (line 1627)
58488* fwhole-program:                        Optimize Options.   (line 1638)
58489* fwide-exec-charset:                    Preprocessor Options.
58490                                                             (line  271)
58491* fworking-directory:                    Preprocessor Options.
58492                                                             (line  314)
58493* fwrapv:                                Code Gen Options.   (line   99)
58494* fwrapv-pointer:                        Code Gen Options.   (line  109)
58495* fzero-link:                            Objective-C and Objective-C++ Dialect Options.
58496                                                             (line  140)
58497* g:                                     Debugging Options.  (line   25)
58498* G:                                     ARC Options.        (line  413)
58499* G <1>:                                 M32R/D Options.     (line   57)
58500* G <2>:                                 MIPS Options.       (line  436)
58501* G <3>:                                 Nios II Options.    (line    9)
58502* G <4>:                                 PowerPC SPE Options.
58503                                                             (line  524)
58504* G <5>:                                 RS/6000 and PowerPC Options.
58505                                                             (line  774)
58506* G <6>:                                 System V Options.   (line   10)
58507* gas-loc-support:                       Debugging Options.  (line  212)
58508* gas-locview-support:                   Debugging Options.  (line  228)
58509* gcolumn-info:                          Debugging Options.  (line  240)
58510* gdwarf:                                Debugging Options.  (line   45)
58511* gen-decls:                             Objective-C and Objective-C++ Dialect Options.
58512                                                             (line  166)
58513* gfull:                                 Darwin Options.     (line   69)
58514* ggdb:                                  Debugging Options.  (line   38)
58515* ggnu-pubnames:                         Debugging Options.  (line  178)
58516* ginline-points:                        Debugging Options.  (line  299)
58517* ginternal-reset-location-views:        Debugging Options.  (line  288)
58518* gno-as-loc-support:                    Debugging Options.  (line  224)
58519* gno-column-info:                       Debugging Options.  (line  240)
58520* gno-inline-points:                     Debugging Options.  (line  299)
58521* gno-internal-reset-location-views:     Debugging Options.  (line  288)
58522* gno-record-gcc-switches:               Debugging Options.  (line  193)
58523* gno-statement-frontiers:               Debugging Options.  (line  245)
58524* gno-strict-dwarf:                      Debugging Options.  (line  208)
58525* gno-variable-location-views:           Debugging Options.  (line  256)
58526* gpubnames:                             Debugging Options.  (line  175)
58527* grecord-gcc-switches:                  Debugging Options.  (line  193)
58528* gsplit-dwarf:                          Debugging Options.  (line  168)
58529* gstabs:                                Debugging Options.  (line   63)
58530* gstabs+:                               Debugging Options.  (line   71)
58531* gstatement-frontiers:                  Debugging Options.  (line  245)
58532* gstrict-dwarf:                         Debugging Options.  (line  202)
58533* gtoggle:                               Developer Options.  (line  766)
58534* gused:                                 Darwin Options.     (line   64)
58535* gvariable-location-views:              Debugging Options.  (line  256)
58536* gvariable-location-views=incompat5:    Debugging Options.  (line  256)
58537* gvms:                                  Debugging Options.  (line   90)
58538* gxcoff:                                Debugging Options.  (line   77)
58539* gxcoff+:                               Debugging Options.  (line   82)
58540* gz:                                    Debugging Options.  (line  308)
58541* H:                                     Preprocessor Options.
58542                                                             (line  396)
58543* headerpad_max_install_names:           Darwin Options.     (line  196)
58544* help:                                  Overall Options.    (line  210)
58545* I:                                     Directory Options.  (line   13)
58546* I-:                                    Directory Options.  (line   65)
58547* idirafter:                             Directory Options.  (line   13)
58548* iframework:                            Darwin Options.     (line   57)
58549* imacros:                               Preprocessor Options.
58550                                                             (line   57)
58551* image_base:                            Darwin Options.     (line  196)
58552* imultilib:                             Directory Options.  (line   98)
58553* include:                               Preprocessor Options.
58554                                                             (line   46)
58555* init:                                  Darwin Options.     (line  196)
58556* install_name:                          Darwin Options.     (line  196)
58557* iplugindir=:                           Directory Options.  (line  113)
58558* iprefix:                               Directory Options.  (line   80)
58559* iquote:                                Directory Options.  (line   13)
58560* isysroot:                              Directory Options.  (line   92)
58561* isystem:                               Directory Options.  (line   13)
58562* iwithprefix:                           Directory Options.  (line   86)
58563* iwithprefixbefore:                     Directory Options.  (line   86)
58564* keep_private_externs:                  Darwin Options.     (line  196)
58565* l:                                     Link Options.       (line   32)
58566* L:                                     Directory Options.  (line  118)
58567* lobjc:                                 Link Options.       (line   59)
58568* M:                                     Preprocessor Options.
58569                                                             (line   77)
58570* m:                                     PowerPC SPE Options.
58571                                                             (line  352)
58572* m <1>:                                 RS/6000 and PowerPC Options.
58573                                                             (line  579)
58574* m1:                                    SH Options.         (line    9)
58575* m10:                                   PDP-11 Options.     (line   29)
58576* m128bit-long-double:                   x86 Options.        (line  517)
58577* m16:                                   x86 Options.        (line 1330)
58578* m16-bit:                               CRIS Options.       (line   64)
58579* m16-bit <1>:                           NDS32 Options.      (line   51)
58580* m1reg-:                                Adapteva Epiphany Options.
58581                                                             (line  131)
58582* m2:                                    SH Options.         (line   12)
58583* m210:                                  MCore Options.      (line   43)
58584* m2a:                                   SH Options.         (line   30)
58585* m2a-nofpu:                             SH Options.         (line   18)
58586* m2a-single:                            SH Options.         (line   26)
58587* m2a-single-only:                       SH Options.         (line   22)
58588* m3:                                    SH Options.         (line   34)
58589* m31:                                   S/390 and zSeries Options.
58590                                                             (line   86)
58591* m32:                                   Nvidia PTX Options. (line   10)
58592* m32 <1>:                               RS/6000 and PowerPC Options.
58593                                                             (line  283)
58594* m32 <2>:                               SPARC Options.      (line  315)
58595* m32 <3>:                               TILE-Gx Options.    (line   23)
58596* m32 <4>:                               TILEPro Options.    (line   13)
58597* m32 <5>:                               x86 Options.        (line 1330)
58598* m32-bit:                               CRIS Options.       (line   64)
58599* m32bit-doubles:                        RL78 Options.       (line   73)
58600* m32bit-doubles <1>:                    RX Options.         (line   10)
58601* m32r:                                  M32R/D Options.     (line   15)
58602* m32r2:                                 M32R/D Options.     (line    9)
58603* m32rx:                                 M32R/D Options.     (line   12)
58604* m340:                                  MCore Options.      (line   43)
58605* m3dnow:                                x86 Options.        (line  742)
58606* m3dnowa:                               x86 Options.        (line  743)
58607* m3e:                                   SH Options.         (line   37)
58608* m4:                                    SH Options.         (line   51)
58609* m4-100:                                SH Options.         (line   54)
58610* m4-100-nofpu:                          SH Options.         (line   57)
58611* m4-100-single:                         SH Options.         (line   61)
58612* m4-100-single-only:                    SH Options.         (line   65)
58613* m4-200:                                SH Options.         (line   69)
58614* m4-200-nofpu:                          SH Options.         (line   72)
58615* m4-200-single:                         SH Options.         (line   76)
58616* m4-200-single-only:                    SH Options.         (line   80)
58617* m4-300:                                SH Options.         (line   84)
58618* m4-300-nofpu:                          SH Options.         (line   87)
58619* m4-300-single:                         SH Options.         (line   91)
58620* m4-300-single-only:                    SH Options.         (line   95)
58621* m4-340:                                SH Options.         (line   99)
58622* m4-500:                                SH Options.         (line  102)
58623* m4-nofpu:                              SH Options.         (line   40)
58624* m4-single:                             SH Options.         (line   47)
58625* m4-single-only:                        SH Options.         (line   43)
58626* m40:                                   PDP-11 Options.     (line   23)
58627* m45:                                   PDP-11 Options.     (line   26)
58628* m4a:                                   SH Options.         (line  118)
58629* m4a-nofpu:                             SH Options.         (line  106)
58630* m4a-single:                            SH Options.         (line  114)
58631* m4a-single-only:                       SH Options.         (line  110)
58632* m4al:                                  SH Options.         (line  121)
58633* m4byte-functions:                      MCore Options.      (line   27)
58634* m5200:                                 M680x0 Options.     (line  144)
58635* m5206e:                                M680x0 Options.     (line  153)
58636* m528x:                                 M680x0 Options.     (line  157)
58637* m5307:                                 M680x0 Options.     (line  161)
58638* m5407:                                 M680x0 Options.     (line  165)
58639* m64:                                   Nvidia PTX Options. (line   10)
58640* m64 <1>:                               RS/6000 and PowerPC Options.
58641                                                             (line  283)
58642* m64 <2>:                               S/390 and zSeries Options.
58643                                                             (line   86)
58644* m64 <3>:                               SPARC Options.      (line  315)
58645* m64 <4>:                               TILE-Gx Options.    (line   23)
58646* m64 <5>:                               x86 Options.        (line 1330)
58647* m64bit-doubles:                        RL78 Options.       (line   73)
58648* m64bit-doubles <1>:                    RX Options.         (line   10)
58649* m68000:                                M680x0 Options.     (line   93)
58650* m68010:                                M680x0 Options.     (line  101)
58651* m68020:                                M680x0 Options.     (line  107)
58652* m68020-40:                             M680x0 Options.     (line  175)
58653* m68020-60:                             M680x0 Options.     (line  184)
58654* m68030:                                M680x0 Options.     (line  112)
58655* m68040:                                M680x0 Options.     (line  117)
58656* m68060:                                M680x0 Options.     (line  126)
58657* m68881:                                M680x0 Options.     (line  194)
58658* m8-bit:                                CRIS Options.       (line   64)
58659* m8bit-idiv:                            x86 Options.        (line 1249)
58660* m8byte-align:                          V850 Options.       (line  170)
58661* m96bit-long-double:                    x86 Options.        (line  517)
58662* mA6:                                   ARC Options.        (line   23)
58663* mA7:                                   ARC Options.        (line   30)
58664* mabi:                                  AArch64 Options.    (line    9)
58665* mabi <1>:                              ARM Options.        (line    9)
58666* mabi <2>:                              PowerPC SPE Options.
58667                                                             (line  379)
58668* mabi <3>:                              RISC-V Options.     (line   17)
58669* mabi <4>:                              RS/6000 and PowerPC Options.
58670                                                             (line  610)
58671* mabi <5>:                              x86 Options.        (line  969)
58672* mabi=32:                               MIPS Options.       (line  155)
58673* mabi=64:                               MIPS Options.       (line  155)
58674* mabi=eabi:                             MIPS Options.       (line  155)
58675* mabi=elfv1:                            PowerPC SPE Options.
58676                                                             (line  408)
58677* mabi=elfv1 <1>:                        RS/6000 and PowerPC Options.
58678                                                             (line  631)
58679* mabi=elfv2:                            PowerPC SPE Options.
58680                                                             (line  414)
58681* mabi=elfv2 <1>:                        RS/6000 and PowerPC Options.
58682                                                             (line  637)
58683* mabi=gnu:                              MMIX Options.       (line   20)
58684* mabi=ibmlongdouble:                    PowerPC SPE Options.
58685                                                             (line  392)
58686* mabi=ibmlongdouble <1>:                RS/6000 and PowerPC Options.
58687                                                             (line  615)
58688* mabi=ieeelongdouble:                   PowerPC SPE Options.
58689                                                             (line  400)
58690* mabi=ieeelongdouble <1>:               RS/6000 and PowerPC Options.
58691                                                             (line  623)
58692* mabi=mmixware:                         MMIX Options.       (line   20)
58693* mabi=n32:                              MIPS Options.       (line  155)
58694* mabi=no-spe:                           PowerPC SPE Options.
58695                                                             (line  389)
58696* mabi=o64:                              MIPS Options.       (line  155)
58697* mabi=spe:                              PowerPC SPE Options.
58698                                                             (line  384)
58699* mabicalls:                             MIPS Options.       (line  191)
58700* mabm:                                  x86 Options.        (line  745)
58701* mabort-on-noreturn:                    ARM Options.        (line  606)
58702* mabs=2008:                             MIPS Options.       (line  299)
58703* mabs=legacy:                           MIPS Options.       (line  299)
58704* mabsdata:                              AVR Options.        (line  163)
58705* mabsdiff:                              MeP Options.        (line    7)
58706* mabshi:                                PDP-11 Options.     (line   55)
58707* mac0:                                  PDP-11 Options.     (line   16)
58708* macc-4:                                FRV Options.        (line  139)
58709* macc-8:                                FRV Options.        (line  143)
58710* maccumulate-args:                      AVR Options.        (line  170)
58711* maccumulate-outgoing-args:             SH Options.         (line  314)
58712* maccumulate-outgoing-args <1>:         x86 Options.        (line 1007)
58713* maddress-mode=long:                    x86 Options.        (line 1380)
58714* maddress-mode=short:                   x86 Options.        (line 1385)
58715* maddress-space-conversion:             SPU Options.        (line   68)
58716* mads:                                  PowerPC SPE Options.
58717                                                             (line  448)
58718* mads <1>:                              RS/6000 and PowerPC Options.
58719                                                             (line  671)
58720* madx:                                  x86 Options.        (line  746)
58721* maes:                                  x86 Options.        (line  724)
58722* maix-struct-return:                    PowerPC SPE Options.
58723                                                             (line  372)
58724* maix-struct-return <1>:                RS/6000 and PowerPC Options.
58725                                                             (line  603)
58726* maix32:                                PowerPC SPE Options.
58727                                                             (line  148)
58728* maix32 <1>:                            RS/6000 and PowerPC Options.
58729                                                             (line  321)
58730* maix64:                                RS/6000 and PowerPC Options.
58731                                                             (line  321)
58732* malign-300:                            H8/300 Options.     (line   41)
58733* malign-call:                           ARC Options.        (line  432)
58734* malign-data:                           x86 Options.        (line  557)
58735* malign-double:                         x86 Options.        (line  502)
58736* malign-int:                            M680x0 Options.     (line  263)
58737* malign-labels:                         FRV Options.        (line  128)
58738* malign-loops:                          M32R/D Options.     (line   73)
58739* malign-natural:                        PowerPC SPE Options.
58740                                                             (line  172)
58741* malign-natural <1>:                    RS/6000 and PowerPC Options.
58742                                                             (line  359)
58743* malign-power:                          PowerPC SPE Options.
58744                                                             (line  172)
58745* malign-power <1>:                      RS/6000 and PowerPC Options.
58746                                                             (line  359)
58747* mall-opts:                             MeP Options.        (line   11)
58748* malloc-cc:                             FRV Options.        (line   31)
58749* mallow-string-insns:                   RX Options.         (line  150)
58750* mallregs:                              RL78 Options.       (line   66)
58751* maltivec:                              RS/6000 and PowerPC Options.
58752                                                             (line  141)
58753* maltivec=be:                           RS/6000 and PowerPC Options.
58754                                                             (line  157)
58755* maltivec=le:                           RS/6000 and PowerPC Options.
58756                                                             (line  169)
58757* mam33:                                 MN10300 Options.    (line   17)
58758* mam33-2:                               MN10300 Options.    (line   24)
58759* mam34:                                 MN10300 Options.    (line   27)
58760* mandroid:                              GNU/Linux Options.  (line   26)
58761* mannotate-align:                       ARC Options.        (line  379)
58762* mapcs:                                 ARM Options.        (line   21)
58763* mapcs-frame:                           ARM Options.        (line   13)
58764* mapp-regs:                             SPARC Options.      (line   10)
58765* mapp-regs <1>:                         V850 Options.       (line  181)
58766* mARC600:                               ARC Options.        (line   23)
58767* mARC601:                               ARC Options.        (line   27)
58768* mARC700:                               ARC Options.        (line   30)
58769* march:                                 AArch64 Options.    (line  110)
58770* march <1>:                             ARM Options.        (line   74)
58771* march <2>:                             C6X Options.        (line    7)
58772* march <3>:                             CRIS Options.       (line   10)
58773* march <4>:                             HPPA Options.       (line    9)
58774* march <5>:                             HPPA Options.       (line  162)
58775* march <6>:                             M680x0 Options.     (line   12)
58776* march <7>:                             MIPS Options.       (line   14)
58777* march <8>:                             NDS32 Options.      (line   64)
58778* march <9>:                             Nios II Options.    (line   94)
58779* march <10>:                            RISC-V Options.     (line   51)
58780* march <11>:                            S/390 and zSeries Options.
58781                                                             (line  148)
58782* march <12>:                            x86 Options.        (line    9)
58783* marclinux:                             ARC Options.        (line  385)
58784* marclinux_prof:                        ARC Options.        (line  392)
58785* margonaut:                             ARC Options.        (line  585)
58786* marm:                                  ARM Options.        (line  678)
58787* mas100-syntax:                         RX Options.         (line   76)
58788* masm-hex:                              MSP430 Options.     (line    9)
58789* masm-syntax-unified:                   ARM Options.        (line  778)
58790* masm=DIALECT:                          x86 Options.        (line  451)
58791* matomic:                               ARC Options.        (line  155)
58792* matomic-model=MODEL:                   SH Options.         (line  193)
58793* matomic-updates:                       SPU Options.        (line   83)
58794* mauto-litpools:                        Xtensa Options.     (line   60)
58795* mauto-modify-reg:                      ARC Options.        (line  435)
58796* mauto-pic:                             IA-64 Options.      (line   50)
58797* maverage:                              MeP Options.        (line   16)
58798* mavoid-indexed-addresses:              PowerPC SPE Options.
58799                                                             (line  216)
58800* mavoid-indexed-addresses <1>:          RS/6000 and PowerPC Options.
58801                                                             (line  418)
58802* mavx:                                  x86 Options.        (line  712)
58803* mavx2:                                 x86 Options.        (line  713)
58804* mavx256-split-unaligned-load:          x86 Options.        (line 1257)
58805* mavx256-split-unaligned-store:         x86 Options.        (line 1257)
58806* mavx5124fmaps:                         x86 Options.        (line  770)
58807* mavx5124vnniw:                         x86 Options.        (line  772)
58808* mavx512bitalg:                         x86 Options.        (line  766)
58809* mavx512bw:                             x86 Options.        (line  719)
58810* mavx512cd:                             x86 Options.        (line  717)
58811* mavx512dq:                             x86 Options.        (line  720)
58812* mavx512er:                             x86 Options.        (line  716)
58813* mavx512f:                              x86 Options.        (line  714)
58814* mavx512ifma:                           x86 Options.        (line  721)
58815* mavx512pf:                             x86 Options.        (line  715)
58816* mavx512vbmi:                           x86 Options.        (line  722)
58817* mavx512vbmi2:                          x86 Options.        (line  762)
58818* mavx512vl:                             x86 Options.        (line  718)
58819* mavx512vnni:                           x86 Options.        (line  771)
58820* mavx512vpopcntdq:                      x86 Options.        (line  769)
58821* max-vect-align:                        Adapteva Epiphany Options.
58822                                                             (line  119)
58823* mb:                                    SH Options.         (line  126)
58824* mbackchain:                            S/390 and zSeries Options.
58825                                                             (line   35)
58826* mbarrel-shift-enabled:                 LM32 Options.       (line    9)
58827* mbarrel-shifter:                       ARC Options.        (line   10)
58828* mbarrel_shifter:                       ARC Options.        (line  605)
58829* mbase-addresses:                       MMIX Options.       (line   53)
58830* mbased=:                               MeP Options.        (line   20)
58831* mbbit-peephole:                        ARC Options.        (line  438)
58832* mbcopy:                                PDP-11 Options.     (line   36)
58833* mbcopy-builtin:                        PDP-11 Options.     (line   32)
58834* mbe8:                                  ARM Options.        (line   66)
58835* mbig:                                  PowerPC SPE Options.
58836                                                             (line  271)
58837* mbig <1>:                              RS/6000 and PowerPC Options.
58838                                                             (line  498)
58839* mbig-endian:                           AArch64 Options.    (line   20)
58840* mbig-endian <1>:                       ARC Options.        (line  588)
58841* mbig-endian <2>:                       ARM Options.        (line   61)
58842* mbig-endian <3>:                       C6X Options.        (line   13)
58843* mbig-endian <4>:                       IA-64 Options.      (line    9)
58844* mbig-endian <5>:                       MCore Options.      (line   39)
58845* mbig-endian <6>:                       MicroBlaze Options. (line   56)
58846* mbig-endian <7>:                       NDS32 Options.      (line    9)
58847* mbig-endian <8>:                       PowerPC SPE Options.
58848                                                             (line  271)
58849* mbig-endian <9>:                       RS/6000 and PowerPC Options.
58850                                                             (line  498)
58851* mbig-endian <10>:                      TILE-Gx Options.    (line   29)
58852* mbig-endian-data:                      RX Options.         (line   42)
58853* mbig-switch:                           V850 Options.       (line  176)
58854* mbigtable:                             SH Options.         (line  141)
58855* mbionic:                               GNU/Linux Options.  (line   22)
58856* mbit-align:                            RS/6000 and PowerPC Options.
58857                                                             (line  450)
58858* mbit-ops:                              CR16 Options.       (line   25)
58859* mbitfield:                             M680x0 Options.     (line  231)
58860* mbitops:                               MeP Options.        (line   26)
58861* mbitops <1>:                           SH Options.         (line  145)
58862* mblock-compare-inline-limit:           RS/6000 and PowerPC Options.
58863                                                             (line  752)
58864* mblock-compare-inline-loop-limit:      RS/6000 and PowerPC Options.
58865                                                             (line  758)
58866* mblock-move-inline-limit:              PowerPC SPE Options.
58867                                                             (line  518)
58868* mblock-move-inline-limit <1>:          RS/6000 and PowerPC Options.
58869                                                             (line  746)
58870* mbmi:                                  x86 Options.        (line  747)
58871* mbmi2:                                 x86 Options.        (line  748)
58872* mbranch-cheap:                         PDP-11 Options.     (line   65)
58873* mbranch-cost:                          Adapteva Epiphany Options.
58874                                                             (line   18)
58875* mbranch-cost <1>:                      AVR Options.        (line  185)
58876* mbranch-cost <2>:                      MIPS Options.       (line  751)
58877* mbranch-cost <3>:                      RISC-V Options.     (line    9)
58878* mbranch-cost=NUM:                      SH Options.         (line  334)
58879* mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
58880* mbranch-expensive:                     PDP-11 Options.     (line   61)
58881* mbranch-hints:                         SPU Options.        (line   29)
58882* mbranch-likely:                        MIPS Options.       (line  758)
58883* mbranch-predict:                       MMIX Options.       (line   48)
58884* mbss-plt:                              PowerPC SPE Options.
58885                                                             (line   73)
58886* mbss-plt <1>:                          RS/6000 and PowerPC Options.
58887                                                             (line  189)
58888* mbuild-constants:                      DEC Alpha Options.  (line  141)
58889* mbwx:                                  DEC Alpha Options.  (line  163)
58890* mbypass-cache:                         Nios II Options.    (line  103)
58891* mc68000:                               M680x0 Options.     (line   93)
58892* mc68020:                               M680x0 Options.     (line  107)
58893* mc=:                                   MeP Options.        (line   31)
58894* mcache-block-size:                     NDS32 Options.      (line   60)
58895* mcache-size:                           SPU Options.        (line   75)
58896* mcache-volatile:                       Nios II Options.    (line  109)
58897* mcall-eabi:                            PowerPC SPE Options.
58898                                                             (line  346)
58899* mcall-eabi <1>:                        RS/6000 and PowerPC Options.
58900                                                             (line  573)
58901* mcall-freebsd:                         PowerPC SPE Options.
58902                                                             (line  360)
58903* mcall-freebsd <1>:                     RS/6000 and PowerPC Options.
58904                                                             (line  587)
58905* mcall-linux:                           PowerPC SPE Options.
58906                                                             (line  356)
58907* mcall-linux <1>:                       RS/6000 and PowerPC Options.
58908                                                             (line  583)
58909* mcall-ms2sysv-xlogues:                 x86 Options.        (line  983)
58910* mcall-netbsd:                          PowerPC SPE Options.
58911                                                             (line  364)
58912* mcall-netbsd <1>:                      PowerPC SPE Options.
58913                                                             (line  368)
58914* mcall-netbsd <2>:                      RS/6000 and PowerPC Options.
58915                                                             (line  591)
58916* mcall-netbsd <3>:                      RS/6000 and PowerPC Options.
58917                                                             (line  595)
58918* mcall-prologues:                       AVR Options.        (line  190)
58919* mcall-sysv:                            PowerPC SPE Options.
58920                                                             (line  338)
58921* mcall-sysv <1>:                        RS/6000 and PowerPC Options.
58922                                                             (line  565)
58923* mcall-sysv-eabi:                       PowerPC SPE Options.
58924                                                             (line  346)
58925* mcall-sysv-eabi <1>:                   RS/6000 and PowerPC Options.
58926                                                             (line  573)
58927* mcall-sysv-noeabi:                     PowerPC SPE Options.
58928                                                             (line  349)
58929* mcall-sysv-noeabi <1>:                 RS/6000 and PowerPC Options.
58930                                                             (line  576)
58931* mcallee-super-interworking:            ARM Options.        (line  707)
58932* mcaller-copies:                        HPPA Options.       (line   23)
58933* mcaller-super-interworking:            ARM Options.        (line  714)
58934* mcallgraph-data:                       MCore Options.      (line   31)
58935* mcase-vector-pcrel:                    ARC Options.        (line  447)
58936* mcbcond:                               SPARC Options.      (line  260)
58937* mcbranch-force-delay-slot:             SH Options.         (line  349)
58938* mcc-init:                              CRIS Options.       (line   42)
58939* mcfv4e:                                M680x0 Options.     (line  169)
58940* mcheck-zero-division:                  MIPS Options.       (line  546)
58941* mcix:                                  DEC Alpha Options.  (line  163)
58942* mcld:                                  x86 Options.        (line  822)
58943* mclear-hwcap:                          Solaris 2 Options.  (line    9)
58944* mclflushopt:                           x86 Options.        (line  726)
58945* mclip:                                 MeP Options.        (line   35)
58946* mclwb:                                 x86 Options.        (line  727)
58947* mclzero:                               x86 Options.        (line  760)
58948* mcmodel:                               NDS32 Options.      (line   67)
58949* mcmodel <1>:                           SPARC Options.      (line  320)
58950* mcmodel=kernel:                        x86 Options.        (line 1364)
58951* mcmodel=large:                         AArch64 Options.    (line   45)
58952* mcmodel=large <1>:                     RS/6000 and PowerPC Options.
58953                                                             (line  135)
58954* mcmodel=large <2>:                     TILE-Gx Options.    (line   14)
58955* mcmodel=large <3>:                     x86 Options.        (line 1376)
58956* mcmodel=medany:                        RISC-V Options.     (line   92)
58957* mcmodel=medium:                        RS/6000 and PowerPC Options.
58958                                                             (line  130)
58959* mcmodel=medium <1>:                    x86 Options.        (line 1369)
58960* mcmodel=medlow:                        RISC-V Options.     (line   85)
58961* mcmodel=small:                         AArch64 Options.    (line   39)
58962* mcmodel=small <1>:                     RS/6000 and PowerPC Options.
58963                                                             (line  126)
58964* mcmodel=small <2>:                     TILE-Gx Options.    (line    9)
58965* mcmodel=small <3>:                     x86 Options.        (line 1358)
58966* mcmodel=tiny:                          AArch64 Options.    (line   34)
58967* mcmov:                                 NDS32 Options.      (line   21)
58968* mcmove:                                Adapteva Epiphany Options.
58969                                                             (line   23)
58970* mcmpb:                                 RS/6000 and PowerPC Options.
58971                                                             (line   27)
58972* mcmse:                                 ARM Options.        (line  807)
58973* mcode-density:                         ARC Options.        (line  163)
58974* mcode-readable:                        MIPS Options.       (line  506)
58975* mcode-region:                          MSP430 Options.     (line   93)
58976* mcompact-branches=always:              MIPS Options.       (line  770)
58977* mcompact-branches=never:               MIPS Options.       (line  770)
58978* mcompact-branches=optimal:             MIPS Options.       (line  770)
58979* mcompact-casesi:                       ARC Options.        (line  451)
58980* mcompat-align-parm:                    PowerPC SPE Options.
58981                                                             (line  653)
58982* mcompat-align-parm <1>:                RS/6000 and PowerPC Options.
58983                                                             (line  942)
58984* mcompress:                             FT32 Options.       (line   26)
58985* mcond-exec:                            FRV Options.        (line  187)
58986* mcond-move:                            FRV Options.        (line  159)
58987* mconfig=:                              MeP Options.        (line   39)
58988* mconsole:                              x86 Windows Options.
58989                                                             (line    9)
58990* mconst-align:                          CRIS Options.       (line   55)
58991* mconst16:                              Xtensa Options.     (line   10)
58992* mconstant-gp:                          IA-64 Options.      (line   46)
58993* mcop:                                  MeP Options.        (line   48)
58994* mcop32:                                MeP Options.        (line   53)
58995* mcop64:                                MeP Options.        (line   56)
58996* mcorea:                                Blackfin Options.   (line  154)
58997* mcoreb:                                Blackfin Options.   (line  161)
58998* mcpu:                                  AArch64 Options.    (line  174)
58999* mcpu <1>:                              ARC Options.        (line   18)
59000* mcpu <2>:                              ARM Options.        (line  477)
59001* mcpu <3>:                              CRIS Options.       (line   10)
59002* mcpu <4>:                              DEC Alpha Options.  (line  215)
59003* mcpu <5>:                              FRV Options.        (line  258)
59004* mcpu <6>:                              M680x0 Options.     (line   28)
59005* mcpu <7>:                              picoChip Options.   (line    9)
59006* mcpu <8>:                              PowerPC SPE Options.
59007                                                             (line   27)
59008* mcpu <9>:                              RL78 Options.       (line   32)
59009* mcpu <10>:                             RS/6000 and PowerPC Options.
59010                                                             (line   68)
59011* mcpu <11>:                             RX Options.         (line   30)
59012* mcpu <12>:                             SPARC Options.      (line  115)
59013* mcpu <13>:                             TILE-Gx Options.    (line   18)
59014* mcpu <14>:                             TILEPro Options.    (line    9)
59015* mcpu <15>:                             Visium Options.     (line   33)
59016* mcpu <16>:                             x86 Options.        (line  397)
59017* mcpu32:                                M680x0 Options.     (line  135)
59018* mcpu=:                                 Blackfin Options.   (line    7)
59019* mcpu= <1>:                             M32C Options.       (line    7)
59020* mcpu= <2>:                             MicroBlaze Options. (line   20)
59021* mcpu= <3>:                             MSP430 Options.     (line   42)
59022* mcr16c:                                CR16 Options.       (line   14)
59023* mcr16cplus:                            CR16 Options.       (line   14)
59024* mcrc32:                                x86 Options.        (line  890)
59025* mcrypto:                               RS/6000 and PowerPC Options.
59026                                                             (line  215)
59027* mcsync-anomaly:                        Blackfin Options.   (line   57)
59028* mctor-dtor:                            NDS32 Options.      (line   81)
59029* mcustom-fpu-cfg:                       Nios II Options.    (line  259)
59030* mcustom-INSN:                          Nios II Options.    (line  139)
59031* mcx16:                                 x86 Options.        (line  863)
59032* MD:                                    Preprocessor Options.
59033                                                             (line  169)
59034* mdalign:                               SH Options.         (line  132)
59035* mdata-align:                           CRIS Options.       (line   55)
59036* mdata-model:                           CR16 Options.       (line   28)
59037* mdata-region:                          MSP430 Options.     (line   93)
59038* mdc:                                   MeP Options.        (line   62)
59039* mdebug:                                M32R/D Options.     (line   69)
59040* mdebug <1>:                            S/390 and zSeries Options.
59041                                                             (line  144)
59042* mdebug <2>:                            Visium Options.     (line    7)
59043* mdebug-main=PREFIX:                    VMS Options.        (line   13)
59044* mdec-asm:                              PDP-11 Options.     (line   72)
59045* mdisable-callt:                        V850 Options.       (line   92)
59046* mdisable-fpregs:                       HPPA Options.       (line   34)
59047* mdisable-indexing:                     HPPA Options.       (line   40)
59048* mdiv:                                  M680x0 Options.     (line  206)
59049* mdiv <1>:                              MCore Options.      (line   15)
59050* mdiv <2>:                              MeP Options.        (line   65)
59051* mdiv <3>:                              RISC-V Options.     (line   46)
59052* mdiv-rem:                              ARC Options.        (line  160)
59053* mdiv=STRATEGY:                         SH Options.         (line  284)
59054* mdivide-breaks:                        MIPS Options.       (line  552)
59055* mdivide-enabled:                       LM32 Options.       (line   12)
59056* mdivide-traps:                         MIPS Options.       (line  552)
59057* mdivsi3_libfunc=NAME:                  SH Options.         (line  320)
59058* mdll:                                  x86 Windows Options.
59059                                                             (line   16)
59060* mdlmzb:                                RS/6000 and PowerPC Options.
59061                                                             (line  443)
59062* mdmx:                                  MIPS Options.       (line  375)
59063* mdouble:                               FRV Options.        (line   48)
59064* mdouble-float:                         MIPS Options.       (line  287)
59065* mdouble-float <1>:                     PowerPC SPE Options.
59066                                                             (line  190)
59067* mdouble-float <2>:                     RS/6000 and PowerPC Options.
59068                                                             (line  377)
59069* mdpfp:                                 ARC Options.        (line   99)
59070* mdpfp-compact:                         ARC Options.        (line  100)
59071* mdpfp-fast:                            ARC Options.        (line  104)
59072* mdpfp_compact:                         ARC Options.        (line  608)
59073* mdpfp_fast:                            ARC Options.        (line  611)
59074* mdsp:                                  MIPS Options.       (line  352)
59075* mdsp-packa:                            ARC Options.        (line  332)
59076* mdspr2:                                MIPS Options.       (line  358)
59077* mdsp_packa:                            ARC Options.        (line  614)
59078* mdual-nops:                            SPU Options.        (line   95)
59079* mdump-tune-features:                   x86 Options.        (line  804)
59080* mdvbf:                                 ARC Options.        (line  337)
59081* mdwarf2-asm:                           IA-64 Options.      (line   94)
59082* mdword:                                FRV Options.        (line   40)
59083* mdynamic-no-pic:                       PowerPC SPE Options.
59084                                                             (line  276)
59085* mdynamic-no-pic <1>:                   RS/6000 and PowerPC Options.
59086                                                             (line  503)
59087* mea:                                   ARC Options.        (line  112)
59088* mEA:                                   ARC Options.        (line  617)
59089* mea32:                                 SPU Options.        (line   60)
59090* mea64:                                 SPU Options.        (line   60)
59091* meabi:                                 PowerPC SPE Options.
59092                                                             (line  467)
59093* meabi <1>:                             RS/6000 and PowerPC Options.
59094                                                             (line  690)
59095* mearly-cbranchsi:                      ARC Options.        (line  473)
59096* mearly-stop-bits:                      IA-64 Options.      (line  100)
59097* meb:                                   MeP Options.        (line   68)
59098* meb <1>:                               Moxie Options.      (line    7)
59099* meb <2>:                               Nios II Options.    (line   90)
59100* meb <3>:                               Score Options.      (line    9)
59101* mel:                                   MeP Options.        (line   71)
59102* mel <1>:                               Moxie Options.      (line   11)
59103* mel <2>:                               Nios II Options.    (line   90)
59104* mel <3>:                               Score Options.      (line   12)
59105* melf:                                  CRIS Options.       (line   87)
59106* melf <1>:                              MMIX Options.       (line   43)
59107* memb:                                  PowerPC SPE Options.
59108                                                             (line  462)
59109* memb <1>:                              RS/6000 and PowerPC Options.
59110                                                             (line  685)
59111* membedded-data:                        MIPS Options.       (line  493)
59112* memregs=:                              M32C Options.       (line   21)
59113* mep:                                   V850 Options.       (line   16)
59114* mepsilon:                              MMIX Options.       (line   15)
59115* merror-reloc:                          SPU Options.        (line   10)
59116* mesa:                                  S/390 and zSeries Options.
59117                                                             (line   94)
59118* metrax100:                             CRIS Options.       (line   27)
59119* metrax4:                               CRIS Options.       (line   27)
59120* meva:                                  MIPS Options.       (line  402)
59121* mexpand-adddi:                         ARC Options.        (line  476)
59122* mexplicit-relocs:                      DEC Alpha Options.  (line  176)
59123* mexplicit-relocs <1>:                  MIPS Options.       (line  537)
59124* mexr:                                  H8/300 Options.     (line   28)
59125* mextern-sdata:                         MIPS Options.       (line  456)
59126* MF:                                    Preprocessor Options.
59127                                                             (line  111)
59128* mf16c:                                 x86 Options.        (line  730)
59129* mfast-fp:                              Blackfin Options.   (line  130)
59130* mfast-indirect-calls:                  HPPA Options.       (line   52)
59131* mfast-sw-div:                          Nios II Options.    (line  115)
59132* mfaster-structs:                       SPARC Options.      (line   91)
59133* mfdiv:                                 RISC-V Options.     (line   39)
59134* mfdpic:                                FRV Options.        (line   72)
59135* mfentry:                               x86 Options.        (line 1216)
59136* mfix:                                  DEC Alpha Options.  (line  163)
59137* mfix-24k:                              MIPS Options.       (line  617)
59138* mfix-and-continue:                     Darwin Options.     (line  104)
59139* mfix-at697f:                           SPARC Options.      (line  294)
59140* mfix-cortex-a53-835769:                AArch64 Options.    (line   73)
59141* mfix-cortex-a53-843419:                AArch64 Options.    (line   80)
59142* mfix-cortex-m3-ldrd:                   ARM Options.        (line  747)
59143* mfix-gr712rc:                          SPARC Options.      (line  307)
59144* mfix-r10000:                           MIPS Options.       (line  639)
59145* mfix-r4000:                            MIPS Options.       (line  623)
59146* mfix-r4400:                            MIPS Options.       (line  633)
59147* mfix-rm7000:                           MIPS Options.       (line  650)
59148* mfix-sb1:                              MIPS Options.       (line  675)
59149* mfix-ut699:                            SPARC Options.      (line  299)
59150* mfix-ut700:                            SPARC Options.      (line  303)
59151* mfix-vr4120:                           MIPS Options.       (line  655)
59152* mfix-vr4130:                           MIPS Options.       (line  668)
59153* mfixed-cc:                             FRV Options.        (line   35)
59154* mfixed-range:                          HPPA Options.       (line   59)
59155* mfixed-range <1>:                      IA-64 Options.      (line  105)
59156* mfixed-range <2>:                      SH Options.         (line  327)
59157* mfixed-range <3>:                      SPU Options.        (line   52)
59158* mflat:                                 SPARC Options.      (line   22)
59159* mflip-mips16:                          MIPS Options.       (line  127)
59160* mflip-thumb:                           ARM Options.        (line  690)
59161* mfloat-abi:                            ARM Options.        (line   41)
59162* mfloat-gprs:                           PowerPC SPE Options.
59163                                                             (line  103)
59164* mfloat-ieee:                           DEC Alpha Options.  (line  171)
59165* mfloat-vax:                            DEC Alpha Options.  (line  171)
59166* mfloat128:                             PowerPC SPE Options.
59167                                                             (line   97)
59168* mfloat128 <1>:                         RS/6000 and PowerPC Options.
59169                                                             (line  252)
59170* mfloat128-hardware:                    RS/6000 and PowerPC Options.
59171                                                             (line  274)
59172* mfloat32:                              PDP-11 Options.     (line   52)
59173* mfloat64:                              PDP-11 Options.     (line   48)
59174* mflush-func:                           MIPS Options.       (line  742)
59175* mflush-func=NAME:                      M32R/D Options.     (line   93)
59176* mflush-trap=NUMBER:                    M32R/D Options.     (line   86)
59177* mfma:                                  x86 Options.        (line  731)
59178* mfma4:                                 x86 Options.        (line  734)
59179* mfmaf:                                 SPARC Options.      (line  267)
59180* mfmovd:                                SH Options.         (line  148)
59181* mforce-indirect-call:                  x86 Options.        (line  978)
59182* mforce-no-pic:                         Xtensa Options.     (line   41)
59183* mfp-exceptions:                        MIPS Options.       (line  790)
59184* mfp-mode:                              Adapteva Epiphany Options.
59185                                                             (line   71)
59186* mfp-reg:                               DEC Alpha Options.  (line   25)
59187* mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
59188* mfp-trap-mode:                         DEC Alpha Options.  (line   63)
59189* mfp16-format:                          ARM Options.        (line  584)
59190* mfp32:                                 MIPS Options.       (line  257)
59191* mfp64:                                 MIPS Options.       (line  260)
59192* mfpmath:                               Optimize Options.   (line 2019)
59193* mfpmath <1>:                           x86 Options.        (line  400)
59194* mfpr-32:                               FRV Options.        (line   15)
59195* mfpr-64:                               FRV Options.        (line   19)
59196* mfprnd:                                RS/6000 and PowerPC Options.
59197                                                             (line   27)
59198* mfpu:                                  ARC Options.        (line  231)
59199* mfpu <1>:                              ARM Options.        (line  556)
59200* mfpu <2>:                              PDP-11 Options.     (line    9)
59201* mfpu <3>:                              RS/6000 and PowerPC Options.
59202                                                             (line  385)
59203* mfpu <4>:                              SPARC Options.      (line   34)
59204* mfpu <5>:                              Visium Options.     (line   19)
59205* mfpxx:                                 MIPS Options.       (line  263)
59206* mfract-convert-truncate:               AVR Options.        (line  277)
59207* mframe-header-opt:                     MIPS Options.       (line  851)
59208* mfriz:                                 RS/6000 and PowerPC Options.
59209                                                             (line  913)
59210* mfsca:                                 SH Options.         (line  365)
59211* mfsgsbase:                             x86 Options.        (line  728)
59212* mfsmuld:                               SPARC Options.      (line  274)
59213* mfsrra:                                SH Options.         (line  374)
59214* mft32b:                                FT32 Options.       (line   23)
59215* mfull-regs:                            NDS32 Options.      (line   18)
59216* mfull-toc:                             PowerPC SPE Options.
59217                                                             (line  122)
59218* mfull-toc <1>:                         RS/6000 and PowerPC Options.
59219                                                             (line  294)
59220* mfused-madd:                           IA-64 Options.      (line   88)
59221* mfused-madd <1>:                       MIPS Options.       (line  600)
59222* mfused-madd <2>:                       PowerPC SPE Options.
59223                                                             (line  225)
59224* mfused-madd <3>:                       RS/6000 and PowerPC Options.
59225                                                             (line  427)
59226* mfused-madd <4>:                       S/390 and zSeries Options.
59227                                                             (line  175)
59228* mfused-madd <5>:                       SH Options.         (line  356)
59229* mfused-madd <6>:                       Xtensa Options.     (line   19)
59230* mfxsr:                                 x86 Options.        (line  750)
59231* MG:                                    Preprocessor Options.
59232                                                             (line  122)
59233* mg:                                    VAX Options.        (line   17)
59234* mg10:                                  RL78 Options.       (line   62)
59235* mg13:                                  RL78 Options.       (line   62)
59236* mg14:                                  RL78 Options.       (line   62)
59237* mgas:                                  HPPA Options.       (line   75)
59238* mgas-isr-prologues:                    AVR Options.        (line  194)
59239* mgcc-abi:                              V850 Options.       (line  148)
59240* mgeneral-regs-only:                    AArch64 Options.    (line   24)
59241* mgeneral-regs-only <1>:                x86 Options.        (line 1281)
59242* mgfni:                                 x86 Options.        (line  763)
59243* mghs:                                  V850 Options.       (line  127)
59244* mglibc:                                GNU/Linux Options.  (line    9)
59245* mgnu:                                  VAX Options.        (line   13)
59246* mgnu-as:                               IA-64 Options.      (line   18)
59247* mgnu-attribute:                        PowerPC SPE Options.
59248                                                             (line  421)
59249* mgnu-attribute <1>:                    RS/6000 and PowerPC Options.
59250                                                             (line  644)
59251* mgnu-ld:                               HPPA Options.       (line  111)
59252* mgnu-ld <1>:                           IA-64 Options.      (line   23)
59253* mgomp:                                 Nvidia PTX Options. (line   48)
59254* mgotplt:                               CRIS Options.       (line   81)
59255* mgp32:                                 MIPS Options.       (line  251)
59256* mgp64:                                 MIPS Options.       (line  254)
59257* mgpopt:                                MIPS Options.       (line  478)
59258* mgpopt <1>:                            Nios II Options.    (line   16)
59259* mgpr-32:                               FRV Options.        (line    7)
59260* mgpr-64:                               FRV Options.        (line   11)
59261* mgprel-ro:                             FRV Options.        (line   99)
59262* mgprel-sec:                            Nios II Options.    (line   65)
59263* mh:                                    H8/300 Options.     (line   14)
59264* mhal:                                  Nios II Options.    (line  304)
59265* mhalf-reg-file:                        Adapteva Epiphany Options.
59266                                                             (line    9)
59267* mhard-dfp:                             RS/6000 and PowerPC Options.
59268                                                             (line   27)
59269* mhard-dfp <1>:                         S/390 and zSeries Options.
59270                                                             (line   20)
59271* mhard-float:                           FRV Options.        (line   23)
59272* mhard-float <1>:                       M680x0 Options.     (line  194)
59273* mhard-float <2>:                       MicroBlaze Options. (line   10)
59274* mhard-float <3>:                       MIPS Options.       (line  266)
59275* mhard-float <4>:                       PowerPC SPE Options.
59276                                                             (line  184)
59277* mhard-float <5>:                       RS/6000 and PowerPC Options.
59278                                                             (line  371)
59279* mhard-float <6>:                       S/390 and zSeries Options.
59280                                                             (line   11)
59281* mhard-float <7>:                       SPARC Options.      (line   34)
59282* mhard-float <8>:                       V850 Options.       (line  113)
59283* mhard-float <9>:                       Visium Options.     (line   19)
59284* mhard-float <10>:                      x86 Options.        (line  465)
59285* mhard-quad-float:                      SPARC Options.      (line   55)
59286* mhardlit:                              MCore Options.      (line   10)
59287* mhint-max-distance:                    SPU Options.        (line  107)
59288* mhint-max-nops:                        SPU Options.        (line  101)
59289* mhle:                                  x86 Options.        (line  756)
59290* mhotpatch:                             S/390 and zSeries Options.
59291                                                             (line  210)
59292* mhp-ld:                                HPPA Options.       (line  123)
59293* mhtm:                                  RS/6000 and PowerPC Options.
59294                                                             (line  221)
59295* mhtm <1>:                              S/390 and zSeries Options.
59296                                                             (line  104)
59297* mhw-div:                               Nios II Options.    (line  124)
59298* mhw-mul:                               Nios II Options.    (line  124)
59299* mhw-mulx:                              Nios II Options.    (line  124)
59300* mhwmult=:                              MSP430 Options.     (line   63)
59301* miamcu:                                x86 Options.        (line 1330)
59302* micplb:                                Blackfin Options.   (line  175)
59303* mid-shared-library:                    Blackfin Options.   (line   78)
59304* mieee:                                 DEC Alpha Options.  (line   39)
59305* mieee <1>:                             SH Options.         (line  165)
59306* mieee-conformant:                      DEC Alpha Options.  (line  134)
59307* mieee-fp:                              x86 Options.        (line  459)
59308* mieee-with-inexact:                    DEC Alpha Options.  (line   52)
59309* milp32:                                IA-64 Options.      (line  121)
59310* mimadd:                                MIPS Options.       (line  593)
59311* mimpure-text:                          Solaris 2 Options.  (line   15)
59312* mincoming-stack-boundary:              x86 Options.        (line  678)
59313* mindexed-loads:                        ARC Options.        (line  480)
59314* minline-all-stringops:                 x86 Options.        (line 1148)
59315* minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
59316* minline-float-divide-min-latency:      IA-64 Options.      (line   54)
59317* minline-ic_invalidate:                 SH Options.         (line  174)
59318* minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
59319* minline-int-divide-min-latency:        IA-64 Options.      (line   65)
59320* minline-plt:                           Blackfin Options.   (line  135)
59321* minline-plt <1>:                       FRV Options.        (line   81)
59322* minline-sqrt-max-throughput:           IA-64 Options.      (line   80)
59323* minline-sqrt-min-latency:              IA-64 Options.      (line   76)
59324* minline-stringops-dynamically:         x86 Options.        (line 1155)
59325* minrt:                                 MSP430 Options.     (line   85)
59326* minsert-sched-nops:                    PowerPC SPE Options.
59327                                                             (line  316)
59328* minsert-sched-nops <1>:                RS/6000 and PowerPC Options.
59329                                                             (line  543)
59330* mint-register:                         RX Options.         (line  100)
59331* mint16:                                PDP-11 Options.     (line   40)
59332* mint32:                                CR16 Options.       (line   22)
59333* mint32 <1>:                            H8/300 Options.     (line   38)
59334* mint32 <2>:                            PDP-11 Options.     (line   44)
59335* mint8:                                 AVR Options.        (line  204)
59336* minterlink-compressed:                 MIPS Options.       (line  134)
59337* minterlink-mips16:                     MIPS Options.       (line  146)
59338* mio-volatile:                          MeP Options.        (line   74)
59339* mips1:                                 MIPS Options.       (line   79)
59340* mips16:                                MIPS Options.       (line  119)
59341* mips2:                                 MIPS Options.       (line   82)
59342* mips3:                                 MIPS Options.       (line   85)
59343* mips32:                                MIPS Options.       (line   91)
59344* mips32r3:                              MIPS Options.       (line   94)
59345* mips32r5:                              MIPS Options.       (line   97)
59346* mips32r6:                              MIPS Options.       (line  100)
59347* mips3d:                                MIPS Options.       (line  381)
59348* mips4:                                 MIPS Options.       (line   88)
59349* mips64:                                MIPS Options.       (line  103)
59350* mips64r2:                              MIPS Options.       (line  106)
59351* mips64r3:                              MIPS Options.       (line  109)
59352* mips64r5:                              MIPS Options.       (line  112)
59353* mips64r6:                              MIPS Options.       (line  115)
59354* mirq-ctrl-saved:                       ARC Options.        (line  296)
59355* misel:                                 PowerPC SPE Options.
59356                                                             (line   79)
59357* misel <1>:                             RS/6000 and PowerPC Options.
59358                                                             (line  195)
59359* misize:                                ARC Options.        (line  376)
59360* misize <1>:                            SH Options.         (line  186)
59361* misr-vector-size:                      NDS32 Options.      (line   57)
59362* missue-rate=NUMBER:                    M32R/D Options.     (line   79)
59363* mivc2:                                 MeP Options.        (line   59)
59364* mjli-alawys:                           ARC Options.        (line   14)
59365* mjsr:                                  RX Options.         (line  169)
59366* mjump-in-delay:                        HPPA Options.       (line   30)
59367* mkernel:                               Darwin Options.     (line   82)
59368* mknuthdiv:                             MMIX Options.       (line   32)
59369* ml:                                    MeP Options.        (line   78)
59370* ml <1>:                                SH Options.         (line  129)
59371* mlarge:                                MSP430 Options.     (line   52)
59372* mlarge-data:                           DEC Alpha Options.  (line  187)
59373* mlarge-data-threshold:                 x86 Options.        (line  564)
59374* mlarge-mem:                            SPU Options.        (line   38)
59375* mlarge-text:                           DEC Alpha Options.  (line  205)
59376* mleadz:                                MeP Options.        (line   81)
59377* mleaf-id-shared-library:               Blackfin Options.   (line   89)
59378* mlibfuncs:                             MMIX Options.       (line   10)
59379* mlibrary-pic:                          FRV Options.        (line  135)
59380* mlinked-fp:                            FRV Options.        (line  116)
59381* mlinker-opt:                           HPPA Options.       (line   85)
59382* mlinux:                                CRIS Options.       (line   91)
59383* mlittle:                               PowerPC SPE Options.
59384                                                             (line  265)
59385* mlittle <1>:                           RS/6000 and PowerPC Options.
59386                                                             (line  492)
59387* mlittle-endian:                        AArch64 Options.    (line   30)
59388* mlittle-endian <1>:                    ARC Options.        (line  597)
59389* mlittle-endian <2>:                    ARM Options.        (line   57)
59390* mlittle-endian <3>:                    C6X Options.        (line   16)
59391* mlittle-endian <4>:                    IA-64 Options.      (line   13)
59392* mlittle-endian <5>:                    MCore Options.      (line   39)
59393* mlittle-endian <6>:                    MicroBlaze Options. (line   59)
59394* mlittle-endian <7>:                    NDS32 Options.      (line   12)
59395* mlittle-endian <8>:                    PowerPC SPE Options.
59396                                                             (line  265)
59397* mlittle-endian <9>:                    RS/6000 and PowerPC Options.
59398                                                             (line  492)
59399* mlittle-endian <10>:                   TILE-Gx Options.    (line   29)
59400* mlittle-endian-data:                   RX Options.         (line   42)
59401* mliw:                                  MN10300 Options.    (line   54)
59402* mll64:                                 ARC Options.        (line  167)
59403* mllsc:                                 MIPS Options.       (line  338)
59404* mload-store-pairs:                     MIPS Options.       (line  566)
59405* mlocal-sdata:                          MIPS Options.       (line  444)
59406* mlock:                                 ARC Options.        (line  342)
59407* mlong-calls:                           Adapteva Epiphany Options.
59408                                                             (line   55)
59409* mlong-calls <1>:                       ARC Options.        (line  401)
59410* mlong-calls <2>:                       ARM Options.        (line  611)
59411* mlong-calls <3>:                       Blackfin Options.   (line  118)
59412* mlong-calls <4>:                       FRV Options.        (line  122)
59413* mlong-calls <5>:                       MIPS Options.       (line  579)
59414* mlong-calls <6>:                       V850 Options.       (line   10)
59415* mlong-double-128:                      S/390 and zSeries Options.
59416                                                             (line   29)
59417* mlong-double-128 <1>:                  x86 Options.        (line  543)
59418* mlong-double-64:                       S/390 and zSeries Options.
59419                                                             (line   29)
59420* mlong-double-64 <1>:                   x86 Options.        (line  543)
59421* mlong-double-80:                       x86 Options.        (line  543)
59422* mlong-jump-table-offsets:              M680x0 Options.     (line  342)
59423* mlong-jumps:                           V850 Options.       (line  108)
59424* mlong-load-store:                      HPPA Options.       (line   66)
59425* mlong32:                               MIPS Options.       (line  419)
59426* mlong64:                               MIPS Options.       (line  414)
59427* mlongcall:                             PowerPC SPE Options.
59428                                                             (line  538)
59429* mlongcall <1>:                         RS/6000 and PowerPC Options.
59430                                                             (line  788)
59431* mlongcalls:                            Xtensa Options.     (line   87)
59432* mloop:                                 V850 Options.       (line  121)
59433* mlow-64k:                              Blackfin Options.   (line   67)
59434* mlow-precision-recip-sqrt:             AArch64 Options.    (line   86)
59435* mlp64:                                 IA-64 Options.      (line  121)
59436* mlpc-width:                            ARC Options.        (line  313)
59437* mlra:                                  ARC Options.        (line  485)
59438* mlra <1>:                              FT32 Options.       (line   16)
59439* mlra <2>:                              SPARC Options.      (line  111)
59440* mlra-priority-compact:                 ARC Options.        (line  493)
59441* mlra-priority-noncompact:              ARC Options.        (line  496)
59442* mlra-priority-none:                    ARC Options.        (line  490)
59443* mlwp:                                  x86 Options.        (line  741)
59444* mlxc1-sxc1:                            MIPS Options.       (line  861)
59445* mlzcnt:                                x86 Options.        (line  749)
59446* MM:                                    Preprocessor Options.
59447                                                             (line  102)
59448* mm:                                    MeP Options.        (line   84)
59449* mmac:                                  CR16 Options.       (line    9)
59450* mmac <1>:                              Score Options.      (line   21)
59451* mmac-24:                               ARC Options.        (line  351)
59452* mmac-d16:                              ARC Options.        (line  347)
59453* mmac_24:                               ARC Options.        (line  620)
59454* mmac_d16:                              ARC Options.        (line  623)
59455* mmad:                                  MIPS Options.       (line  588)
59456* mmadd4:                                MIPS Options.       (line  866)
59457* mmain-is-OS_task:                      AVR Options.        (line  210)
59458* mmainkernel:                           Nvidia PTX Options. (line   13)
59459* mmalloc64:                             VMS Options.        (line   17)
59460* mmax:                                  DEC Alpha Options.  (line  163)
59461* mmax-constant-size:                    RX Options.         (line   82)
59462* mmax-stack-frame:                      CRIS Options.       (line   23)
59463* mmcount-ra-address:                    MIPS Options.       (line  838)
59464* mmcu:                                  AVR Options.        (line    9)
59465* mmcu <1>:                              MIPS Options.       (line  398)
59466* mmcu=:                                 MSP430 Options.     (line   14)
59467* MMD:                                   Preprocessor Options.
59468                                                             (line  185)
59469* mmedia:                                FRV Options.        (line   56)
59470* mmedium-calls:                         ARC Options.        (line  405)
59471* mmemcpy:                               MicroBlaze Options. (line   13)
59472* mmemcpy <1>:                           MIPS Options.       (line  573)
59473* mmemcpy-strategy=STRATEGY:             x86 Options.        (line 1177)
59474* mmemory-latency:                       DEC Alpha Options.  (line  268)
59475* mmemory-model:                         SPARC Options.      (line  348)
59476* mmemset-strategy=STRATEGY:             x86 Options.        (line 1189)
59477* mmfcrf:                                PowerPC SPE Options.
59478                                                             (line   11)
59479* mmfcrf <1>:                            RS/6000 and PowerPC Options.
59480                                                             (line   27)
59481* mmfpgpr:                               RS/6000 and PowerPC Options.
59482                                                             (line   27)
59483* mmicromips:                            MIPS Options.       (line  386)
59484* mminimal-toc:                          PowerPC SPE Options.
59485                                                             (line  122)
59486* mminimal-toc <1>:                      RS/6000 and PowerPC Options.
59487                                                             (line  294)
59488* mminmax:                               MeP Options.        (line   87)
59489* mmitigate-rop:                         x86 Options.        (line 1275)
59490* mmixed-code:                           ARC Options.        (line  508)
59491* mmmx:                                  x86 Options.        (line  703)
59492* mmodel=large:                          M32R/D Options.     (line   33)
59493* mmodel=medium:                         M32R/D Options.     (line   27)
59494* mmodel=small:                          M32R/D Options.     (line   18)
59495* mmovbe:                                x86 Options.        (line  882)
59496* mmovdir64b:                            x86 Options.        (line  768)
59497* mmovdiri:                              x86 Options.        (line  767)
59498* mmpx:                                  x86 Options.        (line  758)
59499* mmpy-option:                           ARC Options.        (line  173)
59500* mms-bitfields:                         x86 Options.        (line 1023)
59501* mmt:                                   MIPS Options.       (line  394)
59502* mmul:                                  RL78 Options.       (line   15)
59503* mmul-bug-workaround:                   CRIS Options.       (line   32)
59504* mmul.x:                                Moxie Options.      (line   14)
59505* mmul32x16:                             ARC Options.        (line  121)
59506* mmul64:                                ARC Options.        (line  124)
59507* mmuladd:                               FRV Options.        (line   64)
59508* mmulhw:                                RS/6000 and PowerPC Options.
59509                                                             (line  436)
59510* mmult:                                 MeP Options.        (line   90)
59511* mmult-bug:                             MN10300 Options.    (line    9)
59512* mmultcost:                             ARC Options.        (line  570)
59513* mmulti-cond-exec:                      FRV Options.        (line  215)
59514* mmulticore:                            Blackfin Options.   (line  139)
59515* mmultiple:                             PowerPC SPE Options.
59516                                                             (line  195)
59517* mmultiple <1>:                         RS/6000 and PowerPC Options.
59518                                                             (line  397)
59519* mmusl:                                 GNU/Linux Options.  (line   18)
59520* mmvcle:                                S/390 and zSeries Options.
59521                                                             (line  138)
59522* mmvme:                                 PowerPC SPE Options.
59523                                                             (line  443)
59524* mmvme <1>:                             RS/6000 and PowerPC Options.
59525                                                             (line  666)
59526* mmwaitx:                               x86 Options.        (line  759)
59527* mn:                                    H8/300 Options.     (line   20)
59528* mn-flash:                              AVR Options.        (line  215)
59529* mnan=2008:                             MIPS Options.       (line  319)
59530* mnan=legacy:                           MIPS Options.       (line  319)
59531* mneon-for-64bits:                      ARM Options.        (line  767)
59532* mnested-cond-exec:                     FRV Options.        (line  230)
59533* mnhwloop:                              Score Options.      (line   15)
59534* mno-16-bit:                            NDS32 Options.      (line   54)
59535* mno-4byte-functions:                   MCore Options.      (line   27)
59536* mno-8byte-align:                       V850 Options.       (line  170)
59537* mno-abicalls:                          MIPS Options.       (line  191)
59538* mno-abshi:                             PDP-11 Options.     (line   58)
59539* mno-ac0:                               PDP-11 Options.     (line   20)
59540* mno-address-space-conversion:          SPU Options.        (line   68)
59541* mno-align-double:                      x86 Options.        (line  502)
59542* mno-align-int:                         M680x0 Options.     (line  263)
59543* mno-align-loops:                       M32R/D Options.     (line   76)
59544* mno-align-stringops:                   x86 Options.        (line 1143)
59545* mno-allow-string-insns:                RX Options.         (line  150)
59546* mno-altivec:                           RS/6000 and PowerPC Options.
59547                                                             (line  141)
59548* mno-am33:                              MN10300 Options.    (line   20)
59549* mno-app-regs:                          SPARC Options.      (line   10)
59550* mno-app-regs <1>:                      V850 Options.       (line  185)
59551* mno-as100-syntax:                      RX Options.         (line   76)
59552* mno-atomic-updates:                    SPU Options.        (line   83)
59553* mno-auto-litpools:                     Xtensa Options.     (line   60)
59554* mno-avoid-indexed-addresses:           PowerPC SPE Options.
59555                                                             (line  216)
59556* mno-avoid-indexed-addresses <1>:       RS/6000 and PowerPC Options.
59557                                                             (line  418)
59558* mno-backchain:                         S/390 and zSeries Options.
59559                                                             (line   35)
59560* mno-base-addresses:                    MMIX Options.       (line   53)
59561* mno-bit-align:                         RS/6000 and PowerPC Options.
59562                                                             (line  450)
59563* mno-bitfield:                          M680x0 Options.     (line  227)
59564* mno-branch-likely:                     MIPS Options.       (line  758)
59565* mno-branch-predict:                    MMIX Options.       (line   48)
59566* mno-brcc:                              ARC Options.        (line  441)
59567* mno-bwx:                               DEC Alpha Options.  (line  163)
59568* mno-bypass-cache:                      Nios II Options.    (line  103)
59569* mno-cache-volatile:                    Nios II Options.    (line  109)
59570* mno-call-ms2sysv-xlogues:              x86 Options.        (line  983)
59571* mno-callgraph-data:                    MCore Options.      (line   31)
59572* mno-cbcond:                            SPARC Options.      (line  260)
59573* mno-check-zero-division:               MIPS Options.       (line  546)
59574* mno-cix:                               DEC Alpha Options.  (line  163)
59575* mno-clearbss:                          MicroBlaze Options. (line   16)
59576* mno-cmov:                              NDS32 Options.      (line   24)
59577* mno-cmpb:                              RS/6000 and PowerPC Options.
59578                                                             (line   27)
59579* mno-cond-exec:                         ARC Options.        (line  455)
59580* mno-cond-exec <1>:                     FRV Options.        (line  194)
59581* mno-cond-move:                         FRV Options.        (line  166)
59582* mno-const-align:                       CRIS Options.       (line   55)
59583* mno-const16:                           Xtensa Options.     (line   10)
59584* mno-crt0:                              MN10300 Options.    (line   43)
59585* mno-crt0 <1>:                          Moxie Options.      (line   18)
59586* mno-crypto:                            RS/6000 and PowerPC Options.
59587                                                             (line  215)
59588* mno-csync-anomaly:                     Blackfin Options.   (line   63)
59589* mno-custom-INSN:                       Nios II Options.    (line  139)
59590* mno-data-align:                        CRIS Options.       (line   55)
59591* mno-debug:                             S/390 and zSeries Options.
59592                                                             (line  144)
59593* mno-default:                           x86 Options.        (line  818)
59594* mno-disable-callt:                     V850 Options.       (line   92)
59595* mno-div:                               M680x0 Options.     (line  206)
59596* mno-div <1>:                           MCore Options.      (line   15)
59597* mno-dlmzb:                             RS/6000 and PowerPC Options.
59598                                                             (line  443)
59599* mno-double:                            FRV Options.        (line   52)
59600* mno-dpfp-lrsr:                         ARC Options.        (line  108)
59601* mno-dsp:                               MIPS Options.       (line  352)
59602* mno-dspr2:                             MIPS Options.       (line  358)
59603* mno-dwarf2-asm:                        IA-64 Options.      (line   94)
59604* mno-dword:                             FRV Options.        (line   44)
59605* mno-eabi:                              PowerPC SPE Options.
59606                                                             (line  467)
59607* mno-eabi <1>:                          RS/6000 and PowerPC Options.
59608                                                             (line  690)
59609* mno-early-stop-bits:                   IA-64 Options.      (line  100)
59610* mno-eflags:                            FRV Options.        (line  155)
59611* mno-embedded-data:                     MIPS Options.       (line  493)
59612* mno-ep:                                V850 Options.       (line   16)
59613* mno-epsilon:                           MMIX Options.       (line   15)
59614* mno-eva:                               MIPS Options.       (line  402)
59615* mno-explicit-relocs:                   DEC Alpha Options.  (line  176)
59616* mno-explicit-relocs <1>:               MIPS Options.       (line  537)
59617* mno-exr:                               H8/300 Options.     (line   33)
59618* mno-extern-sdata:                      MIPS Options.       (line  456)
59619* mno-fancy-math-387:                    x86 Options.        (line  492)
59620* mno-fast-sw-div:                       Nios II Options.    (line  115)
59621* mno-faster-structs:                    SPARC Options.      (line   91)
59622* mno-fix:                               DEC Alpha Options.  (line  163)
59623* mno-fix-24k:                           MIPS Options.       (line  617)
59624* mno-fix-cortex-a53-835769:             AArch64 Options.    (line   73)
59625* mno-fix-cortex-a53-843419:             AArch64 Options.    (line   80)
59626* mno-fix-r10000:                        MIPS Options.       (line  639)
59627* mno-fix-r4000:                         MIPS Options.       (line  623)
59628* mno-fix-r4400:                         MIPS Options.       (line  633)
59629* mno-flat:                              SPARC Options.      (line   22)
59630* mno-float:                             MIPS Options.       (line  273)
59631* mno-float128:                          PowerPC SPE Options.
59632                                                             (line   97)
59633* mno-float128 <1>:                      RS/6000 and PowerPC Options.
59634                                                             (line  252)
59635* mno-float128-hardware:                 RS/6000 and PowerPC Options.
59636                                                             (line  274)
59637* mno-float32:                           PDP-11 Options.     (line   48)
59638* mno-float64:                           PDP-11 Options.     (line   52)
59639* mno-flush-func:                        M32R/D Options.     (line   98)
59640* mno-flush-trap:                        M32R/D Options.     (line   90)
59641* mno-fmaf:                              SPARC Options.      (line  267)
59642* mno-fp-in-toc:                         PowerPC SPE Options.
59643                                                             (line  122)
59644* mno-fp-in-toc <1>:                     RS/6000 and PowerPC Options.
59645                                                             (line  294)
59646* mno-fp-regs:                           DEC Alpha Options.  (line   25)
59647* mno-fp-ret-in-387:                     x86 Options.        (line  482)
59648* mno-fprnd:                             RS/6000 and PowerPC Options.
59649                                                             (line   27)
59650* mno-fpu:                               SPARC Options.      (line   39)
59651* mno-fpu <1>:                           Visium Options.     (line   24)
59652* mno-fsca:                              SH Options.         (line  365)
59653* mno-fsmuld:                            SPARC Options.      (line  274)
59654* mno-fsrra:                             SH Options.         (line  374)
59655* mno-fused-madd:                        IA-64 Options.      (line   88)
59656* mno-fused-madd <1>:                    MIPS Options.       (line  600)
59657* mno-fused-madd <2>:                    PowerPC SPE Options.
59658                                                             (line  225)
59659* mno-fused-madd <3>:                    RS/6000 and PowerPC Options.
59660                                                             (line  427)
59661* mno-fused-madd <4>:                    S/390 and zSeries Options.
59662                                                             (line  175)
59663* mno-fused-madd <5>:                    SH Options.         (line  356)
59664* mno-fused-madd <6>:                    Xtensa Options.     (line   19)
59665* mno-gnu-as:                            IA-64 Options.      (line   18)
59666* mno-gnu-attribute:                     PowerPC SPE Options.
59667                                                             (line  421)
59668* mno-gnu-attribute <1>:                 RS/6000 and PowerPC Options.
59669                                                             (line  644)
59670* mno-gnu-ld:                            IA-64 Options.      (line   23)
59671* mno-gotplt:                            CRIS Options.       (line   81)
59672* mno-gpopt:                             MIPS Options.       (line  478)
59673* mno-gpopt <1>:                         Nios II Options.    (line   16)
59674* mno-hard-dfp:                          RS/6000 and PowerPC Options.
59675                                                             (line   27)
59676* mno-hard-dfp <1>:                      S/390 and zSeries Options.
59677                                                             (line   20)
59678* mno-hardlit:                           MCore Options.      (line   10)
59679* mno-htm:                               RS/6000 and PowerPC Options.
59680                                                             (line  221)
59681* mno-htm <1>:                           S/390 and zSeries Options.
59682                                                             (line  104)
59683* mno-hw-div:                            Nios II Options.    (line  124)
59684* mno-hw-mul:                            Nios II Options.    (line  124)
59685* mno-hw-mulx:                           Nios II Options.    (line  124)
59686* mno-id-shared-library:                 Blackfin Options.   (line   85)
59687* mno-ieee:                              SH Options.         (line  165)
59688* mno-ieee-fp:                           x86 Options.        (line  459)
59689* mno-imadd:                             MIPS Options.       (line  593)
59690* mno-inline-float-divide:               IA-64 Options.      (line   62)
59691* mno-inline-int-divide:                 IA-64 Options.      (line   73)
59692* mno-inline-sqrt:                       IA-64 Options.      (line   84)
59693* mno-int16:                             PDP-11 Options.     (line   44)
59694* mno-int32:                             PDP-11 Options.     (line   40)
59695* mno-interlink-compressed:              MIPS Options.       (line  134)
59696* mno-interlink-mips16:                  MIPS Options.       (line  146)
59697* mno-interrupts:                        AVR Options.        (line  218)
59698* mno-isel:                              PowerPC SPE Options.
59699                                                             (line   79)
59700* mno-isel <1>:                          RS/6000 and PowerPC Options.
59701                                                             (line  195)
59702* mno-jsr:                               RX Options.         (line  169)
59703* mno-knuthdiv:                          MMIX Options.       (line   32)
59704* mno-leaf-id-shared-library:            Blackfin Options.   (line   95)
59705* mno-libfuncs:                          MMIX Options.       (line   10)
59706* mno-llsc:                              MIPS Options.       (line  338)
59707* mno-load-store-pairs:                  MIPS Options.       (line  566)
59708* mno-local-sdata:                       MIPS Options.       (line  444)
59709* mno-long-calls:                        ARM Options.        (line  611)
59710* mno-long-calls <1>:                    Blackfin Options.   (line  118)
59711* mno-long-calls <2>:                    HPPA Options.       (line  136)
59712* mno-long-calls <3>:                    MIPS Options.       (line  579)
59713* mno-long-calls <4>:                    V850 Options.       (line   10)
59714* mno-long-jumps:                        V850 Options.       (line  108)
59715* mno-longcall:                          PowerPC SPE Options.
59716                                                             (line  538)
59717* mno-longcall <1>:                      RS/6000 and PowerPC Options.
59718                                                             (line  788)
59719* mno-longcalls:                         Xtensa Options.     (line   87)
59720* mno-low-64k:                           Blackfin Options.   (line   71)
59721* mno-low-precision-recip-sqrt:          AArch64 Options.    (line   86)
59722* mno-lra:                               SPARC Options.      (line  111)
59723* mno-lsim:                              FR30 Options.       (line   14)
59724* mno-lsim <1>:                          MCore Options.      (line   46)
59725* mno-mad:                               MIPS Options.       (line  588)
59726* mno-max:                               DEC Alpha Options.  (line  163)
59727* mno-mcount-ra-address:                 MIPS Options.       (line  838)
59728* mno-mcu:                               MIPS Options.       (line  398)
59729* mno-mdmx:                              MIPS Options.       (line  375)
59730* mno-media:                             FRV Options.        (line   60)
59731* mno-memcpy:                            MIPS Options.       (line  573)
59732* mno-mfcrf:                             PowerPC SPE Options.
59733                                                             (line   11)
59734* mno-mfcrf <1>:                         RS/6000 and PowerPC Options.
59735                                                             (line   27)
59736* mno-mfpgpr:                            RS/6000 and PowerPC Options.
59737                                                             (line   27)
59738* mno-millicode:                         ARC Options.        (line  499)
59739* mno-mips16:                            MIPS Options.       (line  119)
59740* mno-mips3d:                            MIPS Options.       (line  381)
59741* mno-mmicromips:                        MIPS Options.       (line  386)
59742* mno-mpy:                               ARC Options.        (line  117)
59743* mno-ms-bitfields:                      x86 Options.        (line 1023)
59744* mno-mt:                                MIPS Options.       (line  394)
59745* mno-mul-bug-workaround:                CRIS Options.       (line   32)
59746* mno-muladd:                            FRV Options.        (line   68)
59747* mno-mulhw:                             RS/6000 and PowerPC Options.
59748                                                             (line  436)
59749* mno-mult-bug:                          MN10300 Options.    (line   13)
59750* mno-multi-cond-exec:                   FRV Options.        (line  223)
59751* mno-multiple:                          PowerPC SPE Options.
59752                                                             (line  195)
59753* mno-multiple <1>:                      RS/6000 and PowerPC Options.
59754                                                             (line  397)
59755* mno-mvcle:                             S/390 and zSeries Options.
59756                                                             (line  138)
59757* mno-nested-cond-exec:                  FRV Options.        (line  237)
59758* mno-odd-spreg:                         MIPS Options.       (line  292)
59759* mno-omit-leaf-frame-pointer:           AArch64 Options.    (line   56)
59760* mno-optimize-membar:                   FRV Options.        (line  249)
59761* mno-opts:                              MeP Options.        (line   93)
59762* mno-pack:                              FRV Options.        (line  151)
59763* mno-packed-stack:                      S/390 and zSeries Options.
59764                                                             (line   54)
59765* mno-paired:                            RS/6000 and PowerPC Options.
59766                                                             (line  204)
59767* mno-paired-single:                     MIPS Options.       (line  369)
59768* mno-pc-relative-literal-loads:         AArch64 Options.    (line  204)
59769* mno-perf-ext:                          NDS32 Options.      (line   30)
59770* mno-perf-ext <1>:                      NDS32 Options.      (line   36)
59771* mno-perf-ext <2>:                      NDS32 Options.      (line   42)
59772* mno-pic:                               IA-64 Options.      (line   26)
59773* mno-pid:                               RX Options.         (line  117)
59774* mno-plt:                               MIPS Options.       (line  218)
59775* mno-popc:                              SPARC Options.      (line  281)
59776* mno-popcntb:                           PowerPC SPE Options.
59777                                                             (line   11)
59778* mno-popcntb <1>:                       RS/6000 and PowerPC Options.
59779                                                             (line   27)
59780* mno-popcntd:                           RS/6000 and PowerPC Options.
59781                                                             (line   27)
59782* mno-postinc:                           Adapteva Epiphany Options.
59783                                                             (line  109)
59784* mno-postmodify:                        Adapteva Epiphany Options.
59785                                                             (line  109)
59786* mno-power8-fusion:                     RS/6000 and PowerPC Options.
59787                                                             (line  227)
59788* mno-power8-vector:                     RS/6000 and PowerPC Options.
59789                                                             (line  233)
59790* mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
59791                                                             (line   27)
59792* mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
59793                                                             (line   27)
59794* mno-powerpc64:                         RS/6000 and PowerPC Options.
59795                                                             (line   27)
59796* mno-prolog-function:                   V850 Options.       (line   23)
59797* mno-prologue-epilogue:                 CRIS Options.       (line   71)
59798* mno-prototype:                         PowerPC SPE Options.
59799                                                             (line  427)
59800* mno-prototype <1>:                     RS/6000 and PowerPC Options.
59801                                                             (line  650)
59802* mno-push-args:                         x86 Options.        (line 1000)
59803* mno-quad-memory:                       RS/6000 and PowerPC Options.
59804                                                             (line  240)
59805* mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
59806                                                             (line  246)
59807* mno-readonly-in-sdata:                 RS/6000 and PowerPC Options.
59808                                                             (line  742)
59809* mno-red-zone:                          x86 Options.        (line 1350)
59810* mno-register-names:                    IA-64 Options.      (line   37)
59811* mno-regnames:                          PowerPC SPE Options.
59812                                                             (line  532)
59813* mno-regnames <1>:                      RS/6000 and PowerPC Options.
59814                                                             (line  782)
59815* mno-relax:                             V850 Options.       (line  103)
59816* mno-relax-immediate:                   MCore Options.      (line   19)
59817* mno-relocatable:                       PowerPC SPE Options.
59818                                                             (line  239)
59819* mno-relocatable <1>:                   RS/6000 and PowerPC Options.
59820                                                             (line  466)
59821* mno-relocatable-lib:                   PowerPC SPE Options.
59822                                                             (line  250)
59823* mno-relocatable-lib <1>:               RS/6000 and PowerPC Options.
59824                                                             (line  477)
59825* mno-renesas:                           SH Options.         (line  155)
59826* mno-round-nearest:                     Adapteva Epiphany Options.
59827                                                             (line   51)
59828* mno-rtd:                               M680x0 Options.     (line  258)
59829* mno-save-mduc-in-interrupts:           RL78 Options.       (line   79)
59830* mno-scc:                               FRV Options.        (line  180)
59831* mno-sched-ar-data-spec:                IA-64 Options.      (line  135)
59832* mno-sched-ar-in-data-spec:             IA-64 Options.      (line  157)
59833* mno-sched-br-data-spec:                IA-64 Options.      (line  128)
59834* mno-sched-br-in-data-spec:             IA-64 Options.      (line  150)
59835* mno-sched-control-spec:                IA-64 Options.      (line  142)
59836* mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  185)
59837* mno-sched-in-control-spec:             IA-64 Options.      (line  164)
59838* mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  178)
59839* mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  171)
59840* mno-sched-prolog:                      ARM Options.        (line   32)
59841* mno-sdata:                             ARC Options.        (line  419)
59842* mno-sdata <1>:                         IA-64 Options.      (line   42)
59843* mno-sdata <2>:                         PowerPC SPE Options.
59844                                                             (line  513)
59845* mno-sdata <3>:                         RS/6000 and PowerPC Options.
59846                                                             (line  736)
59847* mno-sep-data:                          Blackfin Options.   (line  113)
59848* mno-serialize-volatile:                Xtensa Options.     (line   35)
59849* mno-short:                             M680x0 Options.     (line  222)
59850* mno-side-effects:                      CRIS Options.       (line   46)
59851* mno-sim:                               RX Options.         (line   71)
59852* mno-single-exit:                       MMIX Options.       (line   65)
59853* mno-slow-bytes:                        MCore Options.      (line   35)
59854* mno-small-exec:                        S/390 and zSeries Options.
59855                                                             (line   79)
59856* mno-smartmips:                         MIPS Options.       (line  365)
59857* mno-soft-cmpsf:                        Adapteva Epiphany Options.
59858                                                             (line   29)
59859* mno-soft-float:                        DEC Alpha Options.  (line   10)
59860* mno-space-regs:                        HPPA Options.       (line   45)
59861* mno-spe:                               PowerPC SPE Options.
59862                                                             (line   88)
59863* mno-specld-anomaly:                    Blackfin Options.   (line   53)
59864* mno-split-addresses:                   MIPS Options.       (line  531)
59865* mno-stack-align:                       CRIS Options.       (line   55)
59866* mno-stack-bias:                        SPARC Options.      (line  372)
59867* mno-std-struct-return:                 SPARC Options.      (line  102)
59868* mno-strict-align:                      M680x0 Options.     (line  283)
59869* mno-strict-align <1>:                  PowerPC SPE Options.
59870                                                             (line  234)
59871* mno-strict-align <2>:                  RS/6000 and PowerPC Options.
59872                                                             (line  461)
59873* mno-subxc:                             SPARC Options.      (line  288)
59874* mno-sum-in-toc:                        PowerPC SPE Options.
59875                                                             (line  122)
59876* mno-sum-in-toc <1>:                    RS/6000 and PowerPC Options.
59877                                                             (line  294)
59878* mno-sym32:                             MIPS Options.       (line  429)
59879* mno-target-align:                      Xtensa Options.     (line   74)
59880* mno-text-section-literals:             Xtensa Options.     (line   47)
59881* mno-tls-markers:                       PowerPC SPE Options.
59882                                                             (line  557)
59883* mno-tls-markers <1>:                   RS/6000 and PowerPC Options.
59884                                                             (line  820)
59885* mno-toc:                               PowerPC SPE Options.
59886                                                             (line  259)
59887* mno-toc <1>:                           RS/6000 and PowerPC Options.
59888                                                             (line  486)
59889* mno-toplevel-symbols:                  MMIX Options.       (line   39)
59890* mno-tpf-trace:                         S/390 and zSeries Options.
59891                                                             (line  169)
59892* mno-unaligned-access:                  ARM Options.        (line  754)
59893* mno-unaligned-doubles:                 SPARC Options.      (line   73)
59894* mno-uninit-const-in-rodata:            MIPS Options.       (line  501)
59895* mno-update:                            PowerPC SPE Options.
59896                                                             (line  206)
59897* mno-update <1>:                        RS/6000 and PowerPC Options.
59898                                                             (line  408)
59899* mno-user-mode:                         SPARC Options.      (line   85)
59900* mno-usermode:                          SH Options.         (line  274)
59901* mno-v3push:                            NDS32 Options.      (line   48)
59902* mno-v8plus:                            SPARC Options.      (line  214)
59903* mno-vect-double:                       Adapteva Epiphany Options.
59904                                                             (line  115)
59905* mno-virt:                              MIPS Options.       (line  406)
59906* mno-vis:                               SPARC Options.      (line  221)
59907* mno-vis2:                              SPARC Options.      (line  227)
59908* mno-vis3:                              SPARC Options.      (line  235)
59909* mno-vis4:                              SPARC Options.      (line  243)
59910* mno-vis4b:                             SPARC Options.      (line  251)
59911* mno-vliw-branch:                       FRV Options.        (line  208)
59912* mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
59913* mno-volatile-cache:                    ARC Options.        (line  428)
59914* mno-vrsave:                            RS/6000 and PowerPC Options.
59915                                                             (line  181)
59916* mno-vsx:                               RS/6000 and PowerPC Options.
59917                                                             (line  209)
59918* mno-vx:                                S/390 and zSeries Options.
59919                                                             (line  112)
59920* mno-warn-mcu:                          MSP430 Options.     (line   35)
59921* mno-warn-multiple-fast-interrupts:     RX Options.         (line  143)
59922* mno-wide-bitfields:                    MCore Options.      (line   23)
59923* mno-xgot:                              M680x0 Options.     (line  315)
59924* mno-xgot <1>:                          MIPS Options.       (line  228)
59925* mno-xl-compat:                         PowerPC SPE Options.
59926                                                             (line  152)
59927* mno-xl-compat <1>:                     RS/6000 and PowerPC Options.
59928                                                             (line  329)
59929* mno-xpa:                               MIPS Options.       (line  410)
59930* mno-zdcbranch:                         SH Options.         (line  341)
59931* mno-zero-extend:                       MMIX Options.       (line   26)
59932* mno-zvector:                           S/390 and zSeries Options.
59933                                                             (line  123)
59934* mnobitfield:                           M680x0 Options.     (line  227)
59935* mnodiv:                                FT32 Options.       (line   20)
59936* mnoliw:                                MN10300 Options.    (line   59)
59937* mnomacsave:                            SH Options.         (line  160)
59938* mnop-fun-dllimport:                    x86 Windows Options.
59939                                                             (line   22)
59940* mnop-mcount:                           x86 Options.        (line 1229)
59941* mnopm:                                 FT32 Options.       (line   29)
59942* mnops:                                 Adapteva Epiphany Options.
59943                                                             (line   26)
59944* mnorm:                                 ARC Options.        (line  128)
59945* mnosetlb:                              MN10300 Options.    (line   69)
59946* mnosplit-lohi:                         Adapteva Epiphany Options.
59947                                                             (line  109)
59948* modd-spreg:                            MIPS Options.       (line  292)
59949* momit-leaf-frame-pointer:              AArch64 Options.    (line   56)
59950* momit-leaf-frame-pointer <1>:          Blackfin Options.   (line   43)
59951* momit-leaf-frame-pointer <2>:          x86 Options.        (line 1193)
59952* mone-byte-bool:                        Darwin Options.     (line   90)
59953* moptimize:                             Nvidia PTX Options. (line   17)
59954* moptimize-membar:                      FRV Options.        (line  244)
59955* moverride:                             AArch64 Options.    (line  191)
59956* MP:                                    Preprocessor Options.
59957                                                             (line  132)
59958* mpa-risc-1-0:                          HPPA Options.       (line   19)
59959* mpa-risc-1-1:                          HPPA Options.       (line   19)
59960* mpa-risc-2-0:                          HPPA Options.       (line   19)
59961* mpack:                                 FRV Options.        (line  147)
59962* mpacked-stack:                         S/390 and zSeries Options.
59963                                                             (line   54)
59964* mpadstruct:                            SH Options.         (line  189)
59965* mpaired:                               RS/6000 and PowerPC Options.
59966                                                             (line  204)
59967* mpaired-single:                        MIPS Options.       (line  369)
59968* mpc-relative-literal-loads:            AArch64 Options.    (line  204)
59969* mpc32:                                 x86 Options.        (line  627)
59970* mpc64:                                 x86 Options.        (line  627)
59971* mpc80:                                 x86 Options.        (line  627)
59972* mpclmul:                               x86 Options.        (line  725)
59973* mpconfig:                              x86 Options.        (line  732)
59974* mpcrel:                                M680x0 Options.     (line  275)
59975* mpdebug:                               CRIS Options.       (line   36)
59976* mpe:                                   RS/6000 and PowerPC Options.
59977                                                             (line  348)
59978* mpe-aligned-commons:                   x86 Windows Options.
59979                                                             (line   59)
59980* mperf-ext:                             NDS32 Options.      (line   27)
59981* mperf-ext <1>:                         NDS32 Options.      (line   33)
59982* mperf-ext <2>:                         NDS32 Options.      (line   39)
59983* mpic-data-is-text-relative:            ARM Options.        (line  648)
59984* mpic-register:                         ARM Options.        (line  641)
59985* mpid:                                  RX Options.         (line  117)
59986* mpku:                                  x86 Options.        (line  761)
59987* mplt:                                  MIPS Options.       (line  218)
59988* mpointer-size=SIZE:                    VMS Options.        (line   20)
59989* mpointers-to-nested-functions:         PowerPC SPE Options.
59990                                                             (line  632)
59991* mpointers-to-nested-functions <1>:     RS/6000 and PowerPC Options.
59992                                                             (line  921)
59993* mpoke-function-name:                   ARM Options.        (line  656)
59994* mpopc:                                 SPARC Options.      (line  281)
59995* mpopcnt:                               x86 Options.        (line  744)
59996* mpopcntb:                              PowerPC SPE Options.
59997                                                             (line   11)
59998* mpopcntb <1>:                          RS/6000 and PowerPC Options.
59999                                                             (line   27)
60000* mpopcntd:                              RS/6000 and PowerPC Options.
60001                                                             (line   27)
60002* mportable-runtime:                     HPPA Options.       (line   71)
60003* mpower8-fusion:                        RS/6000 and PowerPC Options.
60004                                                             (line  227)
60005* mpower8-vector:                        RS/6000 and PowerPC Options.
60006                                                             (line  233)
60007* mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
60008                                                             (line   27)
60009* mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
60010                                                             (line   27)
60011* mpowerpc64:                            RS/6000 and PowerPC Options.
60012                                                             (line   27)
60013* mprefer-avx128:                        x86 Options.        (line  842)
60014* mprefer-short-insn-regs:               Adapteva Epiphany Options.
60015                                                             (line   13)
60016* mprefer-vector-width:                  x86 Options.        (line  846)
60017* mprefergot:                            SH Options.         (line  268)
60018* mpreferred-stack-boundary:             RISC-V Options.     (line   60)
60019* mpreferred-stack-boundary <1>:         x86 Options.        (line  657)
60020* mprefetchwt1:                          x86 Options.        (line  737)
60021* mpretend-cmove:                        SH Options.         (line  383)
60022* mprfchw:                               x86 Options.        (line  735)
60023* mprint-tune-info:                      ARM Options.        (line  790)
60024* mprioritize-restricted-insns:          PowerPC SPE Options.
60025                                                             (line  288)
60026* mprioritize-restricted-insns <1>:      RS/6000 and PowerPC Options.
60027                                                             (line  515)
60028* mprolog-function:                      V850 Options.       (line   23)
60029* mprologue-epilogue:                    CRIS Options.       (line   71)
60030* mprototype:                            PowerPC SPE Options.
60031                                                             (line  427)
60032* mprototype <1>:                        RS/6000 and PowerPC Options.
60033                                                             (line  650)
60034* mpure-code:                            ARM Options.        (line  800)
60035* mpush-args:                            x86 Options.        (line 1000)
60036* MQ:                                    Preprocessor Options.
60037                                                             (line  159)
60038* mq-class:                              ARC Options.        (line  513)
60039* mquad-memory:                          RS/6000 and PowerPC Options.
60040                                                             (line  240)
60041* mquad-memory-atomic:                   RS/6000 and PowerPC Options.
60042                                                             (line  246)
60043* mr0rel-sec:                            Nios II Options.    (line   76)
60044* mr10k-cache-barrier:                   MIPS Options.       (line  680)
60045* mRcq:                                  ARC Options.        (line  517)
60046* mRcw:                                  ARC Options.        (line  521)
60047* mrdpid:                                x86 Options.        (line  736)
60048* mrdrnd:                                x86 Options.        (line  729)
60049* mrdseed:                               x86 Options.        (line  738)
60050* mreadonly-in-sdata:                    RS/6000 and PowerPC Options.
60051                                                             (line  742)
60052* mrecip:                                PowerPC SPE Options.
60053                                                             (line  565)
60054* mrecip <1>:                            RS/6000 and PowerPC Options.
60055                                                             (line  828)
60056* mrecip <2>:                            x86 Options.        (line  896)
60057* mrecip-precision:                      PowerPC SPE Options.
60058                                                             (line  622)
60059* mrecip-precision <1>:                  RS/6000 and PowerPC Options.
60060                                                             (line  885)
60061* mrecip=opt:                            PowerPC SPE Options.
60062                                                             (line  578)
60063* mrecip=opt <1>:                        RS/6000 and PowerPC Options.
60064                                                             (line  841)
60065* mrecip=opt <2>:                        x86 Options.        (line  918)
60066* mrecord-mcount:                        x86 Options.        (line 1223)
60067* mreduced-regs:                         NDS32 Options.      (line   15)
60068* mregister-names:                       IA-64 Options.      (line   37)
60069* mregnames:                             PowerPC SPE Options.
60070                                                             (line  532)
60071* mregnames <1>:                         RS/6000 and PowerPC Options.
60072                                                             (line  782)
60073* mregparm:                              x86 Options.        (line  594)
60074* mrelax:                                AVR Options.        (line  222)
60075* mrelax <1>:                            H8/300 Options.     (line    9)
60076* mrelax <2>:                            MN10300 Options.    (line   46)
60077* mrelax <3>:                            MSP430 Options.     (line   58)
60078* mrelax <4>:                            NDS32 Options.      (line   84)
60079* mrelax <5>:                            RX Options.         (line   95)
60080* mrelax <6>:                            SH Options.         (line  137)
60081* mrelax <7>:                            V850 Options.       (line  103)
60082* mrelax-immediate:                      MCore Options.      (line   19)
60083* mrelax-pic-calls:                      MIPS Options.       (line  825)
60084* mrelocatable:                          PowerPC SPE Options.
60085                                                             (line  239)
60086* mrelocatable <1>:                      RS/6000 and PowerPC Options.
60087                                                             (line  466)
60088* mrelocatable-lib:                      PowerPC SPE Options.
60089                                                             (line  250)
60090* mrelocatable-lib <1>:                  RS/6000 and PowerPC Options.
60091                                                             (line  477)
60092* mrenesas:                              SH Options.         (line  152)
60093* mrepeat:                               MeP Options.        (line   96)
60094* mrestrict-it:                          ARM Options.        (line  784)
60095* mreturn-pointer-on-d0:                 MN10300 Options.    (line   36)
60096* mrf16:                                 ARC Options.        (line  324)
60097* mrgf-banked-regs:                      ARC Options.        (line  304)
60098* mrh850-abi:                            V850 Options.       (line  127)
60099* mrl78:                                 RL78 Options.       (line   62)
60100* mrmw:                                  AVR Options.        (line  236)
60101* mrtd:                                  M680x0 Options.     (line  236)
60102* mrtd <1>:                              x86 Options.        (line  570)
60103* mrtd <2>:                              x86 Function Attributes.
60104                                                             (line    9)
60105* mrtm:                                  x86 Options.        (line  755)
60106* mrtp:                                  VxWorks Options.    (line   11)
60107* mrtsc:                                 ARC Options.        (line  355)
60108* ms:                                    H8/300 Options.     (line   17)
60109* ms <1>:                                MeP Options.        (line  100)
60110* ms2600:                                H8/300 Options.     (line   24)
60111* msafe-dma:                             SPU Options.        (line   18)
60112* msafe-hints:                           SPU Options.        (line  112)
60113* msahf:                                 x86 Options.        (line  872)
60114* msatur:                                MeP Options.        (line  105)
60115* msave-acc-in-interrupts:               RX Options.         (line  109)
60116* msave-mduc-in-interrupts:              RL78 Options.       (line   79)
60117* msave-restore:                         RISC-V Options.     (line   74)
60118* msave-toc-indirect:                    PowerPC SPE Options.
60119                                                             (line  644)
60120* msave-toc-indirect <1>:                RS/6000 and PowerPC Options.
60121                                                             (line  933)
60122* mscc:                                  FRV Options.        (line  173)
60123* msched-ar-data-spec:                   IA-64 Options.      (line  135)
60124* msched-ar-in-data-spec:                IA-64 Options.      (line  157)
60125* msched-br-data-spec:                   IA-64 Options.      (line  128)
60126* msched-br-in-data-spec:                IA-64 Options.      (line  150)
60127* msched-control-spec:                   IA-64 Options.      (line  142)
60128* msched-costly-dep:                     PowerPC SPE Options.
60129                                                             (line  295)
60130* msched-costly-dep <1>:                 RS/6000 and PowerPC Options.
60131                                                             (line  522)
60132* msched-count-spec-in-critical-path:    IA-64 Options.      (line  185)
60133* msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  202)
60134* msched-in-control-spec:                IA-64 Options.      (line  164)
60135* msched-max-memory-insns:               IA-64 Options.      (line  211)
60136* msched-max-memory-insns-hard-limit:    IA-64 Options.      (line  217)
60137* msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  178)
60138* msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  171)
60139* msched-spec-ldc:                       IA-64 Options.      (line  191)
60140* msched-spec-ldc <1>:                   IA-64 Options.      (line  194)
60141* msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  198)
60142* mschedule:                             HPPA Options.       (line   78)
60143* mscore5:                               Score Options.      (line   25)
60144* mscore5u:                              Score Options.      (line   28)
60145* mscore7:                               Score Options.      (line   31)
60146* mscore7d:                              Score Options.      (line   35)
60147* msda:                                  V850 Options.       (line   40)
60148* msdata:                                IA-64 Options.      (line   42)
60149* msdata <1>:                            PowerPC SPE Options.
60150                                                             (line  500)
60151* msdata <2>:                            RS/6000 and PowerPC Options.
60152                                                             (line  723)
60153* msdata=all:                            C6X Options.        (line   30)
60154* msdata=data:                           PowerPC SPE Options.
60155                                                             (line  505)
60156* msdata=data <1>:                       RS/6000 and PowerPC Options.
60157                                                             (line  728)
60158* msdata=default:                        C6X Options.        (line   22)
60159* msdata=default <1>:                    PowerPC SPE Options.
60160                                                             (line  500)
60161* msdata=default <2>:                    RS/6000 and PowerPC Options.
60162                                                             (line  723)
60163* msdata=eabi:                           PowerPC SPE Options.
60164                                                             (line  481)
60165* msdata=eabi <1>:                       RS/6000 and PowerPC Options.
60166                                                             (line  704)
60167* msdata=none:                           C6X Options.        (line   35)
60168* msdata=none <1>:                       M32R/D Options.     (line   40)
60169* msdata=none <2>:                       PowerPC SPE Options.
60170                                                             (line  513)
60171* msdata=none <3>:                       RS/6000 and PowerPC Options.
60172                                                             (line  736)
60173* msdata=sdata:                          M32R/D Options.     (line   49)
60174* msdata=sysv:                           PowerPC SPE Options.
60175                                                             (line  491)
60176* msdata=sysv <1>:                       RS/6000 and PowerPC Options.
60177                                                             (line  714)
60178* msdata=use:                            M32R/D Options.     (line   53)
60179* msdram:                                Blackfin Options.   (line  169)
60180* msdram <1>:                            MeP Options.        (line  110)
60181* msecure-plt:                           PowerPC SPE Options.
60182                                                             (line   68)
60183* msecure-plt <1>:                       RS/6000 and PowerPC Options.
60184                                                             (line  184)
60185* msel-sched-dont-check-control-spec:    IA-64 Options.      (line  207)
60186* msep-data:                             Blackfin Options.   (line  107)
60187* mserialize-volatile:                   Xtensa Options.     (line   35)
60188* msetlb:                                MN10300 Options.    (line   64)
60189* msgx:                                  x86 Options.        (line  739)
60190* msha:                                  x86 Options.        (line  723)
60191* mshared-library-id:                    Blackfin Options.   (line  100)
60192* mshort:                                M680x0 Options.     (line  216)
60193* mshort-calls:                          AVR Options.        (line  240)
60194* mshstk:                                x86 Options.        (line  886)
60195* msign-extend-enabled:                  LM32 Options.       (line   18)
60196* msign-return-address:                  AArch64 Options.    (line  210)
60197* msilicon-errata:                       MSP430 Options.     (line  102)
60198* msilicon-errata-warn:                  MSP430 Options.     (line  106)
60199* msim:                                  Blackfin Options.   (line   36)
60200* msim <1>:                              C6X Options.        (line   19)
60201* msim <2>:                              CR16 Options.       (line   18)
60202* msim <3>:                              FT32 Options.       (line    9)
60203* msim <4>:                              M32C Options.       (line   13)
60204* msim <5>:                              MeP Options.        (line  114)
60205* msim <6>:                              MSP430 Options.     (line   47)
60206* msim <7>:                              PowerPC SPE Options.
60207                                                             (line  437)
60208* msim <8>:                              RL78 Options.       (line    7)
60209* msim <9>:                              RS/6000 and PowerPC Options.
60210                                                             (line  660)
60211* msim <10>:                             RX Options.         (line   71)
60212* msim <11>:                             Visium Options.     (line   13)
60213* msim <12>:                             Xstormy16 Options.  (line    9)
60214* msimd:                                 ARC Options.        (line  141)
60215* msimnovec:                             MeP Options.        (line  117)
60216* msimple-fpu:                           RS/6000 and PowerPC Options.
60217                                                             (line  381)
60218* msingle-exit:                          MMIX Options.       (line   65)
60219* msingle-float:                         MIPS Options.       (line  283)
60220* msingle-float <1>:                     PowerPC SPE Options.
60221                                                             (line  190)
60222* msingle-float <2>:                     RS/6000 and PowerPC Options.
60223                                                             (line  377)
60224* msingle-pic-base:                      ARM Options.        (line  635)
60225* msingle-pic-base <1>:                  PowerPC SPE Options.
60226                                                             (line  282)
60227* msingle-pic-base <2>:                  RS/6000 and PowerPC Options.
60228                                                             (line  509)
60229* msio:                                  HPPA Options.       (line  105)
60230* msize-level:                           ARC Options.        (line  525)
60231* mskip-rax-setup:                       x86 Options.        (line 1236)
60232* mslow-bytes:                           MCore Options.      (line   35)
60233* mslow-flash-data:                      ARM Options.        (line  772)
60234* msmall:                                MSP430 Options.     (line   55)
60235* msmall-data:                           DEC Alpha Options.  (line  187)
60236* msmall-data-limit:                     RISC-V Options.     (line   69)
60237* msmall-data-limit <1>:                 RX Options.         (line   47)
60238* msmall-divides:                        MicroBlaze Options. (line   38)
60239* msmall-exec:                           S/390 and zSeries Options.
60240                                                             (line   79)
60241* msmall-mem:                            SPU Options.        (line   38)
60242* msmall-model:                          FR30 Options.       (line    9)
60243* msmall-text:                           DEC Alpha Options.  (line  205)
60244* msmall16:                              Adapteva Epiphany Options.
60245                                                             (line   66)
60246* msmallc:                               Nios II Options.    (line  310)
60247* msmartmips:                            MIPS Options.       (line  365)
60248* msoft-float:                           ARC Options.        (line  145)
60249* msoft-float <1>:                       DEC Alpha Options.  (line   10)
60250* msoft-float <2>:                       FRV Options.        (line   27)
60251* msoft-float <3>:                       HPPA Options.       (line   91)
60252* msoft-float <4>:                       M680x0 Options.     (line  200)
60253* msoft-float <5>:                       MicroBlaze Options. (line    7)
60254* msoft-float <6>:                       MIPS Options.       (line  269)
60255* msoft-float <7>:                       PDP-11 Options.     (line   13)
60256* msoft-float <8>:                       PowerPC SPE Options.
60257                                                             (line  184)
60258* msoft-float <9>:                       RS/6000 and PowerPC Options.
60259                                                             (line  371)
60260* msoft-float <10>:                      S/390 and zSeries Options.
60261                                                             (line   11)
60262* msoft-float <11>:                      SPARC Options.      (line   39)
60263* msoft-float <12>:                      V850 Options.       (line  113)
60264* msoft-float <13>:                      Visium Options.     (line   24)
60265* msoft-float <14>:                      x86 Options.        (line  469)
60266* msoft-quad-float:                      SPARC Options.      (line   59)
60267* msoft-stack:                           Nvidia PTX Options. (line   21)
60268* msp8:                                  AVR Options.        (line  247)
60269* mspace:                                V850 Options.       (line   30)
60270* mspe:                                  PowerPC SPE Options.
60271                                                             (line   88)
60272* mspecld-anomaly:                       Blackfin Options.   (line   48)
60273* mspfp:                                 ARC Options.        (line  132)
60274* mspfp-compact:                         ARC Options.        (line  133)
60275* mspfp-fast:                            ARC Options.        (line  137)
60276* mspfp_compact:                         ARC Options.        (line  626)
60277* mspfp_fast:                            ARC Options.        (line  629)
60278* msplit-addresses:                      MIPS Options.       (line  531)
60279* msplit-vecmove-early:                  Adapteva Epiphany Options.
60280                                                             (line  126)
60281* msse:                                  x86 Options.        (line  704)
60282* msse2:                                 x86 Options.        (line  705)
60283* msse2avx:                              x86 Options.        (line 1211)
60284* msse3:                                 x86 Options.        (line  706)
60285* msse4:                                 x86 Options.        (line  708)
60286* msse4.1:                               x86 Options.        (line  710)
60287* msse4.2:                               x86 Options.        (line  711)
60288* msse4a:                                x86 Options.        (line  709)
60289* msseregparm:                           x86 Options.        (line  605)
60290* mssse3:                                x86 Options.        (line  707)
60291* mstack-align:                          CRIS Options.       (line   55)
60292* mstack-bias:                           SPARC Options.      (line  372)
60293* mstack-check-l1:                       Blackfin Options.   (line   74)
60294* mstack-guard:                          S/390 and zSeries Options.
60295                                                             (line  194)
60296* mstack-increment:                      MCore Options.      (line   50)
60297* mstack-offset:                         Adapteva Epiphany Options.
60298                                                             (line   37)
60299* mstack-protector-guard:                PowerPC SPE Options.
60300                                                             (line  670)
60301* mstack-protector-guard <1>:            RS/6000 and PowerPC Options.
60302                                                             (line  959)
60303* mstack-protector-guard <2>:            x86 Options.        (line 1262)
60304* mstack-protector-guard-offset:         PowerPC SPE Options.
60305                                                             (line  670)
60306* mstack-protector-guard-offset <1>:     RS/6000 and PowerPC Options.
60307                                                             (line  959)
60308* mstack-protector-guard-offset <2>:     x86 Options.        (line 1262)
60309* mstack-protector-guard-reg:            PowerPC SPE Options.
60310                                                             (line  670)
60311* mstack-protector-guard-reg <1>:        RS/6000 and PowerPC Options.
60312                                                             (line  959)
60313* mstack-protector-guard-reg <2>:        x86 Options.        (line 1262)
60314* mstack-protector-guard-symbol:         PowerPC SPE Options.
60315                                                             (line  670)
60316* mstack-protector-guard-symbol <1>:     RS/6000 and PowerPC Options.
60317                                                             (line  959)
60318* mstack-size:                           S/390 and zSeries Options.
60319                                                             (line  194)
60320* mstackrealign:                         x86 Options.        (line  648)
60321* mstd-struct-return:                    SPARC Options.      (line  102)
60322* mstdmain:                              SPU Options.        (line   44)
60323* mstrict-align:                         AArch64 Options.    (line   50)
60324* mstrict-align <1>:                     M680x0 Options.     (line  283)
60325* mstrict-align <2>:                     PowerPC SPE Options.
60326                                                             (line  234)
60327* mstrict-align <3>:                     RISC-V Options.     (line   80)
60328* mstrict-align <4>:                     RS/6000 and PowerPC Options.
60329                                                             (line  461)
60330* mstrict-X:                             AVR Options.        (line  260)
60331* mstring-compare-inline-limit:          RS/6000 and PowerPC Options.
60332                                                             (line  766)
60333* mstringop-strategy=ALG:                x86 Options.        (line 1159)
60334* mstructure-size-boundary:              ARM Options.        (line  590)
60335* msubxc:                                SPARC Options.      (line  288)
60336* msv-mode:                              Visium Options.     (line   52)
60337* msve-vector-bits:                      AArch64 Options.    (line  217)
60338* msvr4-struct-return:                   PowerPC SPE Options.
60339                                                             (line  375)
60340* msvr4-struct-return <1>:               RS/6000 and PowerPC Options.
60341                                                             (line  606)
60342* mswap:                                 ARC Options.        (line  152)
60343* mswape:                                ARC Options.        (line  360)
60344* msym32:                                MIPS Options.       (line  429)
60345* msynci:                                MIPS Options.       (line  811)
60346* msys-crt0:                             Nios II Options.    (line  314)
60347* msys-lib:                              Nios II Options.    (line  318)
60348* MT:                                    Preprocessor Options.
60349                                                             (line  144)
60350* mtarget-align:                         Xtensa Options.     (line   74)
60351* mtas:                                  SH Options.         (line  259)
60352* mtbm:                                  x86 Options.        (line  757)
60353* mtda:                                  V850 Options.       (line   34)
60354* mtelephony:                            ARC Options.        (line  365)
60355* mtext-section-literals:                Xtensa Options.     (line   47)
60356* mtf:                                   MeP Options.        (line  121)
60357* mthread:                               x86 Windows Options.
60358                                                             (line   26)
60359* mthreads:                              x86 Options.        (line 1015)
60360* mthumb:                                ARM Options.        (line  678)
60361* mthumb-interwork:                      ARM Options.        (line   24)
60362* mtiny-stack:                           AVR Options.        (line  274)
60363* mtiny=:                                MeP Options.        (line  125)
60364* mTLS:                                  FRV Options.        (line   90)
60365* mtls:                                  FRV Options.        (line   94)
60366* mtls-dialect:                          ARM Options.        (line  730)
60367* mtls-dialect <1>:                      x86 Options.        (line  993)
60368* mtls-dialect=desc:                     AArch64 Options.    (line   60)
60369* mtls-dialect=traditional:              AArch64 Options.    (line   64)
60370* mtls-direct-seg-refs:                  x86 Options.        (line 1201)
60371* mtls-markers:                          PowerPC SPE Options.
60372                                                             (line  557)
60373* mtls-markers <1>:                      RS/6000 and PowerPC Options.
60374                                                             (line  820)
60375* mtls-size:                             AArch64 Options.    (line   68)
60376* mtls-size <1>:                         IA-64 Options.      (line  112)
60377* mtoc:                                  PowerPC SPE Options.
60378                                                             (line  259)
60379* mtoc <1>:                              RS/6000 and PowerPC Options.
60380                                                             (line  486)
60381* mtomcat-stats:                         FRV Options.        (line  254)
60382* mtoplevel-symbols:                     MMIX Options.       (line   39)
60383* mtp:                                   ARM Options.        (line  722)
60384* mtp-regno:                             ARC Options.        (line  170)
60385* mtpcs-frame:                           ARM Options.        (line  695)
60386* mtpcs-leaf-frame:                      ARM Options.        (line  701)
60387* mtpf-trace:                            S/390 and zSeries Options.
60388                                                             (line  169)
60389* mtraceback:                            RS/6000 and PowerPC Options.
60390                                                             (line  599)
60391* mtrap-precision:                       DEC Alpha Options.  (line  109)
60392* mtune:                                 AArch64 Options.    (line  147)
60393* mtune <1>:                             ARC Options.        (line  546)
60394* mtune <2>:                             ARC Options.        (line  632)
60395* mtune <3>:                             ARM Options.        (line  427)
60396* mtune <4>:                             CRIS Options.       (line   17)
60397* mtune <5>:                             DEC Alpha Options.  (line  259)
60398* mtune <6>:                             IA-64 Options.      (line  116)
60399* mtune <7>:                             M680x0 Options.     (line   68)
60400* mtune <8>:                             MIPS Options.       (line   65)
60401* mtune <9>:                             MN10300 Options.    (line   30)
60402* mtune <10>:                            PowerPC SPE Options.
60403                                                             (line   60)
60404* mtune <11>:                            RISC-V Options.     (line   56)
60405* mtune <12>:                            RS/6000 and PowerPC Options.
60406                                                             (line  118)
60407* mtune <13>:                            S/390 and zSeries Options.
60408                                                             (line  162)
60409* mtune <14>:                            SPARC Options.      (line  199)
60410* mtune <15>:                            Visium Options.     (line   47)
60411* mtune <16>:                            x86 Options.        (line  343)
60412* mtune-ctrl=FEATURE-LIST:               x86 Options.        (line  809)
60413* muclibc:                               GNU/Linux Options.  (line   14)
60414* muls:                                  Score Options.      (line   18)
60415* multcost:                              ARC Options.        (line  637)
60416* multcost=NUMBER:                       SH Options.         (line  281)
60417* multilib-library-pic:                  FRV Options.        (line  110)
60418* multiply-enabled:                      LM32 Options.       (line   15)
60419* multiply_defined:                      Darwin Options.     (line  196)
60420* multiply_defined_unused:               Darwin Options.     (line  196)
60421* multi_module:                          Darwin Options.     (line  196)
60422* munalign-prob-threshold:               ARC Options.        (line  574)
60423* munaligned-access:                     ARM Options.        (line  754)
60424* munaligned-doubles:                    SPARC Options.      (line   73)
60425* municode:                              x86 Windows Options.
60426                                                             (line   30)
60427* muniform-simt:                         Nvidia PTX Options. (line   33)
60428* muninit-const-in-rodata:               MIPS Options.       (line  501)
60429* munix:                                 VAX Options.        (line    9)
60430* munix-asm:                             PDP-11 Options.     (line   68)
60431* munsafe-dma:                           SPU Options.        (line   18)
60432* mupdate:                               PowerPC SPE Options.
60433                                                             (line  206)
60434* mupdate <1>:                           RS/6000 and PowerPC Options.
60435                                                             (line  408)
60436* muser-enabled:                         LM32 Options.       (line   21)
60437* muser-mode:                            SPARC Options.      (line   85)
60438* muser-mode <1>:                        Visium Options.     (line   57)
60439* musermode:                             SH Options.         (line  274)
60440* mv3push:                               NDS32 Options.      (line   45)
60441* mv850:                                 V850 Options.       (line   49)
60442* mv850e:                                V850 Options.       (line   79)
60443* mv850e1:                               V850 Options.       (line   70)
60444* mv850e2:                               V850 Options.       (line   66)
60445* mv850e2v3:                             V850 Options.       (line   61)
60446* mv850e2v4:                             V850 Options.       (line   57)
60447* mv850e3v5:                             V850 Options.       (line   52)
60448* mv850es:                               V850 Options.       (line   75)
60449* mv8plus:                               SPARC Options.      (line  214)
60450* mvaes:                                 x86 Options.        (line  764)
60451* mveclibabi:                            RS/6000 and PowerPC Options.
60452                                                             (line  894)
60453* mveclibabi <1>:                        x86 Options.        (line  947)
60454* mvect8-ret-in-mem:                     x86 Options.        (line  615)
60455* mverbose-cost-dump:                    AArch64 Options.    (line  199)
60456* mverbose-cost-dump <1>:                ARM Options.        (line  796)
60457* mvirt:                                 MIPS Options.       (line  406)
60458* mvis:                                  SPARC Options.      (line  221)
60459* mvis2:                                 SPARC Options.      (line  227)
60460* mvis3:                                 SPARC Options.      (line  235)
60461* mvis4:                                 SPARC Options.      (line  243)
60462* mvis4b:                                SPARC Options.      (line  251)
60463* mvliw-branch:                          FRV Options.        (line  201)
60464* mvms-return-codes:                     VMS Options.        (line    9)
60465* mvolatile-asm-stop:                    IA-64 Options.      (line   32)
60466* mvolatile-cache:                       ARC Options.        (line  424)
60467* mvpclmulqdq:                           x86 Options.        (line  765)
60468* mvr4130-align:                         MIPS Options.       (line  800)
60469* mvrsave:                               RS/6000 and PowerPC Options.
60470                                                             (line  181)
60471* mvsx:                                  RS/6000 and PowerPC Options.
60472                                                             (line  209)
60473* mvx:                                   S/390 and zSeries Options.
60474                                                             (line  112)
60475* mvxworks:                              PowerPC SPE Options.
60476                                                             (line  458)
60477* mvxworks <1>:                          RS/6000 and PowerPC Options.
60478                                                             (line  681)
60479* mvzeroupper:                           x86 Options.        (line  836)
60480* mwarn-dynamicstack:                    S/390 and zSeries Options.
60481                                                             (line  188)
60482* mwarn-framesize:                       S/390 and zSeries Options.
60483                                                             (line  180)
60484* mwarn-mcu:                             MSP430 Options.     (line   35)
60485* mwarn-multiple-fast-interrupts:        RX Options.         (line  143)
60486* mwarn-reloc:                           SPU Options.        (line   10)
60487* mwbnoinvd:                             x86 Options.        (line  733)
60488* mwide-bitfields:                       MCore Options.      (line   23)
60489* mwin32:                                x86 Windows Options.
60490                                                             (line   35)
60491* mwindows:                              x86 Windows Options.
60492                                                             (line   41)
60493* mword-relocations:                     ARM Options.        (line  741)
60494* mx32:                                  x86 Options.        (line 1330)
60495* mxgot:                                 M680x0 Options.     (line  315)
60496* mxgot <1>:                             MIPS Options.       (line  228)
60497* mxilinx-fpu:                           RS/6000 and PowerPC Options.
60498                                                             (line  392)
60499* mxl-barrel-shift:                      MicroBlaze Options. (line   32)
60500* mxl-compat:                            PowerPC SPE Options.
60501                                                             (line  152)
60502* mxl-compat <1>:                        RS/6000 and PowerPC Options.
60503                                                             (line  329)
60504* mxl-float-convert:                     MicroBlaze Options. (line   50)
60505* mxl-float-sqrt:                        MicroBlaze Options. (line   53)
60506* mxl-gp-opt:                            MicroBlaze Options. (line   44)
60507* mxl-multiply-high:                     MicroBlaze Options. (line   47)
60508* mxl-pattern-compare:                   MicroBlaze Options. (line   35)
60509* mxl-reorder:                           MicroBlaze Options. (line   62)
60510* mxl-soft-div:                          MicroBlaze Options. (line   29)
60511* mxl-soft-mul:                          MicroBlaze Options. (line   26)
60512* mxl-stack-check:                       MicroBlaze Options. (line   41)
60513* mxop:                                  x86 Options.        (line  740)
60514* mxpa:                                  MIPS Options.       (line  410)
60515* mxsave:                                x86 Options.        (line  751)
60516* mxsavec:                               x86 Options.        (line  753)
60517* mxsaveopt:                             x86 Options.        (line  752)
60518* mxsaves:                               x86 Options.        (line  754)
60519* mxy:                                   ARC Options.        (line  370)
60520* myellowknife:                          PowerPC SPE Options.
60521                                                             (line  453)
60522* myellowknife <1>:                      RS/6000 and PowerPC Options.
60523                                                             (line  676)
60524* mzarch:                                S/390 and zSeries Options.
60525                                                             (line   94)
60526* mzda:                                  V850 Options.       (line   45)
60527* mzdcbranch:                            SH Options.         (line  341)
60528* mzero-extend:                          MMIX Options.       (line   26)
60529* mzvector:                              S/390 and zSeries Options.
60530                                                             (line  123)
60531* no-80387:                              x86 Options.        (line  469)
60532* no-canonical-prefixes:                 Directory Options.  (line  164)
60533* no-integrated-cpp:                     Preprocessor Options.
60534                                                             (line  476)
60535* no-pie:                                Link Options.       (line  111)
60536* no-sysroot-suffix:                     Directory Options.  (line  183)
60537* noall_load:                            Darwin Options.     (line  196)
60538* nocpp:                                 MIPS Options.       (line  612)
60539* nodefaultlibs:                         Link Options.       (line   68)
60540* nodevicelib:                           AVR Options.        (line  281)
60541* nodevicespecs:                         AVR Options.        (line  284)
60542* nofixprebinding:                       Darwin Options.     (line  196)
60543* nofpu:                                 RX Options.         (line   17)
60544* nolibdld:                              HPPA Options.       (line  188)
60545* nomultidefs:                           Darwin Options.     (line  196)
60546* non-static:                            VxWorks Options.    (line   16)
60547* noprebind:                             Darwin Options.     (line  196)
60548* noseglinkedit:                         Darwin Options.     (line  196)
60549* nostartfiles:                          Link Options.       (line   63)
60550* nostdinc:                              Directory Options.  (line  102)
60551* nostdinc++:                            C++ Dialect Options.
60552                                                             (line  447)
60553* nostdinc++ <1>:                        Directory Options.  (line  108)
60554* nostdlib:                              Link Options.       (line   80)
60555* no_dead_strip_inits_and_terms:         Darwin Options.     (line  196)
60556* o:                                     Overall Options.    (line  187)
60557* O:                                     Optimize Options.   (line   39)
60558* O0:                                    Optimize Options.   (line  160)
60559* O1:                                    Optimize Options.   (line   39)
60560* O2:                                    Optimize Options.   (line   92)
60561* O3:                                    Optimize Options.   (line  141)
60562* Ofast:                                 Optimize Options.   (line  176)
60563* Og:                                    Optimize Options.   (line  183)
60564* Os:                                    Optimize Options.   (line  164)
60565* p:                                     Instrumentation Options.
60566                                                             (line   19)
60567* P:                                     Preprocessor Options.
60568                                                             (line  361)
60569* pagezero_size:                         Darwin Options.     (line  196)
60570* param:                                 Optimize Options.   (line 2399)
60571* pass-exit-codes:                       Overall Options.    (line  326)
60572* pedantic:                              Standards.          (line   13)
60573* pedantic <1>:                          Warning Options.    (line   80)
60574* pedantic <2>:                          C Extensions.       (line    6)
60575* pedantic <3>:                          Alternate Keywords. (line   30)
60576* pedantic <4>:                          Warnings and Errors.
60577                                                             (line   25)
60578* pedantic-errors:                       Standards.          (line   13)
60579* pedantic-errors <1>:                   Warning Options.    (line  121)
60580* pedantic-errors <2>:                   Non-bugs.           (line  216)
60581* pedantic-errors <3>:                   Warnings and Errors.
60582                                                             (line   25)
60583* pg:                                    Instrumentation Options.
60584                                                             (line   25)
60585* pie:                                   Link Options.       (line  105)
60586* pipe:                                  Overall Options.    (line  334)
60587* plt:                                   RISC-V Options.     (line   13)
60588* prebind:                               Darwin Options.     (line  196)
60589* prebind_all_twolevel_modules:          Darwin Options.     (line  196)
60590* print-file-name:                       Developer Options.  (line  872)
60591* print-libgcc-file-name:                Developer Options.  (line  906)
60592* print-multi-directory:                 Developer Options.  (line  878)
60593* print-multi-lib:                       Developer Options.  (line  883)
60594* print-multi-os-directory:              Developer Options.  (line  890)
60595* print-multiarch:                       Developer Options.  (line  899)
60596* print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
60597                                                             (line  216)
60598* print-prog-name:                       Developer Options.  (line  903)
60599* print-search-dirs:                     Developer Options.  (line  914)
60600* print-sysroot:                         Developer Options.  (line  927)
60601* print-sysroot-headers-suffix:          Developer Options.  (line  934)
60602* private_bundle:                        Darwin Options.     (line  196)
60603* pthread:                               Preprocessor Options.
60604                                                             (line   70)
60605* pthread <1>:                           Link Options.       (line  122)
60606* pthreads:                              Solaris 2 Options.  (line   30)
60607* Q:                                     Developer Options.  (line  778)
60608* Qn:                                    System V Options.   (line   18)
60609* Qy:                                    System V Options.   (line   14)
60610* rdynamic:                              Link Options.       (line  129)
60611* read_only_relocs:                      Darwin Options.     (line  196)
60612* remap:                                 Preprocessor Options.
60613                                                             (line  392)
60614* S:                                     Overall Options.    (line  170)
60615* S <1>:                                 Link Options.       (line   20)
60616* s:                                     Link Options.       (line  136)
60617* save-temps:                            Developer Options.  (line  653)
60618* save-temps=obj:                        Developer Options.  (line  679)
60619* sectalign:                             Darwin Options.     (line  196)
60620* sectcreate:                            Darwin Options.     (line  196)
60621* sectobjectsymbols:                     Darwin Options.     (line  196)
60622* sectobjectsymbols <1>:                 Darwin Options.     (line  196)
60623* sectorder:                             Darwin Options.     (line  196)
60624* seg1addr:                              Darwin Options.     (line  196)
60625* segaddr:                               Darwin Options.     (line  196)
60626* seglinkedit:                           Darwin Options.     (line  196)
60627* segprot:                               Darwin Options.     (line  196)
60628* segs_read_only_addr:                   Darwin Options.     (line  196)
60629* segs_read_only_addr <1>:               Darwin Options.     (line  196)
60630* segs_read_write_addr:                  Darwin Options.     (line  196)
60631* segs_read_write_addr <1>:              Darwin Options.     (line  196)
60632* seg_addr_table:                        Darwin Options.     (line  196)
60633* seg_addr_table_filename:               Darwin Options.     (line  196)
60634* shared:                                Link Options.       (line  145)
60635* shared-libgcc:                         Link Options.       (line  153)
60636* short-calls:                           Adapteva Epiphany Options.
60637                                                             (line   61)
60638* sim:                                   CRIS Options.       (line   95)
60639* sim2:                                  CRIS Options.       (line  101)
60640* single_module:                         Darwin Options.     (line  196)
60641* specs:                                 Overall Options.    (line  340)
60642* static:                                Link Options.       (line  140)
60643* static <1>:                            Darwin Options.     (line  196)
60644* static <2>:                            HPPA Options.       (line  192)
60645* static-libasan:                        Link Options.       (line  187)
60646* static-libgcc:                         Link Options.       (line  153)
60647* static-liblsan:                        Link Options.       (line  203)
60648* static-libmpx:                         Link Options.       (line  220)
60649* static-libmpxwrappers:                 Link Options.       (line  229)
60650* static-libstdc++:                      Link Options.       (line  239)
60651* static-libtsan:                        Link Options.       (line  195)
60652* static-libubsan:                       Link Options.       (line  211)
60653* static-pie:                            Link Options.       (line  114)
60654* std:                                   Standards.          (line   13)
60655* std <1>:                               C Dialect Options.  (line   46)
60656* std <2>:                               Other Builtins.     (line   31)
60657* std <3>:                               Non-bugs.           (line  107)
60658* sub_library:                           Darwin Options.     (line  196)
60659* sub_umbrella:                          Darwin Options.     (line  196)
60660* symbolic:                              Link Options.       (line  250)
60661* sysroot:                               Directory Options.  (line  168)
60662* T:                                     Link Options.       (line  256)
60663* target-help:                           Overall Options.    (line  219)
60664* threads:                               HPPA Options.       (line  205)
60665* time:                                  Developer Options.  (line  694)
60666* tno-android-cc:                        GNU/Linux Options.  (line   36)
60667* tno-android-ld:                        GNU/Linux Options.  (line   40)
60668* traditional:                           Preprocessor Options.
60669                                                             (line  368)
60670* traditional <1>:                       Incompatibilities.  (line    6)
60671* traditional-cpp:                       Preprocessor Options.
60672                                                             (line  368)
60673* trigraphs:                             Preprocessor Options.
60674                                                             (line  378)
60675* twolevel_namespace:                    Darwin Options.     (line  196)
60676* U:                                     Preprocessor Options.
60677                                                             (line   42)
60678* u:                                     Link Options.       (line  288)
60679* umbrella:                              Darwin Options.     (line  196)
60680* undef:                                 Preprocessor Options.
60681                                                             (line   66)
60682* undefined:                             Darwin Options.     (line  196)
60683* unexported_symbols_list:               Darwin Options.     (line  196)
60684* v:                                     Overall Options.    (line  198)
60685* version:                               Overall Options.    (line  323)
60686* w:                                     Warning Options.    (line   25)
60687* W:                                     Warning Options.    (line  201)
60688* W <1>:                                 Warning Options.    (line 2404)
60689* W <2>:                                 Warning Options.    (line 2506)
60690* W <3>:                                 Incompatibilities.  (line   64)
60691* Wa:                                    Assembler Options.  (line    9)
60692* Wabi:                                  C++ Dialect Options.
60693                                                             (line  455)
60694* Wabi-tag:                              C++ Dialect Options.
60695                                                             (line  559)
60696* Waddr-space-convert:                   AVR Options.        (line  290)
60697* Waddress:                              Warning Options.    (line 2299)
60698* Waggregate-return:                     Warning Options.    (line 2335)
60699* Waggressive-loop-optimizations:        Warning Options.    (line 2340)
60700* Waligned-new:                          Warning Options.    (line 1863)
60701* Wall:                                  Warning Options.    (line  130)
60702* Wall <1>:                              Standard Libraries. (line    6)
60703* Walloc-zero:                           Warning Options.    (line 1453)
60704* Walloca:                               Warning Options.    (line 1476)
60705* Warray-bounds:                         Warning Options.    (line 1539)
60706* Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
60707                                                             (line  170)
60708* Wattributes:                           Warning Options.    (line 2345)
60709* Wbad-function-cast:                    Warning Options.    (line 1995)
60710* Wbool-compare:                         Warning Options.    (line 1560)
60711* Wbool-operation:                       Warning Options.    (line 1569)
60712* Wbuiltin-declaration-mismatch:         Warning Options.    (line 2351)
60713* Wbuiltin-macro-redefined:              Warning Options.    (line 2355)
60714* Wc++-compat:                           Warning Options.    (line 2015)
60715* Wc++11-compat:                         Warning Options.    (line 2020)
60716* Wc++14-compat:                         Warning Options.    (line 2026)
60717* Wc++17-compat:                         Warning Options.    (line 2030)
60718* Wc90-c99-compat:                       Warning Options.    (line 2000)
60719* Wc99-c11-compat:                       Warning Options.    (line 2007)
60720* Wcast-align:                           Warning Options.    (line 2050)
60721* Wcast-align=strict:                    Warning Options.    (line 2056)
60722* Wcast-function-type:                   Warning Options.    (line 2061)
60723* Wcast-qual:                            Warning Options.    (line 2034)
60724* Wcatch-value:                          Warning Options.    (line 2088)
60725* Wchar-subscripts:                      Warning Options.    (line  243)
60726* Wchkp:                                 Warning Options.    (line  248)
60727* Wclass-memaccess:                      C++ Dialect Options.
60728                                                             (line  646)
60729* Wclobbered:                            Warning Options.    (line 2096)
60730* Wcomment:                              Warning Options.    (line 1937)
60731* Wcomments:                             Warning Options.    (line 1937)
60732* Wconditionally-supported:              Warning Options.    (line 2100)
60733* Wconversion:                           Warning Options.    (line 2103)
60734* Wconversion-null:                      Warning Options.    (line 2121)
60735* Wctor-dtor-privacy:                    C++ Dialect Options.
60736                                                             (line  564)
60737* Wdangling-else:                        Warning Options.    (line 2142)
60738* Wdate-time:                            Warning Options.    (line 2176)
60739* Wdeclaration-after-statement:          Warning Options.    (line 1766)
60740* Wdelete-incomplete:                    Warning Options.    (line 2181)
60741* Wdelete-non-virtual-dtor:              C++ Dialect Options.
60742                                                             (line  571)
60743* Wdeprecated:                           Warning Options.    (line 2483)
60744* Wdeprecated-declarations:              Warning Options.    (line 2487)
60745* Wdisabled-optimization:                Warning Options.    (line 2711)
60746* Wdiscarded-array-qualifiers:           Warning Options.    (line 1608)
60747* Wdiscarded-qualifiers:                 Warning Options.    (line 1602)
60748* Wdiv-by-zero:                          Warning Options.    (line 1626)
60749* Wdouble-promotion:                     Warning Options.    (line  271)
60750* Wduplicate-decl-specifier:             Warning Options.    (line  289)
60751* Wduplicated-branches:                  Warning Options.    (line 1579)
60752* Wduplicated-cond:                      Warning Options.    (line 1590)
60753* weak_reference_mismatches:             Darwin Options.     (line  196)
60754* Weffc++:                               C++ Dialect Options.
60755                                                             (line  706)
60756* Wempty-body:                           Warning Options.    (line 2188)
60757* Wendif-labels:                         Warning Options.    (line 1981)
60758* Wenum-compare:                         Warning Options.    (line 2192)
60759* Werror:                                Warning Options.    (line   28)
60760* Werror=:                               Warning Options.    (line   31)
60761* Wexpansion-to-defined:                 Warning Options.    (line 1956)
60762* Wextra:                                Warning Options.    (line  201)
60763* Wextra <1>:                            Warning Options.    (line 2404)
60764* Wextra <2>:                            Warning Options.    (line 2506)
60765* Wextra-semi:                           Warning Options.    (line 2198)
60766* Wfatal-errors:                         Warning Options.    (line   48)
60767* Wfloat-conversion:                     Warning Options.    (line 2224)
60768* Wfloat-equal:                          Warning Options.    (line 1666)
60769* Wformat:                               Warning Options.    (line  294)
60770* Wformat <1>:                           Warning Options.    (line  319)
60771* Wformat <2>:                           Warning Options.    (line 1401)
60772* Wformat <3>:                           Common Function Attributes.
60773                                                             (line  243)
60774* Wformat-contains-nul:                  Warning Options.    (line  328)
60775* Wformat-extra-args:                    Warning Options.    (line  332)
60776* Wformat-nonliteral:                    Warning Options.    (line  437)
60777* Wformat-nonliteral <1>:                Common Function Attributes.
60778                                                             (line  308)
60779* Wformat-overflow:                      Warning Options.    (line  347)
60780* Wformat-overflow <1>:                  Warning Options.    (line  358)
60781* Wformat-security:                      Warning Options.    (line  442)
60782* Wformat-signedness:                    Warning Options.    (line  454)
60783* Wformat-truncation:                    Warning Options.    (line  460)
60784* Wformat-truncation <1>:                Warning Options.    (line  472)
60785* Wformat-y2k:                           Warning Options.    (line  483)
60786* Wformat-zero-length:                   Warning Options.    (line  427)
60787* Wformat=:                              Warning Options.    (line  294)
60788* Wformat=1:                             Warning Options.    (line  319)
60789* Wformat=2:                             Warning Options.    (line  432)
60790* Wframe-address:                        Warning Options.    (line 1596)
60791* Wframe-larger-than:                    Warning Options.    (line 1824)
60792* Wfree-nonheap-object:                  Warning Options.    (line 1833)
60793* whatsloaded:                           Darwin Options.     (line  196)
60794* whyload:                               Darwin Options.     (line  196)
60795* Wif-not-aligned:                       Warning Options.    (line  655)
60796* Wignored-attributes:                   Warning Options.    (line  671)
60797* Wignored-qualifiers:                   Warning Options.    (line  660)
60798* Wimplicit:                             Warning Options.    (line  533)
60799* Wimplicit-fallthrough:                 Warning Options.    (line  537)
60800* Wimplicit-fallthrough=:                Warning Options.    (line  542)
60801* Wimplicit-function-declaration:        Warning Options.    (line  527)
60802* Wimplicit-int:                         Warning Options.    (line  523)
60803* Wincompatible-pointer-types:           Warning Options.    (line 1614)
60804* Winherited-variadic-ctor:              Warning Options.    (line 2599)
60805* Winit-self:                            Warning Options.    (line  508)
60806* Winline:                               Warning Options.    (line 2604)
60807* Winline <1>:                           Inline.             (line   60)
60808* Wint-conversion:                       Warning Options.    (line 1620)
60809* Wint-in-bool-context:                  Warning Options.    (line 2629)
60810* Wint-to-pointer-cast:                  Warning Options.    (line 2637)
60811* Winvalid-memory-model:                 Warning Options.    (line 1088)
60812* Winvalid-offsetof:                     Warning Options.    (line 2617)
60813* Winvalid-pch:                          Warning Options.    (line 2646)
60814* Wjump-misses-init:                     Warning Options.    (line 2201)
60815* Wl:                                    Link Options.       (line  280)
60816* Wlarger-than-LEN:                      Warning Options.    (line 1821)
60817* Wlarger-than=LEN:                      Warning Options.    (line 1821)
60818* Wliteral-suffix:                       C++ Dialect Options.
60819                                                             (line  578)
60820* Wlogical-not-parentheses:              Warning Options.    (line 2320)
60821* Wlogical-op:                           Warning Options.    (line 2312)
60822* Wlong-long:                            Warning Options.    (line 2650)
60823* Wlto-type-mismatch:                    C++ Dialect Options.
60824                                                             (line  604)
60825* Wmain:                                 Warning Options.    (line  678)
60826* Wmaybe-uninitialized:                  Warning Options.    (line 1105)
60827* Wmemset-elt-size:                      Warning Options.    (line 2280)
60828* Wmemset-transposed-args:               Warning Options.    (line 2288)
60829* Wmisleading-indentation:               Warning Options.    (line  685)
60830* Wmissing-attributes:                   Warning Options.    (line  719)
60831* Wmissing-braces:                       Warning Options.    (line  745)
60832* Wmissing-declarations:                 Warning Options.    (line 2394)
60833* Wmissing-field-initializers:           Warning Options.    (line 2404)
60834* Wmissing-format-attribute:             Warning Options.    (line 1401)
60835* Wmissing-include-dirs:                 Warning Options.    (line  756)
60836* Wmissing-parameter-type:               Warning Options.    (line 2376)
60837* Wmissing-prototypes:                   Warning Options.    (line 2384)
60838* Wmisspelled-isr:                       AVR Options.        (line  295)
60839* Wmultichar:                            Warning Options.    (line 2434)
60840* Wmultiple-inheritance:                 C++ Dialect Options.
60841                                                             (line  792)
60842* Wmultistatement-macros:                Warning Options.    (line  759)
60843* Wnamespaces:                           C++ Dialect Options.
60844                                                             (line  806)
60845* Wnarrowing:                            C++ Dialect Options.
60846                                                             (line  610)
60847* Wnested-externs:                       Warning Options.    (line 2596)
60848* Wno-abi:                               C++ Dialect Options.
60849                                                             (line  455)
60850* Wno-address:                           Warning Options.    (line 2299)
60851* Wno-aggregate-return:                  Warning Options.    (line 2335)
60852* Wno-aggressive-loop-optimizations:     Warning Options.    (line 2340)
60853* Wno-aligned-new:                       Warning Options.    (line 1863)
60854* Wno-all:                               Warning Options.    (line  130)
60855* Wno-alloc-zero:                        Warning Options.    (line 1453)
60856* Wno-alloca:                            Warning Options.    (line 1476)
60857* Wno-array-bounds:                      Warning Options.    (line 1539)
60858* Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
60859                                                             (line  170)
60860* Wno-attributes:                        Warning Options.    (line 2345)
60861* Wno-bad-function-cast:                 Warning Options.    (line 1995)
60862* Wno-bool-compare:                      Warning Options.    (line 1560)
60863* Wno-bool-operation:                    Warning Options.    (line 1569)
60864* Wno-builtin-declaration-mismatch:      Warning Options.    (line 2351)
60865* Wno-builtin-macro-redefined:           Warning Options.    (line 2355)
60866* Wno-c90-c99-compat:                    Warning Options.    (line 2000)
60867* Wno-c99-c11-compat:                    Warning Options.    (line 2007)
60868* Wno-cast-align:                        Warning Options.    (line 2050)
60869* Wno-cast-function-type:                Warning Options.    (line 2061)
60870* Wno-cast-qual:                         Warning Options.    (line 2034)
60871* Wno-catch-value:                       Warning Options.    (line 2088)
60872* Wno-char-subscripts:                   Warning Options.    (line  243)
60873* Wno-clobbered:                         Warning Options.    (line 2096)
60874* Wno-conditionally-supported:           Warning Options.    (line 2100)
60875* Wno-conversion:                        Warning Options.    (line 2103)
60876* Wno-conversion-null:                   Warning Options.    (line 2121)
60877* Wno-coverage-mismatch:                 Warning Options.    (line  252)
60878* Wno-ctor-dtor-privacy:                 C++ Dialect Options.
60879                                                             (line  564)
60880* Wno-dangling-else:                     Warning Options.    (line 2142)
60881* Wno-date-time:                         Warning Options.    (line 2176)
60882* Wno-declaration-after-statement:       Warning Options.    (line 1766)
60883* Wno-delete-incomplete:                 Warning Options.    (line 2181)
60884* Wno-delete-non-virtual-dtor:           C++ Dialect Options.
60885                                                             (line  571)
60886* Wno-deprecated:                        Warning Options.    (line 2483)
60887* Wno-deprecated-declarations:           Warning Options.    (line 2487)
60888* Wno-disabled-optimization:             Warning Options.    (line 2711)
60889* Wno-discarded-array-qualifiers:        Warning Options.    (line 1608)
60890* Wno-discarded-qualifiers:              Warning Options.    (line 1602)
60891* Wno-div-by-zero:                       Warning Options.    (line 1626)
60892* Wno-double-promotion:                  Warning Options.    (line  271)
60893* Wno-duplicate-decl-specifier:          Warning Options.    (line  289)
60894* Wno-duplicated-branches:               Warning Options.    (line 1579)
60895* Wno-duplicated-cond:                   Warning Options.    (line 1590)
60896* Wno-effc++:                            C++ Dialect Options.
60897                                                             (line  706)
60898* Wno-empty-body:                        Warning Options.    (line 2188)
60899* Wno-endif-labels:                      Warning Options.    (line 1981)
60900* Wno-enum-compare:                      Warning Options.    (line 2192)
60901* Wno-error:                             Warning Options.    (line   28)
60902* Wno-error=:                            Warning Options.    (line   31)
60903* Wno-extra:                             Warning Options.    (line  201)
60904* Wno-extra <1>:                         Warning Options.    (line 2404)
60905* Wno-extra <2>:                         Warning Options.    (line 2506)
60906* Wno-extra-semi:                        Warning Options.    (line 2198)
60907* Wno-fatal-errors:                      Warning Options.    (line   48)
60908* Wno-float-conversion:                  Warning Options.    (line 2224)
60909* Wno-float-equal:                       Warning Options.    (line 1666)
60910* Wno-format:                            Warning Options.    (line  294)
60911* Wno-format <1>:                        Warning Options.    (line 1401)
60912* Wno-format-contains-nul:               Warning Options.    (line  328)
60913* Wno-format-extra-args:                 Warning Options.    (line  332)
60914* Wno-format-nonliteral:                 Warning Options.    (line  437)
60915* Wno-format-overflow:                   Warning Options.    (line  347)
60916* Wno-format-overflow <1>:               Warning Options.    (line  358)
60917* Wno-format-overflow <2>:               Warning Options.    (line  472)
60918* Wno-format-security:                   Warning Options.    (line  442)
60919* Wno-format-signedness:                 Warning Options.    (line  454)
60920* Wno-format-truncation:                 Warning Options.    (line  460)
60921* Wno-format-y2k:                        Warning Options.    (line  483)
60922* Wno-format-zero-length:                Warning Options.    (line  427)
60923* Wno-frame-address:                     Warning Options.    (line 1596)
60924* Wno-free-nonheap-object:               Warning Options.    (line 1833)
60925* Wno-if-not-aligned:                    Warning Options.    (line  655)
60926* Wno-ignored-attributes:                Warning Options.    (line  671)
60927* Wno-ignored-qualifiers:                Warning Options.    (line  660)
60928* Wno-implicit:                          Warning Options.    (line  533)
60929* Wno-implicit-fallthrough:              Warning Options.    (line  537)
60930* Wno-implicit-function-declaration:     Warning Options.    (line  527)
60931* Wno-implicit-int:                      Warning Options.    (line  523)
60932* Wno-incompatible-pointer-types:        Warning Options.    (line 1614)
60933* Wno-inherited-variadic-ctor:           Warning Options.    (line 2599)
60934* Wno-init-self:                         Warning Options.    (line  508)
60935* Wno-inline:                            Warning Options.    (line 2604)
60936* Wno-int-conversion:                    Warning Options.    (line 1620)
60937* Wno-int-in-bool-context:               Warning Options.    (line 2629)
60938* Wno-int-to-pointer-cast:               Warning Options.    (line 2637)
60939* Wno-invalid-memory-model:              Warning Options.    (line 1088)
60940* Wno-invalid-offsetof:                  Warning Options.    (line 2617)
60941* Wno-invalid-pch:                       Warning Options.    (line 2646)
60942* Wno-jump-misses-init:                  Warning Options.    (line 2201)
60943* Wno-literal-suffix:                    C++ Dialect Options.
60944                                                             (line  578)
60945* Wno-logical-not-parentheses:           Warning Options.    (line 2320)
60946* Wno-logical-op:                        Warning Options.    (line 2312)
60947* Wno-long-long:                         Warning Options.    (line 2650)
60948* Wno-lto-type-mismatch:                 C++ Dialect Options.
60949                                                             (line  604)
60950* Wno-main:                              Warning Options.    (line  678)
60951* Wno-maybe-uninitialized:               Warning Options.    (line 1105)
60952* Wno-memset-elt-size:                   Warning Options.    (line 2280)
60953* Wno-memset-transposed-args:            Warning Options.    (line 2288)
60954* Wno-misleading-indentation:            Warning Options.    (line  685)
60955* Wno-missing-attributes:                Warning Options.    (line  719)
60956* Wno-missing-braces:                    Warning Options.    (line  745)
60957* Wno-missing-declarations:              Warning Options.    (line 2394)
60958* Wno-missing-field-initializers:        Warning Options.    (line 2404)
60959* Wno-missing-format-attribute:          Warning Options.    (line 1401)
60960* Wno-missing-include-dirs:              Warning Options.    (line  756)
60961* Wno-missing-parameter-type:            Warning Options.    (line 2376)
60962* Wno-missing-prototypes:                Warning Options.    (line 2384)
60963* Wno-multichar:                         Warning Options.    (line 2434)
60964* Wno-multistatement-macros:             Warning Options.    (line  759)
60965* Wno-narrowing:                         C++ Dialect Options.
60966                                                             (line  610)
60967* Wno-nested-externs:                    Warning Options.    (line 2596)
60968* Wno-noexcept:                          C++ Dialect Options.
60969                                                             (line  626)
60970* Wno-noexcept-type:                     C++ Dialect Options.
60971                                                             (line  632)
60972* Wno-non-template-friend:               C++ Dialect Options.
60973                                                             (line  741)
60974* Wno-non-virtual-dtor:                  C++ Dialect Options.
60975                                                             (line  666)
60976* Wno-nonnull:                           Warning Options.    (line  487)
60977* Wno-nonnull-compare:                   Warning Options.    (line  494)
60978* Wno-normalized:                        Warning Options.    (line 2440)
60979* Wno-null-dereference:                  Warning Options.    (line  501)
60980* Wno-odr:                               Warning Options.    (line 2496)
60981* Wno-old-style-cast:                    C++ Dialect Options.
60982                                                             (line  750)
60983* Wno-old-style-declaration:             Warning Options.    (line 2366)
60984* Wno-old-style-definition:              Warning Options.    (line 2372)
60985* Wno-overflow:                          Warning Options.    (line 2493)
60986* Wno-overlength-strings:                Warning Options.    (line 2731)
60987* Wno-overloaded-virtual:                C++ Dialect Options.
60988                                                             (line  756)
60989* Wno-override-init:                     Warning Options.    (line 2506)
60990* Wno-override-init-side-effects:        Warning Options.    (line 2514)
60991* Wno-packed:                            Warning Options.    (line 2519)
60992* Wno-packed-bitfield-compat:            Warning Options.    (line 2536)
60993* Wno-packed-not-aligned:                Warning Options.    (line 2553)
60994* Wno-padded:                            Warning Options.    (line 2566)
60995* Wno-parentheses:                       Warning Options.    (line  779)
60996* Wno-pedantic-ms-format:                Warning Options.    (line 1857)
60997* Wno-placement-new:                     Warning Options.    (line 1874)
60998* Wno-pmf-conversions:                   C++ Dialect Options.
60999                                                             (line  775)
61000* Wno-pmf-conversions <1>:               Bound member functions.
61001                                                             (line   35)
61002* Wno-pointer-arith:                     Warning Options.    (line 1909)
61003* Wno-pointer-compare:                   Warning Options.    (line 1916)
61004* Wno-pointer-sign:                      Warning Options.    (line 2720)
61005* Wno-pointer-to-int-cast:               Warning Options.    (line 2642)
61006* Wno-pragmas:                           Warning Options.    (line 1157)
61007* Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
61008                                                             (line  174)
61009* Wno-redundant-decls:                   Warning Options.    (line 2573)
61010* Wno-register:                          C++ Dialect Options.
61011                                                             (line  674)
61012* Wno-reorder:                           C++ Dialect Options.
61013                                                             (line  681)
61014* Wno-restrict:                          Warning Options.    (line 2577)
61015* Wno-return-local-addr:                 Warning Options.    (line  859)
61016* Wno-return-type:                       Warning Options.    (line  863)
61017* Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
61018                                                             (line  184)
61019* Wno-sequence-point:                    Warning Options.    (line  806)
61020* Wno-shadow:                            Warning Options.    (line 1772)
61021* Wno-shadow-ivar:                       Warning Options.    (line 1780)
61022* Wno-shift-count-negative:              Warning Options.    (line  882)
61023* Wno-shift-count-overflow:              Warning Options.    (line  886)
61024* Wno-shift-negative-value:              Warning Options.    (line  890)
61025* Wno-shift-overflow:                    Warning Options.    (line  895)
61026* Wno-sign-compare:                      Warning Options.    (line 2212)
61027* Wno-sign-conversion:                   Warning Options.    (line 2218)
61028* Wno-sign-promo:                        C++ Dialect Options.
61029                                                             (line  779)
61030* Wno-sized-deallocation:                Warning Options.    (line 2234)
61031* Wno-sizeof-array-argument:             Warning Options.    (line 2275)
61032* Wno-sizeof-pointer-div:                Warning Options.    (line 2245)
61033* Wno-sizeof-pointer-memaccess:          Warning Options.    (line 2253)
61034* Wno-stack-protector:                   Warning Options.    (line 2726)
61035* Wno-strict-aliasing:                   Warning Options.    (line 1162)
61036* Wno-strict-null-sentinel:              C++ Dialect Options.
61037                                                             (line  734)
61038* Wno-strict-overflow:                   Warning Options.    (line 1201)
61039* Wno-strict-prototypes:                 Warning Options.    (line 2360)
61040* Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
61041                                                             (line  196)
61042* Wno-stringop-overflow:                 Warning Options.    (line 1250)
61043* Wno-stringop-overflow <1>:             Warning Options.    (line 1289)
61044* Wno-stringop-truncation:               Warning Options.    (line 1327)
61045* Wno-subobject-linkage:                 Warning Options.    (line 2129)
61046* Wno-suggest-attribute=:                Warning Options.    (line 1380)
61047* Wno-suggest-attribute=cold:            Warning Options.    (line 1422)
61048* Wno-suggest-attribute=const:           Warning Options.    (line 1387)
61049* Wno-suggest-attribute=format:          Warning Options.    (line 1401)
61050* Wno-suggest-attribute=malloc:          Warning Options.    (line 1387)
61051* Wno-suggest-attribute=noreturn:        Warning Options.    (line 1387)
61052* Wno-suggest-attribute=pure:            Warning Options.    (line 1387)
61053* Wno-suggest-final-methods:             Warning Options.    (line 1439)
61054* Wno-suggest-final-types:               Warning Options.    (line 1430)
61055* Wno-switch:                            Warning Options.    (line  910)
61056* Wno-switch-bool:                       Warning Options.    (line  930)
61057* Wno-switch-default:                    Warning Options.    (line  918)
61058* Wno-switch-enum:                       Warning Options.    (line  921)
61059* Wno-switch-unreachable:                Warning Options.    (line  941)
61060* Wno-sync-nand:                         Warning Options.    (line  965)
61061* Wno-system-headers:                    Warning Options.    (line 1631)
61062* Wno-tautological-compare:              Warning Options.    (line 1642)
61063* Wno-terminate:                         C++ Dialect Options.
61064                                                             (line  813)
61065* Wno-traditional:                       Warning Options.    (line 1681)
61066* Wno-traditional-conversion:            Warning Options.    (line 1758)
61067* Wno-trampolines:                       Warning Options.    (line 1656)
61068* Wno-type-limits:                       Warning Options.    (line 1929)
61069* Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
61070                                                             (line  204)
61071* Wno-undef:                             Warning Options.    (line 1952)
61072* Wno-uninitialized:                     Warning Options.    (line 1066)
61073* Wno-unknown-pragmas:                   Warning Options.    (line 1150)
61074* Wno-unused:                            Warning Options.    (line 1059)
61075* Wno-unused-but-set-parameter:          Warning Options.    (line  970)
61076* Wno-unused-but-set-variable:           Warning Options.    (line  979)
61077* Wno-unused-const-variable:             Warning Options.    (line 1026)
61078* Wno-unused-function:                   Warning Options.    (line  989)
61079* Wno-unused-label:                      Warning Options.    (line  994)
61080* Wno-unused-parameter:                  Warning Options.    (line 1005)
61081* Wno-unused-result:                     Warning Options.    (line 1012)
61082* Wno-unused-value:                      Warning Options.    (line 1049)
61083* Wno-unused-variable:                   Warning Options.    (line 1017)
61084* Wno-useless-cast:                      Warning Options.    (line 2185)
61085* Wno-varargs:                           Warning Options.    (line 2661)
61086* Wno-variadic-macros:                   Warning Options.    (line 2655)
61087* Wno-vector-operation-performance:      Warning Options.    (line 2666)
61088* Wno-virtual-move-assign:               Warning Options.    (line 2676)
61089* Wno-vla:                               Warning Options.    (line 2685)
61090* Wno-volatile-register-var:             Warning Options.    (line 2705)
61091* Wno-write-strings:                     Warning Options.    (line 2074)
61092* Wno-zero-as-null-pointer-constant:     Warning Options.    (line 2125)
61093* Wnoexcept:                             C++ Dialect Options.
61094                                                             (line  626)
61095* Wnoexcept-type:                        C++ Dialect Options.
61096                                                             (line  632)
61097* Wnon-template-friend:                  C++ Dialect Options.
61098                                                             (line  741)
61099* Wnon-virtual-dtor:                     C++ Dialect Options.
61100                                                             (line  666)
61101* Wnonnull:                              Warning Options.    (line  487)
61102* Wnonnull-compare:                      Warning Options.    (line  494)
61103* Wnormalized:                           Warning Options.    (line 2440)
61104* Wnormalized=:                          Warning Options.    (line 2440)
61105* Wnull-dereference:                     Warning Options.    (line  501)
61106* Wodr:                                  Warning Options.    (line 2496)
61107* Wold-style-cast:                       C++ Dialect Options.
61108                                                             (line  750)
61109* Wold-style-declaration:                Warning Options.    (line 2366)
61110* Wold-style-definition:                 Warning Options.    (line 2372)
61111* Wopenm-simd:                           Warning Options.    (line 2501)
61112* Woverflow:                             Warning Options.    (line 2493)
61113* Woverlength-strings:                   Warning Options.    (line 2731)
61114* Woverloaded-virtual:                   C++ Dialect Options.
61115                                                             (line  756)
61116* Woverride-init:                        Warning Options.    (line 2506)
61117* Woverride-init-side-effects:           Warning Options.    (line 2514)
61118* Wp:                                    Preprocessor Options.
61119                                                             (line  456)
61120* Wpacked:                               Warning Options.    (line 2519)
61121* Wpacked-bitfield-compat:               Warning Options.    (line 2536)
61122* Wpacked-not-aligned:                   Warning Options.    (line 2553)
61123* Wpadded:                               Warning Options.    (line 2566)
61124* Wparentheses:                          Warning Options.    (line  779)
61125* Wpedantic:                             Warning Options.    (line   80)
61126* Wpedantic-ms-format:                   Warning Options.    (line 1857)
61127* Wplacement-new:                        Warning Options.    (line 1874)
61128* Wpmf-conversions:                      C++ Dialect Options.
61129                                                             (line  775)
61130* Wpointer-arith:                        Warning Options.    (line 1909)
61131* Wpointer-arith <1>:                    Pointer Arith.      (line   13)
61132* Wpointer-compare:                      Warning Options.    (line 1916)
61133* Wpointer-sign:                         Warning Options.    (line 2720)
61134* Wpointer-to-int-cast:                  Warning Options.    (line 2642)
61135* Wpragmas:                              Warning Options.    (line 1157)
61136* Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
61137                                                             (line  174)
61138* wrapper:                               Overall Options.    (line  349)
61139* Wredundant-decls:                      Warning Options.    (line 2573)
61140* Wregister:                             C++ Dialect Options.
61141                                                             (line  674)
61142* Wreorder:                              C++ Dialect Options.
61143                                                             (line  681)
61144* Wrestrict:                             Warning Options.    (line 2577)
61145* Wreturn-local-addr:                    Warning Options.    (line  859)
61146* Wreturn-type:                          Warning Options.    (line  863)
61147* Wselector:                             Objective-C and Objective-C++ Dialect Options.
61148                                                             (line  184)
61149* Wsequence-point:                       Warning Options.    (line  806)
61150* Wshadow:                               Warning Options.    (line 1772)
61151* Wshadow-ivar:                          Warning Options.    (line 1780)
61152* Wshadow=compatible-local:              Warning Options.    (line 1791)
61153* Wshadow=local:                         Warning Options.    (line 1784)
61154* Wshadow=local <1>:                     Warning Options.    (line 1787)
61155* Wshift-count-negative:                 Warning Options.    (line  882)
61156* Wshift-count-overflow:                 Warning Options.    (line  886)
61157* Wshift-negative-value:                 Warning Options.    (line  890)
61158* Wshift-overflow:                       Warning Options.    (line  895)
61159* Wsign-compare:                         Warning Options.    (line 2212)
61160* Wsign-conversion:                      Warning Options.    (line 2218)
61161* Wsign-promo:                           C++ Dialect Options.
61162                                                             (line  779)
61163* Wsized-deallocation:                   Warning Options.    (line 2234)
61164* Wsizeof-array-argument:                Warning Options.    (line 2275)
61165* Wsizeof-pointer-div:                   Warning Options.    (line 2245)
61166* Wsizeof-pointer-memaccess:             Warning Options.    (line 2253)
61167* Wstack-protector:                      Warning Options.    (line 2726)
61168* Wstack-usage:                          Warning Options.    (line 1837)
61169* Wstrict-aliasing:                      Warning Options.    (line 1162)
61170* Wstrict-aliasing=n:                    Warning Options.    (line 1169)
61171* Wstrict-null-sentinel:                 C++ Dialect Options.
61172                                                             (line  734)
61173* Wstrict-overflow:                      Warning Options.    (line 1201)
61174* Wstrict-prototypes:                    Warning Options.    (line 2360)
61175* Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
61176                                                             (line  196)
61177* Wstringop-overflow:                    Warning Options.    (line 1250)
61178* Wstringop-overflow <1>:                Warning Options.    (line 1289)
61179* Wstringop-truncation:                  Warning Options.    (line 1327)
61180* Wsubobject-linkage:                    Warning Options.    (line 2129)
61181* Wsuggest-attribute=:                   Warning Options.    (line 1380)
61182* Wsuggest-attribute=cold:               Warning Options.    (line 1422)
61183* Wsuggest-attribute=const:              Warning Options.    (line 1387)
61184* Wsuggest-attribute=format:             Warning Options.    (line 1401)
61185* Wsuggest-attribute=malloc:             Warning Options.    (line 1387)
61186* Wsuggest-attribute=noreturn:           Warning Options.    (line 1387)
61187* Wsuggest-attribute=pure:               Warning Options.    (line 1387)
61188* Wsuggest-final-methods:                Warning Options.    (line 1439)
61189* Wsuggest-final-types:                  Warning Options.    (line 1430)
61190* Wswitch:                               Warning Options.    (line  910)
61191* Wswitch-bool:                          Warning Options.    (line  930)
61192* Wswitch-default:                       Warning Options.    (line  918)
61193* Wswitch-enum:                          Warning Options.    (line  921)
61194* Wswitch-unreachable:                   Warning Options.    (line  941)
61195* Wsync-nand:                            Warning Options.    (line  965)
61196* Wsystem-headers:                       Warning Options.    (line 1631)
61197* Wtautological-compare:                 Warning Options.    (line 1642)
61198* Wtemplates:                            C++ Dialect Options.
61199                                                             (line  785)
61200* Wterminate:                            C++ Dialect Options.
61201                                                             (line  813)
61202* Wtraditional:                          Warning Options.    (line 1681)
61203* Wtraditional-conversion:               Warning Options.    (line 1758)
61204* Wtrampolines:                          Warning Options.    (line 1656)
61205* Wtrigraphs:                            Warning Options.    (line 1942)
61206* Wtype-limits:                          Warning Options.    (line 1929)
61207* Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
61208                                                             (line  204)
61209* Wundef:                                Warning Options.    (line 1952)
61210* Wuninitialized:                        Warning Options.    (line 1066)
61211* Wunknown-pragmas:                      Warning Options.    (line 1150)
61212* Wunsuffixed-float-constants:           Warning Options.    (line 2746)
61213* Wunused:                               Warning Options.    (line 1059)
61214* Wunused-but-set-parameter:             Warning Options.    (line  970)
61215* Wunused-but-set-variable:              Warning Options.    (line  979)
61216* Wunused-const-variable:                Warning Options.    (line 1026)
61217* Wunused-function:                      Warning Options.    (line  989)
61218* Wunused-label:                         Warning Options.    (line  994)
61219* Wunused-local-typedefs:                Warning Options.    (line 1001)
61220* Wunused-macros:                        Warning Options.    (line 1962)
61221* Wunused-parameter:                     Warning Options.    (line 1005)
61222* Wunused-result:                        Warning Options.    (line 1012)
61223* Wunused-value:                         Warning Options.    (line 1049)
61224* Wunused-variable:                      Warning Options.    (line 1017)
61225* Wuseless-cast:                         Warning Options.    (line 2185)
61226* Wvarargs:                              Warning Options.    (line 2661)
61227* Wvariadic-macros:                      Warning Options.    (line 2655)
61228* Wvector-operation-performance:         Warning Options.    (line 2666)
61229* Wvirtual-inheritance:                  C++ Dialect Options.
61230                                                             (line  799)
61231* Wvirtual-move-assign:                  Warning Options.    (line 2676)
61232* Wvla:                                  Warning Options.    (line 2685)
61233* Wvolatile-register-var:                Warning Options.    (line 2705)
61234* Wwrite-strings:                        Warning Options.    (line 2074)
61235* Wzero-as-null-pointer-constant:        Warning Options.    (line 2125)
61236* x:                                     Overall Options.    (line  129)
61237* Xassembler:                            Assembler Options.  (line   13)
61238* Xbind-lazy:                            VxWorks Options.    (line   26)
61239* Xbind-now:                             VxWorks Options.    (line   30)
61240* Xlinker:                               Link Options.       (line  262)
61241* Xpreprocessor:                         Preprocessor Options.
61242                                                             (line  467)
61243* Ym:                                    System V Options.   (line   26)
61244* YP:                                    System V Options.   (line   22)
61245* z:                                     Link Options.       (line  293)
61246
61247
61248File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
61249
61250Keyword Index
61251*************
61252
61253�[index�]
61254* Menu:
61255
61256* #pragma:                               Pragmas.            (line    6)
61257* #pragma implementation:                C++ Interface.      (line   36)
61258* #pragma implementation, implied:       C++ Interface.      (line   43)
61259* #pragma interface:                     C++ Interface.      (line   17)
61260* $:                                     Dollar Signs.       (line    6)
61261* % in constraint:                       Modifiers.          (line   52)
61262* %include:                              Spec Files.         (line   26)
61263* %include_noerr:                        Spec Files.         (line   30)
61264* %rename:                               Spec Files.         (line   34)
61265* & in constraint:                       Modifiers.          (line   25)
61266* ':                                     Incompatibilities.  (line  116)
61267* *__builtin_alloca:                     Other Builtins.     (line  129)
61268* *__builtin_alloca_with_align:          Other Builtins.     (line  166)
61269* *__builtin_alloca_with_align_and_max:  Other Builtins.     (line  211)
61270* + in constraint:                       Modifiers.          (line   12)
61271* -lgcc, use with -nodefaultlibs:        Link Options.       (line   91)
61272* -lgcc, use with -nostdlib:             Link Options.       (line   91)
61273* -march feature modifiers:              AArch64 Options.    (line  239)
61274* -mcpu feature modifiers:               AArch64 Options.    (line  239)
61275* -nodefaultlibs and unresolved references: Link Options.    (line   91)
61276* -nostdlib and unresolved references:   Link Options.       (line   91)
61277* .sdata/.sdata2 references (PowerPC):   PowerPC SPE Options.
61278                                                             (line  524)
61279* .sdata/.sdata2 references (PowerPC) <1>: RS/6000 and PowerPC Options.
61280                                                             (line  774)
61281* //:                                    C++ Comments.       (line    6)
61282* 0 in constraint:                       Simple Constraints. (line  125)
61283* < in constraint:                       Simple Constraints. (line   47)
61284* = in constraint:                       Modifiers.          (line    8)
61285* > in constraint:                       Simple Constraints. (line   59)
61286* ?: extensions:                         Conditionals.       (line    6)
61287* ?: side effect:                        Conditionals.       (line   20)
61288* _ in variables in macros:              Typeof.             (line   46)
61289* _Accum data type:                      Fixed-Point.        (line    6)
61290* _Complex keyword:                      Complex.            (line    6)
61291* _Decimal128 data type:                 Decimal Float.      (line    6)
61292* _Decimal32 data type:                  Decimal Float.      (line    6)
61293* _Decimal64 data type:                  Decimal Float.      (line    6)
61294* _Exit:                                 Other Builtins.     (line    6)
61295* _exit:                                 Other Builtins.     (line    6)
61296* _FloatN data types:                    Floating Types.     (line    6)
61297* _FloatNx data types:                   Floating Types.     (line    6)
61298* _Fract data type:                      Fixed-Point.        (line    6)
61299* _get_ssp:                              x86 control-flow protection intrinsics.
61300                                                             (line    6)
61301* _HTM_FIRST_USER_ABORT_CODE:            S/390 System z Built-in Functions.
61302                                                             (line   44)
61303* _inc_ssp:                              x86 control-flow protection intrinsics.
61304                                                             (line   12)
61305* _Sat data type:                        Fixed-Point.        (line    6)
61306* _xabort:                               x86 transactional memory intrinsics.
61307                                                             (line   57)
61308* _xbegin:                               x86 transactional memory intrinsics.
61309                                                             (line   19)
61310* _xend:                                 x86 transactional memory intrinsics.
61311                                                             (line   48)
61312* _xtest:                                x86 transactional memory intrinsics.
61313                                                             (line   53)
61314* __atomic_add_fetch:                    __atomic Builtins.  (line  179)
61315* __atomic_always_lock_free:             __atomic Builtins.  (line  265)
61316* __atomic_and_fetch:                    __atomic Builtins.  (line  183)
61317* __atomic_clear:                        __atomic Builtins.  (line  239)
61318* __atomic_compare_exchange:             __atomic Builtins.  (line  171)
61319* __atomic_compare_exchange_n:           __atomic Builtins.  (line  147)
61320* __atomic_exchange:                     __atomic Builtins.  (line  141)
61321* __atomic_exchange_n:                   __atomic Builtins.  (line  131)
61322* __atomic_fetch_add:                    __atomic Builtins.  (line  203)
61323* __atomic_fetch_and:                    __atomic Builtins.  (line  207)
61324* __atomic_fetch_nand:                   __atomic Builtins.  (line  213)
61325* __atomic_fetch_or:                     __atomic Builtins.  (line  211)
61326* __atomic_fetch_sub:                    __atomic Builtins.  (line  205)
61327* __atomic_fetch_xor:                    __atomic Builtins.  (line  209)
61328* __atomic_is_lock_free:                 __atomic Builtins.  (line  279)
61329* __atomic_load:                         __atomic Builtins.  (line  113)
61330* __atomic_load_n:                       __atomic Builtins.  (line  106)
61331* __atomic_nand_fetch:                   __atomic Builtins.  (line  189)
61332* __atomic_or_fetch:                     __atomic Builtins.  (line  187)
61333* __atomic_signal_fence:                 __atomic Builtins.  (line  258)
61334* __atomic_store:                        __atomic Builtins.  (line  126)
61335* __atomic_store_n:                      __atomic Builtins.  (line  118)
61336* __atomic_sub_fetch:                    __atomic Builtins.  (line  181)
61337* __atomic_test_and_set:                 __atomic Builtins.  (line  227)
61338* __atomic_thread_fence:                 __atomic Builtins.  (line  251)
61339* __atomic_xor_fetch:                    __atomic Builtins.  (line  185)
61340* __builtin_addf128_round_to_odd:        PowerPC Built-in Functions.
61341                                                             (line  253)
61342* __builtin_add_overflow:                Integer Overflow Builtins.
61343                                                             (line    9)
61344* __builtin_add_overflow_p:              Integer Overflow Builtins.
61345                                                             (line   86)
61346* __builtin_alloca:                      Other Builtins.     (line    6)
61347* __builtin_alloca_with_align:           Other Builtins.     (line    6)
61348* __builtin_alloca_with_align_and_max:   Other Builtins.     (line    6)
61349* __builtin_apply:                       Constructing Calls. (line   29)
61350* __builtin_apply_args:                  Constructing Calls. (line   19)
61351* __builtin_arc_aligned:                 ARC Built-in Functions.
61352                                                             (line   18)
61353* __builtin_arc_brk:                     ARC Built-in Functions.
61354                                                             (line   28)
61355* __builtin_arc_core_read:               ARC Built-in Functions.
61356                                                             (line   32)
61357* __builtin_arc_core_write:              ARC Built-in Functions.
61358                                                             (line   39)
61359* __builtin_arc_divaw:                   ARC Built-in Functions.
61360                                                             (line   46)
61361* __builtin_arc_flag:                    ARC Built-in Functions.
61362                                                             (line   53)
61363* __builtin_arc_lr:                      ARC Built-in Functions.
61364                                                             (line   57)
61365* __builtin_arc_mul64:                   ARC Built-in Functions.
61366                                                             (line   64)
61367* __builtin_arc_mulu64:                  ARC Built-in Functions.
61368                                                             (line   68)
61369* __builtin_arc_nop:                     ARC Built-in Functions.
61370                                                             (line   73)
61371* __builtin_arc_norm:                    ARC Built-in Functions.
61372                                                             (line   77)
61373* __builtin_arc_normw:                   ARC Built-in Functions.
61374                                                             (line   84)
61375* __builtin_arc_rtie:                    ARC Built-in Functions.
61376                                                             (line   91)
61377* __builtin_arc_sleep:                   ARC Built-in Functions.
61378                                                             (line   95)
61379* __builtin_arc_sr:                      ARC Built-in Functions.
61380                                                             (line   99)
61381* __builtin_arc_swap:                    ARC Built-in Functions.
61382                                                             (line  106)
61383* __builtin_arc_swi:                     ARC Built-in Functions.
61384                                                             (line  112)
61385* __builtin_arc_sync:                    ARC Built-in Functions.
61386                                                             (line  116)
61387* __builtin_arc_trap_s:                  ARC Built-in Functions.
61388                                                             (line  120)
61389* __builtin_arc_unimp_s:                 ARC Built-in Functions.
61390                                                             (line  124)
61391* __builtin_assume_aligned:              Other Builtins.     (line  504)
61392* __builtin_bswap16:                     Other Builtins.     (line  820)
61393* __builtin_bswap32:                     Other Builtins.     (line  824)
61394* __builtin_bswap64:                     Other Builtins.     (line  828)
61395* __builtin_call_with_static_chain:      Other Builtins.     (line    6)
61396* __builtin_call_with_static_chain <1>:  Other Builtins.     (line  265)
61397* __builtin_choose_expr:                 Other Builtins.     (line  276)
61398* __builtin_clrsb:                       Other Builtins.     (line  750)
61399* __builtin_clrsbl:                      Other Builtins.     (line  772)
61400* __builtin_clrsbll:                     Other Builtins.     (line  795)
61401* __builtin_clz:                         Other Builtins.     (line  742)
61402* __builtin_clzl:                        Other Builtins.     (line  764)
61403* __builtin_clzll:                       Other Builtins.     (line  787)
61404* __builtin_complex:                     Other Builtins.     (line  370)
61405* __builtin_constant_p:                  Other Builtins.     (line  379)
61406* __builtin_cpu_init:                    PowerPC Built-in Functions.
61407                                                             (line    9)
61408* __builtin_cpu_init <1>:                x86 Built-in Functions.
61409                                                             (line   68)
61410* __builtin_cpu_is:                      PowerPC Built-in Functions.
61411                                                             (line   13)
61412* __builtin_cpu_is <1>:                  x86 Built-in Functions.
61413                                                             (line   96)
61414* __builtin_cpu_supports:                PowerPC Built-in Functions.
61415                                                             (line   71)
61416* __builtin_cpu_supports <1>:            x86 Built-in Functions.
61417                                                             (line  174)
61418* __builtin_ctz:                         Other Builtins.     (line  746)
61419* __builtin_ctzl:                        Other Builtins.     (line  768)
61420* __builtin_ctzll:                       Other Builtins.     (line  791)
61421* __builtin_divf128_round_to_odd:        PowerPC Built-in Functions.
61422                                                             (line  265)
61423* __builtin_expect:                      Other Builtins.     (line  424)
61424* __builtin_extend_pointer:              Other Builtins.     (line    6)
61425* __builtin_extend_pointer <1>:          Other Builtins.     (line  832)
61426* __builtin_extract_return_addr:         Return Address.     (line   38)
61427* __builtin_ffs:                         Other Builtins.     (line  738)
61428* __builtin_ffsl:                        Other Builtins.     (line  761)
61429* __builtin_ffsll:                       Other Builtins.     (line  783)
61430* __builtin_FILE:                        Other Builtins.     (line  537)
61431* __builtin_fmaf128:                     PowerPC Built-in Functions.
61432                                                             (line  249)
61433* __builtin_fmaf128_round_to_odd:        PowerPC Built-in Functions.
61434                                                             (line  273)
61435* __builtin_fpclassify:                  Other Builtins.     (line    6)
61436* __builtin_fpclassify <1>:              Other Builtins.     (line  634)
61437* __builtin_frame_address:               Return Address.     (line   50)
61438* __builtin_frob_return_address:         Return Address.     (line   47)
61439* __builtin_FUNCTION:                    Other Builtins.     (line  529)
61440* __builtin_huge_val:                    Other Builtins.     (line  614)
61441* __builtin_huge_valf:                   Other Builtins.     (line  619)
61442* __builtin_huge_valfN:                  Other Builtins.     (line  626)
61443* __builtin_huge_valfNx:                 Other Builtins.     (line  630)
61444* __builtin_huge_vall:                   Other Builtins.     (line  622)
61445* __builtin_huge_valq:                   x86 Built-in Functions.
61446                                                             (line   50)
61447* __builtin_inf:                         Other Builtins.     (line  645)
61448* __builtin_infd128:                     Other Builtins.     (line  655)
61449* __builtin_infd32:                      Other Builtins.     (line  649)
61450* __builtin_infd64:                      Other Builtins.     (line  652)
61451* __builtin_inff:                        Other Builtins.     (line  659)
61452* __builtin_inffN:                       Other Builtins.     (line  668)
61453* __builtin_inffNx:                      Other Builtins.     (line  671)
61454* __builtin_infl:                        Other Builtins.     (line  664)
61455* __builtin_infq:                        x86 Built-in Functions.
61456                                                             (line   47)
61457* __builtin_isfinite:                    Other Builtins.     (line    6)
61458* __builtin_isgreater:                   Other Builtins.     (line    6)
61459* __builtin_isgreaterequal:              Other Builtins.     (line    6)
61460* __builtin_isinf_sign:                  Other Builtins.     (line    6)
61461* __builtin_isinf_sign <1>:              Other Builtins.     (line  674)
61462* __builtin_isless:                      Other Builtins.     (line    6)
61463* __builtin_islessequal:                 Other Builtins.     (line    6)
61464* __builtin_islessgreater:               Other Builtins.     (line    6)
61465* __builtin_isnormal:                    Other Builtins.     (line    6)
61466* __builtin_isunordered:                 Other Builtins.     (line    6)
61467* __builtin_LINE:                        Other Builtins.     (line  522)
61468* __builtin_mulf128_round_to_odd:        PowerPC Built-in Functions.
61469                                                             (line  261)
61470* __builtin_mul_overflow:                Integer Overflow Builtins.
61471                                                             (line   63)
61472* __builtin_mul_overflow_p:              Integer Overflow Builtins.
61473                                                             (line   90)
61474* __builtin_nan:                         Other Builtins.     (line  682)
61475* __builtin_nand128:                     Other Builtins.     (line  704)
61476* __builtin_nand32:                      Other Builtins.     (line  698)
61477* __builtin_nand64:                      Other Builtins.     (line  701)
61478* __builtin_nanf:                        Other Builtins.     (line  708)
61479* __builtin_nanfN:                       Other Builtins.     (line  715)
61480* __builtin_nanfNx:                      Other Builtins.     (line  718)
61481* __builtin_nanl:                        Other Builtins.     (line  711)
61482* __builtin_nanq:                        x86 Built-in Functions.
61483                                                             (line   54)
61484* __builtin_nans:                        Other Builtins.     (line  721)
61485* __builtin_nansf:                       Other Builtins.     (line  725)
61486* __builtin_nansfN:                      Other Builtins.     (line  732)
61487* __builtin_nansfNx:                     Other Builtins.     (line  735)
61488* __builtin_nansl:                       Other Builtins.     (line  728)
61489* __builtin_nansq:                       x86 Built-in Functions.
61490                                                             (line   57)
61491* __builtin_nds32_isb:                   NDS32 Built-in Functions.
61492                                                             (line   12)
61493* __builtin_nds32_isync:                 NDS32 Built-in Functions.
61494                                                             (line    8)
61495* __builtin_nds32_mfsr:                  NDS32 Built-in Functions.
61496                                                             (line   15)
61497* __builtin_nds32_mfusr:                 NDS32 Built-in Functions.
61498                                                             (line   18)
61499* __builtin_nds32_mtsr:                  NDS32 Built-in Functions.
61500                                                             (line   21)
61501* __builtin_nds32_mtusr:                 NDS32 Built-in Functions.
61502                                                             (line   24)
61503* __builtin_nds32_setgie_dis:            NDS32 Built-in Functions.
61504                                                             (line   30)
61505* __builtin_nds32_setgie_en:             NDS32 Built-in Functions.
61506                                                             (line   27)
61507* __builtin_non_tx_store:                S/390 System z Built-in Functions.
61508                                                             (line   98)
61509* __builtin_object_size:                 Object Size Checking.
61510                                                             (line    6)
61511* __builtin_object_size <1>:             Object Size Checking.
61512                                                             (line   16)
61513* __builtin_offsetof:                    Offsetof.           (line    6)
61514* __builtin_parity:                      Other Builtins.     (line  758)
61515* __builtin_parityl:                     Other Builtins.     (line  779)
61516* __builtin_parityll:                    Other Builtins.     (line  803)
61517* __builtin_popcount:                    Other Builtins.     (line  755)
61518* __builtin_popcountl:                   Other Builtins.     (line  775)
61519* __builtin_popcountll:                  Other Builtins.     (line  799)
61520* __builtin_powi:                        Other Builtins.     (line    6)
61521* __builtin_powi <1>:                    Other Builtins.     (line  807)
61522* __builtin_powif:                       Other Builtins.     (line    6)
61523* __builtin_powif <1>:                   Other Builtins.     (line  812)
61524* __builtin_powil:                       Other Builtins.     (line    6)
61525* __builtin_powil <1>:                   Other Builtins.     (line  816)
61526* __builtin_prefetch:                    Other Builtins.     (line  575)
61527* __builtin_return:                      Constructing Calls. (line   47)
61528* __builtin_return_address:              Return Address.     (line    9)
61529* __builtin_rx_brk:                      RX Built-in Functions.
61530                                                             (line   10)
61531* __builtin_rx_clrpsw:                   RX Built-in Functions.
61532                                                             (line   13)
61533* __builtin_rx_int:                      RX Built-in Functions.
61534                                                             (line   17)
61535* __builtin_rx_machi:                    RX Built-in Functions.
61536                                                             (line   21)
61537* __builtin_rx_maclo:                    RX Built-in Functions.
61538                                                             (line   26)
61539* __builtin_rx_mulhi:                    RX Built-in Functions.
61540                                                             (line   31)
61541* __builtin_rx_mullo:                    RX Built-in Functions.
61542                                                             (line   36)
61543* __builtin_rx_mvfachi:                  RX Built-in Functions.
61544                                                             (line   41)
61545* __builtin_rx_mvfacmi:                  RX Built-in Functions.
61546                                                             (line   45)
61547* __builtin_rx_mvfc:                     RX Built-in Functions.
61548                                                             (line   49)
61549* __builtin_rx_mvtachi:                  RX Built-in Functions.
61550                                                             (line   53)
61551* __builtin_rx_mvtaclo:                  RX Built-in Functions.
61552                                                             (line   57)
61553* __builtin_rx_mvtc:                     RX Built-in Functions.
61554                                                             (line   61)
61555* __builtin_rx_mvtipl:                   RX Built-in Functions.
61556                                                             (line   65)
61557* __builtin_rx_racw:                     RX Built-in Functions.
61558                                                             (line   69)
61559* __builtin_rx_revw:                     RX Built-in Functions.
61560                                                             (line   73)
61561* __builtin_rx_rmpa:                     RX Built-in Functions.
61562                                                             (line   78)
61563* __builtin_rx_round:                    RX Built-in Functions.
61564                                                             (line   82)
61565* __builtin_rx_sat:                      RX Built-in Functions.
61566                                                             (line   87)
61567* __builtin_rx_setpsw:                   RX Built-in Functions.
61568                                                             (line   91)
61569* __builtin_rx_wait:                     RX Built-in Functions.
61570                                                             (line   95)
61571* __builtin_saddll_overflow:             Integer Overflow Builtins.
61572                                                             (line   15)
61573* __builtin_saddl_overflow:              Integer Overflow Builtins.
61574                                                             (line   13)
61575* __builtin_sadd_overflow:               Integer Overflow Builtins.
61576                                                             (line   11)
61577* __builtin_set_thread_pointer:          SH Built-in Functions.
61578                                                             (line    9)
61579* __builtin_shuffle:                     Vector Extensions.  (line  126)
61580* __builtin_sh_get_fpscr:                SH Built-in Functions.
61581                                                             (line   35)
61582* __builtin_sh_set_fpscr:                SH Built-in Functions.
61583                                                             (line   38)
61584* __builtin_smulll_overflow:             Integer Overflow Builtins.
61585                                                             (line   69)
61586* __builtin_smull_overflow:              Integer Overflow Builtins.
61587                                                             (line   67)
61588* __builtin_smul_overflow:               Integer Overflow Builtins.
61589                                                             (line   65)
61590* __builtin_sqrtf128:                    PowerPC Built-in Functions.
61591                                                             (line  245)
61592* __builtin_sqrtf128_round_to_odd:       PowerPC Built-in Functions.
61593                                                             (line  269)
61594* __builtin_ssubll_overflow:             Integer Overflow Builtins.
61595                                                             (line   49)
61596* __builtin_ssubl_overflow:              Integer Overflow Builtins.
61597                                                             (line   47)
61598* __builtin_ssub_overflow:               Integer Overflow Builtins.
61599                                                             (line   45)
61600* __builtin_subf128_round_to_odd:        PowerPC Built-in Functions.
61601                                                             (line  257)
61602* __builtin_sub_overflow:                Integer Overflow Builtins.
61603                                                             (line   43)
61604* __builtin_sub_overflow_p:              Integer Overflow Builtins.
61605                                                             (line   88)
61606* __builtin_tabort:                      S/390 System z Built-in Functions.
61607                                                             (line   82)
61608* __builtin_tbegin:                      S/390 System z Built-in Functions.
61609                                                             (line    6)
61610* __builtin_tbeginc:                     S/390 System z Built-in Functions.
61611                                                             (line   73)
61612* __builtin_tbegin_nofloat:              S/390 System z Built-in Functions.
61613                                                             (line   54)
61614* __builtin_tbegin_retry:                S/390 System z Built-in Functions.
61615                                                             (line   60)
61616* __builtin_tbegin_retry_nofloat:        S/390 System z Built-in Functions.
61617                                                             (line   67)
61618* __builtin_tend:                        S/390 System z Built-in Functions.
61619                                                             (line   77)
61620* __builtin_tgmath:                      Other Builtins.     (line  316)
61621* __builtin_thread_pointer:              SH Built-in Functions.
61622                                                             (line   18)
61623* __builtin_trap:                        Other Builtins.     (line  448)
61624* __builtin_truncf128_round_to_odd:      PowerPC Built-in Functions.
61625                                                             (line  277)
61626* __builtin_tx_assist:                   S/390 System z Built-in Functions.
61627                                                             (line   87)
61628* __builtin_tx_nesting_depth:            S/390 System z Built-in Functions.
61629                                                             (line   93)
61630* __builtin_types_compatible_p:          Other Builtins.     (line  220)
61631* __builtin_uaddll_overflow:             Integer Overflow Builtins.
61632                                                             (line   21)
61633* __builtin_uaddl_overflow:              Integer Overflow Builtins.
61634                                                             (line   19)
61635* __builtin_uadd_overflow:               Integer Overflow Builtins.
61636                                                             (line   17)
61637* __builtin_umulll_overflow:             Integer Overflow Builtins.
61638                                                             (line   75)
61639* __builtin_umull_overflow:              Integer Overflow Builtins.
61640                                                             (line   73)
61641* __builtin_umul_overflow:               Integer Overflow Builtins.
61642                                                             (line   71)
61643* __builtin_unreachable:                 Other Builtins.     (line  455)
61644* __builtin_usubll_overflow:             Integer Overflow Builtins.
61645                                                             (line   55)
61646* __builtin_usubl_overflow:              Integer Overflow Builtins.
61647                                                             (line   53)
61648* __builtin_usub_overflow:               Integer Overflow Builtins.
61649                                                             (line   51)
61650* __builtin_va_arg_pack:                 Constructing Calls. (line   52)
61651* __builtin_va_arg_pack_len:             Constructing Calls. (line   75)
61652* __builtin___bnd_chk_ptr_bounds:        Pointer Bounds Checker builtins.
61653                                                             (line    6)
61654* __builtin___bnd_chk_ptr_bounds <1>:    Pointer Bounds Checker builtins.
61655                                                             (line  110)
61656* __builtin___bnd_chk_ptr_lbounds:       Pointer Bounds Checker builtins.
61657                                                             (line    6)
61658* __builtin___bnd_chk_ptr_lbounds <1>:   Pointer Bounds Checker builtins.
61659                                                             (line   85)
61660* __builtin___bnd_chk_ptr_ubounds:       Pointer Bounds Checker builtins.
61661                                                             (line    6)
61662* __builtin___bnd_chk_ptr_ubounds <1>:   Pointer Bounds Checker builtins.
61663                                                             (line  103)
61664* __builtin___bnd_copy_ptr_bounds:       Pointer Bounds Checker builtins.
61665                                                             (line    6)
61666* __builtin___bnd_copy_ptr_bounds <1>:   Pointer Bounds Checker builtins.
61667                                                             (line   46)
61668* __builtin___bnd_get_ptr_lbound:        Pointer Bounds Checker builtins.
61669                                                             (line    6)
61670* __builtin___bnd_get_ptr_lbound <1>:    Pointer Bounds Checker builtins.
61671                                                             (line  128)
61672* __builtin___bnd_get_ptr_ubound:        Pointer Bounds Checker builtins.
61673                                                             (line    6)
61674* __builtin___bnd_get_ptr_ubound <1>:    Pointer Bounds Checker builtins.
61675                                                             (line  140)
61676* __builtin___bnd_init_ptr_bounds:       Pointer Bounds Checker builtins.
61677                                                             (line    6)
61678* __builtin___bnd_init_ptr_bounds <1>:   Pointer Bounds Checker builtins.
61679                                                             (line   59)
61680* __builtin___bnd_narrow_ptr_bounds:     Pointer Bounds Checker builtins.
61681                                                             (line    6)
61682* __builtin___bnd_narrow_ptr_bounds <1>: Pointer Bounds Checker builtins.
61683                                                             (line   27)
61684* __builtin___bnd_null_ptr_bounds:       Pointer Bounds Checker builtins.
61685                                                             (line    6)
61686* __builtin___bnd_null_ptr_bounds <1>:   Pointer Bounds Checker builtins.
61687                                                             (line   67)
61688* __builtin___bnd_set_ptr_bounds:        Pointer Bounds Checker builtins.
61689                                                             (line    6)
61690* __builtin___bnd_set_ptr_bounds <1>:    Pointer Bounds Checker builtins.
61691                                                             (line   12)
61692* __builtin___bnd_store_ptr_bounds:      Pointer Bounds Checker builtins.
61693                                                             (line    6)
61694* __builtin___bnd_store_ptr_bounds <1>:  Pointer Bounds Checker builtins.
61695                                                             (line   75)
61696* __builtin___clear_cache:               Other Builtins.     (line  562)
61697* __builtin___fprintf_chk:               Object Size Checking.
61698                                                             (line    6)
61699* __builtin___memcpy_chk:                Object Size Checking.
61700                                                             (line    6)
61701* __builtin___memmove_chk:               Object Size Checking.
61702                                                             (line    6)
61703* __builtin___mempcpy_chk:               Object Size Checking.
61704                                                             (line    6)
61705* __builtin___memset_chk:                Object Size Checking.
61706                                                             (line    6)
61707* __builtin___printf_chk:                Object Size Checking.
61708                                                             (line    6)
61709* __builtin___snprintf_chk:              Object Size Checking.
61710                                                             (line    6)
61711* __builtin___sprintf_chk:               Object Size Checking.
61712                                                             (line    6)
61713* __builtin___stpcpy_chk:                Object Size Checking.
61714                                                             (line    6)
61715* __builtin___strcat_chk:                Object Size Checking.
61716                                                             (line    6)
61717* __builtin___strcpy_chk:                Object Size Checking.
61718                                                             (line    6)
61719* __builtin___strncat_chk:               Object Size Checking.
61720                                                             (line    6)
61721* __builtin___strncpy_chk:               Object Size Checking.
61722                                                             (line    6)
61723* __builtin___vfprintf_chk:              Object Size Checking.
61724                                                             (line    6)
61725* __builtin___vprintf_chk:               Object Size Checking.
61726                                                             (line    6)
61727* __builtin___vsnprintf_chk:             Object Size Checking.
61728                                                             (line    6)
61729* __builtin___vsprintf_chk:              Object Size Checking.
61730                                                             (line    6)
61731* __complex__ keyword:                   Complex.            (line    6)
61732* __declspec(dllexport):                 Microsoft Windows Function Attributes.
61733                                                             (line   10)
61734* __declspec(dllimport):                 Microsoft Windows Function Attributes.
61735                                                             (line   42)
61736* __ea SPU Named Address Spaces:         Named Address Spaces.
61737                                                             (line  170)
61738* __extension__:                         Alternate Keywords. (line   30)
61739* __far M32C Named Address Spaces:       Named Address Spaces.
61740                                                             (line  153)
61741* __far RL78 Named Address Spaces:       Named Address Spaces.
61742                                                             (line  162)
61743* __flash AVR Named Address Spaces:      Named Address Spaces.
61744                                                             (line   44)
61745* __flash1 AVR Named Address Spaces:     Named Address Spaces.
61746                                                             (line   53)
61747* __flash2 AVR Named Address Spaces:     Named Address Spaces.
61748                                                             (line   53)
61749* __flash3 AVR Named Address Spaces:     Named Address Spaces.
61750                                                             (line   53)
61751* __flash4 AVR Named Address Spaces:     Named Address Spaces.
61752                                                             (line   53)
61753* __flash5 AVR Named Address Spaces:     Named Address Spaces.
61754                                                             (line   53)
61755* __float128 data type:                  Floating Types.     (line    6)
61756* __float80 data type:                   Floating Types.     (line    6)
61757* __fp16 data type:                      Half-Precision.     (line    6)
61758* __FUNCTION__ identifier:               Function Names.     (line    6)
61759* __func__ identifier:                   Function Names.     (line    6)
61760* __ibm128 data type:                    Floating Types.     (line    6)
61761* __imag__ keyword:                      Complex.            (line   31)
61762* __int128 data types:                   __int128.           (line    6)
61763* __memx AVR Named Address Spaces:       Named Address Spaces.
61764                                                             (line   59)
61765* __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
61766* __real__ keyword:                      Complex.            (line   31)
61767* __seg_fs x86 named address space:      Named Address Spaces.
61768                                                             (line  188)
61769* __seg_gs x86 named address space:      Named Address Spaces.
61770                                                             (line  188)
61771* __STDC_HOSTED__:                       Standards.          (line   13)
61772* __sync_add_and_fetch:                  __sync Builtins.    (line   72)
61773* __sync_and_and_fetch:                  __sync Builtins.    (line   72)
61774* __sync_bool_compare_and_swap:          __sync Builtins.    (line   88)
61775* __sync_fetch_and_add:                  __sync Builtins.    (line   50)
61776* __sync_fetch_and_and:                  __sync Builtins.    (line   50)
61777* __sync_fetch_and_nand:                 __sync Builtins.    (line   50)
61778* __sync_fetch_and_or:                   __sync Builtins.    (line   50)
61779* __sync_fetch_and_sub:                  __sync Builtins.    (line   50)
61780* __sync_fetch_and_xor:                  __sync Builtins.    (line   50)
61781* __sync_lock_release:                   __sync Builtins.    (line  118)
61782* __sync_lock_test_and_set:              __sync Builtins.    (line  100)
61783* __sync_nand_and_fetch:                 __sync Builtins.    (line   72)
61784* __sync_or_and_fetch:                   __sync Builtins.    (line   72)
61785* __sync_sub_and_fetch:                  __sync Builtins.    (line   72)
61786* __sync_synchronize:                    __sync Builtins.    (line   97)
61787* __sync_val_compare_and_swap:           __sync Builtins.    (line   88)
61788* __sync_xor_and_fetch:                  __sync Builtins.    (line   72)
61789* __thread:                              Thread-Local.       (line    6)
61790* AArch64 Options:                       AArch64 Options.    (line    6)
61791* ABI:                                   Compatibility.      (line    6)
61792* abi_tag function attribute:            C++ Attributes.     (line    9)
61793* abi_tag type attribute:                C++ Attributes.     (line    9)
61794* abi_tag variable attribute:            C++ Attributes.     (line    9)
61795* abort:                                 Other Builtins.     (line    6)
61796* abs:                                   Other Builtins.     (line    6)
61797* absdata variable attribute, AVR:       AVR Variable Attributes.
61798                                                             (line  104)
61799* accessing volatiles:                   Volatiles.          (line    6)
61800* accessing volatiles <1>:               C++ Volatiles.      (line    6)
61801* acos:                                  Other Builtins.     (line    6)
61802* acosf:                                 Other Builtins.     (line    6)
61803* acosh:                                 Other Builtins.     (line    6)
61804* acoshf:                                Other Builtins.     (line    6)
61805* acoshl:                                Other Builtins.     (line    6)
61806* acosl:                                 Other Builtins.     (line    6)
61807* Ada:                                   G++ and GCC.        (line    6)
61808* Ada <1>:                               G++ and GCC.        (line   30)
61809* additional floating types:             Floating Types.     (line    6)
61810* address constraints:                   Simple Constraints. (line  152)
61811* address of a label:                    Labels as Values.   (line    6)
61812* address variable attribute, AVR:       AVR Variable Attributes.
61813                                                             (line   97)
61814* address_operand:                       Simple Constraints. (line  156)
61815* alias function attribute:              Common Function Attributes.
61816                                                             (line    9)
61817* aligned function attribute:            Common Function Attributes.
61818                                                             (line   23)
61819* aligned type attribute:                Common Type Attributes.
61820                                                             (line    8)
61821* aligned variable attribute:            Common Variable Attributes.
61822                                                             (line    8)
61823* alignment:                             Alignment.          (line    6)
61824* alloca:                                Other Builtins.     (line    6)
61825* alloca vs variable-length arrays:      Variable Length.    (line   35)
61826* alloc_align function attribute:        Common Function Attributes.
61827                                                             (line   43)
61828* alloc_size function attribute:         Common Function Attributes.
61829                                                             (line   60)
61830* Allow nesting in an interrupt handler on the Blackfin processor: Blackfin Function Attributes.
61831                                                             (line   45)
61832* Altera Nios II options:                Nios II Options.    (line    6)
61833* alternate keywords:                    Alternate Keywords. (line    6)
61834* altivec type attribute, PowerPC:       PowerPC Type Attributes.
61835                                                             (line   12)
61836* altivec variable attribute, PowerPC:   PowerPC Variable Attributes.
61837                                                             (line   12)
61838* always_inline function attribute:      Common Function Attributes.
61839                                                             (line   81)
61840* AMD1:                                  Standards.          (line   13)
61841* ANSI C:                                Standards.          (line   13)
61842* ANSI C standard:                       Standards.          (line   13)
61843* ANSI C89:                              Standards.          (line   13)
61844* ANSI support:                          C Dialect Options.  (line   10)
61845* ANSI X3.159-1989:                      Standards.          (line   13)
61846* apostrophes:                           Incompatibilities.  (line  116)
61847* application binary interface:          Compatibility.      (line    6)
61848* ARC options:                           ARC Options.        (line    6)
61849* arch= function attribute, AArch64:     AArch64 Function Attributes.
61850                                                             (line   49)
61851* arch= function attribute, ARM:         ARM Function Attributes.
61852                                                             (line   91)
61853* ARM options:                           ARM Options.        (line    6)
61854* ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
61855                                                             (line    6)
61856* arrays of length zero:                 Zero Length.        (line    6)
61857* arrays of variable length:             Variable Length.    (line    6)
61858* arrays, non-lvalue:                    Subscripting.       (line    6)
61859* artificial function attribute:         Common Function Attributes.
61860                                                             (line   91)
61861* asin:                                  Other Builtins.     (line    6)
61862* asinf:                                 Other Builtins.     (line    6)
61863* asinh:                                 Other Builtins.     (line    6)
61864* asinhf:                                Other Builtins.     (line    6)
61865* asinhl:                                Other Builtins.     (line    6)
61866* asinl:                                 Other Builtins.     (line    6)
61867* asm assembler template:                Extended Asm.       (line  225)
61868* asm clobbers:                          Extended Asm.       (line  653)
61869* asm constraints:                       Constraints.        (line    6)
61870* asm expressions:                       Extended Asm.       (line  558)
61871* asm flag output operands:              Extended Asm.       (line  487)
61872* asm goto labels:                       Extended Asm.       (line  832)
61873* asm inline:                            Size of an asm.     (line   25)
61874* asm input operands:                    Extended Asm.       (line  558)
61875* asm keyword:                           Using Assembly Language with C.
61876                                                             (line    6)
61877* asm output operands:                   Extended Asm.       (line  328)
61878* asm scratch registers:                 Extended Asm.       (line  653)
61879* asm volatile:                          Extended Asm.       (line  116)
61880* assembler names for identifiers:       Asm Labels.         (line    6)
61881* assembly code, invalid:                Bug Criteria.       (line   12)
61882* assembly language in C:                Using Assembly Language with C.
61883                                                             (line    6)
61884* assembly language in C, basic:         Basic Asm.          (line    6)
61885* assembly language in C, extended:      Extended Asm.       (line    6)
61886* assume_aligned function attribute:     Common Function Attributes.
61887                                                             (line   98)
61888* atan:                                  Other Builtins.     (line    6)
61889* atan2:                                 Other Builtins.     (line    6)
61890* atan2f:                                Other Builtins.     (line    6)
61891* atan2l:                                Other Builtins.     (line    6)
61892* atanf:                                 Other Builtins.     (line    6)
61893* atanh:                                 Other Builtins.     (line    6)
61894* atanhf:                                Other Builtins.     (line    6)
61895* atanhl:                                Other Builtins.     (line    6)
61896* atanl:                                 Other Builtins.     (line    6)
61897* attribute of types:                    Type Attributes.    (line    6)
61898* attribute of variables:                Variable Attributes.
61899                                                             (line    6)
61900* attribute syntax:                      Attribute Syntax.   (line    6)
61901* autoincrement/decrement addressing:    Simple Constraints. (line   30)
61902* automatic inline for C++ member fns:   Inline.             (line   68)
61903* aux variable attribute, ARC:           ARC Variable Attributes.
61904                                                             (line    7)
61905* AVR Options:                           AVR Options.        (line    6)
61906* Backwards Compatibility:               Backwards Compatibility.
61907                                                             (line    6)
61908* bank_switch function attribute, M32C:  M32C Function Attributes.
61909                                                             (line    9)
61910* base class members:                    Name lookup.        (line    6)
61911* based type attribute, MeP:             MeP Type Attributes.
61912                                                             (line    6)
61913* based variable attribute, MeP:         MeP Variable Attributes.
61914                                                             (line   16)
61915* basic asm:                             Basic Asm.          (line    6)
61916* bcmp:                                  Other Builtins.     (line    6)
61917* below100 variable attribute, Xstormy16: Xstormy16 Variable Attributes.
61918                                                             (line   10)
61919* binary compatibility:                  Compatibility.      (line    6)
61920* Binary constants using the 0b prefix:  Binary constants.   (line    6)
61921* Blackfin Options:                      Blackfin Options.   (line    6)
61922* bnd_instrument function attribute:     Common Function Attributes.
61923                                                             (line  113)
61924* bnd_legacy function attribute:         Common Function Attributes.
61925                                                             (line  118)
61926* bnd_variable_size type attribute:      Common Type Attributes.
61927                                                             (line  127)
61928* bound pointer to member function:      Bound member functions.
61929                                                             (line    6)
61930* break handler functions:               MicroBlaze Function Attributes.
61931                                                             (line   17)
61932* break_handler function attribute, MicroBlaze: MicroBlaze Function Attributes.
61933                                                             (line   17)
61934* brk_interrupt function attribute, RL78: RL78 Function Attributes.
61935                                                             (line   10)
61936* bug criteria:                          Bug Criteria.       (line    6)
61937* bugs:                                  Bugs.               (line    6)
61938* bugs, known:                           Trouble.            (line    6)
61939* built-in functions:                    C Dialect Options.  (line  254)
61940* built-in functions <1>:                Other Builtins.     (line    6)
61941* bzero:                                 Other Builtins.     (line    6)
61942* C compilation options:                 Invoking GCC.       (line   18)
61943* C intermediate output, nonexistent:    G++ and GCC.        (line   35)
61944* C language extensions:                 C Extensions.       (line    6)
61945* C language, traditional:               Preprocessor Options.
61946                                                             (line  366)
61947* C standard:                            Standards.          (line   13)
61948* C standards:                           Standards.          (line   13)
61949* c++:                                   Invoking G++.       (line   14)
61950* C++:                                   G++ and GCC.        (line   30)
61951* C++ comments:                          C++ Comments.       (line    6)
61952* C++ interface and implementation headers: C++ Interface.   (line    6)
61953* C++ language extensions:               C++ Extensions.     (line    6)
61954* C++ member fns, automatically inline:  Inline.             (line   68)
61955* C++ misunderstandings:                 C++ Misunderstandings.
61956                                                             (line    6)
61957* C++ options, command-line:             C++ Dialect Options.
61958                                                             (line    6)
61959* C++ pragmas, effect on inlining:       C++ Interface.      (line   57)
61960* C++ source file suffixes:              Invoking G++.       (line    6)
61961* C++ static data, declaring and defining: Static Definitions.
61962                                                             (line    6)
61963* C11:                                   Standards.          (line   13)
61964* C17:                                   Standards.          (line   13)
61965* C1X:                                   Standards.          (line   13)
61966* C6X Options:                           C6X Options.        (line    6)
61967* C89:                                   Standards.          (line   13)
61968* C90:                                   Standards.          (line   13)
61969* C94:                                   Standards.          (line   13)
61970* C95:                                   Standards.          (line   13)
61971* C99:                                   Standards.          (line   13)
61972* C9X:                                   Standards.          (line   13)
61973* cabs:                                  Other Builtins.     (line    6)
61974* cabsf:                                 Other Builtins.     (line    6)
61975* cabsl:                                 Other Builtins.     (line    6)
61976* cacos:                                 Other Builtins.     (line    6)
61977* cacosf:                                Other Builtins.     (line    6)
61978* cacosh:                                Other Builtins.     (line    6)
61979* cacoshf:                               Other Builtins.     (line    6)
61980* cacoshl:                               Other Builtins.     (line    6)
61981* cacosl:                                Other Builtins.     (line    6)
61982* callee_pop_aggregate_return function attribute, x86: x86 Function Attributes.
61983                                                             (line   47)
61984* calling functions through the function vector on SH2A: SH Function Attributes.
61985                                                             (line    9)
61986* calloc:                                Other Builtins.     (line    6)
61987* carg:                                  Other Builtins.     (line    6)
61988* cargf:                                 Other Builtins.     (line    6)
61989* cargl:                                 Other Builtins.     (line    6)
61990* case labels in initializers:           Designated Inits.   (line    6)
61991* case ranges:                           Case Ranges.        (line    6)
61992* casin:                                 Other Builtins.     (line    6)
61993* casinf:                                Other Builtins.     (line    6)
61994* casinh:                                Other Builtins.     (line    6)
61995* casinhf:                               Other Builtins.     (line    6)
61996* casinhl:                               Other Builtins.     (line    6)
61997* casinl:                                Other Builtins.     (line    6)
61998* cast to a union:                       Cast to Union.      (line    6)
61999* catan:                                 Other Builtins.     (line    6)
62000* catanf:                                Other Builtins.     (line    6)
62001* catanh:                                Other Builtins.     (line    6)
62002* catanhf:                               Other Builtins.     (line    6)
62003* catanhl:                               Other Builtins.     (line    6)
62004* catanl:                                Other Builtins.     (line    6)
62005* cb variable attribute, MeP:            MeP Variable Attributes.
62006                                                             (line   46)
62007* cbrt:                                  Other Builtins.     (line    6)
62008* cbrtf:                                 Other Builtins.     (line    6)
62009* cbrtl:                                 Other Builtins.     (line    6)
62010* ccos:                                  Other Builtins.     (line    6)
62011* ccosf:                                 Other Builtins.     (line    6)
62012* ccosh:                                 Other Builtins.     (line    6)
62013* ccoshf:                                Other Builtins.     (line    6)
62014* ccoshl:                                Other Builtins.     (line    6)
62015* ccosl:                                 Other Builtins.     (line    6)
62016* cdecl function attribute, x86-32:      x86 Function Attributes.
62017                                                             (line    9)
62018* ceil:                                  Other Builtins.     (line    6)
62019* ceilf:                                 Other Builtins.     (line    6)
62020* ceill:                                 Other Builtins.     (line    6)
62021* cexp:                                  Other Builtins.     (line    6)
62022* cexpf:                                 Other Builtins.     (line    6)
62023* cexpl:                                 Other Builtins.     (line    6)
62024* character set, execution:              Preprocessor Options.
62025                                                             (line  266)
62026* character set, input:                  Preprocessor Options.
62027                                                             (line  279)
62028* character set, input normalization:    Warning Options.    (line 2440)
62029* character set, wide execution:         Preprocessor Options.
62030                                                             (line  271)
62031* cimag:                                 Other Builtins.     (line    6)
62032* cimagf:                                Other Builtins.     (line    6)
62033* cimagl:                                Other Builtins.     (line    6)
62034* cleanup variable attribute:            Common Variable Attributes.
62035                                                             (line  103)
62036* clog:                                  Other Builtins.     (line    6)
62037* clog10:                                Other Builtins.     (line    6)
62038* clog10f:                               Other Builtins.     (line    6)
62039* clog10l:                               Other Builtins.     (line    6)
62040* clogf:                                 Other Builtins.     (line    6)
62041* clogl:                                 Other Builtins.     (line    6)
62042* cmodel= function attribute, AArch64:   AArch64 Function Attributes.
62043                                                             (line   27)
62044* COBOL:                                 G++ and GCC.        (line   23)
62045* code generation conventions:           Code Gen Options.   (line    6)
62046* code, mixed with declarations:         Mixed Declarations. (line    6)
62047* cold function attribute:               Common Function Attributes.
62048                                                             (line  123)
62049* cold label attribute:                  Label Attributes.   (line   45)
62050* command options:                       Invoking GCC.       (line    6)
62051* comments, C++ style:                   C++ Comments.       (line    6)
62052* common variable attribute:             Common Variable Attributes.
62053                                                             (line  118)
62054* comparison of signed and unsigned values, warning: Warning Options.
62055                                                             (line 2212)
62056* compilation statistics:                Developer Options.  (line    6)
62057* compiler bugs, reporting:              Bug Reporting.      (line    6)
62058* compiler compared to C++ preprocessor: G++ and GCC.        (line   35)
62059* compiler options, C++:                 C++ Dialect Options.
62060                                                             (line    6)
62061* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
62062                                                             (line    6)
62063* compiler version, specifying:          Invoking GCC.       (line   24)
62064* COMPILER_PATH:                         Environment Variables.
62065                                                             (line   91)
62066* complex conjugation:                   Complex.            (line   38)
62067* complex numbers:                       Complex.            (line    6)
62068* compound literals:                     Compound Literals.  (line    6)
62069* computed gotos:                        Labels as Values.   (line    6)
62070* conditional expressions, extensions:   Conditionals.       (line    6)
62071* conflicting types:                     Disappointments.    (line   21)
62072* conj:                                  Other Builtins.     (line    6)
62073* conjf:                                 Other Builtins.     (line    6)
62074* conjl:                                 Other Builtins.     (line    6)
62075* const applied to function:             Function Attributes.
62076                                                             (line    6)
62077* const function attribute:              Common Function Attributes.
62078                                                             (line  139)
62079* const qualifier:                       Pointers to Arrays. (line    6)
62080* constants in constraints:              Simple Constraints. (line   68)
62081* constraint modifier characters:        Modifiers.          (line    6)
62082* constraint, matching:                  Simple Constraints. (line  137)
62083* constraints, asm:                      Constraints.        (line    6)
62084* constraints, machine specific:         Machine Constraints.
62085                                                             (line    6)
62086* constructing calls:                    Constructing Calls. (line    6)
62087* constructor expressions:               Compound Literals.  (line    6)
62088* constructor function attribute:        Common Function Attributes.
62089                                                             (line  161)
62090* contributors:                          Contributors.       (line    6)
62091* copysign:                              Other Builtins.     (line    6)
62092* copysignf:                             Other Builtins.     (line    6)
62093* copysignl:                             Other Builtins.     (line    6)
62094* core dump:                             Bug Criteria.       (line    9)
62095* cos:                                   Other Builtins.     (line    6)
62096* cosf:                                  Other Builtins.     (line    6)
62097* cosh:                                  Other Builtins.     (line    6)
62098* coshf:                                 Other Builtins.     (line    6)
62099* coshl:                                 Other Builtins.     (line    6)
62100* cosl:                                  Other Builtins.     (line    6)
62101* CPATH:                                 Environment Variables.
62102                                                             (line  127)
62103* CPLUS_INCLUDE_PATH:                    Environment Variables.
62104                                                             (line  129)
62105* cpow:                                  Other Builtins.     (line    6)
62106* cpowf:                                 Other Builtins.     (line    6)
62107* cpowl:                                 Other Builtins.     (line    6)
62108* cproj:                                 Other Builtins.     (line    6)
62109* cprojf:                                Other Builtins.     (line    6)
62110* cprojl:                                Other Builtins.     (line    6)
62111* cpu= function attribute, AArch64:      AArch64 Function Attributes.
62112                                                             (line   59)
62113* CR16 Options:                          CR16 Options.       (line    6)
62114* creal:                                 Other Builtins.     (line    6)
62115* crealf:                                Other Builtins.     (line    6)
62116* creall:                                Other Builtins.     (line    6)
62117* CRIS Options:                          CRIS Options.       (line    6)
62118* critical function attribute, MSP430:   MSP430 Function Attributes.
62119                                                             (line    9)
62120* cross compiling:                       Invoking GCC.       (line   24)
62121* csin:                                  Other Builtins.     (line    6)
62122* csinf:                                 Other Builtins.     (line    6)
62123* csinh:                                 Other Builtins.     (line    6)
62124* csinhf:                                Other Builtins.     (line    6)
62125* csinhl:                                Other Builtins.     (line    6)
62126* csinl:                                 Other Builtins.     (line    6)
62127* csqrt:                                 Other Builtins.     (line    6)
62128* csqrtf:                                Other Builtins.     (line    6)
62129* csqrtl:                                Other Builtins.     (line    6)
62130* ctan:                                  Other Builtins.     (line    6)
62131* ctanf:                                 Other Builtins.     (line    6)
62132* ctanh:                                 Other Builtins.     (line    6)
62133* ctanhf:                                Other Builtins.     (line    6)
62134* ctanhl:                                Other Builtins.     (line    6)
62135* ctanl:                                 Other Builtins.     (line    6)
62136* C_INCLUDE_PATH:                        Environment Variables.
62137                                                             (line  128)
62138* Darwin options:                        Darwin Options.     (line    6)
62139* dcgettext:                             Other Builtins.     (line    6)
62140* dd integer suffix:                     Decimal Float.      (line    6)
62141* DD integer suffix:                     Decimal Float.      (line    6)
62142* deallocating variable length arrays:   Variable Length.    (line   22)
62143* debug dump options:                    Developer Options.  (line    6)
62144* debugging GCC:                         Developer Options.  (line    6)
62145* debugging information options:         Debugging Options.  (line    6)
62146* decimal floating types:                Decimal Float.      (line    6)
62147* declaration scope:                     Incompatibilities.  (line   80)
62148* declarations inside expressions:       Statement Exprs.    (line    6)
62149* declarations, mixed with code:         Mixed Declarations. (line    6)
62150* declaring attributes of functions:     Function Attributes.
62151                                                             (line    6)
62152* declaring static data in C++:          Static Definitions. (line    6)
62153* defining static data in C++:           Static Definitions. (line    6)
62154* dependencies for make as output:       Environment Variables.
62155                                                             (line  156)
62156* dependencies for make as output <1>:   Environment Variables.
62157                                                             (line  172)
62158* dependencies, make:                    Preprocessor Options.
62159                                                             (line   77)
62160* DEPENDENCIES_OUTPUT:                   Environment Variables.
62161                                                             (line  155)
62162* dependent name lookup:                 Name lookup.        (line    6)
62163* deprecated enumerator attribute:       Enumerator Attributes.
62164                                                             (line   28)
62165* deprecated function attribute:         Common Function Attributes.
62166                                                             (line  185)
62167* deprecated type attribute:             Common Type Attributes.
62168                                                             (line  154)
62169* deprecated variable attribute:         Common Variable Attributes.
62170                                                             (line  127)
62171* designated initializers:               Designated Inits.   (line    6)
62172* designated_init type attribute:        Common Type Attributes.
62173                                                             (line  182)
62174* designator lists:                      Designated Inits.   (line   96)
62175* designators:                           Designated Inits.   (line   64)
62176* destructor function attribute:         Common Function Attributes.
62177                                                             (line  161)
62178* developer options:                     Developer Options.  (line    6)
62179* df integer suffix:                     Decimal Float.      (line    6)
62180* DF integer suffix:                     Decimal Float.      (line    6)
62181* dgettext:                              Other Builtins.     (line    6)
62182* diagnostic messages:                   Diagnostic Message Formatting Options.
62183                                                             (line    6)
62184* dialect options:                       C Dialect Options.  (line    6)
62185* diff-delete GCC_COLORS capability:     Diagnostic Message Formatting Options.
62186                                                             (line  108)
62187* diff-filename GCC_COLORS capability:   Diagnostic Message Formatting Options.
62188                                                             (line  101)
62189* diff-hunk GCC_COLORS capability:       Diagnostic Message Formatting Options.
62190                                                             (line  104)
62191* diff-insert GCC_COLORS capability:     Diagnostic Message Formatting Options.
62192                                                             (line  111)
62193* digits in constraint:                  Simple Constraints. (line  125)
62194* directory options:                     Directory Options.  (line    6)
62195* disinterrupt function attribute, Epiphany: Epiphany Function Attributes.
62196                                                             (line    9)
62197* disinterrupt function attribute, MeP:  MeP Function Attributes.
62198                                                             (line    9)
62199* dl integer suffix:                     Decimal Float.      (line    6)
62200* DL integer suffix:                     Decimal Float.      (line    6)
62201* dllexport function attribute:          Microsoft Windows Function Attributes.
62202                                                             (line   10)
62203* dllexport variable attribute:          Microsoft Windows Variable Attributes.
62204                                                             (line   12)
62205* dllimport function attribute:          Microsoft Windows Function Attributes.
62206                                                             (line   42)
62207* dllimport variable attribute:          Microsoft Windows Variable Attributes.
62208                                                             (line   12)
62209* dollar signs in identifier names:      Dollar Signs.       (line    6)
62210* double-word arithmetic:                Long Long.          (line    6)
62211* downward funargs:                      Nested Functions.   (line    6)
62212* drem:                                  Other Builtins.     (line    6)
62213* dremf:                                 Other Builtins.     (line    6)
62214* dreml:                                 Other Builtins.     (line    6)
62215* dump options:                          Developer Options.  (line    6)
62216* E in constraint:                       Simple Constraints. (line   87)
62217* earlyclobber operand:                  Modifiers.          (line   25)
62218* eight-bit data on the H8/300, H8/300H, and H8S: H8/300 Variable Attributes.
62219                                                             (line    9)
62220* eightbit_data variable attribute, H8/300: H8/300 Variable Attributes.
62221                                                             (line    9)
62222* EIND:                                  AVR Options.        (line  301)
62223* either function attribute, MSP430:     MSP430 Function Attributes.
62224                                                             (line   53)
62225* either variable attribute, MSP430:     MSP430 Variable Attributes.
62226                                                             (line   24)
62227* empty structures:                      Empty Structures.   (line    6)
62228* Enumerator Attributes:                 Enumerator Attributes.
62229                                                             (line    6)
62230* environment variables:                 Environment Variables.
62231                                                             (line    6)
62232* erf:                                   Other Builtins.     (line    6)
62233* erfc:                                  Other Builtins.     (line    6)
62234* erfcf:                                 Other Builtins.     (line    6)
62235* erfcl:                                 Other Builtins.     (line    6)
62236* erff:                                  Other Builtins.     (line    6)
62237* erfl:                                  Other Builtins.     (line    6)
62238* error function attribute:              Common Function Attributes.
62239                                                             (line  206)
62240* error GCC_COLORS capability:           Diagnostic Message Formatting Options.
62241                                                             (line   72)
62242* error messages:                        Warnings and Errors.
62243                                                             (line    6)
62244* escaped newlines:                      Escaped Newlines.   (line    6)
62245* exception function attribute:          NDS32 Function Attributes.
62246                                                             (line    9)
62247* exception handler functions, Blackfin: Blackfin Function Attributes.
62248                                                             (line    9)
62249* exception handler functions, NDS32:    NDS32 Function Attributes.
62250                                                             (line    9)
62251* exception_handler function attribute:  Blackfin Function Attributes.
62252                                                             (line    9)
62253* exit:                                  Other Builtins.     (line    6)
62254* exp:                                   Other Builtins.     (line    6)
62255* exp10:                                 Other Builtins.     (line    6)
62256* exp10f:                                Other Builtins.     (line    6)
62257* exp10l:                                Other Builtins.     (line    6)
62258* exp2:                                  Other Builtins.     (line    6)
62259* exp2f:                                 Other Builtins.     (line    6)
62260* exp2l:                                 Other Builtins.     (line    6)
62261* expf:                                  Other Builtins.     (line    6)
62262* expl:                                  Other Builtins.     (line    6)
62263* explicit register variables:           Explicit Register Variables.
62264                                                             (line    6)
62265* expm1:                                 Other Builtins.     (line    6)
62266* expm1f:                                Other Builtins.     (line    6)
62267* expm1l:                                Other Builtins.     (line    6)
62268* expressions containing statements:     Statement Exprs.    (line    6)
62269* expressions, constructor:              Compound Literals.  (line    6)
62270* extended asm:                          Extended Asm.       (line    6)
62271* extensible constraints:                Simple Constraints. (line  161)
62272* extensions, ?::                        Conditionals.       (line    6)
62273* extensions, C language:                C Extensions.       (line    6)
62274* extensions, C++ language:              C++ Extensions.     (line    6)
62275* external declaration scope:            Incompatibilities.  (line   80)
62276* externally_visible function attribute: Common Function Attributes.
62277                                                             (line  223)
62278* extra NOP instructions at the function entry point: Common Function Attributes.
62279                                                             (line  734)
62280* F in constraint:                       Simple Constraints. (line   92)
62281* fabs:                                  Other Builtins.     (line    6)
62282* fabsf:                                 Other Builtins.     (line    6)
62283* fabsl:                                 Other Builtins.     (line    6)
62284* fallthrough statement attribute:       Statement Attributes.
62285                                                             (line   26)
62286* far function attribute, MeP:           MeP Function Attributes.
62287                                                             (line   25)
62288* far function attribute, MIPS:          MIPS Function Attributes.
62289                                                             (line   63)
62290* far type attribute, MeP:               MeP Type Attributes.
62291                                                             (line    6)
62292* far variable attribute, MeP:           MeP Variable Attributes.
62293                                                             (line   30)
62294* fastcall function attribute, x86-32:   x86 Function Attributes.
62295                                                             (line   15)
62296* fast_interrupt function attribute, M32C: M32C Function Attributes.
62297                                                             (line   14)
62298* fast_interrupt function attribute, MicroBlaze: MicroBlaze Function Attributes.
62299                                                             (line   27)
62300* fast_interrupt function attribute, RX: RX Function Attributes.
62301                                                             (line    9)
62302* fatal signal:                          Bug Criteria.       (line    9)
62303* fdim:                                  Other Builtins.     (line    6)
62304* fdimf:                                 Other Builtins.     (line    6)
62305* fdiml:                                 Other Builtins.     (line    6)
62306* FDL, GNU Free Documentation License:   GNU Free Documentation License.
62307                                                             (line    6)
62308* ffs:                                   Other Builtins.     (line    6)
62309* file name suffix:                      Overall Options.    (line   14)
62310* file names:                            Link Options.       (line   10)
62311* fix-cortex-a53-835769 function attribute, AArch64: AArch64 Function Attributes.
62312                                                             (line   19)
62313* fixed-point types:                     Fixed-Point.        (line    6)
62314* fixit-delete GCC_COLORS capability:    Diagnostic Message Formatting Options.
62315                                                             (line   98)
62316* fixit-insert GCC_COLORS capability:    Diagnostic Message Formatting Options.
62317                                                             (line   94)
62318* flatten function attribute:            Common Function Attributes.
62319                                                             (line  236)
62320* flexible array members:                Zero Length.        (line    6)
62321* float as function value type:          Incompatibilities.  (line  141)
62322* floating point precision:              Disappointments.    (line   68)
62323* floating-point precision:              Optimize Options.   (line 1992)
62324* floor:                                 Other Builtins.     (line    6)
62325* floorf:                                Other Builtins.     (line    6)
62326* floorl:                                Other Builtins.     (line    6)
62327* fma:                                   Other Builtins.     (line    6)
62328* fmaf:                                  Other Builtins.     (line    6)
62329* fmal:                                  Other Builtins.     (line    6)
62330* fmax:                                  Other Builtins.     (line    6)
62331* fmaxf:                                 Other Builtins.     (line    6)
62332* fmaxl:                                 Other Builtins.     (line    6)
62333* fmin:                                  Other Builtins.     (line    6)
62334* fminf:                                 Other Builtins.     (line    6)
62335* fminl:                                 Other Builtins.     (line    6)
62336* fmod:                                  Other Builtins.     (line    6)
62337* fmodf:                                 Other Builtins.     (line    6)
62338* fmodl:                                 Other Builtins.     (line    6)
62339* force_align_arg_pointer function attribute, x86: x86 Function Attributes.
62340                                                             (line  100)
62341* format function attribute:             Common Function Attributes.
62342                                                             (line  243)
62343* format_arg function attribute:         Common Function Attributes.
62344                                                             (line  308)
62345* Fortran:                               G++ and GCC.        (line    6)
62346* forwarder_section function attribute, Epiphany: Epiphany Function Attributes.
62347                                                             (line   13)
62348* forwarding calls:                      Constructing Calls. (line    6)
62349* fprintf:                               Other Builtins.     (line    6)
62350* fprintf_unlocked:                      Other Builtins.     (line    6)
62351* fputs:                                 Other Builtins.     (line    6)
62352* fputs_unlocked:                        Other Builtins.     (line    6)
62353* FR30 Options:                          FR30 Options.       (line    6)
62354* freestanding environment:              Standards.          (line   13)
62355* freestanding implementation:           Standards.          (line   13)
62356* frexp:                                 Other Builtins.     (line    6)
62357* frexpf:                                Other Builtins.     (line    6)
62358* frexpl:                                Other Builtins.     (line    6)
62359* FRV Options:                           FRV Options.        (line    6)
62360* fscanf:                                Other Builtins.     (line    6)
62361* fscanf, and constant strings:          Incompatibilities.  (line   17)
62362* FT32 Options:                          FT32 Options.       (line    6)
62363* function addressability on the M32R/D: M32R/D Function Attributes.
62364                                                             (line   15)
62365* function attributes:                   Function Attributes.
62366                                                             (line    6)
62367* function pointers, arithmetic:         Pointer Arith.      (line    6)
62368* function prototype declarations:       Function Prototypes.
62369                                                             (line    6)
62370* function versions:                     Function Multiversioning.
62371                                                             (line    6)
62372* function, size of pointer to:          Pointer Arith.      (line    6)
62373* functions in arbitrary sections:       Common Function Attributes.
62374                                                             (line  798)
62375* functions that are dynamically resolved: Common Function Attributes.
62376                                                             (line  400)
62377* functions that are passed arguments in registers on x86-32: x86 Function Attributes.
62378                                                             (line   76)
62379* functions that behave like malloc:     Common Function Attributes.
62380                                                             (line  527)
62381* functions that have no side effects:   Common Function Attributes.
62382                                                             (line  139)
62383* functions that have no side effects <1>: Common Function Attributes.
62384                                                             (line  752)
62385* functions that never return:           Common Function Attributes.
62386                                                             (line  681)
62387* functions that pop the argument stack on x86-32: x86 Function Attributes.
62388                                                             (line    9)
62389* functions that pop the argument stack on x86-32 <1>: x86 Function Attributes.
62390                                                             (line   15)
62391* functions that pop the argument stack on x86-32 <2>: x86 Function Attributes.
62392                                                             (line   23)
62393* functions that pop the argument stack on x86-32 <3>: x86 Function Attributes.
62394                                                             (line  108)
62395* functions that return more than once:  Common Function Attributes.
62396                                                             (line  789)
62397* functions with non-null pointer arguments: Common Function Attributes.
62398                                                             (line  633)
62399* functions with printf, scanf, strftime or strfmon style arguments: Common Function Attributes.
62400                                                             (line  243)
62401* function_return function attribute, x86: x86 Function Attributes.
62402                                                             (line  550)
62403* function_vector function attribute, H8/300: H8/300 Function Attributes.
62404                                                             (line    9)
62405* function_vector function attribute, M16C/M32C: M32C Function Attributes.
62406                                                             (line   20)
62407* function_vector function attribute, SH: SH Function Attributes.
62408                                                             (line    9)
62409* G in constraint:                       Simple Constraints. (line   96)
62410* g in constraint:                       Simple Constraints. (line  118)
62411* g++:                                   Invoking G++.       (line   14)
62412* G++:                                   G++ and GCC.        (line   30)
62413* gamma:                                 Other Builtins.     (line    6)
62414* gammaf:                                Other Builtins.     (line    6)
62415* gammaf_r:                              Other Builtins.     (line    6)
62416* gammal:                                Other Builtins.     (line    6)
62417* gammal_r:                              Other Builtins.     (line    6)
62418* gamma_r:                               Other Builtins.     (line    6)
62419* GCC:                                   G++ and GCC.        (line    6)
62420* GCC command options:                   Invoking GCC.       (line    6)
62421* GCC_COLORS environment variable:       Diagnostic Message Formatting Options.
62422                                                             (line   35)
62423* GCC_COMPARE_DEBUG:                     Environment Variables.
62424                                                             (line   52)
62425* GCC_EXEC_PREFIX:                       Environment Variables.
62426                                                             (line   57)
62427* gcc_struct type attribute, PowerPC:    PowerPC Type Attributes.
62428                                                             (line    9)
62429* gcc_struct type attribute, x86:        x86 Type Attributes.
62430                                                             (line   11)
62431* gcc_struct variable attribute, PowerPC: PowerPC Variable Attributes.
62432                                                             (line    9)
62433* gcc_struct variable attribute, x86:    x86 Variable Attributes.
62434                                                             (line   11)
62435* gcov:                                  Instrumentation Options.
62436                                                             (line   50)
62437* general-regs-only function attribute, AArch64: AArch64 Function Attributes.
62438                                                             (line   12)
62439* gettext:                               Other Builtins.     (line    6)
62440* global offset table:                   Code Gen Options.   (line  359)
62441* global register after longjmp:         Global Register Variables.
62442                                                             (line   74)
62443* global register variables:             Global Register Variables.
62444                                                             (line    6)
62445* GNAT:                                  G++ and GCC.        (line   30)
62446* GNU C Compiler:                        G++ and GCC.        (line    6)
62447* GNU Compiler Collection:               G++ and GCC.        (line    6)
62448* gnu_inline function attribute:         Common Function Attributes.
62449                                                             (line  354)
62450* Go:                                    G++ and GCC.        (line    6)
62451* goto with computed label:              Labels as Values.   (line    6)
62452* gprof:                                 Instrumentation Options.
62453                                                             (line   24)
62454* grouping options:                      Invoking GCC.       (line   31)
62455* H in constraint:                       Simple Constraints. (line   96)
62456* half-precision floating point:         Half-Precision.     (line    6)
62457* hardware models and configurations, specifying: Submodel Options.
62458                                                             (line    6)
62459* hex floats:                            Hex Floats.         (line    6)
62460* highlight, color:                      Diagnostic Message Formatting Options.
62461                                                             (line   35)
62462* hk fixed-suffix:                       Fixed-Point.        (line    6)
62463* HK fixed-suffix:                       Fixed-Point.        (line    6)
62464* hosted environment:                    Standards.          (line   13)
62465* hosted environment <1>:                C Dialect Options.  (line  294)
62466* hosted environment <2>:                C Dialect Options.  (line  302)
62467* hosted implementation:                 Standards.          (line   13)
62468* hot function attribute:                Common Function Attributes.
62469                                                             (line  390)
62470* hot label attribute:                   Label Attributes.   (line   38)
62471* hotpatch function attribute, S/390:    S/390 Function Attributes.
62472                                                             (line    9)
62473* HPPA Options:                          HPPA Options.       (line    6)
62474* hr fixed-suffix:                       Fixed-Point.        (line    6)
62475* HR fixed-suffix:                       Fixed-Point.        (line    6)
62476* hypot:                                 Other Builtins.     (line    6)
62477* hypotf:                                Other Builtins.     (line    6)
62478* hypotl:                                Other Builtins.     (line    6)
62479* i in constraint:                       Simple Constraints. (line   68)
62480* I in constraint:                       Simple Constraints. (line   79)
62481* IA-64 Options:                         IA-64 Options.      (line    6)
62482* IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
62483                                                             (line    6)
62484* identifier names, dollar signs in:     Dollar Signs.       (line    6)
62485* identifiers, names in assembler code:  Asm Labels.         (line    6)
62486* ifunc function attribute:              Common Function Attributes.
62487                                                             (line  400)
62488* ilogb:                                 Other Builtins.     (line    6)
62489* ilogbf:                                Other Builtins.     (line    6)
62490* ilogbl:                                Other Builtins.     (line    6)
62491* imaxabs:                               Other Builtins.     (line    6)
62492* implementation-defined behavior, C language: C Implementation.
62493                                                             (line    6)
62494* implementation-defined behavior, C++ language: C++ Implementation.
62495                                                             (line    6)
62496* implied #pragma implementation:        C++ Interface.      (line   43)
62497* incompatibilities of GCC:              Incompatibilities.  (line    6)
62498* increment operators:                   Bug Criteria.       (line   17)
62499* index:                                 Other Builtins.     (line    6)
62500* indirect calls, ARC:                   ARC Function Attributes.
62501                                                             (line   24)
62502* indirect calls, ARM:                   ARM Function Attributes.
62503                                                             (line   31)
62504* indirect calls, Blackfin:              Blackfin Function Attributes.
62505                                                             (line   38)
62506* indirect calls, Epiphany:              Epiphany Function Attributes.
62507                                                             (line   57)
62508* indirect calls, MIPS:                  MIPS Function Attributes.
62509                                                             (line   63)
62510* indirect calls, PowerPC:               PowerPC Function Attributes.
62511                                                             (line   10)
62512* indirect functions:                    Common Function Attributes.
62513                                                             (line  400)
62514* indirect_branch function attribute, x86: x86 Function Attributes.
62515                                                             (line  540)
62516* initializations in expressions:        Compound Literals.  (line    6)
62517* initializers with labeled elements:    Designated Inits.   (line    6)
62518* initializers, non-constant:            Initializers.       (line    6)
62519* init_priority variable attribute:      C++ Attributes.     (line   50)
62520* inline assembly language:              Using Assembly Language with C.
62521                                                             (line    6)
62522* inline automatic for C++ member fns:   Inline.             (line   68)
62523* inline functions:                      Inline.             (line    6)
62524* inline functions, omission of:         Inline.             (line   51)
62525* inlining and C++ pragmas:              C++ Interface.      (line   57)
62526* installation trouble:                  Trouble.            (line    6)
62527* instrumentation options:               Instrumentation Options.
62528                                                             (line    6)
62529* integrating function code:             Inline.             (line    6)
62530* interface and implementation headers, C++: C++ Interface.  (line    6)
62531* intermediate C version, nonexistent:   G++ and GCC.        (line   35)
62532* interrupt function attribute, ARC:     ARC Function Attributes.
62533                                                             (line    9)
62534* interrupt function attribute, ARM:     ARM Function Attributes.
62535                                                             (line    9)
62536* interrupt function attribute, AVR:     AVR Function Attributes.
62537                                                             (line    9)
62538* interrupt function attribute, CR16:    CR16 Function Attributes.
62539                                                             (line    9)
62540* interrupt function attribute, Epiphany: Epiphany Function Attributes.
62541                                                             (line   20)
62542* interrupt function attribute, M32C:    M32C Function Attributes.
62543                                                             (line   53)
62544* interrupt function attribute, M32R/D:  M32R/D Function Attributes.
62545                                                             (line    9)
62546* interrupt function attribute, m68k:    m68k Function Attributes.
62547                                                             (line   10)
62548* interrupt function attribute, MeP:     MeP Function Attributes.
62549                                                             (line   14)
62550* interrupt function attribute, MIPS:    MIPS Function Attributes.
62551                                                             (line    9)
62552* interrupt function attribute, MSP430:  MSP430 Function Attributes.
62553                                                             (line   15)
62554* interrupt function attribute, NDS32:   NDS32 Function Attributes.
62555                                                             (line   14)
62556* interrupt function attribute, RL78:    RL78 Function Attributes.
62557                                                             (line   10)
62558* interrupt function attribute, RX:      RX Function Attributes.
62559                                                             (line   15)
62560* interrupt function attribute, V850:    V850 Function Attributes.
62561                                                             (line   10)
62562* interrupt function attribute, Visium:  Visium Function Attributes.
62563                                                             (line    9)
62564* interrupt function attribute, x86:     x86 Function Attributes.
62565                                                             (line  124)
62566* interrupt function attribute, Xstormy16: Xstormy16 Function Attributes.
62567                                                             (line    9)
62568* interrupt_handler function attribute, Blackfin: Blackfin Function Attributes.
62569                                                             (line   15)
62570* interrupt_handler function attribute, H8/300: H8/300 Function Attributes.
62571                                                             (line   17)
62572* interrupt_handler function attribute, m68k: m68k Function Attributes.
62573                                                             (line   10)
62574* interrupt_handler function attribute, MicroBlaze: MicroBlaze Function Attributes.
62575                                                             (line   27)
62576* interrupt_handler function attribute, SH: SH Function Attributes.
62577                                                             (line   28)
62578* interrupt_handler function attribute, V850: V850 Function Attributes.
62579                                                             (line   10)
62580* interrupt_thread function attribute, fido: m68k Function Attributes.
62581                                                             (line   16)
62582* introduction:                          Top.                (line    6)
62583* invalid assembly code:                 Bug Criteria.       (line   12)
62584* invalid input:                         Bug Criteria.       (line   42)
62585* invoking g++:                          Invoking G++.       (line   22)
62586* io variable attribute, AVR:            AVR Variable Attributes.
62587                                                             (line   73)
62588* io variable attribute, MeP:            MeP Variable Attributes.
62589                                                             (line   36)
62590* io_low variable attribute, AVR:        AVR Variable Attributes.
62591                                                             (line   91)
62592* isalnum:                               Other Builtins.     (line    6)
62593* isalpha:                               Other Builtins.     (line    6)
62594* isascii:                               Other Builtins.     (line    6)
62595* isblank:                               Other Builtins.     (line    6)
62596* iscntrl:                               Other Builtins.     (line    6)
62597* isdigit:                               Other Builtins.     (line    6)
62598* isgraph:                               Other Builtins.     (line    6)
62599* islower:                               Other Builtins.     (line    6)
62600* ISO 9899:                              Standards.          (line   13)
62601* ISO C:                                 Standards.          (line   13)
62602* ISO C standard:                        Standards.          (line   13)
62603* ISO C11:                               Standards.          (line   13)
62604* ISO C17:                               Standards.          (line   13)
62605* ISO C1X:                               Standards.          (line   13)
62606* ISO C90:                               Standards.          (line   13)
62607* ISO C94:                               Standards.          (line   13)
62608* ISO C95:                               Standards.          (line   13)
62609* ISO C99:                               Standards.          (line   13)
62610* ISO C9X:                               Standards.          (line   13)
62611* ISO support:                           C Dialect Options.  (line   10)
62612* ISO/IEC 9899:                          Standards.          (line   13)
62613* isprint:                               Other Builtins.     (line    6)
62614* ispunct:                               Other Builtins.     (line    6)
62615* isr function attribute, ARM:           ARM Function Attributes.
62616                                                             (line   26)
62617* isspace:                               Other Builtins.     (line    6)
62618* isupper:                               Other Builtins.     (line    6)
62619* iswalnum:                              Other Builtins.     (line    6)
62620* iswalpha:                              Other Builtins.     (line    6)
62621* iswblank:                              Other Builtins.     (line    6)
62622* iswcntrl:                              Other Builtins.     (line    6)
62623* iswdigit:                              Other Builtins.     (line    6)
62624* iswgraph:                              Other Builtins.     (line    6)
62625* iswlower:                              Other Builtins.     (line    6)
62626* iswprint:                              Other Builtins.     (line    6)
62627* iswpunct:                              Other Builtins.     (line    6)
62628* iswspace:                              Other Builtins.     (line    6)
62629* iswupper:                              Other Builtins.     (line    6)
62630* iswxdigit:                             Other Builtins.     (line    6)
62631* isxdigit:                              Other Builtins.     (line    6)
62632* j0:                                    Other Builtins.     (line    6)
62633* j0f:                                   Other Builtins.     (line    6)
62634* j0l:                                   Other Builtins.     (line    6)
62635* j1:                                    Other Builtins.     (line    6)
62636* j1f:                                   Other Builtins.     (line    6)
62637* j1l:                                   Other Builtins.     (line    6)
62638* jli_always function attribute, ARC:    ARC Function Attributes.
62639                                                             (line   41)
62640* jli_fixed function attribute, ARC:     ARC Function Attributes.
62641                                                             (line   47)
62642* jn:                                    Other Builtins.     (line    6)
62643* jnf:                                   Other Builtins.     (line    6)
62644* jnl:                                   Other Builtins.     (line    6)
62645* k fixed-suffix:                        Fixed-Point.        (line    6)
62646* K fixed-suffix:                        Fixed-Point.        (line    6)
62647* keep_interrupts_masked function attribute, MIPS: MIPS Function Attributes.
62648                                                             (line   34)
62649* kernel attribute, Nvidia PTX:          Nvidia PTX Function Attributes.
62650                                                             (line    9)
62651* keywords, alternate:                   Alternate Keywords. (line    6)
62652* known causes of trouble:               Trouble.            (line    6)
62653* kspisusp function attribute, Blackfin: Blackfin Function Attributes.
62654                                                             (line   21)
62655* l1_data variable attribute, Blackfin:  Blackfin Variable Attributes.
62656                                                             (line   11)
62657* l1_data_A variable attribute, Blackfin: Blackfin Variable Attributes.
62658                                                             (line   11)
62659* l1_data_B variable attribute, Blackfin: Blackfin Variable Attributes.
62660                                                             (line   11)
62661* l1_text function attribute, Blackfin:  Blackfin Function Attributes.
62662                                                             (line   26)
62663* l2 function attribute, Blackfin:       Blackfin Function Attributes.
62664                                                             (line   32)
62665* l2 variable attribute, Blackfin:       Blackfin Variable Attributes.
62666                                                             (line   19)
62667* Label Attributes:                      Label Attributes.   (line    6)
62668* labeled elements in initializers:      Designated Inits.   (line    6)
62669* labels as values:                      Labels as Values.   (line    6)
62670* labs:                                  Other Builtins.     (line    6)
62671* LANG:                                  Environment Variables.
62672                                                             (line   21)
62673* LANG <1>:                              Environment Variables.
62674                                                             (line  106)
62675* language dialect options:              C Dialect Options.  (line    6)
62676* LC_ALL:                                Environment Variables.
62677                                                             (line   21)
62678* LC_CTYPE:                              Environment Variables.
62679                                                             (line   21)
62680* LC_MESSAGES:                           Environment Variables.
62681                                                             (line   21)
62682* ldexp:                                 Other Builtins.     (line    6)
62683* ldexpf:                                Other Builtins.     (line    6)
62684* ldexpl:                                Other Builtins.     (line    6)
62685* leaf function attribute:               Common Function Attributes.
62686                                                             (line  490)
62687* length-zero arrays:                    Zero Length.        (line    6)
62688* lgamma:                                Other Builtins.     (line    6)
62689* lgammaf:                               Other Builtins.     (line    6)
62690* lgammaf_r:                             Other Builtins.     (line    6)
62691* lgammal:                               Other Builtins.     (line    6)
62692* lgammal_r:                             Other Builtins.     (line    6)
62693* lgamma_r:                              Other Builtins.     (line    6)
62694* Libraries:                             Link Options.       (line   30)
62695* LIBRARY_PATH:                          Environment Variables.
62696                                                             (line   97)
62697* link options:                          Link Options.       (line    6)
62698* linker script:                         Link Options.       (line  256)
62699* lk fixed-suffix:                       Fixed-Point.        (line    6)
62700* LK fixed-suffix:                       Fixed-Point.        (line    6)
62701* LL integer suffix:                     Long Long.          (line    6)
62702* llabs:                                 Other Builtins.     (line    6)
62703* llk fixed-suffix:                      Fixed-Point.        (line    6)
62704* LLK fixed-suffix:                      Fixed-Point.        (line    6)
62705* llr fixed-suffix:                      Fixed-Point.        (line    6)
62706* LLR fixed-suffix:                      Fixed-Point.        (line    6)
62707* llrint:                                Other Builtins.     (line    6)
62708* llrintf:                               Other Builtins.     (line    6)
62709* llrintl:                               Other Builtins.     (line    6)
62710* llround:                               Other Builtins.     (line    6)
62711* llroundf:                              Other Builtins.     (line    6)
62712* llroundl:                              Other Builtins.     (line    6)
62713* LM32 options:                          LM32 Options.       (line    6)
62714* load address instruction:              Simple Constraints. (line  152)
62715* local labels:                          Local Labels.       (line    6)
62716* local variables in macros:             Typeof.             (line   46)
62717* local variables, specifying registers: Local Register Variables.
62718                                                             (line    6)
62719* locale:                                Environment Variables.
62720                                                             (line   21)
62721* locale definition:                     Environment Variables.
62722                                                             (line  106)
62723* locus GCC_COLORS capability:           Diagnostic Message Formatting Options.
62724                                                             (line   87)
62725* log:                                   Other Builtins.     (line    6)
62726* log10:                                 Other Builtins.     (line    6)
62727* log10f:                                Other Builtins.     (line    6)
62728* log10l:                                Other Builtins.     (line    6)
62729* log1p:                                 Other Builtins.     (line    6)
62730* log1pf:                                Other Builtins.     (line    6)
62731* log1pl:                                Other Builtins.     (line    6)
62732* log2:                                  Other Builtins.     (line    6)
62733* log2f:                                 Other Builtins.     (line    6)
62734* log2l:                                 Other Builtins.     (line    6)
62735* logb:                                  Other Builtins.     (line    6)
62736* logbf:                                 Other Builtins.     (line    6)
62737* logbl:                                 Other Builtins.     (line    6)
62738* logf:                                  Other Builtins.     (line    6)
62739* logl:                                  Other Builtins.     (line    6)
62740* long long data types:                  Long Long.          (line    6)
62741* longcall function attribute, Blackfin: Blackfin Function Attributes.
62742                                                             (line   38)
62743* longcall function attribute, PowerPC:  PowerPC Function Attributes.
62744                                                             (line   10)
62745* longjmp:                               Global Register Variables.
62746                                                             (line   74)
62747* longjmp incompatibilities:             Incompatibilities.  (line   39)
62748* longjmp warnings:                      Warning Options.    (line 1135)
62749* long_call function attribute, ARC:     ARC Function Attributes.
62750                                                             (line   24)
62751* long_call function attribute, ARM:     ARM Function Attributes.
62752                                                             (line   31)
62753* long_call function attribute, Epiphany: Epiphany Function Attributes.
62754                                                             (line   57)
62755* long_call function attribute, MIPS:    MIPS Function Attributes.
62756                                                             (line   63)
62757* lower function attribute, MSP430:      MSP430 Function Attributes.
62758                                                             (line   53)
62759* lower variable attribute, MSP430:      MSP430 Variable Attributes.
62760                                                             (line   24)
62761* lr fixed-suffix:                       Fixed-Point.        (line    6)
62762* LR fixed-suffix:                       Fixed-Point.        (line    6)
62763* lrint:                                 Other Builtins.     (line    6)
62764* lrintf:                                Other Builtins.     (line    6)
62765* lrintl:                                Other Builtins.     (line    6)
62766* lround:                                Other Builtins.     (line    6)
62767* lroundf:                               Other Builtins.     (line    6)
62768* lroundl:                               Other Builtins.     (line    6)
62769* m in constraint:                       Simple Constraints. (line   17)
62770* M32C options:                          M32C Options.       (line    6)
62771* M32R/D options:                        M32R/D Options.     (line    6)
62772* M680x0 options:                        M680x0 Options.     (line    6)
62773* machine specific constraints:          Machine Constraints.
62774                                                             (line    6)
62775* machine-dependent options:             Submodel Options.   (line    6)
62776* macro with variable arguments:         Variadic Macros.    (line    6)
62777* macros, inline alternative:            Inline.             (line    6)
62778* macros, local labels:                  Local Labels.       (line    6)
62779* macros, local variables in:            Typeof.             (line   46)
62780* macros, statements in expressions:     Statement Exprs.    (line    6)
62781* macros, types of arguments:            Typeof.             (line    6)
62782* make:                                  Preprocessor Options.
62783                                                             (line   77)
62784* malloc:                                Other Builtins.     (line    6)
62785* malloc function attribute:             Common Function Attributes.
62786                                                             (line  527)
62787* matching constraint:                   Simple Constraints. (line  137)
62788* may_alias type attribute:              Common Type Attributes.
62789                                                             (line  193)
62790* MCore options:                         MCore Options.      (line    6)
62791* medium_call function attribute, ARC:   ARC Function Attributes.
62792                                                             (line   24)
62793* member fns, automatically inline:      Inline.             (line   68)
62794* memchr:                                Other Builtins.     (line    6)
62795* memcmp:                                Other Builtins.     (line    6)
62796* memcpy:                                Other Builtins.     (line    6)
62797* memory references in constraints:      Simple Constraints. (line   17)
62798* mempcpy:                               Other Builtins.     (line    6)
62799* memset:                                Other Builtins.     (line    6)
62800* MeP options:                           MeP Options.        (line    6)
62801* Mercury:                               G++ and GCC.        (line   23)
62802* message formatting:                    Diagnostic Message Formatting Options.
62803                                                             (line    6)
62804* messages, warning:                     Warning Options.    (line    6)
62805* messages, warning and error:           Warnings and Errors.
62806                                                             (line    6)
62807* MicroBlaze Options:                    MicroBlaze Options. (line    6)
62808* micromips function attribute:          MIPS Function Attributes.
62809                                                             (line   91)
62810* middle-operands, omitted:              Conditionals.       (line    6)
62811* MIPS options:                          MIPS Options.       (line    6)
62812* mips16 function attribute, MIPS:       MIPS Function Attributes.
62813                                                             (line   75)
62814* misunderstandings in C++:              C++ Misunderstandings.
62815                                                             (line    6)
62816* mixed declarations and code:           Mixed Declarations. (line    6)
62817* mixing assembly language and C:        Using Assembly Language with C.
62818                                                             (line    6)
62819* mktemp, and constant strings:          Incompatibilities.  (line   13)
62820* MMIX Options:                          MMIX Options.       (line    6)
62821* MN10300 options:                       MN10300 Options.    (line    6)
62822* mode variable attribute:               Common Variable Attributes.
62823                                                             (line  181)
62824* model function attribute, M32R/D:      M32R/D Function Attributes.
62825                                                             (line   15)
62826* model variable attribute, IA-64:       IA-64 Variable Attributes.
62827                                                             (line    9)
62828* model-name variable attribute, M32R/D: M32R/D Variable Attributes.
62829                                                             (line    9)
62830* modf:                                  Other Builtins.     (line    6)
62831* modff:                                 Other Builtins.     (line    6)
62832* modfl:                                 Other Builtins.     (line    6)
62833* modifiers in constraints:              Modifiers.          (line    6)
62834* Moxie Options:                         Moxie Options.      (line    6)
62835* MSP430 Options:                        MSP430 Options.     (line    6)
62836* ms_abi function attribute, x86:        x86 Function Attributes.
62837                                                             (line   34)
62838* ms_hook_prologue function attribute, x86: x86 Function Attributes.
62839                                                             (line   59)
62840* ms_struct type attribute, PowerPC:     PowerPC Type Attributes.
62841                                                             (line    9)
62842* ms_struct type attribute, x86:         x86 Type Attributes.
62843                                                             (line   11)
62844* ms_struct variable attribute, PowerPC: PowerPC Variable Attributes.
62845                                                             (line    9)
62846* ms_struct variable attribute, x86:     x86 Variable Attributes.
62847                                                             (line   11)
62848* multiple alternative constraints:      Multi-Alternative.  (line    6)
62849* multiprecision arithmetic:             Long Long.          (line    6)
62850* n in constraint:                       Simple Constraints. (line   73)
62851* naked function attribute, ARM:         ARM Function Attributes.
62852                                                             (line   41)
62853* naked function attribute, AVR:         AVR Function Attributes.
62854                                                             (line   23)
62855* naked function attribute, MCORE:       MCORE Function Attributes.
62856                                                             (line    9)
62857* naked function attribute, MSP430:      MSP430 Function Attributes.
62858                                                             (line   30)
62859* naked function attribute, NDS32:       NDS32 Function Attributes.
62860                                                             (line   35)
62861* naked function attribute, RISC-V:      RISC-V Function Attributes.
62862                                                             (line    9)
62863* naked function attribute, RL78:        RL78 Function Attributes.
62864                                                             (line   20)
62865* naked function attribute, RX:          RX Function Attributes.
62866                                                             (line   39)
62867* naked function attribute, SPU:         SPU Function Attributes.
62868                                                             (line    9)
62869* naked function attribute, x86:         x86 Function Attributes.
62870                                                             (line   66)
62871* Named Address Spaces:                  Named Address Spaces.
62872                                                             (line    6)
62873* names used in assembler code:          Asm Labels.         (line    6)
62874* naming convention, implementation headers: C++ Interface.  (line   43)
62875* NDS32 Options:                         NDS32 Options.      (line    6)
62876* near function attribute, MeP:          MeP Function Attributes.
62877                                                             (line   20)
62878* near function attribute, MIPS:         MIPS Function Attributes.
62879                                                             (line   63)
62880* near type attribute, MeP:              MeP Type Attributes.
62881                                                             (line    6)
62882* near variable attribute, MeP:          MeP Variable Attributes.
62883                                                             (line   24)
62884* nearbyint:                             Other Builtins.     (line    6)
62885* nearbyintf:                            Other Builtins.     (line    6)
62886* nearbyintl:                            Other Builtins.     (line    6)
62887* nested function attribute, NDS32:      NDS32 Function Attributes.
62888                                                             (line   19)
62889* nested functions:                      Nested Functions.   (line    6)
62890* nested_ready function attribute, NDS32: NDS32 Function Attributes.
62891                                                             (line   23)
62892* nesting function attribute, Blackfin:  Blackfin Function Attributes.
62893                                                             (line   45)
62894* newlines (escaped):                    Escaped Newlines.   (line    6)
62895* nextafter:                             Other Builtins.     (line    6)
62896* nextafterf:                            Other Builtins.     (line    6)
62897* nextafterl:                            Other Builtins.     (line    6)
62898* nexttoward:                            Other Builtins.     (line    6)
62899* nexttowardf:                           Other Builtins.     (line    6)
62900* nexttowardl:                           Other Builtins.     (line    6)
62901* NFC:                                   Warning Options.    (line 2440)
62902* NFKC:                                  Warning Options.    (line 2440)
62903* Nios II options:                       Nios II Options.    (line    6)
62904* nmi function attribute, NDS32:         NDS32 Function Attributes.
62905                                                             (line   50)
62906* NMI handler functions on the Blackfin processor: Blackfin Function Attributes.
62907                                                             (line   50)
62908* nmi_handler function attribute, Blackfin: Blackfin Function Attributes.
62909                                                             (line   50)
62910* nocf_check function attribute:         x86 Function Attributes.
62911                                                             (line  559)
62912* noclone function attribute:            Common Function Attributes.
62913                                                             (line  603)
62914* nocommon variable attribute:           Common Variable Attributes.
62915                                                             (line  118)
62916* nocompression function attribute, MIPS: MIPS Function Attributes.
62917                                                             (line  108)
62918* noinit variable attribute, MSP430:     MSP430 Variable Attributes.
62919                                                             (line    7)
62920* noinline function attribute:           Common Function Attributes.
62921                                                             (line  609)
62922* noipa function attribute:              Common Function Attributes.
62923                                                             (line  620)
62924* nomicromips function attribute:        MIPS Function Attributes.
62925                                                             (line   91)
62926* nomips16 function attribute, MIPS:     MIPS Function Attributes.
62927                                                             (line   75)
62928* non-constant initializers:             Initializers.       (line    6)
62929* non-static inline function:            Inline.             (line   82)
62930* nonnull function attribute:            Common Function Attributes.
62931                                                             (line  633)
62932* nonstring variable attribute:          Common Variable Attributes.
62933                                                             (line  148)
62934* noplt function attribute:              Common Function Attributes.
62935                                                             (line  657)
62936* noreturn function attribute:           Common Function Attributes.
62937                                                             (line  681)
62938* nosave_low_regs function attribute, SH: SH Function Attributes.
62939                                                             (line   34)
62940* note GCC_COLORS capability:            Diagnostic Message Formatting Options.
62941                                                             (line   78)
62942* nothrow function attribute:            Common Function Attributes.
62943                                                             (line  712)
62944* notshared type attribute, ARM:         ARM Type Attributes.
62945                                                             (line    6)
62946* not_nested function attribute, NDS32:  NDS32 Function Attributes.
62947                                                             (line   21)
62948* no_caller_saved_registers function attribute, x86: x86 Function Attributes.
62949                                                             (line  113)
62950* no_gccisr function attribute, AVR:     AVR Function Attributes.
62951                                                             (line   33)
62952* no_icf function attribute:             Common Function Attributes.
62953                                                             (line  539)
62954* no_instrument_function function attribute: Common Function Attributes.
62955                                                             (line  543)
62956* no_profile_instrument_function function attribute: Common Function Attributes.
62957                                                             (line  548)
62958* no_reorder function attribute:         Common Function Attributes.
62959                                                             (line  553)
62960* no_sanitize function attribute:        Common Function Attributes.
62961                                                             (line  561)
62962* no_sanitize_address function attribute: Common Function Attributes.
62963                                                             (line  573)
62964* no_sanitize_thread function attribute: Common Function Attributes.
62965                                                             (line  581)
62966* no_sanitize_undefined function attribute: Common Function Attributes.
62967                                                             (line  586)
62968* no_split_stack function attribute:     Common Function Attributes.
62969                                                             (line  592)
62970* no_stack_limit function attribute:     Common Function Attributes.
62971                                                             (line  598)
62972* Nvidia PTX options:                    Nvidia PTX Options. (line    6)
62973* nvptx options:                         Nvidia PTX Options. (line    6)
62974* o in constraint:                       Simple Constraints. (line   23)
62975* OBJC_INCLUDE_PATH:                     Environment Variables.
62976                                                             (line  130)
62977* Objective-C:                           G++ and GCC.        (line    6)
62978* Objective-C <1>:                       Standards.          (line  184)
62979* Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options.
62980                                                             (line    6)
62981* Objective-C++:                         G++ and GCC.        (line    6)
62982* Objective-C++ <1>:                     Standards.          (line  184)
62983* offsettable address:                   Simple Constraints. (line   23)
62984* old-style function definitions:        Function Prototypes.
62985                                                             (line    6)
62986* omit-leaf-frame-pointer function attribute, AArch64: AArch64 Function Attributes.
62987                                                             (line   37)
62988* omitted middle-operands:               Conditionals.       (line    6)
62989* open coding:                           Inline.             (line    6)
62990* OpenACC accelerator programming:       C Dialect Options.  (line  313)
62991* OpenACC accelerator programming <1>:   C Dialect Options.  (line  322)
62992* OpenMP parallel:                       C Dialect Options.  (line  328)
62993* OpenMP SIMD:                           C Dialect Options.  (line  337)
62994* operand constraints, asm:              Constraints.        (line    6)
62995* optimize function attribute:           Common Function Attributes.
62996                                                             (line  719)
62997* optimize options:                      Optimize Options.   (line    6)
62998* options to control diagnostics formatting: Diagnostic Message Formatting Options.
62999                                                             (line    6)
63000* options to control warnings:           Warning Options.    (line    6)
63001* options, C++:                          C++ Dialect Options.
63002                                                             (line    6)
63003* options, code generation:              Code Gen Options.   (line    6)
63004* options, debugging:                    Debugging Options.  (line    6)
63005* options, dialect:                      C Dialect Options.  (line    6)
63006* options, directory search:             Directory Options.  (line    6)
63007* options, GCC command:                  Invoking GCC.       (line    6)
63008* options, grouping:                     Invoking GCC.       (line   31)
63009* options, linking:                      Link Options.       (line    6)
63010* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
63011                                                             (line    6)
63012* options, optimization:                 Optimize Options.   (line    6)
63013* options, order:                        Invoking GCC.       (line   35)
63014* options, preprocessor:                 Preprocessor Options.
63015                                                             (line    6)
63016* options, profiling:                    Instrumentation Options.
63017                                                             (line    6)
63018* options, program instrumentation:      Instrumentation Options.
63019                                                             (line    6)
63020* options, run-time error checking:      Instrumentation Options.
63021                                                             (line    6)
63022* order of evaluation, side effects:     Non-bugs.           (line  196)
63023* order of options:                      Invoking GCC.       (line   35)
63024* OS_main function attribute, AVR:       AVR Function Attributes.
63025                                                             (line   56)
63026* OS_task function attribute, AVR:       AVR Function Attributes.
63027                                                             (line   56)
63028* other register constraints:            Simple Constraints. (line  161)
63029* output file option:                    Overall Options.    (line  186)
63030* overloaded virtual function, warning:  C++ Dialect Options.
63031                                                             (line  756)
63032* p in constraint:                       Simple Constraints. (line  152)
63033* packed type attribute:                 Common Type Attributes.
63034                                                             (line  229)
63035* packed variable attribute:             Common Variable Attributes.
63036                                                             (line  193)
63037* parameter forward declaration:         Variable Length.    (line   66)
63038* partial_save function attribute, NDS32: NDS32 Function Attributes.
63039                                                             (line   31)
63040* Pascal:                                G++ and GCC.        (line   23)
63041* patchable_function_entry function attribute: Common Function Attributes.
63042                                                             (line  734)
63043* pcs function attribute, ARM:           ARM Function Attributes.
63044                                                             (line   51)
63045* PDP-11 Options:                        PDP-11 Options.     (line    6)
63046* persistent variable attribute, MSP430: MSP430 Variable Attributes.
63047                                                             (line   12)
63048* PIC:                                   Code Gen Options.   (line  359)
63049* picoChip options:                      picoChip Options.   (line    6)
63050* pmf:                                   Bound member functions.
63051                                                             (line    6)
63052* pointer arguments:                     Common Function Attributes.
63053                                                             (line  150)
63054* Pointer Bounds Checker attributes:     Common Function Attributes.
63055                                                             (line  118)
63056* Pointer Bounds Checker attributes <1>: Common Type Attributes.
63057                                                             (line  127)
63058* Pointer Bounds Checker builtins:       Pointer Bounds Checker builtins.
63059                                                             (line    6)
63060* Pointer Bounds Checker options:        Instrumentation Options.
63061                                                             (line  459)
63062* pointer to member function:            Bound member functions.
63063                                                             (line    6)
63064* pointers to arrays:                    Pointers to Arrays. (line    6)
63065* portions of temporary objects, pointers to: Temporaries.   (line    6)
63066* pow:                                   Other Builtins.     (line    6)
63067* pow10:                                 Other Builtins.     (line    6)
63068* pow10f:                                Other Builtins.     (line    6)
63069* pow10l:                                Other Builtins.     (line    6)
63070* PowerPC options:                       PowerPC Options.    (line    6)
63071* PowerPC SPE options:                   PowerPC SPE Options.
63072                                                             (line    6)
63073* powf:                                  Other Builtins.     (line    6)
63074* powl:                                  Other Builtins.     (line    6)
63075* pragma GCC ivdep:                      Loop-Specific Pragmas.
63076                                                             (line    7)
63077* pragma GCC optimize:                   Function Specific Option Pragmas.
63078                                                             (line   20)
63079* pragma GCC pop_options:                Function Specific Option Pragmas.
63080                                                             (line   31)
63081* pragma GCC push_options:               Function Specific Option Pragmas.
63082                                                             (line   31)
63083* pragma GCC reset_options:              Function Specific Option Pragmas.
63084                                                             (line   39)
63085* pragma GCC target:                     Function Specific Option Pragmas.
63086                                                             (line    7)
63087* pragma GCC unroll N:                   Loop-Specific Pragmas.
63088                                                             (line   37)
63089* pragma, address:                       M32C Pragmas.       (line   15)
63090* pragma, align:                         Solaris Pragmas.    (line   11)
63091* pragma, call:                          MeP Pragmas.        (line   48)
63092* pragma, coprocessor available:         MeP Pragmas.        (line   13)
63093* pragma, coprocessor call_saved:        MeP Pragmas.        (line   20)
63094* pragma, coprocessor subclass:          MeP Pragmas.        (line   28)
63095* pragma, custom io_volatile:            MeP Pragmas.        (line    7)
63096* pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
63097* pragma, diagnostic <1>:                Diagnostic Pragmas. (line   57)
63098* pragma, disinterrupt:                  MeP Pragmas.        (line   38)
63099* pragma, fini:                          Solaris Pragmas.    (line   20)
63100* pragma, init:                          Solaris Pragmas.    (line   26)
63101* pragma, longcall:                      RS/6000 and PowerPC Pragmas.
63102                                                             (line   14)
63103* pragma, long_calls:                    ARM Pragmas.        (line   11)
63104* pragma, long_calls_off:                ARM Pragmas.        (line   17)
63105* pragma, mark:                          Darwin Pragmas.     (line   11)
63106* pragma, memregs:                       M32C Pragmas.       (line    7)
63107* pragma, no_long_calls:                 ARM Pragmas.        (line   14)
63108* pragma, options align:                 Darwin Pragmas.     (line   14)
63109* pragma, pop_macro:                     Push/Pop Macro Pragmas.
63110                                                             (line   15)
63111* pragma, push_macro:                    Push/Pop Macro Pragmas.
63112                                                             (line   11)
63113* pragma, redefine_extname:              Symbol-Renaming Pragmas.
63114                                                             (line   13)
63115* pragma, segment:                       Darwin Pragmas.     (line   21)
63116* pragma, unused:                        Darwin Pragmas.     (line   24)
63117* pragma, visibility:                    Visibility Pragmas. (line    8)
63118* pragma, weak:                          Weak Pragmas.       (line   10)
63119* pragmas:                               Pragmas.            (line    6)
63120* pragmas in C++, effect on inlining:    C++ Interface.      (line   57)
63121* pragmas, interface and implementation: C++ Interface.      (line    6)
63122* pragmas, warning of unknown:           Warning Options.    (line 1150)
63123* precompiled headers:                   Precompiled Headers.
63124                                                             (line    6)
63125* preprocessing numbers:                 Incompatibilities.  (line  173)
63126* preprocessing tokens:                  Incompatibilities.  (line  173)
63127* preprocessor options:                  Preprocessor Options.
63128                                                             (line    6)
63129* printf:                                Other Builtins.     (line    6)
63130* printf_unlocked:                       Other Builtins.     (line    6)
63131* prof:                                  Instrumentation Options.
63132                                                             (line   18)
63133* profiling options:                     Instrumentation Options.
63134                                                             (line    6)
63135* progmem variable attribute, AVR:       AVR Variable Attributes.
63136                                                             (line    7)
63137* program instrumentation options:       Instrumentation Options.
63138                                                             (line    6)
63139* promotion of formal parameters:        Function Prototypes.
63140                                                             (line    6)
63141* pure function attribute:               Common Function Attributes.
63142                                                             (line  752)
63143* push address instruction:              Simple Constraints. (line  152)
63144* putchar:                               Other Builtins.     (line    6)
63145* puts:                                  Other Builtins.     (line    6)
63146* q floating point suffix:               Floating Types.     (line    6)
63147* Q floating point suffix:               Floating Types.     (line    6)
63148* qsort, and global register variables:  Global Register Variables.
63149                                                             (line   60)
63150* quote GCC_COLORS capability:           Diagnostic Message Formatting Options.
63151                                                             (line   91)
63152* r fixed-suffix:                        Fixed-Point.        (line    6)
63153* R fixed-suffix:                        Fixed-Point.        (line    6)
63154* r in constraint:                       Simple Constraints. (line   64)
63155* RAMPD:                                 AVR Options.        (line  412)
63156* RAMPX:                                 AVR Options.        (line  412)
63157* RAMPY:                                 AVR Options.        (line  412)
63158* RAMPZ:                                 AVR Options.        (line  412)
63159* range1 GCC_COLORS capability:          Diagnostic Message Formatting Options.
63160                                                             (line   81)
63161* range2 GCC_COLORS capability:          Diagnostic Message Formatting Options.
63162                                                             (line   84)
63163* ranges in case statements:             Case Ranges.        (line    6)
63164* read-only strings:                     Incompatibilities.  (line    9)
63165* reentrant function attribute, MSP430:  MSP430 Function Attributes.
63166                                                             (line   40)
63167* register variable after longjmp:       Global Register Variables.
63168                                                             (line   74)
63169* registers for local variables:         Local Register Variables.
63170                                                             (line    6)
63171* registers in constraints:              Simple Constraints. (line   64)
63172* registers, global allocation:          Global Register Variables.
63173                                                             (line    6)
63174* registers, global variables in:        Global Register Variables.
63175                                                             (line    6)
63176* regparm function attribute, x86:       x86 Function Attributes.
63177                                                             (line   76)
63178* relocation truncated to fit (ColdFire): M680x0 Options.    (line  325)
63179* relocation truncated to fit (MIPS):    MIPS Options.       (line  236)
63180* remainder:                             Other Builtins.     (line    6)
63181* remainderf:                            Other Builtins.     (line    6)
63182* remainderl:                            Other Builtins.     (line    6)
63183* remquo:                                Other Builtins.     (line    6)
63184* remquof:                               Other Builtins.     (line    6)
63185* remquol:                               Other Builtins.     (line    6)
63186* renesas function attribute, SH:        SH Function Attributes.
63187                                                             (line   40)
63188* reordering, warning:                   C++ Dialect Options.
63189                                                             (line  681)
63190* reporting bugs:                        Bugs.               (line    6)
63191* resbank function attribute, SH:        SH Function Attributes.
63192                                                             (line   44)
63193* reset function attribute, NDS32:       NDS32 Function Attributes.
63194                                                             (line   45)
63195* reset handler functions:               NDS32 Function Attributes.
63196                                                             (line   45)
63197* rest argument (in macro):              Variadic Macros.    (line    6)
63198* restricted pointers:                   Restricted Pointers.
63199                                                             (line    6)
63200* restricted references:                 Restricted Pointers.
63201                                                             (line    6)
63202* restricted this pointer:               Restricted Pointers.
63203                                                             (line    6)
63204* returns_nonnull function attribute:    Common Function Attributes.
63205                                                             (line  779)
63206* returns_twice function attribute:      Common Function Attributes.
63207                                                             (line  789)
63208* rindex:                                Other Builtins.     (line    6)
63209* rint:                                  Other Builtins.     (line    6)
63210* rintf:                                 Other Builtins.     (line    6)
63211* rintl:                                 Other Builtins.     (line    6)
63212* RISC-V Options:                        RISC-V Options.     (line    6)
63213* RL78 Options:                          RL78 Options.       (line    6)
63214* round:                                 Other Builtins.     (line    6)
63215* roundf:                                Other Builtins.     (line    6)
63216* roundl:                                Other Builtins.     (line    6)
63217* RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
63218                                                             (line    6)
63219* RTTI:                                  Vague Linkage.      (line   42)
63220* run-time error checking options:       Instrumentation Options.
63221                                                             (line    6)
63222* run-time options:                      Code Gen Options.   (line    6)
63223* RX Options:                            RX Options.         (line    6)
63224* s in constraint:                       Simple Constraints. (line  100)
63225* S/390 and zSeries Options:             S/390 and zSeries Options.
63226                                                             (line    6)
63227* saddr variable attribute, RL78:        RL78 Variable Attributes.
63228                                                             (line    6)
63229* save all registers on the Blackfin:    Blackfin Function Attributes.
63230                                                             (line   56)
63231* save all registers on the H8/300, H8/300H, and H8S: H8/300 Function Attributes.
63232                                                             (line   23)
63233* saveall function attribute, Blackfin:  Blackfin Function Attributes.
63234                                                             (line   56)
63235* saveall function attribute, H8/300:    H8/300 Function Attributes.
63236                                                             (line   23)
63237* save_all function attribute, NDS32:    NDS32 Function Attributes.
63238                                                             (line   28)
63239* save_volatiles function attribute, MicroBlaze: MicroBlaze Function Attributes.
63240                                                             (line    9)
63241* scalar_storage_order type attribute:   Common Type Attributes.
63242                                                             (line  264)
63243* scalb:                                 Other Builtins.     (line    6)
63244* scalbf:                                Other Builtins.     (line    6)
63245* scalbl:                                Other Builtins.     (line    6)
63246* scalbln:                               Other Builtins.     (line    6)
63247* scalblnf:                              Other Builtins.     (line    6)
63248* scalblnf <1>:                          Other Builtins.     (line    6)
63249* scalbn:                                Other Builtins.     (line    6)
63250* scalbnf:                               Other Builtins.     (line    6)
63251* scanf, and constant strings:           Incompatibilities.  (line   17)
63252* scanfnl:                               Other Builtins.     (line    6)
63253* scope of a variable length array:      Variable Length.    (line   22)
63254* scope of declaration:                  Disappointments.    (line   21)
63255* scope of external declarations:        Incompatibilities.  (line   80)
63256* Score Options:                         Score Options.      (line    6)
63257* sda variable attribute, V850:          V850 Variable Attributes.
63258                                                             (line    9)
63259* search path:                           Directory Options.  (line    6)
63260* section function attribute:            Common Function Attributes.
63261                                                             (line  798)
63262* section variable attribute:            Common Variable Attributes.
63263                                                             (line  214)
63264* secure_call function attribute, ARC:   ARC Function Attributes.
63265                                                             (line   51)
63266* selectany variable attribute:          Microsoft Windows Variable Attributes.
63267                                                             (line   16)
63268* sentinel function attribute:           Common Function Attributes.
63269                                                             (line  814)
63270* setjmp:                                Global Register Variables.
63271                                                             (line   74)
63272* setjmp incompatibilities:              Incompatibilities.  (line   39)
63273* shared attribute, Nvidia PTX:          Nvidia PTX Variable Attributes.
63274                                                             (line    9)
63275* shared strings:                        Incompatibilities.  (line    9)
63276* shared variable attribute:             Microsoft Windows Variable Attributes.
63277                                                             (line   37)
63278* shortcall function attribute, Blackfin: Blackfin Function Attributes.
63279                                                             (line   38)
63280* shortcall function attribute, PowerPC: PowerPC Function Attributes.
63281                                                             (line   10)
63282* short_call function attribute, ARC:    ARC Function Attributes.
63283                                                             (line   24)
63284* short_call function attribute, ARM:    ARM Function Attributes.
63285                                                             (line   31)
63286* short_call function attribute, Epiphany: Epiphany Function Attributes.
63287                                                             (line   57)
63288* short_call function attribute, MIPS:   MIPS Function Attributes.
63289                                                             (line   63)
63290* side effect in ?::                     Conditionals.       (line   20)
63291* side effects, macro argument:          Statement Exprs.    (line   35)
63292* side effects, order of evaluation:     Non-bugs.           (line  196)
63293* sign-return-address function attribute, AArch64: AArch64 Function Attributes.
63294                                                             (line   65)
63295* signal function attribute, AVR:        AVR Function Attributes.
63296                                                             (line   80)
63297* signbit:                               Other Builtins.     (line    6)
63298* signbitd128:                           Other Builtins.     (line    6)
63299* signbitd32:                            Other Builtins.     (line    6)
63300* signbitd64:                            Other Builtins.     (line    6)
63301* signbitf:                              Other Builtins.     (line    6)
63302* signbitl:                              Other Builtins.     (line    6)
63303* signed and unsigned values, comparison warning: Warning Options.
63304                                                             (line 2212)
63305* significand:                           Other Builtins.     (line    6)
63306* significandf:                          Other Builtins.     (line    6)
63307* significandl:                          Other Builtins.     (line    6)
63308* SIMD:                                  C Dialect Options.  (line  337)
63309* simd function attribute:               Common Function Attributes.
63310                                                             (line  840)
63311* simple constraints:                    Simple Constraints. (line    6)
63312* sin:                                   Other Builtins.     (line    6)
63313* sincos:                                Other Builtins.     (line    6)
63314* sincosf:                               Other Builtins.     (line    6)
63315* sincosl:                               Other Builtins.     (line    6)
63316* sinf:                                  Other Builtins.     (line    6)
63317* sinh:                                  Other Builtins.     (line    6)
63318* sinhf:                                 Other Builtins.     (line    6)
63319* sinhl:                                 Other Builtins.     (line    6)
63320* sinl:                                  Other Builtins.     (line    6)
63321* sizeof:                                Typeof.             (line    6)
63322* smaller data references:               M32R/D Options.     (line   57)
63323* smaller data references <1>:           Nios II Options.    (line    9)
63324* smaller data references (PowerPC):     PowerPC SPE Options.
63325                                                             (line  524)
63326* smaller data references (PowerPC) <1>: RS/6000 and PowerPC Options.
63327                                                             (line  774)
63328* snprintf:                              Other Builtins.     (line    6)
63329* Solaris 2 options:                     Solaris 2 Options.  (line    6)
63330* SOURCE_DATE_EPOCH:                     Environment Variables.
63331                                                             (line  177)
63332* SPARC options:                         SPARC Options.      (line    6)
63333* Spec Files:                            Spec Files.         (line    6)
63334* specified registers:                   Explicit Register Variables.
63335                                                             (line    6)
63336* specifying compiler version and target machine: Invoking GCC.
63337                                                             (line   24)
63338* specifying hardware config:            Submodel Options.   (line    6)
63339* specifying machine version:            Invoking GCC.       (line   24)
63340* specifying registers for local variables: Local Register Variables.
63341                                                             (line    6)
63342* speed of compilation:                  Precompiled Headers.
63343                                                             (line    6)
63344* sprintf:                               Other Builtins.     (line    6)
63345* SPU options:                           SPU Options.        (line    6)
63346* spu_vector type attribute, SPU:        SPU Type Attributes.
63347                                                             (line    6)
63348* spu_vector variable attribute, SPU:    SPU Variable Attributes.
63349                                                             (line    6)
63350* sp_switch function attribute, SH:      SH Function Attributes.
63351                                                             (line   58)
63352* sqrt:                                  Other Builtins.     (line    6)
63353* sqrtf:                                 Other Builtins.     (line    6)
63354* sqrtl:                                 Other Builtins.     (line    6)
63355* sscanf:                                Other Builtins.     (line    6)
63356* sscanf, and constant strings:          Incompatibilities.  (line   17)
63357* sseregparm function attribute, x86:    x86 Function Attributes.
63358                                                             (line   93)
63359* stack_protect function attribute:      Common Function Attributes.
63360                                                             (line  859)
63361* Statement Attributes:                  Statement Attributes.
63362                                                             (line    6)
63363* statements inside expressions:         Statement Exprs.    (line    6)
63364* static data in C++, declaring and defining: Static Definitions.
63365                                                             (line    6)
63366* stdcall function attribute, x86-32:    x86 Function Attributes.
63367                                                             (line  108)
63368* stpcpy:                                Other Builtins.     (line    6)
63369* stpncpy:                               Other Builtins.     (line    6)
63370* strcasecmp:                            Other Builtins.     (line    6)
63371* strcat:                                Other Builtins.     (line    6)
63372* strchr:                                Other Builtins.     (line    6)
63373* strcmp:                                Other Builtins.     (line    6)
63374* strcpy:                                Other Builtins.     (line    6)
63375* strcspn:                               Other Builtins.     (line    6)
63376* strdup:                                Other Builtins.     (line    6)
63377* strfmon:                               Other Builtins.     (line    6)
63378* strftime:                              Other Builtins.     (line    6)
63379* strict-align function attribute, AArch64: AArch64 Function Attributes.
63380                                                             (line   32)
63381* string constants:                      Incompatibilities.  (line    9)
63382* strlen:                                Other Builtins.     (line    6)
63383* strncasecmp:                           Other Builtins.     (line    6)
63384* strncat:                               Other Builtins.     (line    6)
63385* strncmp:                               Other Builtins.     (line    6)
63386* strncpy:                               Other Builtins.     (line    6)
63387* strndup:                               Other Builtins.     (line    6)
63388* strpbrk:                               Other Builtins.     (line    6)
63389* strrchr:                               Other Builtins.     (line    6)
63390* strspn:                                Other Builtins.     (line    6)
63391* strstr:                                Other Builtins.     (line    6)
63392* struct:                                Unnamed Fields.     (line    6)
63393* struct __htm_tdb:                      S/390 System z Built-in Functions.
63394                                                             (line   49)
63395* structures:                            Incompatibilities.  (line  146)
63396* structures, constructor expression:    Compound Literals.  (line    6)
63397* submodel options:                      Submodel Options.   (line    6)
63398* subscripting:                          Subscripting.       (line    6)
63399* subscripting and function values:      Subscripting.       (line    6)
63400* suffixes for C++ source:               Invoking G++.       (line    6)
63401* SUNPRO_DEPENDENCIES:                   Environment Variables.
63402                                                             (line  171)
63403* suppressing warnings:                  Warning Options.    (line    6)
63404* surprises in C++:                      C++ Misunderstandings.
63405                                                             (line    6)
63406* syntax checking:                       Warning Options.    (line   13)
63407* syscall_linkage function attribute, IA-64: IA-64 Function Attributes.
63408                                                             (line    9)
63409* system headers, warnings from:         Warning Options.    (line 1631)
63410* sysv_abi function attribute, x86:      x86 Function Attributes.
63411                                                             (line   34)
63412* tan:                                   Other Builtins.     (line    6)
63413* tanf:                                  Other Builtins.     (line    6)
63414* tanh:                                  Other Builtins.     (line    6)
63415* tanhf:                                 Other Builtins.     (line    6)
63416* tanhl:                                 Other Builtins.     (line    6)
63417* tanl:                                  Other Builtins.     (line    6)
63418* target function attribute:             Common Function Attributes.
63419                                                             (line  864)
63420* target function attribute <1>:         ARM Function Attributes.
63421                                                             (line   70)
63422* target function attribute <2>:         Nios II Function Attributes.
63423                                                             (line    9)
63424* target function attribute <3>:         PowerPC Function Attributes.
63425                                                             (line   21)
63426* target function attribute <4>:         S/390 Function Attributes.
63427                                                             (line   22)
63428* target function attribute <5>:         x86 Function Attributes.
63429                                                             (line  180)
63430* target machine, specifying:            Invoking GCC.       (line   24)
63431* target("3dnow") function attribute, x86: x86 Function Attributes.
63432                                                             (line  186)
63433* target("3dnowa") function attribute, x86: x86 Function Attributes.
63434                                                             (line  190)
63435* target("abm") function attribute, x86: x86 Function Attributes.
63436                                                             (line  195)
63437* target("adx") function attribute, x86: x86 Function Attributes.
63438                                                             (line  200)
63439* target("aes") function attribute, x86: x86 Function Attributes.
63440                                                             (line  204)
63441* target("align-stringops") function attribute, x86: x86 Function Attributes.
63442                                                             (line  517)
63443* target("altivec") function attribute, PowerPC: PowerPC Function Attributes.
63444                                                             (line   28)
63445* target("arch=ARCH") function attribute, x86: x86 Function Attributes.
63446                                                             (line  526)
63447* target("arm") function attribute, ARM: ARM Function Attributes.
63448                                                             (line   80)
63449* target("avoid-indexed-addresses") function attribute, PowerPC: PowerPC Function Attributes.
63450                                                             (line  149)
63451* target("avx") function attribute, x86: x86 Function Attributes.
63452                                                             (line  208)
63453* target("avx2") function attribute, x86: x86 Function Attributes.
63454                                                             (line  212)
63455* target("avx5124fmaps") function attribute, x86: x86 Function Attributes.
63456                                                             (line  216)
63457* target("avx5124vnniw") function attribute, x86: x86 Function Attributes.
63458                                                             (line  221)
63459* target("avx512bitalg") function attribute, x86: x86 Function Attributes.
63460                                                             (line  226)
63461* target("avx512bw") function attribute, x86: x86 Function Attributes.
63462                                                             (line  231)
63463* target("avx512cd") function attribute, x86: x86 Function Attributes.
63464                                                             (line  235)
63465* target("avx512dq") function attribute, x86: x86 Function Attributes.
63466                                                             (line  239)
63467* target("avx512er") function attribute, x86: x86 Function Attributes.
63468                                                             (line  243)
63469* target("avx512f") function attribute, x86: x86 Function Attributes.
63470                                                             (line  247)
63471* target("avx512ifma") function attribute, x86: x86 Function Attributes.
63472                                                             (line  251)
63473* target("avx512pf") function attribute, x86: x86 Function Attributes.
63474                                                             (line  255)
63475* target("avx512vbmi") function attribute, x86: x86 Function Attributes.
63476                                                             (line  259)
63477* target("avx512vbmi2") function attribute, x86: x86 Function Attributes.
63478                                                             (line  263)
63479* target("avx512vl") function attribute, x86: x86 Function Attributes.
63480                                                             (line  267)
63481* target("avx512vnni") function attribute, x86: x86 Function Attributes.
63482                                                             (line  271)
63483* target("avx512vpopcntdq") function attribute, x86: x86 Function Attributes.
63484                                                             (line  275)
63485* target("bmi") function attribute, x86: x86 Function Attributes.
63486                                                             (line  280)
63487* target("bmi2") function attribute, x86: x86 Function Attributes.
63488                                                             (line  284)
63489* target("cld") function attribute, x86: x86 Function Attributes.
63490                                                             (line  493)
63491* target("clflushopt") function attribute, x86: x86 Function Attributes.
63492                                                             (line  288)
63493* target("clwb") function attribute, x86: x86 Function Attributes.
63494                                                             (line  292)
63495* target("clzero") function attribute, x86: x86 Function Attributes.
63496                                                             (line  296)
63497* target("cmpb") function attribute, PowerPC: PowerPC Function Attributes.
63498                                                             (line   34)
63499* target("cpu=CPU") function attribute, PowerPC: PowerPC Function Attributes.
63500                                                             (line  164)
63501* target("crc32") function attribute, x86: x86 Function Attributes.
63502                                                             (line  300)
63503* target("custom-fpu-cfg=NAME") function attribute, Nios II: Nios II Function Attributes.
63504                                                             (line   25)
63505* target("custom-INSN=N") function attribute, Nios II: Nios II Function Attributes.
63506                                                             (line   16)
63507* target("cx16") function attribute, x86: x86 Function Attributes.
63508                                                             (line  304)
63509* target("default") function attribute, x86: x86 Function Attributes.
63510                                                             (line  307)
63511* target("dlmzb") function attribute, PowerPC: PowerPC Function Attributes.
63512                                                             (line   40)
63513* target("f16c") function attribute, x86: x86 Function Attributes.
63514                                                             (line  312)
63515* target("fancy-math-387") function attribute, x86: x86 Function Attributes.
63516                                                             (line  497)
63517* target("fma") function attribute, x86: x86 Function Attributes.
63518                                                             (line  316)
63519* target("fma4") function attribute, x86: x86 Function Attributes.
63520                                                             (line  320)
63521* target("fpmath=FPMATH") function attribute, x86: x86 Function Attributes.
63522                                                             (line  534)
63523* target("fprnd") function attribute, PowerPC: PowerPC Function Attributes.
63524                                                             (line   47)
63525* target("fpu=") function attribute, ARM: ARM Function Attributes.
63526                                                             (line   86)
63527* target("friz") function attribute, PowerPC: PowerPC Function Attributes.
63528                                                             (line  140)
63529* target("fsgsbase") function attribute, x86: x86 Function Attributes.
63530                                                             (line  324)
63531* target("fxsr") function attribute, x86: x86 Function Attributes.
63532                                                             (line  328)
63533* target("gfni") function attribute, x86: x86 Function Attributes.
63534                                                             (line  332)
63535* target("hard-dfp") function attribute, PowerPC: PowerPC Function Attributes.
63536                                                             (line   53)
63537* target("hle") function attribute, x86: x86 Function Attributes.
63538                                                             (line  336)
63539* target("ieee-fp") function attribute, x86: x86 Function Attributes.
63540                                                             (line  502)
63541* target("inline-all-stringops") function attribute, x86: x86 Function Attributes.
63542                                                             (line  507)
63543* target("inline-stringops-dynamically") function attribute, x86: x86 Function Attributes.
63544                                                             (line  511)
63545* target("isel") function attribute, PowerPC: PowerPC Function Attributes.
63546                                                             (line   59)
63547* target("longcall") function attribute, PowerPC: PowerPC Function Attributes.
63548                                                             (line  159)
63549* target("lwp") function attribute, x86: x86 Function Attributes.
63550                                                             (line  340)
63551* target("lzcnt") function attribute, x86: x86 Function Attributes.
63552                                                             (line  344)
63553* target("mfcrf") function attribute, PowerPC: PowerPC Function Attributes.
63554                                                             (line   63)
63555* target("mfpgpr") function attribute, PowerPC: PowerPC Function Attributes.
63556                                                             (line   70)
63557* target("mmx") function attribute, x86: x86 Function Attributes.
63558                                                             (line  348)
63559* target("movbe") function attribute, x86: x86 Function Attributes.
63560                                                             (line  352)
63561* target("movdir64b") function attribute, x86: x86 Function Attributes.
63562                                                             (line  356)
63563* target("movdiri") function attribute, x86: x86 Function Attributes.
63564                                                             (line  360)
63565* target("mulhw") function attribute, PowerPC: PowerPC Function Attributes.
63566                                                             (line   77)
63567* target("multiple") function attribute, PowerPC: PowerPC Function Attributes.
63568                                                             (line   84)
63569* target("mwaitx") function attribute, x86: x86 Function Attributes.
63570                                                             (line  364)
63571* target("no-custom-INSN") function attribute, Nios II: Nios II Function Attributes.
63572                                                             (line   16)
63573* target("paired") function attribute, PowerPC: PowerPC Function Attributes.
63574                                                             (line  154)
63575* target("pclmul") function attribute, x86: x86 Function Attributes.
63576                                                             (line  368)
63577* target("pconfig") function attribute, x86: x86 Function Attributes.
63578                                                             (line  372)
63579* target("pku") function attribute, x86: x86 Function Attributes.
63580                                                             (line  376)
63581* target("popcnt") function attribute, x86: x86 Function Attributes.
63582                                                             (line  380)
63583* target("popcntb") function attribute, PowerPC: PowerPC Function Attributes.
63584                                                             (line   95)
63585* target("popcntd") function attribute, PowerPC: PowerPC Function Attributes.
63586                                                             (line  102)
63587* target("powerpc-gfxopt") function attribute, PowerPC: PowerPC Function Attributes.
63588                                                             (line  108)
63589* target("powerpc-gpopt") function attribute, PowerPC: PowerPC Function Attributes.
63590                                                             (line  114)
63591* target("prefetchwt1") function attribute, x86: x86 Function Attributes.
63592                                                             (line  384)
63593* target("prfchw") function attribute, x86: x86 Function Attributes.
63594                                                             (line  388)
63595* target("rdpid") function attribute, x86: x86 Function Attributes.
63596                                                             (line  392)
63597* target("rdrnd") function attribute, x86: x86 Function Attributes.
63598                                                             (line  396)
63599* target("rdseed") function attribute, x86: x86 Function Attributes.
63600                                                             (line  400)
63601* target("recip") function attribute, x86: x86 Function Attributes.
63602                                                             (line  521)
63603* target("recip-precision") function attribute, PowerPC: PowerPC Function Attributes.
63604                                                             (line  120)
63605* target("rtm") function attribute, x86: x86 Function Attributes.
63606                                                             (line  404)
63607* target("sahf") function attribute, x86: x86 Function Attributes.
63608                                                             (line  408)
63609* target("sgx") function attribute, x86: x86 Function Attributes.
63610                                                             (line  412)
63611* target("sha") function attribute, x86: x86 Function Attributes.
63612                                                             (line  416)
63613* target("shstk") function attribute, x86: x86 Function Attributes.
63614                                                             (line  420)
63615* target("sse") function attribute, x86: x86 Function Attributes.
63616                                                             (line  424)
63617* target("sse2") function attribute, x86: x86 Function Attributes.
63618                                                             (line  428)
63619* target("sse3") function attribute, x86: x86 Function Attributes.
63620                                                             (line  432)
63621* target("sse4") function attribute, x86: x86 Function Attributes.
63622                                                             (line  436)
63623* target("sse4.1") function attribute, x86: x86 Function Attributes.
63624                                                             (line  441)
63625* target("sse4.2") function attribute, x86: x86 Function Attributes.
63626                                                             (line  445)
63627* target("sse4a") function attribute, x86: x86 Function Attributes.
63628                                                             (line  449)
63629* target("ssse3") function attribute, x86: x86 Function Attributes.
63630                                                             (line  453)
63631* target("string") function attribute, PowerPC: PowerPC Function Attributes.
63632                                                             (line  126)
63633* target("tbm") function attribute, x86: x86 Function Attributes.
63634                                                             (line  457)
63635* target("thumb") function attribute, ARM: ARM Function Attributes.
63636                                                             (line   76)
63637* target("tune=TUNE") function attribute, PowerPC: PowerPC Function Attributes.
63638                                                             (line  171)
63639* target("tune=TUNE") function attribute, x86: x86 Function Attributes.
63640                                                             (line  530)
63641* target("update") function attribute, PowerPC: PowerPC Function Attributes.
63642                                                             (line   89)
63643* target("vaes") function attribute, x86: x86 Function Attributes.
63644                                                             (line  461)
63645* target("vpclmulqdq") function attribute, x86: x86 Function Attributes.
63646                                                             (line  465)
63647* target("vsx") function attribute, PowerPC: PowerPC Function Attributes.
63648                                                             (line  132)
63649* target("wbnoinvd") function attribute, x86: x86 Function Attributes.
63650                                                             (line  469)
63651* target("xop") function attribute, x86: x86 Function Attributes.
63652                                                             (line  473)
63653* target("xsave") function attribute, x86: x86 Function Attributes.
63654                                                             (line  477)
63655* target("xsavec") function attribute, x86: x86 Function Attributes.
63656                                                             (line  481)
63657* target("xsaveopt") function attribute, x86: x86 Function Attributes.
63658                                                             (line  485)
63659* target("xsaves") function attribute, x86: x86 Function Attributes.
63660                                                             (line  489)
63661* target-dependent options:              Submodel Options.   (line    6)
63662* target_clones function attribute:      Common Function Attributes.
63663                                                             (line  898)
63664* TC1:                                   Standards.          (line   13)
63665* TC2:                                   Standards.          (line   13)
63666* TC3:                                   Standards.          (line   13)
63667* tda variable attribute, V850:          V850 Variable Attributes.
63668                                                             (line   13)
63669* Technical Corrigenda:                  Standards.          (line   13)
63670* Technical Corrigendum 1:               Standards.          (line   13)
63671* Technical Corrigendum 2:               Standards.          (line   13)
63672* Technical Corrigendum 3:               Standards.          (line   13)
63673* template instantiation:                Template Instantiation.
63674                                                             (line    6)
63675* temporaries, lifetime of:              Temporaries.        (line    6)
63676* tentative definitions:                 Code Gen Options.   (line  231)
63677* tgamma:                                Other Builtins.     (line    6)
63678* tgammaf:                               Other Builtins.     (line    6)
63679* tgammal:                               Other Builtins.     (line    6)
63680* thiscall function attribute, x86-32:   x86 Function Attributes.
63681                                                             (line   23)
63682* Thread-Local Storage:                  Thread-Local.       (line    6)
63683* thunks:                                Nested Functions.   (line    6)
63684* TILE-Gx options:                       TILE-Gx Options.    (line    6)
63685* TILEPro options:                       TILEPro Options.    (line    6)
63686* tiny data section on the H8/300H and H8S: H8/300 Variable Attributes.
63687                                                             (line   19)
63688* tiny type attribute, MeP:              MeP Type Attributes.
63689                                                             (line    6)
63690* tiny variable attribute, MeP:          MeP Variable Attributes.
63691                                                             (line   20)
63692* tiny_data variable attribute, H8/300:  H8/300 Variable Attributes.
63693                                                             (line   19)
63694* TLS:                                   Thread-Local.       (line    6)
63695* tls-dialect= function attribute, AArch64: AArch64 Function Attributes.
63696                                                             (line   44)
63697* tls_model variable attribute:          Common Variable Attributes.
63698                                                             (line  259)
63699* TMPDIR:                                Environment Variables.
63700                                                             (line   45)
63701* toascii:                               Other Builtins.     (line    6)
63702* tolower:                               Other Builtins.     (line    6)
63703* toupper:                               Other Builtins.     (line    6)
63704* towlower:                              Other Builtins.     (line    6)
63705* towupper:                              Other Builtins.     (line    6)
63706* traditional C language:                Preprocessor Options.
63707                                                             (line  366)
63708* transparent_union type attribute:      Common Type Attributes.
63709                                                             (line  304)
63710* trapa_handler function attribute, SH:  SH Function Attributes.
63711                                                             (line   73)
63712* trap_exit function attribute, SH:      SH Function Attributes.
63713                                                             (line   68)
63714* trunc:                                 Other Builtins.     (line    6)
63715* truncf:                                Other Builtins.     (line    6)
63716* truncl:                                Other Builtins.     (line    6)
63717* tune= function attribute, AArch64:     AArch64 Function Attributes.
63718                                                             (line   54)
63719* two-stage name lookup:                 Name lookup.        (line    6)
63720* type alignment:                        Alignment.          (line    6)
63721* type attributes:                       Type Attributes.    (line    6)
63722* type-diff GCC_COLORS capability:       Diagnostic Message Formatting Options.
63723                                                             (line  114)
63724* typedef names as function parameters:  Incompatibilities.  (line   97)
63725* typeof:                                Typeof.             (line    6)
63726* type_info:                             Vague Linkage.      (line   42)
63727* uhk fixed-suffix:                      Fixed-Point.        (line    6)
63728* UHK fixed-suffix:                      Fixed-Point.        (line    6)
63729* uhr fixed-suffix:                      Fixed-Point.        (line    6)
63730* UHR fixed-suffix:                      Fixed-Point.        (line    6)
63731* uk fixed-suffix:                       Fixed-Point.        (line    6)
63732* UK fixed-suffix:                       Fixed-Point.        (line    6)
63733* ulk fixed-suffix:                      Fixed-Point.        (line    6)
63734* ULK fixed-suffix:                      Fixed-Point.        (line    6)
63735* ULL integer suffix:                    Long Long.          (line    6)
63736* ullk fixed-suffix:                     Fixed-Point.        (line    6)
63737* ULLK fixed-suffix:                     Fixed-Point.        (line    6)
63738* ullr fixed-suffix:                     Fixed-Point.        (line    6)
63739* ULLR fixed-suffix:                     Fixed-Point.        (line    6)
63740* ulr fixed-suffix:                      Fixed-Point.        (line    6)
63741* ULR fixed-suffix:                      Fixed-Point.        (line    6)
63742* uncached type attribute, ARC:          ARC Type Attributes.
63743                                                             (line    6)
63744* undefined behavior:                    Bug Criteria.       (line   17)
63745* undefined function value:              Bug Criteria.       (line   17)
63746* underscores in variables in macros:    Typeof.             (line   46)
63747* union:                                 Unnamed Fields.     (line    6)
63748* union, casting to a:                   Cast to Union.      (line    6)
63749* unions:                                Incompatibilities.  (line  146)
63750* unknown pragmas, warning:              Warning Options.    (line 1150)
63751* unresolved references and -nodefaultlibs: Link Options.    (line   91)
63752* unresolved references and -nostdlib:   Link Options.       (line   91)
63753* unused function attribute:             Common Function Attributes.
63754                                                             (line  919)
63755* unused label attribute:                Label Attributes.   (line   31)
63756* unused type attribute:                 Common Type Attributes.
63757                                                             (line  357)
63758* unused variable attribute:             Common Variable Attributes.
63759                                                             (line  268)
63760* upper function attribute, MSP430:      MSP430 Function Attributes.
63761                                                             (line   53)
63762* upper variable attribute, MSP430:      MSP430 Variable Attributes.
63763                                                             (line   24)
63764* ur fixed-suffix:                       Fixed-Point.        (line    6)
63765* UR fixed-suffix:                       Fixed-Point.        (line    6)
63766* used function attribute:               Common Function Attributes.
63767                                                             (line  924)
63768* used variable attribute:               Common Variable Attributes.
63769                                                             (line  273)
63770* User stack pointer in interrupts on the Blackfin: Blackfin Function Attributes.
63771                                                             (line   21)
63772* use_debug_exception_return function attribute, MIPS: MIPS Function Attributes.
63773                                                             (line   39)
63774* use_shadow_register_set function attribute, MIPS: MIPS Function Attributes.
63775                                                             (line   28)
63776* V in constraint:                       Simple Constraints. (line   43)
63777* V850 Options:                          V850 Options.       (line    6)
63778* vague linkage:                         Vague Linkage.      (line    6)
63779* value after longjmp:                   Global Register Variables.
63780                                                             (line   74)
63781* variable addressability on the M32R/D: M32R/D Variable Attributes.
63782                                                             (line    9)
63783* variable alignment:                    Alignment.          (line    6)
63784* variable attributes:                   Variable Attributes.
63785                                                             (line    6)
63786* variable number of arguments:          Variadic Macros.    (line    6)
63787* variable-length array in a structure:  Variable Length.    (line   26)
63788* variable-length array scope:           Variable Length.    (line   22)
63789* variable-length arrays:                Variable Length.    (line    6)
63790* variables in specified registers:      Explicit Register Variables.
63791                                                             (line    6)
63792* variables, local, in macros:           Typeof.             (line   46)
63793* variadic macros:                       Variadic Macros.    (line    6)
63794* VAX options:                           VAX Options.        (line    6)
63795* vector function attribute, RX:         RX Function Attributes.
63796                                                             (line   49)
63797* vector_size variable attribute:        Common Variable Attributes.
63798                                                             (line  282)
63799* version_id function attribute, IA-64:  IA-64 Function Attributes.
63800                                                             (line   16)
63801* vfprintf:                              Other Builtins.     (line    6)
63802* vfscanf:                               Other Builtins.     (line    6)
63803* visibility function attribute:         Common Function Attributes.
63804                                                             (line  934)
63805* visibility type attribute:             Common Type Attributes.
63806                                                             (line  366)
63807* visibility variable attribute:         Common Variable Attributes.
63808                                                             (line  305)
63809* Visium options:                        Visium Options.     (line    6)
63810* VLAs:                                  Variable Length.    (line    6)
63811* vliw function attribute, MeP:          MeP Function Attributes.
63812                                                             (line   30)
63813* void pointers, arithmetic:             Pointer Arith.      (line    6)
63814* void, size of pointer to:              Pointer Arith.      (line    6)
63815* volatile access:                       Volatiles.          (line    6)
63816* volatile access <1>:                   C++ Volatiles.      (line    6)
63817* volatile applied to function:          Function Attributes.
63818                                                             (line    6)
63819* volatile asm:                          Extended Asm.       (line  116)
63820* volatile read:                         Volatiles.          (line    6)
63821* volatile read <1>:                     C++ Volatiles.      (line    6)
63822* volatile write:                        Volatiles.          (line    6)
63823* volatile write <1>:                    C++ Volatiles.      (line    6)
63824* vprintf:                               Other Builtins.     (line    6)
63825* vscanf:                                Other Builtins.     (line    6)
63826* vsnprintf:                             Other Builtins.     (line    6)
63827* vsprintf:                              Other Builtins.     (line    6)
63828* vsscanf:                               Other Builtins.     (line    6)
63829* vtable:                                Vague Linkage.      (line   27)
63830* VxWorks Options:                       VxWorks Options.    (line    6)
63831* w floating point suffix:               Floating Types.     (line    6)
63832* W floating point suffix:               Floating Types.     (line    6)
63833* wakeup function attribute, MSP430:     MSP430 Function Attributes.
63834                                                             (line   45)
63835* warm function attribute, NDS32:        NDS32 Function Attributes.
63836                                                             (line   52)
63837* warning for comparison of signed and unsigned values: Warning Options.
63838                                                             (line 2212)
63839* warning for overloaded virtual function: C++ Dialect Options.
63840                                                             (line  756)
63841* warning for reordering of member initializers: C++ Dialect Options.
63842                                                             (line  681)
63843* warning for unknown pragmas:           Warning Options.    (line 1150)
63844* warning function attribute:            Common Function Attributes.
63845                                                             (line  206)
63846* warning GCC_COLORS capability:         Diagnostic Message Formatting Options.
63847                                                             (line   75)
63848* warning messages:                      Warning Options.    (line    6)
63849* warnings from system headers:          Warning Options.    (line 1631)
63850* warnings vs errors:                    Warnings and Errors.
63851                                                             (line    6)
63852* warn_if_not_aligned type attribute:    Common Type Attributes.
63853                                                             (line   83)
63854* warn_if_not_aligned variable attribute: Common Variable Attributes.
63855                                                             (line   73)
63856* warn_unused type attribute:            C++ Attributes.     (line   71)
63857* warn_unused_result function attribute: Common Function Attributes.
63858                                                             (line 1034)
63859* weak function attribute:               Common Function Attributes.
63860                                                             (line 1051)
63861* weak variable attribute:               Common Variable Attributes.
63862                                                             (line  310)
63863* weakref function attribute:            Common Function Attributes.
63864                                                             (line 1060)
63865* whitespace:                            Incompatibilities.  (line  112)
63866* Windows Options for x86:               x86 Windows Options.
63867                                                             (line    6)
63868* X in constraint:                       Simple Constraints. (line  122)
63869* X3.159-1989:                           Standards.          (line   13)
63870* x86 named address spaces:              Named Address Spaces.
63871                                                             (line  183)
63872* x86 Options:                           x86 Options.        (line    6)
63873* x86 Windows Options:                   x86 Windows Options.
63874                                                             (line    6)
63875* Xstormy16 Options:                     Xstormy16 Options.  (line    6)
63876* Xtensa Options:                        Xtensa Options.     (line    6)
63877* y0:                                    Other Builtins.     (line    6)
63878* y0f:                                   Other Builtins.     (line    6)
63879* y0l:                                   Other Builtins.     (line    6)
63880* y1:                                    Other Builtins.     (line    6)
63881* y1f:                                   Other Builtins.     (line    6)
63882* y1l:                                   Other Builtins.     (line    6)
63883* yn:                                    Other Builtins.     (line    6)
63884* ynf:                                   Other Builtins.     (line    6)
63885* ynl:                                   Other Builtins.     (line    6)
63886* zda variable attribute, V850:          V850 Variable Attributes.
63887                                                             (line   17)
63888* zero-length arrays:                    Zero Length.        (line    6)
63889* zero-size structures:                  Empty Structures.   (line    6)
63890* zSeries options:                       zSeries Options.    (line    6)
63891
63892
63893
63894Tag Table:
63895Node: Top2057
63896Node: G++ and GCC3947
63897Node: Standards6012
63898Node: Invoking GCC19170
63899Node: Option Summary23371
63900Node: Overall Options75929
63901Node: Invoking G++90921
63902Node: C Dialect Options92444
63903Node: C++ Dialect Options111308
63904Node: Objective-C and Objective-C++ Dialect Options148292
63905Node: Diagnostic Message Formatting Options159522
63906Node: Warning Options168334
63907Ref: Wtrigraphs254493
63908Node: Debugging Options291080
63909Node: Optimize Options309956
63910Ref: Type-punning373658
63911Node: Instrumentation Options465396
63912Node: Preprocessor Options507561
63913Ref: dashMF512408
63914Ref: fdollars-in-identifiers516987
63915Node: Assembler Options529237
63916Node: Link Options529928
63917Ref: Link Options-Footnote-1544243
63918Node: Directory Options544579
63919Node: Code Gen Options552982
63920Node: Developer Options581647
63921Node: Submodel Options620559
63922Node: AArch64 Options622317
63923Ref: aarch64-feature-modifiers632822
63924Node: Adapteva Epiphany Options635213
63925Node: ARC Options641160
63926Node: ARM Options662077
63927Node: AVR Options697033
63928Node: Blackfin Options721625
63929Node: C6X Options729519
63930Node: CRIS Options731062
63931Node: CR16 Options734801
63932Node: Darwin Options735712
63933Node: DEC Alpha Options743152
63934Node: FR30 Options754768
63935Node: FT32 Options755333
63936Node: FRV Options756279
63937Node: GNU/Linux Options763043
63938Node: H8/300 Options764424
63939Node: HPPA Options765876
63940Node: IA-64 Options775408
63941Node: LM32 Options783536
63942Node: M32C Options784059
63943Node: M32R/D Options785332
63944Node: M680x0 Options788877
63945Node: MCore Options803029
63946Node: MeP Options804531
63947Node: MicroBlaze Options808491
63948Node: MIPS Options811277
63949Node: MMIX Options846729
63950Node: MN10300 Options849206
63951Node: Moxie Options851747
63952Node: MSP430 Options852234
63953Node: NDS32 Options856938
63954Node: Nios II Options859108
63955Node: Nvidia PTX Options871271
63956Node: PDP-11 Options873533
63957Node: picoChip Options875230
63958Node: PowerPC Options877368
63959Node: PowerPC SPE Options877596
63960Node: RISC-V Options906102
63961Node: RL78 Options910486
63962Node: RS/6000 and PowerPC Options914261
63963Node: RX Options956242
63964Node: S/390 and zSeries Options964844
63965Node: Score Options975309
63966Node: SH Options976158
63967Node: Solaris 2 Options991300
63968Node: SPARC Options992538
63969Node: SPU Options1008159
63970Node: System V Options1013098
63971Node: TILE-Gx Options1013924
63972Node: TILEPro Options1014942
63973Node: V850 Options1015446
63974Node: VAX Options1022133
63975Node: Visium Options1022671
63976Node: VMS Options1024979
63977Node: VxWorks Options1025795
63978Node: x86 Options1026947
63979Node: x86 Windows Options1085687
63980Node: Xstormy16 Options1088492
63981Node: Xtensa Options1088786
63982Node: zSeries Options1093935
63983Node: Spec Files1094131
63984Node: Environment Variables1116289
63985Node: Precompiled Headers1125015
63986Node: C Implementation1131021
63987Node: Translation implementation1132711
63988Node: Environment implementation1133302
63989Node: Identifiers implementation1133856
63990Node: Characters implementation1134942
63991Node: Integers implementation1138592
63992Node: Floating point implementation1140641
63993Node: Arrays and pointers implementation1143704
63994Ref: Arrays and pointers implementation-Footnote-11145164
63995Node: Hints implementation1145290
63996Node: Structures unions enumerations and bit-fields implementation1146785
63997Node: Qualifiers implementation1149009
63998Node: Declarators implementation1150789
63999Node: Statements implementation1151130
64000Node: Preprocessing directives implementation1151456
64001Node: Library functions implementation1153777
64002Node: Architecture implementation1154426
64003Node: Locale-specific behavior implementation1156071
64004Node: C++ Implementation1156376
64005Node: Conditionally-supported behavior1157659
64006Node: Exception handling1158276
64007Node: C Extensions1158743
64008Node: Statement Exprs1163944
64009Node: Local Labels1168421
64010Node: Labels as Values1171394
64011Ref: Labels as Values-Footnote-11173921
64012Node: Nested Functions1174106
64013Node: Constructing Calls1178064
64014Node: Typeof1182781
64015Node: Conditionals1186710
64016Node: __int1281187599
64017Node: Long Long1188124
64018Node: Complex1189600
64019Node: Floating Types1192368
64020Node: Half-Precision1195835
64021Node: Decimal Float1198246
64022Node: Hex Floats1200100
64023Node: Fixed-Point1201137
64024Node: Named Address Spaces1204395
64025Ref: AVR Named Address Spaces1205081
64026Node: Zero Length1212104
64027Node: Empty Structures1215144
64028Node: Variable Length1215550
64029Node: Variadic Macros1218268
64030Node: Escaped Newlines1220646
64031Node: Subscripting1221507
64032Node: Pointer Arith1222232
64033Node: Pointers to Arrays1222806
64034Node: Initializers1223551
64035Node: Compound Literals1224052
64036Node: Designated Inits1227619
64037Node: Case Ranges1231355
64038Node: Cast to Union1232036
64039Node: Mixed Declarations1233162
64040Node: Function Attributes1233672
64041Node: Common Function Attributes1237060
64042Node: AArch64 Function Attributes1288569
64043Node: ARC Function Attributes1293975
64044Node: ARM Function Attributes1296297
64045Node: AVR Function Attributes1301102
64046Node: Blackfin Function Attributes1305637
64047Node: CR16 Function Attributes1308135
64048Node: Epiphany Function Attributes1308662
64049Node: H8/300 Function Attributes1311414
64050Node: IA-64 Function Attributes1312610
64051Node: M32C Function Attributes1313652
64052Node: M32R/D Function Attributes1315990
64053Node: m68k Function Attributes1317464
64054Node: MCORE Function Attributes1318408
64055Node: MeP Function Attributes1319219
64056Node: MicroBlaze Function Attributes1320520
64057Node: Microsoft Windows Function Attributes1322027
64058Node: MIPS Function Attributes1326596
64059Node: MSP430 Function Attributes1332214
64060Node: NDS32 Function Attributes1336062
64061Node: Nios II Function Attributes1338486
64062Node: Nvidia PTX Function Attributes1339783
64063Node: PowerPC Function Attributes1340398
64064Node: RISC-V Function Attributes1347453
64065Node: RL78 Function Attributes1348272
64066Node: RX Function Attributes1349511
64067Node: S/390 Function Attributes1352059
64068Node: SH Function Attributes1353887
64069Node: SPU Function Attributes1357308
64070Node: Symbian OS Function Attributes1358116
64071Node: V850 Function Attributes1358453
64072Node: Visium Function Attributes1358998
64073Node: x86 Function Attributes1359526
64074Node: Xstormy16 Function Attributes1380749
64075Node: Variable Attributes1381256
64076Node: Common Variable Attributes1382745
64077Node: ARC Variable Attributes1396513
64078Node: AVR Variable Attributes1396895
64079Node: Blackfin Variable Attributes1402057
64080Node: H8/300 Variable Attributes1402915
64081Node: IA-64 Variable Attributes1403988
64082Node: M32R/D Variable Attributes1404739
64083Node: MeP Variable Attributes1405522
64084Node: Microsoft Windows Variable Attributes1407615
64085Node: MSP430 Variable Attributes1410068
64086Node: Nvidia PTX Variable Attributes1411269
64087Node: PowerPC Variable Attributes1411886
64088Node: RL78 Variable Attributes1412443
64089Node: SPU Variable Attributes1412861
64090Node: V850 Variable Attributes1413226
64091Node: x86 Variable Attributes1413858
64092Node: Xstormy16 Variable Attributes1414914
64093Node: Type Attributes1415484
64094Node: Common Type Attributes1416828
64095Node: ARC Type Attributes1433677
64096Node: ARM Type Attributes1434149
64097Node: MeP Type Attributes1434931
64098Node: PowerPC Type Attributes1435333
64099Node: SPU Type Attributes1436322
64100Node: x86 Type Attributes1436741
64101Node: Label Attributes1437729
64102Node: Enumerator Attributes1439662
64103Node: Statement Attributes1440981
64104Node: Attribute Syntax1442464
64105Node: Function Prototypes1453722
64106Node: C++ Comments1455502
64107Node: Dollar Signs1456021
64108Node: Character Escapes1456486
64109Node: Alignment1456770
64110Node: Inline1458142
64111Node: Volatiles1462959
64112Node: Using Assembly Language with C1465858
64113Node: Basic Asm1467095
64114Node: Extended Asm1472455
64115Ref: Volatile1476542
64116Ref: AssemblerTemplate1480627
64117Ref: OutputOperands1484865
64118Ref: FlagOutputOperands1491816
64119Ref: InputOperands1493845
64120Ref: Clobbers and Scratch Registers1498113
64121Ref: GotoLabels1506269
64122Ref: x86Operandmodifiers1508404
64123Ref: x86floatingpointasmoperands1510605
64124Node: Constraints1513934
64125Node: Simple Constraints1515040
64126Node: Multi-Alternative1522354
64127Node: Modifiers1524029
64128Node: Machine Constraints1526827
64129Node: Asm Labels1586627
64130Node: Explicit Register Variables1588247
64131Ref: Explicit Reg Vars1588461
64132Node: Global Register Variables1589070
64133Ref: Global Reg Vars1589278
64134Node: Local Register Variables1593130
64135Ref: Local Reg Vars1593350
64136Node: Size of an asm1596657
64137Node: Alternate Keywords1598135
64138Node: Incomplete Enums1599634
64139Node: Function Names1600391
64140Node: Return Address1602289
64141Node: Vector Extensions1606230
64142Node: Offsetof1613525
64143Node: __sync Builtins1614358
64144Node: __atomic Builtins1620799
64145Node: Integer Overflow Builtins1634280
64146Node: x86 specific memory model extensions for transactional memory1640756
64147Node: Object Size Checking1642022
64148Node: Pointer Bounds Checker builtins1648061
64149Node: Other Builtins1654063
64150Node: Target Builtins1695204
64151Node: AArch64 Built-in Functions1696862
64152Node: Alpha Built-in Functions1697317
64153Node: Altera Nios II Built-in Functions1700365
64154Node: ARC Built-in Functions1704734
64155Node: ARC SIMD Built-in Functions1709946
64156Node: ARM iWMMXt Built-in Functions1718842
64157Node: ARM C Language Extensions (ACLE)1725838
64158Node: ARM Floating Point Status and Control Intrinsics1727177
64159Node: ARM ARMv8-M Security Extensions1727662
64160Node: AVR Built-in Functions1729007
64161Node: Blackfin Built-in Functions1732768
64162Node: FR-V Built-in Functions1733387
64163Node: Argument Types1734255
64164Node: Directly-mapped Integer Functions1736009
64165Node: Directly-mapped Media Functions1737093
64166Node: Raw read/write Functions1745299
64167Node: Other Built-in Functions1746207
64168Node: MIPS DSP Built-in Functions1747393
64169Node: MIPS Paired-Single Support1759890
64170Node: MIPS Loongson Built-in Functions1761389
64171Node: Paired-Single Arithmetic1767911
64172Node: Paired-Single Built-in Functions1768859
64173Node: MIPS-3D Built-in Functions1771526
64174Node: MIPS SIMD Architecture (MSA) Support1776904
64175Node: MIPS SIMD Architecture Built-in Functions1779744
64176Node: Other MIPS Built-in Functions1806574
64177Node: MSP430 Built-in Functions1807583
64178Node: NDS32 Built-in Functions1808984
64179Node: picoChip Built-in Functions1810277
64180Node: PowerPC Built-in Functions1811620
64181Node: PowerPC AltiVec/VSX Built-in Functions1846101
64182Node: PowerPC Hardware Transactional Memory Built-in Functions2015683
64183Node: PowerPC Atomic Memory Operation Functions2024194
64184Node: RX Built-in Functions2026729
64185Node: S/390 System z Built-in Functions2030747
64186Node: SH Built-in Functions2035977
64187Node: SPARC VIS Built-in Functions2037705
64188Node: SPU Built-in Functions2046234
64189Node: TI C6X Built-in Functions2047951
64190Node: TILE-Gx Built-in Functions2048976
64191Node: TILEPro Built-in Functions2050095
64192Node: x86 Built-in Functions2051195
64193Node: x86 transactional memory intrinsics2112467
64194Node: x86 control-flow protection intrinsics2115734
64195Node: Target Format Checks2117505
64196Node: Solaris Format Checks2117937
64197Node: Darwin Format Checks2118363
64198Node: Pragmas2119181
64199Node: AArch64 Pragmas2119954
64200Node: ARM Pragmas2120411
64201Node: M32C Pragmas2121038
64202Node: MeP Pragmas2122110
64203Node: RS/6000 and PowerPC Pragmas2124178
64204Node: S/390 Pragmas2124918
64205Node: Darwin Pragmas2125484
64206Node: Solaris Pragmas2126537
64207Node: Symbol-Renaming Pragmas2127701
64208Node: Structure-Layout Pragmas2129317
64209Node: Weak Pragmas2131597
64210Node: Diagnostic Pragmas2132332
64211Node: Visibility Pragmas2135441
64212Node: Push/Pop Macro Pragmas2136126
64213Node: Function Specific Option Pragmas2137099
64214Node: Loop-Specific Pragmas2138968
64215Node: Unnamed Fields2140568
64216Node: Thread-Local2142765
64217Node: C99 Thread-Local Edits2144871
64218Node: C++98 Thread-Local Edits2146869
64219Node: Binary constants2150314
64220Node: C++ Extensions2150985
64221Node: C++ Volatiles2152615
64222Node: Restricted Pointers2154963
64223Node: Vague Linkage2156554
64224Node: C++ Interface2160177
64225Ref: C++ Interface-Footnote-12163974
64226Node: Template Instantiation2164112
64227Node: Bound member functions2171595
64228Node: C++ Attributes2173127
64229Node: Function Multiversioning2177199
64230Node: Type Traits2179006
64231Node: C++ Concepts2185771
64232Node: Deprecated Features2187270
64233Node: Backwards Compatibility2189361
64234Node: Objective-C2191195
64235Node: GNU Objective-C runtime API2191802
64236Node: Modern GNU Objective-C runtime API2192809
64237Node: Traditional GNU Objective-C runtime API2195245
64238Node: Executing code before main2195972
64239Node: What you can and what you cannot do in +load2198716
64240Node: Type encoding2201086
64241Node: Legacy type encoding2206227
64242Node: @encode2207317
64243Node: Method signatures2207862
64244Node: Garbage Collection2209854
64245Node: Constant string objects2212544
64246Node: compatibility_alias2215053
64247Node: Exceptions2215778
64248Node: Synchronization2218488
64249Node: Fast enumeration2219672
64250Node: Using fast enumeration2219984
64251Node: c99-like fast enumeration syntax2221195
64252Node: Fast enumeration details2221898
64253Node: Fast enumeration protocol2224238
64254Node: Messaging with the GNU Objective-C runtime2227390
64255Node: Dynamically registering methods2228762
64256Node: Forwarding hook2230453
64257Node: Compatibility2233494
64258Node: Gcov2240050
64259Node: Gcov Intro2240585
64260Node: Invoking Gcov2243303
64261Node: Gcov and Optimization2264248
64262Node: Gcov Data Files2267617
64263Node: Cross-profiling2269034
64264Node: Gcov-tool2270888
64265Node: Gcov-tool Intro2271313
64266Node: Invoking Gcov-tool2273283
64267Node: Gcov-dump2275861
64268Node: Gcov-dump Intro2276183
64269Node: Invoking Gcov-dump2276450
64270Node: Trouble2277119
64271Node: Actual Bugs2278537
64272Node: Interoperation2278984
64273Node: Incompatibilities2285875
64274Node: Fixed Headers2294027
64275Node: Standard Libraries2295685
64276Node: Disappointments2297057
64277Node: C++ Misunderstandings2301416
64278Node: Static Definitions2302227
64279Node: Name lookup2303280
64280Ref: Name lookup-Footnote-12308061
64281Node: Temporaries2308250
64282Node: Copy Assignment2310226
64283Node: Non-bugs2312033
64284Node: Warnings and Errors2322539
64285Node: Bugs2324301
64286Node: Bug Criteria2324768
64287Node: Bug Reporting2326978
64288Node: Service2327196
64289Node: Contributing2328015
64290Node: Funding2328756
64291Node: GNU Project2331246
64292Node: Copying2331892
64293Node: GNU Free Documentation License2369401
64294Node: Contributors2394519
64295Node: Option Index2435454
64296Node: Keyword Index2700228
64297
64298End Tag Table
64299