1This is doc/gcc.info, produced by makeinfo version 4.12 from
2/space/rguenther/gcc-5.4.0/gcc-5.4.0/gcc/doc/gcc.texi.
3
4Copyright (C) 1988-2015 Free Software Foundation, Inc.
5
6 Permission is granted to copy, distribute and/or modify this document
7under the terms of the GNU Free Documentation License, Version 1.3 or
8any later version published by the Free Software Foundation; with the
9Invariant Sections being "Funding Free Software", the Front-Cover Texts
10being (a) (see below), and with the Back-Cover Texts being (b) (see
11below).  A copy of the license is included in the section entitled "GNU
12Free Documentation License".
13
14 (a) The FSF's Front-Cover Text is:
15
16 A GNU Manual
17
18 (b) The FSF's Back-Cover Text is:
19
20 You have freedom to copy and modify this GNU Manual, like GNU
21software.  Copies published by the Free Software Foundation raise
22funds for GNU development.
23
24INFO-DIR-SECTION Software development
25START-INFO-DIR-ENTRY
26* gcc: (gcc).                  The GNU Compiler Collection.
27* g++: (gcc).                  The GNU C++ compiler.
28* gcov: (gcc) Gcov.            `gcov'--a test coverage program.
29* gcov-tool: (gcc) Gcov-tool.  `gcov-tool'--an offline gcda profile processing program.
30END-INFO-DIR-ENTRY
31 This file documents the use of the GNU compilers.
32
33 Copyright (C) 1988-2015 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
50software.  Copies published by the Free Software Foundation raise
51funds for GNU development.
52
53
54
55File: gcc.info,  Node: Top,  Next: G++ and GCC,  Up: (DIR)
56
57Introduction
58************
59
60This manual documents how to use the GNU compilers, as well as their
61features and incompatibilities, and how to report bugs.  It corresponds
62to the compilers (GCC) version 5.4.0.  The internals of the GNU
63compilers, including how to port them to new targets and some
64information about how to write front ends for new languages, are
65documented in a separate manual.  *Note Introduction: (gccint)Top.
66
67* Menu:
68
69* G++ and GCC::     You can compile C or C++ programs.
70* Standards::       Language standards supported by GCC.
71* Invoking GCC::    Command options supported by `gcc'.
72* C Implementation:: How GCC implements the ISO C specification.
73* C++ Implementation:: How GCC implements the ISO C++ specification.
74* C Extensions::    GNU extensions to the C language family.
75* C++ Extensions::  GNU extensions to the C++ language.
76* Objective-C::     GNU Objective-C runtime features.
77* Compatibility::   Binary Compatibility
78* Gcov::            `gcov'---a test coverage program.
79* Gcov-tool::       `gcov-tool'---an offline gcda profile processing program.
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,  Prev: Top,  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++,
105Java, Fortran, Ada, and Go.
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
152GCC supports three versions of the C standard, although support for the
153most recent version is not yet complete.
154
155 The original ANSI C standard (X3.159-1989) was ratified in 1989 and
156published in 1990.  This standard was ratified as an ISO standard
157(ISO/IEC 9899:1990) later in 1990.  There were no technical differences
158between these publications, although the sections of the ANSI standard
159were renumbered and became clauses in the ISO standard.  This standard,
160in both its forms, is commonly known as "C89", or occasionally as
161"C90", from the dates of ratification.  The ANSI standard, but not the
162ISO standard, also came with a Rationale document.  To select this
163standard in GCC, use one of the options `-ansi', `-std=c90' or
164`-std=iso9899:1990'; to obtain all the diagnostics required by the
165standard, you should also specify `-pedantic' (or `-pedantic-errors' if
166you want them to be errors rather than warnings).  *Note Options
167Controlling C Dialect: C Dialect Options.
168
169 Errors in the 1990 ISO C standard were corrected in two Technical
170Corrigenda published in 1994 and 1996.  GCC does not support the
171uncorrected version.
172
173 An amendment to the 1990 standard was published in 1995.  This
174amendment added digraphs and `__STDC_VERSION__' to the language, but
175otherwise concerned the library.  This amendment is commonly known as
176"AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
177select this standard in GCC, use the option `-std=iso9899:199409'
178(with, as for other standard versions, `-pedantic' to receive all
179required diagnostics).
180
181 A new edition of the ISO C standard was published in 1999 as ISO/IEC
1829899:1999, and is commonly known as "C99".  GCC has substantially
183complete support for this standard version; see
184`http://gcc.gnu.org/c99status.html' for details.  To select this
185standard, use `-std=c99' or `-std=iso9899:1999'.  (While in
186development, drafts of this standard version were referred to as "C9X".)
187
188 Errors in the 1999 ISO C standard were corrected in three Technical
189Corrigenda published in 2001, 2004 and 2007.  GCC does not support the
190uncorrected version.
191
192 A fourth version of the C standard, known as "C11", was published in
1932011 as ISO/IEC 9899:2011.  GCC has substantially complete support for
194this standard, enabled with `-std=c11' or `-std=iso9899:2011'.  (While
195in development, drafts of this standard version were referred to as
196"C1X".)
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.  Use of the `-std' options listed above
201will disable these extensions where they conflict with the C standard
202version selected.  You may also select an extended version of the C
203language explicitly with `-std=gnu90' (for C90 with GNU extensions),
204`-std=gnu99' (for C99 with GNU extensions) or `-std=gnu11' (for C11
205with GNU extensions).  The default, if no C language dialect options
206are given, is `-std=gnu11'.  Some features that are part of the C99
207standard are accepted as extensions in C90 mode, and some features that
208are part of the C11 standard are accepted as extensions in C90 and C99
209modes.
210
211 The ISO C standard defines (in clause 4) two classes of conforming
212implementation.  A "conforming hosted implementation" supports the
213whole standard including all the library facilities; a "conforming
214freestanding implementation" is only required to provide certain
215library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>',
216and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; since C99,
217also those in `<stdbool.h>' and `<stdint.h>'; and since C11, also those
218in `<stdalign.h>' and `<stdnoreturn.h>'.  In addition, complex types,
219added in C99, are not required for freestanding implementations.  The
220standard also defines two environments for programs, a "freestanding
221environment", required of all implementations and which may not have
222library facilities beyond those required of freestanding
223implementations, where the handling of program startup and termination
224are implementation-defined, and a "hosted environment", which is not
225required, in which all the library facilities are provided and startup
226is through a function `int main (void)' or `int main (int, char *[])'.
227An OS kernel would be a freestanding environment; a program using the
228facilities of an operating system would normally be in a hosted
229implementation.
230
231 GCC aims towards being usable as a conforming freestanding
232implementation, or as the compiler for a conforming hosted
233implementation.  By default, it will act as the compiler for a hosted
234implementation, defining `__STDC_HOSTED__' as `1' and presuming that
235when the names of ISO C functions are used, they have the semantics
236defined in the standard.  To make it act as a conforming freestanding
237implementation for a freestanding environment, use the option
238`-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not
239make assumptions about the meanings of function names from the standard
240library, with exceptions noted below.  To build an OS kernel, you may
241well still need to make your own arrangements for linking and startup.
242*Note Options Controlling C Dialect: C Dialect Options.
243
244 GCC does not provide the library facilities required only of hosted
245implementations, nor yet all the facilities required by C99 of
246freestanding implementations on all platforms; to use the facilities of
247a hosted environment, you will need to find them elsewhere (for
248example, in the GNU C library).  *Note Standard Libraries: Standard
249Libraries.
250
251 Most of the compiler support routines used by GCC are present in
252`libgcc', but there are a few exceptions.  GCC requires the
253freestanding environment provide `memcpy', `memmove', `memset' and
254`memcmp'.  Finally, if `__builtin_trap' is used, and the target does
255not implement the `trap' pattern, then GCC will emit a call to `abort'.
256
257 For references to Technical Corrigenda, Rationale documents and
258information concerning the history of C that is available online, see
259`http://gcc.gnu.org/readings.html'
260
2612.2 C++ Language
262================
263
264GCC supports the original ISO C++ standard (1998) and contains
265experimental support for the second ISO C++ standard (2011).
266
267 The original ISO C++ standard was published as the ISO standard
268(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
2692003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and
270C++03, respectively. GCC implements the majority of C++98 (`export' is
271a notable exception) and most of the changes in C++03.  To select this
272standard in GCC, use one of the options `-ansi', `-std=c++98', or
273`-std=c++03'; to obtain all the diagnostics required by the standard,
274you should also specify `-pedantic' (or `-pedantic-errors' if you want
275them to be errors rather than warnings).
276
277 A revised ISO C++ standard was published in 2011 as ISO/IEC
27814882:2011, and is referred to as C++11; before its publication it was
279commonly referred to as C++0x.  C++11 contains several changes to the
280C++ language, most of which have been implemented in an experimental
281C++11 mode in GCC.  For information regarding the C++11 features
282available in the experimental C++11 mode, see
283`http://gcc.gnu.org/projects/cxx0x.html'. To select this standard in
284GCC, use the option `-std=c++11'; to obtain all the diagnostics
285required by the standard, you should also specify `-pedantic' (or
286`-pedantic-errors' if you want them to be errors rather than warnings).
287
288 More information about the C++ standards is available on the ISO C++
289committee's web site at `http://www.open-std.org/jtc1/sc22/wg21/'.
290
291 By default, GCC provides some extensions to the C++ language; *Note
292Options Controlling C++ Dialect: C++ Dialect Options.  Use of the
293`-std' option listed above will disable these extensions.  You may also
294select an extended version of the C++ language explicitly with
295`-std=gnu++98' (for C++98 with GNU extensions) or `-std=gnu++11' (for
296C++11 with GNU extensions).  The default, if no C++ language dialect
297options are given, is `-std=gnu++98'.
298
2992.3 Objective-C and Objective-C++ Languages
300===========================================
301
302GCC supports "traditional" Objective-C (also known as "Objective-C
3031.0") and contains support for the Objective-C exception and
304synchronization syntax.  It has also support for a number of
305"Objective-C 2.0" language extensions, including properties, fast
306enumeration (only for Objective-C), method attributes and the @optional
307and @required keywords in protocols.  GCC supports Objective-C++ and
308features available in Objective-C are also available in Objective-C++.
309
310 GCC by default uses the GNU Objective-C runtime library, which is part
311of GCC and is not the same as the Apple/NeXT Objective-C runtime
312library used on Apple systems.  There are a number of differences
313documented in this manual.  The options `-fgnu-runtime' and
314`-fnext-runtime' allow you to switch between producing output that
315works with the GNU Objective-C runtime library and output that works
316with the Apple/NeXT Objective-C runtime library.
317
318 There is no formal written standard for Objective-C or Objective-C++.
319The authoritative manual on traditional Objective-C (1.0) is
320"Object-Oriented Programming and the Objective-C Language", available
321at a number of web sites:
322   * `http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf'
323     is the original NeXTstep document;
324
325   * `http://objc.toodarkpark.net' is the same document in another
326     format;
327
328   *
329     `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
330     has an updated version but make sure you search for "Object
331     Oriented Programming and the Objective-C Programming Language 1.0",
332     not documentation on the newer "Objective-C 2.0" language
333
334 The Objective-C exception and synchronization syntax (that is, the
335keywords @try, @throw, @catch, @finally and @synchronized) is supported
336by GCC and is enabled with the option `-fobjc-exceptions'.  The syntax
337is briefly documented in this manual and in the Objective-C 2.0 manuals
338from Apple.
339
340 The Objective-C 2.0 language extensions and features are automatically
341enabled; they include properties (via the @property, @synthesize and
342@dynamic keywords), fast enumeration (not available in Objective-C++),
343attributes for methods (such as deprecated, noreturn, sentinel,
344format), the unused attribute for method arguments, the @package
345keyword for instance variables and the @optional and @required keywords
346in protocols.  You can disable all these Objective-C 2.0 language
347extensions with the option `-fobjc-std=objc1', which causes the
348compiler to recognize the same Objective-C language syntax recognized
349by GCC 4.0, and to produce an error if one of the new features is used.
350
351 GCC has currently no support for non-fragile instance variables.
352
353 The authoritative manual on Objective-C 2.0 is available from Apple:
354   *
355     `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
356
357 For more information concerning the history of Objective-C that is
358available online, see `http://gcc.gnu.org/readings.html'
359
3602.4 Go Language
361===============
362
363As of the GCC 4.7.1 release, GCC supports the Go 1 language standard,
364described at `http://golang.org/doc/go1.html'.
365
3662.5 References for Other Languages
367==================================
368
369*Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
370conformance and compatibility of the Ada compiler.
371
372 *Note Standards: (gfortran)Standards, for details of standards
373supported by GNU Fortran.
374
375 *Note Compatibility with the Java Platform: (gcj)Compatibility, for
376details of compatibility between `gcj' and the Java Platform.
377
378
379File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
380
3813 GCC Command Options
382*********************
383
384When you invoke GCC, it normally does preprocessing, compilation,
385assembly and linking.  The "overall options" allow you to stop this
386process at an intermediate stage.  For example, the `-c' option says
387not to run the linker.  Then the output consists of object files output
388by the assembler.
389
390 Other options are passed on to one stage of processing.  Some options
391control the preprocessor and others the compiler itself.  Yet other
392options control the assembler and linker; most of these are not
393documented here, since you rarely need to use any of them.
394
395 Most of the command-line options that you can use with GCC are useful
396for C programs; when an option is only useful with another language
397(usually C++), the explanation says so explicitly.  If the description
398for a particular option does not mention a source language, you can use
399that option with all supported languages.
400
401 *Note Compiling C++ Programs: Invoking G++, for a summary of special
402options for compiling C++ programs.
403
404 The `gcc' program accepts options and file names as operands.  Many
405options have multi-letter names; therefore multiple single-letter
406options may _not_ be grouped: `-dv' is very different from `-d -v'.
407
408 You can mix options and other arguments.  For the most part, the order
409you use doesn't matter.  Order does matter when you use several options
410of the same kind; for example, if you specify `-L' more than once, the
411directories are searched in the order specified.  Also, the placement
412of the `-l' option is significant.
413
414 Many options have long names starting with `-f' or with `-W'--for
415example, `-fmove-loop-invariants', `-Wformat' and so on.  Most of these
416have both positive and negative forms; the negative form of `-ffoo' is
417`-fno-foo'.  This manual documents only one of these two forms,
418whichever one is not the default.
419
420 *Note Option Index::, for an index to GCC's options.
421
422* Menu:
423
424* Option Summary::      Brief list of all options, without explanations.
425* Overall Options::     Controlling the kind of output:
426                        an executable, object files, assembler files,
427                        or preprocessed source.
428* Invoking G++::        Compiling C++ programs.
429* C Dialect Options::   Controlling the variant of C language compiled.
430* C++ Dialect Options:: Variations on C++.
431* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
432                        and Objective-C++.
433* Language Independent Options:: Controlling how diagnostics should be
434                        formatted.
435* Warning Options::     How picky should the compiler be?
436* Debugging Options::   Symbol tables, measurements, and debugging dumps.
437* Optimize Options::    How much optimization?
438* Preprocessor Options:: Controlling header files and macro definitions.
439                         Also, getting dependency information for Make.
440* Assembler Options::   Passing options to the assembler.
441* Link Options::        Specifying libraries and so on.
442* Directory Options::   Where to find header files and libraries.
443                        Where to find the compiler executable files.
444* Spec Files::          How to pass switches to sub-processes.
445* Target Options::      Running a cross-compiler, or an old version of GCC.
446* Submodel Options::    Specifying minor hardware or convention variations,
447                        such as 68010 vs 68020.
448* Code Gen Options::    Specifying conventions for function calls, data layout
449                        and register usage.
450* Environment Variables:: Env vars that affect GCC.
451* Precompiled Headers:: Compiling a header once, and using it many times.
452
453
454File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
455
4563.1 Option Summary
457==================
458
459Here is a summary of all the options, grouped by type.  Explanations are
460in the following sections.
461
462_Overall Options_
463     *Note Options Controlling the Kind of Output: Overall Options.
464          -c  -S  -E  -o FILE  -no-canonical-prefixes
465          -pipe  -pass-exit-codes
466          -x LANGUAGE  -v  -###  --help[=CLASS[,...]]  --target-help
467          --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG
468          -fdump-ada-spec[-slim] -fada-spec-parent=UNIT -fdump-go-spec=FILE
469
470_C Language Options_
471     *Note Options Controlling C Dialect: C Dialect Options.
472          -ansi  -std=STANDARD  -fgnu89-inline
473          -aux-info FILENAME -fallow-parameterless-variadic-functions
474          -fno-asm  -fno-builtin  -fno-builtin-FUNCTION
475          -fhosted  -ffreestanding -fopenacc -fopenmp -fopenmp-simd
476          -fms-extensions -fplan9-extensions -trigraphs -traditional -traditional-cpp
477          -fallow-single-precision  -fcond-mismatch -flax-vector-conversions
478          -fsigned-bitfields  -fsigned-char
479          -funsigned-bitfields  -funsigned-char
480
481_C++ Language Options_
482     *Note Options Controlling C++ Dialect: C++ Dialect Options.
483          -fabi-version=N  -fno-access-control  -fcheck-new
484          -fconstexpr-depth=N  -ffriend-injection
485          -fno-elide-constructors
486          -fno-enforce-eh-specs
487          -ffor-scope  -fno-for-scope  -fno-gnu-keywords
488          -fno-implicit-templates
489          -fno-implicit-inline-templates
490          -fno-implement-inlines  -fms-extensions
491          -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names
492          -fno-optional-diags  -fpermissive
493          -fno-pretty-templates
494          -frepo  -fno-rtti -fsized-deallocation
495          -fstats  -ftemplate-backtrace-limit=N
496          -ftemplate-depth=N
497          -fno-threadsafe-statics  -fuse-cxa-atexit
498          -fno-weak  -nostdinc++
499          -fvisibility-inlines-hidden
500          -fvtable-verify=[std|preinit|none]
501          -fvtv-counts -fvtv-debug
502          -fvisibility-ms-compat
503          -fext-numeric-literals
504          -Wabi=N  -Wabi-tag  -Wconversion-null  -Wctor-dtor-privacy
505          -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing
506          -Wnoexcept -Wnon-virtual-dtor  -Wreorder
507          -Weffc++  -Wstrict-null-sentinel
508          -Wno-non-template-friend  -Wold-style-cast
509          -Woverloaded-virtual  -Wno-pmf-conversions
510          -Wsign-promo
511
512_Objective-C and Objective-C++ Language Options_
513     *Note Options Controlling Objective-C and Objective-C++ Dialects:
514     Objective-C and Objective-C++ Dialect Options.
515          -fconstant-string-class=CLASS-NAME
516          -fgnu-runtime  -fnext-runtime
517          -fno-nil-receivers
518          -fobjc-abi-version=N
519          -fobjc-call-cxx-cdtors
520          -fobjc-direct-dispatch
521          -fobjc-exceptions
522          -fobjc-gc
523          -fobjc-nilcheck
524          -fobjc-std=objc1
525          -fno-local-ivars
526          -fivar-visibility=[public|protected|private|package]
527          -freplace-objc-classes
528          -fzero-link
529          -gen-decls
530          -Wassign-intercept
531          -Wno-protocol  -Wselector
532          -Wstrict-selector-match
533          -Wundeclared-selector
534
535_Language Independent Options_
536     *Note Options to Control Diagnostic Messages Formatting: Language
537     Independent Options.
538          -fmessage-length=N
539          -fdiagnostics-show-location=[once|every-line]
540          -fdiagnostics-color=[auto|never|always]
541          -fno-diagnostics-show-option -fno-diagnostics-show-caret
542
543_Warning Options_
544     *Note Options to Request or Suppress Warnings: Warning Options.
545          -fsyntax-only  -fmax-errors=N  -Wpedantic
546          -pedantic-errors
547          -w  -Wextra  -Wall  -Waddress  -Waggregate-return
548          -Waggressive-loop-optimizations -Warray-bounds -Warray-bounds=N
549          -Wbool-compare
550          -Wno-attributes -Wno-builtin-macro-redefined
551          -Wc90-c99-compat -Wc99-c11-compat
552          -Wc++-compat -Wc++11-compat -Wc++14-compat -Wcast-align  -Wcast-qual
553          -Wchar-subscripts -Wclobbered  -Wcomment -Wconditionally-supported
554          -Wconversion -Wcoverage-mismatch -Wdate-time -Wdelete-incomplete -Wno-cpp
555          -Wno-deprecated -Wno-deprecated-declarations -Wno-designated-init
556          -Wdisabled-optimization
557          -Wno-discarded-qualifiers -Wno-discarded-array-qualifiers
558          -Wno-div-by-zero -Wdouble-promotion -Wempty-body  -Wenum-compare
559          -Wno-endif-labels -Werror  -Werror=*
560          -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2
561          -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral
562          -Wformat-security  -Wformat-signedness  -Wformat-y2k
563          -Wframe-larger-than=LEN -Wno-free-nonheap-object -Wjump-misses-init
564          -Wignored-qualifiers  -Wincompatible-pointer-types
565          -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int
566          -Winit-self  -Winline  -Wno-int-conversion
567          -Wno-int-to-pointer-cast -Wno-invalid-offsetof
568          -Winvalid-pch -Wlarger-than=LEN  -Wunsafe-loop-optimizations
569          -Wlogical-op -Wlogical-not-parentheses -Wlong-long
570          -Wmain -Wmaybe-uninitialized -Wmemset-transposed-args -Wmissing-braces
571          -Wmissing-field-initializers -Wmissing-include-dirs
572          -Wno-multichar  -Wnonnull  -Wnormalized=[none|id|nfc|nfkc]
573           -Wodr  -Wno-overflow  -Wopenmp-simd
574          -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded
575          -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format
576          -Wpointer-arith  -Wno-pointer-to-int-cast
577          -Wredundant-decls  -Wno-return-local-addr
578          -Wreturn-type  -Wsequence-point  -Wshadow  -Wno-shadow-ivar
579          -Wshift-count-negative -Wshift-count-overflow
580          -Wsign-compare  -Wsign-conversion -Wfloat-conversion
581          -Wsizeof-pointer-memaccess  -Wsizeof-array-argument
582          -Wstack-protector -Wstack-usage=LEN -Wstrict-aliasing
583          -Wstrict-aliasing=n  -Wstrict-overflow -Wstrict-overflow=N
584          -Wsuggest-attribute=[pure|const|noreturn|format]
585          -Wsuggest-final-types  -Wsuggest-final-methods  -Wsuggest-override
586          -Wmissing-format-attribute
587          -Wswitch  -Wswitch-default  -Wswitch-enum -Wswitch-bool -Wsync-nand
588          -Wsystem-headers  -Wtrampolines  -Wtrigraphs  -Wtype-limits  -Wundef
589          -Wuninitialized  -Wunknown-pragmas  -Wno-pragmas
590          -Wunsuffixed-float-constants  -Wunused  -Wunused-function
591          -Wunused-label  -Wunused-local-typedefs -Wunused-parameter
592          -Wno-unused-result -Wunused-value  -Wunused-variable
593          -Wunused-but-set-parameter -Wunused-but-set-variable
594          -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance
595          -Wvla -Wvolatile-register-var  -Wwrite-strings
596          -Wzero-as-null-pointer-constant
597
598_C and Objective-C-only Warning Options_
599          -Wbad-function-cast  -Wmissing-declarations
600          -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
601          -Wold-style-declaration  -Wold-style-definition
602          -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
603          -Wdeclaration-after-statement -Wpointer-sign
604
605_Debugging Options_
606     *Note Options for Debugging Your Program or GCC: Debugging Options.
607          -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
608          -fsanitize=STYLE -fsanitize-recover -fsanitize-recover=STYLE
609          -fasan-shadow-offset=NUMBER -fsanitize-undefined-trap-on-error
610          -fcheck-pointer-bounds -fchkp-check-incomplete-type
611          -fchkp-first-field-has-own-bounds -fchkp-narrow-bounds
612          -fchkp-narrow-to-innermost-array -fchkp-optimize
613          -fchkp-use-fast-string-functions -fchkp-use-nochk-string-functions
614          -fchkp-use-static-bounds -fchkp-use-static-const-bounds
615          -fchkp-treat-zero-dynamic-size-as-infinite -fchkp-check-read
616          -fchkp-check-read -fchkp-check-write -fchkp-store-bounds
617          -fchkp-instrument-calls -fchkp-instrument-marked-only
618          -fchkp-use-wrappers
619          -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST
620          -fdisable-ipa-PASS_NAME
621          -fdisable-rtl-PASS_NAME
622          -fdisable-rtl-PASS-NAME=RANGE-LIST
623          -fdisable-tree-PASS_NAME
624          -fdisable-tree-PASS-NAME=RANGE-LIST
625          -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links
626          -fdump-translation-unit[-N]
627          -fdump-class-hierarchy[-N]
628          -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
629          -fdump-passes
630          -fdump-statistics
631          -fdump-tree-all
632          -fdump-tree-original[-N]
633          -fdump-tree-optimized[-N]
634          -fdump-tree-cfg -fdump-tree-alias
635          -fdump-tree-ch
636          -fdump-tree-ssa[-N] -fdump-tree-pre[-N]
637          -fdump-tree-ccp[-N] -fdump-tree-dce[-N]
638          -fdump-tree-gimple[-raw]
639          -fdump-tree-dom[-N]
640          -fdump-tree-dse[-N]
641          -fdump-tree-phiprop[-N]
642          -fdump-tree-phiopt[-N]
643          -fdump-tree-forwprop[-N]
644          -fdump-tree-copyrename[-N]
645          -fdump-tree-nrv -fdump-tree-vect
646          -fdump-tree-sink
647          -fdump-tree-sra[-N]
648          -fdump-tree-forwprop[-N]
649          -fdump-tree-fre[-N]
650          -fdump-tree-vtable-verify
651          -fdump-tree-vrp[-N]
652          -fdump-tree-storeccp[-N]
653          -fdump-final-insns=FILE
654          -fcompare-debug[=OPTS]  -fcompare-debug-second
655          -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types
656          -feliminate-unused-debug-symbols -femit-class-debug-always
657          -fenable-KIND-PASS
658          -fenable-KIND-PASS=RANGE-LIST
659          -fdebug-types-section -fmem-report-wpa
660          -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs
661          -fopt-info
662          -fopt-info-OPTIONS[=FILE]
663          -frandom-seed=STRING -fsched-verbose=N
664          -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose
665          -fstack-usage  -ftest-coverage  -ftime-report -fvar-tracking
666          -fvar-tracking-assignments  -fvar-tracking-assignments-toggle
667          -g  -gLEVEL  -gtoggle  -gcoff  -gdwarf-VERSION
668          -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches
669          -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf
670          -gvms  -gxcoff  -gxcoff+ -gz[=TYPE]
671          -fno-merge-debug-strings -fno-dwarf2-cfi-asm
672          -fdebug-prefix-map=OLD=NEW
673          -femit-struct-debug-baseonly -femit-struct-debug-reduced
674          -femit-struct-debug-detailed[=SPEC-LIST]
675          -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name
676          -print-multi-directory  -print-multi-lib  -print-multi-os-directory
677          -print-prog-name=PROGRAM  -print-search-dirs  -Q
678          -print-sysroot -print-sysroot-headers-suffix
679          -save-temps -save-temps=cwd -save-temps=obj -time[=FILE]
680
681_Optimization Options_
682     *Note Options that Control Optimization: Optimize Options.
683          -faggressive-loop-optimizations -falign-functions[=N]
684          -falign-jumps[=N]
685          -falign-labels[=N] -falign-loops[=N]
686          -fassociative-math -fauto-profile -fauto-profile[=PATH]
687          -fauto-inc-dec -fbranch-probabilities
688          -fbranch-target-load-optimize -fbranch-target-load-optimize2
689          -fbtr-bb-exclusive -fcaller-saves
690          -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack
691          -fcompare-elim -fcprop-registers -fcrossjumping
692          -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules
693          -fcx-limited-range
694          -fdata-sections -fdce -fdelayed-branch
695          -fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively
696          -fdevirtualize-at-ltrans -fdse
697          -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects
698          -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=STYLE
699          -fforward-propagate -ffp-contract=STYLE -ffunction-sections
700          -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity
701          -fgcse-sm -fhoist-adjacent-loads -fif-conversion
702          -fif-conversion2 -findirect-inlining
703          -finline-functions -finline-functions-called-once -finline-limit=N
704          -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-cp-alignment
705          -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference -fipa-icf
706          -fira-algorithm=ALGORITHM
707          -fira-region=REGION -fira-hoist-pressure
708          -fira-loop-pressure -fno-ira-share-save-slots
709          -fno-ira-share-spill-slots -fira-verbose=N
710          -fisolate-erroneous-paths-dereference -fisolate-erroneous-paths-attribute
711          -fivopts -fkeep-inline-functions -fkeep-static-consts
712          -flive-range-shrinkage
713          -floop-block -floop-interchange -floop-strip-mine
714          -floop-unroll-and-jam -floop-nest-optimize
715          -floop-parallelize-all -flra-remat -flto -flto-compression-level
716          -flto-partition=ALG -flto-report -flto-report-wpa -fmerge-all-constants
717          -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves
718          -fmove-loop-invariants -fno-branch-count-reg
719          -fno-defer-pop -fno-function-cse -fno-guess-branch-probability
720          -fno-inline -fno-math-errno -fno-peephole -fno-peephole2
721          -fno-sched-interblock -fno-sched-spec -fno-signed-zeros
722          -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss
723          -fomit-frame-pointer -foptimize-sibling-calls
724          -fpartial-inlining -fpeel-loops -fpredictive-commoning
725          -fprefetch-loop-arrays -fprofile-report
726          -fprofile-correction -fprofile-dir=PATH -fprofile-generate
727          -fprofile-generate=PATH
728          -fprofile-use -fprofile-use=PATH -fprofile-values
729          -fprofile-reorder-functions
730          -freciprocal-math -free -frename-registers -freorder-blocks
731          -freorder-blocks-and-partition -freorder-functions
732          -frerun-cse-after-loop -freschedule-modulo-scheduled-loops
733          -frounding-math -fsched2-use-superblocks -fsched-pressure
734          -fsched-spec-load -fsched-spec-load-dangerous
735          -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N]
736          -fsched-group-heuristic -fsched-critical-path-heuristic
737          -fsched-spec-insn-heuristic -fsched-rank-heuristic
738          -fsched-last-insn-heuristic -fsched-dep-count-heuristic
739          -fschedule-fusion
740          -fschedule-insns -fschedule-insns2 -fsection-anchors
741          -fselective-scheduling -fselective-scheduling2
742          -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
743          -fsemantic-interposition
744          -fshrink-wrap -fsignaling-nans -fsingle-precision-constant
745          -fsplit-ivs-in-unroller -fsplit-wide-types -fssa-phiopt
746          -fstack-protector -fstack-protector-all -fstack-protector-strong
747          -fstack-protector-explicit -fstdarg-opt -fstrict-aliasing
748          -fstrict-overflow -fthread-jumps -ftracer -ftree-bit-ccp
749          -ftree-builtin-call-dce -ftree-ccp -ftree-ch
750          -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
751          -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse
752          -ftree-forwprop -ftree-fre -ftree-loop-if-convert
753          -ftree-loop-if-convert-stores -ftree-loop-im
754          -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns
755          -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
756          -ftree-loop-vectorize
757          -ftree-parallelize-loops=N -ftree-pre -ftree-partial-pre -ftree-pta
758          -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra
759          -ftree-switch-conversion -ftree-tail-merge -ftree-ter
760          -ftree-vectorize -ftree-vrp
761          -funit-at-a-time -funroll-all-loops -funroll-loops
762          -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops
763          -fipa-ra -fvariable-expansion-in-unroller -fvect-cost-model -fvpt
764          -fweb -fwhole-program -fwpa -fuse-linker-plugin
765          --param NAME=VALUE
766          -O  -O0  -O1  -O2  -O3  -Os -Ofast -Og
767
768_Preprocessor Options_
769     *Note Options Controlling the Preprocessor: Preprocessor Options.
770          -AQUESTION=ANSWER
771          -A-QUESTION[=ANSWER]
772          -C  -dD  -dI  -dM  -dN
773          -DMACRO[=DEFN]  -E  -H
774          -idirafter DIR
775          -include FILE  -imacros FILE
776          -iprefix FILE  -iwithprefix DIR
777          -iwithprefixbefore DIR  -isystem DIR
778          -imultilib DIR -isysroot DIR
779          -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc
780          -P  -fdebug-cpp -ftrack-macro-expansion -fworking-directory
781          -remap -trigraphs  -undef  -UMACRO
782          -Wp,OPTION -Xpreprocessor OPTION -no-integrated-cpp
783
784_Assembler Option_
785     *Note Passing Options to the Assembler: Assembler Options.
786          -Wa,OPTION  -Xassembler OPTION
787
788_Linker Options_
789     *Note Options for Linking: Link Options.
790          OBJECT-FILE-NAME  -fuse-ld=LINKER -lLIBRARY
791          -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic
792          -s  -static -static-libgcc -static-libstdc++
793          -static-libasan -static-libtsan -static-liblsan -static-libubsan
794          -static-libmpx -static-libmpxwrappers
795          -shared -shared-libgcc  -symbolic
796          -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
797          -u SYMBOL -z KEYWORD
798
799_Directory Options_
800     *Note Options for Directory Search: Directory Options.
801          -BPREFIX -IDIR -iplugindir=DIR
802          -iquoteDIR -LDIR -specs=FILE -I-
803          --sysroot=DIR --no-sysroot-suffix
804
805_Machine Dependent Options_
806     *Note Hardware Models and Configurations: Submodel Options.
807
808     _AArch64 Options_
809          -mabi=NAME  -mbig-endian  -mlittle-endian
810          -mgeneral-regs-only
811          -mcmodel=tiny  -mcmodel=small  -mcmodel=large
812          -mstrict-align
813          -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
814          -mtls-dialect=desc  -mtls-dialect=traditional
815          -mfix-cortex-a53-835769  -mno-fix-cortex-a53-835769
816          -mfix-cortex-a53-843419  -mno-fix-cortex-a53-843419
817          -march=NAME  -mcpu=NAME  -mtune=NAME
818
819     _Adapteva Epiphany Options_
820          -mhalf-reg-file -mprefer-short-insn-regs
821          -mbranch-cost=NUM -mcmove -mnops=NUM -msoft-cmpsf
822          -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=NUM
823          -mround-nearest -mlong-calls -mshort-calls -msmall16
824          -mfp-mode=MODE -mvect-double -max-vect-align=NUM
825          -msplit-vecmove-early -m1reg-REG
826
827     _ARC Options_
828          -mbarrel-shifter
829          -mcpu=CPU -mA6 -mARC600 -mA7 -mARC700
830          -mdpfp -mdpfp-compact -mdpfp-fast -mno-dpfp-lrsr
831          -mea -mno-mpy -mmul32x16 -mmul64
832          -mnorm -mspfp -mspfp-compact -mspfp-fast -msimd -msoft-float -mswap
833          -mcrc -mdsp-packa -mdvbf -mlock -mmac-d16 -mmac-24 -mrtsc -mswape
834          -mtelephony -mxy -misize -mannotate-align -marclinux -marclinux_prof
835          -mepilogue-cfi -mlong-calls -mmedium-calls -msdata
836          -mucb-mcount -mvolatile-cache
837          -malign-call -mauto-modify-reg -mbbit-peephole -mno-brcc
838          -mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi
839          -mexpand-adddi -mindexed-loads -mlra -mlra-priority-none
840          -mlra-priority-compact mlra-priority-noncompact -mno-millicode
841          -mmixed-code -mq-class -mRcq -mRcw -msize-level=LEVEL
842          -mtune=CPU -mmultcost=NUM -munalign-prob-threshold=PROBABILITY
843
844     _ARM Options_
845          -mapcs-frame  -mno-apcs-frame
846          -mabi=NAME
847          -mapcs-stack-check  -mno-apcs-stack-check
848          -mapcs-float  -mno-apcs-float
849          -mapcs-reentrant  -mno-apcs-reentrant
850          -msched-prolog  -mno-sched-prolog
851          -mlittle-endian  -mbig-endian
852          -mfloat-abi=NAME
853          -mfp16-format=NAME
854          -mthumb-interwork  -mno-thumb-interwork
855          -mcpu=NAME  -march=NAME  -mfpu=NAME
856          -mtune=NAME -mprint-tune-info
857          -mstructure-size-boundary=N
858          -mabort-on-noreturn
859          -mlong-calls  -mno-long-calls
860          -msingle-pic-base  -mno-single-pic-base
861          -mpic-register=REG
862          -mnop-fun-dllimport
863          -mpoke-function-name
864          -mthumb  -marm
865          -mtpcs-frame  -mtpcs-leaf-frame
866          -mcaller-super-interworking  -mcallee-super-interworking
867          -mtp=NAME -mtls-dialect=DIALECT
868          -mword-relocations
869          -mfix-cortex-m3-ldrd
870          -munaligned-access
871          -mneon-for-64bits
872          -mslow-flash-data
873          -masm-syntax-unified
874          -mrestrict-it
875
876     _AVR Options_
877          -mmcu=MCU -maccumulate-args -mbranch-cost=COST
878          -mcall-prologues -mint8 -mn_flash=SIZE -mno-interrupts
879          -mrelax -mrmw -mstrict-X -mtiny-stack -nodevicelib -Waddr-space-convert
880
881     _Blackfin Options_
882          -mcpu=CPU[-SIREVISION]
883          -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
884          -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
885          -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library
886          -mno-id-shared-library  -mshared-library-id=N
887          -mleaf-id-shared-library  -mno-leaf-id-shared-library
888          -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
889          -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram
890          -micplb
891
892     _C6X Options_
893          -mbig-endian  -mlittle-endian -march=CPU
894          -msim -msdata=SDATA-TYPE
895
896     _CRIS Options_
897          -mcpu=CPU  -march=CPU  -mtune=CPU
898          -mmax-stack-frame=N  -melinux-stacksize=N
899          -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
900          -mstack-align  -mdata-align  -mconst-align
901          -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
902          -melf  -maout  -melinux  -mlinux  -sim  -sim2
903          -mmul-bug-workaround  -mno-mul-bug-workaround
904
905     _CR16 Options_
906          -mmac
907          -mcr16cplus -mcr16c
908          -msim -mint32 -mbit-ops
909          -mdata-model=MODEL
910
911     _Darwin Options_
912          -all_load  -allowable_client  -arch  -arch_errors_fatal
913          -arch_only  -bind_at_load  -bundle  -bundle_loader
914          -client_name  -compatibility_version  -current_version
915          -dead_strip
916          -dependency-file  -dylib_file  -dylinker_install_name
917          -dynamic  -dynamiclib  -exported_symbols_list
918          -filelist  -flat_namespace  -force_cpusubtype_ALL
919          -force_flat_namespace  -headerpad_max_install_names
920          -iframework
921          -image_base  -init  -install_name  -keep_private_externs
922          -multi_module  -multiply_defined  -multiply_defined_unused
923          -noall_load   -no_dead_strip_inits_and_terms
924          -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit
925          -pagezero_size  -prebind  -prebind_all_twolevel_modules
926          -private_bundle  -read_only_relocs  -sectalign
927          -sectobjectsymbols  -whyload  -seg1addr
928          -sectcreate  -sectobjectsymbols  -sectorder
929          -segaddr -segs_read_only_addr -segs_read_write_addr
930          -seg_addr_table  -seg_addr_table_filename  -seglinkedit
931          -segprot  -segs_read_only_addr  -segs_read_write_addr
932          -single_module  -static  -sub_library  -sub_umbrella
933          -twolevel_namespace  -umbrella  -undefined
934          -unexported_symbols_list  -weak_reference_mismatches
935          -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION
936          -mkernel -mone-byte-bool
937
938     _DEC Alpha Options_
939          -mno-fp-regs  -msoft-float
940          -mieee  -mieee-with-inexact  -mieee-conformant
941          -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
942          -mtrap-precision=MODE  -mbuild-constants
943          -mcpu=CPU-TYPE  -mtune=CPU-TYPE
944          -mbwx  -mmax  -mfix  -mcix
945          -mfloat-vax  -mfloat-ieee
946          -mexplicit-relocs  -msmall-data  -mlarge-data
947          -msmall-text  -mlarge-text
948          -mmemory-latency=TIME
949
950     _FR30 Options_
951          -msmall-model -mno-lsim
952
953     _FRV Options_
954          -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
955          -mhard-float  -msoft-float
956          -malloc-cc  -mfixed-cc  -mdword  -mno-dword
957          -mdouble  -mno-double
958          -mmedia  -mno-media  -mmuladd  -mno-muladd
959          -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic
960          -mlinked-fp  -mlong-calls  -malign-labels
961          -mlibrary-pic  -macc-4  -macc-8
962          -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
963          -moptimize-membar -mno-optimize-membar
964          -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
965          -mvliw-branch  -mno-vliw-branch
966          -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
967          -mno-nested-cond-exec  -mtomcat-stats
968          -mTLS -mtls
969          -mcpu=CPU
970
971     _GNU/Linux Options_
972          -mglibc -muclibc -mbionic -mandroid
973          -tno-android-cc -tno-android-ld
974
975     _H8/300 Options_
976          -mrelax  -mh  -ms  -mn  -mexr -mno-exr  -mint32  -malign-300
977
978     _HPPA Options_
979          -march=ARCHITECTURE-TYPE
980          -mdisable-fpregs  -mdisable-indexing
981          -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
982          -mfixed-range=REGISTER-RANGE
983          -mjump-in-delay -mlinker-opt -mlong-calls
984          -mlong-load-store  -mno-disable-fpregs
985          -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
986          -mno-jump-in-delay  -mno-long-load-store
987          -mno-portable-runtime  -mno-soft-float
988          -mno-space-regs  -msoft-float  -mpa-risc-1-0
989          -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
990          -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
991          -munix=UNIX-STD  -nolibdld  -static  -threads
992
993     _IA-64 Options_
994          -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
995          -mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata
996          -mconstant-gp  -mauto-pic  -mfused-madd
997          -minline-float-divide-min-latency
998          -minline-float-divide-max-throughput
999          -mno-inline-float-divide
1000          -minline-int-divide-min-latency
1001          -minline-int-divide-max-throughput
1002          -mno-inline-int-divide
1003          -minline-sqrt-min-latency -minline-sqrt-max-throughput
1004          -mno-inline-sqrt
1005          -mdwarf2-asm -mearly-stop-bits
1006          -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE
1007          -mtune=CPU-TYPE -milp32 -mlp64
1008          -msched-br-data-spec -msched-ar-data-spec -msched-control-spec
1009          -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec
1010          -msched-spec-ldc -msched-spec-control-ldc
1011          -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns
1012          -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path
1013          -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost
1014          -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS
1015
1016     _LM32 Options_
1017          -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled
1018          -msign-extend-enabled -muser-enabled
1019
1020     _M32R/D Options_
1021          -m32r2 -m32rx -m32r
1022          -mdebug
1023          -malign-loops -mno-align-loops
1024          -missue-rate=NUMBER
1025          -mbranch-cost=NUMBER
1026          -mmodel=CODE-SIZE-MODEL-TYPE
1027          -msdata=SDATA-TYPE
1028          -mno-flush-func -mflush-func=NAME
1029          -mno-flush-trap -mflush-trap=NUMBER
1030          -G NUM
1031
1032     _M32C Options_
1033          -mcpu=CPU -msim -memregs=NUMBER
1034
1035     _M680x0 Options_
1036          -march=ARCH  -mcpu=CPU  -mtune=TUNE
1037          -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
1038          -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
1039          -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
1040          -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
1041          -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
1042          -malign-int  -mstrict-align  -msep-data  -mno-sep-data
1043          -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
1044          -mxgot -mno-xgot
1045
1046     _MCore Options_
1047          -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
1048          -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
1049          -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
1050          -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
1051          -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
1052
1053     _MeP Options_
1054          -mabsdiff -mall-opts -maverage -mbased=N -mbitops
1055          -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2
1056          -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax
1057          -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf
1058          -mtiny=N
1059
1060     _MicroBlaze Options_
1061          -msoft-float -mhard-float -msmall-divides -mcpu=CPU
1062          -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift
1063          -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss
1064          -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
1065          -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-APP-MODEL
1066
1067     _MIPS Options_
1068          -EL  -EB  -march=ARCH  -mtune=ARCH
1069          -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5
1070          -mips32r6  -mips64  -mips64r2  -mips64r3  -mips64r5  -mips64r6
1071          -mips16  -mno-mips16  -mflip-mips16
1072          -minterlink-compressed -mno-interlink-compressed
1073          -minterlink-mips16  -mno-interlink-mips16
1074          -mabi=ABI  -mabicalls  -mno-abicalls
1075          -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
1076          -mgp32  -mgp64  -mfp32  -mfpxx  -mfp64  -mhard-float  -msoft-float
1077          -mno-float  -msingle-float  -mdouble-float
1078          -modd-spreg -mno-odd-spreg
1079          -mabs=MODE  -mnan=ENCODING
1080          -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
1081          -mmcu -mmno-mcu
1082          -meva -mno-eva
1083          -mvirt -mno-virt
1084          -mxpa -mno-xpa
1085          -mmicromips -mno-micromips
1086          -mfpu=FPU-TYPE
1087          -msmartmips  -mno-smartmips
1088          -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
1089          -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
1090          -mlong64  -mlong32  -msym32  -mno-sym32
1091          -GNUM  -mlocal-sdata  -mno-local-sdata
1092          -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
1093          -membedded-data  -mno-embedded-data
1094          -muninit-const-in-rodata  -mno-uninit-const-in-rodata
1095          -mcode-readable=SETTING
1096          -msplit-addresses  -mno-split-addresses
1097          -mexplicit-relocs  -mno-explicit-relocs
1098          -mcheck-zero-division  -mno-check-zero-division
1099          -mdivide-traps  -mdivide-breaks
1100          -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
1101          -mmad -mno-mad -mimadd -mno-imadd -mfused-madd  -mno-fused-madd  -nocpp
1102          -mfix-24k -mno-fix-24k
1103          -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
1104          -mfix-r10000 -mno-fix-r10000  -mfix-rm7000 -mno-fix-rm7000
1105          -mfix-vr4120  -mno-fix-vr4120
1106          -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
1107          -mflush-func=FUNC  -mno-flush-func
1108          -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
1109          -mfp-exceptions -mno-fp-exceptions
1110          -mvr4130-align -mno-vr4130-align -msynci -mno-synci
1111          -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address
1112
1113     _MMIX Options_
1114          -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
1115          -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
1116          -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
1117          -mno-base-addresses  -msingle-exit  -mno-single-exit
1118
1119     _MN10300 Options_
1120          -mmult-bug  -mno-mult-bug
1121          -mno-am33 -mam33 -mam33-2 -mam34
1122          -mtune=CPU-TYPE
1123          -mreturn-pointer-on-d0
1124          -mno-crt0  -mrelax -mliw -msetlb
1125
1126     _Moxie Options_
1127          -meb -mel -mmul.x -mno-crt0
1128
1129     _MSP430 Options_
1130          -msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax
1131          -mhwmult= -minrt
1132
1133     _NDS32 Options_
1134          -mbig-endian -mlittle-endian
1135          -mreduced-regs -mfull-regs
1136          -mcmov -mno-cmov
1137          -mperf-ext -mno-perf-ext
1138          -mv3push -mno-v3push
1139          -m16bit -mno-16bit
1140          -misr-vector-size=NUM
1141          -mcache-block-size=NUM
1142          -march=ARCH
1143          -mcmodel=CODE-MODEL
1144          -mctor-dtor -mrelax
1145
1146     _Nios II Options_
1147          -G NUM -mgpopt=OPTION -mgpopt -mno-gpopt
1148          -mel -meb
1149          -mno-bypass-cache -mbypass-cache
1150          -mno-cache-volatile -mcache-volatile
1151          -mno-fast-sw-div -mfast-sw-div
1152          -mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div
1153          -mcustom-INSN=N -mno-custom-INSN
1154          -mcustom-fpu-cfg=NAME
1155          -mhal -msmallc -msys-crt0=NAME -msys-lib=NAME
1156
1157     _Nvidia PTX Options_
1158          -m32 -m64 -mmainkernel
1159
1160     _PDP-11 Options_
1161          -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
1162          -mbcopy  -mbcopy-builtin  -mint32  -mno-int16
1163          -mint16  -mno-int32  -mfloat32  -mno-float64
1164          -mfloat64  -mno-float32  -mabshi  -mno-abshi
1165          -mbranch-expensive  -mbranch-cheap
1166          -munix-asm  -mdec-asm
1167
1168     _picoChip Options_
1169          -mae=AE_TYPE -mvliw-lookahead=N
1170          -msymbol-as-address -mno-inefficient-warnings
1171
1172     _PowerPC Options_ See RS/6000 and PowerPC Options.
1173
1174     _RL78 Options_
1175          -msim -mmul=none -mmul=g13 -mmul=rl78
1176          -m64bit-doubles -m32bit-doubles
1177
1178     _RS/6000 and PowerPC Options_
1179          -mcpu=CPU-TYPE
1180          -mtune=CPU-TYPE
1181          -mcmodel=CODE-MODEL
1182          -mpowerpc64
1183          -maltivec  -mno-altivec
1184          -mpowerpc-gpopt  -mno-powerpc-gpopt
1185          -mpowerpc-gfxopt  -mno-powerpc-gfxopt
1186          -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd
1187          -mfprnd  -mno-fprnd
1188          -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
1189          -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
1190          -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
1191          -malign-power  -malign-natural
1192          -msoft-float  -mhard-float  -mmultiple  -mno-multiple
1193          -msingle-float -mdouble-float -msimple-fpu
1194          -mstring  -mno-string  -mupdate  -mno-update
1195          -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
1196          -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
1197          -mstrict-align  -mno-strict-align  -mrelocatable
1198          -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
1199          -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
1200          -mdynamic-no-pic  -maltivec -mswdiv  -msingle-pic-base
1201          -mprioritize-restricted-insns=PRIORITY
1202          -msched-costly-dep=DEPENDENCE_TYPE
1203          -minsert-sched-nops=SCHEME
1204          -mcall-sysv  -mcall-netbsd
1205          -maix-struct-return  -msvr4-struct-return
1206          -mabi=ABI-TYPE -msecure-plt -mbss-plt
1207          -mblock-move-inline-limit=NUM
1208          -misel -mno-isel
1209          -misel=yes  -misel=no
1210          -mspe -mno-spe
1211          -mspe=yes  -mspe=no
1212          -mpaired
1213          -mgen-cell-microcode -mwarn-cell-microcode
1214          -mvrsave -mno-vrsave
1215          -mmulhw -mno-mulhw
1216          -mdlmzb -mno-dlmzb
1217          -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
1218          -mprototype  -mno-prototype
1219          -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
1220          -msdata=OPT  -mvxworks  -G NUM  -pthread
1221          -mrecip -mrecip=OPT -mno-recip -mrecip-precision
1222          -mno-recip-precision
1223          -mveclibabi=TYPE -mfriz -mno-friz
1224          -mpointers-to-nested-functions -mno-pointers-to-nested-functions
1225          -msave-toc-indirect -mno-save-toc-indirect
1226          -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector
1227          -mcrypto -mno-crypto -mdirect-move -mno-direct-move
1228          -mquad-memory -mno-quad-memory
1229          -mquad-memory-atomic -mno-quad-memory-atomic
1230          -mcompat-align-parm -mno-compat-align-parm
1231          -mupper-regs-df -mno-upper-regs-df -mupper-regs-sf -mno-upper-regs-sf
1232          -mupper-regs -mno-upper-regs
1233
1234     _RX Options_
1235          -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu
1236          -mcpu=
1237          -mbig-endian-data -mlittle-endian-data
1238          -msmall-data
1239          -msim  -mno-sim
1240          -mas100-syntax -mno-as100-syntax
1241          -mrelax
1242          -mmax-constant-size=
1243          -mint-register=
1244          -mpid
1245          -mno-warn-multiple-fast-interrupts
1246          -msave-acc-in-interrupts
1247
1248     _S/390 and zSeries Options_
1249          -mtune=CPU-TYPE  -march=CPU-TYPE
1250          -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp
1251          -mlong-double-64 -mlong-double-128
1252          -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack
1253          -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle
1254          -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
1255          -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
1256          -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
1257          -mhotpatch=HALFWORDS,HALFWORDS
1258
1259     _Score Options_
1260          -meb -mel
1261          -mnhwloop
1262          -muls
1263          -mmac
1264          -mscore5 -mscore5u -mscore7 -mscore7d
1265
1266     _SH Options_
1267          -m1  -m2  -m2e
1268          -m2a-nofpu -m2a-single-only -m2a-single -m2a
1269          -m3  -m3e
1270          -m4-nofpu  -m4-single-only  -m4-single  -m4
1271          -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
1272          -m5-64media  -m5-64media-nofpu
1273          -m5-32media  -m5-32media-nofpu
1274          -m5-compact  -m5-compact-nofpu
1275          -mb  -ml  -mdalign  -mrelax
1276          -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave
1277          -mieee -mno-ieee -mbitops  -misize  -minline-ic_invalidate -mpadstruct
1278          -mspace -mprefergot  -musermode -multcost=NUMBER -mdiv=STRATEGY
1279          -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE
1280          -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed
1281          -maccumulate-outgoing-args -minvalid-symbols
1282          -matomic-model=ATOMIC-MODEL
1283          -mbranch-cost=NUM -mzdcbranch -mno-zdcbranch
1284          -mcbranch-force-delay-slot
1285          -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra
1286          -mpretend-cmove -mtas
1287
1288     _Solaris 2 Options_
1289          -mclear-hwcap -mno-clear-hwcap -mimpure-text  -mno-impure-text
1290          -pthreads -pthread
1291
1292     _SPARC Options_
1293          -mcpu=CPU-TYPE
1294          -mtune=CPU-TYPE
1295          -mcmodel=CODE-MODEL
1296          -mmemory-model=MEM-MODEL
1297          -m32  -m64  -mapp-regs  -mno-app-regs
1298          -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat
1299          -mfpu  -mno-fpu  -mhard-float  -msoft-float
1300          -mhard-quad-float  -msoft-quad-float
1301          -mstack-bias  -mno-stack-bias
1302          -munaligned-doubles  -mno-unaligned-doubles
1303          -muser-mode  -mno-user-mode
1304          -mv8plus  -mno-v8plus  -mvis  -mno-vis
1305          -mvis2  -mno-vis2  -mvis3  -mno-vis3
1306          -mcbcond -mno-cbcond
1307          -mfmaf  -mno-fmaf  -mpopc  -mno-popc
1308          -mfix-at697f -mfix-ut699
1309
1310     _SPU Options_
1311          -mwarn-reloc -merror-reloc
1312          -msafe-dma -munsafe-dma
1313          -mbranch-hints
1314          -msmall-mem -mlarge-mem -mstdmain
1315          -mfixed-range=REGISTER-RANGE
1316          -mea32 -mea64
1317          -maddress-space-conversion -mno-address-space-conversion
1318          -mcache-size=CACHE-SIZE
1319          -matomic-updates -mno-atomic-updates
1320
1321     _System V Options_
1322          -Qy  -Qn  -YP,PATHS  -Ym,DIR
1323
1324     _TILE-Gx Options_
1325          -mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian
1326          -mcmodel=CODE-MODEL
1327
1328     _TILEPro Options_
1329          -mcpu=CPU -m32
1330
1331     _V850 Options_
1332          -mlong-calls  -mno-long-calls  -mep  -mno-ep
1333          -mprolog-function  -mno-prolog-function  -mspace
1334          -mtda=N  -msda=N  -mzda=N
1335          -mapp-regs  -mno-app-regs
1336          -mdisable-callt  -mno-disable-callt
1337          -mv850e2v3 -mv850e2 -mv850e1 -mv850es
1338          -mv850e -mv850 -mv850e3v5
1339          -mloop
1340          -mrelax
1341          -mlong-jumps
1342          -msoft-float
1343          -mhard-float
1344          -mgcc-abi
1345          -mrh850-abi
1346          -mbig-switch
1347
1348     _VAX Options_
1349          -mg  -mgnu  -munix
1350
1351     _Visium Options_
1352          -mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float
1353          -mcpu=CPU-TYPE -mtune=CPU-TYPE -msv-mode -muser-mode
1354
1355     _VMS Options_
1356          -mvms-return-codes -mdebug-main=PREFIX -mmalloc64
1357          -mpointer-size=SIZE
1358
1359     _VxWorks Options_
1360          -mrtp  -non-static  -Bstatic  -Bdynamic
1361          -Xbind-lazy  -Xbind-now
1362
1363     _x86 Options_
1364          -mtune=CPU-TYPE  -march=CPU-TYPE
1365          -mtune-ctrl=FEATURE-LIST -mdump-tune-features -mno-default
1366          -mfpmath=UNIT
1367          -masm=DIALECT  -mno-fancy-math-387
1368          -mno-fp-ret-in-387  -msoft-float
1369          -mno-wide-multiply  -mrtd  -malign-double
1370          -mpreferred-stack-boundary=NUM
1371          -mincoming-stack-boundary=NUM
1372          -mcld -mcx16 -msahf -mmovbe -mcrc32
1373          -mrecip -mrecip=OPT
1374          -mvzeroupper -mprefer-avx128
1375          -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx
1376          -mavx2 -mavx512f -mavx512pf -mavx512er -mavx512cd -msha
1377          -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1
1378          -mclflushopt -mxsavec -mxsaves
1379          -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt
1380          -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -mthreads
1381          -mno-align-stringops  -minline-all-stringops
1382          -minline-stringops-dynamically -mstringop-strategy=ALG
1383          -mmemcpy-strategy=STRATEGY -mmemset-strategy=STRATEGY
1384          -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
1385          -m96bit-long-double -mlong-double-64 -mlong-double-80 -mlong-double-128
1386          -mregparm=NUM  -msseregparm
1387          -mveclibabi=TYPE -mvect8-ret-in-mem
1388          -mpc32 -mpc64 -mpc80 -mstackrealign
1389          -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs
1390          -mcmodel=CODE-MODEL -mabi=NAME -maddress-mode=MODE
1391          -m32 -m64 -mx32 -m16 -mlarge-data-threshold=NUM
1392          -msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv
1393          -mavx256-split-unaligned-load -mavx256-split-unaligned-store
1394          -malign-data=TYPE -mstack-protector-guard=GUARD
1395
1396     _x86 Windows Options_
1397          -mconsole -mcygwin -mno-cygwin -mdll
1398          -mnop-fun-dllimport -mthread
1399          -municode -mwin32 -mwindows -fno-set-stack-executable
1400
1401     _Xstormy16 Options_
1402          -msim
1403
1404     _Xtensa Options_
1405          -mconst16 -mno-const16
1406          -mfused-madd  -mno-fused-madd
1407          -mforce-no-pic
1408          -mserialize-volatile  -mno-serialize-volatile
1409          -mtext-section-literals  -mno-text-section-literals
1410          -mtarget-align  -mno-target-align
1411          -mlongcalls  -mno-longcalls
1412
1413     _zSeries Options_ See S/390 and zSeries Options.
1414
1415_Code Generation Options_
1416     *Note Options for Code Generation Conventions: Code Gen Options.
1417          -fcall-saved-REG  -fcall-used-REG
1418          -ffixed-REG  -fexceptions
1419          -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables
1420          -fasynchronous-unwind-tables
1421          -fno-gnu-unique
1422          -finhibit-size-directive  -finstrument-functions
1423          -finstrument-functions-exclude-function-list=SYM,SYM,...
1424          -finstrument-functions-exclude-file-list=FILE,FILE,...
1425          -fno-common  -fno-ident
1426          -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
1427          -fno-jump-tables
1428          -frecord-gcc-switches
1429          -freg-struct-return  -fshort-enums
1430          -fshort-double  -fshort-wchar
1431          -fverbose-asm  -fpack-struct[=N]  -fstack-check
1432          -fstack-limit-register=REG  -fstack-limit-symbol=SYM
1433          -fno-stack-limit -fsplit-stack
1434          -fleading-underscore  -ftls-model=MODEL
1435          -fstack-reuse=REUSE_LEVEL
1436          -ftrapv  -fwrapv  -fbounds-check
1437          -fvisibility=[default|internal|hidden|protected]
1438          -fstrict-volatile-bitfields -fsync-libcalls
1439
1440
1441
1442File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
1443
14443.2 Options Controlling the Kind of Output
1445==========================================
1446
1447Compilation can involve up to four stages: preprocessing, compilation
1448proper, assembly and linking, always in that order.  GCC is capable of
1449preprocessing and compiling several files either into several assembler
1450input files, or into one assembler input file; then each assembler
1451input file produces an object file, and linking combines all the object
1452files (those newly compiled, and those specified as input) into an
1453executable file.
1454
1455 For any given input file, the file name suffix determines what kind of
1456compilation is done:
1457
1458`FILE.c'
1459     C source code that must be preprocessed.
1460
1461`FILE.i'
1462     C source code that should not be preprocessed.
1463
1464`FILE.ii'
1465     C++ source code that should not be preprocessed.
1466
1467`FILE.m'
1468     Objective-C source code.  Note that you must link with the
1469     `libobjc' library to make an Objective-C program work.
1470
1471`FILE.mi'
1472     Objective-C source code that should not be preprocessed.
1473
1474`FILE.mm'
1475`FILE.M'
1476     Objective-C++ source code.  Note that you must link with the
1477     `libobjc' library to make an Objective-C++ program work.  Note
1478     that `.M' refers to a literal capital M.
1479
1480`FILE.mii'
1481     Objective-C++ source code that should not be preprocessed.
1482
1483`FILE.h'
1484     C, C++, Objective-C or Objective-C++ header file to be turned into
1485     a precompiled header (default), or C, C++ header file to be turned
1486     into an Ada spec (via the `-fdump-ada-spec' switch).
1487
1488`FILE.cc'
1489`FILE.cp'
1490`FILE.cxx'
1491`FILE.cpp'
1492`FILE.CPP'
1493`FILE.c++'
1494`FILE.C'
1495     C++ source code that must be preprocessed.  Note that in `.cxx',
1496     the last two letters must both be literally `x'.  Likewise, `.C'
1497     refers to a literal capital C.
1498
1499`FILE.mm'
1500`FILE.M'
1501     Objective-C++ source code that must be preprocessed.
1502
1503`FILE.mii'
1504     Objective-C++ source code that should not be preprocessed.
1505
1506`FILE.hh'
1507`FILE.H'
1508`FILE.hp'
1509`FILE.hxx'
1510`FILE.hpp'
1511`FILE.HPP'
1512`FILE.h++'
1513`FILE.tcc'
1514     C++ header file to be turned into a precompiled header or Ada spec.
1515
1516`FILE.f'
1517`FILE.for'
1518`FILE.ftn'
1519     Fixed form Fortran source code that should not be preprocessed.
1520
1521`FILE.F'
1522`FILE.FOR'
1523`FILE.fpp'
1524`FILE.FPP'
1525`FILE.FTN'
1526     Fixed form Fortran source code that must be preprocessed (with the
1527     traditional preprocessor).
1528
1529`FILE.f90'
1530`FILE.f95'
1531`FILE.f03'
1532`FILE.f08'
1533     Free form Fortran source code that should not be preprocessed.
1534
1535`FILE.F90'
1536`FILE.F95'
1537`FILE.F03'
1538`FILE.F08'
1539     Free form Fortran source code that must be preprocessed (with the
1540     traditional preprocessor).
1541
1542`FILE.go'
1543     Go source code.
1544
1545`FILE.ads'
1546     Ada source code file that contains a library unit declaration (a
1547     declaration of a package, subprogram, or generic, or a generic
1548     instantiation), or a library unit renaming declaration (a package,
1549     generic, or subprogram renaming declaration).  Such files are also
1550     called "specs".
1551
1552`FILE.adb'
1553     Ada source code file containing a library unit body (a subprogram
1554     or package body).  Such files are also called "bodies".
1555
1556`FILE.s'
1557     Assembler code.
1558
1559`FILE.S'
1560`FILE.sx'
1561     Assembler code that must be preprocessed.
1562
1563`OTHER'
1564     An object file to be fed straight into linking.  Any file name
1565     with no recognized suffix is treated this way.
1566
1567 You can specify the input language explicitly with the `-x' option:
1568
1569`-x LANGUAGE'
1570     Specify explicitly the LANGUAGE for the following input files
1571     (rather than letting the compiler choose a default based on the
1572     file name suffix).  This option applies to all following input
1573     files until the next `-x' option.  Possible values for LANGUAGE
1574     are:
1575          c  c-header  cpp-output
1576          c++  c++-header  c++-cpp-output
1577          objective-c  objective-c-header  objective-c-cpp-output
1578          objective-c++ objective-c++-header objective-c++-cpp-output
1579          assembler  assembler-with-cpp
1580          ada
1581          f77  f77-cpp-input f95  f95-cpp-input
1582          go
1583          java
1584
1585`-x none'
1586     Turn off any specification of a language, so that subsequent files
1587     are handled according to their file name suffixes (as they are if
1588     `-x' has not been used at all).
1589
1590`-pass-exit-codes'
1591     Normally the `gcc' program exits with the code of 1 if any phase
1592     of the compiler returns a non-success return code.  If you specify
1593     `-pass-exit-codes', the `gcc' program instead returns with the
1594     numerically highest error produced by any phase returning an error
1595     indication.  The C, C++, and Fortran front ends return 4 if an
1596     internal compiler error is encountered.
1597
1598 If you only want some of the stages of compilation, you can use `-x'
1599(or filename suffixes) to tell `gcc' where to start, and one of the
1600options `-c', `-S', or `-E' to say where `gcc' is to stop.  Note that
1601some combinations (for example, `-x cpp-output -E') instruct `gcc' to
1602do nothing at all.
1603
1604`-c'
1605     Compile or assemble the source files, but do not link.  The linking
1606     stage simply is not done.  The ultimate output is in the form of an
1607     object file for each source file.
1608
1609     By default, the object file name for a source file is made by
1610     replacing the suffix `.c', `.i', `.s', etc., with `.o'.
1611
1612     Unrecognized input files, not requiring compilation or assembly,
1613     are ignored.
1614
1615`-S'
1616     Stop after the stage of compilation proper; do not assemble.  The
1617     output is in the form of an assembler code file for each
1618     non-assembler input file specified.
1619
1620     By default, the assembler file name for a source file is made by
1621     replacing the suffix `.c', `.i', etc., with `.s'.
1622
1623     Input files that don't require compilation are ignored.
1624
1625`-E'
1626     Stop after the preprocessing stage; do not run the compiler
1627     proper.  The output is in the form of preprocessed source code,
1628     which is sent to the standard output.
1629
1630     Input files that don't require preprocessing are ignored.
1631
1632`-o FILE'
1633     Place output in file FILE.  This applies to whatever sort of
1634     output is being produced, whether it be an executable file, an
1635     object file, an assembler file or preprocessed C code.
1636
1637     If `-o' is not specified, the default is to put an executable file
1638     in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its
1639     assembler file in `SOURCE.s', a precompiled header file in
1640     `SOURCE.SUFFIX.gch', and all preprocessed C source on standard
1641     output.
1642
1643`-v'
1644     Print (on standard error output) the commands executed to run the
1645     stages of compilation.  Also print the version number of the
1646     compiler driver program and of the preprocessor and the compiler
1647     proper.
1648
1649`-###'
1650     Like `-v' except the commands are not executed and arguments are
1651     quoted unless they contain only alphanumeric characters or `./-_'.
1652     This is useful for shell scripts to capture the driver-generated
1653     command lines.
1654
1655`-pipe'
1656     Use pipes rather than temporary files for communication between the
1657     various stages of compilation.  This fails to work on some systems
1658     where the assembler is unable to read from a pipe; but the GNU
1659     assembler has no trouble.
1660
1661`--help'
1662     Print (on the standard output) a description of the command-line
1663     options understood by `gcc'.  If the `-v' option is also specified
1664     then `--help' is also passed on to the various processes invoked
1665     by `gcc', so that they can display the command-line options they
1666     accept.  If the `-Wextra' option has also been specified (prior to
1667     the `--help' option), then command-line options that have no
1668     documentation associated with them are also displayed.
1669
1670`--target-help'
1671     Print (on the standard output) a description of target-specific
1672     command-line options for each tool.  For some targets extra
1673     target-specific information may also be printed.
1674
1675`--help={CLASS|[^]QUALIFIER}[,...]'
1676     Print (on the standard output) a description of the command-line
1677     options understood by the compiler that fit into all specified
1678     classes and qualifiers.  These are the supported classes:
1679
1680    `optimizers'
1681          Display all of the optimization options supported by the
1682          compiler.
1683
1684    `warnings'
1685          Display all of the options controlling warning messages
1686          produced by the compiler.
1687
1688    `target'
1689          Display target-specific options.  Unlike the `--target-help'
1690          option however, target-specific options of the linker and
1691          assembler are not displayed.  This is because those tools do
1692          not currently support the extended `--help=' syntax.
1693
1694    `params'
1695          Display the values recognized by the `--param' option.
1696
1697    LANGUAGE
1698          Display the options supported for LANGUAGE, where LANGUAGE is
1699          the name of one of the languages supported in this version of
1700          GCC.
1701
1702    `common'
1703          Display the options that are common to all languages.
1704
1705     These are the supported qualifiers:
1706
1707    `undocumented'
1708          Display only those options that are undocumented.
1709
1710    `joined'
1711          Display options taking an argument that appears after an equal
1712          sign in the same continuous piece of text, such as:
1713          `--help=target'.
1714
1715    `separate'
1716          Display options taking an argument that appears as a separate
1717          word following the original option, such as: `-o output-file'.
1718
1719     Thus for example to display all the undocumented target-specific
1720     switches supported by the compiler, use:
1721
1722          --help=target,undocumented
1723
1724     The sense of a qualifier can be inverted by prefixing it with the
1725     `^' character, so for example to display all binary warning
1726     options (i.e., ones that are either on or off and that do not take
1727     an argument) that have a description, use:
1728
1729          --help=warnings,^joined,^undocumented
1730
1731     The argument to `--help=' should not consist solely of inverted
1732     qualifiers.
1733
1734     Combining several classes is possible, although this usually
1735     restricts the output so much that there is nothing to display.  One
1736     case where it does work, however, is when one of the classes is
1737     TARGET.  For example, to display all the target-specific
1738     optimization options, use:
1739
1740          --help=target,optimizers
1741
1742     The `--help=' option can be repeated on the command line.  Each
1743     successive use displays its requested class of options, skipping
1744     those that have already been displayed.
1745
1746     If the `-Q' option appears on the command line before the
1747     `--help=' option, then the descriptive text displayed by `--help='
1748     is changed.  Instead of describing the displayed options, an
1749     indication is given as to whether the option is enabled, disabled
1750     or set to a specific value (assuming that the compiler knows this
1751     at the point where the `--help=' option is used).
1752
1753     Here is a truncated example from the ARM port of `gcc':
1754
1755            % gcc -Q -mabi=2 --help=target -c
1756            The following options are target specific:
1757            -mabi=                                2
1758            -mabort-on-noreturn                   [disabled]
1759            -mapcs                                [disabled]
1760
1761     The output is sensitive to the effects of previous command-line
1762     options, so for example it is possible to find out which
1763     optimizations are enabled at `-O2' by using:
1764
1765          -Q -O2 --help=optimizers
1766
1767     Alternatively you can discover which binary optimizations are
1768     enabled by `-O3' by using:
1769
1770          gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1771          gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1772          diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1773
1774`-no-canonical-prefixes'
1775     Do not expand any symbolic links, resolve references to `/../' or
1776     `/./', or make the path absolute when generating a relative prefix.
1777
1778`--version'
1779     Display the version number and copyrights of the invoked GCC.
1780
1781`-wrapper'
1782     Invoke all subcommands under a wrapper program.  The name of the
1783     wrapper program and its parameters are passed as a comma separated
1784     list.
1785
1786          gcc -c t.c -wrapper gdb,--args
1787
1788     This invokes all subprograms of `gcc' under `gdb --args', thus the
1789     invocation of `cc1' is `gdb --args cc1 ...'.
1790
1791`-fplugin=NAME.so'
1792     Load the plugin code in file NAME.so, assumed to be a shared
1793     object to be dlopen'd by the compiler.  The base name of the
1794     shared object file is used to identify the plugin for the purposes
1795     of argument parsing (See `-fplugin-arg-NAME-KEY=VALUE' below).
1796     Each plugin should define the callback functions specified in the
1797     Plugins API.
1798
1799`-fplugin-arg-NAME-KEY=VALUE'
1800     Define an argument called KEY with a value of VALUE for the plugin
1801     called NAME.
1802
1803`-fdump-ada-spec[-slim]'
1804     For C and C++ source and include files, generate corresponding Ada
1805     specs.  *Note Generating Ada Bindings for C and C++ headers:
1806     (gnat_ugn)Generating Ada Bindings for C and C++ headers, which
1807     provides detailed documentation on this feature.
1808
1809`-fada-spec-parent=UNIT'
1810     In conjunction with `-fdump-ada-spec[-slim]' above, generate Ada
1811     specs as child units of parent UNIT.
1812
1813`-fdump-go-spec=FILE'
1814     For input files in any language, generate corresponding Go
1815     declarations in FILE.  This generates Go `const', `type', `var',
1816     and `func' declarations which may be a useful way to start writing
1817     a Go interface to code written in some other language.
1818
1819`@FILE'
1820     Read command-line options from FILE.  The options read are
1821     inserted in place of the original @FILE option.  If FILE does not
1822     exist, or cannot be read, then the option will be treated
1823     literally, and not removed.
1824
1825     Options in FILE are separated by whitespace.  A whitespace
1826     character may be included in an option by surrounding the entire
1827     option in either single or double quotes.  Any character
1828     (including a backslash) may be included by prefixing the character
1829     to be included with a backslash.  The FILE may itself contain
1830     additional @FILE options; any such options will be processed
1831     recursively.
1832
1833
1834File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
1835
18363.3 Compiling C++ Programs
1837==========================
1838
1839C++ source files conventionally use one of the suffixes `.C', `.cc',
1840`.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use
1841`.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and
1842preprocessed C++ files use the suffix `.ii'.  GCC recognizes files with
1843these names and compiles them as C++ programs even if you call the
1844compiler the same way as for compiling C programs (usually with the
1845name `gcc').
1846
1847 However, the use of `gcc' does not add the C++ library.  `g++' is a
1848program that calls GCC and automatically specifies linking against the
1849C++ library.  It treats `.c', `.h' and `.i' files as C++ source files
1850instead of C source files unless `-x' is used.  This program is also
1851useful when precompiling a C header file with a `.h' extension for use
1852in C++ compilations.  On many systems, `g++' is also installed with the
1853name `c++'.
1854
1855 When you compile C++ programs, you may specify many of the same
1856command-line options that you use for compiling programs in any
1857language; or command-line options meaningful for C and related
1858languages; or options that are meaningful only for C++ programs.  *Note
1859Options Controlling C Dialect: C Dialect Options, for explanations of
1860options for languages related to C.  *Note Options Controlling C++
1861Dialect: C++ Dialect Options, for explanations of options that are
1862meaningful only for C++ programs.
1863
1864
1865File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
1866
18673.4 Options Controlling C Dialect
1868=================================
1869
1870The following options control the dialect of C (or languages derived
1871from C, such as C++, Objective-C and Objective-C++) that the compiler
1872accepts:
1873
1874`-ansi'
1875     In C mode, this is equivalent to `-std=c90'. In C++ mode, it is
1876     equivalent to `-std=c++98'.
1877
1878     This turns off certain features of GCC that are incompatible with
1879     ISO C90 (when compiling C code), or of standard C++ (when
1880     compiling C++ code), such as the `asm' and `typeof' keywords, and
1881     predefined macros such as `unix' and `vax' that identify the type
1882     of system you are using.  It also enables the undesirable and
1883     rarely used ISO trigraph feature.  For the C compiler, it disables
1884     recognition of C++ style `//' comments as well as the `inline'
1885     keyword.
1886
1887     The alternate keywords `__asm__', `__extension__', `__inline__'
1888     and `__typeof__' continue to work despite `-ansi'.  You would not
1889     want to use them in an ISO C program, of course, but it is useful
1890     to put them in header files that might be included in compilations
1891     done with `-ansi'.  Alternate predefined macros such as `__unix__'
1892     and `__vax__' are also available, with or without `-ansi'.
1893
1894     The `-ansi' option does not cause non-ISO programs to be rejected
1895     gratuitously.  For that, `-Wpedantic' is required in addition to
1896     `-ansi'.  *Note Warning Options::.
1897
1898     The macro `__STRICT_ANSI__' is predefined when the `-ansi' option
1899     is used.  Some header files may notice this macro and refrain from
1900     declaring certain functions or defining certain macros that the
1901     ISO standard doesn't call for; this is to avoid interfering with
1902     any programs that might use these names for other things.
1903
1904     Functions that are normally built in but do not have semantics
1905     defined by ISO C (such as `alloca' and `ffs') are not built-in
1906     functions when `-ansi' is used.  *Note Other built-in functions
1907     provided by GCC: Other Builtins, for details of the functions
1908     affected.
1909
1910`-std='
1911     Determine the language standard. *Note Language Standards
1912     Supported by GCC: Standards, for details of these standard
1913     versions.  This option is currently only supported when compiling
1914     C or C++.
1915
1916     The compiler can accept several base standards, such as `c90' or
1917     `c++98', and GNU dialects of those standards, such as `gnu90' or
1918     `gnu++98'.  When a base standard is specified, the compiler
1919     accepts all programs following that standard plus those using GNU
1920     extensions that do not contradict it.  For example, `-std=c90'
1921     turns off certain features of GCC that are incompatible with ISO
1922     C90, such as the `asm' and `typeof' keywords, but not other GNU
1923     extensions that do not have a meaning in ISO C90, such as omitting
1924     the middle term of a `?:' expression. On the other hand, when a
1925     GNU dialect of a standard is specified, all features supported by
1926     the compiler are enabled, even when those features change the
1927     meaning of the base standard.  As a result, some strict-conforming
1928     programs may be rejected.  The particular standard is used by
1929     `-Wpedantic' to identify which features are GNU extensions given
1930     that version of the standard. For example `-std=gnu90 -Wpedantic'
1931     warns about C++ style `//' comments, while `-std=gnu99 -Wpedantic'
1932     does not.
1933
1934     A value for this option must be provided; possible values are
1935
1936    `c90'
1937    `c89'
1938    `iso9899:1990'
1939          Support all ISO C90 programs (certain GNU extensions that
1940          conflict with ISO C90 are disabled). Same as `-ansi' for C
1941          code.
1942
1943    `iso9899:199409'
1944          ISO C90 as modified in amendment 1.
1945
1946    `c99'
1947    `c9x'
1948    `iso9899:1999'
1949    `iso9899:199x'
1950          ISO C99.  This standard is substantially completely
1951          supported, modulo bugs and floating-point issues (mainly but
1952          not entirely relating to optional C99 features from Annexes F
1953          and G).  See `http://gcc.gnu.org/c99status.html' for more
1954          information.  The names `c9x' and `iso9899:199x' are
1955          deprecated.
1956
1957    `c11'
1958    `c1x'
1959    `iso9899:2011'
1960          ISO C11, the 2011 revision of the ISO C standard.  This
1961          standard is substantially completely supported, modulo bugs,
1962          floating-point issues (mainly but not entirely relating to
1963          optional C11 features from Annexes F and G) and the optional
1964          Annexes K (Bounds-checking interfaces) and L (Analyzability).
1965          The name `c1x' is deprecated.
1966
1967    `gnu90'
1968    `gnu89'
1969          GNU dialect of ISO C90 (including some C99 features).
1970
1971    `gnu99'
1972    `gnu9x'
1973          GNU dialect of ISO C99.  The name `gnu9x' is deprecated.
1974
1975    `gnu11'
1976    `gnu1x'
1977          GNU dialect of ISO C11.  This is the default for C code.  The
1978          name `gnu1x' is deprecated.
1979
1980    `c++98'
1981    `c++03'
1982          The 1998 ISO C++ standard plus the 2003 technical corrigendum
1983          and some additional defect reports. Same as `-ansi' for C++
1984          code.
1985
1986    `gnu++98'
1987    `gnu++03'
1988          GNU dialect of `-std=c++98'.  This is the default for C++
1989          code.
1990
1991    `c++11'
1992    `c++0x'
1993          The 2011 ISO C++ standard plus amendments.  The name `c++0x'
1994          is deprecated.
1995
1996    `gnu++11'
1997    `gnu++0x'
1998          GNU dialect of `-std=c++11'.  The name `gnu++0x' is
1999          deprecated.
2000
2001    `c++14'
2002    `c++1y'
2003          The 2014 ISO C++ standard plus amendments.  The name `c++1y'
2004          is deprecated.
2005
2006    `gnu++14'
2007    `gnu++1y'
2008          GNU dialect of `-std=c++14'.  The name `gnu++1y' is
2009          deprecated.
2010
2011    `c++1z'
2012          The next revision of the ISO C++ standard, tentatively
2013          planned for 2017.  Support is highly experimental, and will
2014          almost certainly change in incompatible ways in future
2015          releases.
2016
2017    `gnu++1z'
2018          GNU dialect of `-std=c++1z'.  Support is highly experimental,
2019          and will almost certainly change in incompatible ways in
2020          future releases.
2021
2022`-fgnu89-inline'
2023     The option `-fgnu89-inline' tells GCC to use the traditional GNU
2024     semantics for `inline' functions when in C99 mode.  *Note An
2025     Inline Function is As Fast As a Macro: Inline.  Using this option
2026     is roughly equivalent to adding the `gnu_inline' function
2027     attribute to all inline functions (*note Function Attributes::).
2028
2029     The option `-fno-gnu89-inline' explicitly tells GCC to use the C99
2030     semantics for `inline' when in C99 or gnu99 mode (i.e., it
2031     specifies the default behavior).  This option is not supported in
2032     `-std=c90' or `-std=gnu90' mode.
2033
2034     The preprocessor macros `__GNUC_GNU_INLINE__' and
2035     `__GNUC_STDC_INLINE__' may be used to check which semantics are in
2036     effect for `inline' functions.  *Note Common Predefined Macros:
2037     (cpp)Common Predefined Macros.
2038
2039`-aux-info FILENAME'
2040     Output to the given filename prototyped declarations for all
2041     functions declared and/or defined in a translation unit, including
2042     those in header files.  This option is silently ignored in any
2043     language other than C.
2044
2045     Besides declarations, the file indicates, in comments, the origin
2046     of each declaration (source file and line), whether the
2047     declaration was implicit, prototyped or unprototyped (`I', `N' for
2048     new or `O' for old, respectively, in the first character after the
2049     line number and the colon), and whether it came from a declaration
2050     or a definition (`C' or `F', respectively, in the following
2051     character).  In the case of function definitions, a K&R-style list
2052     of arguments followed by their declarations is also provided,
2053     inside comments, after the declaration.
2054
2055`-fallow-parameterless-variadic-functions'
2056     Accept variadic functions without named parameters.
2057
2058     Although it is possible to define such a function, this is not very
2059     useful as it is not possible to read the arguments.  This is only
2060     supported for C as this construct is allowed by C++.
2061
2062`-fno-asm'
2063     Do not recognize `asm', `inline' or `typeof' as a keyword, so that
2064     code can use these words as identifiers.  You can use the keywords
2065     `__asm__', `__inline__' and `__typeof__' instead.  `-ansi' implies
2066     `-fno-asm'.
2067
2068     In C++, this switch only affects the `typeof' keyword, since `asm'
2069     and `inline' are standard keywords.  You may want to use the
2070     `-fno-gnu-keywords' flag instead, which has the same effect.  In
2071     C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects
2072     the `asm' and `typeof' keywords, since `inline' is a standard
2073     keyword in ISO C99.
2074
2075`-fno-builtin'
2076`-fno-builtin-FUNCTION'
2077     Don't recognize built-in functions that do not begin with
2078     `__builtin_' as prefix.  *Note Other built-in functions provided
2079     by GCC: Other Builtins, for details of the functions affected,
2080     including those which are not built-in functions when `-ansi' or
2081     `-std' options for strict ISO C conformance are used because they
2082     do not have an ISO standard meaning.
2083
2084     GCC normally generates special code to handle certain built-in
2085     functions more efficiently; for instance, calls to `alloca' may
2086     become single instructions which adjust the stack directly, and
2087     calls to `memcpy' may become inline copy loops.  The resulting
2088     code is often both smaller and faster, but since the function
2089     calls no longer appear as such, you cannot set a breakpoint on
2090     those calls, nor can you change the behavior of the functions by
2091     linking with a different library.  In addition, when a function is
2092     recognized as a built-in function, GCC may use information about
2093     that function to warn about problems with calls to that function,
2094     or to generate more efficient code, even if the resulting code
2095     still contains calls to that function.  For example, warnings are
2096     given with `-Wformat' for bad calls to `printf' when `printf' is
2097     built in and `strlen' is known not to modify global memory.
2098
2099     With the `-fno-builtin-FUNCTION' option only the built-in function
2100     FUNCTION is disabled.  FUNCTION must not begin with `__builtin_'.
2101     If a function is named that is not built-in in this version of
2102     GCC, this option is ignored.  There is no corresponding
2103     `-fbuiltin-FUNCTION' option; if you wish to enable built-in
2104     functions selectively when using `-fno-builtin' or
2105     `-ffreestanding', you may define macros such as:
2106
2107          #define abs(n)          __builtin_abs ((n))
2108          #define strcpy(d, s)    __builtin_strcpy ((d), (s))
2109
2110`-fhosted'
2111     Assert that compilation targets a hosted environment.  This implies
2112     `-fbuiltin'.  A hosted environment is one in which the entire
2113     standard library is available, and in which `main' has a return
2114     type of `int'.  Examples are nearly everything except a kernel.
2115     This is equivalent to `-fno-freestanding'.
2116
2117`-ffreestanding'
2118     Assert that compilation targets a freestanding environment.  This
2119     implies `-fno-builtin'.  A freestanding environment is one in
2120     which the standard library may not exist, and program startup may
2121     not necessarily be at `main'.  The most obvious example is an OS
2122     kernel.  This is equivalent to `-fno-hosted'.
2123
2124     *Note Language Standards Supported by GCC: Standards, for details
2125     of freestanding and hosted environments.
2126
2127`-fopenacc'
2128     Enable handling of OpenACC directives `#pragma acc' in C/C++ and
2129     `!$acc' in Fortran.  When `-fopenacc' is specified, the compiler
2130     generates accelerated code according to the OpenACC Application
2131     Programming Interface v2.0 `http://www.openacc.org/'.  This option
2132     implies `-pthread', and thus is only supported on targets that
2133     have support for `-pthread'.
2134
2135     Note that this is an experimental feature, incomplete, and subject
2136     to change in future versions of GCC.  See
2137     `https://gcc.gnu.org/wiki/OpenACC' for more information.
2138
2139`-fopenmp'
2140     Enable handling of OpenMP directives `#pragma omp' in C/C++ and
2141     `!$omp' in Fortran.  When `-fopenmp' is specified, the compiler
2142     generates parallel code according to the OpenMP Application
2143     Program Interface v4.0 `http://www.openmp.org/'.  This option
2144     implies `-pthread', and thus is only supported on targets that
2145     have support for `-pthread'. `-fopenmp' implies `-fopenmp-simd'.
2146
2147`-fopenmp-simd'
2148     Enable handling of OpenMP's SIMD directives with `#pragma omp' in
2149     C/C++ and `!$omp' in Fortran. Other OpenMP directives are ignored.
2150
2151`-fcilkplus'
2152     Enable the usage of Cilk Plus language extension features for
2153     C/C++.  When the option `-fcilkplus' is specified, enable the
2154     usage of the Cilk Plus Language extension features for C/C++.  The
2155     present implementation follows ABI version 1.2.  This is an
2156     experimental feature that is only partially complete, and whose
2157     interface may change in future versions of GCC as the official
2158     specification changes.  Currently, all features but `_Cilk_for'
2159     have been implemented.
2160
2161`-fgnu-tm'
2162     When the option `-fgnu-tm' is specified, the compiler generates
2163     code for the Linux variant of Intel's current Transactional Memory
2164     ABI specification document (Revision 1.1, May 6 2009).  This is an
2165     experimental feature whose interface may change in future versions
2166     of GCC, as the official specification changes.  Please note that
2167     not all architectures are supported for this feature.
2168
2169     For more information on GCC's support for transactional memory,
2170     *Note The GNU Transactional Memory Library: (libitm)Enabling
2171     libitm.
2172
2173     Note that the transactional memory feature is not supported with
2174     non-call exceptions (`-fnon-call-exceptions').
2175
2176`-fms-extensions'
2177     Accept some non-standard constructs used in Microsoft header files.
2178
2179     In C++ code, this allows member names in structures to be similar
2180     to previous types declarations.
2181
2182          typedef int UOW;
2183          struct ABC {
2184            UOW UOW;
2185          };
2186
2187     Some cases of unnamed fields in structures and unions are only
2188     accepted with this option.  *Note Unnamed struct/union fields
2189     within structs/unions: Unnamed Fields, for details.
2190
2191     Note that this option is off for all targets but x86 targets using
2192     ms-abi.
2193
2194`-fplan9-extensions'
2195     Accept some non-standard constructs used in Plan 9 code.
2196
2197     This enables `-fms-extensions', permits passing pointers to
2198     structures with anonymous fields to functions that expect pointers
2199     to elements of the type of the field, and permits referring to
2200     anonymous fields declared using a typedef.  *Note Unnamed
2201     struct/union fields within structs/unions: Unnamed Fields, for
2202     details.  This is only supported for C, not C++.
2203
2204`-trigraphs'
2205     Support ISO C trigraphs.  The `-ansi' option (and `-std' options
2206     for strict ISO C conformance) implies `-trigraphs'.
2207
2208`-traditional'
2209`-traditional-cpp'
2210     Formerly, these options caused GCC to attempt to emulate a
2211     pre-standard C compiler.  They are now only supported with the
2212     `-E' switch.  The preprocessor continues to support a pre-standard
2213     mode.  See the GNU CPP manual for details.
2214
2215`-fcond-mismatch'
2216     Allow conditional expressions with mismatched types in the second
2217     and third arguments.  The value of such an expression is void.
2218     This option is not supported for C++.
2219
2220`-flax-vector-conversions'
2221     Allow implicit conversions between vectors with differing numbers
2222     of elements and/or incompatible element types.  This option should
2223     not be used for new code.
2224
2225`-funsigned-char'
2226     Let the type `char' be unsigned, like `unsigned char'.
2227
2228     Each kind of machine has a default for what `char' should be.  It
2229     is either like `unsigned char' by default or like `signed char' by
2230     default.
2231
2232     Ideally, a portable program should always use `signed char' or
2233     `unsigned char' when it depends on the signedness of an object.
2234     But many programs have been written to use plain `char' and expect
2235     it to be signed, or expect it to be unsigned, depending on the
2236     machines they were written for.  This option, and its inverse, let
2237     you make such a program work with the opposite default.
2238
2239     The type `char' is always a distinct type from each of `signed
2240     char' or `unsigned char', even though its behavior is always just
2241     like one of those two.
2242
2243`-fsigned-char'
2244     Let the type `char' be signed, like `signed char'.
2245
2246     Note that this is equivalent to `-fno-unsigned-char', which is the
2247     negative form of `-funsigned-char'.  Likewise, the option
2248     `-fno-signed-char' is equivalent to `-funsigned-char'.
2249
2250`-fsigned-bitfields'
2251`-funsigned-bitfields'
2252`-fno-signed-bitfields'
2253`-fno-unsigned-bitfields'
2254     These options control whether a bit-field is signed or unsigned,
2255     when the declaration does not use either `signed' or `unsigned'.
2256     By default, such a bit-field is signed, because this is
2257     consistent: the basic integer types such as `int' are signed types.
2258
2259
2260File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
2261
22623.5 Options Controlling C++ Dialect
2263===================================
2264
2265This section describes the command-line options that are only meaningful
2266for C++ programs.  You can also use most of the GNU compiler options
2267regardless of what language your program is in.  For example, you might
2268compile a file `firstClass.C' like this:
2269
2270     g++ -g -frepo -O -c firstClass.C
2271
2272In this example, only `-frepo' is an option meant only for C++
2273programs; you can use the other options with any language supported by
2274GCC.
2275
2276 Here is a list of options that are _only_ for compiling C++ programs:
2277
2278`-fabi-version=N'
2279     Use version N of the C++ ABI.  The default is version 0.
2280
2281     Version 0 refers to the version conforming most closely to the C++
2282     ABI specification.  Therefore, the ABI obtained using version 0
2283     will change in different versions of G++ as ABI bugs are fixed.
2284
2285     Version 1 is the version of the C++ ABI that first appeared in G++
2286     3.2.
2287
2288     Version 2 is the version of the C++ ABI that first appeared in G++
2289     3.4, and was the default through G++ 4.9.
2290
2291     Version 3 corrects an error in mangling a constant address as a
2292     template argument.
2293
2294     Version 4, which first appeared in G++ 4.5, implements a standard
2295     mangling for vector types.
2296
2297     Version 5, which first appeared in G++ 4.6, corrects the mangling
2298     of attribute const/volatile on function pointer types, decltype of
2299     a plain decl, and use of a function parameter in the declaration of
2300     another parameter.
2301
2302     Version 6, which first appeared in G++ 4.7, corrects the promotion
2303     behavior of C++11 scoped enums and the mangling of template
2304     argument packs, const/static_cast, prefix ++ and -, and a class
2305     scope function used as a template argument.
2306
2307     Version 7, which first appeared in G++ 4.8, that treats nullptr_t
2308     as a builtin type and corrects the mangling of lambdas in default
2309     argument scope.
2310
2311     Version 8, which first appeared in G++ 4.9, corrects the
2312     substitution behavior of function types with
2313     function-cv-qualifiers.
2314
2315     Version 9, which first appeared in G++ 5.2, corrects the alignment
2316     of `nullptr_t'.
2317
2318     See also `-Wabi'.
2319
2320`-fabi-compat-version=N'
2321     On targets that support strong aliases, G++ works around mangling
2322     changes by creating an alias with the correct mangled name when
2323     defining a symbol with an incorrect mangled name.  This switch
2324     specifies which ABI version to use for the alias.
2325
2326     With `-fabi-version=0' (the default), this defaults to 2.  If
2327     another ABI version is explicitly selected, this defaults to 0.
2328
2329     The compatibility version is also set by `-Wabi=N'.
2330
2331`-fno-access-control'
2332     Turn off all access checking.  This switch is mainly useful for
2333     working around bugs in the access control code.
2334
2335`-fcheck-new'
2336     Check that the pointer returned by `operator new' is non-null
2337     before attempting to modify the storage allocated.  This check is
2338     normally unnecessary because the C++ standard specifies that
2339     `operator new' only returns `0' if it is declared `throw()', in
2340     which case the compiler always checks the return value even
2341     without this option.  In all other cases, when `operator new' has
2342     a non-empty exception specification, memory exhaustion is
2343     signalled by throwing `std::bad_alloc'.  See also `new (nothrow)'.
2344
2345`-fconstexpr-depth=N'
2346     Set the maximum nested evaluation depth for C++11 constexpr
2347     functions to N.  A limit is needed to detect endless recursion
2348     during constant expression evaluation.  The minimum specified by
2349     the standard is 512.
2350
2351`-fdeduce-init-list'
2352     Enable deduction of a template type parameter as
2353     `std::initializer_list' from a brace-enclosed initializer list,
2354     i.e.
2355
2356          template <class T> auto forward(T t) -> decltype (realfn (t))
2357          {
2358            return realfn (t);
2359          }
2360
2361          void f()
2362          {
2363            forward({1,2}); // call forward<std::initializer_list<int>>
2364          }
2365
2366     This deduction was implemented as a possible extension to the
2367     originally proposed semantics for the C++11 standard, but was not
2368     part of the final standard, so it is disabled by default.  This
2369     option is deprecated, and may be removed in a future version of
2370     G++.
2371
2372`-ffriend-injection'
2373     Inject friend functions into the enclosing namespace, so that they
2374     are visible outside the scope of the class in which they are
2375     declared.  Friend functions were documented to work this way in
2376     the old Annotated C++ Reference Manual.  However, in ISO C++ a
2377     friend function that is not declared in an enclosing scope can
2378     only be found using argument dependent lookup.  GCC defaults to
2379     the standard behavior.
2380
2381     This option is for compatibility, and may be removed in a future
2382     release of G++.
2383
2384`-fno-elide-constructors'
2385     The C++ standard allows an implementation to omit creating a
2386     temporary that is only used to initialize another object of the
2387     same type.  Specifying this option disables that optimization, and
2388     forces G++ to call the copy constructor in all cases.
2389
2390`-fno-enforce-eh-specs'
2391     Don't generate code to check for violation of exception
2392     specifications at run time.  This option violates the C++
2393     standard, but may be useful for reducing code size in production
2394     builds, much like defining `NDEBUG'.  This does not give user code
2395     permission to throw exceptions in violation of the exception
2396     specifications; the compiler still optimizes based on the
2397     specifications, so throwing an unexpected exception results in
2398     undefined behavior at run time.
2399
2400`-fextern-tls-init'
2401`-fno-extern-tls-init'
2402     The C++11 and OpenMP standards allow `thread_local' and
2403     `threadprivate' variables to have dynamic (runtime)
2404     initialization.  To support this, any use of such a variable goes
2405     through a wrapper function that performs any necessary
2406     initialization.  When the use and definition of the variable are
2407     in the same translation unit, this overhead can be optimized away,
2408     but when the use is in a different translation unit there is
2409     significant overhead even if the variable doesn't actually need
2410     dynamic initialization.  If the programmer can be sure that no use
2411     of the variable in a non-defining TU needs to trigger dynamic
2412     initialization (either because the variable is statically
2413     initialized, or a use of the variable in the defining TU will be
2414     executed before any uses in another TU), they can avoid this
2415     overhead with the `-fno-extern-tls-init' option.
2416
2417     On targets that support symbol aliases, the default is
2418     `-fextern-tls-init'.  On targets that do not support symbol
2419     aliases, the default is `-fno-extern-tls-init'.
2420
2421`-ffor-scope'
2422`-fno-for-scope'
2423     If `-ffor-scope' is specified, the scope of variables declared in
2424     a for-init-statement is limited to the `for' loop itself, as
2425     specified by the C++ standard.  If `-fno-for-scope' is specified,
2426     the scope of variables declared in a for-init-statement extends to
2427     the end of the enclosing scope, as was the case in old versions of
2428     G++, and other (traditional) implementations of C++.
2429
2430     If neither flag is given, the default is to follow the standard,
2431     but to allow and give a warning for old-style code that would
2432     otherwise be invalid, or have different behavior.
2433
2434`-fno-gnu-keywords'
2435     Do not recognize `typeof' as a keyword, so that code can use this
2436     word as an identifier.  You can use the keyword `__typeof__'
2437     instead.  `-ansi' implies `-fno-gnu-keywords'.
2438
2439`-fno-implicit-templates'
2440     Never emit code for non-inline templates that are instantiated
2441     implicitly (i.e. by use); only emit code for explicit
2442     instantiations.  *Note Template Instantiation::, for more
2443     information.
2444
2445`-fno-implicit-inline-templates'
2446     Don't emit code for implicit instantiations of inline templates,
2447     either.  The default is to handle inlines differently so that
2448     compiles with and without optimization need the same set of
2449     explicit instantiations.
2450
2451`-fno-implement-inlines'
2452     To save space, do not emit out-of-line copies of inline functions
2453     controlled by `#pragma implementation'.  This causes linker errors
2454     if these functions are not inlined everywhere they are called.
2455
2456`-fms-extensions'
2457     Disable Wpedantic warnings about constructs used in MFC, such as
2458     implicit int and getting a pointer to member function via
2459     non-standard syntax.
2460
2461`-fno-nonansi-builtins'
2462     Disable built-in declarations of functions that are not mandated by
2463     ANSI/ISO C.  These include `ffs', `alloca', `_exit', `index',
2464     `bzero', `conjf', and other related functions.
2465
2466`-fnothrow-opt'
2467     Treat a `throw()' exception specification as if it were a
2468     `noexcept' specification to reduce or eliminate the text size
2469     overhead relative to a function with no exception specification.
2470     If the function has local variables of types with non-trivial
2471     destructors, the exception specification actually makes the
2472     function smaller because the EH cleanups for those variables can be
2473     optimized away.  The semantic effect is that an exception thrown
2474     out of a function with such an exception specification results in
2475     a call to `terminate' rather than `unexpected'.
2476
2477`-fno-operator-names'
2478     Do not treat the operator name keywords `and', `bitand', `bitor',
2479     `compl', `not', `or' and `xor' as synonyms as keywords.
2480
2481`-fno-optional-diags'
2482     Disable diagnostics that the standard says a compiler does not
2483     need to issue.  Currently, the only such diagnostic issued by G++
2484     is the one for a name having multiple meanings within a class.
2485
2486`-fpermissive'
2487     Downgrade some diagnostics about nonconformant code from errors to
2488     warnings.  Thus, using `-fpermissive' allows some nonconforming
2489     code to compile.
2490
2491`-fno-pretty-templates'
2492     When an error message refers to a specialization of a function
2493     template, the compiler normally prints the signature of the
2494     template followed by the template arguments and any typedefs or
2495     typenames in the signature (e.g. `void f(T) [with T = int]' rather
2496     than `void f(int)') so that it's clear which template is involved.
2497     When an error message refers to a specialization of a class
2498     template, the compiler omits any template arguments that match the
2499     default template arguments for that template.  If either of these
2500     behaviors make it harder to understand the error message rather
2501     than easier, you can use `-fno-pretty-templates' to disable them.
2502
2503`-frepo'
2504     Enable automatic template instantiation at link time.  This option
2505     also implies `-fno-implicit-templates'.  *Note Template
2506     Instantiation::, for more information.
2507
2508`-fno-rtti'
2509     Disable generation of information about every class with virtual
2510     functions for use by the C++ run-time type identification features
2511     (`dynamic_cast' and `typeid').  If you don't use those parts of
2512     the language, you can save some space by using this flag.  Note
2513     that exception handling uses the same information, but G++
2514     generates it as needed. The `dynamic_cast' operator can still be
2515     used for casts that do not require run-time type information, i.e.
2516     casts to `void *' or to unambiguous base classes.
2517
2518`-fsized-deallocation'
2519     Enable the built-in global declarations
2520          void operator delete (void *, std::size_t) noexcept;
2521          void operator delete[] (void *, std::size_t) noexcept;
2522     as introduced in C++14.  This is useful for user-defined
2523     replacement deallocation functions that, for example, use the size
2524     of the object to make deallocation faster.  Enabled by default
2525     under `-std=c++14' and above.  The flag `-Wsized-deallocation'
2526     warns about places that might want to add a definition.
2527
2528`-fstats'
2529     Emit statistics about front-end processing at the end of the
2530     compilation.  This information is generally only useful to the G++
2531     development team.
2532
2533`-fstrict-enums'
2534     Allow the compiler to optimize using the assumption that a value of
2535     enumerated type can only be one of the values of the enumeration
2536     (as defined in the C++ standard; basically, a value that can be
2537     represented in the minimum number of bits needed to represent all
2538     the enumerators).  This assumption may not be valid if the program
2539     uses a cast to convert an arbitrary integer value to the
2540     enumerated type.
2541
2542`-ftemplate-backtrace-limit=N'
2543     Set the maximum number of template instantiation notes for a single
2544     warning or error to N.  The default value is 10.
2545
2546`-ftemplate-depth=N'
2547     Set the maximum instantiation depth for template classes to N.  A
2548     limit on the template instantiation depth is needed to detect
2549     endless recursions during template class instantiation.  ANSI/ISO
2550     C++ conforming programs must not rely on a maximum depth greater
2551     than 17 (changed to 1024 in C++11).  The default value is 900, as
2552     the compiler can run out of stack space before hitting 1024 in
2553     some situations.
2554
2555`-fno-threadsafe-statics'
2556     Do not emit the extra code to use the routines specified in the C++
2557     ABI for thread-safe initialization of local statics.  You can use
2558     this option to reduce code size slightly in code that doesn't need
2559     to be thread-safe.
2560
2561`-fuse-cxa-atexit'
2562     Register destructors for objects with static storage duration with
2563     the `__cxa_atexit' function rather than the `atexit' function.
2564     This option is required for fully standards-compliant handling of
2565     static destructors, but only works if your C library supports
2566     `__cxa_atexit'.
2567
2568`-fno-use-cxa-get-exception-ptr'
2569     Don't use the `__cxa_get_exception_ptr' runtime routine.  This
2570     causes `std::uncaught_exception' to be incorrect, but is necessary
2571     if the runtime routine is not available.
2572
2573`-fvisibility-inlines-hidden'
2574     This switch declares that the user does not attempt to compare
2575     pointers to inline functions or methods where the addresses of the
2576     two functions are taken in different shared objects.
2577
2578     The effect of this is that GCC may, effectively, mark inline
2579     methods with `__attribute__ ((visibility ("hidden")))' so that
2580     they do not appear in the export table of a DSO and do not require
2581     a PLT indirection when used within the DSO.  Enabling this option
2582     can have a dramatic effect on load and link times of a DSO as it
2583     massively reduces the size of the dynamic export table when the
2584     library makes heavy use of templates.
2585
2586     The behavior of this switch is not quite the same as marking the
2587     methods as hidden directly, because it does not affect static
2588     variables local to the function or cause the compiler to deduce
2589     that the function is defined in only one shared object.
2590
2591     You may mark a method as having a visibility explicitly to negate
2592     the effect of the switch for that method.  For example, if you do
2593     want to compare pointers to a particular inline method, you might
2594     mark it as having default visibility.  Marking the enclosing class
2595     with explicit visibility has no effect.
2596
2597     Explicitly instantiated inline methods are unaffected by this
2598     option as their linkage might otherwise cross a shared library
2599     boundary.  *Note Template Instantiation::.
2600
2601`-fvisibility-ms-compat'
2602     This flag attempts to use visibility settings to make GCC's C++
2603     linkage model compatible with that of Microsoft Visual Studio.
2604
2605     The flag makes these changes to GCC's linkage model:
2606
2607       1. It sets the default visibility to `hidden', like
2608          `-fvisibility=hidden'.
2609
2610       2. Types, but not their members, are not hidden by default.
2611
2612       3. The One Definition Rule is relaxed for types without explicit
2613          visibility specifications that are defined in more than one
2614          shared object: those declarations are permitted if they are
2615          permitted when this option is not used.
2616
2617     In new code it is better to use `-fvisibility=hidden' and export
2618     those classes that are intended to be externally visible.
2619     Unfortunately it is possible for code to rely, perhaps
2620     accidentally, on the Visual Studio behavior.
2621
2622     Among the consequences of these changes are that static data
2623     members of the same type with the same name but defined in
2624     different shared objects are different, so changing one does not
2625     change the other; and that pointers to function members defined in
2626     different shared objects may not compare equal.  When this flag is
2627     given, it is a violation of the ODR to define types with the same
2628     name differently.
2629
2630`-fvtable-verify=[std|preinit|none]'
2631     Turn on (or off, if using `-fvtable-verify=none') the security
2632     feature that verifies at run time, for every virtual call, that
2633     the vtable pointer through which the call is made is valid for the
2634     type of the object, and has not been corrupted or overwritten.  If
2635     an invalid vtable pointer is detected at run time, an error is
2636     reported and execution of the program is immediately halted.
2637
2638     This option causes run-time data structures to be built at program
2639     startup, which are used for verifying the vtable pointers.  The
2640     options `std' and `preinit' control the timing of when these data
2641     structures are built.  In both cases the data structures are built
2642     before execution reaches `main'.  Using `-fvtable-verify=std'
2643     causes the data structures to be built after shared libraries have
2644     been loaded and initialized.  `-fvtable-verify=preinit' causes
2645     them to be built before shared libraries have been loaded and
2646     initialized.
2647
2648     If this option appears multiple times in the command line with
2649     different values specified, `none' takes highest priority over
2650     both `std' and `preinit'; `preinit' takes priority over `std'.
2651
2652`-fvtv-debug'
2653     When used in conjunction with `-fvtable-verify=std' or
2654     `-fvtable-verify=preinit', causes debug versions of the runtime
2655     functions for the vtable verification feature to be called.  This
2656     flag also causes the compiler to log information about which
2657     vtable pointers it finds for each class.  This information is
2658     written to a file named `vtv_set_ptr_data.log' in the directory
2659     named by the environment variable `VTV_LOGS_DIR' if that is
2660     defined or the current working directory otherwise.
2661
2662     Note:  This feature _appends_ data to the log file. If you want a
2663     fresh log file, be sure to delete any existing one.
2664
2665`-fvtv-counts'
2666     This is a debugging flag.  When used in conjunction with
2667     `-fvtable-verify=std' or `-fvtable-verify=preinit', this causes
2668     the compiler to keep track of the total number of virtual calls it
2669     encounters and the number of verifications it inserts.  It also
2670     counts the number of calls to certain run-time library functions
2671     that it inserts and logs this information for each compilation
2672     unit.  The compiler writes this information to a file named
2673     `vtv_count_data.log' in the directory named by the environment
2674     variable `VTV_LOGS_DIR' if that is defined or the current working
2675     directory otherwise.  It also counts the size of the vtable
2676     pointer sets for each class, and writes this information to
2677     `vtv_class_set_sizes.log' in the same directory.
2678
2679     Note:  This feature _appends_ data to the log files.  To get fresh
2680     log files, be sure to delete any existing ones.
2681
2682`-fno-weak'
2683     Do not use weak symbol support, even if it is provided by the
2684     linker.  By default, G++ uses weak symbols if they are available.
2685     This option exists only for testing, and should not be used by
2686     end-users; it results in inferior code and has no benefits.  This
2687     option may be removed in a future release of G++.
2688
2689`-nostdinc++'
2690     Do not search for header files in the standard directories
2691     specific to C++, but do still search the other standard
2692     directories.  (This option is used when building the C++ library.)
2693
2694 In addition, these optimization, warning, and code generation options
2695have meanings only for C++ programs:
2696
2697`-Wabi (C, Objective-C, C++ and Objective-C++ only)'
2698     When an explicit `-fabi-version=N' option is used, causes G++ to
2699     warn when it generates code that is probably not compatible with
2700     the vendor-neutral C++ ABI.  Since G++ now defaults to
2701     `-fabi-version=0', `-Wabi' has no effect unless either an older
2702     ABI version is selected (with `-fabi-version=N') or an older
2703     compatibility version is selected (with `-Wabi=N' or
2704     `-fabi-compat-version=N').
2705
2706     Although an effort has been made to warn about all such cases,
2707     there are probably some cases that are not warned about, even
2708     though G++ is generating incompatible code.  There may also be
2709     cases where warnings are emitted even though the code that is
2710     generated is compatible.
2711
2712     You should rewrite your code to avoid these warnings if you are
2713     concerned about the fact that code generated by G++ may not be
2714     binary compatible with code generated by other compilers.
2715
2716     `-Wabi' can also be used with an explicit version number to warn
2717     about compatibility with a particular `-fabi-version' level, e.g.
2718     `-Wabi=2' to warn about changes relative to `-fabi-version=2'.
2719     Specifying a version number also sets `-fabi-compat-version=N'.
2720
2721     The known incompatibilities in `-fabi-version=2' (which was the
2722     default from GCC 3.4 to 4.9) include:
2723
2724        * A template with a non-type template parameter of reference
2725          type was mangled incorrectly:
2726               extern int N;
2727               template <int &> struct S {};
2728               void n (S<N>) {2}
2729
2730          This was fixed in `-fabi-version=3'.
2731
2732        * SIMD vector types declared using `__attribute
2733          ((vector_size))' were mangled in a non-standard way that does
2734          not allow for overloading of functions taking vectors of
2735          different sizes.
2736
2737          The mangling was changed in `-fabi-version=4'.
2738
2739        * `__attribute ((const))' and `noreturn' were mangled as type
2740          qualifiers, and `decltype' of a plain declaration was folded
2741          away.
2742
2743          These mangling issues were fixed in `-fabi-version=5'.
2744
2745        * Scoped enumerators passed as arguments to a variadic function
2746          are promoted like unscoped enumerators, causing `va_arg' to
2747          complain.  On most targets this does not actually affect the
2748          parameter passing ABI, as there is no way to pass an argument
2749          smaller than `int'.
2750
2751          Also, the ABI changed the mangling of template argument packs,
2752          `const_cast', `static_cast', prefix increment/decrement, and
2753          a class scope function used as a template argument.
2754
2755          These issues were corrected in `-fabi-version=6'.
2756
2757        * Lambdas in default argument scope were mangled incorrectly,
2758          and the ABI changed the mangling of `nullptr_t'.
2759
2760          These issues were corrected in `-fabi-version=7'.
2761
2762        * When mangling a function type with function-cv-qualifiers, the
2763          un-qualified function type was incorrectly treated as a
2764          substitution candidate.
2765
2766          This was fixed in `-fabi-version=8', the default for GCC 5.1.
2767
2768        * `decltype(nullptr)' incorrectly had an alignment of 1,
2769          leading to unaligned accesses.  Note that this did not affect
2770          the ABI of a function with a `nullptr_t' parameter, as
2771          parameters have a minimum alignment.
2772
2773          This was fixed in `-fabi-version=9', the default for GCC 5.2.
2774
2775     It also warns about psABI-related changes.  The known psABI
2776     changes at this point include:
2777
2778        * For SysV/x86-64, unions with `long double' members are passed
2779          in memory as specified in psABI.  For example:
2780
2781               union U {
2782                 long double ld;
2783                 int i;
2784               };
2785
2786          `union U' is always passed in memory.
2787
2788
2789`-Wabi-tag (C++ and Objective-C++ only)'
2790     Warn when a type with an ABI tag is used in a context that does not
2791     have that ABI tag.  See *note C++ Attributes:: for more information
2792     about ABI tags.
2793
2794`-Wctor-dtor-privacy (C++ and Objective-C++ only)'
2795     Warn when a class seems unusable because all the constructors or
2796     destructors in that class are private, and it has neither friends
2797     nor public static member functions.  Also warn if there are no
2798     non-private methods, and there's at least one private member
2799     function that isn't a constructor or destructor.
2800
2801`-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)'
2802     Warn when `delete' is used to destroy an instance of a class that
2803     has virtual functions and non-virtual destructor. It is unsafe to
2804     delete an instance of a derived class through a pointer to a base
2805     class if the base class does not have a virtual destructor.  This
2806     warning is enabled by `-Wall'.
2807
2808`-Wliteral-suffix (C++ and Objective-C++ only)'
2809     Warn when a string or character literal is followed by a ud-suffix
2810     which does not begin with an underscore.  As a conforming
2811     extension, GCC treats such suffixes as separate preprocessing
2812     tokens in order to maintain backwards compatibility with code that
2813     uses formatting macros from `<inttypes.h>'.  For example:
2814
2815          #define __STDC_FORMAT_MACROS
2816          #include <inttypes.h>
2817          #include <stdio.h>
2818
2819          int main() {
2820            int64_t i64 = 123;
2821            printf("My int64: %"PRId64"\n", i64);
2822          }
2823
2824     In this case, `PRId64' is treated as a separate preprocessing
2825     token.
2826
2827     This warning is enabled by default.
2828
2829`-Wnarrowing (C++ and Objective-C++ only)'
2830     Warn when a narrowing conversion prohibited by C++11 occurs within
2831     `{ }', e.g.
2832
2833          int i = { 2.2 }; // error: narrowing from double to int
2834
2835     This flag is included in `-Wall' and `-Wc++11-compat'.
2836
2837     With `-std=c++11', `-Wno-narrowing' suppresses the diagnostic
2838     required by the standard.  Note that this does not affect the
2839     meaning of well-formed code; narrowing conversions are still
2840     considered ill-formed in SFINAE context.
2841
2842`-Wnoexcept (C++ and Objective-C++ only)'
2843     Warn when a noexcept-expression evaluates to false because of a
2844     call to a function that does not have a non-throwing exception
2845     specification (i.e. `throw()' or `noexcept') but is known by the
2846     compiler to never throw an exception.
2847
2848`-Wnon-virtual-dtor (C++ and Objective-C++ only)'
2849     Warn when a class has virtual functions and an accessible
2850     non-virtual destructor itself or in an accessible polymorphic base
2851     class, in which case it is possible but unsafe to delete an
2852     instance of a derived class through a pointer to the class itself
2853     or base class.  This warning is automatically enabled if
2854     `-Weffc++' is specified.
2855
2856`-Wreorder (C++ and Objective-C++ only)'
2857     Warn when the order of member initializers given in the code does
2858     not match the order in which they must be executed.  For instance:
2859
2860          struct A {
2861            int i;
2862            int j;
2863            A(): j (0), i (1) { }
2864          };
2865
2866     The compiler rearranges the member initializers for `i' and `j' to
2867     match the declaration order of the members, emitting a warning to
2868     that effect.  This warning is enabled by `-Wall'.
2869
2870`-fext-numeric-literals (C++ and Objective-C++ only)'
2871     Accept imaginary, fixed-point, or machine-defined literal number
2872     suffixes as GNU extensions.  When this option is turned off these
2873     suffixes are treated as C++11 user-defined literal numeric
2874     suffixes.  This is on by default for all pre-C++11 dialects and
2875     all GNU dialects: `-std=c++98', `-std=gnu++98', `-std=gnu++11',
2876     `-std=gnu++14'.  This option is off by default for ISO C++11
2877     onwards (`-std=c++11', ...).
2878
2879 The following `-W...' options are not affected by `-Wall'.
2880
2881`-Weffc++ (C++ and Objective-C++ only)'
2882     Warn about violations of the following style guidelines from Scott
2883     Meyers' `Effective C++' series of books:
2884
2885        * Define a copy constructor and an assignment operator for
2886          classes with dynamically-allocated memory.
2887
2888        * Prefer initialization to assignment in constructors.
2889
2890        * Have `operator=' return a reference to `*this'.
2891
2892        * Don't try to return a reference when you must return an
2893          object.
2894
2895        * Distinguish between prefix and postfix forms of increment and
2896          decrement operators.
2897
2898        * Never overload `&&', `||', or `,'.
2899
2900
2901     This option also enables `-Wnon-virtual-dtor', which is also one
2902     of the effective C++ recommendations.  However, the check is
2903     extended to warn about the lack of virtual destructor in accessible
2904     non-polymorphic bases classes too.
2905
2906     When selecting this option, be aware that the standard library
2907     headers do not obey all of these guidelines; use `grep -v' to
2908     filter out those warnings.
2909
2910`-Wstrict-null-sentinel (C++ and Objective-C++ only)'
2911     Warn about the use of an uncasted `NULL' as sentinel.  When
2912     compiling only with GCC this is a valid sentinel, as `NULL' is
2913     defined to `__null'.  Although it is a null pointer constant
2914     rather than a null pointer, it is guaranteed to be of the same
2915     size as a pointer.  But this use is not portable across different
2916     compilers.
2917
2918`-Wno-non-template-friend (C++ and Objective-C++ only)'
2919     Disable warnings when non-templatized friend functions are declared
2920     within a template.  Since the advent of explicit template
2921     specification support in G++, if the name of the friend is an
2922     unqualified-id (i.e., `friend foo(int)'), the C++ language
2923     specification demands that the friend declare or define an
2924     ordinary, nontemplate function.  (Section 14.5.3).  Before G++
2925     implemented explicit specification, unqualified-ids could be
2926     interpreted as a particular specialization of a templatized
2927     function.  Because this non-conforming behavior is no longer the
2928     default behavior for G++, `-Wnon-template-friend' allows the
2929     compiler to check existing code for potential trouble spots and is
2930     on by default.  This new compiler behavior can be turned off with
2931     `-Wno-non-template-friend', which keeps the conformant compiler
2932     code but disables the helpful warning.
2933
2934`-Wold-style-cast (C++ and Objective-C++ only)'
2935     Warn if an old-style (C-style) cast to a non-void type is used
2936     within a C++ program.  The new-style casts (`dynamic_cast',
2937     `static_cast', `reinterpret_cast', and `const_cast') are less
2938     vulnerable to unintended effects and much easier to search for.
2939
2940`-Woverloaded-virtual (C++ and Objective-C++ only)'
2941     Warn when a function declaration hides virtual functions from a
2942     base class.  For example, in:
2943
2944          struct A {
2945            virtual void f();
2946          };
2947
2948          struct B: public A {
2949            void f(int);
2950          };
2951
2952     the `A' class version of `f' is hidden in `B', and code like:
2953
2954          B* b;
2955          b->f();
2956
2957     fails to compile.
2958
2959`-Wno-pmf-conversions (C++ and Objective-C++ only)'
2960     Disable the diagnostic for converting a bound pointer to member
2961     function to a plain pointer.
2962
2963`-Wsign-promo (C++ and Objective-C++ only)'
2964     Warn when overload resolution chooses a promotion from unsigned or
2965     enumerated type to a signed type, over a conversion to an unsigned
2966     type of the same size.  Previous versions of G++ tried to preserve
2967     unsignedness, but the standard mandates the current behavior.
2968
2969
2970File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Language Independent Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
2971
29723.6 Options Controlling Objective-C and Objective-C++ Dialects
2973==============================================================
2974
2975(NOTE: This manual does not describe the Objective-C and Objective-C++
2976languages themselves.  *Note Language Standards Supported by GCC:
2977Standards, for references.)
2978
2979 This section describes the command-line options that are only
2980meaningful for Objective-C and Objective-C++ programs.  You can also
2981use most of the language-independent GNU compiler options.  For
2982example, you might compile a file `some_class.m' like this:
2983
2984     gcc -g -fgnu-runtime -O -c some_class.m
2985
2986In this example, `-fgnu-runtime' is an option meant only for
2987Objective-C and Objective-C++ programs; you can use the other options
2988with any language supported by GCC.
2989
2990 Note that since Objective-C is an extension of the C language,
2991Objective-C compilations may also use options specific to the C
2992front-end (e.g., `-Wtraditional').  Similarly, Objective-C++
2993compilations may use C++-specific options (e.g., `-Wabi').
2994
2995 Here is a list of options that are _only_ for compiling Objective-C
2996and Objective-C++ programs:
2997
2998`-fconstant-string-class=CLASS-NAME'
2999     Use CLASS-NAME as the name of the class to instantiate for each
3000     literal string specified with the syntax `@"..."'.  The default
3001     class name is `NXConstantString' if the GNU runtime is being used,
3002     and `NSConstantString' if the NeXT runtime is being used (see
3003     below).  The `-fconstant-cfstrings' option, if also present,
3004     overrides the `-fconstant-string-class' setting and cause `@"..."'
3005     literals to be laid out as constant CoreFoundation strings.
3006
3007`-fgnu-runtime'
3008     Generate object code compatible with the standard GNU Objective-C
3009     runtime.  This is the default for most types of systems.
3010
3011`-fnext-runtime'
3012     Generate output compatible with the NeXT runtime.  This is the
3013     default for NeXT-based systems, including Darwin and Mac OS X.
3014     The macro `__NEXT_RUNTIME__' is predefined if (and only if) this
3015     option is used.
3016
3017`-fno-nil-receivers'
3018     Assume that all Objective-C message dispatches (`[receiver
3019     message:arg]') in this translation unit ensure that the receiver is
3020     not `nil'.  This allows for more efficient entry points in the
3021     runtime to be used.  This option is only available in conjunction
3022     with the NeXT runtime and ABI version 0 or 1.
3023
3024`-fobjc-abi-version=N'
3025     Use version N of the Objective-C ABI for the selected runtime.
3026     This option is currently supported only for the NeXT runtime.  In
3027     that case, Version 0 is the traditional (32-bit) ABI without
3028     support for properties and other Objective-C 2.0 additions.
3029     Version 1 is the traditional (32-bit) ABI with support for
3030     properties and other Objective-C 2.0 additions.  Version 2 is the
3031     modern (64-bit) ABI.  If nothing is specified, the default is
3032     Version 0 on 32-bit target machines, and Version 2 on 64-bit
3033     target machines.
3034
3035`-fobjc-call-cxx-cdtors'
3036     For each Objective-C class, check if any of its instance variables
3037     is a C++ object with a non-trivial default constructor.  If so,
3038     synthesize a special `- (id) .cxx_construct' instance method which
3039     runs non-trivial default constructors on any such instance
3040     variables, in order, and then return `self'.  Similarly, check if
3041     any instance variable is a C++ object with a non-trivial
3042     destructor, and if so, synthesize a special `- (void)
3043     .cxx_destruct' method which runs all such default destructors, in
3044     reverse order.
3045
3046     The `- (id) .cxx_construct' and `- (void) .cxx_destruct' methods
3047     thusly generated only operate on instance variables declared in
3048     the current Objective-C class, and not those inherited from
3049     superclasses.  It is the responsibility of the Objective-C runtime
3050     to invoke all such methods in an object's inheritance hierarchy.
3051     The `- (id) .cxx_construct' methods are invoked by the runtime
3052     immediately after a new object instance is allocated; the `-
3053     (void) .cxx_destruct' methods are invoked immediately before the
3054     runtime deallocates an object instance.
3055
3056     As of this writing, only the NeXT runtime on Mac OS X 10.4 and
3057     later has support for invoking the `- (id) .cxx_construct' and `-
3058     (void) .cxx_destruct' methods.
3059
3060`-fobjc-direct-dispatch'
3061     Allow fast jumps to the message dispatcher.  On Darwin this is
3062     accomplished via the comm page.
3063
3064`-fobjc-exceptions'
3065     Enable syntactic support for structured exception handling in
3066     Objective-C, similar to what is offered by C++ and Java.  This
3067     option is required to use the Objective-C keywords `@try',
3068     `@throw', `@catch', `@finally' and `@synchronized'.  This option
3069     is available with both the GNU runtime and the NeXT runtime (but
3070     not available in conjunction with the NeXT runtime on Mac OS X
3071     10.2 and earlier).
3072
3073`-fobjc-gc'
3074     Enable garbage collection (GC) in Objective-C and Objective-C++
3075     programs.  This option is only available with the NeXT runtime; the
3076     GNU runtime has a different garbage collection implementation that
3077     does not require special compiler flags.
3078
3079`-fobjc-nilcheck'
3080     For the NeXT runtime with version 2 of the ABI, check for a nil
3081     receiver in method invocations before doing the actual method call.
3082     This is the default and can be disabled using
3083     `-fno-objc-nilcheck'.  Class methods and super calls are never
3084     checked for nil in this way no matter what this flag is set to.
3085     Currently this flag does nothing when the GNU runtime, or an older
3086     version of the NeXT runtime ABI, is used.
3087
3088`-fobjc-std=objc1'
3089     Conform to the language syntax of Objective-C 1.0, the language
3090     recognized by GCC 4.0.  This only affects the Objective-C
3091     additions to the C/C++ language; it does not affect conformance to
3092     C/C++ standards, which is controlled by the separate C/C++ dialect
3093     option flags.  When this option is used with the Objective-C or
3094     Objective-C++ compiler, any Objective-C syntax that is not
3095     recognized by GCC 4.0 is rejected.  This is useful if you need to
3096     make sure that your Objective-C code can be compiled with older
3097     versions of GCC.
3098
3099`-freplace-objc-classes'
3100     Emit a special marker instructing `ld(1)' not to statically link in
3101     the resulting object file, and allow `dyld(1)' to load it in at
3102     run time instead.  This is used in conjunction with the
3103     Fix-and-Continue debugging mode, where the object file in question
3104     may be recompiled and dynamically reloaded in the course of
3105     program execution, without the need to restart the program itself.
3106     Currently, Fix-and-Continue functionality is only available in
3107     conjunction with the NeXT runtime on Mac OS X 10.3 and later.
3108
3109`-fzero-link'
3110     When compiling for the NeXT runtime, the compiler ordinarily
3111     replaces calls to `objc_getClass("...")' (when the name of the
3112     class is known at compile time) with static class references that
3113     get initialized at load time, which improves run-time performance.
3114     Specifying the `-fzero-link' flag suppresses this behavior and
3115     causes calls to `objc_getClass("...")' to be retained.  This is
3116     useful in Zero-Link debugging mode, since it allows for individual
3117     class implementations to be modified during program execution.
3118     The GNU runtime currently always retains calls to
3119     `objc_get_class("...")' regardless of command-line options.
3120
3121`-fno-local-ivars'
3122     By default instance variables in Objective-C can be accessed as if
3123     they were local variables from within the methods of the class
3124     they're declared in.  This can lead to shadowing between instance
3125     variables and other variables declared either locally inside a
3126     class method or globally with the same name.  Specifying the
3127     `-fno-local-ivars' flag disables this behavior thus avoiding
3128     variable shadowing issues.
3129
3130`-fivar-visibility=[public|protected|private|package]'
3131     Set the default instance variable visibility to the specified
3132     option so that instance variables declared outside the scope of
3133     any access modifier directives default to the specified visibility.
3134
3135`-gen-decls'
3136     Dump interface declarations for all classes seen in the source
3137     file to a file named `SOURCENAME.decl'.
3138
3139`-Wassign-intercept (Objective-C and Objective-C++ only)'
3140     Warn whenever an Objective-C assignment is being intercepted by the
3141     garbage collector.
3142
3143`-Wno-protocol (Objective-C and Objective-C++ only)'
3144     If a class is declared to implement a protocol, a warning is
3145     issued for every method in the protocol that is not implemented by
3146     the class.  The default behavior is to issue a warning for every
3147     method not explicitly implemented in the class, even if a method
3148     implementation is inherited from the superclass.  If you use the
3149     `-Wno-protocol' option, then methods inherited from the superclass
3150     are considered to be implemented, and no warning is issued for
3151     them.
3152
3153`-Wselector (Objective-C and Objective-C++ only)'
3154     Warn if multiple methods of different types for the same selector
3155     are found during compilation.  The check is performed on the list
3156     of methods in the final stage of compilation.  Additionally, a
3157     check is performed for each selector appearing in a
3158     `@selector(...)'  expression, and a corresponding method for that
3159     selector has been found during compilation.  Because these checks
3160     scan the method table only at the end of compilation, these
3161     warnings are not produced if the final stage of compilation is not
3162     reached, for example because an error is found during compilation,
3163     or because the `-fsyntax-only' option is being used.
3164
3165`-Wstrict-selector-match (Objective-C and Objective-C++ only)'
3166     Warn if multiple methods with differing argument and/or return
3167     types are found for a given selector when attempting to send a
3168     message using this selector to a receiver of type `id' or `Class'.
3169     When this flag is off (which is the default behavior), the
3170     compiler omits such warnings if any differences found are confined
3171     to types that share the same size and alignment.
3172
3173`-Wundeclared-selector (Objective-C and Objective-C++ only)'
3174     Warn if a `@selector(...)' expression referring to an undeclared
3175     selector is found.  A selector is considered undeclared if no
3176     method with that name has been declared before the
3177     `@selector(...)' expression, either explicitly in an `@interface'
3178     or `@protocol' declaration, or implicitly in an `@implementation'
3179     section.  This option always performs its checks as soon as a
3180     `@selector(...)' expression is found, while `-Wselector' only
3181     performs its checks in the final stage of compilation.  This also
3182     enforces the coding style convention that methods and selectors
3183     must be declared before being used.
3184
3185`-print-objc-runtime-info'
3186     Generate C header describing the largest structure that is passed
3187     by value, if any.
3188
3189
3190
3191File: gcc.info,  Node: Language Independent Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
3192
31933.7 Options to Control Diagnostic Messages Formatting
3194=====================================================
3195
3196Traditionally, diagnostic messages have been formatted irrespective of
3197the output device's aspect (e.g. its width, ...).  You can use the
3198options described below to control the formatting algorithm for
3199diagnostic messages, e.g. how many characters per line, how often
3200source location information should be reported.  Note that some
3201language front ends may not honor these options.
3202
3203`-fmessage-length=N'
3204     Try to format error messages so that they fit on lines of about N
3205     characters.  If N is zero, then no line-wrapping is done; each
3206     error message appears on a single line.  This is the default for
3207     all front ends.
3208
3209`-fdiagnostics-show-location=once'
3210     Only meaningful in line-wrapping mode.  Instructs the diagnostic
3211     messages reporter to emit source location information _once_; that
3212     is, in case the message is too long to fit on a single physical
3213     line and has to be wrapped, the source location won't be emitted
3214     (as prefix) again, over and over, in subsequent continuation
3215     lines.  This is the default behavior.
3216
3217`-fdiagnostics-show-location=every-line'
3218     Only meaningful in line-wrapping mode.  Instructs the diagnostic
3219     messages reporter to emit the same source location information (as
3220     prefix) for physical lines that result from the process of breaking
3221     a message which is too long to fit on a single line.
3222
3223`-fdiagnostics-color[=WHEN]'
3224`-fno-diagnostics-color'
3225     Use color in diagnostics.  WHEN is `never', `always', or `auto'.
3226     The default depends on how the compiler has been configured, it
3227     can be any of the above WHEN options or also `never' if
3228     `GCC_COLORS' environment variable isn't present in the environment,
3229     and `auto' otherwise.  `auto' means to use color only when the
3230     standard error is a terminal.  The forms `-fdiagnostics-color' and
3231     `-fno-diagnostics-color' are aliases for
3232     `-fdiagnostics-color=always' and `-fdiagnostics-color=never',
3233     respectively.
3234
3235     The colors are defined by the environment variable `GCC_COLORS'.
3236     Its value is a colon-separated list of capabilities and Select
3237     Graphic Rendition (SGR) substrings. SGR commands are interpreted
3238     by the terminal or terminal emulator.  (See the section in the
3239     documentation of your text terminal for permitted values and their
3240     meanings as character attributes.)  These substring values are
3241     integers in decimal representation and can be concatenated with
3242     semicolons.  Common values to concatenate include `1' for bold,
3243     `4' for underline, `5' for blink, `7' for inverse, `39' for
3244     default foreground color, `30' to `37' for foreground colors, `90'
3245     to `97' for 16-color mode foreground colors, `38;5;0' to `38;5;255'
3246     for 88-color and 256-color modes foreground colors, `49' for
3247     default background color, `40' to `47' for background colors,
3248     `100' to `107' for 16-color mode background colors, and `48;5;0'
3249     to `48;5;255' for 88-color and 256-color modes background colors.
3250
3251     The default `GCC_COLORS' is
3252          error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01
3253     where `01;31' is bold red, `01;35' is bold magenta, `01;36' is
3254     bold cyan, `01;32' is bold green and `01' is bold. Setting
3255     `GCC_COLORS' to the empty string disables colors.  Supported
3256     capabilities are as follows.
3257
3258    `error='
3259          SGR substring for error: markers.
3260
3261    `warning='
3262          SGR substring for warning: markers.
3263
3264    `note='
3265          SGR substring for note: markers.
3266
3267    `caret='
3268          SGR substring for caret line.
3269
3270    `locus='
3271          SGR substring for location information, `file:line' or
3272          `file:line:column' etc.
3273
3274    `quote='
3275          SGR substring for information printed within quotes.
3276
3277`-fno-diagnostics-show-option'
3278     By default, each diagnostic emitted includes text indicating the
3279     command-line option that directly controls the diagnostic (if such
3280     an option is known to the diagnostic machinery).  Specifying the
3281     `-fno-diagnostics-show-option' flag suppresses that behavior.
3282
3283`-fno-diagnostics-show-caret'
3284     By default, each diagnostic emitted includes the original source
3285     line and a caret '^' indicating the column.  This option
3286     suppresses this information.  The source line is truncated to N
3287     characters, if the `-fmessage-length=n' option is given.  When the
3288     output is done to the terminal, the width is limited to the width
3289     given by the `COLUMNS' environment variable or, if not set, to the
3290     terminal width.
3291
3292
3293
3294File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Language Independent Options,  Up: Invoking GCC
3295
32963.8 Options to Request or Suppress Warnings
3297===========================================
3298
3299Warnings are diagnostic messages that report constructions that are not
3300inherently erroneous but that are risky or suggest there may have been
3301an error.
3302
3303 The following language-independent options do not enable specific
3304warnings but control the kinds of diagnostics produced by GCC.
3305
3306`-fsyntax-only'
3307     Check the code for syntax errors, but don't do anything beyond
3308     that.
3309
3310`-fmax-errors=N'
3311     Limits the maximum number of error messages to N, at which point
3312     GCC bails out rather than attempting to continue processing the
3313     source code.  If N is 0 (the default), there is no limit on the
3314     number of error messages produced.  If `-Wfatal-errors' is also
3315     specified, then `-Wfatal-errors' takes precedence over this option.
3316
3317`-w'
3318     Inhibit all warning messages.
3319
3320`-Werror'
3321     Make all warnings into errors.
3322
3323`-Werror='
3324     Make the specified warning into an error.  The specifier for a
3325     warning is appended; for example `-Werror=switch' turns the
3326     warnings controlled by `-Wswitch' into errors.  This switch takes a
3327     negative form, to be used to negate `-Werror' for specific
3328     warnings; for example `-Wno-error=switch' makes `-Wswitch'
3329     warnings not be errors, even when `-Werror' is in effect.
3330
3331     The warning message for each controllable warning includes the
3332     option that controls the warning.  That option can then be used
3333     with `-Werror=' and `-Wno-error=' as described above.  (Printing
3334     of the option in the warning message can be disabled using the
3335     `-fno-diagnostics-show-option' flag.)
3336
3337     Note that specifying `-Werror='FOO automatically implies `-W'FOO.
3338     However, `-Wno-error='FOO does not imply anything.
3339
3340`-Wfatal-errors'
3341     This option causes the compiler to abort compilation on the first
3342     error occurred rather than trying to keep going and printing
3343     further error messages.
3344
3345
3346 You can request many specific warnings with options beginning with
3347`-W', for example `-Wimplicit' to request warnings on implicit
3348declarations.  Each of these specific warning options also has a
3349negative form beginning `-Wno-' to turn off warnings; for example,
3350`-Wno-implicit'.  This manual lists only one of the two forms,
3351whichever is not the default.  For further language-specific options
3352also refer to *note C++ Dialect Options:: and *note Objective-C and
3353Objective-C++ Dialect Options::.
3354
3355 Some options, such as `-Wall' and `-Wextra', turn on other options,
3356such as `-Wunused', which may turn on further options, such as
3357`-Wunused-value'. The combined effect of positive and negative forms is
3358that more specific options have priority over less specific ones,
3359independently of their position in the command-line. For options of the
3360same specificity, the last one takes effect. Options enabled or
3361disabled via pragmas (*note Diagnostic Pragmas::) take effect as if
3362they appeared at the end of the command-line.
3363
3364 When an unrecognized warning option is requested (e.g.,
3365`-Wunknown-warning'), GCC emits a diagnostic stating that the option is
3366not recognized.  However, if the `-Wno-' form is used, the behavior is
3367slightly different: no diagnostic is produced for
3368`-Wno-unknown-warning' unless other diagnostics are being produced.
3369This allows the use of new `-Wno-' options with old compilers, but if
3370something goes wrong, the compiler warns that an unrecognized option is
3371present.
3372
3373`-Wpedantic'
3374`-pedantic'
3375     Issue all the warnings demanded by strict ISO C and ISO C++;
3376     reject all programs that use forbidden extensions, and some other
3377     programs that do not follow ISO C and ISO C++.  For ISO C, follows
3378     the version of the ISO C standard specified by any `-std' option
3379     used.
3380
3381     Valid ISO C and ISO C++ programs should compile properly with or
3382     without this option (though a rare few require `-ansi' or a `-std'
3383     option specifying the required version of ISO C).  However,
3384     without this option, certain GNU extensions and traditional C and
3385     C++ features are supported as well.  With this option, they are
3386     rejected.
3387
3388     `-Wpedantic' does not cause warning messages for use of the
3389     alternate keywords whose names begin and end with `__'.  Pedantic
3390     warnings are also disabled in the expression that follows
3391     `__extension__'.  However, only system header files should use
3392     these escape routes; application programs should avoid them.
3393     *Note Alternate Keywords::.
3394
3395     Some users try to use `-Wpedantic' to check programs for strict ISO
3396     C conformance.  They soon find that it does not do quite what they
3397     want: it finds some non-ISO practices, but not all--only those for
3398     which ISO C _requires_ a diagnostic, and some others for which
3399     diagnostics have been added.
3400
3401     A feature to report any failure to conform to ISO C might be
3402     useful in some instances, but would require considerable
3403     additional work and would be quite different from `-Wpedantic'.
3404     We don't have plans to support such a feature in the near future.
3405
3406     Where the standard specified with `-std' represents a GNU extended
3407     dialect of C, such as `gnu90' or `gnu99', there is a corresponding
3408     "base standard", the version of ISO C on which the GNU extended
3409     dialect is based.  Warnings from `-Wpedantic' are given where they
3410     are required by the base standard.  (It does not make sense for
3411     such warnings to be given only for features not in the specified
3412     GNU C dialect, since by definition the GNU dialects of C include
3413     all features the compiler supports with the given option, and
3414     there would be nothing to warn about.)
3415
3416`-pedantic-errors'
3417     Give an error whenever the "base standard" (see `-Wpedantic')
3418     requires a diagnostic, in some cases where there is undefined
3419     behavior at compile-time and in some other cases that do not
3420     prevent compilation of programs that are valid according to the
3421     standard. This is not equivalent to `-Werror=pedantic', since
3422     there are errors enabled by this option and not enabled by the
3423     latter and vice versa.
3424
3425`-Wall'
3426     This enables all the warnings about constructions that some users
3427     consider questionable, and that are easy to avoid (or modify to
3428     prevent the warning), even in conjunction with macros.  This also
3429     enables some language-specific warnings described in *note C++
3430     Dialect Options:: and *note Objective-C and Objective-C++ Dialect
3431     Options::.
3432
3433     `-Wall' turns on the following warning flags:
3434
3435          -Waddress
3436          -Warray-bounds=1 (only with `-O2')
3437          -Wc++11-compat  -Wc++14-compat
3438          -Wchar-subscripts
3439          -Wenum-compare (in C/ObjC; this is on by default in C++)
3440          -Wimplicit-int (C and Objective-C only)
3441          -Wimplicit-function-declaration (C and Objective-C only)
3442          -Wcomment
3443          -Wformat
3444          -Wmain (only for C/ObjC and unless `-ffreestanding')
3445          -Wmaybe-uninitialized
3446          -Wmissing-braces (only for C/ObjC)
3447          -Wnonnull
3448          -Wopenmp-simd
3449          -Wparentheses
3450          -Wpointer-sign
3451          -Wreorder
3452          -Wreturn-type
3453          -Wsequence-point
3454          -Wsign-compare (only in C++)
3455          -Wstrict-aliasing
3456          -Wstrict-overflow=1
3457          -Wswitch
3458          -Wtrigraphs
3459          -Wuninitialized
3460          -Wunknown-pragmas
3461          -Wunused-function
3462          -Wunused-label
3463          -Wunused-value
3464          -Wunused-variable
3465          -Wvolatile-register-var
3466
3467     Note that some warning flags are not implied by `-Wall'.  Some of
3468     them warn about constructions that users generally do not consider
3469     questionable, but which occasionally you might wish to check for;
3470     others warn about constructions that are necessary or hard to
3471     avoid in some cases, and there is no simple way to modify the code
3472     to suppress the warning. Some of them are enabled by `-Wextra' but
3473     many of them must be enabled individually.
3474
3475`-Wextra'
3476     This enables some extra warning flags that are not enabled by
3477     `-Wall'. (This option used to be called `-W'.  The older name is
3478     still supported, but the newer name is more descriptive.)
3479
3480          -Wclobbered
3481          -Wempty-body
3482          -Wignored-qualifiers
3483          -Wmissing-field-initializers
3484          -Wmissing-parameter-type (C only)
3485          -Wold-style-declaration (C only)
3486          -Woverride-init
3487          -Wsign-compare
3488          -Wtype-limits
3489          -Wuninitialized
3490          -Wunused-parameter (only with `-Wunused' or `-Wall')
3491          -Wunused-but-set-parameter (only with `-Wunused' or `-Wall')
3492
3493     The option `-Wextra' also prints warning messages for the
3494     following cases:
3495
3496        * A pointer is compared against integer zero with `<', `<=',
3497          `>', or `>='.
3498
3499        * (C++ only) An enumerator and a non-enumerator both appear in a
3500          conditional expression.
3501
3502        * (C++ only) Ambiguous virtual bases.
3503
3504        * (C++ only) Subscripting an array that has been declared
3505          `register'.
3506
3507        * (C++ only) Taking the address of a variable that has been
3508          declared `register'.
3509
3510        * (C++ only) A base class is not initialized in a derived
3511          class's copy constructor.
3512
3513
3514`-Wchar-subscripts'
3515     Warn if an array subscript has type `char'.  This is a common cause
3516     of error, as programmers often forget that this type is signed on
3517     some machines.  This warning is enabled by `-Wall'.
3518
3519`-Wcomment'
3520     Warn whenever a comment-start sequence `/*' appears in a `/*'
3521     comment, or whenever a Backslash-Newline appears in a `//' comment.
3522     This warning is enabled by `-Wall'.
3523
3524`-Wno-coverage-mismatch'
3525     Warn if feedback profiles do not match when using the
3526     `-fprofile-use' option.  If a source file is changed between
3527     compiling with `-fprofile-gen' and with `-fprofile-use', the files
3528     with the profile feedback can fail to match the source file and
3529     GCC cannot use the profile feedback information.  By default, this
3530     warning is enabled and is treated as an error.
3531     `-Wno-coverage-mismatch' can be used to disable the warning or
3532     `-Wno-error=coverage-mismatch' can be used to disable the error.
3533     Disabling the error for this warning can result in poorly
3534     optimized code and is useful only in the case of very minor
3535     changes such as bug fixes to an existing code-base.  Completely
3536     disabling the warning is not recommended.
3537
3538`-Wno-cpp'
3539     (C, Objective-C, C++, Objective-C++ and Fortran only)
3540
3541     Suppress warning messages emitted by `#warning' directives.
3542
3543`-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)'
3544     Give a warning when a value of type `float' is implicitly promoted
3545     to `double'.  CPUs with a 32-bit "single-precision" floating-point
3546     unit implement `float' in hardware, but emulate `double' in
3547     software.  On such a machine, doing computations using `double'
3548     values is much more expensive because of the overhead required for
3549     software emulation.
3550
3551     It is easy to accidentally do computations with `double' because
3552     floating-point literals are implicitly of type `double'.  For
3553     example, in:
3554          float area(float radius)
3555          {
3556             return 3.14159 * radius * radius;
3557          }
3558     the compiler performs the entire computation with `double' because
3559     the floating-point literal is a `double'.
3560
3561`-Wformat'
3562`-Wformat=N'
3563     Check calls to `printf' and `scanf', etc., to make sure that the
3564     arguments supplied have types appropriate to the format string
3565     specified, and that the conversions specified in the format string
3566     make sense.  This includes standard functions, and others
3567     specified by format attributes (*note Function Attributes::), in
3568     the `printf', `scanf', `strftime' and `strfmon' (an X/Open
3569     extension, not in the C standard) families (or other
3570     target-specific families).  Which functions are checked without
3571     format attributes having been specified depends on the standard
3572     version selected, and such checks of functions without the
3573     attribute specified are disabled by `-ffreestanding' or
3574     `-fno-builtin'.
3575
3576     The formats are checked against the format features supported by
3577     GNU libc version 2.2.  These include all ISO C90 and C99 features,
3578     as well as features from the Single Unix Specification and some
3579     BSD and GNU extensions.  Other library implementations may not
3580     support all these features; GCC does not support warning about
3581     features that go beyond a particular library's limitations.
3582     However, if `-Wpedantic' is used with `-Wformat', warnings are
3583     given about format features not in the selected standard version
3584     (but not for `strfmon' formats, since those are not in any version
3585     of the C standard).  *Note Options Controlling C Dialect: C
3586     Dialect Options.
3587
3588    `-Wformat=1'
3589    `-Wformat'
3590          Option `-Wformat' is equivalent to `-Wformat=1', and
3591          `-Wno-format' is equivalent to `-Wformat=0'.  Since
3592          `-Wformat' also checks for null format arguments for several
3593          functions, `-Wformat' also implies `-Wnonnull'.  Some aspects
3594          of this level of format checking can be disabled by the
3595          options: `-Wno-format-contains-nul',
3596          `-Wno-format-extra-args', and `-Wno-format-zero-length'.
3597          `-Wformat' is enabled by `-Wall'.
3598
3599    `-Wno-format-contains-nul'
3600          If `-Wformat' is specified, do not warn about format strings
3601          that contain NUL bytes.
3602
3603    `-Wno-format-extra-args'
3604          If `-Wformat' is specified, do not warn about excess
3605          arguments to a `printf' or `scanf' format function.  The C
3606          standard specifies that such arguments are ignored.
3607
3608          Where the unused arguments lie between used arguments that are
3609          specified with `$' operand number specifications, normally
3610          warnings are still given, since the implementation could not
3611          know what type to pass to `va_arg' to skip the unused
3612          arguments.  However, in the case of `scanf' formats, this
3613          option suppresses the warning if the unused arguments are all
3614          pointers, since the Single Unix Specification says that such
3615          unused arguments are allowed.
3616
3617    `-Wno-format-zero-length'
3618          If `-Wformat' is specified, do not warn about zero-length
3619          formats.  The C standard specifies that zero-length formats
3620          are allowed.
3621
3622    `-Wformat=2'
3623          Enable `-Wformat' plus additional format checks.  Currently
3624          equivalent to `-Wformat -Wformat-nonliteral -Wformat-security
3625          -Wformat-y2k'.
3626
3627    `-Wformat-nonliteral'
3628          If `-Wformat' is specified, also warn if the format string is
3629          not a string literal and so cannot be checked, unless the
3630          format function takes its format arguments as a `va_list'.
3631
3632    `-Wformat-security'
3633          If `-Wformat' is specified, also warn about uses of format
3634          functions that represent possible security problems.  At
3635          present, this warns about calls to `printf' and `scanf'
3636          functions where the format string is not a string literal and
3637          there are no format arguments, as in `printf (foo);'.  This
3638          may be a security hole if the format string came from
3639          untrusted input and contains `%n'.  (This is currently a
3640          subset of what `-Wformat-nonliteral' warns about, but in
3641          future warnings may be added to `-Wformat-security' that are
3642          not included in `-Wformat-nonliteral'.)
3643
3644    `-Wformat-signedness'
3645          If `-Wformat' is specified, also warn if the format string
3646          requires an unsigned argument and the argument is signed and
3647          vice versa.
3648
3649    `-Wformat-y2k'
3650          If `-Wformat' is specified, also warn about `strftime'
3651          formats that may yield only a two-digit year.
3652
3653`-Wnonnull'
3654     Warn about passing a null pointer for arguments marked as
3655     requiring a non-null value by the `nonnull' function attribute.
3656
3657     `-Wnonnull' is included in `-Wall' and `-Wformat'.  It can be
3658     disabled with the `-Wno-nonnull' option.
3659
3660`-Winit-self (C, C++, Objective-C and Objective-C++ only)'
3661     Warn about uninitialized variables that are initialized with
3662     themselves.  Note this option can only be used with the
3663     `-Wuninitialized' option.
3664
3665     For example, GCC warns about `i' being uninitialized in the
3666     following snippet only when `-Winit-self' has been specified:
3667          int f()
3668          {
3669            int i = i;
3670            return i;
3671          }
3672
3673     This warning is enabled by `-Wall' in C++.
3674
3675`-Wimplicit-int (C and Objective-C only)'
3676     Warn when a declaration does not specify a type.  This warning is
3677     enabled by `-Wall'.
3678
3679`-Wimplicit-function-declaration (C and Objective-C only)'
3680     Give a warning whenever a function is used before being declared.
3681     In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled
3682     by default and it is made into an error by `-pedantic-errors'.
3683     This warning is also enabled by `-Wall'.
3684
3685`-Wimplicit (C and Objective-C only)'
3686     Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'.
3687     This warning is enabled by `-Wall'.
3688
3689`-Wignored-qualifiers (C and C++ only)'
3690     Warn if the return type of a function has a type qualifier such as
3691     `const'.  For ISO C such a type qualifier has no effect, since the
3692     value returned by a function is not an lvalue.  For C++, the
3693     warning is only emitted for scalar types or `void'.  ISO C
3694     prohibits qualified `void' return types on function definitions,
3695     so such return types always receive a warning even without this
3696     option.
3697
3698     This warning is also enabled by `-Wextra'.
3699
3700`-Wmain'
3701     Warn if the type of `main' is suspicious.  `main' should be a
3702     function with external linkage, returning int, taking either zero
3703     arguments, two, or three arguments of appropriate types.  This
3704     warning is enabled by default in C++ and is enabled by either
3705     `-Wall' or `-Wpedantic'.
3706
3707`-Wmissing-braces'
3708     Warn if an aggregate or union initializer is not fully bracketed.
3709     In the following example, the initializer for `a' is not fully
3710     bracketed, but that for `b' is fully bracketed.  This warning is
3711     enabled by `-Wall' in C.
3712
3713          int a[2][2] = { 0, 1, 2, 3 };
3714          int b[2][2] = { { 0, 1 }, { 2, 3 } };
3715
3716     This warning is enabled by `-Wall'.
3717
3718`-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
3719     Warn if a user-supplied include directory does not exist.
3720
3721`-Wparentheses'
3722     Warn if parentheses are omitted in certain contexts, such as when
3723     there is an assignment in a context where a truth value is
3724     expected, or when operators are nested whose precedence people
3725     often get confused about.
3726
3727     Also warn if a comparison like `x<=y<=z' appears; this is
3728     equivalent to `(x<=y ? 1 : 0) <= z', which is a different
3729     interpretation from that of ordinary mathematical notation.
3730
3731     Also warn about constructions where there may be confusion to which
3732     `if' statement an `else' branch belongs.  Here is an example of
3733     such a case:
3734
3735          {
3736            if (a)
3737              if (b)
3738                foo ();
3739            else
3740              bar ();
3741          }
3742
3743     In C/C++, every `else' branch belongs to the innermost possible
3744     `if' statement, which in this example is `if (b)'.  This is often
3745     not what the programmer expected, as illustrated in the above
3746     example by indentation the programmer chose.  When there is the
3747     potential for this confusion, GCC issues a warning when this flag
3748     is specified.  To eliminate the warning, add explicit braces around
3749     the innermost `if' statement so there is no way the `else' can
3750     belong to the enclosing `if'.  The resulting code looks like this:
3751
3752          {
3753            if (a)
3754              {
3755                if (b)
3756                  foo ();
3757                else
3758                  bar ();
3759              }
3760          }
3761
3762     Also warn for dangerous uses of the GNU extension to `?:' with
3763     omitted middle operand. When the condition in the `?': operator is
3764     a boolean expression, the omitted value is always 1.  Often
3765     programmers expect it to be a value computed inside the
3766     conditional expression instead.
3767
3768     This warning is enabled by `-Wall'.
3769
3770`-Wsequence-point'
3771     Warn about code that may have undefined semantics because of
3772     violations of sequence point rules in the C and C++ standards.
3773
3774     The C and C++ standards define the order in which expressions in a
3775     C/C++ program are evaluated in terms of "sequence points", which
3776     represent a partial ordering between the execution of parts of the
3777     program: those executed before the sequence point, and those
3778     executed after it.  These occur after the evaluation of a full
3779     expression (one which is not part of a larger expression), after
3780     the evaluation of the first operand of a `&&', `||', `? :' or `,'
3781     (comma) operator, before a function is called (but after the
3782     evaluation of its arguments and the expression denoting the called
3783     function), and in certain other places.  Other than as expressed
3784     by the sequence point rules, the order of evaluation of
3785     subexpressions of an expression is not specified.  All these rules
3786     describe only a partial order rather than a total order, since,
3787     for example, if two functions are called within one expression
3788     with no sequence point between them, the order in which the
3789     functions are called is not specified.  However, the standards
3790     committee have ruled that function calls do not overlap.
3791
3792     It is not specified when between sequence points modifications to
3793     the values of objects take effect.  Programs whose behavior
3794     depends on this have undefined behavior; the C and C++ standards
3795     specify that "Between the previous and next sequence point an
3796     object shall have its stored value modified at most once by the
3797     evaluation of an expression.  Furthermore, the prior value shall
3798     be read only to determine the value to be stored.".  If a program
3799     breaks these rules, the results on any particular implementation
3800     are entirely unpredictable.
3801
3802     Examples of code with undefined behavior are `a = a++;', `a[n] =
3803     b[n++]' and `a[i++] = i;'.  Some more complicated cases are not
3804     diagnosed by this option, and it may give an occasional false
3805     positive result, but in general it has been found fairly effective
3806     at detecting this sort of problem in programs.
3807
3808     The standard is worded confusingly, therefore there is some debate
3809     over the precise meaning of the sequence point rules in subtle
3810     cases.  Links to discussions of the problem, including proposed
3811     formal definitions, may be found on the GCC readings page, at
3812     `http://gcc.gnu.org/readings.html'.
3813
3814     This warning is enabled by `-Wall' for C and C++.
3815
3816`-Wno-return-local-addr'
3817     Do not warn about returning a pointer (or in C++, a reference) to a
3818     variable that goes out of scope after the function returns.
3819
3820`-Wreturn-type'
3821     Warn whenever a function is defined with a return type that
3822     defaults to `int'.  Also warn about any `return' statement with no
3823     return value in a function whose return type is not `void'
3824     (falling off the end of the function body is considered returning
3825     without a value), and about a `return' statement with an
3826     expression in a function whose return type is `void'.
3827
3828     For C++, a function without return type always produces a
3829     diagnostic message, even when `-Wno-return-type' is specified.
3830     The only exceptions are `main' and functions defined in system
3831     headers.
3832
3833     This warning is enabled by `-Wall'.
3834
3835`-Wshift-count-negative'
3836     Warn if shift count is negative. This warning is enabled by
3837     default.
3838
3839`-Wshift-count-overflow'
3840     Warn if shift count >= width of type. This warning is enabled by
3841     default.
3842
3843`-Wswitch'
3844     Warn whenever a `switch' statement has an index of enumerated type
3845     and lacks a `case' for one or more of the named codes of that
3846     enumeration.  (The presence of a `default' label prevents this
3847     warning.)  `case' labels outside the enumeration range also
3848     provoke warnings when this option is used (even if there is a
3849     `default' label).  This warning is enabled by `-Wall'.
3850
3851`-Wswitch-default'
3852     Warn whenever a `switch' statement does not have a `default' case.
3853
3854`-Wswitch-enum'
3855     Warn whenever a `switch' statement has an index of enumerated type
3856     and lacks a `case' for one or more of the named codes of that
3857     enumeration.  `case' labels outside the enumeration range also
3858     provoke warnings when this option is used.  The only difference
3859     between `-Wswitch' and this option is that this option gives a
3860     warning about an omitted enumeration code even if there is a
3861     `default' label.
3862
3863`-Wswitch-bool'
3864     Warn whenever a `switch' statement has an index of boolean type.
3865     It is possible to suppress this warning by casting the controlling
3866     expression to a type other than `bool'.  For example:
3867          switch ((int) (a == 4))
3868            {
3869            ...
3870            }
3871     This warning is enabled by default for C and C++ programs.
3872
3873`-Wsync-nand (C and C++ only)'
3874     Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch'
3875     built-in functions are used.  These functions changed semantics in
3876     GCC 4.4.
3877
3878`-Wtrigraphs'
3879     Warn if any trigraphs are encountered that might change the
3880     meaning of the program (trigraphs within comments are not warned
3881     about).  This warning is enabled by `-Wall'.
3882
3883`-Wunused-but-set-parameter'
3884     Warn whenever a function parameter is assigned to, but otherwise
3885     unused (aside from its declaration).
3886
3887     To suppress this warning use the `unused' attribute (*note
3888     Variable Attributes::).
3889
3890     This warning is also enabled by `-Wunused' together with `-Wextra'.
3891
3892`-Wunused-but-set-variable'
3893     Warn whenever a local variable is assigned to, but otherwise unused
3894     (aside from its declaration).  This warning is enabled by `-Wall'.
3895
3896     To suppress this warning use the `unused' attribute (*note
3897     Variable Attributes::).
3898
3899     This warning is also enabled by `-Wunused', which is enabled by
3900     `-Wall'.
3901
3902`-Wunused-function'
3903     Warn whenever a static function is declared but not defined or a
3904     non-inline static function is unused.  This warning is enabled by
3905     `-Wall'.
3906
3907`-Wunused-label'
3908     Warn whenever a label is declared but not used.  This warning is
3909     enabled by `-Wall'.
3910
3911     To suppress this warning use the `unused' attribute (*note
3912     Variable Attributes::).
3913
3914`-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)'
3915     Warn when a typedef locally defined in a function is not used.
3916     This warning is enabled by `-Wall'.
3917
3918`-Wunused-parameter'
3919     Warn whenever a function parameter is unused aside from its
3920     declaration.
3921
3922     To suppress this warning use the `unused' attribute (*note
3923     Variable Attributes::).
3924
3925`-Wno-unused-result'
3926     Do not warn if a caller of a function marked with attribute
3927     `warn_unused_result' (*note Function Attributes::) does not use
3928     its return value. The default is `-Wunused-result'.
3929
3930`-Wunused-variable'
3931     Warn whenever a local variable or non-constant static variable is
3932     unused aside from its declaration.  This warning is enabled by
3933     `-Wall'.
3934
3935     To suppress this warning use the `unused' attribute (*note
3936     Variable Attributes::).
3937
3938`-Wunused-value'
3939     Warn whenever a statement computes a result that is explicitly not
3940     used. To suppress this warning cast the unused expression to
3941     `void'. This includes an expression-statement or the left-hand
3942     side of a comma expression that contains no side effects. For
3943     example, an expression such as `x[i,j]' causes a warning, while
3944     `x[(void)i,j]' does not.
3945
3946     This warning is enabled by `-Wall'.
3947
3948`-Wunused'
3949     All the above `-Wunused' options combined.
3950
3951     In order to get a warning about an unused function parameter, you
3952     must either specify `-Wextra -Wunused' (note that `-Wall' implies
3953     `-Wunused'), or separately specify `-Wunused-parameter'.
3954
3955`-Wuninitialized'
3956     Warn if an automatic variable is used without first being
3957     initialized or if a variable may be clobbered by a `setjmp' call.
3958     In C++, warn if a non-static reference or non-static `const' member
3959     appears in a class without constructors.
3960
3961     If you want to warn about code that uses the uninitialized value
3962     of the variable in its own initializer, use the `-Winit-self'
3963     option.
3964
3965     These warnings occur for individual uninitialized or clobbered
3966     elements of structure, union or array variables as well as for
3967     variables that are uninitialized or clobbered as a whole.  They do
3968     not occur for variables or elements declared `volatile'.  Because
3969     these warnings depend on optimization, the exact variables or
3970     elements for which there are warnings depends on the precise
3971     optimization options and version of GCC used.
3972
3973     Note that there may be no warning about a variable that is used
3974     only to compute a value that itself is never used, because such
3975     computations may be deleted by data flow analysis before the
3976     warnings are printed.
3977
3978`-Wmaybe-uninitialized'
3979     For an automatic variable, if there exists a path from the function
3980     entry to a use of the variable that is initialized, but there exist
3981     some other paths for which the variable is not initialized, the
3982     compiler emits a warning if it cannot prove the uninitialized
3983     paths are not executed at run time. These warnings are made
3984     optional because GCC is not smart enough to see all the reasons
3985     why the code might be correct in spite of appearing to have an
3986     error.  Here is one example of how this can happen:
3987
3988          {
3989            int x;
3990            switch (y)
3991              {
3992              case 1: x = 1;
3993                break;
3994              case 2: x = 4;
3995                break;
3996              case 3: x = 5;
3997              }
3998            foo (x);
3999          }
4000
4001     If the value of `y' is always 1, 2 or 3, then `x' is always
4002     initialized, but GCC doesn't know this. To suppress the warning,
4003     you need to provide a default case with assert(0) or similar code.
4004
4005     This option also warns when a non-volatile automatic variable
4006     might be changed by a call to `longjmp'.  These warnings as well
4007     are possible only in optimizing compilation.
4008
4009     The compiler sees only the calls to `setjmp'.  It cannot know
4010     where `longjmp' will be called; in fact, a signal handler could
4011     call it at any point in the code.  As a result, you may get a
4012     warning even when there is in fact no problem because `longjmp'
4013     cannot in fact be called at the place that would cause a problem.
4014
4015     Some spurious warnings can be avoided if you declare all the
4016     functions you use that never return as `noreturn'.  *Note Function
4017     Attributes::.
4018
4019     This warning is enabled by `-Wall' or `-Wextra'.
4020
4021`-Wunknown-pragmas'
4022     Warn when a `#pragma' directive is encountered that is not
4023     understood by GCC.  If this command-line option is used, warnings
4024     are even issued for unknown pragmas in system header files.  This
4025     is not the case if the warnings are only enabled by the `-Wall'
4026     command-line option.
4027
4028`-Wno-pragmas'
4029     Do not warn about misuses of pragmas, such as incorrect parameters,
4030     invalid syntax, or conflicts between pragmas.  See also
4031     `-Wunknown-pragmas'.
4032
4033`-Wstrict-aliasing'
4034     This option is only active when `-fstrict-aliasing' is active.  It
4035     warns about code that might break the strict aliasing rules that
4036     the compiler is using for optimization.  The warning does not
4037     catch all cases, but does attempt to catch the more common
4038     pitfalls.  It is included in `-Wall'.  It is equivalent to
4039     `-Wstrict-aliasing=3'
4040
4041`-Wstrict-aliasing=n'
4042     This option is only active when `-fstrict-aliasing' is active.  It
4043     warns about code that might break the strict aliasing rules that
4044     the compiler is using for optimization.  Higher levels correspond
4045     to higher accuracy (fewer false positives).  Higher levels also
4046     correspond to more effort, similar to the way `-O' works.
4047     `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=3'.
4048
4049     Level 1: Most aggressive, quick, least accurate.  Possibly useful
4050     when higher levels do not warn but `-fstrict-aliasing' still
4051     breaks the code, as it has very few false negatives.  However, it
4052     has many false positives.  Warns for all pointer conversions
4053     between possibly incompatible types, even if never dereferenced.
4054     Runs in the front end only.
4055
4056     Level 2: Aggressive, quick, not too precise.  May still have many
4057     false positives (not as many as level 1 though), and few false
4058     negatives (but possibly more than level 1).  Unlike level 1, it
4059     only warns when an address is taken.  Warns about incomplete
4060     types.  Runs in the front end only.
4061
4062     Level 3 (default for `-Wstrict-aliasing'): Should have very few
4063     false positives and few false negatives.  Slightly slower than
4064     levels 1 or 2 when optimization is enabled.  Takes care of the
4065     common pun+dereference pattern in the front end:
4066     `*(int*)&some_float'.  If optimization is enabled, it also runs in
4067     the back end, where it deals with multiple statement cases using
4068     flow-sensitive points-to information.  Only warns when the
4069     converted pointer is dereferenced.  Does not warn about incomplete
4070     types.
4071
4072`-Wstrict-overflow'
4073`-Wstrict-overflow=N'
4074     This option is only active when `-fstrict-overflow' is active.  It
4075     warns about cases where the compiler optimizes based on the
4076     assumption that signed overflow does not occur.  Note that it does
4077     not warn about all cases where the code might overflow: it only
4078     warns about cases where the compiler implements some optimization.
4079     Thus this warning depends on the optimization level.
4080
4081     An optimization that assumes that signed overflow does not occur is
4082     perfectly safe if the values of the variables involved are such
4083     that overflow never does, in fact, occur.  Therefore this warning
4084     can easily give a false positive: a warning about code that is not
4085     actually a problem.  To help focus on important issues, several
4086     warning levels are defined.  No warnings are issued for the use of
4087     undefined signed overflow when estimating how many iterations a
4088     loop requires, in particular when determining whether a loop will
4089     be executed at all.
4090
4091    `-Wstrict-overflow=1'
4092          Warn about cases that are both questionable and easy to
4093          avoid.  For example,  with `-fstrict-overflow', the compiler
4094          simplifies `x + 1 > x' to `1'.  This level of
4095          `-Wstrict-overflow' is enabled by `-Wall'; higher levels are
4096          not, and must be explicitly requested.
4097
4098    `-Wstrict-overflow=2'
4099          Also warn about other cases where a comparison is simplified
4100          to a constant.  For example: `abs (x) >= 0'.  This can only be
4101          simplified when `-fstrict-overflow' is in effect, because
4102          `abs (INT_MIN)' overflows to `INT_MIN', which is less than
4103          zero.  `-Wstrict-overflow' (with no level) is the same as
4104          `-Wstrict-overflow=2'.
4105
4106    `-Wstrict-overflow=3'
4107          Also warn about other cases where a comparison is simplified.
4108          For example: `x + 1 > 1' is simplified to `x > 0'.
4109
4110    `-Wstrict-overflow=4'
4111          Also warn about other simplifications not covered by the
4112          above cases.  For example: `(x * 10) / 5' is simplified to `x
4113          * 2'.
4114
4115    `-Wstrict-overflow=5'
4116          Also warn about cases where the compiler reduces the
4117          magnitude of a constant involved in a comparison.  For
4118          example: `x + 2 > y' is simplified to `x + 1 >= y'.  This is
4119          reported only at the highest warning level because this
4120          simplification applies to many comparisons, so this warning
4121          level gives a very large number of false positives.
4122
4123`-Wsuggest-attribute=[pure|const|noreturn|format]'
4124     Warn for cases where adding an attribute may be beneficial. The
4125     attributes currently supported are listed below.
4126
4127    `-Wsuggest-attribute=pure'
4128    `-Wsuggest-attribute=const'
4129    `-Wsuggest-attribute=noreturn'
4130          Warn about functions that might be candidates for attributes
4131          `pure', `const' or `noreturn'.  The compiler only warns for
4132          functions visible in other compilation units or (in the case
4133          of `pure' and `const') if it cannot prove that the function
4134          returns normally. A function returns normally if it doesn't
4135          contain an infinite loop or return abnormally by throwing,
4136          calling `abort' or trapping.  This analysis requires option
4137          `-fipa-pure-const', which is enabled by default at `-O' and
4138          higher.  Higher optimization levels improve the accuracy of
4139          the analysis.
4140
4141    `-Wsuggest-attribute=format'
4142    `-Wmissing-format-attribute'
4143          Warn about function pointers that might be candidates for
4144          `format' attributes.  Note these are only possible
4145          candidates, not absolute ones.  GCC guesses that function
4146          pointers with `format' attributes that are used in
4147          assignment, initialization, parameter passing or return
4148          statements should have a corresponding `format' attribute in
4149          the resulting type.  I.e. the left-hand side of the
4150          assignment or initialization, the type of the parameter
4151          variable, or the return type of the containing function
4152          respectively should also have a `format' attribute to avoid
4153          the warning.
4154
4155          GCC also warns about function definitions that might be
4156          candidates for `format' attributes.  Again, these are only
4157          possible candidates.  GCC guesses that `format' attributes
4158          might be appropriate for any function that calls a function
4159          like `vprintf' or `vscanf', but this might not always be the
4160          case, and some functions for which `format' attributes are
4161          appropriate may not be detected.
4162
4163`-Wsuggest-final-types'
4164     Warn about types with virtual methods where code quality would be
4165     improved if the type were declared with the C++11 `final'
4166     specifier, or, if possible, declared in an anonymous namespace.
4167     This allows GCC to more aggressively devirtualize the polymorphic
4168     calls. This warning is more effective with link time optimization,
4169     where the information about the class hierarchy graph is more
4170     complete.
4171
4172`-Wsuggest-final-methods'
4173     Warn about virtual methods where code quality would be improved if
4174     the method were declared with the C++11 `final' specifier, or, if
4175     possible, its type were declared in an anonymous namespace or with
4176     the `final' specifier.  This warning is more effective with link
4177     time optimization, where the information about the class hierarchy
4178     graph is more complete. It is recommended to first consider
4179     suggestions of `-Wsuggest-final-types' and then rebuild with new
4180     annotations.
4181
4182`-Wsuggest-override'
4183     Warn about overriding virtual functions that are not marked with
4184     the override keyword.
4185
4186`-Warray-bounds'
4187`-Warray-bounds=N'
4188     This option is only active when `-ftree-vrp' is active (default
4189     for `-O2' and above). It warns about subscripts to arrays that are
4190     always out of bounds. This warning is enabled by `-Wall'.
4191
4192    `-Warray-bounds=1'
4193          This is the warning level of `-Warray-bounds' and is enabled
4194          by `-Wall'; higher levels are not, and must be explicitly
4195          requested.
4196
4197    `-Warray-bounds=2'
4198          This warning level also warns about out of bounds access for
4199          arrays at the end of a struct and for arrays accessed through
4200          pointers. This warning level may give a larger number of
4201          false positives and is deactivated by default.
4202
4203`-Wbool-compare'
4204     Warn about boolean expression compared with an integer value
4205     different from `true'/`false'.  For instance, the following
4206     comparison is always false:
4207          int n = 5;
4208          ...
4209          if ((n > 1) == 2) { ... }
4210     This warning is enabled by `-Wall'.
4211
4212`-Wno-discarded-qualifiers (C and Objective-C only)'
4213     Do not warn if type qualifiers on pointers are being discarded.
4214     Typically, the compiler warns if a `const char *' variable is
4215     passed to a function that takes a `char *' parameter.  This option
4216     can be used to suppress such a warning.
4217
4218`-Wno-discarded-array-qualifiers (C and Objective-C only)'
4219     Do not warn if type qualifiers on arrays which are pointer targets
4220     are being discarded. Typically, the compiler warns if a `const int
4221     (*)[]' variable is passed to a function that takes a `int (*)[]'
4222     parameter.  This option can be used to suppress such a warning.
4223
4224`-Wno-incompatible-pointer-types (C and Objective-C only)'
4225     Do not warn when there is a conversion between pointers that have
4226     incompatible types.  This warning is for cases not covered by
4227     `-Wno-pointer-sign', which warns for pointer argument passing or
4228     assignment with different signedness.
4229
4230`-Wno-int-conversion (C and Objective-C only)'
4231     Do not warn about incompatible integer to pointer and pointer to
4232     integer conversions.  This warning is about implicit conversions;
4233     for explicit conversions the warnings `-Wno-int-to-pointer-cast'
4234     and `-Wno-pointer-to-int-cast' may be used.
4235
4236`-Wno-div-by-zero'
4237     Do not warn about compile-time integer division by zero.
4238     Floating-point division by zero is not warned about, as it can be
4239     a legitimate way of obtaining infinities and NaNs.
4240
4241`-Wsystem-headers'
4242     Print warning messages for constructs found in system header files.
4243     Warnings from system headers are normally suppressed, on the
4244     assumption that they usually do not indicate real problems and
4245     would only make the compiler output harder to read.  Using this
4246     command-line option tells GCC to emit warnings from system headers
4247     as if they occurred in user code.  However, note that using
4248     `-Wall' in conjunction with this option does _not_ warn about
4249     unknown pragmas in system headers--for that, `-Wunknown-pragmas'
4250     must also be used.
4251
4252`-Wtrampolines'
4253     Warn about trampolines generated for pointers to nested functions.
4254     A trampoline is a small piece of data or code that is created at
4255     run time on the stack when the address of a nested function is
4256     taken, and is used to call the nested function indirectly.  For
4257     some targets, it is made up of data only and thus requires no
4258     special treatment.  But, for most targets, it is made up of code
4259     and thus requires the stack to be made executable in order for the
4260     program to work properly.
4261
4262`-Wfloat-equal'
4263     Warn if floating-point values are used in equality comparisons.
4264
4265     The idea behind this is that sometimes it is convenient (for the
4266     programmer) to consider floating-point values as approximations to
4267     infinitely precise real numbers.  If you are doing this, then you
4268     need to compute (by analyzing the code, or in some other way) the
4269     maximum or likely maximum error that the computation introduces,
4270     and allow for it when performing comparisons (and when producing
4271     output, but that's a different problem).  In particular, instead
4272     of testing for equality, you should check to see whether the two
4273     values have ranges that overlap; and this is done with the
4274     relational operators, so equality comparisons are probably
4275     mistaken.
4276
4277`-Wtraditional (C and Objective-C only)'
4278     Warn about certain constructs that behave differently in
4279     traditional and ISO C.  Also warn about ISO C constructs that have
4280     no traditional C equivalent, and/or problematic constructs that
4281     should be avoided.
4282
4283        * Macro parameters that appear within string literals in the
4284          macro body.  In traditional C macro replacement takes place
4285          within string literals, but in ISO C it does not.
4286
4287        * In traditional C, some preprocessor directives did not exist.
4288          Traditional preprocessors only considered a line to be a
4289          directive if the `#' appeared in column 1 on the line.
4290          Therefore `-Wtraditional' warns about directives that
4291          traditional C understands but ignores because the `#' does
4292          not appear as the first character on the line.  It also
4293          suggests you hide directives like `#pragma' not understood by
4294          traditional C by indenting them.  Some traditional
4295          implementations do not recognize `#elif', so this option
4296          suggests avoiding it altogether.
4297
4298        * A function-like macro that appears without arguments.
4299
4300        * The unary plus operator.
4301
4302        * The `U' integer constant suffix, or the `F' or `L'
4303          floating-point constant suffixes.  (Traditional C does
4304          support the `L' suffix on integer constants.)  Note, these
4305          suffixes appear in macros defined in the system headers of
4306          most modern systems, e.g. the `_MIN'/`_MAX' macros in
4307          `<limits.h>'.  Use of these macros in user code might
4308          normally lead to spurious warnings, however GCC's integrated
4309          preprocessor has enough context to avoid warning in these
4310          cases.
4311
4312        * A function declared external in one block and then used after
4313          the end of the block.
4314
4315        * A `switch' statement has an operand of type `long'.
4316
4317        * A non-`static' function declaration follows a `static' one.
4318          This construct is not accepted by some traditional C
4319          compilers.
4320
4321        * The ISO type of an integer constant has a different width or
4322          signedness from its traditional type.  This warning is only
4323          issued if the base of the constant is ten.  I.e. hexadecimal
4324          or octal values, which typically represent bit patterns, are
4325          not warned about.
4326
4327        * Usage of ISO string concatenation is detected.
4328
4329        * Initialization of automatic aggregates.
4330
4331        * Identifier conflicts with labels.  Traditional C lacks a
4332          separate namespace for labels.
4333
4334        * Initialization of unions.  If the initializer is zero, the
4335          warning is omitted.  This is done under the assumption that
4336          the zero initializer in user code appears conditioned on e.g.
4337          `__STDC__' to avoid missing initializer warnings and relies
4338          on default initialization to zero in the traditional C case.
4339
4340        * Conversions by prototypes between fixed/floating-point values
4341          and vice versa.  The absence of these prototypes when
4342          compiling with traditional C causes serious problems.  This
4343          is a subset of the possible conversion warnings; for the full
4344          set use `-Wtraditional-conversion'.
4345
4346        * Use of ISO C style function definitions.  This warning
4347          intentionally is _not_ issued for prototype declarations or
4348          variadic functions because these ISO C features appear in
4349          your code when using libiberty's traditional C compatibility
4350          macros, `PARAMS' and `VPARAMS'.  This warning is also
4351          bypassed for nested functions because that feature is already
4352          a GCC extension and thus not relevant to traditional C
4353          compatibility.
4354
4355`-Wtraditional-conversion (C and Objective-C only)'
4356     Warn if a prototype causes a type conversion that is different
4357     from what would happen to the same argument in the absence of a
4358     prototype.  This includes conversions of fixed point to floating
4359     and vice versa, and conversions changing the width or signedness
4360     of a fixed-point argument except when the same as the default
4361     promotion.
4362
4363`-Wdeclaration-after-statement (C and Objective-C only)'
4364     Warn when a declaration is found after a statement in a block.
4365     This construct, known from C++, was introduced with ISO C99 and is
4366     by default allowed in GCC.  It is not supported by ISO C90.  *Note
4367     Mixed Declarations::.
4368
4369`-Wundef'
4370     Warn if an undefined identifier is evaluated in an `#if' directive.
4371
4372`-Wno-endif-labels'
4373     Do not warn whenever an `#else' or an `#endif' are followed by
4374     text.
4375
4376`-Wshadow'
4377     Warn whenever a local variable or type declaration shadows another
4378     variable, parameter, type, class member (in C++), or instance
4379     variable (in Objective-C) or whenever a built-in function is
4380     shadowed. Note that in C++, the compiler warns if a local variable
4381     shadows an explicit typedef, but not if it shadows a
4382     struct/class/enum.
4383
4384`-Wno-shadow-ivar (Objective-C only)'
4385     Do not warn whenever a local variable shadows an instance variable
4386     in an Objective-C method.
4387
4388`-Wlarger-than=LEN'
4389     Warn whenever an object of larger than LEN bytes is defined.
4390
4391`-Wframe-larger-than=LEN'
4392     Warn if the size of a function frame is larger than LEN bytes.
4393     The computation done to determine the stack frame size is
4394     approximate and not conservative.  The actual requirements may be
4395     somewhat greater than LEN even if you do not get a warning.  In
4396     addition, any space allocated via `alloca', variable-length
4397     arrays, or related constructs is not included by the compiler when
4398     determining whether or not to issue a warning.
4399
4400`-Wno-free-nonheap-object'
4401     Do not warn when attempting to free an object that was not
4402     allocated on the heap.
4403
4404`-Wstack-usage=LEN'
4405     Warn if the stack usage of a function might be larger than LEN
4406     bytes.  The computation done to determine the stack usage is
4407     conservative.  Any space allocated via `alloca', variable-length
4408     arrays, or related constructs is included by the compiler when
4409     determining whether or not to issue a warning.
4410
4411     The message is in keeping with the output of `-fstack-usage'.
4412
4413        * If the stack usage is fully static but exceeds the specified
4414          amount, it's:
4415
4416                 warning: stack usage is 1120 bytes
4417
4418        * If the stack usage is (partly) dynamic but bounded, it's:
4419
4420                 warning: stack usage might be 1648 bytes
4421
4422        * If the stack usage is (partly) dynamic and not bounded, it's:
4423
4424                 warning: stack usage might be unbounded
4425
4426`-Wunsafe-loop-optimizations'
4427     Warn if the loop cannot be optimized because the compiler cannot
4428     assume anything on the bounds of the loop indices.  With
4429     `-funsafe-loop-optimizations' warn if the compiler makes such
4430     assumptions.
4431
4432`-Wno-pedantic-ms-format (MinGW targets only)'
4433     When used in combination with `-Wformat' and `-pedantic' without
4434     GNU extensions, this option disables the warnings about non-ISO
4435     `printf' / `scanf' format width specifiers `I32', `I64', and `I'
4436     used on Windows targets, which depend on the MS runtime.
4437
4438`-Wpointer-arith'
4439     Warn about anything that depends on the "size of" a function type
4440     or of `void'.  GNU C assigns these types a size of 1, for
4441     convenience in calculations with `void *' pointers and pointers to
4442     functions.  In C++, warn also when an arithmetic operation involves
4443     `NULL'.  This warning is also enabled by `-Wpedantic'.
4444
4445`-Wtype-limits'
4446     Warn if a comparison is always true or always false due to the
4447     limited range of the data type, but do not warn for constant
4448     expressions.  For example, warn if an unsigned variable is
4449     compared against zero with `<' or `>='.  This warning is also
4450     enabled by `-Wextra'.
4451
4452`-Wbad-function-cast (C and Objective-C only)'
4453     Warn when a function call is cast to a non-matching type.  For
4454     example, warn if a call to a function returning an integer type is
4455     cast to a pointer type.
4456
4457`-Wc90-c99-compat (C and Objective-C only)'
4458     Warn about features not present in ISO C90, but present in ISO C99.
4459     For instance, warn about use of variable length arrays, `long long'
4460     type, `bool' type, compound literals, designated initializers, and
4461     so on.  This option is independent of the standards mode.
4462     Warnings are disabled in the expression that follows
4463     `__extension__'.
4464
4465`-Wc99-c11-compat (C and Objective-C only)'
4466     Warn about features not present in ISO C99, but present in ISO C11.
4467     For instance, warn about use of anonymous structures and unions,
4468     `_Atomic' type qualifier, `_Thread_local' storage-class specifier,
4469     `_Alignas' specifier, `Alignof' operator, `_Generic' keyword, and
4470     so on.  This option is independent of the standards mode.
4471     Warnings are disabled in the expression that follows
4472     `__extension__'.
4473
4474`-Wc++-compat (C and Objective-C only)'
4475     Warn about ISO C constructs that are outside of the common subset
4476     of ISO C and ISO C++, e.g. request for implicit conversion from
4477     `void *' to a pointer to non-`void' type.
4478
4479`-Wc++11-compat (C++ and Objective-C++ only)'
4480     Warn about C++ constructs whose meaning differs between ISO C++
4481     1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
4482     keywords in ISO C++ 2011.  This warning turns on `-Wnarrowing' and
4483     is enabled by `-Wall'.
4484
4485`-Wc++14-compat (C++ and Objective-C++ only)'
4486     Warn about C++ constructs whose meaning differs between ISO C++
4487     2011 and ISO C++ 2014.  This warning is enabled by `-Wall'.
4488
4489`-Wcast-qual'
4490     Warn whenever a pointer is cast so as to remove a type qualifier
4491     from the target type.  For example, warn if a `const char *' is
4492     cast to an ordinary `char *'.
4493
4494     Also warn when making a cast that introduces a type qualifier in an
4495     unsafe way.  For example, casting `char **' to `const char **' is
4496     unsafe, as in this example:
4497
4498            /* p is char ** value.  */
4499            const char **q = (const char **) p;
4500            /* Assignment of readonly string to const char * is OK.  */
4501            *q = "string";
4502            /* Now char** pointer points to read-only memory.  */
4503            **p = 'b';
4504
4505`-Wcast-align'
4506     Warn whenever a pointer is cast such that the required alignment
4507     of the target is increased.  For example, warn if a `char *' is
4508     cast to an `int *' on machines where integers can only be accessed
4509     at two- or four-byte boundaries.
4510
4511`-Wwrite-strings'
4512     When compiling C, give string constants the type `const
4513     char[LENGTH]' so that copying the address of one into a
4514     non-`const' `char *' pointer produces a warning.  These warnings
4515     help you find at compile time code that can try to write into a
4516     string constant, but only if you have been very careful about
4517     using `const' in declarations and prototypes.  Otherwise, it is
4518     just a nuisance. This is why we did not make `-Wall' request these
4519     warnings.
4520
4521     When compiling C++, warn about the deprecated conversion from
4522     string literals to `char *'.  This warning is enabled by default
4523     for C++ programs.
4524
4525`-Wclobbered'
4526     Warn for variables that might be changed by `longjmp' or `vfork'.
4527     This warning is also enabled by `-Wextra'.
4528
4529`-Wconditionally-supported (C++ and Objective-C++ only)'
4530     Warn for conditionally-supported (C++11 [intro.defs]) constructs.
4531
4532`-Wconversion'
4533     Warn for implicit conversions that may alter a value. This includes
4534     conversions between real and integer, like `abs (x)' when `x' is
4535     `double'; conversions between signed and unsigned, like `unsigned
4536     ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'.
4537     Do not warn for explicit casts like `abs ((int) x)' and `ui =
4538     (unsigned) -1', or if the value is not changed by the conversion
4539     like in `abs (2.0)'.  Warnings about conversions between signed
4540     and unsigned integers can be disabled by using
4541     `-Wno-sign-conversion'.
4542
4543     For C++, also warn for confusing overload resolution for
4544     user-defined conversions; and conversions that never use a type
4545     conversion operator: conversions to `void', the same type, a base
4546     class or a reference to them. Warnings about conversions between
4547     signed and unsigned integers are disabled by default in C++ unless
4548     `-Wsign-conversion' is explicitly enabled.
4549
4550`-Wno-conversion-null (C++ and Objective-C++ only)'
4551     Do not warn for conversions between `NULL' and non-pointer types.
4552     `-Wconversion-null' is enabled by default.
4553
4554`-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)'
4555     Warn when a literal '0' is used as null pointer constant.  This can
4556     be useful to facilitate the conversion to `nullptr' in C++11.
4557
4558`-Wdate-time'
4559     Warn when macros `__TIME__', `__DATE__' or `__TIMESTAMP__' are
4560     encountered as they might prevent bit-wise-identical reproducible
4561     compilations.
4562
4563`-Wdelete-incomplete (C++ and Objective-C++ only)'
4564     Warn when deleting a pointer to incomplete type, which may cause
4565     undefined behavior at runtime.  This warning is enabled by default.
4566
4567`-Wuseless-cast (C++ and Objective-C++ only)'
4568     Warn when an expression is casted to its own type.
4569
4570`-Wempty-body'
4571     Warn if an empty body occurs in an `if', `else' or `do while'
4572     statement.  This warning is also enabled by `-Wextra'.
4573
4574`-Wenum-compare'
4575     Warn about a comparison between values of different enumerated
4576     types.  In C++ enumeral mismatches in conditional expressions are
4577     also diagnosed and the warning is enabled by default.  In C this
4578     warning is enabled by `-Wall'.
4579
4580`-Wjump-misses-init (C, Objective-C only)'
4581     Warn if a `goto' statement or a `switch' statement jumps forward
4582     across the initialization of a variable, or jumps backward to a
4583     label after the variable has been initialized.  This only warns
4584     about variables that are initialized when they are declared.  This
4585     warning is only supported for C and Objective-C; in C++ this sort
4586     of branch is an error in any case.
4587
4588     `-Wjump-misses-init' is included in `-Wc++-compat'.  It can be
4589     disabled with the `-Wno-jump-misses-init' option.
4590
4591`-Wsign-compare'
4592     Warn when a comparison between signed and unsigned values could
4593     produce an incorrect result when the signed value is converted to
4594     unsigned.  This warning is also enabled by `-Wextra'; to get the
4595     other warnings of `-Wextra' without this warning, use `-Wextra
4596     -Wno-sign-compare'.
4597
4598`-Wsign-conversion'
4599     Warn for implicit conversions that may change the sign of an
4600     integer value, like assigning a signed integer expression to an
4601     unsigned integer variable. An explicit cast silences the warning.
4602     In C, this option is enabled also by `-Wconversion'.
4603
4604`-Wfloat-conversion'
4605     Warn for implicit conversions that reduce the precision of a real
4606     value.  This includes conversions from real to integer, and from
4607     higher precision real to lower precision real values.  This option
4608     is also enabled by `-Wconversion'.
4609
4610`-Wsized-deallocation (C++ and Objective-C++ only)'
4611     Warn about a definition of an unsized deallocation function
4612          void operator delete (void *) noexcept;
4613          void operator delete[] (void *) noexcept;
4614     without a definition of the corresponding sized deallocation
4615     function
4616          void operator delete (void *, std::size_t) noexcept;
4617          void operator delete[] (void *, std::size_t) noexcept;
4618     or vice versa.  Enabled by `-Wextra' along with
4619     `-fsized-deallocation'.
4620
4621`-Wsizeof-pointer-memaccess'
4622     Warn for suspicious length parameters to certain string and memory
4623     built-in functions if the argument uses `sizeof'.  This warning
4624     warns e.g.  about `memset (ptr, 0, sizeof (ptr));' if `ptr' is not
4625     an array, but a pointer, and suggests a possible fix, or about
4626     `memcpy (&foo, ptr, sizeof (&foo));'.  This warning is enabled by
4627     `-Wall'.
4628
4629`-Wsizeof-array-argument'
4630     Warn when the `sizeof' operator is applied to a parameter that is
4631     declared as an array in a function definition.  This warning is
4632     enabled by default for C and C++ programs.
4633
4634`-Wmemset-transposed-args'
4635     Warn for suspicious calls to the `memset' built-in function, if the
4636     second argument is not zero and the third argument is zero.  This
4637     warns e.g. about `memset (buf, sizeof buf, 0)' where most probably
4638     `memset (buf, 0, sizeof buf)' was meant instead.  The diagnostics
4639     is only emitted if the third argument is literal zero.  If it is
4640     some expression that is folded to zero, a cast of zero to some
4641     type, etc., it is far less likely that the user has mistakenly
4642     exchanged the arguments and no warning is emitted.  This warning
4643     is enabled by `-Wall'.
4644
4645`-Waddress'
4646     Warn about suspicious uses of memory addresses. These include using
4647     the address of a function in a conditional expression, such as
4648     `void func(void); if (func)', and comparisons against the memory
4649     address of a string literal, such as `if (x == "abc")'.  Such uses
4650     typically indicate a programmer error: the address of a function
4651     always evaluates to true, so their use in a conditional usually
4652     indicate that the programmer forgot the parentheses in a function
4653     call; and comparisons against string literals result in unspecified
4654     behavior and are not portable in C, so they usually indicate that
4655     the programmer intended to use `strcmp'.  This warning is enabled
4656     by `-Wall'.
4657
4658`-Wlogical-op'
4659     Warn about suspicious uses of logical operators in expressions.
4660     This includes using logical operators in contexts where a bit-wise
4661     operator is likely to be expected.
4662
4663`-Wlogical-not-parentheses'
4664     Warn about logical not used on the left hand side operand of a
4665     comparison.  This option does not warn if the RHS operand is of a
4666     boolean type.  Its purpose is to detect suspicious code like the
4667     following:
4668          int a;
4669          ...
4670          if (!a > 1) { ... }
4671
4672     It is possible to suppress the warning by wrapping the LHS into
4673     parentheses:
4674          if ((!a) > 1) { ... }
4675
4676     This warning is enabled by `-Wall'.
4677
4678`-Waggregate-return'
4679     Warn if any functions that return structures or unions are defined
4680     or called.  (In languages where you can return an array, this also
4681     elicits a warning.)
4682
4683`-Wno-aggressive-loop-optimizations'
4684     Warn if in a loop with constant number of iterations the compiler
4685     detects undefined behavior in some statement during one or more of
4686     the iterations.
4687
4688`-Wno-attributes'
4689     Do not warn if an unexpected `__attribute__' is used, such as
4690     unrecognized attributes, function attributes applied to variables,
4691     etc.  This does not stop errors for incorrect use of supported
4692     attributes.
4693
4694`-Wno-builtin-macro-redefined'
4695     Do not warn if certain built-in macros are redefined.  This
4696     suppresses warnings for redefinition of `__TIMESTAMP__',
4697     `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'.
4698
4699`-Wstrict-prototypes (C and Objective-C only)'
4700     Warn if a function is declared or defined without specifying the
4701     argument types.  (An old-style function definition is permitted
4702     without a warning if preceded by a declaration that specifies the
4703     argument types.)
4704
4705`-Wold-style-declaration (C and Objective-C only)'
4706     Warn for obsolescent usages, according to the C Standard, in a
4707     declaration. For example, warn if storage-class specifiers like
4708     `static' are not the first things in a declaration.  This warning
4709     is also enabled by `-Wextra'.
4710
4711`-Wold-style-definition (C and Objective-C only)'
4712     Warn if an old-style function definition is used.  A warning is
4713     given even if there is a previous prototype.
4714
4715`-Wmissing-parameter-type (C and Objective-C only)'
4716     A function parameter is declared without a type specifier in
4717     K&R-style functions:
4718
4719          void foo(bar) { }
4720
4721     This warning is also enabled by `-Wextra'.
4722
4723`-Wmissing-prototypes (C and Objective-C only)'
4724     Warn if a global function is defined without a previous prototype
4725     declaration.  This warning is issued even if the definition itself
4726     provides a prototype.  Use this option to detect global functions
4727     that do not have a matching prototype declaration in a header file.
4728     This option is not valid for C++ because all function declarations
4729     provide prototypes and a non-matching declaration declares an
4730     overload rather than conflict with an earlier declaration.  Use
4731     `-Wmissing-declarations' to detect missing declarations in C++.
4732
4733`-Wmissing-declarations'
4734     Warn if a global function is defined without a previous
4735     declaration.  Do so even if the definition itself provides a
4736     prototype.  Use this option to detect global functions that are
4737     not declared in header files.  In C, no warnings are issued for
4738     functions with previous non-prototype declarations; use
4739     `-Wmissing-prototypes' to detect missing prototypes.  In C++, no
4740     warnings are issued for function templates, or for inline
4741     functions, or for functions in anonymous namespaces.
4742
4743`-Wmissing-field-initializers'
4744     Warn if a structure's initializer has some fields missing.  For
4745     example, the following code causes such a warning, because `x.h'
4746     is implicitly zero:
4747
4748          struct s { int f, g, h; };
4749          struct s x = { 3, 4 };
4750
4751     This option does not warn about designated initializers, so the
4752     following modification does not trigger a warning:
4753
4754          struct s { int f, g, h; };
4755          struct s x = { .f = 3, .g = 4 };
4756
4757     In C++ this option does not warn either about the empty { }
4758     initializer, for example:
4759
4760          struct s { int f, g, h; };
4761          s x = { };
4762
4763     This warning is included in `-Wextra'.  To get other `-Wextra'
4764     warnings without this one, use `-Wextra
4765     -Wno-missing-field-initializers'.
4766
4767`-Wno-multichar'
4768     Do not warn if a multicharacter constant (`'FOOF'') is used.
4769     Usually they indicate a typo in the user's code, as they have
4770     implementation-defined values, and should not be used in portable
4771     code.
4772
4773`-Wnormalized[=<none|id|nfc|nfkc>]'
4774     In ISO C and ISO C++, two identifiers are different if they are
4775     different sequences of characters.  However, sometimes when
4776     characters outside the basic ASCII character set are used, you can
4777     have two different character sequences that look the same.  To
4778     avoid confusion, the ISO 10646 standard sets out some
4779     "normalization rules" which when applied ensure that two sequences
4780     that look the same are turned into the same sequence.  GCC can
4781     warn you if you are using identifiers that have not been
4782     normalized; this option controls that warning.
4783
4784     There are four levels of warning supported by GCC.  The default is
4785     `-Wnormalized=nfc', which warns about any identifier that is not
4786     in the ISO 10646 "C" normalized form, "NFC".  NFC is the
4787     recommended form for most uses.  It is equivalent to
4788     `-Wnormalized'.
4789
4790     Unfortunately, there are some characters allowed in identifiers by
4791     ISO C and ISO C++ that, when turned into NFC, are not allowed in
4792     identifiers.  That is, there's no way to use these symbols in
4793     portable ISO C or C++ and have all your identifiers in NFC.
4794     `-Wnormalized=id' suppresses the warning for these characters.  It
4795     is hoped that future versions of the standards involved will
4796     correct this, which is why this option is not the default.
4797
4798     You can switch the warning off for all characters by writing
4799     `-Wnormalized=none' or `-Wno-normalized'.  You should only do this
4800     if you are using some other normalization scheme (like "D"),
4801     because otherwise you can easily create bugs that are literally
4802     impossible to see.
4803
4804     Some characters in ISO 10646 have distinct meanings but look
4805     identical in some fonts or display methodologies, especially once
4806     formatting has been applied.  For instance `\u207F', "SUPERSCRIPT
4807     LATIN SMALL LETTER N", displays just like a regular `n' that has
4808     been placed in a superscript.  ISO 10646 defines the "NFKC"
4809     normalization scheme to convert all these into a standard form as
4810     well, and GCC warns if your code is not in NFKC if you use
4811     `-Wnormalized=nfkc'.  This warning is comparable to warning about
4812     every identifier that contains the letter O because it might be
4813     confused with the digit 0, and so is not the default, but may be
4814     useful as a local coding convention if the programming environment
4815     cannot be fixed to display these characters distinctly.
4816
4817`-Wno-deprecated'
4818     Do not warn about usage of deprecated features.  *Note Deprecated
4819     Features::.
4820
4821`-Wno-deprecated-declarations'
4822     Do not warn about uses of functions (*note Function Attributes::),
4823     variables (*note Variable Attributes::), and types (*note Type
4824     Attributes::) marked as deprecated by using the `deprecated'
4825     attribute.
4826
4827`-Wno-overflow'
4828     Do not warn about compile-time overflow in constant expressions.
4829
4830`-Wno-odr'
4831     Warn about One Definition Rule violations during link-time
4832     optimization.  Requires `-flto-odr-type-merging' to be enabled.
4833     Enabled by default.
4834
4835`-Wopenmp-simd'
4836     Warn if the vectorizer cost model overrides the OpenMP or the Cilk
4837     Plus simd directive set by user.  The `-fsimd-cost-model=unlimited'
4838     option can be used to relax the cost model.
4839
4840`-Woverride-init (C and Objective-C only)'
4841     Warn if an initialized field without side effects is overridden
4842     when using designated initializers (*note Designated Initializers:
4843     Designated Inits.).
4844
4845     This warning is included in `-Wextra'.  To get other `-Wextra'
4846     warnings without this one, use `-Wextra -Wno-override-init'.
4847
4848`-Wpacked'
4849     Warn if a structure is given the packed attribute, but the packed
4850     attribute has no effect on the layout or size of the structure.
4851     Such structures may be mis-aligned for little benefit.  For
4852     instance, in this code, the variable `f.x' in `struct bar' is
4853     misaligned even though `struct bar' does not itself have the
4854     packed attribute:
4855
4856          struct foo {
4857            int x;
4858            char a, b, c, d;
4859          } __attribute__((packed));
4860          struct bar {
4861            char z;
4862            struct foo f;
4863          };
4864
4865`-Wpacked-bitfield-compat'
4866     The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute
4867     on bit-fields of type `char'.  This has been fixed in GCC 4.4 but
4868     the change can lead to differences in the structure layout.  GCC
4869     informs you when the offset of such a field has changed in GCC 4.4.
4870     For example there is no longer a 4-bit padding between field `a'
4871     and `b' in this structure:
4872
4873          struct foo
4874          {
4875            char a:4;
4876            char b:8;
4877          } __attribute__ ((packed));
4878
4879     This warning is enabled by default.  Use
4880     `-Wno-packed-bitfield-compat' to disable this warning.
4881
4882`-Wpadded'
4883     Warn if padding is included in a structure, either to align an
4884     element of the structure or to align the whole structure.
4885     Sometimes when this happens it is possible to rearrange the fields
4886     of the structure to reduce the padding and so make the structure
4887     smaller.
4888
4889`-Wredundant-decls'
4890     Warn if anything is declared more than once in the same scope,
4891     even in cases where multiple declaration is valid and changes
4892     nothing.
4893
4894`-Wnested-externs (C and Objective-C only)'
4895     Warn if an `extern' declaration is encountered within a function.
4896
4897`-Wno-inherited-variadic-ctor'
4898     Suppress warnings about use of C++11 inheriting constructors when
4899     the base class inherited from has a C variadic constructor; the
4900     warning is on by default because the ellipsis is not inherited.
4901
4902`-Winline'
4903     Warn if a function that is declared as inline cannot be inlined.
4904     Even with this option, the compiler does not warn about failures to
4905     inline functions declared in system headers.
4906
4907     The compiler uses a variety of heuristics to determine whether or
4908     not to inline a function.  For example, the compiler takes into
4909     account the size of the function being inlined and the amount of
4910     inlining that has already been done in the current function.
4911     Therefore, seemingly insignificant changes in the source program
4912     can cause the warnings produced by `-Winline' to appear or
4913     disappear.
4914
4915`-Wno-invalid-offsetof (C++ and Objective-C++ only)'
4916     Suppress warnings from applying the `offsetof' macro to a non-POD
4917     type.  According to the 2014 ISO C++ standard, applying `offsetof'
4918     to a non-standard-layout type is undefined.  In existing C++
4919     implementations, however, `offsetof' typically gives meaningful
4920     results.  This flag is for users who are aware that they are
4921     writing nonportable code and who have deliberately chosen to
4922     ignore the warning about it.
4923
4924     The restrictions on `offsetof' may be relaxed in a future version
4925     of the C++ standard.
4926
4927`-Wno-int-to-pointer-cast'
4928     Suppress warnings from casts to pointer type of an integer of a
4929     different size. In C++, casting to a pointer type of smaller size
4930     is an error. `Wint-to-pointer-cast' is enabled by default.
4931
4932`-Wno-pointer-to-int-cast (C and Objective-C only)'
4933     Suppress warnings from casts from a pointer to an integer type of a
4934     different size.
4935
4936`-Winvalid-pch'
4937     Warn if a precompiled header (*note Precompiled Headers::) is
4938     found in the search path but can't be used.
4939
4940`-Wlong-long'
4941     Warn if `long long' type is used.  This is enabled by either
4942     `-Wpedantic' or `-Wtraditional' in ISO C90 and C++98 modes.  To
4943     inhibit the warning messages, use `-Wno-long-long'.
4944
4945`-Wvariadic-macros'
4946     Warn if variadic macros are used in ISO C90 mode, or if the GNU
4947     alternate syntax is used in ISO C99 mode.  This is enabled by
4948     either `-Wpedantic' or `-Wtraditional'.  To inhibit the warning
4949     messages, use `-Wno-variadic-macros'.
4950
4951`-Wvarargs'
4952     Warn upon questionable usage of the macros used to handle variable
4953     arguments like `va_start'.  This is default.  To inhibit the
4954     warning messages, use `-Wno-varargs'.
4955
4956`-Wvector-operation-performance'
4957     Warn if vector operation is not implemented via SIMD capabilities
4958     of the architecture.  Mainly useful for the performance tuning.
4959     Vector operation can be implemented `piecewise', which means that
4960     the scalar operation is performed on every vector element; `in
4961     parallel', which means that the vector operation is implemented
4962     using scalars of wider type, which normally is more performance
4963     efficient; and `as a single scalar', which means that vector fits
4964     into a scalar type.
4965
4966`-Wno-virtual-move-assign'
4967     Suppress warnings about inheriting from a virtual base with a
4968     non-trivial C++11 move assignment operator.  This is dangerous
4969     because if the virtual base is reachable along more than one path,
4970     it is moved multiple times, which can mean both objects end up in
4971     the moved-from state.  If the move assignment operator is written
4972     to avoid moving from a moved-from object, this warning can be
4973     disabled.
4974
4975`-Wvla'
4976     Warn if variable length array is used in the code.  `-Wno-vla'
4977     prevents the `-Wpedantic' warning of the variable length array.
4978
4979`-Wvolatile-register-var'
4980     Warn if a register variable is declared volatile.  The volatile
4981     modifier does not inhibit all optimizations that may eliminate
4982     reads and/or writes to register variables.  This warning is
4983     enabled by `-Wall'.
4984
4985`-Wdisabled-optimization'
4986     Warn if a requested optimization pass is disabled.  This warning
4987     does not generally indicate that there is anything wrong with your
4988     code; it merely indicates that GCC's optimizers are unable to
4989     handle the code effectively.  Often, the problem is that your code
4990     is too big or too complex; GCC refuses to optimize programs when
4991     the optimization itself is likely to take inordinate amounts of
4992     time.
4993
4994`-Wpointer-sign (C and Objective-C only)'
4995     Warn for pointer argument passing or assignment with different
4996     signedness.  This option is only supported for C and Objective-C.
4997     It is implied by `-Wall' and by `-Wpedantic', which can be
4998     disabled with `-Wno-pointer-sign'.
4999
5000`-Wstack-protector'
5001     This option is only active when `-fstack-protector' is active.  It
5002     warns about functions that are not protected against stack
5003     smashing.
5004
5005`-Woverlength-strings'
5006     Warn about string constants that are longer than the "minimum
5007     maximum" length specified in the C standard.  Modern compilers
5008     generally allow string constants that are much longer than the
5009     standard's minimum limit, but very portable programs should avoid
5010     using longer strings.
5011
5012     The limit applies _after_ string constant concatenation, and does
5013     not count the trailing NUL.  In C90, the limit was 509 characters;
5014     in C99, it was raised to 4095.  C++98 does not specify a normative
5015     minimum maximum, so we do not diagnose overlength strings in C++.
5016
5017     This option is implied by `-Wpedantic', and can be disabled with
5018     `-Wno-overlength-strings'.
5019
5020`-Wunsuffixed-float-constants (C and Objective-C only)'
5021     Issue a warning for any floating constant that does not have a
5022     suffix.  When used together with `-Wsystem-headers' it warns about
5023     such constants in system header files.  This can be useful when
5024     preparing code to use with the `FLOAT_CONST_DECIMAL64' pragma from
5025     the decimal floating-point extension to C99.
5026
5027`-Wno-designated-init (C and Objective-C only)'
5028     Suppress warnings when a positional initializer is used to
5029     initialize a structure that has been marked with the
5030     `designated_init' attribute.
5031
5032
5033
5034File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
5035
50363.9 Options for Debugging Your Program or GCC
5037=============================================
5038
5039GCC has various special options that are used for debugging either your
5040program or GCC:
5041
5042`-g'
5043     Produce debugging information in the operating system's native
5044     format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
5045     debugging information.
5046
5047     On most systems that use stabs format, `-g' enables use of extra
5048     debugging information that only GDB can use; this extra information
5049     makes debugging work better in GDB but probably makes other
5050     debuggers crash or refuse to read the program.  If you want to
5051     control for certain whether to generate the extra information, use
5052     `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see
5053     below).
5054
5055     GCC allows you to use `-g' with `-O'.  The shortcuts taken by
5056     optimized code may occasionally produce surprising results: some
5057     variables you declared may not exist at all; flow of control may
5058     briefly move where you did not expect it; some statements may not
5059     be executed because they compute constant results or their values
5060     are already at hand; some statements may execute in different
5061     places because they have been moved out of loops.
5062
5063     Nevertheless it proves possible to debug optimized output.  This
5064     makes it reasonable to use the optimizer for programs that might
5065     have bugs.
5066
5067     The following options are useful when GCC is generated with the
5068     capability for more than one debugging format.
5069
5070`-gsplit-dwarf'
5071     Separate as much dwarf debugging information as possible into a
5072     separate output file with the extension .dwo.  This option allows
5073     the build system to avoid linking files with debug information.  To
5074     be useful, this option requires a debugger capable of reading .dwo
5075     files.
5076
5077`-ggdb'
5078     Produce debugging information for use by GDB.  This means to use
5079     the most expressive format available (DWARF 2, stabs, or the
5080     native format if neither of those are supported), including GDB
5081     extensions if at all possible.
5082
5083`-gpubnames'
5084     Generate dwarf .debug_pubnames and .debug_pubtypes sections.
5085
5086`-ggnu-pubnames'
5087     Generate .debug_pubnames and .debug_pubtypes sections in a format
5088     suitable for conversion into a GDB index.  This option is only
5089     useful with a linker that can produce GDB index version 7.
5090
5091`-gstabs'
5092     Produce debugging information in stabs format (if that is
5093     supported), without GDB extensions.  This is the format used by
5094     DBX on most BSD systems.  On MIPS, Alpha and System V Release 4
5095     systems this option produces stabs debugging output that is not
5096     understood by DBX or SDB.  On System V Release 4 systems this
5097     option requires the GNU assembler.
5098
5099`-feliminate-unused-debug-symbols'
5100     Produce debugging information in stabs format (if that is
5101     supported), for only symbols that are actually used.
5102
5103`-femit-class-debug-always'
5104     Instead of emitting debugging information for a C++ class in only
5105     one object file, emit it in all object files using the class.
5106     This option should be used only with debuggers that are unable to
5107     handle the way GCC normally emits debugging information for
5108     classes because using this option increases the size of debugging
5109     information by as much as a factor of two.
5110
5111`-fdebug-types-section'
5112     When using DWARF Version 4 or higher, type DIEs can be put into
5113     their own `.debug_types' section instead of making them part of the
5114     `.debug_info' section.  It is more efficient to put them in a
5115     separate comdat sections since the linker can then remove
5116     duplicates.  But not all DWARF consumers support `.debug_types'
5117     sections yet and on some objects `.debug_types' produces larger
5118     instead of smaller debugging information.
5119
5120`-gstabs+'
5121     Produce debugging information in stabs format (if that is
5122     supported), using GNU extensions understood only by the GNU
5123     debugger (GDB).  The use of these extensions is likely to make
5124     other debuggers crash or refuse to read the program.
5125
5126`-gcoff'
5127     Produce debugging information in COFF format (if that is
5128     supported).  This is the format used by SDB on most System V
5129     systems prior to System V Release 4.
5130
5131`-gxcoff'
5132     Produce debugging information in XCOFF format (if that is
5133     supported).  This is the format used by the DBX debugger on IBM
5134     RS/6000 systems.
5135
5136`-gxcoff+'
5137     Produce debugging information in XCOFF format (if that is
5138     supported), using GNU extensions understood only by the GNU
5139     debugger (GDB).  The use of these extensions is likely to make
5140     other debuggers crash or refuse to read the program, and may cause
5141     assemblers other than the GNU assembler (GAS) to fail with an
5142     error.
5143
5144`-gdwarf-VERSION'
5145     Produce debugging information in DWARF format (if that is
5146     supported).  The value of VERSION may be either 2, 3, 4 or 5; the
5147     default version for most targets is 4.  DWARF Version 5 is only
5148     experimental.
5149
5150     Note that with DWARF Version 2, some ports require and always use
5151     some non-conflicting DWARF 3 extensions in the unwind tables.
5152
5153     Version 4 may require GDB 7.0 and `-fvar-tracking-assignments' for
5154     maximum benefit.
5155
5156`-grecord-gcc-switches'
5157     This switch causes the command-line options used to invoke the
5158     compiler that may affect code generation to be appended to the
5159     DW_AT_producer attribute in DWARF debugging information.  The
5160     options are concatenated with spaces separating them from each
5161     other and from the compiler version.  See also
5162     `-frecord-gcc-switches' for another way of storing compiler
5163     options into the object file.  This is the default.
5164
5165`-gno-record-gcc-switches'
5166     Disallow appending command-line options to the DW_AT_producer
5167     attribute in DWARF debugging information.
5168
5169`-gstrict-dwarf'
5170     Disallow using extensions of later DWARF standard version than
5171     selected with `-gdwarf-VERSION'.  On most targets using
5172     non-conflicting DWARF extensions from later standard versions is
5173     allowed.
5174
5175`-gno-strict-dwarf'
5176     Allow using extensions of later DWARF standard version than
5177     selected with `-gdwarf-VERSION'.
5178
5179`-gz[=TYPE]'
5180     Produce compressed debug sections in DWARF format, if that is
5181     supported.  If TYPE is not given, the default type depends on the
5182     capabilities of the assembler and linker used.  TYPE may be one of
5183     `none' (don't compress debug sections), `zlib' (use zlib
5184     compression in ELF gABI format), or `zlib-gnu' (use zlib
5185     compression in traditional GNU format).  If the linker doesn't
5186     support writing compressed debug sections, the option is rejected.
5187     Otherwise, if the assembler does not support them, `-gz' is
5188     silently ignored when producing object files.
5189
5190`-gvms'
5191     Produce debugging information in Alpha/VMS debug format (if that is
5192     supported).  This is the format used by DEBUG on Alpha/VMS systems.
5193
5194`-gLEVEL'
5195`-ggdbLEVEL'
5196`-gstabsLEVEL'
5197`-gcoffLEVEL'
5198`-gxcoffLEVEL'
5199`-gvmsLEVEL'
5200     Request debugging information and also use LEVEL to specify how
5201     much information.  The default level is 2.
5202
5203     Level 0 produces no debug information at all.  Thus, `-g0' negates
5204     `-g'.
5205
5206     Level 1 produces minimal information, enough for making backtraces
5207     in parts of the program that you don't plan to debug.  This
5208     includes descriptions of functions and external variables, and
5209     line number tables, but no information about local variables.
5210
5211     Level 3 includes extra information, such as all the macro
5212     definitions present in the program.  Some debuggers support macro
5213     expansion when you use `-g3'.
5214
5215     `-gdwarf-2' does not accept a concatenated debug level, because
5216     GCC used to support an option `-gdwarf' that meant to generate
5217     debug information in version 1 of the DWARF format (which is very
5218     different from version 2), and it would have been too confusing.
5219     That debug format is long obsolete, but the option cannot be
5220     changed now.  Instead use an additional `-gLEVEL' option to change
5221     the debug level for DWARF.
5222
5223`-gtoggle'
5224     Turn off generation of debug info, if leaving out this option
5225     generates it, or turn it on at level 2 otherwise.  The position of
5226     this argument in the command line does not matter; it takes effect
5227     after all other options are processed, and it does so only once,
5228     no matter how many times it is given.  This is mainly intended to
5229     be used with `-fcompare-debug'.
5230
5231`-fsanitize=address'
5232     Enable AddressSanitizer, a fast memory error detector.  Memory
5233     access instructions are instrumented to detect out-of-bounds and
5234     use-after-free bugs.  See
5235     `https://github.com/google/sanitizers/wiki/AddressSanitizer' for
5236     more details.  The run-time behavior can be influenced using the
5237     `ASAN_OPTIONS' environment variable.  When set to `help=1', the
5238     available options are shown at startup of the instrumended
5239     program.  See
5240     `https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags'
5241     for a list of supported options.
5242
5243`-fsanitize=kernel-address'
5244     Enable AddressSanitizer for Linux kernel.  See
5245     `https://github.com/google/kasan/wiki' for more details.
5246
5247`-fsanitize=thread'
5248     Enable ThreadSanitizer, a fast data race detector.  Memory access
5249     instructions are instrumented to detect data race bugs.  See
5250     `https://github.com/google/sanitizers/wiki#threadsanitizer' for
5251     more details. The run-time behavior can be influenced using the
5252     `TSAN_OPTIONS' environment variable; see
5253     `https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags'
5254     for a list of supported options.
5255
5256`-fsanitize=leak'
5257     Enable LeakSanitizer, a memory leak detector.  This option only
5258     matters for linking of executables and if neither
5259     `-fsanitize=address' nor `-fsanitize=thread' is used.  In that
5260     case the executable is linked against a library that overrides
5261     `malloc' and other allocator functions.  See
5262     `https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer'
5263     for more details.  The run-time behavior can be influenced using
5264     the `LSAN_OPTIONS' environment variable.
5265
5266`-fsanitize=undefined'
5267     Enable UndefinedBehaviorSanitizer, a fast undefined behavior
5268     detector.  Various computations are instrumented to detect
5269     undefined behavior at runtime.  Current suboptions are:
5270
5271    `-fsanitize=shift'
5272          This option enables checking that the result of a shift
5273          operation is not undefined.  Note that what exactly is
5274          considered undefined differs slightly between C and C++, as
5275          well as between ISO C90 and C99, etc.
5276
5277    `-fsanitize=integer-divide-by-zero'
5278          Detect integer division by zero as well as `INT_MIN / -1'
5279          division.
5280
5281    `-fsanitize=unreachable'
5282          With this option, the compiler turns the
5283          `__builtin_unreachable' call into a diagnostics message call
5284          instead.  When reaching the `__builtin_unreachable' call, the
5285          behavior is undefined.
5286
5287    `-fsanitize=vla-bound'
5288          This option instructs the compiler to check that the size of
5289          a variable length array is positive.
5290
5291    `-fsanitize=null'
5292          This option enables pointer checking.  Particularly, the
5293          application built with this option turned on will issue an
5294          error message when it tries to dereference a NULL pointer, or
5295          if a reference (possibly an rvalue reference) is bound to a
5296          NULL pointer, or if a method is invoked on an object pointed
5297          by a NULL pointer.
5298
5299    `-fsanitize=return'
5300          This option enables return statement checking.  Programs
5301          built with this option turned on will issue an error message
5302          when the end of a non-void function is reached without
5303          actually returning a value.  This option works in C++ only.
5304
5305    `-fsanitize=signed-integer-overflow'
5306          This option enables signed integer overflow checking.  We
5307          check that the result of `+', `*', and both unary and binary
5308          `-' does not overflow in the signed arithmetics.  Note,
5309          integer promotion rules must be taken into account.  That is,
5310          the following is not an overflow:
5311               signed char a = SCHAR_MAX;
5312               a++;
5313
5314    `-fsanitize=bounds'
5315          This option enables instrumentation of array bounds.  Various
5316          out of bounds accesses are detected.  Flexible array members,
5317          flexible array member-like arrays, and initializers of
5318          variables with static storage are not instrumented.
5319
5320    `-fsanitize=alignment'
5321          This option enables checking of alignment of pointers when
5322          they are dereferenced, or when a reference is bound to
5323          insufficiently aligned target, or when a method or
5324          constructor is invoked on insufficiently aligned object.
5325
5326    `-fsanitize=object-size'
5327          This option enables instrumentation of memory references
5328          using the `__builtin_object_size' function.  Various out of
5329          bounds pointer accesses are detected.
5330
5331    `-fsanitize=float-divide-by-zero'
5332          Detect floating-point division by zero.  Unlike other similar
5333          options, `-fsanitize=float-divide-by-zero' is not enabled by
5334          `-fsanitize=undefined', since floating-point division by zero
5335          can be a legitimate way of obtaining infinities and NaNs.
5336
5337    `-fsanitize=float-cast-overflow'
5338          This option enables floating-point type to integer conversion
5339          checking.  We check that the result of the conversion does
5340          not overflow.  Unlike other similar options,
5341          `-fsanitize=float-cast-overflow' is not enabled by
5342          `-fsanitize=undefined'.  This option does not work well with
5343          `FE_INVALID' exceptions enabled.
5344
5345    `-fsanitize=nonnull-attribute'
5346          This option enables instrumentation of calls, checking
5347          whether null values are not passed to arguments marked as
5348          requiring a non-null value by the `nonnull' function
5349          attribute.
5350
5351    `-fsanitize=returns-nonnull-attribute'
5352          This option enables instrumentation of return statements in
5353          functions marked with `returns_nonnull' function attribute,
5354          to detect returning of null values from such functions.
5355
5356    `-fsanitize=bool'
5357          This option enables instrumentation of loads from bool.  If a
5358          value other than 0/1 is loaded, a run-time error is issued.
5359
5360    `-fsanitize=enum'
5361          This option enables instrumentation of loads from an enum
5362          type.  If a value outside the range of values for the enum
5363          type is loaded, a run-time error is issued.
5364
5365    `-fsanitize=vptr'
5366          This option enables instrumentation of C++ member function
5367          calls, member accesses and some conversions between pointers
5368          to base and derived classes, to verify the referenced object
5369          has the correct dynamic type.
5370
5371
5372     While `-ftrapv' causes traps for signed overflows to be emitted,
5373     `-fsanitize=undefined' gives a diagnostic message.  This currently
5374     works only for the C family of languages.
5375
5376`-fno-sanitize=all'
5377     This option disables all previously enabled sanitizers.
5378     `-fsanitize=all' is not allowed, as some sanitizers cannot be used
5379     together.
5380
5381`-fasan-shadow-offset=NUMBER'
5382     This option forces GCC to use custom shadow offset in
5383     AddressSanitizer checks.  It is useful for experimenting with
5384     different shadow memory layouts in Kernel AddressSanitizer.
5385
5386`-fsanitize-recover[=OPTS]'
5387     `-fsanitize-recover=' controls error recovery mode for sanitizers
5388     mentioned in comma-separated list of OPTS.  Enabling this option
5389     for a sanitizer component causes it to attempt to continue running
5390     the program as if no error happened.  This means multiple runtime
5391     errors can be reported in a single program run, and the exit code
5392     of the program may indicate success even when errors have been
5393     reported.  The `-fno-sanitize-recover=' option can be used to alter
5394     this behavior: only the first detected error is reported and
5395     program then exits with a non-zero exit code.
5396
5397     Currently this feature only works for `-fsanitize=undefined' (and
5398     its suboptions except for `-fsanitize=unreachable' and
5399     `-fsanitize=return'), `-fsanitize=float-cast-overflow',
5400     `-fsanitize=float-divide-by-zero' and `-fsanitize=kernel-address'.
5401     For these sanitizers error recovery is turned on by default.
5402     `-fsanitize-recover=all' and `-fno-sanitize-recover=all' is also
5403     accepted, the former enables recovery for all sanitizers that
5404     support it, the latter disables recovery for all sanitizers that
5405     support it.
5406
5407     Syntax without explicit OPTS parameter is deprecated.  It is
5408     equivalent to
5409          -fsanitize-recover=undefined,float-cast-overflow,float-divide-by-zero
5410     Similarly `-fno-sanitize-recover' is equivalent to
5411          -fno-sanitize-recover=undefined,float-cast-overflow,float-divide-by-zero
5412
5413`-fsanitize-undefined-trap-on-error'
5414     The `-fsanitize-undefined-trap-on-error' option instructs the
5415     compiler to report undefined behavior using `__builtin_trap'
5416     rather than a `libubsan' library routine.  The advantage of this
5417     is that the `libubsan' library is not needed and is not linked in,
5418     so this is usable even in freestanding environments.
5419
5420`-fcheck-pointer-bounds'
5421     Enable Pointer Bounds Checker instrumentation.  Each memory
5422     reference is instrumented with checks of the pointer used for
5423     memory access against bounds associated with that pointer.
5424
5425     Currently there is only an implementation for Intel MPX available,
5426     thus x86 target and `-mmpx' are required to enable this feature.
5427     MPX-based instrumentation requires a runtime library to enable MPX
5428     in hardware and handle bounds violation signals.  By default when
5429     `-fcheck-pointer-bounds' and `-mmpx' options are used to link a
5430     program, the GCC driver links against the `libmpx' runtime library
5431     and `libmpxwrappers' library.  It also passes '-z bndplt' to a
5432     linker in case it supports this option (which is checked on libmpx
5433     configuration).  Note that old versions of linker may ignore
5434     option.  Gold linker doesn't support '-z bndplt' option.  With no
5435     '-z bndplt' support in linker all calls to dynamic libraries lose
5436     passed bounds reducing overall protection level.  It's highly
5437     recommended to use linker with '-z bndplt' support.  In case such
5438     linker is not available it is adviced to always use
5439     `-static-libmpxwrappers' for better protection level or use
5440     `-static' to completely avoid external calls to dynamic libraries.
5441     MPX-based instrumentation may be used for debugging and also may
5442     be included in production code to increase program security.
5443     Depending on usage, you may have different requirements for the
5444     runtime library.  The current version of the MPX runtime library
5445     is more oriented for use as a debugging tool.  MPX runtime library
5446     usage implies `-lpthread'.  See also `-static-libmpx'.  The
5447     runtime library  behavior can be influenced using various
5448     `CHKP_RT_*' environment variables.  See
5449     `https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler'
5450     for more details.
5451
5452     Generated instrumentation may be controlled by various `-fchkp-*'
5453     options and by the `bnd_variable_size' structure field attribute
5454     (*note Type Attributes::) and `bnd_legacy', and `bnd_instrument'
5455     function attributes (*note Function Attributes::).  GCC also
5456     provides a number of built-in functions for controlling the
5457     Pointer Bounds Checker.  *Note Pointer Bounds Checker builtins::,
5458     for more information.
5459
5460`-fchkp-check-incomplete-type'
5461     Generate pointer bounds checks for variables with incomplete type.
5462     Enabled by default.
5463
5464`-fchkp-narrow-bounds'
5465     Controls bounds used by Pointer Bounds Checker for pointers to
5466     object fields.  If narrowing is enabled then field bounds are
5467     used.  Otherwise object bounds are used.  See also
5468     `-fchkp-narrow-to-innermost-array' and
5469     `-fchkp-first-field-has-own-bounds'.  Enabled by default.
5470
5471`-fchkp-first-field-has-own-bounds'
5472     Forces Pointer Bounds Checker to use narrowed bounds for the
5473     address of the first field in the structure.  By default a pointer
5474     to the first field has the same bounds as a pointer to the whole
5475     structure.
5476
5477`-fchkp-narrow-to-innermost-array'
5478     Forces Pointer Bounds Checker to use bounds of the innermost
5479     arrays in case of nested static array access.  By default this
5480     option is disabled and bounds of the outermost array are used.
5481
5482`-fchkp-optimize'
5483     Enables Pointer Bounds Checker optimizations.  Enabled by default
5484     at optimization levels `-O', `-O2', `-O3'.
5485
5486`-fchkp-use-fast-string-functions'
5487     Enables use of `*_nobnd' versions of string functions (not copying
5488     bounds) by Pointer Bounds Checker.  Disabled by default.
5489
5490`-fchkp-use-nochk-string-functions'
5491     Enables use of `*_nochk' versions of string functions (not
5492     checking bounds) by Pointer Bounds Checker.  Disabled by default.
5493
5494`-fchkp-use-static-bounds'
5495     Allow Pointer Bounds Checker to generate static bounds holding
5496     bounds of static variables.  Enabled by default.
5497
5498`-fchkp-use-static-const-bounds'
5499     Use statically-initialized bounds for constant bounds instead of
5500     generating them each time they are required.  By default enabled
5501     when `-fchkp-use-static-bounds' is enabled.
5502
5503`-fchkp-treat-zero-dynamic-size-as-infinite'
5504     With this option, objects with incomplete type whose
5505     dynamically-obtained size is zero are treated as having infinite
5506     size instead by Pointer Bounds Checker.  This option may be
5507     helpful if a program is linked with a library missing size
5508     information for some symbols.  Disabled by default.
5509
5510`-fchkp-check-read'
5511     Instructs Pointer Bounds Checker to generate checks for all read
5512     accesses to memory.  Enabled by default.
5513
5514`-fchkp-check-write'
5515     Instructs Pointer Bounds Checker to generate checks for all write
5516     accesses to memory.  Enabled by default.
5517
5518`-fchkp-store-bounds'
5519     Instructs Pointer Bounds Checker to generate bounds stores for
5520     pointer writes.  Enabled by default.
5521
5522`-fchkp-instrument-calls'
5523     Instructs Pointer Bounds Checker to pass pointer bounds to calls.
5524     Enabled by default.
5525
5526`-fchkp-instrument-marked-only'
5527     Instructs Pointer Bounds Checker to instrument only functions
5528     marked with the `bnd_instrument' attribute (*note Function
5529     Attributes::).  Disabled by default.
5530
5531`-fchkp-use-wrappers'
5532     Allows Pointer Bounds Checker to replace calls to built-in
5533     functions with calls to wrapper functions.  When
5534     `-fchkp-use-wrappers' is used to link a program, the GCC driver
5535     automatically links against `libmpxwrappers'.  See also
5536     `-static-libmpxwrappers'.  Enabled by default.
5537
5538`-fdump-final-insns[=FILE]'
5539     Dump the final internal representation (RTL) to FILE.  If the
5540     optional argument is omitted (or if FILE is `.'), the name of the
5541     dump file is determined by appending `.gkd' to the compilation
5542     output file name.
5543
5544`-fcompare-debug[=OPTS]'
5545     If no error occurs during compilation, run the compiler a second
5546     time, adding OPTS and `-fcompare-debug-second' to the arguments
5547     passed to the second compilation.  Dump the final internal
5548     representation in both compilations, and print an error if they
5549     differ.
5550
5551     If the equal sign is omitted, the default `-gtoggle' is used.
5552
5553     The environment variable `GCC_COMPARE_DEBUG', if defined, non-empty
5554     and nonzero, implicitly enables `-fcompare-debug'.  If
5555     `GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
5556     then it is used for OPTS, otherwise the default `-gtoggle' is used.
5557
5558     `-fcompare-debug=', with the equal sign but without OPTS, is
5559     equivalent to `-fno-compare-debug', which disables the dumping of
5560     the final representation and the second compilation, preventing
5561     even `GCC_COMPARE_DEBUG' from taking effect.
5562
5563     To verify full coverage during `-fcompare-debug' testing, set
5564     `GCC_COMPARE_DEBUG' to say `-fcompare-debug-not-overridden', which
5565     GCC rejects as an invalid option in any actual compilation (rather
5566     than preprocessing, assembly or linking).  To get just a warning,
5567     setting `GCC_COMPARE_DEBUG' to `-w%n-fcompare-debug not
5568     overridden' will do.
5569
5570`-fcompare-debug-second'
5571     This option is implicitly passed to the compiler for the second
5572     compilation requested by `-fcompare-debug', along with options to
5573     silence warnings, and omitting other options that would cause
5574     side-effect compiler outputs to files or to the standard output.
5575     Dump files and preserved temporary files are renamed so as to
5576     contain the `.gk' additional extension during the second
5577     compilation, to avoid overwriting those generated by the first.
5578
5579     When this option is passed to the compiler driver, it causes the
5580     _first_ compilation to be skipped, which makes it useful for little
5581     other than debugging the compiler proper.
5582
5583`-feliminate-dwarf2-dups'
5584     Compress DWARF 2 debugging information by eliminating duplicated
5585     information about each symbol.  This option only makes sense when
5586     generating DWARF 2 debugging information with `-gdwarf-2'.
5587
5588`-femit-struct-debug-baseonly'
5589     Emit debug information for struct-like types only when the base
5590     name of the compilation source file matches the base name of file
5591     in which the struct is defined.
5592
5593     This option substantially reduces the size of debugging
5594     information, but at significant potential loss in type information
5595     to the debugger.  See `-femit-struct-debug-reduced' for a less
5596     aggressive option.  See `-femit-struct-debug-detailed' for more
5597     detailed control.
5598
5599     This option works only with DWARF 2.
5600
5601`-femit-struct-debug-reduced'
5602     Emit debug information for struct-like types only when the base
5603     name of the compilation source file matches the base name of file
5604     in which the type is defined, unless the struct is a template or
5605     defined in a system header.
5606
5607     This option significantly reduces the size of debugging
5608     information, with some potential loss in type information to the
5609     debugger.  See `-femit-struct-debug-baseonly' for a more
5610     aggressive option.  See `-femit-struct-debug-detailed' for more
5611     detailed control.
5612
5613     This option works only with DWARF 2.
5614
5615`-femit-struct-debug-detailed[=SPEC-LIST]'
5616     Specify the struct-like types for which the compiler generates
5617     debug information.  The intent is to reduce duplicate struct debug
5618     information between different object files within the same program.
5619
5620     This option is a detailed version of `-femit-struct-debug-reduced'
5621     and `-femit-struct-debug-baseonly', which serves for most needs.
5622
5623     A specification has the syntax
5624     [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none')
5625
5626     The optional first word limits the specification to structs that
5627     are used directly (`dir:') or used indirectly (`ind:').  A struct
5628     type is used directly when it is the type of a variable, member.
5629     Indirect uses arise through pointers to structs.  That is, when
5630     use of an incomplete struct is valid, the use is indirect.  An
5631     example is `struct one direct; struct two * indirect;'.
5632
5633     The optional second word limits the specification to ordinary
5634     structs (`ord:') or generic structs (`gen:').  Generic structs are
5635     a bit complicated to explain.  For C++, these are non-explicit
5636     specializations of template classes, or non-template classes
5637     within the above.  Other programming languages have generics, but
5638     `-femit-struct-debug-detailed' does not yet implement them.
5639
5640     The third word specifies the source files for those structs for
5641     which the compiler should emit debug information.  The values
5642     `none' and `any' have the normal meaning.  The value `base' means
5643     that the base of name of the file in which the type declaration
5644     appears must match the base of the name of the main compilation
5645     file.  In practice, this means that when compiling `foo.c', debug
5646     information is generated for types declared in that file and
5647     `foo.h', but not other header files.  The value `sys' means those
5648     types satisfying `base' or declared in system or compiler headers.
5649
5650     You may need to experiment to determine the best settings for your
5651     application.
5652
5653     The default is `-femit-struct-debug-detailed=all'.
5654
5655     This option works only with DWARF 2.
5656
5657`-fno-merge-debug-strings'
5658     Direct the linker to not merge together strings in the debugging
5659     information that are identical in different object files.  Merging
5660     is not supported by all assemblers or linkers.  Merging decreases
5661     the size of the debug information in the output file at the cost
5662     of increasing link processing time.  Merging is enabled by default.
5663
5664`-fdebug-prefix-map=OLD=NEW'
5665     When compiling files in directory `OLD', record debugging
5666     information describing them as in `NEW' instead.
5667
5668`-fno-dwarf2-cfi-asm'
5669     Emit DWARF 2 unwind info as compiler generated `.eh_frame' section
5670     instead of using GAS `.cfi_*' directives.
5671
5672`-p'
5673     Generate extra code to write profile information suitable for the
5674     analysis program `prof'.  You must use this option when compiling
5675     the source files you want data about, and you must also use it when
5676     linking.
5677
5678`-pg'
5679     Generate extra code to write profile information suitable for the
5680     analysis program `gprof'.  You must use this option when compiling
5681     the source files you want data about, and you must also use it when
5682     linking.
5683
5684`-Q'
5685     Makes the compiler print out each function name as it is compiled,
5686     and print some statistics about each pass when it finishes.
5687
5688`-ftime-report'
5689     Makes the compiler print some statistics about the time consumed
5690     by each pass when it finishes.
5691
5692`-fmem-report'
5693     Makes the compiler print some statistics about permanent memory
5694     allocation when it finishes.
5695
5696`-fmem-report-wpa'
5697     Makes the compiler print some statistics about permanent memory
5698     allocation for the WPA phase only.
5699
5700`-fpre-ipa-mem-report'
5701
5702`-fpost-ipa-mem-report'
5703     Makes the compiler print some statistics about permanent memory
5704     allocation before or after interprocedural optimization.
5705
5706`-fprofile-report'
5707     Makes the compiler print some statistics about consistency of the
5708     (estimated) profile and effect of individual passes.
5709
5710`-fstack-usage'
5711     Makes the compiler output stack usage information for the program,
5712     on a per-function basis.  The filename for the dump is made by
5713     appending `.su' to the AUXNAME.  AUXNAME is generated from the
5714     name of the output file, if explicitly specified and it is not an
5715     executable, otherwise it is the basename of the source file.  An
5716     entry is made up of three fields:
5717
5718        * The name of the function.
5719
5720        * A number of bytes.
5721
5722        * One or more qualifiers: `static', `dynamic', `bounded'.
5723
5724     The qualifier `static' means that the function manipulates the
5725     stack statically: a fixed number of bytes are allocated for the
5726     frame on function entry and released on function exit; no stack
5727     adjustments are otherwise made in the function.  The second field
5728     is this fixed number of bytes.
5729
5730     The qualifier `dynamic' means that the function manipulates the
5731     stack dynamically: in addition to the static allocation described
5732     above, stack adjustments are made in the body of the function, for
5733     example to push/pop arguments around function calls.  If the
5734     qualifier `bounded' is also present, the amount of these
5735     adjustments is bounded at compile time and the second field is an
5736     upper bound of the total amount of stack used by the function.  If
5737     it is not present, the amount of these adjustments is not bounded
5738     at compile time and the second field only represents the bounded
5739     part.
5740
5741`-fprofile-arcs'
5742     Add code so that program flow "arcs" are instrumented.  During
5743     execution the program records how many times each branch and call
5744     is executed and how many times it is taken or returns.  When the
5745     compiled program exits it saves this data to a file called
5746     `AUXNAME.gcda' for each source file.  The data may be used for
5747     profile-directed optimizations (`-fbranch-probabilities'), or for
5748     test coverage analysis (`-ftest-coverage').  Each object file's
5749     AUXNAME is generated from the name of the output file, if
5750     explicitly specified and it is not the final executable, otherwise
5751     it is the basename of the source file.  In both cases any suffix
5752     is removed (e.g. `foo.gcda' for input file `dir/foo.c', or
5753     `dir/foo.gcda' for output file specified as `-o dir/foo.o').
5754     *Note Cross-profiling::.
5755
5756`--coverage'
5757     This option is used to compile and link code instrumented for
5758     coverage analysis.  The option is a synonym for `-fprofile-arcs'
5759     `-ftest-coverage' (when compiling) and `-lgcov' (when linking).
5760     See the documentation for those options for more details.
5761
5762        * Compile the source files with `-fprofile-arcs' plus
5763          optimization and code generation options.  For test coverage
5764          analysis, use the additional `-ftest-coverage' option.  You
5765          do not need to profile every source file in a program.
5766
5767        * Link your object files with `-lgcov' or `-fprofile-arcs' (the
5768          latter implies the former).
5769
5770        * Run the program on a representative workload to generate the
5771          arc profile information.  This may be repeated any number of
5772          times.  You can run concurrent instances of your program, and
5773          provided that the file system supports locking, the data
5774          files will be correctly updated.  Also `fork' calls are
5775          detected and correctly handled (double counting will not
5776          happen).
5777
5778        * For profile-directed optimizations, compile the source files
5779          again with the same optimization and code generation options
5780          plus `-fbranch-probabilities' (*note Options that Control
5781          Optimization: Optimize Options.).
5782
5783        * For test coverage analysis, use `gcov' to produce human
5784          readable information from the `.gcno' and `.gcda' files.
5785          Refer to the `gcov' documentation for further information.
5786
5787
5788     With `-fprofile-arcs', for each function of your program GCC
5789     creates a program flow graph, then finds a spanning tree for the
5790     graph.  Only arcs that are not on the spanning tree have to be
5791     instrumented: the compiler adds code to count the number of times
5792     that these arcs are executed.  When an arc is the only exit or
5793     only entrance to a block, the instrumentation code can be added to
5794     the block; otherwise, a new basic block must be created to hold
5795     the instrumentation code.
5796
5797`-ftest-coverage'
5798     Produce a notes file that the `gcov' code-coverage utility (*note
5799     `gcov'--a Test Coverage Program: Gcov.) can use to show program
5800     coverage.  Each source file's note file is called `AUXNAME.gcno'.
5801     Refer to the `-fprofile-arcs' option above for a description of
5802     AUXNAME and instructions on how to generate test coverage data.
5803     Coverage data matches the source files more closely if you do not
5804     optimize.
5805
5806`-fdbg-cnt-list'
5807     Print the name and the counter upper bound for all debug counters.
5808
5809`-fdbg-cnt=COUNTER-VALUE-LIST'
5810     Set the internal debug counter upper bound.  COUNTER-VALUE-LIST is
5811     a comma-separated list of NAME:VALUE pairs which sets the upper
5812     bound of each debug counter NAME to VALUE.  All debug counters
5813     have the initial upper bound of `UINT_MAX'; thus `dbg_cnt' returns
5814     true always unless the upper bound is set by this option.  For
5815     example, with `-fdbg-cnt=dce:10,tail_call:0', `dbg_cnt(dce)'
5816     returns true only for first 10 invocations.
5817
5818`-fenable-KIND-PASS'
5819`-fdisable-KIND-PASS=RANGE-LIST'
5820     This is a set of options that are used to explicitly disable/enable
5821     optimization passes.  These options are intended for use for
5822     debugging GCC.  Compiler users should use regular options for
5823     enabling/disabling passes instead.
5824
5825    `-fdisable-ipa-PASS'
5826          Disable IPA pass PASS. PASS is the pass name.  If the same
5827          pass is statically invoked in the compiler multiple times,
5828          the pass name should be appended with a sequential number
5829          starting from 1.
5830
5831    `-fdisable-rtl-PASS'
5832    `-fdisable-rtl-PASS=RANGE-LIST'
5833          Disable RTL pass PASS.  PASS is the pass name.  If the same
5834          pass is statically invoked in the compiler multiple times,
5835          the pass name should be appended with a sequential number
5836          starting from 1.  RANGE-LIST is a comma-separated list of
5837          function ranges or assembler names.  Each range is a number
5838          pair separated by a colon.  The range is inclusive in both
5839          ends.  If the range is trivial, the number pair can be
5840          simplified as a single number.  If the function's call graph
5841          node's UID falls within one of the specified ranges, the PASS
5842          is disabled for that function.  The UID is shown in the
5843          function header of a dump file, and the pass names can be
5844          dumped by using option `-fdump-passes'.
5845
5846    `-fdisable-tree-PASS'
5847    `-fdisable-tree-PASS=RANGE-LIST'
5848          Disable tree pass PASS.  See `-fdisable-rtl' for the
5849          description of option arguments.
5850
5851    `-fenable-ipa-PASS'
5852          Enable IPA pass PASS.  PASS is the pass name.  If the same
5853          pass is statically invoked in the compiler multiple times,
5854          the pass name should be appended with a sequential number
5855          starting from 1.
5856
5857    `-fenable-rtl-PASS'
5858    `-fenable-rtl-PASS=RANGE-LIST'
5859          Enable RTL pass PASS.  See `-fdisable-rtl' for option argument
5860          description and examples.
5861
5862    `-fenable-tree-PASS'
5863    `-fenable-tree-PASS=RANGE-LIST'
5864          Enable tree pass PASS.  See `-fdisable-rtl' for the
5865          description of option arguments.
5866
5867
5868     Here are some examples showing uses of these options.
5869
5870
5871          # disable ccp1 for all functions
5872             -fdisable-tree-ccp1
5873          # disable complete unroll for function whose cgraph node uid is 1
5874             -fenable-tree-cunroll=1
5875          # disable gcse2 for functions at the following ranges [1,1],
5876          # [300,400], and [400,1000]
5877          # disable gcse2 for functions foo and foo2
5878             -fdisable-rtl-gcse2=foo,foo2
5879          # disable early inlining
5880             -fdisable-tree-einline
5881          # disable ipa inlining
5882             -fdisable-ipa-inline
5883          # enable tree full unroll
5884             -fenable-tree-unroll
5885
5886`-dLETTERS'
5887`-fdump-rtl-PASS'
5888`-fdump-rtl-PASS=FILENAME'
5889     Says to make debugging dumps during compilation at times specified
5890     by LETTERS.  This is used for debugging the RTL-based passes of the
5891     compiler.  The file names for most of the dumps are made by
5892     appending a pass number and a word to the DUMPNAME, and the files
5893     are created in the directory of the output file. In case of
5894     `=FILENAME' option, the dump is output on the given file instead
5895     of the pass numbered dump files. Note that the pass number is
5896     computed statically as passes get registered into the pass manager.
5897     Thus the numbering is not related to the dynamic order of
5898     execution of passes.  In particular, a pass installed by a plugin
5899     could have a number over 200 even if it executed quite early.
5900     DUMPNAME is generated from the name of the output file, if
5901     explicitly specified and it is not an executable, otherwise it is
5902     the basename of the source file. These switches may have different
5903     effects when `-E' is used for preprocessing.
5904
5905     Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d'
5906     option LETTERS.  Here are the possible letters for use in PASS and
5907     LETTERS, and their meanings:
5908
5909    `-fdump-rtl-alignments'
5910          Dump after branch alignments have been computed.
5911
5912    `-fdump-rtl-asmcons'
5913          Dump after fixing rtl statements that have unsatisfied in/out
5914          constraints.
5915
5916    `-fdump-rtl-auto_inc_dec'
5917          Dump after auto-inc-dec discovery.  This pass is only run on
5918          architectures that have auto inc or auto dec instructions.
5919
5920    `-fdump-rtl-barriers'
5921          Dump after cleaning up the barrier instructions.
5922
5923    `-fdump-rtl-bbpart'
5924          Dump after partitioning hot and cold basic blocks.
5925
5926    `-fdump-rtl-bbro'
5927          Dump after block reordering.
5928
5929    `-fdump-rtl-btl1'
5930    `-fdump-rtl-btl2'
5931          `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after
5932          the two branch target load optimization passes.
5933
5934    `-fdump-rtl-bypass'
5935          Dump after jump bypassing and control flow optimizations.
5936
5937    `-fdump-rtl-combine'
5938          Dump after the RTL instruction combination pass.
5939
5940    `-fdump-rtl-compgotos'
5941          Dump after duplicating the computed gotos.
5942
5943    `-fdump-rtl-ce1'
5944    `-fdump-rtl-ce2'
5945    `-fdump-rtl-ce3'
5946          `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3'
5947          enable dumping after the three if conversion passes.
5948
5949    `-fdump-rtl-cprop_hardreg'
5950          Dump after hard register copy propagation.
5951
5952    `-fdump-rtl-csa'
5953          Dump after combining stack adjustments.
5954
5955    `-fdump-rtl-cse1'
5956    `-fdump-rtl-cse2'
5957          `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after
5958          the two common subexpression elimination passes.
5959
5960    `-fdump-rtl-dce'
5961          Dump after the standalone dead code elimination passes.
5962
5963    `-fdump-rtl-dbr'
5964          Dump after delayed branch scheduling.
5965
5966    `-fdump-rtl-dce1'
5967    `-fdump-rtl-dce2'
5968          `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after
5969          the two dead store elimination passes.
5970
5971    `-fdump-rtl-eh'
5972          Dump after finalization of EH handling code.
5973
5974    `-fdump-rtl-eh_ranges'
5975          Dump after conversion of EH handling range regions.
5976
5977    `-fdump-rtl-expand'
5978          Dump after RTL generation.
5979
5980    `-fdump-rtl-fwprop1'
5981    `-fdump-rtl-fwprop2'
5982          `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping
5983          after the two forward propagation passes.
5984
5985    `-fdump-rtl-gcse1'
5986    `-fdump-rtl-gcse2'
5987          `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping
5988          after global common subexpression elimination.
5989
5990    `-fdump-rtl-init-regs'
5991          Dump after the initialization of the registers.
5992
5993    `-fdump-rtl-initvals'
5994          Dump after the computation of the initial value sets.
5995
5996    `-fdump-rtl-into_cfglayout'
5997          Dump after converting to cfglayout mode.
5998
5999    `-fdump-rtl-ira'
6000          Dump after iterated register allocation.
6001
6002    `-fdump-rtl-jump'
6003          Dump after the second jump optimization.
6004
6005    `-fdump-rtl-loop2'
6006          `-fdump-rtl-loop2' enables dumping after the rtl loop
6007          optimization passes.
6008
6009    `-fdump-rtl-mach'
6010          Dump after performing the machine dependent reorganization
6011          pass, if that pass exists.
6012
6013    `-fdump-rtl-mode_sw'
6014          Dump after removing redundant mode switches.
6015
6016    `-fdump-rtl-rnreg'
6017          Dump after register renumbering.
6018
6019    `-fdump-rtl-outof_cfglayout'
6020          Dump after converting from cfglayout mode.
6021
6022    `-fdump-rtl-peephole2'
6023          Dump after the peephole pass.
6024
6025    `-fdump-rtl-postreload'
6026          Dump after post-reload optimizations.
6027
6028    `-fdump-rtl-pro_and_epilogue'
6029          Dump after generating the function prologues and epilogues.
6030
6031    `-fdump-rtl-sched1'
6032    `-fdump-rtl-sched2'
6033          `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping
6034          after the basic block scheduling passes.
6035
6036    `-fdump-rtl-ree'
6037          Dump after sign/zero extension elimination.
6038
6039    `-fdump-rtl-seqabstr'
6040          Dump after common sequence discovery.
6041
6042    `-fdump-rtl-shorten'
6043          Dump after shortening branches.
6044
6045    `-fdump-rtl-sibling'
6046          Dump after sibling call optimizations.
6047
6048    `-fdump-rtl-split1'
6049    `-fdump-rtl-split2'
6050    `-fdump-rtl-split3'
6051    `-fdump-rtl-split4'
6052    `-fdump-rtl-split5'
6053          These options enable dumping after five rounds of instruction
6054          splitting.
6055
6056    `-fdump-rtl-sms'
6057          Dump after modulo scheduling.  This pass is only run on some
6058          architectures.
6059
6060    `-fdump-rtl-stack'
6061          Dump after conversion from GCC's "flat register file"
6062          registers to the x87's stack-like registers.  This pass is
6063          only run on x86 variants.
6064
6065    `-fdump-rtl-subreg1'
6066    `-fdump-rtl-subreg2'
6067          `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping
6068          after the two subreg expansion passes.
6069
6070    `-fdump-rtl-unshare'
6071          Dump after all rtl has been unshared.
6072
6073    `-fdump-rtl-vartrack'
6074          Dump after variable tracking.
6075
6076    `-fdump-rtl-vregs'
6077          Dump after converting virtual registers to hard registers.
6078
6079    `-fdump-rtl-web'
6080          Dump after live range splitting.
6081
6082    `-fdump-rtl-regclass'
6083    `-fdump-rtl-subregs_of_mode_init'
6084    `-fdump-rtl-subregs_of_mode_finish'
6085    `-fdump-rtl-dfinit'
6086    `-fdump-rtl-dfinish'
6087          These dumps are defined but always produce empty files.
6088
6089    `-da'
6090    `-fdump-rtl-all'
6091          Produce all the dumps listed above.
6092
6093    `-dA'
6094          Annotate the assembler output with miscellaneous debugging
6095          information.
6096
6097    `-dD'
6098          Dump all macro definitions, at the end of preprocessing, in
6099          addition to normal output.
6100
6101    `-dH'
6102          Produce a core dump whenever an error occurs.
6103
6104    `-dp'
6105          Annotate the assembler output with a comment indicating which
6106          pattern and alternative is used.  The length of each
6107          instruction is also printed.
6108
6109    `-dP'
6110          Dump the RTL in the assembler output as a comment before each
6111          instruction.  Also turns on `-dp' annotation.
6112
6113    `-dx'
6114          Just generate RTL for a function instead of compiling it.
6115          Usually used with `-fdump-rtl-expand'.
6116
6117`-fdump-noaddr'
6118     When doing debugging dumps, suppress address output.  This makes
6119     it more feasible to use diff on debugging dumps for compiler
6120     invocations with different compiler binaries and/or different text
6121     / bss / data / heap / stack / dso start locations.
6122
6123`-freport-bug'
6124     Collect and dump debug information into temporary file if ICE in
6125     C/C++ compiler occured.
6126
6127`-fdump-unnumbered'
6128     When doing debugging dumps, suppress instruction numbers and
6129     address output.  This makes it more feasible to use diff on
6130     debugging dumps for compiler invocations with different options,
6131     in particular with and without `-g'.
6132
6133`-fdump-unnumbered-links'
6134     When doing debugging dumps (see `-d' option above), suppress
6135     instruction numbers for the links to the previous and next
6136     instructions in a sequence.
6137
6138`-fdump-translation-unit (C++ only)'
6139`-fdump-translation-unit-OPTIONS (C++ only)'
6140     Dump a representation of the tree structure for the entire
6141     translation unit to a file.  The file name is made by appending
6142     `.tu' to the source file name, and the file is created in the same
6143     directory as the output file.  If the `-OPTIONS' form is used,
6144     OPTIONS controls the details of the dump as described for the
6145     `-fdump-tree' options.
6146
6147`-fdump-class-hierarchy (C++ only)'
6148`-fdump-class-hierarchy-OPTIONS (C++ only)'
6149     Dump a representation of each class's hierarchy and virtual
6150     function table layout to a file.  The file name is made by
6151     appending `.class' to the source file name, and the file is
6152     created in the same directory as the output file.  If the
6153     `-OPTIONS' form is used, OPTIONS controls the details of the dump
6154     as described for the `-fdump-tree' options.
6155
6156`-fdump-ipa-SWITCH'
6157     Control the dumping at various stages of inter-procedural analysis
6158     language tree to a file.  The file name is generated by appending a
6159     switch specific suffix to the source file name, and the file is
6160     created in the same directory as the output file.  The following
6161     dumps are possible:
6162
6163    `all'
6164          Enables all inter-procedural analysis dumps.
6165
6166    `cgraph'
6167          Dumps information about call-graph optimization, unused
6168          function removal, and inlining decisions.
6169
6170    `inline'
6171          Dump after function inlining.
6172
6173
6174`-fdump-passes'
6175     Dump the list of optimization passes that are turned on and off by
6176     the current command-line options.
6177
6178`-fdump-statistics-OPTION'
6179     Enable and control dumping of pass statistics in a separate file.
6180     The file name is generated by appending a suffix ending in
6181     `.statistics' to the source file name, and the file is created in
6182     the same directory as the output file.  If the `-OPTION' form is
6183     used, `-stats' causes counters to be summed over the whole
6184     compilation unit while `-details' dumps every event as the passes
6185     generate them.  The default with no option is to sum counters for
6186     each function compiled.
6187
6188`-fdump-tree-SWITCH'
6189`-fdump-tree-SWITCH-OPTIONS'
6190`-fdump-tree-SWITCH-OPTIONS=FILENAME'
6191     Control the dumping at various stages of processing the
6192     intermediate language tree to a file.  The file name is generated
6193     by appending a switch-specific suffix to the source file name, and
6194     the file is created in the same directory as the output file. In
6195     case of `=FILENAME' option, the dump is output on the given file
6196     instead of the auto named dump files.  If the `-OPTIONS' form is
6197     used, OPTIONS is a list of `-' separated options which control the
6198     details of the dump.  Not all options are applicable to all dumps;
6199     those that are not meaningful are ignored.  The following options
6200     are available
6201
6202    `address'
6203          Print the address of each node.  Usually this is not
6204          meaningful as it changes according to the environment and
6205          source file.  Its primary use is for tying up a dump file
6206          with a debug environment.
6207
6208    `asmname'
6209          If `DECL_ASSEMBLER_NAME' has been set for a given decl, use
6210          that in the dump instead of `DECL_NAME'.  Its primary use is
6211          ease of use working backward from mangled names in the
6212          assembly file.
6213
6214    `slim'
6215          When dumping front-end intermediate representations, inhibit
6216          dumping of members of a scope or body of a function merely
6217          because that scope has been reached.  Only dump such items
6218          when they are directly reachable by some other path.
6219
6220          When dumping pretty-printed trees, this option inhibits
6221          dumping the bodies of control structures.
6222
6223          When dumping RTL, print the RTL in slim (condensed) form
6224          instead of the default LISP-like representation.
6225
6226    `raw'
6227          Print a raw representation of the tree.  By default, trees are
6228          pretty-printed into a C-like representation.
6229
6230    `details'
6231          Enable more detailed dumps (not honored by every dump
6232          option). Also include information from the optimization
6233          passes.
6234
6235    `stats'
6236          Enable dumping various statistics about the pass (not honored
6237          by every dump option).
6238
6239    `blocks'
6240          Enable showing basic block boundaries (disabled in raw dumps).
6241
6242    `graph'
6243          For each of the other indicated dump files
6244          (`-fdump-rtl-PASS'), dump a representation of the control
6245          flow graph suitable for viewing with GraphViz to
6246          `FILE.PASSID.PASS.dot'.  Each function in the file is
6247          pretty-printed as a subgraph, so that GraphViz can render them
6248          all in a single plot.
6249
6250          This option currently only works for RTL dumps, and the RTL
6251          is always dumped in slim form.
6252
6253    `vops'
6254          Enable showing virtual operands for every statement.
6255
6256    `lineno'
6257          Enable showing line numbers for statements.
6258
6259    `uid'
6260          Enable showing the unique ID (`DECL_UID') for each variable.
6261
6262    `verbose'
6263          Enable showing the tree dump for each statement.
6264
6265    `eh'
6266          Enable showing the EH region number holding each statement.
6267
6268    `scev'
6269          Enable showing scalar evolution analysis details.
6270
6271    `optimized'
6272          Enable showing optimization information (only available in
6273          certain passes).
6274
6275    `missed'
6276          Enable showing missed optimization information (only
6277          available in certain passes).
6278
6279    `note'
6280          Enable other detailed optimization information (only
6281          available in certain passes).
6282
6283    `=FILENAME'
6284          Instead of an auto named dump file, output into the given file
6285          name. The file names `stdout' and `stderr' are treated
6286          specially and are considered already open standard streams.
6287          For example,
6288
6289               gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
6290                    -fdump-tree-pre=stderr file.c
6291
6292          outputs vectorizer dump into `foo.dump', while the PRE dump is
6293          output on to `stderr'. If two conflicting dump filenames are
6294          given for the same pass, then the latter option overrides the
6295          earlier one.
6296
6297    `all'
6298          Turn on all options, except `raw', `slim', `verbose' and
6299          `lineno'.
6300
6301    `optall'
6302          Turn on all optimization options, i.e., `optimized',
6303          `missed', and `note'.
6304
6305     The following tree dumps are possible:
6306    `original'
6307          Dump before any tree based optimization, to `FILE.original'.
6308
6309    `optimized'
6310          Dump after all tree based optimization, to `FILE.optimized'.
6311
6312    `gimple'
6313          Dump each function before and after the gimplification pass
6314          to a file.  The file name is made by appending `.gimple' to
6315          the source file name.
6316
6317    `cfg'
6318          Dump the control flow graph of each function to a file.  The
6319          file name is made by appending `.cfg' to the source file name.
6320
6321    `ch'
6322          Dump each function after copying loop headers.  The file name
6323          is made by appending `.ch' to the source file name.
6324
6325    `ssa'
6326          Dump SSA related information to a file.  The file name is
6327          made by appending `.ssa' to the source file name.
6328
6329    `alias'
6330          Dump aliasing information for each function.  The file name
6331          is made by appending `.alias' to the source file name.
6332
6333    `ccp'
6334          Dump each function after CCP.  The file name is made by
6335          appending `.ccp' to the source file name.
6336
6337    `storeccp'
6338          Dump each function after STORE-CCP.  The file name is made by
6339          appending `.storeccp' to the source file name.
6340
6341    `pre'
6342          Dump trees after partial redundancy elimination.  The file
6343          name is made by appending `.pre' to the source file name.
6344
6345    `fre'
6346          Dump trees after full redundancy elimination.  The file name
6347          is made by appending `.fre' to the source file name.
6348
6349    `copyprop'
6350          Dump trees after copy propagation.  The file name is made by
6351          appending `.copyprop' to the source file name.
6352
6353    `store_copyprop'
6354          Dump trees after store copy-propagation.  The file name is
6355          made by appending `.store_copyprop' to the source file name.
6356
6357    `dce'
6358          Dump each function after dead code elimination.  The file
6359          name is made by appending `.dce' to the source file name.
6360
6361    `sra'
6362          Dump each function after performing scalar replacement of
6363          aggregates.  The file name is made by appending `.sra' to the
6364          source file name.
6365
6366    `sink'
6367          Dump each function after performing code sinking.  The file
6368          name is made by appending `.sink' to the source file name.
6369
6370    `dom'
6371          Dump each function after applying dominator tree
6372          optimizations.  The file name is made by appending `.dom' to
6373          the source file name.
6374
6375    `dse'
6376          Dump each function after applying dead store elimination.
6377          The file name is made by appending `.dse' to the source file
6378          name.
6379
6380    `phiopt'
6381          Dump each function after optimizing PHI nodes into
6382          straightline code.  The file name is made by appending
6383          `.phiopt' to the source file name.
6384
6385    `forwprop'
6386          Dump each function after forward propagating single use
6387          variables.  The file name is made by appending `.forwprop' to
6388          the source file name.
6389
6390    `copyrename'
6391          Dump each function after applying the copy rename
6392          optimization.  The file name is made by appending
6393          `.copyrename' to the source file name.
6394
6395    `nrv'
6396          Dump each function after applying the named return value
6397          optimization on generic trees.  The file name is made by
6398          appending `.nrv' to the source file name.
6399
6400    `vect'
6401          Dump each function after applying vectorization of loops.
6402          The file name is made by appending `.vect' to the source file
6403          name.
6404
6405    `slp'
6406          Dump each function after applying vectorization of basic
6407          blocks.  The file name is made by appending `.slp' to the
6408          source file name.
6409
6410    `vrp'
6411          Dump each function after Value Range Propagation (VRP).  The
6412          file name is made by appending `.vrp' to the source file name.
6413
6414    `all'
6415          Enable all the available tree dumps with the flags provided
6416          in this option.
6417
6418`-fopt-info'
6419`-fopt-info-OPTIONS'
6420`-fopt-info-OPTIONS=FILENAME'
6421     Controls optimization dumps from various optimization passes. If
6422     the `-OPTIONS' form is used, OPTIONS is a list of `-' separated
6423     option keywords to select the dump details and optimizations.
6424
6425     The OPTIONS can be divided into two groups: options describing the
6426     verbosity of the dump, and options describing which optimizations
6427     should be included. The options from both the groups can be freely
6428     mixed as they are non-overlapping. However, in case of any
6429     conflicts, the later options override the earlier options on the
6430     command line.
6431
6432     The following options control the dump verbosity:
6433
6434    `optimized'
6435          Print information when an optimization is successfully
6436          applied. It is up to a pass to decide which information is
6437          relevant. For example, the vectorizer passes print the source
6438          location of loops which are successfully vectorized.
6439
6440    `missed'
6441          Print information about missed optimizations. Individual
6442          passes control which information to include in the output.
6443
6444    `note'
6445          Print verbose information about optimizations, such as certain
6446          transformations, more detailed messages about decisions etc.
6447
6448    `all'
6449          Print detailed optimization information. This includes
6450          `optimized', `missed', and `note'.
6451
6452     One or more of the following option keywords can be used to
6453     describe a group of optimizations:
6454
6455    `ipa'
6456          Enable dumps from all interprocedural optimizations.
6457
6458    `loop'
6459          Enable dumps from all loop optimizations.
6460
6461    `inline'
6462          Enable dumps from all inlining optimizations.
6463
6464    `vec'
6465          Enable dumps from all vectorization optimizations.
6466
6467    `optall'
6468          Enable dumps from all optimizations. This is a superset of
6469          the optimization groups listed above.
6470
6471     If OPTIONS is omitted, it defaults to `optimized-optall', which
6472     means to dump all info about successful optimizations from all the
6473     passes.
6474
6475     If the FILENAME is provided, then the dumps from all the
6476     applicable optimizations are concatenated into the FILENAME.
6477     Otherwise the dump is output onto `stderr'. Though multiple
6478     `-fopt-info' options are accepted, only one of them can include a
6479     FILENAME. If other filenames are provided then all but the first
6480     such option are ignored.
6481
6482     Note that the output FILENAME is overwritten in case of multiple
6483     translation units. If a combined output from multiple translation
6484     units is desired, `stderr' should be used instead.
6485
6486     In the following example, the optimization info is output to
6487     `stderr':
6488
6489          gcc -O3 -fopt-info
6490
6491     This example:
6492          gcc -O3 -fopt-info-missed=missed.all
6493
6494     outputs missed optimization report from all the passes into
6495     `missed.all', and this one:
6496
6497          gcc -O2 -ftree-vectorize -fopt-info-vec-missed
6498
6499     prints information about missed optimization opportunities from
6500     vectorization passes on `stderr'.  Note that
6501     `-fopt-info-vec-missed' is equivalent to `-fopt-info-missed-vec'.
6502
6503     As another example,
6504          gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
6505
6506     outputs information about missed optimizations as well as
6507     optimized locations from all the inlining passes into `inline.txt'.
6508
6509     Finally, consider:
6510
6511          gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
6512
6513     Here the two output filenames `vec.miss' and `loop.opt' are in
6514     conflict since only one output file is allowed. In this case, only
6515     the first option takes effect and the subsequent options are
6516     ignored. Thus only `vec.miss' is produced which contains dumps
6517     from the vectorizer about missed opportunities.
6518
6519`-frandom-seed=STRING'
6520     This option provides a seed that GCC uses in place of random
6521     numbers in generating certain symbol names that have to be
6522     different in every compiled file.  It is also used to place unique
6523     stamps in coverage data files and the object files that produce
6524     them.  You can use the `-frandom-seed' option to produce
6525     reproducibly identical object files.
6526
6527     The STRING can either be a number (decimal, octal or hex) or an
6528     arbitrary string (in which case it's converted to a number by
6529     computing CRC32).
6530
6531     The STRING should be different for every file you compile.
6532
6533`-fsched-verbose=N'
6534     On targets that use instruction scheduling, this option controls
6535     the amount of debugging output the scheduler prints.  This
6536     information is written to standard error, unless
6537     `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which
6538     case it is output to the usual dump listing file, `.sched1' or
6539     `.sched2' respectively.  However for N greater than nine, the
6540     output is always printed to standard error.
6541
6542     For N greater than zero, `-fsched-verbose' outputs the same
6543     information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'.  For N
6544     greater than one, it also output basic block probabilities,
6545     detailed ready list information and unit/insn info.  For N greater
6546     than two, it includes RTL at abort point, control-flow and regions
6547     info.  And for N over four, `-fsched-verbose' also includes
6548     dependence info.
6549
6550`-save-temps'
6551`-save-temps=cwd'
6552     Store the usual "temporary" intermediate files permanently; place
6553     them in the current directory and name them based on the source
6554     file.  Thus, compiling `foo.c' with `-c -save-temps' produces files
6555     `foo.i' and `foo.s', as well as `foo.o'.  This creates a
6556     preprocessed `foo.i' output file even though the compiler now
6557     normally uses an integrated preprocessor.
6558
6559     When used in combination with the `-x' command-line option,
6560     `-save-temps' is sensible enough to avoid over writing an input
6561     source file with the same extension as an intermediate file.  The
6562     corresponding intermediate file may be obtained by renaming the
6563     source file before using `-save-temps'.
6564
6565     If you invoke GCC in parallel, compiling several different source
6566     files that share a common base name in different subdirectories or
6567     the same source file compiled for multiple output destinations, it
6568     is likely that the different parallel compilers will interfere
6569     with each other, and overwrite the temporary files.  For instance:
6570
6571          gcc -save-temps -o outdir1/foo.o indir1/foo.c&
6572          gcc -save-temps -o outdir2/foo.o indir2/foo.c&
6573
6574     may result in `foo.i' and `foo.o' being written to simultaneously
6575     by both compilers.
6576
6577`-save-temps=obj'
6578     Store the usual "temporary" intermediate files permanently.  If the
6579     `-o' option is used, the temporary files are based on the object
6580     file.  If the `-o' option is not used, the `-save-temps=obj'
6581     switch behaves like `-save-temps'.
6582
6583     For example:
6584
6585          gcc -save-temps=obj -c foo.c
6586          gcc -save-temps=obj -c bar.c -o dir/xbar.o
6587          gcc -save-temps=obj foobar.c -o dir2/yfoobar
6588
6589     creates `foo.i', `foo.s', `dir/xbar.i', `dir/xbar.s',
6590     `dir2/yfoobar.i', `dir2/yfoobar.s', and `dir2/yfoobar.o'.
6591
6592`-time[=FILE]'
6593     Report the CPU time taken by each subprocess in the compilation
6594     sequence.  For C source files, this is the compiler proper and
6595     assembler (plus the linker if linking is done).
6596
6597     Without the specification of an output file, the output looks like
6598     this:
6599
6600          # cc1 0.12 0.01
6601          # as 0.00 0.01
6602
6603     The first number on each line is the "user time", that is time
6604     spent executing the program itself.  The second number is "system
6605     time", time spent executing operating system routines on behalf of
6606     the program.  Both numbers are in seconds.
6607
6608     With the specification of an output file, the output is appended
6609     to the named file, and it looks like this:
6610
6611          0.12 0.01 cc1 OPTIONS
6612          0.00 0.01 as OPTIONS
6613
6614     The "user time" and the "system time" are moved before the program
6615     name, and the options passed to the program are displayed, so that
6616     one can later tell what file was being compiled, and with which
6617     options.
6618
6619`-fvar-tracking'
6620     Run variable tracking pass.  It computes where variables are
6621     stored at each position in code.  Better debugging information is
6622     then generated (if the debugging information format supports this
6623     information).
6624
6625     It is enabled by default when compiling with optimization (`-Os',
6626     `-O', `-O2', ...), debugging information (`-g') and the debug info
6627     format supports it.
6628
6629`-fvar-tracking-assignments'
6630     Annotate assignments to user variables early in the compilation and
6631     attempt to carry the annotations over throughout the compilation
6632     all the way to the end, in an attempt to improve debug information
6633     while optimizing.  Use of `-gdwarf-4' is recommended along with it.
6634
6635     It can be enabled even if var-tracking is disabled, in which case
6636     annotations are created and maintained, but discarded at the end.
6637     By default, this flag is enabled together with `-fvar-tracking',
6638     except when selective scheduling is enabled.
6639
6640`-fvar-tracking-assignments-toggle'
6641     Toggle `-fvar-tracking-assignments', in the same way that
6642     `-gtoggle' toggles `-g'.
6643
6644`-print-file-name=LIBRARY'
6645     Print the full absolute name of the library file LIBRARY that
6646     would be used when linking--and don't do anything else.  With this
6647     option, GCC does not compile or link anything; it just prints the
6648     file name.
6649
6650`-print-multi-directory'
6651     Print the directory name corresponding to the multilib selected by
6652     any other switches present in the command line.  This directory is
6653     supposed to exist in `GCC_EXEC_PREFIX'.
6654
6655`-print-multi-lib'
6656     Print the mapping from multilib directory names to compiler
6657     switches that enable them.  The directory name is separated from
6658     the switches by `;', and each switch starts with an `@' instead of
6659     the `-', without spaces between multiple switches.  This is
6660     supposed to ease shell processing.
6661
6662`-print-multi-os-directory'
6663     Print the path to OS libraries for the selected multilib, relative
6664     to some `lib' subdirectory.  If OS libraries are present in the
6665     `lib' subdirectory and no multilibs are used, this is usually just
6666     `.', if OS libraries are present in `libSUFFIX' sibling
6667     directories this prints e.g. `../lib64', `../lib' or `../lib32',
6668     or if OS libraries are present in `lib/SUBDIR' subdirectories it
6669     prints e.g. `amd64', `sparcv9' or `ev6'.
6670
6671`-print-multiarch'
6672     Print the path to OS libraries for the selected multiarch,
6673     relative to some `lib' subdirectory.
6674
6675`-print-prog-name=PROGRAM'
6676     Like `-print-file-name', but searches for a program such as `cpp'.
6677
6678`-print-libgcc-file-name'
6679     Same as `-print-file-name=libgcc.a'.
6680
6681     This is useful when you use `-nostdlib' or `-nodefaultlibs' but
6682     you do want to link with `libgcc.a'.  You can do:
6683
6684          gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
6685
6686`-print-search-dirs'
6687     Print the name of the configured installation directory and a list
6688     of program and library directories `gcc' searches--and don't do
6689     anything else.
6690
6691     This is useful when `gcc' prints the error message `installation
6692     problem, cannot exec cpp0: No such file or directory'.  To resolve
6693     this you either need to put `cpp0' and the other compiler
6694     components where `gcc' expects to find them, or you can set the
6695     environment variable `GCC_EXEC_PREFIX' to the directory where you
6696     installed them.  Don't forget the trailing `/'.  *Note Environment
6697     Variables::.
6698
6699`-print-sysroot'
6700     Print the target sysroot directory that is used during
6701     compilation.  This is the target sysroot specified either at
6702     configure time or using the `--sysroot' option, possibly with an
6703     extra suffix that depends on compilation options.  If no target
6704     sysroot is specified, the option prints nothing.
6705
6706`-print-sysroot-headers-suffix'
6707     Print the suffix added to the target sysroot when searching for
6708     headers, or give an error if the compiler is not configured with
6709     such a suffix--and don't do anything else.
6710
6711`-dumpmachine'
6712     Print the compiler's target machine (for example,
6713     `i686-pc-linux-gnu')--and don't do anything else.
6714
6715`-dumpversion'
6716     Print the compiler version (for example, `3.0')--and don't do
6717     anything else.
6718
6719`-dumpspecs'
6720     Print the compiler's built-in specs--and don't do anything else.
6721     (This is used when GCC itself is being built.)  *Note Spec Files::.
6722
6723`-fno-eliminate-unused-debug-types'
6724     Normally, when producing DWARF 2 output, GCC avoids producing
6725     debug symbol output for types that are nowhere used in the source
6726     file being compiled.  Sometimes it is useful to have GCC emit
6727     debugging information for all types declared in a compilation
6728     unit, regardless of whether or not they are actually used in that
6729     compilation unit, for example if, in the debugger, you want to
6730     cast a value to a type that is not actually used in your program
6731     (but is declared).  More often, however, this results in a
6732     significant amount of wasted space.
6733
6734
6735File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
6736
67373.10 Options That Control Optimization
6738======================================
6739
6740These options control various sorts of optimizations.
6741
6742 Without any optimization option, the compiler's goal is to reduce the
6743cost of compilation and to make debugging produce the expected results.
6744Statements are independent: if you stop the program with a breakpoint
6745between statements, you can then assign a new value to any variable or
6746change the program counter to any other statement in the function and
6747get exactly the results you expect from the source code.
6748
6749 Turning on optimization flags makes the compiler attempt to improve
6750the performance and/or code size at the expense of compilation time and
6751possibly the ability to debug the program.
6752
6753 The compiler performs optimization based on the knowledge it has of the
6754program.  Compiling multiple files at once to a single output file mode
6755allows the compiler to use information gained from all of the files
6756when compiling each of them.
6757
6758 Not all optimizations are controlled directly by a flag.  Only
6759optimizations that have a flag are listed in this section.
6760
6761 Most optimizations are only enabled if an `-O' level is set on the
6762command line.  Otherwise they are disabled, even if individual
6763optimization flags are specified.
6764
6765 Depending on the target and how GCC was configured, a slightly
6766different set of optimizations may be enabled at each `-O' level than
6767those listed here.  You can invoke GCC with `-Q --help=optimizers' to
6768find out the exact set of optimizations that are enabled at each level.
6769*Note Overall Options::, for examples.
6770
6771`-O'
6772`-O1'
6773     Optimize.  Optimizing compilation takes somewhat more time, and a
6774     lot more memory for a large function.
6775
6776     With `-O', the compiler tries to reduce code size and execution
6777     time, without performing any optimizations that take a great deal
6778     of compilation time.
6779
6780     `-O' turns on the following optimization flags:
6781          -fauto-inc-dec
6782          -fbranch-count-reg
6783          -fcombine-stack-adjustments
6784          -fcompare-elim
6785          -fcprop-registers
6786          -fdce
6787          -fdefer-pop
6788          -fdelayed-branch
6789          -fdse
6790          -fforward-propagate
6791          -fguess-branch-probability
6792          -fif-conversion2
6793          -fif-conversion
6794          -finline-functions-called-once
6795          -fipa-pure-const
6796          -fipa-profile
6797          -fipa-reference
6798          -fmerge-constants
6799          -fmove-loop-invariants
6800          -fshrink-wrap
6801          -fsplit-wide-types
6802          -ftree-bit-ccp
6803          -ftree-ccp
6804          -fssa-phiopt
6805          -ftree-ch
6806          -ftree-copy-prop
6807          -ftree-copyrename
6808          -ftree-dce
6809          -ftree-dominator-opts
6810          -ftree-dse
6811          -ftree-forwprop
6812          -ftree-fre
6813          -ftree-phiprop
6814          -ftree-sink
6815          -ftree-slsr
6816          -ftree-sra
6817          -ftree-pta
6818          -ftree-ter
6819          -funit-at-a-time
6820
6821     `-O' also turns on `-fomit-frame-pointer' on machines where doing
6822     so does not interfere with debugging.
6823
6824`-O2'
6825     Optimize even more.  GCC performs nearly all supported
6826     optimizations that do not involve a space-speed tradeoff.  As
6827     compared to `-O', this option increases both compilation time and
6828     the performance of the generated code.
6829
6830     `-O2' turns on all optimization flags specified by `-O'.  It also
6831     turns on the following optimization flags:
6832          -fthread-jumps
6833          -falign-functions  -falign-jumps
6834          -falign-loops  -falign-labels
6835          -fcaller-saves
6836          -fcrossjumping
6837          -fcse-follow-jumps  -fcse-skip-blocks
6838          -fdelete-null-pointer-checks
6839          -fdevirtualize -fdevirtualize-speculatively
6840          -fexpensive-optimizations
6841          -fgcse  -fgcse-lm
6842          -fhoist-adjacent-loads
6843          -finline-small-functions
6844          -findirect-inlining
6845          -fipa-cp
6846          -fipa-cp-alignment
6847          -fipa-sra
6848          -fipa-icf
6849          -fisolate-erroneous-paths-dereference
6850          -flra-remat
6851          -foptimize-sibling-calls
6852          -foptimize-strlen
6853          -fpartial-inlining
6854          -fpeephole2
6855          -freorder-blocks -freorder-blocks-and-partition -freorder-functions
6856          -frerun-cse-after-loop
6857          -fsched-interblock  -fsched-spec
6858          -fschedule-insns  -fschedule-insns2
6859          -fstrict-aliasing -fstrict-overflow
6860          -ftree-builtin-call-dce
6861          -ftree-switch-conversion -ftree-tail-merge
6862          -ftree-pre
6863          -ftree-vrp
6864          -fipa-ra
6865
6866     Please note the warning under `-fgcse' about invoking `-O2' on
6867     programs that use computed gotos.
6868
6869`-O3'
6870     Optimize yet more.  `-O3' turns on all optimizations specified by
6871     `-O2' and also turns on the `-finline-functions',
6872     `-funswitch-loops', `-fpredictive-commoning',
6873     `-fgcse-after-reload', `-ftree-loop-vectorize',
6874     `-ftree-loop-distribute-patterns', `-ftree-slp-vectorize',
6875     `-fvect-cost-model', `-ftree-partial-pre' and `-fipa-cp-clone'
6876     options.
6877
6878`-O0'
6879     Reduce compilation time and make debugging produce the expected
6880     results.  This is the default.
6881
6882`-Os'
6883     Optimize for size.  `-Os' enables all `-O2' optimizations that do
6884     not typically increase code size.  It also performs further
6885     optimizations designed to reduce code size.
6886
6887     `-Os' disables the following optimization flags:
6888          -falign-functions  -falign-jumps  -falign-loops
6889          -falign-labels  -freorder-blocks  -freorder-blocks-and-partition
6890          -fprefetch-loop-arrays
6891
6892`-Ofast'
6893     Disregard strict standards compliance.  `-Ofast' enables all `-O3'
6894     optimizations.  It also enables optimizations that are not valid
6895     for all standard-compliant programs.  It turns on `-ffast-math'
6896     and the Fortran-specific `-fno-protect-parens' and
6897     `-fstack-arrays'.
6898
6899`-Og'
6900     Optimize debugging experience.  `-Og' enables optimizations that
6901     do not interfere with debugging. It should be the optimization
6902     level of choice for the standard edit-compile-debug cycle, offering
6903     a reasonable level of optimization while maintaining fast
6904     compilation and a good debugging experience.
6905
6906     If you use multiple `-O' options, with or without level numbers,
6907     the last such option is the one that is effective.
6908
6909 Options of the form `-fFLAG' specify machine-independent flags.  Most
6910flags have both positive and negative forms; the negative form of
6911`-ffoo' is `-fno-foo'.  In the table below, only one of the forms is
6912listed--the one you typically use.  You can figure out the other form
6913by either removing `no-' or adding it.
6914
6915 The following options control specific optimizations.  They are either
6916activated by `-O' options or are related to ones that are.  You can use
6917the following flags in the rare cases when "fine-tuning" of
6918optimizations to be performed is desired.
6919
6920`-fno-defer-pop'
6921     Always pop the arguments to each function call as soon as that
6922     function returns.  For machines that must pop arguments after a
6923     function call, the compiler normally lets arguments accumulate on
6924     the stack for several function calls and pops them all at once.
6925
6926     Disabled at levels `-O', `-O2', `-O3', `-Os'.
6927
6928`-fforward-propagate'
6929     Perform a forward propagation pass on RTL.  The pass tries to
6930     combine two instructions and checks if the result can be
6931     simplified.  If loop unrolling is active, two passes are performed
6932     and the second is scheduled after loop unrolling.
6933
6934     This option is enabled by default at optimization levels `-O',
6935     `-O2', `-O3', `-Os'.
6936
6937`-ffp-contract=STYLE'
6938     `-ffp-contract=off' disables floating-point expression contraction.
6939     `-ffp-contract=fast' enables floating-point expression contraction
6940     such as forming of fused multiply-add operations if the target has
6941     native support for them.  `-ffp-contract=on' enables
6942     floating-point expression contraction if allowed by the language
6943     standard.  This is currently not implemented and treated equal to
6944     `-ffp-contract=off'.
6945
6946     The default is `-ffp-contract=fast'.
6947
6948`-fomit-frame-pointer'
6949     Don't keep the frame pointer in a register for functions that
6950     don't need one.  This avoids the instructions to save, set up and
6951     restore frame pointers; it also makes an extra register available
6952     in many functions.  *It also makes debugging impossible on some
6953     machines.*
6954
6955     On some machines, such as the VAX, this flag has no effect, because
6956     the standard calling sequence automatically handles the frame
6957     pointer and nothing is saved by pretending it doesn't exist.  The
6958     machine-description macro `FRAME_POINTER_REQUIRED' controls
6959     whether a target machine supports this flag.  *Note Register
6960     Usage: (gccint)Registers.
6961
6962     The default setting (when not optimizing for size) for 32-bit
6963     GNU/Linux x86 and 32-bit Darwin x86 targets is
6964     `-fomit-frame-pointer'.  You can configure GCC with the
6965     `--enable-frame-pointer' configure option to change the default.
6966
6967     Enabled at levels `-O', `-O2', `-O3', `-Os'.
6968
6969`-foptimize-sibling-calls'
6970     Optimize sibling and tail recursive calls.
6971
6972     Enabled at levels `-O2', `-O3', `-Os'.
6973
6974`-foptimize-strlen'
6975     Optimize various standard C string functions (e.g. `strlen',
6976     `strchr' or `strcpy') and their `_FORTIFY_SOURCE' counterparts
6977     into faster alternatives.
6978
6979     Enabled at levels `-O2', `-O3'.
6980
6981`-fno-inline'
6982     Do not expand any functions inline apart from those marked with
6983     the `always_inline' attribute.  This is the default when not
6984     optimizing.
6985
6986     Single functions can be exempted from inlining by marking them
6987     with the `noinline' attribute.
6988
6989`-finline-small-functions'
6990     Integrate functions into their callers when their body is smaller
6991     than expected function call code (so overall size of program gets
6992     smaller).  The compiler heuristically decides which functions are
6993     simple enough to be worth integrating in this way.  This inlining
6994     applies to all functions, even those not declared inline.
6995
6996     Enabled at level `-O2'.
6997
6998`-findirect-inlining'
6999     Inline also indirect calls that are discovered to be known at
7000     compile time thanks to previous inlining.  This option has any
7001     effect only when inlining itself is turned on by the
7002     `-finline-functions' or `-finline-small-functions' options.
7003
7004     Enabled at level `-O2'.
7005
7006`-finline-functions'
7007     Consider all functions for inlining, even if they are not declared
7008     inline.  The compiler heuristically decides which functions are
7009     worth integrating in this way.
7010
7011     If all calls to a given function are integrated, and the function
7012     is declared `static', then the function is normally not output as
7013     assembler code in its own right.
7014
7015     Enabled at level `-O3'.
7016
7017`-finline-functions-called-once'
7018     Consider all `static' functions called once for inlining into their
7019     caller even if they are not marked `inline'.  If a call to a given
7020     function is integrated, then the function is not output as
7021     assembler code in its own right.
7022
7023     Enabled at levels `-O1', `-O2', `-O3' and `-Os'.
7024
7025`-fearly-inlining'
7026     Inline functions marked by `always_inline' and functions whose
7027     body seems smaller than the function call overhead early before
7028     doing `-fprofile-generate' instrumentation and real inlining pass.
7029     Doing so makes profiling significantly cheaper and usually
7030     inlining faster on programs having large chains of nested wrapper
7031     functions.
7032
7033     Enabled by default.
7034
7035`-fipa-sra'
7036     Perform interprocedural scalar replacement of aggregates, removal
7037     of unused parameters and replacement of parameters passed by
7038     reference by parameters passed by value.
7039
7040     Enabled at levels `-O2', `-O3' and `-Os'.
7041
7042`-finline-limit=N'
7043     By default, GCC limits the size of functions that can be inlined.
7044     This flag allows coarse control of this limit.  N is the size of
7045     functions that can be inlined in number of pseudo instructions.
7046
7047     Inlining is actually controlled by a number of parameters, which
7048     may be specified individually by using `--param NAME=VALUE'.  The
7049     `-finline-limit=N' option sets some of these parameters as follows:
7050
7051    `max-inline-insns-single'
7052          is set to N/2.
7053
7054    `max-inline-insns-auto'
7055          is set to N/2.
7056
7057     See below for a documentation of the individual parameters
7058     controlling inlining and for the defaults of these parameters.
7059
7060     _Note:_ there may be no value to `-finline-limit' that results in
7061     default behavior.
7062
7063     _Note:_ pseudo instruction represents, in this particular context,
7064     an abstract measurement of function's size.  In no way does it
7065     represent a count of assembly instructions and as such its exact
7066     meaning might change from one release to an another.
7067
7068`-fno-keep-inline-dllexport'
7069     This is a more fine-grained version of `-fkeep-inline-functions',
7070     which applies only to functions that are declared using the
7071     `dllexport' attribute or declspec (*Note Declaring Attributes of
7072     Functions: Function Attributes.)
7073
7074`-fkeep-inline-functions'
7075     In C, emit `static' functions that are declared `inline' into the
7076     object file, even if the function has been inlined into all of its
7077     callers.  This switch does not affect functions using the `extern
7078     inline' extension in GNU C90.  In C++, emit any and all inline
7079     functions into the object file.
7080
7081`-fkeep-static-consts'
7082     Emit variables declared `static const' when optimization isn't
7083     turned on, even if the variables aren't referenced.
7084
7085     GCC enables this option by default.  If you want to force the
7086     compiler to check if a variable is referenced, regardless of
7087     whether or not optimization is turned on, use the
7088     `-fno-keep-static-consts' option.
7089
7090`-fmerge-constants'
7091     Attempt to merge identical constants (string constants and
7092     floating-point constants) across compilation units.
7093
7094     This option is the default for optimized compilation if the
7095     assembler and linker support it.  Use `-fno-merge-constants' to
7096     inhibit this behavior.
7097
7098     Enabled at levels `-O', `-O2', `-O3', `-Os'.
7099
7100`-fmerge-all-constants'
7101     Attempt to merge identical constants and identical variables.
7102
7103     This option implies `-fmerge-constants'.  In addition to
7104     `-fmerge-constants' this considers e.g. even constant initialized
7105     arrays or initialized constant variables with integral or
7106     floating-point types.  Languages like C or C++ require each
7107     variable, including multiple instances of the same variable in
7108     recursive calls, to have distinct locations, so using this option
7109     results in non-conforming behavior.
7110
7111`-fmodulo-sched'
7112     Perform swing modulo scheduling immediately before the first
7113     scheduling pass.  This pass looks at innermost loops and reorders
7114     their instructions by overlapping different iterations.
7115
7116`-fmodulo-sched-allow-regmoves'
7117     Perform more aggressive SMS-based modulo scheduling with register
7118     moves allowed.  By setting this flag certain anti-dependences
7119     edges are deleted, which triggers the generation of reg-moves
7120     based on the life-range analysis.  This option is effective only
7121     with `-fmodulo-sched' enabled.
7122
7123`-fno-branch-count-reg'
7124     Do not use "decrement and branch" instructions on a count register,
7125     but instead generate a sequence of instructions that decrement a
7126     register, compare it against zero, then branch based upon the
7127     result.  This option is only meaningful on architectures that
7128     support such instructions, which include x86, PowerPC, IA-64 and
7129     S/390.
7130
7131     Enabled by default at `-O1' and higher.
7132
7133     The default is `-fbranch-count-reg'.
7134
7135`-fno-function-cse'
7136     Do not put function addresses in registers; make each instruction
7137     that calls a constant function contain the function's address
7138     explicitly.
7139
7140     This option results in less efficient code, but some strange hacks
7141     that alter the assembler output may be confused by the
7142     optimizations performed when this option is not used.
7143
7144     The default is `-ffunction-cse'
7145
7146`-fno-zero-initialized-in-bss'
7147     If the target supports a BSS section, GCC by default puts
7148     variables that are initialized to zero into BSS.  This can save
7149     space in the resulting code.
7150
7151     This option turns off this behavior because some programs
7152     explicitly rely on variables going to the data section--e.g., so
7153     that the resulting executable can find the beginning of that
7154     section and/or make assumptions based on that.
7155
7156     The default is `-fzero-initialized-in-bss'.
7157
7158`-fthread-jumps'
7159     Perform optimizations that check to see if a jump branches to a
7160     location where another comparison subsumed by the first is found.
7161     If so, the first branch is redirected to either the destination of
7162     the second branch or a point immediately following it, depending
7163     on whether the condition is known to be true or false.
7164
7165     Enabled at levels `-O2', `-O3', `-Os'.
7166
7167`-fsplit-wide-types'
7168     When using a type that occupies multiple registers, such as `long
7169     long' on a 32-bit system, split the registers apart and allocate
7170     them independently.  This normally generates better code for those
7171     types, but may make debugging more difficult.
7172
7173     Enabled at levels `-O', `-O2', `-O3', `-Os'.
7174
7175`-fcse-follow-jumps'
7176     In common subexpression elimination (CSE), scan through jump
7177     instructions when the target of the jump is not reached by any
7178     other path.  For example, when CSE encounters an `if' statement
7179     with an `else' clause, CSE follows the jump when the condition
7180     tested is false.
7181
7182     Enabled at levels `-O2', `-O3', `-Os'.
7183
7184`-fcse-skip-blocks'
7185     This is similar to `-fcse-follow-jumps', but causes CSE to follow
7186     jumps that conditionally skip over blocks.  When CSE encounters a
7187     simple `if' statement with no else clause, `-fcse-skip-blocks'
7188     causes CSE to follow the jump around the body of the `if'.
7189
7190     Enabled at levels `-O2', `-O3', `-Os'.
7191
7192`-frerun-cse-after-loop'
7193     Re-run common subexpression elimination after loop optimizations
7194     are performed.
7195
7196     Enabled at levels `-O2', `-O3', `-Os'.
7197
7198`-fgcse'
7199     Perform a global common subexpression elimination pass.  This pass
7200     also performs global constant and copy propagation.
7201
7202     _Note:_ When compiling a program using computed gotos, a GCC
7203     extension, you may get better run-time performance if you disable
7204     the global common subexpression elimination pass by adding
7205     `-fno-gcse' to the command line.
7206
7207     Enabled at levels `-O2', `-O3', `-Os'.
7208
7209`-fgcse-lm'
7210     When `-fgcse-lm' is enabled, global common subexpression
7211     elimination attempts to move loads that are only killed by stores
7212     into themselves.  This allows a loop containing a load/store
7213     sequence to be changed to a load outside the loop, and a
7214     copy/store within the loop.
7215
7216     Enabled by default when `-fgcse' is enabled.
7217
7218`-fgcse-sm'
7219     When `-fgcse-sm' is enabled, a store motion pass is run after
7220     global common subexpression elimination.  This pass attempts to
7221     move stores out of loops.  When used in conjunction with
7222     `-fgcse-lm', loops containing a load/store sequence can be changed
7223     to a load before the loop and a store after the loop.
7224
7225     Not enabled at any optimization level.
7226
7227`-fgcse-las'
7228     When `-fgcse-las' is enabled, the global common subexpression
7229     elimination pass eliminates redundant loads that come after stores
7230     to the same memory location (both partial and full redundancies).
7231
7232     Not enabled at any optimization level.
7233
7234`-fgcse-after-reload'
7235     When `-fgcse-after-reload' is enabled, a redundant load elimination
7236     pass is performed after reload.  The purpose of this pass is to
7237     clean up redundant spilling.
7238
7239`-faggressive-loop-optimizations'
7240     This option tells the loop optimizer to use language constraints to
7241     derive bounds for the number of iterations of a loop.  This
7242     assumes that loop code does not invoke undefined behavior by for
7243     example causing signed integer overflows or out-of-bound array
7244     accesses.  The bounds for the number of iterations of a loop are
7245     used to guide loop unrolling and peeling and loop exit test
7246     optimizations.  This option is enabled by default.
7247
7248`-funsafe-loop-optimizations'
7249     This option tells the loop optimizer to assume that loop indices
7250     do not overflow, and that loops with nontrivial exit condition are
7251     not infinite.  This enables a wider range of loop optimizations
7252     even if the loop optimizer itself cannot prove that these
7253     assumptions are valid.  If you use `-Wunsafe-loop-optimizations',
7254     the compiler warns you if it finds this kind of loop.
7255
7256`-fcrossjumping'
7257     Perform cross-jumping transformation.  This transformation unifies
7258     equivalent code and saves code size.  The resulting code may or
7259     may not perform better than without cross-jumping.
7260
7261     Enabled at levels `-O2', `-O3', `-Os'.
7262
7263`-fauto-inc-dec'
7264     Combine increments or decrements of addresses with memory accesses.
7265     This pass is always skipped on architectures that do not have
7266     instructions to support this.  Enabled by default at `-O' and
7267     higher on architectures that support this.
7268
7269`-fdce'
7270     Perform dead code elimination (DCE) on RTL.  Enabled by default at
7271     `-O' and higher.
7272
7273`-fdse'
7274     Perform dead store elimination (DSE) on RTL.  Enabled by default
7275     at `-O' and higher.
7276
7277`-fif-conversion'
7278     Attempt to transform conditional jumps into branch-less
7279     equivalents.  This includes use of conditional moves, min, max,
7280     set flags and abs instructions, and some tricks doable by standard
7281     arithmetics.  The use of conditional execution on chips where it
7282     is available is controlled by `-fif-conversion2'.
7283
7284     Enabled at levels `-O', `-O2', `-O3', `-Os'.
7285
7286`-fif-conversion2'
7287     Use conditional execution (where available) to transform
7288     conditional jumps into branch-less equivalents.
7289
7290     Enabled at levels `-O', `-O2', `-O3', `-Os'.
7291
7292`-fdeclone-ctor-dtor'
7293     The C++ ABI requires multiple entry points for constructors and
7294     destructors: one for a base subobject, one for a complete object,
7295     and one for a virtual destructor that calls operator delete
7296     afterwards.  For a hierarchy with virtual bases, the base and
7297     complete variants are clones, which means two copies of the
7298     function.  With this option, the base and complete variants are
7299     changed to be thunks that call a common implementation.
7300
7301     Enabled by `-Os'.
7302
7303`-fdelete-null-pointer-checks'
7304     Assume that programs cannot safely dereference null pointers, and
7305     that no code or data element resides there.  This enables simple
7306     constant folding optimizations at all optimization levels.  In
7307     addition, other optimization passes in GCC use this flag to
7308     control global dataflow analyses that eliminate useless checks for
7309     null pointers; these assume that if a pointer is checked after it
7310     has already been dereferenced, it cannot be null.
7311
7312     Note however that in some environments this assumption is not true.
7313     Use `-fno-delete-null-pointer-checks' to disable this optimization
7314     for programs that depend on that behavior.
7315
7316     Some targets, especially embedded ones, disable this option at all
7317     levels.  Otherwise it is enabled at all levels: `-O0', `-O1',
7318     `-O2', `-O3', `-Os'.  Passes that use the information are enabled
7319     independently at different optimization levels.
7320
7321`-fdevirtualize'
7322     Attempt to convert calls to virtual functions to direct calls.
7323     This is done both within a procedure and interprocedurally as part
7324     of indirect inlining (`-findirect-inlining') and interprocedural
7325     constant propagation (`-fipa-cp').  Enabled at levels `-O2',
7326     `-O3', `-Os'.
7327
7328`-fdevirtualize-speculatively'
7329     Attempt to convert calls to virtual functions to speculative
7330     direct calls.  Based on the analysis of the type inheritance
7331     graph, determine for a given call the set of likely targets. If
7332     the set is small, preferably of size 1, change the call into a
7333     conditional deciding between direct and indirect calls.  The
7334     speculative calls enable more optimizations, such as inlining.
7335     When they seem useless after further optimization, they are
7336     converted back into original form.
7337
7338`-fdevirtualize-at-ltrans'
7339     Stream extra information needed for aggressive devirtualization
7340     when running the link-time optimizer in local transformation mode.
7341     This option enables more devirtualization but significantly
7342     increases the size of streamed data. For this reason it is
7343     disabled by default.
7344
7345`-fexpensive-optimizations'
7346     Perform a number of minor optimizations that are relatively
7347     expensive.
7348
7349     Enabled at levels `-O2', `-O3', `-Os'.
7350
7351`-free'
7352     Attempt to remove redundant extension instructions.  This is
7353     especially helpful for the x86-64 architecture, which implicitly
7354     zero-extends in 64-bit registers after writing to their lower
7355     32-bit half.
7356
7357     Enabled for Alpha, AArch64 and x86 at levels `-O2', `-O3', `-Os'.
7358
7359`-fno-lifetime-dse'
7360     In C++ the value of an object is only affected by changes within
7361     its lifetime: when the constructor begins, the object has an
7362     indeterminate value, and any changes during the lifetime of the
7363     object are dead when the object is destroyed.  Normally dead store
7364     elimination will take advantage of this; if your code relies on
7365     the value of the object storage persisting beyond the lifetime of
7366     the object, you can use this flag to disable this optimization.
7367
7368`-flive-range-shrinkage'
7369     Attempt to decrease register pressure through register live range
7370     shrinkage.  This is helpful for fast processors with small or
7371     moderate size register sets.
7372
7373`-fira-algorithm=ALGORITHM'
7374     Use the specified coloring algorithm for the integrated register
7375     allocator.  The ALGORITHM argument can be `priority', which
7376     specifies Chow's priority coloring, or `CB', which specifies
7377     Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not
7378     implemented for all architectures, but for those targets that do
7379     support it, it is the default because it generates better code.
7380
7381`-fira-region=REGION'
7382     Use specified regions for the integrated register allocator.  The
7383     REGION argument should be one of the following:
7384
7385    `all'
7386          Use all loops as register allocation regions.  This can give
7387          the best results for machines with a small and/or irregular
7388          register set.
7389
7390    `mixed'
7391          Use all loops except for loops with small register pressure
7392          as the regions.  This value usually gives the best results in
7393          most cases and for most architectures, and is enabled by
7394          default when compiling with optimization for speed (`-O',
7395          `-O2', ...).
7396
7397    `one'
7398          Use all functions as a single region.  This typically results
7399          in the smallest code size, and is enabled by default for
7400          `-Os' or `-O0'.
7401
7402
7403`-fira-hoist-pressure'
7404     Use IRA to evaluate register pressure in the code hoisting pass for
7405     decisions to hoist expressions.  This option usually results in
7406     smaller code, but it can slow the compiler down.
7407
7408     This option is enabled at level `-Os' for all targets.
7409
7410`-fira-loop-pressure'
7411     Use IRA to evaluate register pressure in loops for decisions to
7412     move loop invariants.  This option usually results in generation
7413     of faster and smaller code on machines with large register files
7414     (>= 32 registers), but it can slow the compiler down.
7415
7416     This option is enabled at level `-O3' for some targets.
7417
7418`-fno-ira-share-save-slots'
7419     Disable sharing of stack slots used for saving call-used hard
7420     registers living through a call.  Each hard register gets a
7421     separate stack slot, and as a result function stack frames are
7422     larger.
7423
7424`-fno-ira-share-spill-slots'
7425     Disable sharing of stack slots allocated for pseudo-registers.
7426     Each pseudo-register that does not get a hard register gets a
7427     separate stack slot, and as a result function stack frames are
7428     larger.
7429
7430`-fira-verbose=N'
7431     Control the verbosity of the dump file for the integrated register
7432     allocator.  The default value is 5.  If the value N is greater or
7433     equal to 10, the dump output is sent to stderr using the same
7434     format as N minus 10.
7435
7436`-flra-remat'
7437     Enable CFG-sensitive rematerialization in LRA.  Instead of loading
7438     values of spilled pseudos, LRA tries to rematerialize (recalculate)
7439     values if it is profitable.
7440
7441     Enabled at levels `-O2', `-O3', `-Os'.
7442
7443`-fdelayed-branch'
7444     If supported for the target machine, attempt to reorder
7445     instructions to exploit instruction slots available after delayed
7446     branch instructions.
7447
7448     Enabled at levels `-O', `-O2', `-O3', `-Os'.
7449
7450`-fschedule-insns'
7451     If supported for the target machine, attempt to reorder
7452     instructions to eliminate execution stalls due to required data
7453     being unavailable.  This helps machines that have slow floating
7454     point or memory load instructions by allowing other instructions
7455     to be issued until the result of the load or floating-point
7456     instruction is required.
7457
7458     Enabled at levels `-O2', `-O3'.
7459
7460`-fschedule-insns2'
7461     Similar to `-fschedule-insns', but requests an additional pass of
7462     instruction scheduling after register allocation has been done.
7463     This is especially useful on machines with a relatively small
7464     number of registers and where memory load instructions take more
7465     than one cycle.
7466
7467     Enabled at levels `-O2', `-O3', `-Os'.
7468
7469`-fno-sched-interblock'
7470     Don't schedule instructions across basic blocks.  This is normally
7471     enabled by default when scheduling before register allocation, i.e.
7472     with `-fschedule-insns' or at `-O2' or higher.
7473
7474`-fno-sched-spec'
7475     Don't allow speculative motion of non-load instructions.  This is
7476     normally enabled by default when scheduling before register
7477     allocation, i.e.  with `-fschedule-insns' or at `-O2' or higher.
7478
7479`-fsched-pressure'
7480     Enable register pressure sensitive insn scheduling before register
7481     allocation.  This only makes sense when scheduling before register
7482     allocation is enabled, i.e. with `-fschedule-insns' or at `-O2' or
7483     higher.  Usage of this option can improve the generated code and
7484     decrease its size by preventing register pressure increase above
7485     the number of available hard registers and subsequent spills in
7486     register allocation.
7487
7488`-fsched-spec-load'
7489     Allow speculative motion of some load instructions.  This only
7490     makes sense when scheduling before register allocation, i.e. with
7491     `-fschedule-insns' or at `-O2' or higher.
7492
7493`-fsched-spec-load-dangerous'
7494     Allow speculative motion of more load instructions.  This only
7495     makes sense when scheduling before register allocation, i.e. with
7496     `-fschedule-insns' or at `-O2' or higher.
7497
7498`-fsched-stalled-insns'
7499`-fsched-stalled-insns=N'
7500     Define how many insns (if any) can be moved prematurely from the
7501     queue of stalled insns into the ready list during the second
7502     scheduling pass.  `-fno-sched-stalled-insns' means that no insns
7503     are moved prematurely, `-fsched-stalled-insns=0' means there is no
7504     limit on how many queued insns can be moved prematurely.
7505     `-fsched-stalled-insns' without a value is equivalent to
7506     `-fsched-stalled-insns=1'.
7507
7508`-fsched-stalled-insns-dep'
7509`-fsched-stalled-insns-dep=N'
7510     Define how many insn groups (cycles) are examined for a dependency
7511     on a stalled insn that is a candidate for premature removal from
7512     the queue of stalled insns.  This has an effect only during the
7513     second scheduling pass, and only if `-fsched-stalled-insns' is
7514     used.  `-fno-sched-stalled-insns-dep' is equivalent to
7515     `-fsched-stalled-insns-dep=0'.  `-fsched-stalled-insns-dep'
7516     without a value is equivalent to `-fsched-stalled-insns-dep=1'.
7517
7518`-fsched2-use-superblocks'
7519     When scheduling after register allocation, use superblock
7520     scheduling.  This allows motion across basic block boundaries,
7521     resulting in faster schedules.  This option is experimental, as
7522     not all machine descriptions used by GCC model the CPU closely
7523     enough to avoid unreliable results from the algorithm.
7524
7525     This only makes sense when scheduling after register allocation,
7526     i.e. with `-fschedule-insns2' or at `-O2' or higher.
7527
7528`-fsched-group-heuristic'
7529     Enable the group heuristic in the scheduler.  This heuristic favors
7530     the instruction that belongs to a schedule group.  This is enabled
7531     by default when scheduling is enabled, i.e. with `-fschedule-insns'
7532     or `-fschedule-insns2' or at `-O2' or higher.
7533
7534`-fsched-critical-path-heuristic'
7535     Enable the critical-path heuristic in the scheduler.  This
7536     heuristic favors instructions on the critical path.  This is
7537     enabled by default when scheduling is enabled, i.e. with
7538     `-fschedule-insns' or `-fschedule-insns2' or at `-O2' or higher.
7539
7540`-fsched-spec-insn-heuristic'
7541     Enable the speculative instruction heuristic in the scheduler.
7542     This heuristic favors speculative instructions with greater
7543     dependency weakness.  This is enabled by default when scheduling
7544     is enabled, i.e.  with `-fschedule-insns' or `-fschedule-insns2'
7545     or at `-O2' or higher.
7546
7547`-fsched-rank-heuristic'
7548     Enable the rank heuristic in the scheduler.  This heuristic favors
7549     the instruction belonging to a basic block with greater size or
7550     frequency.  This is enabled by default when scheduling is enabled,
7551     i.e.  with `-fschedule-insns' or `-fschedule-insns2' or at `-O2'
7552     or higher.
7553
7554`-fsched-last-insn-heuristic'
7555     Enable the last-instruction heuristic in the scheduler.  This
7556     heuristic favors the instruction that is less dependent on the
7557     last instruction scheduled.  This is enabled by default when
7558     scheduling is enabled, i.e. with `-fschedule-insns' or
7559     `-fschedule-insns2' or at `-O2' or higher.
7560
7561`-fsched-dep-count-heuristic'
7562     Enable the dependent-count heuristic in the scheduler.  This
7563     heuristic favors the instruction that has more instructions
7564     depending on it.  This is enabled by default when scheduling is
7565     enabled, i.e.  with `-fschedule-insns' or `-fschedule-insns2' or
7566     at `-O2' or higher.
7567
7568`-freschedule-modulo-scheduled-loops'
7569     Modulo scheduling is performed before traditional scheduling.  If
7570     a loop is modulo scheduled, later scheduling passes may change its
7571     schedule.  Use this option to control that behavior.
7572
7573`-fselective-scheduling'
7574     Schedule instructions using selective scheduling algorithm.
7575     Selective scheduling runs instead of the first scheduler pass.
7576
7577`-fselective-scheduling2'
7578     Schedule instructions using selective scheduling algorithm.
7579     Selective scheduling runs instead of the second scheduler pass.
7580
7581`-fsel-sched-pipelining'
7582     Enable software pipelining of innermost loops during selective
7583     scheduling.  This option has no effect unless one of
7584     `-fselective-scheduling' or `-fselective-scheduling2' is turned on.
7585
7586`-fsel-sched-pipelining-outer-loops'
7587     When pipelining loops during selective scheduling, also pipeline
7588     outer loops.  This option has no effect unless
7589     `-fsel-sched-pipelining' is turned on.
7590
7591`-fsemantic-interposition'
7592     Some object formats, like ELF, allow interposing of symbols by the
7593     dynamic linker.  This means that for symbols exported from the
7594     DSO, the compiler cannot perform interprocedural propagation,
7595     inlining and other optimizations in anticipation that the function
7596     or variable in question may change. While this feature is useful,
7597     for example, to rewrite memory allocation functions by a debugging
7598     implementation, it is expensive in the terms of code quality.
7599     With `-fno-semantic-interposition' the compiler assumes that if
7600     interposition happens for functions the overwriting function will
7601     have precisely the same semantics (and side effects).  Similarly
7602     if interposition happens for variables, the constructor of the
7603     variable will be the same. The flag has no effect for functions
7604     explicitly declared inline (where it is never allowed for
7605     interposition to change semantics) and for symbols explicitly
7606     declared weak.
7607
7608`-fshrink-wrap'
7609     Emit function prologues only before parts of the function that
7610     need it, rather than at the top of the function.  This flag is
7611     enabled by default at `-O' and higher.
7612
7613`-fcaller-saves'
7614     Enable allocation of values to registers that are clobbered by
7615     function calls, by emitting extra instructions to save and restore
7616     the registers around such calls.  Such allocation is done only
7617     when it seems to result in better code.
7618
7619     This option is always enabled by default on certain machines,
7620     usually those which have no call-preserved registers to use
7621     instead.
7622
7623     Enabled at levels `-O2', `-O3', `-Os'.
7624
7625`-fcombine-stack-adjustments'
7626     Tracks stack adjustments (pushes and pops) and stack memory
7627     references and then tries to find ways to combine them.
7628
7629     Enabled by default at `-O1' and higher.
7630
7631`-fipa-ra'
7632     Use caller save registers for allocation if those registers are
7633     not used by any called function.  In that case it is not necessary
7634     to save and restore them around calls.  This is only possible if
7635     called functions are part of same compilation unit as current
7636     function and they are compiled before it.
7637
7638     Enabled at levels `-O2', `-O3', `-Os'.
7639
7640`-fconserve-stack'
7641     Attempt to minimize stack usage.  The compiler attempts to use less
7642     stack space, even if that makes the program slower.  This option
7643     implies setting the `large-stack-frame' parameter to 100 and the
7644     `large-stack-frame-growth' parameter to 400.
7645
7646`-ftree-reassoc'
7647     Perform reassociation on trees.  This flag is enabled by default
7648     at `-O' and higher.
7649
7650`-ftree-pre'
7651     Perform partial redundancy elimination (PRE) on trees.  This flag
7652     is enabled by default at `-O2' and `-O3'.
7653
7654`-ftree-partial-pre'
7655     Make partial redundancy elimination (PRE) more aggressive.  This
7656     flag is enabled by default at `-O3'.
7657
7658`-ftree-forwprop'
7659     Perform forward propagation on trees.  This flag is enabled by
7660     default at `-O' and higher.
7661
7662`-ftree-fre'
7663     Perform full redundancy elimination (FRE) on trees.  The difference
7664     between FRE and PRE is that FRE only considers expressions that
7665     are computed on all paths leading to the redundant computation.
7666     This analysis is faster than PRE, though it exposes fewer
7667     redundancies.  This flag is enabled by default at `-O' and higher.
7668
7669`-ftree-phiprop'
7670     Perform hoisting of loads from conditional pointers on trees.  This
7671     pass is enabled by default at `-O' and higher.
7672
7673`-fhoist-adjacent-loads'
7674     Speculatively hoist loads from both branches of an if-then-else if
7675     the loads are from adjacent locations in the same structure and
7676     the target architecture has a conditional move instruction.  This
7677     flag is enabled by default at `-O2' and higher.
7678
7679`-ftree-copy-prop'
7680     Perform copy propagation on trees.  This pass eliminates
7681     unnecessary copy operations.  This flag is enabled by default at
7682     `-O' and higher.
7683
7684`-fipa-pure-const'
7685     Discover which functions are pure or constant.  Enabled by default
7686     at `-O' and higher.
7687
7688`-fipa-reference'
7689     Discover which static variables do not escape the compilation unit.
7690     Enabled by default at `-O' and higher.
7691
7692`-fipa-pta'
7693     Perform interprocedural pointer analysis and interprocedural
7694     modification and reference analysis.  This option can cause
7695     excessive memory and compile-time usage on large compilation
7696     units.  It is not enabled by default at any optimization level.
7697
7698`-fipa-profile'
7699     Perform interprocedural profile propagation.  The functions called
7700     only from cold functions are marked as cold. Also functions
7701     executed once (such as `cold', `noreturn', static constructors or
7702     destructors) are identified. Cold functions and loop less parts of
7703     functions executed once are then optimized for size.  Enabled by
7704     default at `-O' and higher.
7705
7706`-fipa-cp'
7707     Perform interprocedural constant propagation.  This optimization
7708     analyzes the program to determine when values passed to functions
7709     are constants and then optimizes accordingly.  This optimization
7710     can substantially increase performance if the application has
7711     constants passed to functions.  This flag is enabled by default at
7712     `-O2', `-Os' and `-O3'.
7713
7714`-fipa-cp-clone'
7715     Perform function cloning to make interprocedural constant
7716     propagation stronger.  When enabled, interprocedural constant
7717     propagation performs function cloning when externally visible
7718     function can be called with constant arguments.  Because this
7719     optimization can create multiple copies of functions, it may
7720     significantly increase code size (see `--param
7721     ipcp-unit-growth=VALUE').  This flag is enabled by default at
7722     `-O3'.
7723
7724`-fipa-cp-alignment'
7725     When enabled, this optimization propagates alignment of function
7726     parameters to support better vectorization and string operations.
7727
7728     This flag is enabled by default at `-O2' and `-Os'.  It requires
7729     that `-fipa-cp' is enabled.
7730
7731`-fipa-icf'
7732     Perform Identical Code Folding for functions and read-only
7733     variables.  The optimization reduces code size and may disturb
7734     unwind stacks by replacing a function by equivalent one with a
7735     different name. The optimization works more effectively with link
7736     time optimization enabled.
7737
7738     Nevertheless the behavior is similar to Gold Linker ICF
7739     optimization, GCC ICF works on different levels and thus the
7740     optimizations are not same - there are equivalences that are found
7741     only by GCC and equivalences found only by Gold.
7742
7743     This flag is enabled by default at `-O2' and `-Os'.
7744
7745`-fisolate-erroneous-paths-dereference'
7746     Detect paths that trigger erroneous or undefined behavior due to
7747     dereferencing a null pointer.  Isolate those paths from the main
7748     control flow and turn the statement with erroneous or undefined
7749     behavior into a trap.  This flag is enabled by default at `-O2'
7750     and higher.
7751
7752`-fisolate-erroneous-paths-attribute'
7753     Detect paths that trigger erroneous or undefined behavior due a
7754     null value being used in a way forbidden by a `returns_nonnull' or
7755     `nonnull' attribute.  Isolate those paths from the main control
7756     flow and turn the statement with erroneous or undefined behavior
7757     into a trap.  This is not currently enabled, but may be enabled by
7758     `-O2' in the future.
7759
7760`-ftree-sink'
7761     Perform forward store motion  on trees.  This flag is enabled by
7762     default at `-O' and higher.
7763
7764`-ftree-bit-ccp'
7765     Perform sparse conditional bit constant propagation on trees and
7766     propagate pointer alignment information.  This pass only operates
7767     on local scalar variables and is enabled by default at `-O' and
7768     higher.  It requires that `-ftree-ccp' is enabled.
7769
7770`-ftree-ccp'
7771     Perform sparse conditional constant propagation (CCP) on trees.
7772     This pass only operates on local scalar variables and is enabled
7773     by default at `-O' and higher.
7774
7775`-fssa-phiopt'
7776     Perform pattern matching on SSA PHI nodes to optimize conditional
7777     code.  This pass is enabled by default at `-O' and higher.
7778
7779`-ftree-switch-conversion'
7780     Perform conversion of simple initializations in a switch to
7781     initializations from a scalar array.  This flag is enabled by
7782     default at `-O2' and higher.
7783
7784`-ftree-tail-merge'
7785     Look for identical code sequences.  When found, replace one with a
7786     jump to the other.  This optimization is known as tail merging or
7787     cross jumping.  This flag is enabled by default at `-O2' and
7788     higher.  The compilation time in this pass can be limited using
7789     `max-tail-merge-comparisons' parameter and
7790     `max-tail-merge-iterations' parameter.
7791
7792`-ftree-dce'
7793     Perform dead code elimination (DCE) on trees.  This flag is
7794     enabled by default at `-O' and higher.
7795
7796`-ftree-builtin-call-dce'
7797     Perform conditional dead code elimination (DCE) for calls to
7798     built-in functions that may set `errno' but are otherwise
7799     side-effect free.  This flag is enabled by default at `-O2' and
7800     higher if `-Os' is not also specified.
7801
7802`-ftree-dominator-opts'
7803     Perform a variety of simple scalar cleanups (constant/copy
7804     propagation, redundancy elimination, range propagation and
7805     expression simplification) based on a dominator tree traversal.
7806     This also performs jump threading (to reduce jumps to jumps). This
7807     flag is enabled by default at `-O' and higher.
7808
7809`-ftree-dse'
7810     Perform dead store elimination (DSE) on trees.  A dead store is a
7811     store into a memory location that is later overwritten by another
7812     store without any intervening loads.  In this case the earlier
7813     store can be deleted.  This flag is enabled by default at `-O' and
7814     higher.
7815
7816`-ftree-ch'
7817     Perform loop header copying on trees.  This is beneficial since it
7818     increases effectiveness of code motion optimizations.  It also
7819     saves one jump.  This flag is enabled by default at `-O' and
7820     higher.  It is not enabled for `-Os', since it usually increases
7821     code size.
7822
7823`-ftree-loop-optimize'
7824     Perform loop optimizations on trees.  This flag is enabled by
7825     default at `-O' and higher.
7826
7827`-ftree-loop-linear'
7828     Perform loop interchange transformations on tree.  Same as
7829     `-floop-interchange'.  To use this code transformation, GCC has to
7830     be configured with `--with-isl' to enable the Graphite loop
7831     transformation infrastructure.
7832
7833`-floop-interchange'
7834     Perform loop interchange transformations on loops.  Interchanging
7835     two nested loops switches the inner and outer loops.  For example,
7836     given a loop like:
7837          DO J = 1, M
7838            DO I = 1, N
7839              A(J, I) = A(J, I) * C
7840            ENDDO
7841          ENDDO
7842     loop interchange transforms the loop as if it were written:
7843          DO I = 1, N
7844            DO J = 1, M
7845              A(J, I) = A(J, I) * C
7846            ENDDO
7847          ENDDO
7848     which can be beneficial when `N' is larger than the caches,
7849     because in Fortran, the elements of an array are stored in memory
7850     contiguously by column, and the original loop iterates over rows,
7851     potentially creating at each access a cache miss.  This
7852     optimization applies to all the languages supported by GCC and is
7853     not limited to Fortran.  To use this code transformation, GCC has
7854     to be configured with `--with-isl' to enable the Graphite loop
7855     transformation infrastructure.
7856
7857`-floop-strip-mine'
7858     Perform loop strip mining transformations on loops.  Strip mining
7859     splits a loop into two nested loops.  The outer loop has strides
7860     equal to the strip size and the inner loop has strides of the
7861     original loop within a strip.  The strip length can be changed
7862     using the `loop-block-tile-size' parameter.  For example, given a
7863     loop like:
7864          DO I = 1, N
7865            A(I) = A(I) + C
7866          ENDDO
7867     loop strip mining transforms the loop as if it were written:
7868          DO II = 1, N, 51
7869            DO I = II, min (II + 50, N)
7870              A(I) = A(I) + C
7871            ENDDO
7872          ENDDO
7873     This optimization applies to all the languages supported by GCC
7874     and is not limited to Fortran.  To use this code transformation,
7875     GCC has to be configured with `--with-isl' to enable the Graphite
7876     loop transformation infrastructure.
7877
7878`-floop-block'
7879     Perform loop blocking transformations on loops.  Blocking strip
7880     mines each loop in the loop nest such that the memory accesses of
7881     the element loops fit inside caches.  The strip length can be
7882     changed using the `loop-block-tile-size' parameter.  For example,
7883     given a loop like:
7884          DO I = 1, N
7885            DO J = 1, M
7886              A(J, I) = B(I) + C(J)
7887            ENDDO
7888          ENDDO
7889     loop blocking transforms the loop as if it were written:
7890          DO II = 1, N, 51
7891            DO JJ = 1, M, 51
7892              DO I = II, min (II + 50, N)
7893                DO J = JJ, min (JJ + 50, M)
7894                  A(J, I) = B(I) + C(J)
7895                ENDDO
7896              ENDDO
7897            ENDDO
7898          ENDDO
7899     which can be beneficial when `M' is larger than the caches,
7900     because the innermost loop iterates over a smaller amount of data
7901     which can be kept in the caches.  This optimization applies to all
7902     the languages supported by GCC and is not limited to Fortran.  To
7903     use this code transformation, GCC has to be configured with
7904     `--with-isl' to enable the Graphite loop transformation
7905     infrastructure.
7906
7907`-fgraphite-identity'
7908     Enable the identity transformation for graphite.  For every SCoP
7909     we generate the polyhedral representation and transform it back to
7910     gimple.  Using `-fgraphite-identity' we can check the costs or
7911     benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
7912     minimal optimizations are also performed by the code generator
7913     ISL, like index splitting and dead code elimination in loops.
7914
7915`-floop-nest-optimize'
7916     Enable the ISL based loop nest optimizer.  This is a generic loop
7917     nest optimizer based on the Pluto optimization algorithms.  It
7918     calculates a loop structure optimized for data-locality and
7919     parallelism.  This option is experimental.
7920
7921`-floop-unroll-and-jam'
7922     Enable unroll and jam for the ISL based loop nest optimizer.  The
7923     unroll factor can be changed using the `loop-unroll-jam-size'
7924     parameter.  The unrolled dimension (counting from the most inner
7925     one) can be changed using the `loop-unroll-jam-depth' parameter.
7926                  .
7927
7928`-floop-parallelize-all'
7929     Use the Graphite data dependence analysis to identify loops that
7930     can be parallelized.  Parallelize all the loops that can be
7931     analyzed to not contain loop carried dependences without checking
7932     that it is profitable to parallelize the loops.
7933
7934`-fcheck-data-deps'
7935     Compare the results of several data dependence analyzers.  This
7936     option is used for debugging the data dependence analyzers.
7937
7938`-ftree-loop-if-convert'
7939     Attempt to transform conditional jumps in the innermost loops to
7940     branch-less equivalents.  The intent is to remove control-flow from
7941     the innermost loops in order to improve the ability of the
7942     vectorization pass to handle these loops.  This is enabled by
7943     default if vectorization is enabled.
7944
7945`-ftree-loop-if-convert-stores'
7946     Attempt to also if-convert conditional jumps containing memory
7947     writes.  This transformation can be unsafe for multi-threaded
7948     programs as it transforms conditional memory writes into
7949     unconditional memory writes.  For example,
7950          for (i = 0; i < N; i++)
7951            if (cond)
7952              A[i] = expr;
7953     is transformed to
7954          for (i = 0; i < N; i++)
7955            A[i] = cond ? expr : A[i];
7956     potentially producing data races.
7957
7958`-ftree-loop-distribution'
7959     Perform loop distribution.  This flag can improve cache
7960     performance on big loop bodies and allow further loop
7961     optimizations, like parallelization or vectorization, to take
7962     place.  For example, the loop
7963          DO I = 1, N
7964            A(I) = B(I) + C
7965            D(I) = E(I) * F
7966          ENDDO
7967     is transformed to
7968          DO I = 1, N
7969             A(I) = B(I) + C
7970          ENDDO
7971          DO I = 1, N
7972             D(I) = E(I) * F
7973          ENDDO
7974
7975`-ftree-loop-distribute-patterns'
7976     Perform loop distribution of patterns that can be code generated
7977     with calls to a library.  This flag is enabled by default at `-O3'.
7978
7979     This pass distributes the initialization loops and generates a
7980     call to memset zero.  For example, the loop
7981          DO I = 1, N
7982            A(I) = 0
7983            B(I) = A(I) + I
7984          ENDDO
7985     is transformed to
7986          DO I = 1, N
7987             A(I) = 0
7988          ENDDO
7989          DO I = 1, N
7990             B(I) = A(I) + I
7991          ENDDO
7992     and the initialization loop is transformed into a call to memset
7993     zero.
7994
7995`-ftree-loop-im'
7996     Perform loop invariant motion on trees.  This pass moves only
7997     invariants that are hard to handle at RTL level (function calls,
7998     operations that expand to nontrivial sequences of insns).  With
7999     `-funswitch-loops' it also moves operands of conditions that are
8000     invariant out of the loop, so that we can use just trivial
8001     invariantness analysis in loop unswitching.  The pass also includes
8002     store motion.
8003
8004`-ftree-loop-ivcanon'
8005     Create a canonical counter for number of iterations in loops for
8006     which determining number of iterations requires complicated
8007     analysis.  Later optimizations then may determine the number
8008     easily.  Useful especially in connection with unrolling.
8009
8010`-fivopts'
8011     Perform induction variable optimizations (strength reduction,
8012     induction variable merging and induction variable elimination) on
8013     trees.
8014
8015`-ftree-parallelize-loops=n'
8016     Parallelize loops, i.e., split their iteration space to run in n
8017     threads.  This is only possible for loops whose iterations are
8018     independent and can be arbitrarily reordered.  The optimization is
8019     only profitable on multiprocessor machines, for loops that are
8020     CPU-intensive, rather than constrained e.g. by memory bandwidth.
8021     This option implies `-pthread', and thus is only supported on
8022     targets that have support for `-pthread'.
8023
8024`-ftree-pta'
8025     Perform function-local points-to analysis on trees.  This flag is
8026     enabled by default at `-O' and higher.
8027
8028`-ftree-sra'
8029     Perform scalar replacement of aggregates.  This pass replaces
8030     structure references with scalars to prevent committing structures
8031     to memory too early.  This flag is enabled by default at `-O' and
8032     higher.
8033
8034`-ftree-copyrename'
8035     Perform copy renaming on trees.  This pass attempts to rename
8036     compiler temporaries to other variables at copy locations, usually
8037     resulting in variable names which more closely resemble the
8038     original variables.  This flag is enabled by default at `-O' and
8039     higher.
8040
8041`-ftree-coalesce-inlined-vars'
8042     Tell the copyrename pass (see `-ftree-copyrename') to attempt to
8043     combine small user-defined variables too, but only if they are
8044     inlined from other functions.  It is a more limited form of
8045     `-ftree-coalesce-vars'.  This may harm debug information of such
8046     inlined variables, but it keeps variables of the inlined-into
8047     function apart from each other, such that they are more likely to
8048     contain the expected values in a debugging session.
8049
8050`-ftree-coalesce-vars'
8051     Tell the copyrename pass (see `-ftree-copyrename') to attempt to
8052     combine small user-defined variables too, instead of just compiler
8053     temporaries.  This may severely limit the ability to debug an
8054     optimized program compiled with `-fno-var-tracking-assignments'.
8055     In the negated form, this flag prevents SSA coalescing of user
8056     variables, including inlined ones.  This option is enabled by
8057     default.
8058
8059`-ftree-ter'
8060     Perform temporary expression replacement during the SSA->normal
8061     phase.  Single use/single def temporaries are replaced at their
8062     use location with their defining expression.  This results in
8063     non-GIMPLE code, but gives the expanders much more complex trees
8064     to work on resulting in better RTL generation.  This is enabled by
8065     default at `-O' and higher.
8066
8067`-ftree-slsr'
8068     Perform straight-line strength reduction on trees.  This
8069     recognizes related expressions involving multiplications and
8070     replaces them by less expensive calculations when possible.  This
8071     is enabled by default at `-O' and higher.
8072
8073`-ftree-vectorize'
8074     Perform vectorization on trees. This flag enables
8075     `-ftree-loop-vectorize' and `-ftree-slp-vectorize' if not
8076     explicitly specified.
8077
8078`-ftree-loop-vectorize'
8079     Perform loop vectorization on trees. This flag is enabled by
8080     default at `-O3' and when `-ftree-vectorize' is enabled.
8081
8082`-ftree-slp-vectorize'
8083     Perform basic block vectorization on trees. This flag is enabled
8084     by default at `-O3' and when `-ftree-vectorize' is enabled.
8085
8086`-fvect-cost-model=MODEL'
8087     Alter the cost model used for vectorization.  The MODEL argument
8088     should be one of `unlimited', `dynamic' or `cheap'.  With the
8089     `unlimited' model the vectorized code-path is assumed to be
8090     profitable while with the `dynamic' model a runtime check guards
8091     the vectorized code-path to enable it only for iteration counts
8092     that will likely execute faster than when executing the original
8093     scalar loop.  The `cheap' model disables vectorization of loops
8094     where doing so would be cost prohibitive for example due to
8095     required runtime checks for data dependence or alignment but
8096     otherwise is equal to the `dynamic' model.  The default cost model
8097     depends on other optimization flags and is either `dynamic' or
8098     `cheap'.
8099
8100`-fsimd-cost-model=MODEL'
8101     Alter the cost model used for vectorization of loops marked with
8102     the OpenMP or Cilk Plus simd directive.  The MODEL argument should
8103     be one of `unlimited', `dynamic', `cheap'.  All values of MODEL
8104     have the same meaning as described in `-fvect-cost-model' and by
8105     default a cost model defined with `-fvect-cost-model' is used.
8106
8107`-ftree-vrp'
8108     Perform Value Range Propagation on trees.  This is similar to the
8109     constant propagation pass, but instead of values, ranges of values
8110     are propagated.  This allows the optimizers to remove unnecessary
8111     range checks like array bound checks and null pointer checks.
8112     This is enabled by default at `-O2' and higher.  Null pointer check
8113     elimination is only done if `-fdelete-null-pointer-checks' is
8114     enabled.
8115
8116`-fsplit-ivs-in-unroller'
8117     Enables expression of values of induction variables in later
8118     iterations of the unrolled loop using the value in the first
8119     iteration.  This breaks long dependency chains, thus improving
8120     efficiency of the scheduling passes.
8121
8122     A combination of `-fweb' and CSE is often sufficient to obtain the
8123     same effect.  However, that is not reliable in cases where the
8124     loop body is more complicated than a single basic block.  It also
8125     does not work at all on some architectures due to restrictions in
8126     the CSE pass.
8127
8128     This optimization is enabled by default.
8129
8130`-fvariable-expansion-in-unroller'
8131     With this option, the compiler creates multiple copies of some
8132     local variables when unrolling a loop, which can result in
8133     superior code.
8134
8135`-fpartial-inlining'
8136     Inline parts of functions.  This option has any effect only when
8137     inlining itself is turned on by the `-finline-functions' or
8138     `-finline-small-functions' options.
8139
8140     Enabled at level `-O2'.
8141
8142`-fpredictive-commoning'
8143     Perform predictive commoning optimization, i.e., reusing
8144     computations (especially memory loads and stores) performed in
8145     previous iterations of loops.
8146
8147     This option is enabled at level `-O3'.
8148
8149`-fprefetch-loop-arrays'
8150     If supported by the target machine, generate instructions to
8151     prefetch memory to improve the performance of loops that access
8152     large arrays.
8153
8154     This option may generate better or worse code; results are highly
8155     dependent on the structure of loops within the source code.
8156
8157     Disabled at level `-Os'.
8158
8159`-fno-peephole'
8160`-fno-peephole2'
8161     Disable any machine-specific peephole optimizations.  The
8162     difference between `-fno-peephole' and `-fno-peephole2' is in how
8163     they are implemented in the compiler; some targets use one, some
8164     use the other, a few use both.
8165
8166     `-fpeephole' is enabled by default.  `-fpeephole2' enabled at
8167     levels `-O2', `-O3', `-Os'.
8168
8169`-fno-guess-branch-probability'
8170     Do not guess branch probabilities using heuristics.
8171
8172     GCC uses heuristics to guess branch probabilities if they are not
8173     provided by profiling feedback (`-fprofile-arcs').  These
8174     heuristics are based on the control flow graph.  If some branch
8175     probabilities are specified by `__builtin_expect', then the
8176     heuristics are used to guess branch probabilities for the rest of
8177     the control flow graph, taking the `__builtin_expect' info into
8178     account.  The interactions between the heuristics and
8179     `__builtin_expect' can be complex, and in some cases, it may be
8180     useful to disable the heuristics so that the effects of
8181     `__builtin_expect' are easier to understand.
8182
8183     The default is `-fguess-branch-probability' at levels `-O', `-O2',
8184     `-O3', `-Os'.
8185
8186`-freorder-blocks'
8187     Reorder basic blocks in the compiled function in order to reduce
8188     number of taken branches and improve code locality.
8189
8190     Enabled at levels `-O2', `-O3'.
8191
8192`-freorder-blocks-and-partition'
8193     In addition to reordering basic blocks in the compiled function,
8194     in order to reduce number of taken branches, partitions hot and
8195     cold basic blocks into separate sections of the assembly and .o
8196     files, to improve paging and cache locality performance.
8197
8198     This optimization is automatically turned off in the presence of
8199     exception handling, for linkonce sections, for functions with a
8200     user-defined section attribute and on any architecture that does
8201     not support named sections.
8202
8203     Enabled for x86 at levels `-O2', `-O3'.
8204
8205`-freorder-functions'
8206     Reorder functions in the object file in order to improve code
8207     locality.  This is implemented by using special subsections
8208     `.text.hot' for most frequently executed functions and
8209     `.text.unlikely' for unlikely executed functions.  Reordering is
8210     done by the linker so object file format must support named
8211     sections and linker must place them in a reasonable way.
8212
8213     Also profile feedback must be available to make this option
8214     effective.  See `-fprofile-arcs' for details.
8215
8216     Enabled at levels `-O2', `-O3', `-Os'.
8217
8218`-fstrict-aliasing'
8219     Allow the compiler to assume the strictest aliasing rules
8220     applicable to the language being compiled.  For C (and C++), this
8221     activates optimizations based on the type of expressions.  In
8222     particular, an object of one type is assumed never to reside at
8223     the same address as an object of a different type, unless the
8224     types are almost the same.  For example, an `unsigned int' can
8225     alias an `int', but not a `void*' or a `double'.  A character type
8226     may alias any other type.
8227
8228     Pay special attention to code like this:
8229          union a_union {
8230            int i;
8231            double d;
8232          };
8233
8234          int f() {
8235            union a_union t;
8236            t.d = 3.0;
8237            return t.i;
8238          }
8239     The practice of reading from a different union member than the one
8240     most recently written to (called "type-punning") is common.  Even
8241     with `-fstrict-aliasing', type-punning is allowed, provided the
8242     memory is accessed through the union type.  So, the code above
8243     works as expected.  *Note Structures unions enumerations and
8244     bit-fields implementation::.  However, this code might not:
8245          int f() {
8246            union a_union t;
8247            int* ip;
8248            t.d = 3.0;
8249            ip = &t.i;
8250            return *ip;
8251          }
8252
8253     Similarly, access by taking the address, casting the resulting
8254     pointer and dereferencing the result has undefined behavior, even
8255     if the cast uses a union type, e.g.:
8256          int f() {
8257            double d = 3.0;
8258            return ((union a_union *) &d)->i;
8259          }
8260
8261     The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3',
8262     `-Os'.
8263
8264`-fstrict-overflow'
8265     Allow the compiler to assume strict signed overflow rules,
8266     depending on the language being compiled.  For C (and C++) this
8267     means that overflow when doing arithmetic with signed numbers is
8268     undefined, which means that the compiler may assume that it does
8269     not happen.  This permits various optimizations.  For example, the
8270     compiler assumes that an expression like `i + 10 > i' is always
8271     true for signed `i'.  This assumption is only valid if signed
8272     overflow is undefined, as the expression is false if `i + 10'
8273     overflows when using twos complement arithmetic.  When this option
8274     is in effect any attempt to determine whether an operation on
8275     signed numbers overflows must be written carefully to not actually
8276     involve overflow.
8277
8278     This option also allows the compiler to assume strict pointer
8279     semantics: given a pointer to an object, if adding an offset to
8280     that pointer does not produce a pointer to the same object, the
8281     addition is undefined.  This permits the compiler to conclude that
8282     `p + u > p' is always true for a pointer `p' and unsigned integer
8283     `u'.  This assumption is only valid because pointer wraparound is
8284     undefined, as the expression is false if `p + u' overflows using
8285     twos complement arithmetic.
8286
8287     See also the `-fwrapv' option.  Using `-fwrapv' means that integer
8288     signed overflow is fully defined: it wraps.  When `-fwrapv' is
8289     used, there is no difference between `-fstrict-overflow' and
8290     `-fno-strict-overflow' for integers.  With `-fwrapv' certain types
8291     of overflow are permitted.  For example, if the compiler gets an
8292     overflow when doing arithmetic on constants, the overflowed value
8293     can still be used with `-fwrapv', but not otherwise.
8294
8295     The `-fstrict-overflow' option is enabled at levels `-O2', `-O3',
8296     `-Os'.
8297
8298`-falign-functions'
8299`-falign-functions=N'
8300     Align the start of functions to the next power-of-two greater than
8301     N, skipping up to N bytes.  For instance, `-falign-functions=32'
8302     aligns functions to the next 32-byte boundary, but
8303     `-falign-functions=24' aligns to the next 32-byte boundary only if
8304     this can be done by skipping 23 bytes or less.
8305
8306     `-fno-align-functions' and `-falign-functions=1' are equivalent
8307     and mean that functions are not aligned.
8308
8309     Some assemblers only support this flag when N is a power of two;
8310     in that case, it is rounded up.
8311
8312     If N is not specified or is zero, use a machine-dependent default.
8313
8314     Enabled at levels `-O2', `-O3'.
8315
8316`-falign-labels'
8317`-falign-labels=N'
8318     Align all branch targets to a power-of-two boundary, skipping up to
8319     N bytes like `-falign-functions'.  This option can easily make
8320     code slower, because it must insert dummy operations for when the
8321     branch target is reached in the usual flow of the code.
8322
8323     `-fno-align-labels' and `-falign-labels=1' are equivalent and mean
8324     that labels are not aligned.
8325
8326     If `-falign-loops' or `-falign-jumps' are applicable and are
8327     greater than this value, then their values are used instead.
8328
8329     If N is not specified or is zero, use a machine-dependent default
8330     which is very likely to be `1', meaning no alignment.
8331
8332     Enabled at levels `-O2', `-O3'.
8333
8334`-falign-loops'
8335`-falign-loops=N'
8336     Align loops to a power-of-two boundary, skipping up to N bytes
8337     like `-falign-functions'.  If the loops are executed many times,
8338     this makes up for any execution of the dummy operations.
8339
8340     `-fno-align-loops' and `-falign-loops=1' are equivalent and mean
8341     that loops are not aligned.
8342
8343     If N is not specified or is zero, use a machine-dependent default.
8344
8345     Enabled at levels `-O2', `-O3'.
8346
8347`-falign-jumps'
8348`-falign-jumps=N'
8349     Align branch targets to a power-of-two boundary, for branch targets
8350     where the targets can only be reached by jumping, skipping up to N
8351     bytes like `-falign-functions'.  In this case, no dummy operations
8352     need be executed.
8353
8354     `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean
8355     that loops are not aligned.
8356
8357     If N is not specified or is zero, use a machine-dependent default.
8358
8359     Enabled at levels `-O2', `-O3'.
8360
8361`-funit-at-a-time'
8362     This option is left for compatibility reasons. `-funit-at-a-time'
8363     has no effect, while `-fno-unit-at-a-time' implies
8364     `-fno-toplevel-reorder' and `-fno-section-anchors'.
8365
8366     Enabled by default.
8367
8368`-fno-toplevel-reorder'
8369     Do not reorder top-level functions, variables, and `asm'
8370     statements.  Output them in the same order that they appear in the
8371     input file.  When this option is used, unreferenced static
8372     variables are not removed.  This option is intended to support
8373     existing code that relies on a particular ordering.  For new code,
8374     it is better to use attributes when possible.
8375
8376     Enabled at level `-O0'.  When disabled explicitly, it also implies
8377     `-fno-section-anchors', which is otherwise enabled at `-O0' on some
8378     targets.
8379
8380`-fweb'
8381     Constructs webs as commonly used for register allocation purposes
8382     and assign each web individual pseudo register.  This allows the
8383     register allocation pass to operate on pseudos directly, but also
8384     strengthens several other optimization passes, such as CSE, loop
8385     optimizer and trivial dead code remover.  It can, however, make
8386     debugging impossible, since variables no longer stay in a "home
8387     register".
8388
8389     Enabled by default with `-funroll-loops'.
8390
8391`-fwhole-program'
8392     Assume that the current compilation unit represents the whole
8393     program being compiled.  All public functions and variables with
8394     the exception of `main' and those merged by attribute
8395     `externally_visible' become static functions and in effect are
8396     optimized more aggressively by interprocedural optimizers.
8397
8398     This option should not be used in combination with `-flto'.
8399     Instead relying on a linker plugin should provide safer and more
8400     precise information.
8401
8402`-flto[=N]'
8403     This option runs the standard link-time optimizer.  When invoked
8404     with source code, it generates GIMPLE (one of GCC's internal
8405     representations) and writes it to special ELF sections in the
8406     object file.  When the object files are linked together, all the
8407     function bodies are read from these ELF sections and instantiated
8408     as if they had been part of the same translation unit.
8409
8410     To use the link-time optimizer, `-flto' and optimization options
8411     should be specified at compile time and during the final link.
8412     For example:
8413
8414          gcc -c -O2 -flto foo.c
8415          gcc -c -O2 -flto bar.c
8416          gcc -o myprog -flto -O2 foo.o bar.o
8417
8418     The first two invocations to GCC save a bytecode representation of
8419     GIMPLE into special ELF sections inside `foo.o' and `bar.o'.  The
8420     final invocation reads the GIMPLE bytecode from `foo.o' and
8421     `bar.o', merges the two files into a single internal image, and
8422     compiles the result as usual.  Since both `foo.o' and `bar.o' are
8423     merged into a single image, this causes all the interprocedural
8424     analyses and optimizations in GCC to work across the two files as
8425     if they were a single one.  This means, for example, that the
8426     inliner is able to inline functions in `bar.o' into functions in
8427     `foo.o' and vice-versa.
8428
8429     Another (simpler) way to enable link-time optimization is:
8430
8431          gcc -o myprog -flto -O2 foo.c bar.c
8432
8433     The above generates bytecode for `foo.c' and `bar.c', merges them
8434     together into a single GIMPLE representation and optimizes them as
8435     usual to produce `myprog'.
8436
8437     The only important thing to keep in mind is that to enable
8438     link-time optimizations you need to use the GCC driver to perform
8439     the link-step.  GCC then automatically performs link-time
8440     optimization if any of the objects involved were compiled with the
8441     `-flto' command-line option.  You generally should specify the
8442     optimization options to be used for link-time optimization though
8443     GCC tries to be clever at guessing an optimization level to use
8444     from the options used at compile-time if you fail to specify one
8445     at link-time.  You can always override the automatic decision to
8446     do link-time optimization at link-time by passing `-fno-lto' to
8447     the link command.
8448
8449     To make whole program optimization effective, it is necessary to
8450     make certain whole program assumptions.  The compiler needs to know
8451     what functions and variables can be accessed by libraries and
8452     runtime outside of the link-time optimized unit.  When supported
8453     by the linker, the linker plugin (see `-fuse-linker-plugin')
8454     passes information to the compiler about used and externally
8455     visible symbols.  When the linker plugin is not available,
8456     `-fwhole-program' should be used to allow the compiler to make
8457     these assumptions, which leads to more aggressive optimization
8458     decisions.
8459
8460     When `-fuse-linker-plugin' is not enabled then, when a file is
8461     compiled with `-flto', the generated object file is larger than a
8462     regular object file because it contains GIMPLE bytecodes and the
8463     usual final code (see `-ffat-lto-objects'.  This means that object
8464     files with LTO information can be linked as normal object files;
8465     if `-fno-lto' is passed to the linker, no interprocedural
8466     optimizations are applied.  Note that when `-fno-fat-lto-objects'
8467     is enabled the compile-stage is faster but you cannot perform a
8468     regular, non-LTO link on them.
8469
8470     Additionally, the optimization flags used to compile individual
8471     files are not necessarily related to those used at link time.  For
8472     instance,
8473
8474          gcc -c -O0 -ffat-lto-objects -flto foo.c
8475          gcc -c -O0 -ffat-lto-objects -flto bar.c
8476          gcc -o myprog -O3 foo.o bar.o
8477
8478     This produces individual object files with unoptimized assembler
8479     code, but the resulting binary `myprog' is optimized at `-O3'.
8480     If, instead, the final binary is generated with `-fno-lto', then
8481     `myprog' is not optimized.
8482
8483     When producing the final binary, GCC only applies link-time
8484     optimizations to those files that contain bytecode.  Therefore,
8485     you can mix and match object files and libraries with GIMPLE
8486     bytecodes and final object code.  GCC automatically selects which
8487     files to optimize in LTO mode and which files to link without
8488     further processing.
8489
8490     There are some code generation flags preserved by GCC when
8491     generating bytecodes, as they need to be used during the final link
8492     stage.  Generally options specified at link-time override those
8493     specified at compile-time.
8494
8495     If you do not specify an optimization level option `-O' at
8496     link-time then GCC computes one based on the optimization levels
8497     used when compiling the object files.  The highest optimization
8498     level wins here.
8499
8500     Currently, the following options and their setting are take from
8501     the first object file that explicitely specified it: `-fPIC',
8502     `-fpic', `-fpie', `-fcommon', `-fexceptions',
8503     `-fnon-call-exceptions', `-fgnu-tm' and all the `-m' target flags.
8504
8505     Certain ABI changing flags are required to match in all
8506     compilation-units and trying to override this at link-time with a
8507     conflicting value is ignored.  This includes options such as
8508     `-freg-struct-return' and `-fpcc-struct-return'.
8509
8510     Other options such as `-ffp-contract', `-fno-strict-overflow',
8511     `-fwrapv', `-fno-trapv' or `-fno-strict-aliasing' are passed
8512     through to the link stage and merged conservatively for
8513     conflicting translation units.  Specifically
8514     `-fno-strict-overflow', `-fwrapv' and `-fno-trapv' take precedence
8515     and for example `-ffp-contract=off' takes precedence over
8516     `-ffp-contract=fast'.  You can override them at linke-time.
8517
8518     It is recommended that you compile all the files participating in
8519     the same link with the same options and also specify those options
8520     at link time.
8521
8522     If LTO encounters objects with C linkage declared with incompatible
8523     types in separate translation units to be linked together
8524     (undefined behavior according to ISO C99 6.2.7), a non-fatal
8525     diagnostic may be issued.  The behavior is still undefined at run
8526     time.  Similar diagnostics may be raised for other languages.
8527
8528     Another feature of LTO is that it is possible to apply
8529     interprocedural optimizations on files written in different
8530     languages:
8531
8532          gcc -c -flto foo.c
8533          g++ -c -flto bar.cc
8534          gfortran -c -flto baz.f90
8535          g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
8536
8537     Notice that the final link is done with `g++' to get the C++
8538     runtime libraries and `-lgfortran' is added to get the Fortran
8539     runtime libraries.  In general, when mixing languages in LTO mode,
8540     you should use the same link command options as when mixing
8541     languages in a regular (non-LTO) compilation.
8542
8543     If object files containing GIMPLE bytecode are stored in a library
8544     archive, say `libfoo.a', it is possible to extract and use them in
8545     an LTO link if you are using a linker with plugin support.  To
8546     create static libraries suitable for LTO, use `gcc-ar' and
8547     `gcc-ranlib' instead of `ar' and `ranlib'; to show the symbols of
8548     object files with GIMPLE bytecode, use `gcc-nm'.  Those commands
8549     require that `ar', `ranlib' and `nm' have been compiled with
8550     plugin support.  At link time, use the the flag
8551     `-fuse-linker-plugin' to ensure that the library participates in
8552     the LTO optimization process:
8553
8554          gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
8555
8556     With the linker plugin enabled, the linker extracts the needed
8557     GIMPLE files from `libfoo.a' and passes them on to the running GCC
8558     to make them part of the aggregated GIMPLE image to be optimized.
8559
8560     If you are not using a linker with plugin support and/or do not
8561     enable the linker plugin, then the objects inside `libfoo.a' are
8562     extracted and linked as usual, but they do not participate in the
8563     LTO optimization process.  In order to make a static library
8564     suitable for both LTO optimization and usual linkage, compile its
8565     object files with `-flto' `-ffat-lto-objects'.
8566
8567     Link-time optimizations do not require the presence of the whole
8568     program to operate.  If the program does not require any symbols
8569     to be exported, it is possible to combine `-flto' and
8570     `-fwhole-program' to allow the interprocedural optimizers to use
8571     more aggressive assumptions which may lead to improved
8572     optimization opportunities.  Use of `-fwhole-program' is not
8573     needed when linker plugin is active (see `-fuse-linker-plugin').
8574
8575     The current implementation of LTO makes no attempt to generate
8576     bytecode that is portable between different types of hosts.  The
8577     bytecode files are versioned and there is a strict version check,
8578     so bytecode files generated in one version of GCC do not work with
8579     an older or newer version of GCC.
8580
8581     Link-time optimization does not work well with generation of
8582     debugging information.  Combining `-flto' with `-g' is currently
8583     experimental and expected to produce unexpected results.
8584
8585     If you specify the optional N, the optimization and code
8586     generation done at link time is executed in parallel using N
8587     parallel jobs by utilizing an installed `make' program.  The
8588     environment variable `MAKE' may be used to override the program
8589     used.  The default value for N is 1.
8590
8591     You can also specify `-flto=jobserver' to use GNU make's job
8592     server mode to determine the number of parallel jobs. This is
8593     useful when the Makefile calling GCC is already executing in
8594     parallel.  You must prepend a `+' to the command recipe in the
8595     parent Makefile for this to work.  This option likely only works
8596     if `MAKE' is GNU make.
8597
8598`-flto-partition=ALG'
8599     Specify the partitioning algorithm used by the link-time optimizer.
8600     The value is either `1to1' to specify a partitioning mirroring the
8601     original source files or `balanced' to specify partitioning into
8602     equally sized chunks (whenever possible) or `max' to create new
8603     partition for every symbol where possible.  Specifying `none' as
8604     an algorithm disables partitioning and streaming completely.  The
8605     default value is `balanced'. While `1to1' can be used as an
8606     workaround for various code ordering issues, the `max'
8607     partitioning is intended for internal testing only.  The value
8608     `one' specifies that exactly one partition should be used while
8609     the value `none' bypasses partitioning and executes the link-time
8610     optimization step directly from the WPA phase.
8611
8612`-flto-odr-type-merging'
8613     Enable streaming of mangled types names of C++ types and their
8614     unification at linktime.  This increases size of LTO object files,
8615     but enable diagnostics about One Definition Rule violations.
8616
8617`-flto-compression-level=N'
8618     This option specifies the level of compression used for
8619     intermediate language written to LTO object files, and is only
8620     meaningful in conjunction with LTO mode (`-flto').  Valid values
8621     are 0 (no compression) to 9 (maximum compression).  Values outside
8622     this range are clamped to either 0 or 9.  If the option is not
8623     given, a default balanced compression setting is used.
8624
8625`-flto-report'
8626     Prints a report with internal details on the workings of the
8627     link-time optimizer.  The contents of this report vary from
8628     version to version.  It is meant to be useful to GCC developers
8629     when processing object files in LTO mode (via `-flto').
8630
8631     Disabled by default.
8632
8633`-flto-report-wpa'
8634     Like `-flto-report', but only print for the WPA phase of Link Time
8635     Optimization.
8636
8637`-fuse-linker-plugin'
8638     Enables the use of a linker plugin during link-time optimization.
8639     This option relies on plugin support in the linker, which is
8640     available in gold or in GNU ld 2.21 or newer.
8641
8642     This option enables the extraction of object files with GIMPLE
8643     bytecode out of library archives. This improves the quality of
8644     optimization by exposing more code to the link-time optimizer.
8645     This information specifies what symbols can be accessed externally
8646     (by non-LTO object or during dynamic linking).  Resulting code
8647     quality improvements on binaries (and shared libraries that use
8648     hidden visibility) are similar to `-fwhole-program'.  See `-flto'
8649     for a description of the effect of this flag and how to use it.
8650
8651     This option is enabled by default when LTO support in GCC is
8652     enabled and GCC was configured for use with a linker supporting
8653     plugins (GNU ld 2.21 or newer or gold).
8654
8655`-ffat-lto-objects'
8656     Fat LTO objects are object files that contain both the
8657     intermediate language and the object code. This makes them usable
8658     for both LTO linking and normal linking. This option is effective
8659     only when compiling with `-flto' and is ignored at link time.
8660
8661     `-fno-fat-lto-objects' improves compilation time over plain LTO,
8662     but requires the complete toolchain to be aware of LTO. It
8663     requires a linker with linker plugin support for basic
8664     functionality.  Additionally, `nm', `ar' and `ranlib' need to
8665     support linker plugins to allow a full-featured build environment
8666     (capable of building static libraries etc).  GCC provides the
8667     `gcc-ar', `gcc-nm', `gcc-ranlib' wrappers to pass the right options
8668     to these tools. With non fat LTO makefiles need to be modified to
8669     use them.
8670
8671     The default is `-fno-fat-lto-objects' on targets with linker plugin
8672     support.
8673
8674`-fcompare-elim'
8675     After register allocation and post-register allocation instruction
8676     splitting, identify arithmetic instructions that compute processor
8677     flags similar to a comparison operation based on that arithmetic.
8678     If possible, eliminate the explicit comparison operation.
8679
8680     This pass only applies to certain targets that cannot explicitly
8681     represent the comparison operation before register allocation is
8682     complete.
8683
8684     Enabled at levels `-O', `-O2', `-O3', `-Os'.
8685
8686`-fcprop-registers'
8687     After register allocation and post-register allocation instruction
8688     splitting, perform a copy-propagation pass to try to reduce
8689     scheduling dependencies and occasionally eliminate the copy.
8690
8691     Enabled at levels `-O', `-O2', `-O3', `-Os'.
8692
8693`-fprofile-correction'
8694     Profiles collected using an instrumented binary for multi-threaded
8695     programs may be inconsistent due to missed counter updates. When
8696     this option is specified, GCC uses heuristics to correct or smooth
8697     out such inconsistencies. By default, GCC emits an error message
8698     when an inconsistent profile is detected.
8699
8700`-fprofile-dir=PATH'
8701     Set the directory to search for the profile data files in to PATH.
8702     This option affects only the profile data generated by
8703     `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used
8704     by `-fprofile-use' and `-fbranch-probabilities' and its related
8705     options.  Both absolute and relative paths can be used.  By
8706     default, GCC uses the current directory as PATH, thus the profile
8707     data file appears in the same directory as the object file.
8708
8709`-fprofile-generate'
8710`-fprofile-generate=PATH'
8711     Enable options usually used for instrumenting application to
8712     produce profile useful for later recompilation with profile
8713     feedback based optimization.  You must use `-fprofile-generate'
8714     both when compiling and when linking your program.
8715
8716     The following options are enabled: `-fprofile-arcs',
8717     `-fprofile-values', `-fvpt'.
8718
8719     If PATH is specified, GCC looks at the PATH to find the profile
8720     feedback data files. See `-fprofile-dir'.
8721
8722`-fprofile-use'
8723`-fprofile-use=PATH'
8724     Enable profile feedback-directed optimizations, and the following
8725     optimizations which are generally profitable only with profile
8726     feedback available: `-fbranch-probabilities', `-fvpt',
8727     `-funroll-loops', `-fpeel-loops', `-ftracer', `-ftree-vectorize',
8728     and `ftree-loop-distribute-patterns'.
8729
8730     By default, GCC emits an error message if the feedback profiles do
8731     not match the source code.  This error can be turned into a
8732     warning by using `-Wcoverage-mismatch'.  Note this may result in
8733     poorly optimized code.
8734
8735     If PATH is specified, GCC looks at the PATH to find the profile
8736     feedback data files. See `-fprofile-dir'.
8737
8738`-fauto-profile'
8739`-fauto-profile=PATH'
8740     Enable sampling-based feedback-directed optimizations, and the
8741     following optimizations which are generally profitable only with
8742     profile feedback available: `-fbranch-probabilities', `-fvpt',
8743     `-funroll-loops', `-fpeel-loops', `-ftracer', `-ftree-vectorize',
8744     `-finline-functions', `-fipa-cp', `-fipa-cp-clone',
8745     `-fpredictive-commoning', `-funswitch-loops',
8746     `-fgcse-after-reload', and `-ftree-loop-distribute-patterns'.
8747
8748     PATH is the name of a file containing AutoFDO profile information.
8749     If omitted, it defaults to `fbdata.afdo' in the current directory.
8750
8751     Producing an AutoFDO profile data file requires running your
8752     program with the `perf' utility on a supported GNU/Linux target
8753     system.  For more information, see `https://perf.wiki.kernel.org/'.
8754
8755     E.g.
8756          perf record -e br_inst_retired:near_taken -b -o perf.data \
8757              -- your_program
8758
8759     Then use the `create_gcov' tool to convert the raw profile data to
8760     a format that can be used by GCC.  You must also supply the
8761     unstripped binary for your program to this tool.  See
8762     `https://github.com/google/autofdo'.
8763
8764     E.g.
8765          create_gcov --binary=your_program.unstripped --profile=perf.data \
8766              --gcov=profile.afdo
8767
8768 The following options control compiler behavior regarding
8769floating-point arithmetic.  These options trade off between speed and
8770correctness.  All must be specifically enabled.
8771
8772`-ffloat-store'
8773     Do not store floating-point variables in registers, and inhibit
8774     other options that might change whether a floating-point value is
8775     taken from a register or memory.
8776
8777     This option prevents undesirable excess precision on machines such
8778     as the 68000 where the floating registers (of the 68881) keep more
8779     precision than a `double' is supposed to have.  Similarly for the
8780     x86 architecture.  For most programs, the excess precision does
8781     only good, but a few programs rely on the precise definition of
8782     IEEE floating point.  Use `-ffloat-store' for such programs, after
8783     modifying them to store all pertinent intermediate computations
8784     into variables.
8785
8786`-fexcess-precision=STYLE'
8787     This option allows further control over excess precision on
8788     machines where floating-point registers have more precision than
8789     the IEEE `float' and `double' types and the processor does not
8790     support operations rounding to those types.  By default,
8791     `-fexcess-precision=fast' is in effect; this means that operations
8792     are carried out in the precision of the registers and that it is
8793     unpredictable when rounding to the types specified in the source
8794     code takes place.  When compiling C, if
8795     `-fexcess-precision=standard' is specified then excess precision
8796     follows the rules specified in ISO C99; in particular, both casts
8797     and assignments cause values to be rounded to their semantic types
8798     (whereas `-ffloat-store' only affects assignments).  This option
8799     is enabled by default for C if a strict conformance option such as
8800     `-std=c99' is used.
8801
8802     `-fexcess-precision=standard' is not implemented for languages
8803     other than C, and has no effect if `-funsafe-math-optimizations'
8804     or `-ffast-math' is specified.  On the x86, it also has no effect
8805     if `-mfpmath=sse' or `-mfpmath=sse+387' is specified; in the
8806     former case, IEEE semantics apply without excess precision, and in
8807     the latter, rounding is unpredictable.
8808
8809`-ffast-math'
8810     Sets the options `-fno-math-errno', `-funsafe-math-optimizations',
8811     `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans'
8812     and `-fcx-limited-range'.
8813
8814     This option causes the preprocessor macro `__FAST_MATH__' to be
8815     defined.
8816
8817     This option is not turned on by any `-O' option besides `-Ofast'
8818     since it can result in incorrect output for programs that depend
8819     on an exact implementation of IEEE or ISO rules/specifications for
8820     math functions. It may, however, yield faster code for programs
8821     that do not require the guarantees of these specifications.
8822
8823`-fno-math-errno'
8824     Do not set `errno' after calling math functions that are executed
8825     with a single instruction, e.g., `sqrt'.  A program that relies on
8826     IEEE exceptions for math error handling may want to use this flag
8827     for speed while maintaining IEEE arithmetic compatibility.
8828
8829     This option is not turned on by any `-O' option since it can
8830     result in incorrect output for programs that depend on an exact
8831     implementation of IEEE or ISO rules/specifications for math
8832     functions. It may, however, yield faster code for programs that do
8833     not require the guarantees of these specifications.
8834
8835     The default is `-fmath-errno'.
8836
8837     On Darwin systems, the math library never sets `errno'.  There is
8838     therefore no reason for the compiler to consider the possibility
8839     that it might, and `-fno-math-errno' is the default.
8840
8841`-funsafe-math-optimizations'
8842     Allow optimizations for floating-point arithmetic that (a) assume
8843     that arguments and results are valid and (b) may violate IEEE or
8844     ANSI standards.  When used at link-time, it may include libraries
8845     or startup files that change the default FPU control word or other
8846     similar optimizations.
8847
8848     This option is not turned on by any `-O' option since it can
8849     result in incorrect output for programs that depend on an exact
8850     implementation of IEEE or ISO rules/specifications for math
8851     functions. It may, however, yield faster code for programs that do
8852     not require the guarantees of these specifications.  Enables
8853     `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math'
8854     and `-freciprocal-math'.
8855
8856     The default is `-fno-unsafe-math-optimizations'.
8857
8858`-fassociative-math'
8859     Allow re-association of operands in series of floating-point
8860     operations.  This violates the ISO C and C++ language standard by
8861     possibly changing computation result.  NOTE: re-ordering may
8862     change the sign of zero as well as ignore NaNs and inhibit or
8863     create underflow or overflow (and thus cannot be used on code that
8864     relies on rounding behavior like `(x + 2**52) - 2**52'.  May also
8865     reorder floating-point comparisons and thus may not be used when
8866     ordered comparisons are required.  This option requires that both
8867     `-fno-signed-zeros' and `-fno-trapping-math' be in effect.
8868     Moreover, it doesn't make much sense with `-frounding-math'. For
8869     Fortran the option is automatically enabled when both
8870     `-fno-signed-zeros' and `-fno-trapping-math' are in effect.
8871
8872     The default is `-fno-associative-math'.
8873
8874`-freciprocal-math'
8875     Allow the reciprocal of a value to be used instead of dividing by
8876     the value if this enables optimizations.  For example `x / y' can
8877     be replaced with `x * (1/y)', which is useful if `(1/y)' is
8878     subject to common subexpression elimination.  Note that this loses
8879     precision and increases the number of flops operating on the value.
8880
8881     The default is `-fno-reciprocal-math'.
8882
8883`-ffinite-math-only'
8884     Allow optimizations for floating-point arithmetic that assume that
8885     arguments and results are not NaNs or +-Infs.
8886
8887     This option is not turned on by any `-O' option since it can
8888     result in incorrect output for programs that depend on an exact
8889     implementation of IEEE or ISO rules/specifications for math
8890     functions. It may, however, yield faster code for programs that do
8891     not require the guarantees of these specifications.
8892
8893     The default is `-fno-finite-math-only'.
8894
8895`-fno-signed-zeros'
8896     Allow optimizations for floating-point arithmetic that ignore the
8897     signedness of zero.  IEEE arithmetic specifies the behavior of
8898     distinct +0.0 and -0.0 values, which then prohibits simplification
8899     of expressions such as x+0.0 or 0.0*x (even with
8900     `-ffinite-math-only').  This option implies that the sign of a
8901     zero result isn't significant.
8902
8903     The default is `-fsigned-zeros'.
8904
8905`-fno-trapping-math'
8906     Compile code assuming that floating-point operations cannot
8907     generate user-visible traps.  These traps include division by
8908     zero, overflow, underflow, inexact result and invalid operation.
8909     This option requires that `-fno-signaling-nans' be in effect.
8910     Setting this option may allow faster code if one relies on
8911     "non-stop" IEEE arithmetic, for example.
8912
8913     This option should never be turned on by any `-O' option since it
8914     can result in incorrect output for programs that depend on an
8915     exact implementation of IEEE or ISO rules/specifications for math
8916     functions.
8917
8918     The default is `-ftrapping-math'.
8919
8920`-frounding-math'
8921     Disable transformations and optimizations that assume default
8922     floating-point rounding behavior.  This is round-to-zero for all
8923     floating point to integer conversions, and round-to-nearest for
8924     all other arithmetic truncations.  This option should be specified
8925     for programs that change the FP rounding mode dynamically, or that
8926     may be executed with a non-default rounding mode.  This option
8927     disables constant folding of floating-point expressions at compile
8928     time (which may be affected by rounding mode) and arithmetic
8929     transformations that are unsafe in the presence of sign-dependent
8930     rounding modes.
8931
8932     The default is `-fno-rounding-math'.
8933
8934     This option is experimental and does not currently guarantee to
8935     disable all GCC optimizations that are affected by rounding mode.
8936     Future versions of GCC may provide finer control of this setting
8937     using C99's `FENV_ACCESS' pragma.  This command-line option will
8938     be used to specify the default state for `FENV_ACCESS'.
8939
8940`-fsignaling-nans'
8941     Compile code assuming that IEEE signaling NaNs may generate
8942     user-visible traps during floating-point operations.  Setting this
8943     option disables optimizations that may change the number of
8944     exceptions visible with signaling NaNs.  This option implies
8945     `-ftrapping-math'.
8946
8947     This option causes the preprocessor macro `__SUPPORT_SNAN__' to be
8948     defined.
8949
8950     The default is `-fno-signaling-nans'.
8951
8952     This option is experimental and does not currently guarantee to
8953     disable all GCC optimizations that affect signaling NaN behavior.
8954
8955`-fsingle-precision-constant'
8956     Treat floating-point constants as single precision instead of
8957     implicitly converting them to double-precision constants.
8958
8959`-fcx-limited-range'
8960     When enabled, this option states that a range reduction step is not
8961     needed when performing complex division.  Also, there is no
8962     checking whether the result of a complex multiplication or
8963     division is `NaN + I*NaN', with an attempt to rescue the situation
8964     in that case.  The default is `-fno-cx-limited-range', but is
8965     enabled by `-ffast-math'.
8966
8967     This option controls the default setting of the ISO C99
8968     `CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to
8969     all languages.
8970
8971`-fcx-fortran-rules'
8972     Complex multiplication and division follow Fortran rules.  Range
8973     reduction is done as part of complex division, but there is no
8974     checking whether the result of a complex multiplication or
8975     division is `NaN + I*NaN', with an attempt to rescue the situation
8976     in that case.
8977
8978     The default is `-fno-cx-fortran-rules'.
8979
8980
8981 The following options control optimizations that may improve
8982performance, but are not enabled by any `-O' options.  This section
8983includes experimental options that may produce broken code.
8984
8985`-fbranch-probabilities'
8986     After running a program compiled with `-fprofile-arcs' (*note
8987     Options for Debugging Your Program or `gcc': Debugging Options.),
8988     you can compile it a second time using `-fbranch-probabilities',
8989     to improve optimizations based on the number of times each branch
8990     was taken.  When a program compiled with `-fprofile-arcs' exits,
8991     it saves arc execution counts to a file called `SOURCENAME.gcda'
8992     for each source file.  The information in this data file is very
8993     dependent on the structure of the generated code, so you must use
8994     the same source code and the same optimization options for both
8995     compilations.
8996
8997     With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on
8998     each `JUMP_INSN' and `CALL_INSN'.  These can be used to improve
8999     optimization.  Currently, they are only used in one place: in
9000     `reorg.c', instead of guessing which path a branch is most likely
9001     to take, the `REG_BR_PROB' values are used to exactly determine
9002     which path is taken more often.
9003
9004`-fprofile-values'
9005     If combined with `-fprofile-arcs', it adds code so that some data
9006     about values of expressions in the program is gathered.
9007
9008     With `-fbranch-probabilities', it reads back the data gathered
9009     from profiling values of expressions for usage in optimizations.
9010
9011     Enabled with `-fprofile-generate' and `-fprofile-use'.
9012
9013`-fprofile-reorder-functions'
9014     Function reordering based on profile instrumentation collects
9015     first time of execution of a function and orders these functions
9016     in ascending order.
9017
9018     Enabled with `-fprofile-use'.
9019
9020`-fvpt'
9021     If combined with `-fprofile-arcs', this option instructs the
9022     compiler to add code to gather information about values of
9023     expressions.
9024
9025     With `-fbranch-probabilities', it reads back the data gathered and
9026     actually performs the optimizations based on them.  Currently the
9027     optimizations include specialization of division operations using
9028     the knowledge about the value of the denominator.
9029
9030`-frename-registers'
9031     Attempt to avoid false dependencies in scheduled code by making use
9032     of registers left over after register allocation.  This
9033     optimization most benefits processors with lots of registers.
9034     Depending on the debug information format adopted by the target,
9035     however, it can make debugging impossible, since variables no
9036     longer stay in a "home register".
9037
9038     Enabled by default with `-funroll-loops' and `-fpeel-loops'.
9039
9040`-fschedule-fusion'
9041     Performs a target dependent pass over the instruction stream to
9042     schedule instructions of same type together because target machine
9043     can execute them more efficiently if they are adjacent to each
9044     other in the instruction flow.
9045
9046     Enabled at levels `-O2', `-O3', `-Os'.
9047
9048`-ftracer'
9049     Perform tail duplication to enlarge superblock size.  This
9050     transformation simplifies the control flow of the function
9051     allowing other optimizations to do a better job.
9052
9053     Enabled with `-fprofile-use'.
9054
9055`-funroll-loops'
9056     Unroll loops whose number of iterations can be determined at
9057     compile time or upon entry to the loop.  `-funroll-loops' implies
9058     `-frerun-cse-after-loop', `-fweb' and `-frename-registers'.  It
9059     also turns on complete loop peeling (i.e. complete removal of
9060     loops with a small constant number of iterations).  This option
9061     makes code larger, and may or may not make it run faster.
9062
9063     Enabled with `-fprofile-use'.
9064
9065`-funroll-all-loops'
9066     Unroll all loops, even if their number of iterations is uncertain
9067     when the loop is entered.  This usually makes programs run more
9068     slowly.  `-funroll-all-loops' implies the same options as
9069     `-funroll-loops'.
9070
9071`-fpeel-loops'
9072     Peels loops for which there is enough information that they do not
9073     roll much (from profile feedback).  It also turns on complete loop
9074     peeling (i.e. complete removal of loops with small constant number
9075     of iterations).
9076
9077     Enabled with `-fprofile-use'.
9078
9079`-fmove-loop-invariants'
9080     Enables the loop invariant motion pass in the RTL loop optimizer.
9081     Enabled at level `-O1'
9082
9083`-funswitch-loops'
9084     Move branches with loop invariant conditions out of the loop, with
9085     duplicates of the loop on both branches (modified according to
9086     result of the condition).
9087
9088`-ffunction-sections'
9089`-fdata-sections'
9090     Place each function or data item into its own section in the output
9091     file if the target supports arbitrary sections.  The name of the
9092     function or the name of the data item determines the section's name
9093     in the output file.
9094
9095     Use these options on systems where the linker can perform
9096     optimizations to improve locality of reference in the instruction
9097     space.  Most systems using the ELF object format and SPARC
9098     processors running Solaris 2 have linkers with such optimizations.
9099     AIX may have these optimizations in the future.
9100
9101     Only use these options when there are significant benefits from
9102     doing so.  When you specify these options, the assembler and linker
9103     create larger object and executable files and are also slower.
9104     You cannot use `gprof' on all systems if you specify this option,
9105     and you may have problems with debugging if you specify both this
9106     option and `-g'.
9107
9108`-fbranch-target-load-optimize'
9109     Perform branch target register load optimization before prologue /
9110     epilogue threading.  The use of target registers can typically be
9111     exposed only during reload, thus hoisting loads out of loops and
9112     doing inter-block scheduling needs a separate optimization pass.
9113
9114`-fbranch-target-load-optimize2'
9115     Perform branch target register load optimization after prologue /
9116     epilogue threading.
9117
9118`-fbtr-bb-exclusive'
9119     When performing branch target register load optimization, don't
9120     reuse branch target registers within any basic block.
9121
9122`-fstack-protector'
9123     Emit extra code to check for buffer overflows, such as stack
9124     smashing attacks.  This is done by adding a guard variable to
9125     functions with vulnerable objects.  This includes functions that
9126     call `alloca', and functions with buffers larger than 8 bytes.
9127     The guards are initialized when a function is entered and then
9128     checked when the function exits.  If a guard check fails, an error
9129     message is printed and the program exits.
9130
9131`-fstack-protector-all'
9132     Like `-fstack-protector' except that all functions are protected.
9133
9134`-fstack-protector-strong'
9135     Like `-fstack-protector' but includes additional functions to be
9136     protected -- those that have local array definitions, or have
9137     references to local frame addresses.
9138
9139`-fstack-protector-explicit'
9140     Like `-fstack-protector' but only protects those functions which
9141     have the `stack_protect' attribute
9142
9143`-fstdarg-opt'
9144     Optimize the prologue of variadic argument functions with respect
9145     to usage of those arguments.
9146
9147`-fsection-anchors'
9148     Try to reduce the number of symbolic address calculations by using
9149     shared "anchor" symbols to address nearby objects.  This
9150     transformation can help to reduce the number of GOT entries and
9151     GOT accesses on some targets.
9152
9153     For example, the implementation of the following function `foo':
9154
9155          static int a, b, c;
9156          int foo (void) { return a + b + c; }
9157
9158     usually calculates the addresses of all three variables, but if you
9159     compile it with `-fsection-anchors', it accesses the variables
9160     from a common anchor point instead.  The effect is similar to the
9161     following pseudocode (which isn't valid C):
9162
9163          int foo (void)
9164          {
9165            register int *xr = &x;
9166            return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
9167          }
9168
9169     Not all targets support this option.
9170
9171`--param NAME=VALUE'
9172     In some places, GCC uses various constants to control the amount of
9173     optimization that is done.  For example, GCC does not inline
9174     functions that contain more than a certain number of instructions.
9175     You can control some of these constants on the command line using
9176     the `--param' option.
9177
9178     The names of specific parameters, and the meaning of the values,
9179     are tied to the internals of the compiler, and are subject to
9180     change without notice in future releases.
9181
9182     In each case, the VALUE is an integer.  The allowable choices for
9183     NAME are:
9184
9185    `predictable-branch-outcome'
9186          When branch is predicted to be taken with probability lower
9187          than this threshold (in percent), then it is considered well
9188          predictable. The default is 10.
9189
9190    `max-crossjump-edges'
9191          The maximum number of incoming edges to consider for
9192          cross-jumping.  The algorithm used by `-fcrossjumping' is
9193          O(N^2) in the number of edges incoming to each block.
9194          Increasing values mean more aggressive optimization, making
9195          the compilation time increase with probably small improvement
9196          in executable size.
9197
9198    `min-crossjump-insns'
9199          The minimum number of instructions that must be matched at
9200          the end of two blocks before cross-jumping is performed on
9201          them.  This value is ignored in the case where all
9202          instructions in the block being cross-jumped from are
9203          matched.  The default value is 5.
9204
9205    `max-grow-copy-bb-insns'
9206          The maximum code size expansion factor when copying basic
9207          blocks instead of jumping.  The expansion is relative to a
9208          jump instruction.  The default value is 8.
9209
9210    `max-goto-duplication-insns'
9211          The maximum number of instructions to duplicate to a block
9212          that jumps to a computed goto.  To avoid O(N^2) behavior in a
9213          number of passes, GCC factors computed gotos early in the
9214          compilation process, and unfactors them as late as possible.
9215          Only computed jumps at the end of a basic blocks with no more
9216          than max-goto-duplication-insns are unfactored.  The default
9217          value is 8.
9218
9219    `max-delay-slot-insn-search'
9220          The maximum number of instructions to consider when looking
9221          for an instruction to fill a delay slot.  If more than this
9222          arbitrary number of instructions are searched, the time
9223          savings from filling the delay slot are minimal, so stop
9224          searching.  Increasing values mean more aggressive
9225          optimization, making the compilation time increase with
9226          probably small improvement in execution time.
9227
9228    `max-delay-slot-live-search'
9229          When trying to fill delay slots, the maximum number of
9230          instructions to consider when searching for a block with
9231          valid live register information.  Increasing this arbitrarily
9232          chosen value means more aggressive optimization, increasing
9233          the compilation time.  This parameter should be removed when
9234          the delay slot code is rewritten to maintain the control-flow
9235          graph.
9236
9237    `max-gcse-memory'
9238          The approximate maximum amount of memory that can be
9239          allocated in order to perform the global common subexpression
9240          elimination optimization.  If more memory than specified is
9241          required, the optimization is not done.
9242
9243    `max-gcse-insertion-ratio'
9244          If the ratio of expression insertions to deletions is larger
9245          than this value for any expression, then RTL PRE inserts or
9246          removes the expression and thus leaves partially redundant
9247          computations in the instruction stream.  The default value is
9248          20.
9249
9250    `max-pending-list-length'
9251          The maximum number of pending dependencies scheduling allows
9252          before flushing the current state and starting over.  Large
9253          functions with few branches or calls can create excessively
9254          large lists which needlessly consume memory and resources.
9255
9256    `max-modulo-backtrack-attempts'
9257          The maximum number of backtrack attempts the scheduler should
9258          make when modulo scheduling a loop.  Larger values can
9259          exponentially increase compilation time.
9260
9261    `max-inline-insns-single'
9262          Several parameters control the tree inliner used in GCC.
9263          This number sets the maximum number of instructions (counted
9264          in GCC's internal representation) in a single function that
9265          the tree inliner considers for inlining.  This only affects
9266          functions declared inline and methods implemented in a class
9267          declaration (C++).  The default value is 400.
9268
9269    `max-inline-insns-auto'
9270          When you use `-finline-functions' (included in `-O3'), a lot
9271          of functions that would otherwise not be considered for
9272          inlining by the compiler are investigated.  To those
9273          functions, a different (more restrictive) limit compared to
9274          functions declared inline can be applied.  The default value
9275          is 40.
9276
9277    `inline-min-speedup'
9278          When estimated performance improvement of caller + callee
9279          runtime exceeds this threshold (in precent), the function can
9280          be inlined regardless the limit on `--param
9281          max-inline-insns-single' and `--param max-inline-insns-auto'.
9282
9283    `large-function-insns'
9284          The limit specifying really large functions.  For functions
9285          larger than this limit after inlining, inlining is
9286          constrained by `--param large-function-growth'.  This
9287          parameter is useful primarily to avoid extreme compilation
9288          time caused by non-linear algorithms used by the back end.
9289          The default value is 2700.
9290
9291    `large-function-growth'
9292          Specifies maximal growth of large function caused by inlining
9293          in percents.  The default value is 100 which limits large
9294          function growth to 2.0 times the original size.
9295
9296    `large-unit-insns'
9297          The limit specifying large translation unit.  Growth caused
9298          by inlining of units larger than this limit is limited by
9299          `--param inline-unit-growth'.  For small units this might be
9300          too tight.  For example, consider a unit consisting of
9301          function A that is inline and B that just calls A three
9302          times.  If B is small relative to A, the growth of unit is
9303          300\% and yet such inlining is very sane.  For very large
9304          units consisting of small inlineable functions, however, the
9305          overall unit growth limit is needed to avoid exponential
9306          explosion of code size.  Thus for smaller units, the size is
9307          increased to `--param large-unit-insns' before applying
9308          `--param inline-unit-growth'.  The default is 10000.
9309
9310    `inline-unit-growth'
9311          Specifies maximal overall growth of the compilation unit
9312          caused by inlining.  The default value is 20 which limits
9313          unit growth to 1.2 times the original size. Cold functions
9314          (either marked cold via an attribute or by profile feedback)
9315          are not accounted into the unit size.
9316
9317    `ipcp-unit-growth'
9318          Specifies maximal overall growth of the compilation unit
9319          caused by interprocedural constant propagation.  The default
9320          value is 10 which limits unit growth to 1.1 times the
9321          original size.
9322
9323    `large-stack-frame'
9324          The limit specifying large stack frames.  While inlining the
9325          algorithm is trying to not grow past this limit too much.
9326          The default value is 256 bytes.
9327
9328    `large-stack-frame-growth'
9329          Specifies maximal growth of large stack frames caused by
9330          inlining in percents.  The default value is 1000 which limits
9331          large stack frame growth to 11 times the original size.
9332
9333    `max-inline-insns-recursive'
9334    `max-inline-insns-recursive-auto'
9335          Specifies the maximum number of instructions an out-of-line
9336          copy of a self-recursive inline function can grow into by
9337          performing recursive inlining.
9338
9339          `--param max-inline-insns-recursive' applies to functions
9340          declared inline.  For functions not declared inline,
9341          recursive inlining happens only when `-finline-functions'
9342          (included in `-O3') is enabled; `--param
9343          max-inline-insns-recursive-auto' applies instead.  The
9344          default value is 450.
9345
9346    `max-inline-recursive-depth'
9347    `max-inline-recursive-depth-auto'
9348          Specifies the maximum recursion depth used for recursive
9349          inlining.
9350
9351          `--param max-inline-recursive-depth' applies to functions
9352          declared inline.  For functions not declared inline,
9353          recursive inlining happens only when `-finline-functions'
9354          (included in `-O3') is enabled; `--param
9355          max-inline-recursive-depth-auto' applies instead.  The
9356          default value is 8.
9357
9358    `min-inline-recursive-probability'
9359          Recursive inlining is profitable only for function having
9360          deep recursion in average and can hurt for function having
9361          little recursion depth by increasing the prologue size or
9362          complexity of function body to other optimizers.
9363
9364          When profile feedback is available (see `-fprofile-generate')
9365          the actual recursion depth can be guessed from probability
9366          that function recurses via a given call expression.  This
9367          parameter limits inlining only to call expressions whose
9368          probability exceeds the given threshold (in percents).  The
9369          default value is 10.
9370
9371    `early-inlining-insns'
9372          Specify growth that the early inliner can make.  In effect it
9373          increases the amount of inlining for code having a large
9374          abstraction penalty.  The default value is 14.
9375
9376    `max-early-inliner-iterations'
9377          Limit of iterations of the early inliner.  This basically
9378          bounds the number of nested indirect calls the early inliner
9379          can resolve.  Deeper chains are still handled by late
9380          inlining.
9381
9382    `comdat-sharing-probability'
9383          Probability (in percent) that C++ inline function with comdat
9384          visibility are shared across multiple compilation units.  The
9385          default value is 20.
9386
9387    `profile-func-internal-id'
9388          A parameter to control whether to use function internal id in
9389          profile database lookup. If the value is 0, the compiler uses
9390          an id that is based on function assembler name and filename,
9391          which makes old profile data more tolerant to source changes
9392          such as function reordering etc.  The default value is 0.
9393
9394    `min-vect-loop-bound'
9395          The minimum number of iterations under which loops are not
9396          vectorized when `-ftree-vectorize' is used.  The number of
9397          iterations after vectorization needs to be greater than the
9398          value specified by this option to allow vectorization.  The
9399          default value is 0.
9400
9401    `gcse-cost-distance-ratio'
9402          Scaling factor in calculation of maximum distance an
9403          expression can be moved by GCSE optimizations.  This is
9404          currently supported only in the code hoisting pass.  The
9405          bigger the ratio, the more aggressive code hoisting is with
9406          simple expressions, i.e., the expressions that have cost less
9407          than `gcse-unrestricted-cost'.  Specifying 0 disables
9408          hoisting of simple expressions.  The default value is 10.
9409
9410    `gcse-unrestricted-cost'
9411          Cost, roughly measured as the cost of a single typical machine
9412          instruction, at which GCSE optimizations do not constrain the
9413          distance an expression can travel.  This is currently
9414          supported only in the code hoisting pass.  The lesser the
9415          cost, the more aggressive code hoisting is.  Specifying 0
9416          allows all expressions to travel unrestricted distances.  The
9417          default value is 3.
9418
9419    `max-hoist-depth'
9420          The depth of search in the dominator tree for expressions to
9421          hoist.  This is used to avoid quadratic behavior in hoisting
9422          algorithm.  The value of 0 does not limit on the search, but
9423          may slow down compilation of huge functions.  The default
9424          value is 30.
9425
9426    `max-tail-merge-comparisons'
9427          The maximum amount of similar bbs to compare a bb with.  This
9428          is used to avoid quadratic behavior in tree tail merging.
9429          The default value is 10.
9430
9431    `max-tail-merge-iterations'
9432          The maximum amount of iterations of the pass over the
9433          function.  This is used to limit compilation time in tree
9434          tail merging.  The default value is 2.
9435
9436    `max-unrolled-insns'
9437          The maximum number of instructions that a loop may have to be
9438          unrolled.  If a loop is unrolled, this parameter also
9439          determines how many times the loop code is unrolled.
9440
9441    `max-average-unrolled-insns'
9442          The maximum number of instructions biased by probabilities of
9443          their execution that a loop may have to be unrolled.  If a
9444          loop is unrolled, this parameter also determines how many
9445          times the loop code is unrolled.
9446
9447    `max-unroll-times'
9448          The maximum number of unrollings of a single loop.
9449
9450    `max-peeled-insns'
9451          The maximum number of instructions that a loop may have to be
9452          peeled.  If a loop is peeled, this parameter also determines
9453          how many times the loop code is peeled.
9454
9455    `max-peel-times'
9456          The maximum number of peelings of a single loop.
9457
9458    `max-peel-branches'
9459          The maximum number of branches on the hot path through the
9460          peeled sequence.
9461
9462    `max-completely-peeled-insns'
9463          The maximum number of insns of a completely peeled loop.
9464
9465    `max-completely-peel-times'
9466          The maximum number of iterations of a loop to be suitable for
9467          complete peeling.
9468
9469    `max-completely-peel-loop-nest-depth'
9470          The maximum depth of a loop nest suitable for complete
9471          peeling.
9472
9473    `max-unswitch-insns'
9474          The maximum number of insns of an unswitched loop.
9475
9476    `max-unswitch-level'
9477          The maximum number of branches unswitched in a single loop.
9478
9479    `lim-expensive'
9480          The minimum cost of an expensive expression in the loop
9481          invariant motion.
9482
9483    `iv-consider-all-candidates-bound'
9484          Bound on number of candidates for induction variables, below
9485          which all candidates are considered for each use in induction
9486          variable optimizations.  If there are more candidates than
9487          this, only the most relevant ones are considered to avoid
9488          quadratic time complexity.
9489
9490    `iv-max-considered-uses'
9491          The induction variable optimizations give up on loops that
9492          contain more induction variable uses.
9493
9494    `iv-always-prune-cand-set-bound'
9495          If the number of candidates in the set is smaller than this
9496          value, always try to remove unnecessary ivs from the set when
9497          adding a new one.
9498
9499    `scev-max-expr-size'
9500          Bound on size of expressions used in the scalar evolutions
9501          analyzer.  Large expressions slow the analyzer.
9502
9503    `scev-max-expr-complexity'
9504          Bound on the complexity of the expressions in the scalar
9505          evolutions analyzer.  Complex expressions slow the analyzer.
9506
9507    `omega-max-vars'
9508          The maximum number of variables in an Omega constraint system.
9509          The default value is 128.
9510
9511    `omega-max-geqs'
9512          The maximum number of inequalities in an Omega constraint
9513          system.  The default value is 256.
9514
9515    `omega-max-eqs'
9516          The maximum number of equalities in an Omega constraint
9517          system.  The default value is 128.
9518
9519    `omega-max-wild-cards'
9520          The maximum number of wildcard variables that the Omega
9521          solver is able to insert.  The default value is 18.
9522
9523    `omega-hash-table-size'
9524          The size of the hash table in the Omega solver.  The default
9525          value is 550.
9526
9527    `omega-max-keys'
9528          The maximal number of keys used by the Omega solver.  The
9529          default value is 500.
9530
9531    `omega-eliminate-redundant-constraints'
9532          When set to 1, use expensive methods to eliminate all
9533          redundant constraints.  The default value is 0.
9534
9535    `vect-max-version-for-alignment-checks'
9536          The maximum number of run-time checks that can be performed
9537          when doing loop versioning for alignment in the vectorizer.
9538
9539    `vect-max-version-for-alias-checks'
9540          The maximum number of run-time checks that can be performed
9541          when doing loop versioning for alias in the vectorizer.
9542
9543    `vect-max-peeling-for-alignment'
9544          The maximum number of loop peels to enhance access alignment
9545          for vectorizer. Value -1 means 'no limit'.
9546
9547    `max-iterations-to-track'
9548          The maximum number of iterations of a loop the brute-force
9549          algorithm for analysis of the number of iterations of the
9550          loop tries to evaluate.
9551
9552    `hot-bb-count-ws-permille'
9553          A basic block profile count is considered hot if it
9554          contributes to the given permillage (i.e. 0...1000) of the
9555          entire profiled execution.
9556
9557    `hot-bb-frequency-fraction'
9558          Select fraction of the entry block frequency of executions of
9559          basic block in function given basic block needs to have to be
9560          considered hot.
9561
9562    `max-predicted-iterations'
9563          The maximum number of loop iterations we predict statically.
9564          This is useful in cases where a function contains a single
9565          loop with known bound and another loop with unknown bound.
9566          The known number of iterations is predicted correctly, while
9567          the unknown number of iterations average to roughly 10.  This
9568          means that the loop without bounds appears artificially cold
9569          relative to the other one.
9570
9571    `builtin-expect-probability'
9572          Control the probability of the expression having the
9573          specified value. This parameter takes a percentage (i.e. 0
9574          ... 100) as input.  The default probability of 90 is obtained
9575          empirically.
9576
9577    `align-threshold'
9578          Select fraction of the maximal frequency of executions of a
9579          basic block in a function to align the basic block.
9580
9581    `align-loop-iterations'
9582          A loop expected to iterate at least the selected number of
9583          iterations is aligned.
9584
9585    `tracer-dynamic-coverage'
9586    `tracer-dynamic-coverage-feedback'
9587          This value is used to limit superblock formation once the
9588          given percentage of executed instructions is covered.  This
9589          limits unnecessary code size expansion.
9590
9591          The `tracer-dynamic-coverage-feedback' parameter is used only
9592          when profile feedback is available.  The real profiles (as
9593          opposed to statically estimated ones) are much less balanced
9594          allowing the threshold to be larger value.
9595
9596    `tracer-max-code-growth'
9597          Stop tail duplication once code growth has reached given
9598          percentage.  This is a rather artificial limit, as most of
9599          the duplicates are eliminated later in cross jumping, so it
9600          may be set to much higher values than is the desired code
9601          growth.
9602
9603    `tracer-min-branch-ratio'
9604          Stop reverse growth when the reverse probability of best edge
9605          is less than this threshold (in percent).
9606
9607    `tracer-min-branch-ratio'
9608    `tracer-min-branch-ratio-feedback'
9609          Stop forward growth if the best edge has probability lower
9610          than this threshold.
9611
9612          Similarly to `tracer-dynamic-coverage' two values are
9613          present, one for compilation for profile feedback and one for
9614          compilation without.  The value for compilation with profile
9615          feedback needs to be more conservative (higher) in order to
9616          make tracer effective.
9617
9618    `max-cse-path-length'
9619          The maximum number of basic blocks on path that CSE considers.
9620          The default is 10.
9621
9622    `max-cse-insns'
9623          The maximum number of instructions CSE processes before
9624          flushing.  The default is 1000.
9625
9626    `ggc-min-expand'
9627          GCC uses a garbage collector to manage its own memory
9628          allocation.  This parameter specifies the minimum percentage
9629          by which the garbage collector's heap should be allowed to
9630          expand between collections.  Tuning this may improve
9631          compilation speed; it has no effect on code generation.
9632
9633          The default is 30% + 70% * (RAM/1GB) with an upper bound of
9634          100% when RAM >= 1GB.  If `getrlimit' is available, the
9635          notion of "RAM" is the smallest of actual RAM and
9636          `RLIMIT_DATA' or `RLIMIT_AS'.  If GCC is not able to
9637          calculate RAM on a particular platform, the lower bound of
9638          30% is used.  Setting this parameter and `ggc-min-heapsize'
9639          to zero causes a full collection to occur at every
9640          opportunity.  This is extremely slow, but can be useful for
9641          debugging.
9642
9643    `ggc-min-heapsize'
9644          Minimum size of the garbage collector's heap before it begins
9645          bothering to collect garbage.  The first collection occurs
9646          after the heap expands by `ggc-min-expand'% beyond
9647          `ggc-min-heapsize'.  Again, tuning this may improve
9648          compilation speed, and has no effect on code generation.
9649
9650          The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
9651          that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
9652          exceeded, but with a lower bound of 4096 (four megabytes) and
9653          an upper bound of 131072 (128 megabytes).  If GCC is not able
9654          to calculate RAM on a particular platform, the lower bound is
9655          used.  Setting this parameter very large effectively disables
9656          garbage collection.  Setting this parameter and
9657          `ggc-min-expand' to zero causes a full collection to occur at
9658          every opportunity.
9659
9660    `max-reload-search-insns'
9661          The maximum number of instruction reload should look backward
9662          for equivalent register.  Increasing values mean more
9663          aggressive optimization, making the compilation time increase
9664          with probably slightly better performance.  The default value
9665          is 100.
9666
9667    `max-cselib-memory-locations'
9668          The maximum number of memory locations cselib should take
9669          into account.  Increasing values mean more aggressive
9670          optimization, making the compilation time increase with
9671          probably slightly better performance.  The default value is
9672          500.
9673
9674    `reorder-blocks-duplicate'
9675    `reorder-blocks-duplicate-feedback'
9676          Used by the basic block reordering pass to decide whether to
9677          use unconditional branch or duplicate the code on its
9678          destination.  Code is duplicated when its estimated size is
9679          smaller than this value multiplied by the estimated size of
9680          unconditional jump in the hot spots of the program.
9681
9682          The `reorder-block-duplicate-feedback' parameter is used only
9683          when profile feedback is available.  It may be set to higher
9684          values than `reorder-block-duplicate' since information about
9685          the hot spots is more accurate.
9686
9687    `max-sched-ready-insns'
9688          The maximum number of instructions ready to be issued the
9689          scheduler should consider at any given time during the first
9690          scheduling pass.  Increasing values mean more thorough
9691          searches, making the compilation time increase with probably
9692          little benefit.  The default value is 100.
9693
9694    `max-sched-region-blocks'
9695          The maximum number of blocks in a region to be considered for
9696          interblock scheduling.  The default value is 10.
9697
9698    `max-pipeline-region-blocks'
9699          The maximum number of blocks in a region to be considered for
9700          pipelining in the selective scheduler.  The default value is
9701          15.
9702
9703    `max-sched-region-insns'
9704          The maximum number of insns in a region to be considered for
9705          interblock scheduling.  The default value is 100.
9706
9707    `max-pipeline-region-insns'
9708          The maximum number of insns in a region to be considered for
9709          pipelining in the selective scheduler.  The default value is
9710          200.
9711
9712    `min-spec-prob'
9713          The minimum probability (in percents) of reaching a source
9714          block for interblock speculative scheduling.  The default
9715          value is 40.
9716
9717    `max-sched-extend-regions-iters'
9718          The maximum number of iterations through CFG to extend
9719          regions.  A value of 0 (the default) disables region
9720          extensions.
9721
9722    `max-sched-insn-conflict-delay'
9723          The maximum conflict delay for an insn to be considered for
9724          speculative motion.  The default value is 3.
9725
9726    `sched-spec-prob-cutoff'
9727          The minimal probability of speculation success (in percents),
9728          so that speculative insns are scheduled.  The default value
9729          is 40.
9730
9731    `sched-spec-state-edge-prob-cutoff'
9732          The minimum probability an edge must have for the scheduler
9733          to save its state across it.  The default value is 10.
9734
9735    `sched-mem-true-dep-cost'
9736          Minimal distance (in CPU cycles) between store and load
9737          targeting same memory locations.  The default value is 1.
9738
9739    `selsched-max-lookahead'
9740          The maximum size of the lookahead window of selective
9741          scheduling.  It is a depth of search for available
9742          instructions.  The default value is 50.
9743
9744    `selsched-max-sched-times'
9745          The maximum number of times that an instruction is scheduled
9746          during selective scheduling.  This is the limit on the number
9747          of iterations through which the instruction may be pipelined.
9748          The default value is 2.
9749
9750    `selsched-max-insns-to-rename'
9751          The maximum number of best instructions in the ready list
9752          that are considered for renaming in the selective scheduler.
9753          The default value is 2.
9754
9755    `sms-min-sc'
9756          The minimum value of stage count that swing modulo scheduler
9757          generates.  The default value is 2.
9758
9759    `max-last-value-rtl'
9760          The maximum size measured as number of RTLs that can be
9761          recorded in an expression in combiner for a pseudo register
9762          as last known value of that register.  The default is 10000.
9763
9764    `max-combine-insns'
9765          The maximum number of instructions the RTL combiner tries to
9766          combine.  The default value is 2 at `-Og' and 4 otherwise.
9767
9768    `integer-share-limit'
9769          Small integer constants can use a shared data structure,
9770          reducing the compiler's memory usage and increasing its
9771          speed.  This sets the maximum value of a shared integer
9772          constant.  The default value is 256.
9773
9774    `ssp-buffer-size'
9775          The minimum size of buffers (i.e. arrays) that receive stack
9776          smashing protection when `-fstack-protection' is used.
9777
9778    `min-size-for-stack-sharing'
9779          The minimum size of variables taking part in stack slot
9780          sharing when not optimizing. The default value is 32.
9781
9782    `max-jump-thread-duplication-stmts'
9783          Maximum number of statements allowed in a block that needs to
9784          be duplicated when threading jumps.
9785
9786    `max-fields-for-field-sensitive'
9787          Maximum number of fields in a structure treated in a field
9788          sensitive manner during pointer analysis.  The default is zero
9789          for `-O0' and `-O1', and 100 for `-Os', `-O2', and `-O3'.
9790
9791    `prefetch-latency'
9792          Estimate on average number of instructions that are executed
9793          before prefetch finishes.  The distance prefetched ahead is
9794          proportional to this constant.  Increasing this number may
9795          also lead to less streams being prefetched (see
9796          `simultaneous-prefetches').
9797
9798    `simultaneous-prefetches'
9799          Maximum number of prefetches that can run at the same time.
9800
9801    `l1-cache-line-size'
9802          The size of cache line in L1 cache, in bytes.
9803
9804    `l1-cache-size'
9805          The size of L1 cache, in kilobytes.
9806
9807    `l2-cache-size'
9808          The size of L2 cache, in kilobytes.
9809
9810    `min-insn-to-prefetch-ratio'
9811          The minimum ratio between the number of instructions and the
9812          number of prefetches to enable prefetching in a loop.
9813
9814    `prefetch-min-insn-to-mem-ratio'
9815          The minimum ratio between the number of instructions and the
9816          number of memory references to enable prefetching in a loop.
9817
9818    `use-canonical-types'
9819          Whether the compiler should use the "canonical" type system.
9820          By default, this should always be 1, which uses a more
9821          efficient internal mechanism for comparing types in C++ and
9822          Objective-C++.  However, if bugs in the canonical type system
9823          are causing compilation failures, set this value to 0 to
9824          disable canonical types.
9825
9826    `switch-conversion-max-branch-ratio'
9827          Switch initialization conversion refuses to create arrays
9828          that are bigger than `switch-conversion-max-branch-ratio'
9829          times the number of branches in the switch.
9830
9831    `max-partial-antic-length'
9832          Maximum length of the partial antic set computed during the
9833          tree partial redundancy elimination optimization
9834          (`-ftree-pre') when optimizing at `-O3' and above.  For some
9835          sorts of source code the enhanced partial redundancy
9836          elimination optimization can run away, consuming all of the
9837          memory available on the host machine.  This parameter sets a
9838          limit on the length of the sets that are computed, which
9839          prevents the runaway behavior.  Setting a value of 0 for this
9840          parameter allows an unlimited set length.
9841
9842    `sccvn-max-scc-size'
9843          Maximum size of a strongly connected component (SCC) during
9844          SCCVN processing.  If this limit is hit, SCCVN processing for
9845          the whole function is not done and optimizations depending on
9846          it are disabled.  The default maximum SCC size is 10000.
9847
9848    `sccvn-max-alias-queries-per-access'
9849          Maximum number of alias-oracle queries we perform when
9850          looking for redundancies for loads and stores.  If this limit
9851          is hit the search is aborted and the load or store is not
9852          considered redundant.  The number of queries is
9853          algorithmically limited to the number of stores on all paths
9854          from the load to the function entry.  The default maxmimum
9855          number of queries is 1000.
9856
9857    `ira-max-loops-num'
9858          IRA uses regional register allocation by default.  If a
9859          function contains more loops than the number given by this
9860          parameter, only at most the given number of the most
9861          frequently-executed loops form regions for regional register
9862          allocation.  The default value of the parameter is 100.
9863
9864    `ira-max-conflict-table-size'
9865          Although IRA uses a sophisticated algorithm to compress the
9866          conflict table, the table can still require excessive amounts
9867          of memory for huge functions.  If the conflict table for a
9868          function could be more than the size in MB given by this
9869          parameter, the register allocator instead uses a faster,
9870          simpler, and lower-quality algorithm that does not require
9871          building a pseudo-register conflict table.  The default value
9872          of the parameter is 2000.
9873
9874    `ira-loop-reserved-regs'
9875          IRA can be used to evaluate more accurate register pressure
9876          in loops for decisions to move loop invariants (see `-O3').
9877          The number of available registers reserved for some other
9878          purposes is given by this parameter.  The default value of
9879          the parameter is 2, which is the minimal number of registers
9880          needed by typical instructions.  This value is the best found
9881          from numerous experiments.
9882
9883    `lra-inheritance-ebb-probability-cutoff'
9884          LRA tries to reuse values reloaded in registers in subsequent
9885          insns.  This optimization is called inheritance.  EBB is used
9886          as a region to do this optimization.  The parameter defines a
9887          minimal fall-through edge probability in percentage used to
9888          add BB to inheritance EBB in LRA.  The default value of the
9889          parameter is 40.  The value was chosen from numerous runs of
9890          SPEC2000 on x86-64.
9891
9892    `loop-invariant-max-bbs-in-loop'
9893          Loop invariant motion can be very expensive, both in
9894          compilation time and in amount of needed compile-time memory,
9895          with very large loops.  Loops with more basic blocks than
9896          this parameter won't have loop invariant motion optimization
9897          performed on them.  The default value of the parameter is
9898          1000 for `-O1' and 10000 for `-O2' and above.
9899
9900    `loop-max-datarefs-for-datadeps'
9901          Building data dapendencies is expensive for very large loops.
9902          This parameter limits the number of data references in loops
9903          that are considered for data dependence analysis.  These
9904          large loops are no handled by the optimizations using loop
9905          data dependencies.  The default value is 1000.
9906
9907    `max-vartrack-size'
9908          Sets a maximum number of hash table slots to use during
9909          variable tracking dataflow analysis of any function.  If this
9910          limit is exceeded with variable tracking at assignments
9911          enabled, analysis for that function is retried without it,
9912          after removing all debug insns from the function.  If the
9913          limit is exceeded even without debug insns, var tracking
9914          analysis is completely disabled for the function.  Setting
9915          the parameter to zero makes it unlimited.
9916
9917    `max-vartrack-expr-depth'
9918          Sets a maximum number of recursion levels when attempting to
9919          map variable names or debug temporaries to value expressions.
9920          This trades compilation time for more complete debug
9921          information.  If this is set too low, value expressions that
9922          are available and could be represented in debug information
9923          may end up not being used; setting this higher may enable the
9924          compiler to find more complex debug expressions, but compile
9925          time and memory use may grow.  The default is 12.
9926
9927    `min-nondebug-insn-uid'
9928          Use uids starting at this parameter for nondebug insns.  The
9929          range below the parameter is reserved exclusively for debug
9930          insns created by `-fvar-tracking-assignments', but debug
9931          insns may get (non-overlapping) uids above it if the reserved
9932          range is exhausted.
9933
9934    `ipa-sra-ptr-growth-factor'
9935          IPA-SRA replaces a pointer to an aggregate with one or more
9936          new parameters only when their cumulative size is less or
9937          equal to `ipa-sra-ptr-growth-factor' times the size of the
9938          original pointer parameter.
9939
9940    `sra-max-scalarization-size-Ospeed'
9941
9942    `sra-max-scalarization-size-Osize'
9943          The two Scalar Reduction of Aggregates passes (SRA and
9944          IPA-SRA) aim to replace scalar parts of aggregates with uses
9945          of independent scalar variables.  These parameters control
9946          the maximum size, in storage units, of aggregate which is
9947          considered for replacement when compiling for speed
9948          (`sra-max-scalarization-size-Ospeed') or size
9949          (`sra-max-scalarization-size-Osize') respectively.
9950
9951    `tm-max-aggregate-size'
9952          When making copies of thread-local variables in a
9953          transaction, this parameter specifies the size in bytes after
9954          which variables are saved with the logging functions as
9955          opposed to save/restore code sequence pairs.  This option
9956          only applies when using `-fgnu-tm'.
9957
9958    `graphite-max-nb-scop-params'
9959          To avoid exponential effects in the Graphite loop transforms,
9960          the number of parameters in a Static Control Part (SCoP) is
9961          bounded.  The default value is 10 parameters.  A variable
9962          whose value is unknown at compilation time and defined
9963          outside a SCoP is a parameter of the SCoP.
9964
9965    `graphite-max-bbs-per-function'
9966          To avoid exponential effects in the detection of SCoPs, the
9967          size of the functions analyzed by Graphite is bounded.  The
9968          default value is 100 basic blocks.
9969
9970    `loop-block-tile-size'
9971          Loop blocking or strip mining transforms, enabled with
9972          `-floop-block' or `-floop-strip-mine', strip mine each loop
9973          in the loop nest by a given number of iterations.  The strip
9974          length can be changed using the `loop-block-tile-size'
9975          parameter.  The default value is 51 iterations.
9976
9977    `loop-unroll-jam-size'
9978          Specify the unroll factor for the `-floop-unroll-and-jam'
9979          option.  The default value is 4.
9980
9981    `loop-unroll-jam-depth'
9982          Specify the dimension to be unrolled (counting from the most
9983          inner loop) for the  `-floop-unroll-and-jam'.  The default
9984          value is 2.
9985
9986    `ipa-cp-value-list-size'
9987          IPA-CP attempts to track all possible values and types passed
9988          to a function's parameter in order to propagate them and
9989          perform devirtualization.  `ipa-cp-value-list-size' is the
9990          maximum number of values and types it stores per one formal
9991          parameter of a function.
9992
9993    `ipa-cp-eval-threshold'
9994          IPA-CP calculates its own score of cloning profitability
9995          heuristics and performs those cloning opportunities with
9996          scores that exceed `ipa-cp-eval-threshold'.
9997
9998    `ipa-cp-recursion-penalty'
9999          Percentage penalty the recursive functions will receive when
10000          they are evaluated for cloning.
10001
10002    `ipa-cp-single-call-penalty'
10003          Percentage penalty functions containg a single call to another
10004          function will receive when they are evaluated for cloning.
10005
10006    `ipa-max-agg-items'
10007          IPA-CP is also capable to propagate a number of scalar values
10008          passed in an aggregate. `ipa-max-agg-items' controls the
10009          maximum number of such values per one parameter.
10010
10011    `ipa-cp-loop-hint-bonus'
10012          When IPA-CP determines that a cloning candidate would make
10013          the number of iterations of a loop known, it adds a bonus of
10014          `ipa-cp-loop-hint-bonus' to the profitability score of the
10015          candidate.
10016
10017    `ipa-cp-array-index-hint-bonus'
10018          When IPA-CP determines that a cloning candidate would make
10019          the index of an array access known, it adds a bonus of
10020          `ipa-cp-array-index-hint-bonus' to the profitability score of
10021          the candidate.
10022
10023    `ipa-max-aa-steps'
10024          During its analysis of function bodies, IPA-CP employs alias
10025          analysis in order to track values pointed to by function
10026          parameters.  In order not spend too much time analyzing huge
10027          functions, it gives up and consider all memory clobbered
10028          after examining `ipa-max-aa-steps' statements modifying
10029          memory.
10030
10031    `lto-partitions'
10032          Specify desired number of partitions produced during WHOPR
10033          compilation.  The number of partitions should exceed the
10034          number of CPUs used for compilation.  The default value is 32.
10035
10036    `lto-minpartition'
10037          Size of minimal partition for WHOPR (in estimated
10038          instructions).  This prevents expenses of splitting very
10039          small programs into too many partitions.
10040
10041    `cxx-max-namespaces-for-diagnostic-help'
10042          The maximum number of namespaces to consult for suggestions
10043          when C++ name lookup fails for an identifier.  The default is
10044          1000.
10045
10046    `sink-frequency-threshold'
10047          The maximum relative execution frequency (in percents) of the
10048          target block relative to a statement's original block to
10049          allow statement sinking of a statement.  Larger numbers
10050          result in more aggressive statement sinking.  The default
10051          value is 75.  A small positive adjustment is applied for
10052          statements with memory operands as those are even more
10053          profitable so sink.
10054
10055    `max-stores-to-sink'
10056          The maximum number of conditional stores paires that can be
10057          sunk.  Set to 0 if either vectorization (`-ftree-vectorize')
10058          or if-conversion (`-ftree-loop-if-convert') is disabled.  The
10059          default is 2.
10060
10061    `allow-store-data-races'
10062          Allow optimizers to introduce new data races on stores.  Set
10063          to 1 to allow, otherwise to 0.  This option is enabled by
10064          default at optimization level `-Ofast'.
10065
10066    `case-values-threshold'
10067          The smallest number of different values for which it is best
10068          to use a jump-table instead of a tree of conditional
10069          branches.  If the value is 0, use the default for the
10070          machine.  The default is 0.
10071
10072    `tree-reassoc-width'
10073          Set the maximum number of instructions executed in parallel in
10074          reassociated tree. This parameter overrides target dependent
10075          heuristics used by default if has non zero value.
10076
10077    `sched-pressure-algorithm'
10078          Choose between the two available implementations of
10079          `-fsched-pressure'.  Algorithm 1 is the original
10080          implementation and is the more likely to prevent instructions
10081          from being reordered.  Algorithm 2 was designed to be a
10082          compromise between the relatively conservative approach taken
10083          by algorithm 1 and the rather aggressive approach taken by
10084          the default scheduler.  It relies more heavily on having a
10085          regular register file and accurate register pressure classes.
10086          See `haifa-sched.c' in the GCC sources for more details.
10087
10088          The default choice depends on the target.
10089
10090    `max-slsr-cand-scan'
10091          Set the maximum number of existing candidates that are
10092          considered when seeking a basis for a new straight-line
10093          strength reduction candidate.
10094
10095    `asan-globals'
10096          Enable buffer overflow detection for global objects.  This
10097          kind of protection is enabled by default if you are using
10098          `-fsanitize=address' option.  To disable global objects
10099          protection use `--param asan-globals=0'.
10100
10101    `asan-stack'
10102          Enable buffer overflow detection for stack objects.  This
10103          kind of protection is enabled by default when
10104          using`-fsanitize=address'.  To disable stack protection use
10105          `--param asan-stack=0' option.
10106
10107    `asan-instrument-reads'
10108          Enable buffer overflow detection for memory reads.  This kind
10109          of protection is enabled by default when using
10110          `-fsanitize=address'.  To disable memory reads protection use
10111          `--param asan-instrument-reads=0'.
10112
10113    `asan-instrument-writes'
10114          Enable buffer overflow detection for memory writes.  This
10115          kind of protection is enabled by default when using
10116          `-fsanitize=address'.  To disable memory writes protection use
10117          `--param asan-instrument-writes=0' option.
10118
10119    `asan-memintrin'
10120          Enable detection for built-in functions.  This kind of
10121          protection is enabled by default when using
10122          `-fsanitize=address'.  To disable built-in functions
10123          protection use `--param asan-memintrin=0'.
10124
10125    `asan-use-after-return'
10126          Enable detection of use-after-return.  This kind of protection
10127          is enabled by default when using `-fsanitize=address' option.
10128          To disable use-after-return detection use `--param
10129          asan-use-after-return=0'.
10130
10131    `asan-instrumentation-with-call-threshold'
10132          If number of memory accesses in function being instrumented
10133          is greater or equal to this number, use callbacks instead of
10134          inline checks.  E.g. to disable inline code use `--param
10135          asan-instrumentation-with-call-threshold=0'.
10136
10137    `chkp-max-ctor-size'
10138          Static constructors generated by Pointer Bounds Checker may
10139          become very large and significantly increase compile time at
10140          optimization level `-O1' and higher.  This parameter is a
10141          maximum nubmer of statements in a single generated
10142          constructor.  Default value is 5000.
10143
10144    `max-fsm-thread-path-insns'
10145          Maximum number of instructions to copy when duplicating
10146          blocks on a finite state automaton jump thread path.  The
10147          default is 100.
10148
10149    `max-fsm-thread-length'
10150          Maximum number of basic blocks on a finite state automaton
10151          jump thread path.  The default is 10.
10152
10153    `max-fsm-thread-paths'
10154          Maximum number of new jump thread paths to create for a
10155          finite state automaton.  The default is 50.
10156
10157
10158
10159File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
10160
101613.11 Options Controlling the Preprocessor
10162=========================================
10163
10164These options control the C preprocessor, which is run on each C source
10165file before actual compilation.
10166
10167 If you use the `-E' option, nothing is done except preprocessing.
10168Some of these options make sense only together with `-E' because they
10169cause the preprocessor output to be unsuitable for actual compilation.
10170
10171`-Wp,OPTION'
10172     You can use `-Wp,OPTION' to bypass the compiler driver and pass
10173     OPTION directly through to the preprocessor.  If OPTION contains
10174     commas, it is split into multiple options at the commas.  However,
10175     many options are modified, translated or interpreted by the
10176     compiler driver before being passed to the preprocessor, and `-Wp'
10177     forcibly bypasses this phase.  The preprocessor's direct interface
10178     is undocumented and subject to change, so whenever possible you
10179     should avoid using `-Wp' and let the driver handle the options
10180     instead.
10181
10182`-Xpreprocessor OPTION'
10183     Pass OPTION as an option to the preprocessor.  You can use this to
10184     supply system-specific preprocessor options that GCC does not
10185     recognize.
10186
10187     If you want to pass an option that takes an argument, you must use
10188     `-Xpreprocessor' twice, once for the option and once for the
10189     argument.
10190
10191`-no-integrated-cpp'
10192     Perform preprocessing as a separate pass before compilation.  By
10193     default, GCC performs preprocessing as an integrated part of input
10194     tokenization and parsing.  If this option is provided, the
10195     appropriate language front end (`cc1', `cc1plus', or `cc1obj' for
10196     C, C++, and Objective-C, respectively) is instead invoked twice,
10197     once for preprocessing only and once for actual compilation of the
10198     preprocessed input.  This option may be useful in conjunction with
10199     the `-B' or `-wrapper' options to specify an alternate
10200     preprocessor or perform additional processing of the program
10201     source between normal preprocessing and compilation.
10202
10203`-D NAME'
10204     Predefine NAME as a macro, with definition `1'.
10205
10206`-D NAME=DEFINITION'
10207     The contents of DEFINITION are tokenized and processed as if they
10208     appeared during translation phase three in a `#define' directive.
10209     In particular, the definition will be truncated by embedded
10210     newline characters.
10211
10212     If you are invoking the preprocessor from a shell or shell-like
10213     program you may need to use the shell's quoting syntax to protect
10214     characters such as spaces that have a meaning in the shell syntax.
10215
10216     If you wish to define a function-like macro on the command line,
10217     write its argument list with surrounding parentheses before the
10218     equals sign (if any).  Parentheses are meaningful to most shells,
10219     so you will need to quote the option.  With `sh' and `csh',
10220     `-D'NAME(ARGS...)=DEFINITION'' works.
10221
10222     `-D' and `-U' options are processed in the order they are given on
10223     the command line.  All `-imacros FILE' and `-include FILE' options
10224     are processed after all `-D' and `-U' options.
10225
10226`-U NAME'
10227     Cancel any previous definition of NAME, either built in or
10228     provided with a `-D' option.
10229
10230`-undef'
10231     Do not predefine any system-specific or GCC-specific macros.  The
10232     standard predefined macros remain defined.
10233
10234`-I DIR'
10235     Add the directory DIR to the list of directories to be searched
10236     for header files.  Directories named by `-I' are searched before
10237     the standard system include directories.  If the directory DIR is
10238     a standard system include directory, the option is ignored to
10239     ensure that the default search order for system directories and
10240     the special treatment of system headers are not defeated .  If DIR
10241     begins with `=', then the `=' will be replaced by the sysroot
10242     prefix; see `--sysroot' and `-isysroot'.
10243
10244`-o FILE'
10245     Write output to FILE.  This is the same as specifying FILE as the
10246     second non-option argument to `cpp'.  `gcc' has a different
10247     interpretation of a second non-option argument, so you must use
10248     `-o' to specify the output file.
10249
10250`-Wall'
10251     Turns on all optional warnings which are desirable for normal code.
10252     At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a
10253     warning about integer promotion causing a change of sign in `#if'
10254     expressions.  Note that many of the preprocessor's warnings are on
10255     by default and have no options to control them.
10256
10257`-Wcomment'
10258`-Wcomments'
10259     Warn whenever a comment-start sequence `/*' appears in a `/*'
10260     comment, or whenever a backslash-newline appears in a `//' comment.
10261     (Both forms have the same effect.)
10262
10263`-Wtrigraphs'
10264     Most trigraphs in comments cannot affect the meaning of the
10265     program.  However, a trigraph that would form an escaped newline
10266     (`??/' at the end of a line) can, by changing where the comment
10267     begins or ends.  Therefore, only trigraphs that would form escaped
10268     newlines produce warnings inside a comment.
10269
10270     This option is implied by `-Wall'.  If `-Wall' is not given, this
10271     option is still enabled unless trigraphs are enabled.  To get
10272     trigraph conversion without warnings, but get the other `-Wall'
10273     warnings, use `-trigraphs -Wall -Wno-trigraphs'.
10274
10275`-Wtraditional'
10276     Warn about certain constructs that behave differently in
10277     traditional and ISO C.  Also warn about ISO C constructs that have
10278     no traditional C equivalent, and problematic constructs which
10279     should be avoided.
10280
10281`-Wundef'
10282     Warn whenever an identifier which is not a macro is encountered in
10283     an `#if' directive, outside of `defined'.  Such identifiers are
10284     replaced with zero.
10285
10286`-Wunused-macros'
10287     Warn about macros defined in the main file that are unused.  A
10288     macro is "used" if it is expanded or tested for existence at least
10289     once.  The preprocessor will also warn if the macro has not been
10290     used at the time it is redefined or undefined.
10291
10292     Built-in macros, macros defined on the command line, and macros
10293     defined in include files are not warned about.
10294
10295     _Note:_ If a macro is actually used, but only used in skipped
10296     conditional blocks, then CPP will report it as unused.  To avoid
10297     the warning in such a case, you might improve the scope of the
10298     macro's definition by, for example, moving it into the first
10299     skipped block.  Alternatively, you could provide a dummy use with
10300     something like:
10301
10302          #if defined the_macro_causing_the_warning
10303          #endif
10304
10305`-Wendif-labels'
10306     Warn whenever an `#else' or an `#endif' are followed by text.
10307     This usually happens in code of the form
10308
10309          #if FOO
10310          ...
10311          #else FOO
10312          ...
10313          #endif FOO
10314
10315     The second and third `FOO' should be in comments, but often are not
10316     in older programs.  This warning is on by default.
10317
10318`-Werror'
10319     Make all warnings into hard errors.  Source code which triggers
10320     warnings will be rejected.
10321
10322`-Wsystem-headers'
10323     Issue warnings for code in system headers.  These are normally
10324     unhelpful in finding bugs in your own code, therefore suppressed.
10325     If you are responsible for the system library, you may want to see
10326     them.
10327
10328`-w'
10329     Suppress all warnings, including those which GNU CPP issues by
10330     default.
10331
10332`-pedantic'
10333     Issue all the mandatory diagnostics listed in the C standard.
10334     Some of them are left out by default, since they trigger
10335     frequently on harmless code.
10336
10337`-pedantic-errors'
10338     Issue all the mandatory diagnostics, and make all mandatory
10339     diagnostics into errors.  This includes mandatory diagnostics that
10340     GCC issues without `-pedantic' but treats as warnings.
10341
10342`-M'
10343     Instead of outputting the result of preprocessing, output a rule
10344     suitable for `make' describing the dependencies of the main source
10345     file.  The preprocessor outputs one `make' rule containing the
10346     object file name for that source file, a colon, and the names of
10347     all the included files, including those coming from `-include' or
10348     `-imacros' command-line options.
10349
10350     Unless specified explicitly (with `-MT' or `-MQ'), the object file
10351     name consists of the name of the source file with any suffix
10352     replaced with object file suffix and with any leading directory
10353     parts removed.  If there are many included files then the rule is
10354     split into several lines using `\'-newline.  The rule has no
10355     commands.
10356
10357     This option does not suppress the preprocessor's debug output,
10358     such as `-dM'.  To avoid mixing such debug output with the
10359     dependency rules you should explicitly specify the dependency
10360     output file with `-MF', or use an environment variable like
10361     `DEPENDENCIES_OUTPUT' (*note Environment Variables::).  Debug
10362     output will still be sent to the regular output stream as normal.
10363
10364     Passing `-M' to the driver implies `-E', and suppresses warnings
10365     with an implicit `-w'.
10366
10367`-MM'
10368     Like `-M' but do not mention header files that are found in system
10369     header directories, nor header files that are included, directly
10370     or indirectly, from such a header.
10371
10372     This implies that the choice of angle brackets or double quotes in
10373     an `#include' directive does not in itself determine whether that
10374     header will appear in `-MM' dependency output.  This is a slight
10375     change in semantics from GCC versions 3.0 and earlier.
10376
10377`-MF FILE'
10378     When used with `-M' or `-MM', specifies a file to write the
10379     dependencies to.  If no `-MF' switch is given the preprocessor
10380     sends the rules to the same place it would have sent preprocessed
10381     output.
10382
10383     When used with the driver options `-MD' or `-MMD', `-MF' overrides
10384     the default dependency output file.
10385
10386`-MG'
10387     In conjunction with an option such as `-M' requesting dependency
10388     generation, `-MG' assumes missing header files are generated files
10389     and adds them to the dependency list without raising an error.
10390     The dependency filename is taken directly from the `#include'
10391     directive without prepending any path.  `-MG' also suppresses
10392     preprocessed output, as a missing header file renders this useless.
10393
10394     This feature is used in automatic updating of makefiles.
10395
10396`-MP'
10397     This option instructs CPP to add a phony target for each dependency
10398     other than the main file, causing each to depend on nothing.  These
10399     dummy rules work around errors `make' gives if you remove header
10400     files without updating the `Makefile' to match.
10401
10402     This is typical output:
10403
10404          test.o: test.c test.h
10405
10406          test.h:
10407
10408`-MT TARGET'
10409     Change the target of the rule emitted by dependency generation.  By
10410     default CPP takes the name of the main input file, deletes any
10411     directory components and any file suffix such as `.c', and appends
10412     the platform's usual object suffix.  The result is the target.
10413
10414     An `-MT' option will set the target to be exactly the string you
10415     specify.  If you want multiple targets, you can specify them as a
10416     single argument to `-MT', or use multiple `-MT' options.
10417
10418     For example, `-MT '$(objpfx)foo.o'' might give
10419
10420          $(objpfx)foo.o: foo.c
10421
10422`-MQ TARGET'
10423     Same as `-MT', but it quotes any characters which are special to
10424     Make.  `-MQ '$(objpfx)foo.o'' gives
10425
10426          $$(objpfx)foo.o: foo.c
10427
10428     The default target is automatically quoted, as if it were given
10429     with `-MQ'.
10430
10431`-MD'
10432     `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
10433     implied.  The driver determines FILE based on whether an `-o'
10434     option is given.  If it is, the driver uses its argument but with
10435     a suffix of `.d', otherwise it takes the name of the input file,
10436     removes any directory components and suffix, and applies a `.d'
10437     suffix.
10438
10439     If `-MD' is used in conjunction with `-E', any `-o' switch is
10440     understood to specify the dependency output file (*note -MF:
10441     dashMF.), but if used without `-E', each `-o' is understood to
10442     specify a target object file.
10443
10444     Since `-E' is not implied, `-MD' can be used to generate a
10445     dependency output file as a side-effect of the compilation process.
10446
10447`-MMD'
10448     Like `-MD' except mention only user header files, not system
10449     header files.
10450
10451`-fpch-deps'
10452     When using precompiled headers (*note Precompiled Headers::), this
10453     flag will cause the dependency-output flags to also list the files
10454     from the precompiled header's dependencies.  If not specified only
10455     the precompiled header would be listed and not the files that were
10456     used to create it because those files are not consulted when a
10457     precompiled header is used.
10458
10459`-fpch-preprocess'
10460     This option allows use of a precompiled header (*note Precompiled
10461     Headers::) together with `-E'.  It inserts a special `#pragma',
10462     `#pragma GCC pch_preprocess "FILENAME"' in the output to mark the
10463     place where the precompiled header was found, and its FILENAME.
10464     When `-fpreprocessed' is in use, GCC recognizes this `#pragma' and
10465     loads the PCH.
10466
10467     This option is off by default, because the resulting preprocessed
10468     output is only really suitable as input to GCC.  It is switched on
10469     by `-save-temps'.
10470
10471     You should not write this `#pragma' in your own code, but it is
10472     safe to edit the filename if the PCH file is available in a
10473     different location.  The filename may be absolute or it may be
10474     relative to GCC's current directory.
10475
10476`-x c'
10477`-x c++'
10478`-x objective-c'
10479`-x assembler-with-cpp'
10480     Specify the source language: C, C++, Objective-C, or assembly.
10481     This has nothing to do with standards conformance or extensions;
10482     it merely selects which base syntax to expect.  If you give none
10483     of these options, cpp will deduce the language from the extension
10484     of the source file: `.c', `.cc', `.m', or `.S'.  Some other common
10485     extensions for C++ and assembly are also recognized.  If cpp does
10486     not recognize the extension, it will treat the file as C; this is
10487     the most generic mode.
10488
10489     _Note:_ Previous versions of cpp accepted a `-lang' option which
10490     selected both the language and the standards conformance level.
10491     This option has been removed, because it conflicts with the `-l'
10492     option.
10493
10494`-std=STANDARD'
10495`-ansi'
10496     Specify the standard to which the code should conform.  Currently
10497     CPP knows about C and C++ standards; others may be added in the
10498     future.
10499
10500     STANDARD may be one of:
10501    `c90'
10502    `c89'
10503    `iso9899:1990'
10504          The ISO C standard from 1990.  `c90' is the customary
10505          shorthand for this version of the standard.
10506
10507          The `-ansi' option is equivalent to `-std=c90'.
10508
10509    `iso9899:199409'
10510          The 1990 C standard, as amended in 1994.
10511
10512    `iso9899:1999'
10513    `c99'
10514    `iso9899:199x'
10515    `c9x'
10516          The revised ISO C standard, published in December 1999.
10517          Before publication, this was known as C9X.
10518
10519    `iso9899:2011'
10520    `c11'
10521    `c1x'
10522          The revised ISO C standard, published in December 2011.
10523          Before publication, this was known as C1X.
10524
10525    `gnu90'
10526    `gnu89'
10527          The 1990 C standard plus GNU extensions.  This is the default.
10528
10529    `gnu99'
10530    `gnu9x'
10531          The 1999 C standard plus GNU extensions.
10532
10533    `gnu11'
10534    `gnu1x'
10535          The 2011 C standard plus GNU extensions.
10536
10537    `c++98'
10538          The 1998 ISO C++ standard plus amendments.
10539
10540    `gnu++98'
10541          The same as `-std=c++98' plus GNU extensions.  This is the
10542          default for C++ code.
10543
10544`-I-'
10545     Split the include path.  Any directories specified with `-I'
10546     options before `-I-' are searched only for headers requested with
10547     `#include "FILE"'; they are not searched for `#include <FILE>'.
10548     If additional directories are specified with `-I' options after
10549     the `-I-', those directories are searched for all `#include'
10550     directives.
10551
10552     In addition, `-I-' inhibits the use of the directory of the current
10553     file directory as the first search directory for `#include "FILE"'.
10554     This option has been deprecated.
10555
10556`-nostdinc'
10557     Do not search the standard system directories for header files.
10558     Only the directories you have specified with `-I' options (and the
10559     directory of the current file, if appropriate) are searched.
10560
10561`-nostdinc++'
10562     Do not search for header files in the C++-specific standard
10563     directories, but do still search the other standard directories.
10564     (This option is used when building the C++ library.)
10565
10566`-include FILE'
10567     Process FILE as if `#include "file"' appeared as the first line of
10568     the primary source file.  However, the first directory searched
10569     for FILE is the preprocessor's working directory _instead of_ the
10570     directory containing the main source file.  If not found there, it
10571     is searched for in the remainder of the `#include "..."' search
10572     chain as normal.
10573
10574     If multiple `-include' options are given, the files are included
10575     in the order they appear on the command line.
10576
10577`-imacros FILE'
10578     Exactly like `-include', except that any output produced by
10579     scanning FILE is thrown away.  Macros it defines remain defined.
10580     This allows you to acquire all the macros from a header without
10581     also processing its declarations.
10582
10583     All files specified by `-imacros' are processed before all files
10584     specified by `-include'.
10585
10586`-idirafter DIR'
10587     Search DIR for header files, but do it _after_ all directories
10588     specified with `-I' and the standard system directories have been
10589     exhausted.  DIR is treated as a system include directory.  If DIR
10590     begins with `=', then the `=' will be replaced by the sysroot
10591     prefix; see `--sysroot' and `-isysroot'.
10592
10593`-iprefix PREFIX'
10594     Specify PREFIX as the prefix for subsequent `-iwithprefix'
10595     options.  If the prefix represents a directory, you should include
10596     the final `/'.
10597
10598`-iwithprefix DIR'
10599`-iwithprefixbefore DIR'
10600     Append DIR to the prefix specified previously with `-iprefix', and
10601     add the resulting directory to the include search path.
10602     `-iwithprefixbefore' puts it in the same place `-I' would;
10603     `-iwithprefix' puts it where `-idirafter' would.
10604
10605`-isysroot DIR'
10606     This option is like the `--sysroot' option, but applies only to
10607     header files (except for Darwin targets, where it applies to both
10608     header files and libraries).  See the `--sysroot' option for more
10609     information.
10610
10611`-imultilib DIR'
10612     Use DIR as a subdirectory of the directory containing
10613     target-specific C++ headers.
10614
10615`-isystem DIR'
10616     Search DIR for header files, after all directories specified by
10617     `-I' but before the standard system directories.  Mark it as a
10618     system directory, so that it gets the same special treatment as is
10619     applied to the standard system directories.  If DIR begins with
10620     `=', then the `=' will be replaced by the sysroot prefix; see
10621     `--sysroot' and `-isysroot'.
10622
10623`-iquote DIR'
10624     Search DIR only for header files requested with `#include "FILE"';
10625     they are not searched for `#include <FILE>', before all
10626     directories specified by `-I' and before the standard system
10627     directories.  If DIR begins with `=', then the `=' will be replaced
10628     by the sysroot prefix; see `--sysroot' and `-isysroot'.
10629
10630`-fdirectives-only'
10631     When preprocessing, handle directives, but do not expand macros.
10632
10633     The option's behavior depends on the `-E' and `-fpreprocessed'
10634     options.
10635
10636     With `-E', preprocessing is limited to the handling of directives
10637     such as `#define', `#ifdef', and `#error'.  Other preprocessor
10638     operations, such as macro expansion and trigraph conversion are
10639     not performed.  In addition, the `-dD' option is implicitly
10640     enabled.
10641
10642     With `-fpreprocessed', predefinition of command line and most
10643     builtin macros is disabled.  Macros such as `__LINE__', which are
10644     contextually dependent, are handled normally.  This enables
10645     compilation of files previously preprocessed with `-E
10646     -fdirectives-only'.
10647
10648     With both `-E' and `-fpreprocessed', the rules for
10649     `-fpreprocessed' take precedence.  This enables full preprocessing
10650     of files previously preprocessed with `-E -fdirectives-only'.
10651
10652`-fdollars-in-identifiers'
10653     Accept `$' in identifiers.
10654
10655`-fextended-identifiers'
10656     Accept universal character names in identifiers.  This option is
10657     enabled by default for C99 (and later C standard versions) and C++.
10658
10659`-fno-canonical-system-headers'
10660     When preprocessing, do not shorten system header paths with
10661     canonicalization.
10662
10663`-fpreprocessed'
10664     Indicate to the preprocessor that the input file has already been
10665     preprocessed.  This suppresses things like macro expansion,
10666     trigraph conversion, escaped newline splicing, and processing of
10667     most directives.  The preprocessor still recognizes and removes
10668     comments, so that you can pass a file preprocessed with `-C' to
10669     the compiler without problems.  In this mode the integrated
10670     preprocessor is little more than a tokenizer for the front ends.
10671
10672     `-fpreprocessed' is implicit if the input file has one of the
10673     extensions `.i', `.ii' or `.mi'.  These are the extensions that
10674     GCC uses for preprocessed files created by `-save-temps'.
10675
10676`-ftabstop=WIDTH'
10677     Set the distance between tab stops.  This helps the preprocessor
10678     report correct column numbers in warnings or errors, even if tabs
10679     appear on the line.  If the value is less than 1 or greater than
10680     100, the option is ignored.  The default is 8.
10681
10682`-fdebug-cpp'
10683     This option is only useful for debugging GCC.  When used with
10684     `-E', dumps debugging information about location maps.  Every
10685     token in the output is preceded by the dump of the map its location
10686     belongs to.  The dump of the map holding the location of a token
10687     would be:
10688          {`P':`/file/path';`F':`/includer/path';`L':LINE_NUM;`C':COL_NUM;`S':SYSTEM_HEADER_P;`M':MAP_ADDRESS;`E':MACRO_EXPANSION_P,`loc':LOCATION}
10689
10690     When used without `-E', this option has no effect.
10691
10692`-ftrack-macro-expansion[=LEVEL]'
10693     Track locations of tokens across macro expansions. This allows the
10694     compiler to emit diagnostic about the current macro expansion stack
10695     when a compilation error occurs in a macro expansion. Using this
10696     option makes the preprocessor and the compiler consume more
10697     memory. The LEVEL parameter can be used to choose the level of
10698     precision of token location tracking thus decreasing the memory
10699     consumption if necessary. Value `0' of LEVEL de-activates this
10700     option just as if no `-ftrack-macro-expansion' was present on the
10701     command line. Value `1' tracks tokens locations in a degraded mode
10702     for the sake of minimal memory overhead. In this mode all tokens
10703     resulting from the expansion of an argument of a function-like
10704     macro have the same location. Value `2' tracks tokens locations
10705     completely. This value is the most memory hungry.  When this
10706     option is given no argument, the default parameter value is `2'.
10707
10708     Note that `-ftrack-macro-expansion=2' is activated by default.
10709
10710`-fexec-charset=CHARSET'
10711     Set the execution character set, used for string and character
10712     constants.  The default is UTF-8.  CHARSET can be any encoding
10713     supported by the system's `iconv' library routine.
10714
10715`-fwide-exec-charset=CHARSET'
10716     Set the wide execution character set, used for wide string and
10717     character constants.  The default is UTF-32 or UTF-16, whichever
10718     corresponds to the width of `wchar_t'.  As with `-fexec-charset',
10719     CHARSET can be any encoding supported by the system's `iconv'
10720     library routine; however, you will have problems with encodings
10721     that do not fit exactly in `wchar_t'.
10722
10723`-finput-charset=CHARSET'
10724     Set the input character set, used for translation from the
10725     character set of the input file to the source character set used
10726     by GCC.  If the locale does not specify, or GCC cannot get this
10727     information from the locale, the default is UTF-8.  This can be
10728     overridden by either the locale or this command-line option.
10729     Currently the command-line option takes precedence if there's a
10730     conflict.  CHARSET can be any encoding supported by the system's
10731     `iconv' library routine.
10732
10733`-fworking-directory'
10734     Enable generation of linemarkers in the preprocessor output that
10735     will let the compiler know the current working directory at the
10736     time of preprocessing.  When this option is enabled, the
10737     preprocessor will emit, after the initial linemarker, a second
10738     linemarker with the current working directory followed by two
10739     slashes.  GCC will use this directory, when it's present in the
10740     preprocessed input, as the directory emitted as the current
10741     working directory in some debugging information formats.  This
10742     option is implicitly enabled if debugging information is enabled,
10743     but this can be inhibited with the negated form
10744     `-fno-working-directory'.  If the `-P' flag is present in the
10745     command line, this option has no effect, since no `#line'
10746     directives are emitted whatsoever.
10747
10748`-fno-show-column'
10749     Do not print column numbers in diagnostics.  This may be necessary
10750     if diagnostics are being scanned by a program that does not
10751     understand the column numbers, such as `dejagnu'.
10752
10753`-A PREDICATE=ANSWER'
10754     Make an assertion with the predicate PREDICATE and answer ANSWER.
10755     This form is preferred to the older form `-A PREDICATE(ANSWER)',
10756     which is still supported, because it does not use shell special
10757     characters.
10758
10759`-A -PREDICATE=ANSWER'
10760     Cancel an assertion with the predicate PREDICATE and answer ANSWER.
10761
10762`-dCHARS'
10763     CHARS is a sequence of one or more of the following characters,
10764     and must not be preceded by a space.  Other characters are
10765     interpreted by the compiler proper, or reserved for future
10766     versions of GCC, and so are silently ignored.  If you specify
10767     characters whose behavior conflicts, the result is undefined.
10768
10769    `M'
10770          Instead of the normal output, generate a list of `#define'
10771          directives for all the macros defined during the execution of
10772          the preprocessor, including predefined macros.  This gives
10773          you a way of finding out what is predefined in your version
10774          of the preprocessor.  Assuming you have no file `foo.h', the
10775          command
10776
10777               touch foo.h; cpp -dM foo.h
10778
10779          will show all the predefined macros.
10780
10781          If you use `-dM' without the `-E' option, `-dM' is
10782          interpreted as a synonym for `-fdump-rtl-mach'.  *Note
10783          Debugging Options: (gcc)Debugging Options.
10784
10785    `D'
10786          Like `M' except in two respects: it does _not_ include the
10787          predefined macros, and it outputs _both_ the `#define'
10788          directives and the result of preprocessing.  Both kinds of
10789          output go to the standard output file.
10790
10791    `N'
10792          Like `D', but emit only the macro names, not their expansions.
10793
10794    `I'
10795          Output `#include' directives in addition to the result of
10796          preprocessing.
10797
10798    `U'
10799          Like `D' except that only macros that are expanded, or whose
10800          definedness is tested in preprocessor directives, are output;
10801          the output is delayed until the use or test of the macro; and
10802          `#undef' directives are also output for macros tested but
10803          undefined at the time.
10804
10805`-P'
10806     Inhibit generation of linemarkers in the output from the
10807     preprocessor.  This might be useful when running the preprocessor
10808     on something that is not C code, and will be sent to a program
10809     which might be confused by the linemarkers.
10810
10811`-C'
10812     Do not discard comments.  All comments are passed through to the
10813     output file, except for comments in processed directives, which
10814     are deleted along with the directive.
10815
10816     You should be prepared for side effects when using `-C'; it causes
10817     the preprocessor to treat comments as tokens in their own right.
10818     For example, comments appearing at the start of what would be a
10819     directive line have the effect of turning that line into an
10820     ordinary source line, since the first token on the line is no
10821     longer a `#'.
10822
10823`-CC'
10824     Do not discard comments, including during macro expansion.  This is
10825     like `-C', except that comments contained within macros are also
10826     passed through to the output file where the macro is expanded.
10827
10828     In addition to the side-effects of the `-C' option, the `-CC'
10829     option causes all C++-style comments inside a macro to be
10830     converted to C-style comments.  This is to prevent later use of
10831     that macro from inadvertently commenting out the remainder of the
10832     source line.
10833
10834     The `-CC' option is generally used to support lint comments.
10835
10836`-traditional-cpp'
10837     Try to imitate the behavior of old-fashioned C preprocessors, as
10838     opposed to ISO C preprocessors.
10839
10840`-trigraphs'
10841     Process trigraph sequences.  These are three-character sequences,
10842     all starting with `??', that are defined by ISO C to stand for
10843     single characters.  For example, `??/' stands for `\', so `'??/n''
10844     is a character constant for a newline.  By default, GCC ignores
10845     trigraphs, but in standard-conforming modes it converts them.  See
10846     the `-std' and `-ansi' options.
10847
10848     The nine trigraphs and their replacements are
10849
10850          Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
10851          Replacement:      [    ]    {    }    #    \    ^    |    ~
10852
10853`-remap'
10854     Enable special code to work around file systems which only permit
10855     very short file names, such as MS-DOS.
10856
10857`--help'
10858`--target-help'
10859     Print text describing all the command-line options instead of
10860     preprocessing anything.
10861
10862`-v'
10863     Verbose mode.  Print out GNU CPP's version number at the beginning
10864     of execution, and report the final form of the include path.
10865
10866`-H'
10867     Print the name of each header file used, in addition to other
10868     normal activities.  Each name is indented to show how deep in the
10869     `#include' stack it is.  Precompiled header files are also
10870     printed, even if they are found to be invalid; an invalid
10871     precompiled header file is printed with `...x' and a valid one
10872     with `...!' .
10873
10874`-version'
10875`--version'
10876     Print out GNU CPP's version number.  With one dash, proceed to
10877     preprocess as normal.  With two dashes, exit immediately.
10878
10879
10880File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
10881
108823.12 Passing Options to the Assembler
10883=====================================
10884
10885You can pass options to the assembler.
10886
10887`-Wa,OPTION'
10888     Pass OPTION as an option to the assembler.  If OPTION contains
10889     commas, it is split into multiple options at the commas.
10890
10891`-Xassembler OPTION'
10892     Pass OPTION as an option to the assembler.  You can use this to
10893     supply system-specific assembler options that GCC does not
10894     recognize.
10895
10896     If you want to pass an option that takes an argument, you must use
10897     `-Xassembler' twice, once for the option and once for the argument.
10898
10899
10900
10901File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
10902
109033.13 Options for Linking
10904========================
10905
10906These options come into play when the compiler links object files into
10907an executable output file.  They are meaningless if the compiler is not
10908doing a link step.
10909
10910`OBJECT-FILE-NAME'
10911     A file name that does not end in a special recognized suffix is
10912     considered to name an object file or library.  (Object files are
10913     distinguished from libraries by the linker according to the file
10914     contents.)  If linking is done, these object files are used as
10915     input to the linker.
10916
10917`-c'
10918`-S'
10919`-E'
10920     If any of these options is used, then the linker is not run, and
10921     object file names should not be used as arguments.  *Note Overall
10922     Options::.
10923
10924`-fuse-ld=bfd'
10925     Use the `bfd' linker instead of the default linker.
10926
10927`-fuse-ld=gold'
10928     Use the `gold' linker instead of the default linker.
10929
10930`-lLIBRARY'
10931`-l LIBRARY'
10932     Search the library named LIBRARY when linking.  (The second
10933     alternative with the library as a separate argument is only for
10934     POSIX compliance and is not recommended.)
10935
10936     It makes a difference where in the command you write this option;
10937     the linker searches and processes libraries and object files in
10938     the order they are specified.  Thus, `foo.o -lz bar.o' searches
10939     library `z' after file `foo.o' but before `bar.o'.  If `bar.o'
10940     refers to functions in `z', those functions may not be loaded.
10941
10942     The linker searches a standard list of directories for the library,
10943     which is actually a file named `libLIBRARY.a'.  The linker then
10944     uses this file as if it had been specified precisely by name.
10945
10946     The directories searched include several standard system
10947     directories plus any that you specify with `-L'.
10948
10949     Normally the files found this way are library files--archive files
10950     whose members are object files.  The linker handles an archive
10951     file by scanning through it for members which define symbols that
10952     have so far been referenced but not defined.  But if the file that
10953     is found is an ordinary object file, it is linked in the usual
10954     fashion.  The only difference between using an `-l' option and
10955     specifying a file name is that `-l' surrounds LIBRARY with `lib'
10956     and `.a' and searches several directories.
10957
10958`-lobjc'
10959     You need this special case of the `-l' option in order to link an
10960     Objective-C or Objective-C++ program.
10961
10962`-nostartfiles'
10963     Do not use the standard system startup files when linking.  The
10964     standard system libraries are used normally, unless `-nostdlib' or
10965     `-nodefaultlibs' is used.
10966
10967`-nodefaultlibs'
10968     Do not use the standard system libraries when linking.  Only the
10969     libraries you specify are passed to the linker, and options
10970     specifying linkage of the system libraries, such as
10971     `-static-libgcc' or `-shared-libgcc', are ignored.  The standard
10972     startup files are used normally, unless `-nostartfiles' is used.
10973
10974     The compiler may generate calls to `memcmp', `memset', `memcpy'
10975     and `memmove'.  These entries are usually resolved by entries in
10976     libc.  These entry points should be supplied through some other
10977     mechanism when this option is specified.
10978
10979`-nostdlib'
10980     Do not use the standard system startup files or libraries when
10981     linking.  No startup files and only the libraries you specify are
10982     passed to the linker, and options specifying linkage of the system
10983     libraries, such as `-static-libgcc' or `-shared-libgcc', are
10984     ignored.
10985
10986     The compiler may generate calls to `memcmp', `memset', `memcpy'
10987     and `memmove'.  These entries are usually resolved by entries in
10988     libc.  These entry points should be supplied through some other
10989     mechanism when this option is specified.
10990
10991     One of the standard libraries bypassed by `-nostdlib' and
10992     `-nodefaultlibs' is `libgcc.a', a library of internal subroutines
10993     which GCC uses to overcome shortcomings of particular machines, or
10994     special needs for some languages.  (*Note Interfacing to GCC
10995     Output: (gccint)Interface, for more discussion of `libgcc.a'.)  In
10996     most cases, you need `libgcc.a' even when you want to avoid other
10997     standard libraries.  In other words, when you specify `-nostdlib'
10998     or `-nodefaultlibs' you should usually specify `-lgcc' as well.
10999     This ensures that you have no unresolved references to internal GCC
11000     library subroutines.  (An example of such an internal subroutine
11001     is `__main', used to ensure C++ constructors are called; *note
11002     `collect2': (gccint)Collect2.)
11003
11004`-pie'
11005     Produce a position independent executable on targets that support
11006     it.  For predictable results, you must also specify the same set
11007     of options used for compilation (`-fpie', `-fPIE', or model
11008     suboptions) when you specify this linker option.
11009
11010`-rdynamic'
11011     Pass the flag `-export-dynamic' to the ELF linker, on targets that
11012     support it. This instructs the linker to add all symbols, not only
11013     used ones, to the dynamic symbol table. This option is needed for
11014     some uses of `dlopen' or to allow obtaining backtraces from within
11015     a program.
11016
11017`-s'
11018     Remove all symbol table and relocation information from the
11019     executable.
11020
11021`-static'
11022     On systems that support dynamic linking, this prevents linking
11023     with the shared libraries.  On other systems, this option has no
11024     effect.
11025
11026`-shared'
11027     Produce a shared object which can then be linked with other
11028     objects to form an executable.  Not all systems support this
11029     option.  For predictable results, you must also specify the same
11030     set of options used for compilation (`-fpic', `-fPIC', or model
11031     suboptions) when you specify this linker option.(1)
11032
11033`-shared-libgcc'
11034`-static-libgcc'
11035     On systems that provide `libgcc' as a shared library, these options
11036     force the use of either the shared or static version, respectively.
11037     If no shared version of `libgcc' was built when the compiler was
11038     configured, these options have no effect.
11039
11040     There are several situations in which an application should use the
11041     shared `libgcc' instead of the static version.  The most common of
11042     these is when the application wishes to throw and catch exceptions
11043     across different shared libraries.  In that case, each of the
11044     libraries as well as the application itself should use the shared
11045     `libgcc'.
11046
11047     Therefore, the G++ and GCJ drivers automatically add
11048     `-shared-libgcc' whenever you build a shared library or a main
11049     executable, because C++ and Java programs typically use
11050     exceptions, so this is the right thing to do.
11051
11052     If, instead, you use the GCC driver to create shared libraries,
11053     you may find that they are not always linked with the shared
11054     `libgcc'.  If GCC finds, at its configuration time, that you have
11055     a non-GNU linker or a GNU linker that does not support option
11056     `--eh-frame-hdr', it links the shared version of `libgcc' into
11057     shared libraries by default.  Otherwise, it takes advantage of the
11058     linker and optimizes away the linking with the shared version of
11059     `libgcc', linking with the static version of libgcc by default.
11060     This allows exceptions to propagate through such shared libraries,
11061     without incurring relocation costs at library load time.
11062
11063     However, if a library or main executable is supposed to throw or
11064     catch exceptions, you must link it using the G++ or GCJ driver, as
11065     appropriate for the languages used in the program, or using the
11066     option `-shared-libgcc', such that it is linked with the shared
11067     `libgcc'.
11068
11069`-static-libasan'
11070     When the `-fsanitize=address' option is used to link a program,
11071     the GCC driver automatically links against `libasan'.  If
11072     `libasan' is available as a shared library, and the `-static'
11073     option is not used, then this links against the shared version of
11074     `libasan'.  The `-static-libasan' option directs the GCC driver to
11075     link `libasan' statically, without necessarily linking other
11076     libraries statically.
11077
11078`-static-libtsan'
11079     When the `-fsanitize=thread' option is used to link a program, the
11080     GCC driver automatically links against `libtsan'.  If `libtsan' is
11081     available as a shared library, and the `-static' option is not
11082     used, then this links against the shared version of `libtsan'.
11083     The `-static-libtsan' option directs the GCC driver to link
11084     `libtsan' statically, without necessarily linking other libraries
11085     statically.
11086
11087`-static-liblsan'
11088     When the `-fsanitize=leak' option is used to link a program, the
11089     GCC driver automatically links against `liblsan'.  If `liblsan' is
11090     available as a shared library, and the `-static' option is not
11091     used, then this links against the shared version of `liblsan'.
11092     The `-static-liblsan' option directs the GCC driver to link
11093     `liblsan' statically, without necessarily linking other libraries
11094     statically.
11095
11096`-static-libubsan'
11097     When the `-fsanitize=undefined' option is used to link a program,
11098     the GCC driver automatically links against `libubsan'.  If
11099     `libubsan' is available as a shared library, and the `-static'
11100     option is not used, then this links against the shared version of
11101     `libubsan'.  The `-static-libubsan' option directs the GCC driver
11102     to link `libubsan' statically, without necessarily linking other
11103     libraries statically.
11104
11105`-static-libmpx'
11106     When the `-fcheck-pointer bounds' and `-mmpx' options are used to
11107     link a program, the GCC driver automatically links against
11108     `libmpx'.  If `libmpx' is available as a shared library, and the
11109     `-static' option is not used, then this links against the shared
11110     version of `libmpx'.  The `-static-libmpx' option directs the GCC
11111     driver to link `libmpx' statically, without necessarily linking
11112     other libraries statically.
11113
11114`-static-libmpxwrappers'
11115     When the `-fcheck-pointer bounds' and `-mmpx' options are used to
11116     link a program without also using `-fno-chkp-use-wrappers', the
11117     GCC driver automatically links against `libmpxwrappers'.  If
11118     `libmpxwrappers' is available as a shared library, and the
11119     `-static' option is not used, then this links against the shared
11120     version of `libmpxwrappers'.  The `-static-libmpxwrappers' option
11121     directs the GCC driver to link `libmpxwrappers' statically,
11122     without necessarily linking other libraries statically.
11123
11124`-static-libstdc++'
11125     When the `g++' program is used to link a C++ program, it normally
11126     automatically links against `libstdc++'.  If `libstdc++' is
11127     available as a shared library, and the `-static' option is not
11128     used, then this links against the shared version of `libstdc++'.
11129     That is normally fine.  However, it is sometimes useful to freeze
11130     the version of `libstdc++' used by the program without going all
11131     the way to a fully static link.  The `-static-libstdc++' option
11132     directs the `g++' driver to link `libstdc++' statically, without
11133     necessarily linking other libraries statically.
11134
11135`-symbolic'
11136     Bind references to global symbols when building a shared object.
11137     Warn about any unresolved references (unless overridden by the
11138     link editor option `-Xlinker -z -Xlinker defs').  Only a few
11139     systems support this option.
11140
11141`-T SCRIPT'
11142     Use SCRIPT as the linker script.  This option is supported by most
11143     systems using the GNU linker.  On some targets, such as bare-board
11144     targets without an operating system, the `-T' option may be
11145     required when linking to avoid references to undefined symbols.
11146
11147`-Xlinker OPTION'
11148     Pass OPTION as an option to the linker.  You can use this to
11149     supply system-specific linker options that GCC does not recognize.
11150
11151     If you want to pass an option that takes a separate argument, you
11152     must use `-Xlinker' twice, once for the option and once for the
11153     argument.  For example, to pass `-assert definitions', you must
11154     write `-Xlinker -assert -Xlinker definitions'.  It does not work
11155     to write `-Xlinker "-assert definitions"', because this passes the
11156     entire string as a single argument, which is not what the linker
11157     expects.
11158
11159     When using the GNU linker, it is usually more convenient to pass
11160     arguments to linker options using the `OPTION=VALUE' syntax than
11161     as separate arguments.  For example, you can specify `-Xlinker
11162     -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'.
11163     Other linkers may not support this syntax for command-line options.
11164
11165`-Wl,OPTION'
11166     Pass OPTION as an option to the linker.  If OPTION contains
11167     commas, it is split into multiple options at the commas.  You can
11168     use this syntax to pass an argument to the option.  For example,
11169     `-Wl,-Map,output.map' passes `-Map output.map' to the linker.
11170     When using the GNU linker, you can also get the same effect with
11171     `-Wl,-Map=output.map'.
11172
11173`-u SYMBOL'
11174     Pretend the symbol SYMBOL is undefined, to force linking of
11175     library modules to define it.  You can use `-u' multiple times with
11176     different symbols to force loading of additional library modules.
11177
11178`-z KEYWORD'
11179     `-z' is passed directly on to the linker along with the keyword
11180     KEYWORD. See the section in the documentation of your linker for
11181     permitted values and their meanings.
11182
11183 ---------- Footnotes ----------
11184
11185 (1) On some systems, `gcc -shared' needs to build supplementary stub
11186code for constructors to work.  On multi-libbed systems, `gcc -shared'
11187must select the correct support libraries to link against.  Failing to
11188supply the correct flags may lead to subtle defects.  Supplying them in
11189cases where they are not necessary is innocuous.
11190
11191
11192File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC
11193
111943.14 Options for Directory Search
11195=================================
11196
11197These options specify directories to search for header files, for
11198libraries and for parts of the compiler:
11199
11200`-IDIR'
11201     Add the directory DIR to the head of the list of directories to be
11202     searched for header files.  This can be used to override a system
11203     header file, substituting your own version, since these
11204     directories are searched before the system header file
11205     directories.  However, you should not use this option to add
11206     directories that contain vendor-supplied system header files (use
11207     `-isystem' for that).  If you use more than one `-I' option, the
11208     directories are scanned in left-to-right order; the standard
11209     system directories come after.
11210
11211     If a standard system include directory, or a directory specified
11212     with `-isystem', is also specified with `-I', the `-I' option is
11213     ignored.  The directory is still searched but as a system
11214     directory at its normal position in the system include chain.
11215     This is to ensure that GCC's procedure to fix buggy system headers
11216     and the ordering for the `include_next' directive are not
11217     inadvertently changed.  If you really need to change the search
11218     order for system directories, use the `-nostdinc' and/or
11219     `-isystem' options.
11220
11221`-iplugindir=DIR'
11222     Set the directory to search for plugins that are passed by
11223     `-fplugin=NAME' instead of `-fplugin=PATH/NAME.so'.  This option
11224     is not meant to be used by the user, but only passed by the driver.
11225
11226`-iquoteDIR'
11227     Add the directory DIR to the head of the list of directories to be
11228     searched for header files only for the case of `#include "FILE"';
11229     they are not searched for `#include <FILE>', otherwise just like
11230     `-I'.
11231
11232`-LDIR'
11233     Add directory DIR to the list of directories to be searched for
11234     `-l'.
11235
11236`-BPREFIX'
11237     This option specifies where to find the executables, libraries,
11238     include files, and data files of the compiler itself.
11239
11240     The compiler driver program runs one or more of the subprograms
11241     `cpp', `cc1', `as' and `ld'.  It tries PREFIX as a prefix for each
11242     program it tries to run, both with and without `MACHINE/VERSION/'
11243     (*note Target Options::).
11244
11245     For each subprogram to be run, the compiler driver first tries the
11246     `-B' prefix, if any.  If that name is not found, or if `-B' is not
11247     specified, the driver tries two standard prefixes, `/usr/lib/gcc/'
11248     and `/usr/local/lib/gcc/'.  If neither of those results in a file
11249     name that is found, the unmodified program name is searched for
11250     using the directories specified in your `PATH' environment
11251     variable.
11252
11253     The compiler checks to see if the path provided by `-B' refers to
11254     a directory, and if necessary it adds a directory separator
11255     character at the end of the path.
11256
11257     `-B' prefixes that effectively specify directory names also apply
11258     to libraries in the linker, because the compiler translates these
11259     options into `-L' options for the linker.  They also apply to
11260     include files in the preprocessor, because the compiler translates
11261     these options into `-isystem' options for the preprocessor.  In
11262     this case, the compiler appends `include' to the prefix.
11263
11264     The runtime support file `libgcc.a' can also be searched for using
11265     the `-B' prefix, if needed.  If it is not found there, the two
11266     standard prefixes above are tried, and that is all.  The file is
11267     left out of the link if it is not found by those means.
11268
11269     Another way to specify a prefix much like the `-B' prefix is to use
11270     the environment variable `GCC_EXEC_PREFIX'.  *Note Environment
11271     Variables::.
11272
11273     As a special kludge, if the path provided by `-B' is
11274     `[dir/]stageN/', where N is a number in the range 0 to 9, then it
11275     is replaced by `[dir/]include'.  This is to help with
11276     boot-strapping the compiler.
11277
11278`-specs=FILE'
11279     Process FILE after the compiler reads in the standard `specs'
11280     file, in order to override the defaults which the `gcc' driver
11281     program uses when determining what switches to pass to `cc1',
11282     `cc1plus', `as', `ld', etc.  More than one `-specs=FILE' can be
11283     specified on the command line, and they are processed in order,
11284     from left to right.
11285
11286`--sysroot=DIR'
11287     Use DIR as the logical root directory for headers and libraries.
11288     For example, if the compiler normally searches for headers in
11289     `/usr/include' and libraries in `/usr/lib', it instead searches
11290     `DIR/usr/include' and `DIR/usr/lib'.
11291
11292     If you use both this option and the `-isysroot' option, then the
11293     `--sysroot' option applies to libraries, but the `-isysroot'
11294     option applies to header files.
11295
11296     The GNU linker (beginning with version 2.16) has the necessary
11297     support for this option.  If your linker does not support this
11298     option, the header file aspect of `--sysroot' still works, but the
11299     library aspect does not.
11300
11301`--no-sysroot-suffix'
11302     For some targets, a suffix is added to the root directory specified
11303     with `--sysroot', depending on the other options used, so that
11304     headers may for example be found in `DIR/SUFFIX/usr/include'
11305     instead of `DIR/usr/include'.  This option disables the addition of
11306     such a suffix.
11307
11308`-I-'
11309     This option has been deprecated.  Please use `-iquote' instead for
11310     `-I' directories before the `-I-' and remove the `-I-' option.
11311     Any directories you specify with `-I' options before the `-I-'
11312     option are searched only for the case of `#include "FILE"'; they
11313     are not searched for `#include <FILE>'.
11314
11315     If additional directories are specified with `-I' options after
11316     the `-I-' option, these directories are searched for all `#include'
11317     directives.  (Ordinarily _all_ `-I' directories are used this way.)
11318
11319     In addition, the `-I-' option inhibits the use of the current
11320     directory (where the current input file came from) as the first
11321     search directory for `#include "FILE"'.  There is no way to
11322     override this effect of `-I-'.  With `-I.' you can specify
11323     searching the directory that is current when the compiler is
11324     invoked.  That is not exactly the same as what the preprocessor
11325     does by default, but it is often satisfactory.
11326
11327     `-I-' does not inhibit the use of the standard system directories
11328     for header files.  Thus, `-I-' and `-nostdinc' are independent.
11329
11330
11331File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC
11332
113333.15 Specifying Subprocesses and the Switches to Pass to Them
11334=============================================================
11335
11336`gcc' is a driver program.  It performs its job by invoking a sequence
11337of other programs to do the work of compiling, assembling and linking.
11338GCC interprets its command-line parameters and uses these to deduce
11339which programs it should invoke, and which command-line options it
11340ought to place on their command lines.  This behavior is controlled by
11341"spec strings".  In most cases there is one spec string for each
11342program that GCC can invoke, but a few programs have multiple spec
11343strings to control their behavior.  The spec strings built into GCC can
11344be overridden by using the `-specs=' command-line switch to specify a
11345spec file.
11346
11347 "Spec files" are plaintext files that are used to construct spec
11348strings.  They consist of a sequence of directives separated by blank
11349lines.  The type of directive is determined by the first non-whitespace
11350character on the line, which can be one of the following:
11351
11352`%COMMAND'
11353     Issues a COMMAND to the spec file processor.  The commands that can
11354     appear here are:
11355
11356    `%include <FILE>'
11357          Search for FILE and insert its text at the current point in
11358          the specs file.
11359
11360    `%include_noerr <FILE>'
11361          Just like `%include', but do not generate an error message if
11362          the include file cannot be found.
11363
11364    `%rename OLD_NAME NEW_NAME'
11365          Rename the spec string OLD_NAME to NEW_NAME.
11366
11367
11368`*[SPEC_NAME]:'
11369     This tells the compiler to create, override or delete the named
11370     spec string.  All lines after this directive up to the next
11371     directive or blank line are considered to be the text for the spec
11372     string.  If this results in an empty string then the spec is
11373     deleted.  (Or, if the spec did not exist, then nothing happens.)
11374     Otherwise, if the spec does not currently exist a new spec is
11375     created.  If the spec does exist then its contents are overridden
11376     by the text of this directive, unless the first character of that
11377     text is the `+' character, in which case the text is appended to
11378     the spec.
11379
11380`[SUFFIX]:'
11381     Creates a new `[SUFFIX] spec' pair.  All lines after this directive
11382     and up to the next directive or blank line are considered to make
11383     up the spec string for the indicated suffix.  When the compiler
11384     encounters an input file with the named suffix, it processes the
11385     spec string in order to work out how to compile that file.  For
11386     example:
11387
11388          .ZZ:
11389          z-compile -input %i
11390
11391     This says that any input file whose name ends in `.ZZ' should be
11392     passed to the program `z-compile', which should be invoked with the
11393     command-line switch `-input' and with the result of performing the
11394     `%i' substitution.  (See below.)
11395
11396     As an alternative to providing a spec string, the text following a
11397     suffix directive can be one of the following:
11398
11399    `@LANGUAGE'
11400          This says that the suffix is an alias for a known LANGUAGE.
11401          This is similar to using the `-x' command-line switch to GCC
11402          to specify a language explicitly.  For example:
11403
11404               .ZZ:
11405               @c++
11406
11407          Says that .ZZ files are, in fact, C++ source files.
11408
11409    `#NAME'
11410          This causes an error messages saying:
11411
11412               NAME compiler not installed on this system.
11413
11414     GCC already has an extensive list of suffixes built into it.  This
11415     directive adds an entry to the end of the list of suffixes, but
11416     since the list is searched from the end backwards, it is
11417     effectively possible to override earlier entries using this
11418     technique.
11419
11420
11421 GCC has the following spec strings built into it.  Spec files can
11422override these strings or create their own.  Note that individual
11423targets can also add their own spec strings to this list.
11424
11425     asm          Options to pass to the assembler
11426     asm_final    Options to pass to the assembler post-processor
11427     cpp          Options to pass to the C preprocessor
11428     cc1          Options to pass to the C compiler
11429     cc1plus      Options to pass to the C++ compiler
11430     endfile      Object files to include at the end of the link
11431     link         Options to pass to the linker
11432     lib          Libraries to include on the command line to the linker
11433     libgcc       Decides which GCC support library to pass to the linker
11434     linker       Sets the name of the linker
11435     predefines   Defines to be passed to the C preprocessor
11436     signed_char  Defines to pass to CPP to say whether `char' is signed
11437                  by default
11438     startfile    Object files to include at the start of the link
11439
11440 Here is a small example of a spec file:
11441
11442     %rename lib                 old_lib
11443
11444     *lib:
11445     --start-group -lgcc -lc -leval1 --end-group %(old_lib)
11446
11447 This example renames the spec called `lib' to `old_lib' and then
11448overrides the previous definition of `lib' with a new one.  The new
11449definition adds in some extra command-line options before including the
11450text of the old definition.
11451
11452 "Spec strings" are a list of command-line options to be passed to their
11453corresponding program.  In addition, the spec strings can contain
11454`%'-prefixed sequences to substitute variable text or to conditionally
11455insert text into the command line.  Using these constructs it is
11456possible to generate quite complex command lines.
11457
11458 Here is a table of all defined `%'-sequences for spec strings.  Note
11459that spaces are not generated automatically around the results of
11460expanding these sequences.  Therefore you can concatenate them together
11461or combine them with constant text in a single argument.
11462
11463`%%'
11464     Substitute one `%' into the program name or argument.
11465
11466`%i'
11467     Substitute the name of the input file being processed.
11468
11469`%b'
11470     Substitute the basename of the input file being processed.  This
11471     is the substring up to (and not including) the last period and not
11472     including the directory.
11473
11474`%B'
11475     This is the same as `%b', but include the file suffix (text after
11476     the last period).
11477
11478`%d'
11479     Marks the argument containing or following the `%d' as a temporary
11480     file name, so that that file is deleted if GCC exits successfully.
11481     Unlike `%g', this contributes no text to the argument.
11482
11483`%gSUFFIX'
11484     Substitute a file name that has suffix SUFFIX and is chosen once
11485     per compilation, and mark the argument in the same way as `%d'.
11486     To reduce exposure to denial-of-service attacks, the file name is
11487     now chosen in a way that is hard to predict even when previously
11488     chosen file names are known.  For example, `%g.s ... %g.o ... %g.s'
11489     might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX
11490     matches the regexp `[.A-Za-z]*' or the special string `%O', which
11491     is treated exactly as if `%O' had been preprocessed.  Previously,
11492     `%g' was simply substituted with a file name chosen once per
11493     compilation, without regard to any appended suffix (which was
11494     therefore treated just like ordinary text), making such attacks
11495     more likely to succeed.
11496
11497`%uSUFFIX'
11498     Like `%g', but generates a new temporary file name each time it
11499     appears instead of once per compilation.
11500
11501`%USUFFIX'
11502     Substitutes the last file name generated with `%uSUFFIX',
11503     generating a new one if there is no such last file name.  In the
11504     absence of any `%uSUFFIX', this is just like `%gSUFFIX', except
11505     they don't share the same suffix _space_, so `%g.s ... %U.s ...
11506     %g.s ... %U.s' involves the generation of two distinct file names,
11507     one for each `%g.s' and another for each `%U.s'.  Previously, `%U'
11508     was simply substituted with a file name chosen for the previous
11509     `%u', without regard to any appended suffix.
11510
11511`%jSUFFIX'
11512     Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is
11513     writable, and if `-save-temps' is not used; otherwise, substitute
11514     the name of a temporary file, just like `%u'.  This temporary file
11515     is not meant for communication between processes, but rather as a
11516     junk disposal mechanism.
11517
11518`%|SUFFIX'
11519`%mSUFFIX'
11520     Like `%g', except if `-pipe' is in effect.  In that case `%|'
11521     substitutes a single dash and `%m' substitutes nothing at all.
11522     These are the two most common ways to instruct a program that it
11523     should read from standard input or write to standard output.  If
11524     you need something more elaborate you can use an `%{pipe:`X'}'
11525     construct: see for example `f/lang-specs.h'.
11526
11527`%.SUFFIX'
11528     Substitutes .SUFFIX for the suffixes of a matched switch's args
11529     when it is subsequently output with `%*'.  SUFFIX is terminated by
11530     the next space or %.
11531
11532`%w'
11533     Marks the argument containing or following the `%w' as the
11534     designated output file of this compilation.  This puts the argument
11535     into the sequence of arguments that `%o' substitutes.
11536
11537`%o'
11538     Substitutes the names of all the output files, with spaces
11539     automatically placed around them.  You should write spaces around
11540     the `%o' as well or the results are undefined.  `%o' is for use in
11541     the specs for running the linker.  Input files whose names have no
11542     recognized suffix are not compiled at all, but they are included
11543     among the output files, so they are linked.
11544
11545`%O'
11546     Substitutes the suffix for object files.  Note that this is
11547     handled specially when it immediately follows `%g, %u, or %U',
11548     because of the need for those to form complete file names.  The
11549     handling is such that `%O' is treated exactly as if it had already
11550     been substituted, except that `%g, %u, and %U' do not currently
11551     support additional SUFFIX characters following `%O' as they do
11552     following, for example, `.o'.
11553
11554`%p'
11555     Substitutes the standard macro predefinitions for the current
11556     target machine.  Use this when running `cpp'.
11557
11558`%P'
11559     Like `%p', but puts `__' before and after the name of each
11560     predefined macro, except for macros that start with `__' or with
11561     `_L', where L is an uppercase letter.  This is for ISO C.
11562
11563`%I'
11564     Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'),
11565     `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made
11566     from `COMPILER_PATH' and `-B' options) and `-imultilib' as
11567     necessary.
11568
11569`%s'
11570     Current argument is the name of a library or startup file of some
11571     sort.  Search for that file in a standard list of directories and
11572     substitute the full name found.  The current working directory is
11573     included in the list of directories scanned.
11574
11575`%T'
11576     Current argument is the name of a linker script.  Search for that
11577     file in the current list of directories to scan for libraries. If
11578     the file is located insert a `--script' option into the command
11579     line followed by the full path name found.  If the file is not
11580     found then generate an error message.  Note: the current working
11581     directory is not searched.
11582
11583`%eSTR'
11584     Print STR as an error message.  STR is terminated by a newline.
11585     Use this when inconsistent options are detected.
11586
11587`%(NAME)'
11588     Substitute the contents of spec string NAME at this point.
11589
11590`%x{OPTION}'
11591     Accumulate an option for `%X'.
11592
11593`%X'
11594     Output the accumulated linker options specified by `-Wl' or a `%x'
11595     spec string.
11596
11597`%Y'
11598     Output the accumulated assembler options specified by `-Wa'.
11599
11600`%Z'
11601     Output the accumulated preprocessor options specified by `-Wp'.
11602
11603`%a'
11604     Process the `asm' spec.  This is used to compute the switches to
11605     be passed to the assembler.
11606
11607`%A'
11608     Process the `asm_final' spec.  This is a spec string for passing
11609     switches to an assembler post-processor, if such a program is
11610     needed.
11611
11612`%l'
11613     Process the `link' spec.  This is the spec for computing the
11614     command line passed to the linker.  Typically it makes use of the
11615     `%L %G %S %D and %E' sequences.
11616
11617`%D'
11618     Dump out a `-L' option for each directory that GCC believes might
11619     contain startup files.  If the target supports multilibs then the
11620     current multilib directory is prepended to each of these paths.
11621
11622`%L'
11623     Process the `lib' spec.  This is a spec string for deciding which
11624     libraries are included on the command line to the linker.
11625
11626`%G'
11627     Process the `libgcc' spec.  This is a spec string for deciding
11628     which GCC support library is included on the command line to the
11629     linker.
11630
11631`%S'
11632     Process the `startfile' spec.  This is a spec for deciding which
11633     object files are the first ones passed to the linker.  Typically
11634     this might be a file named `crt0.o'.
11635
11636`%E'
11637     Process the `endfile' spec.  This is a spec string that specifies
11638     the last object files that are passed to the linker.
11639
11640`%C'
11641     Process the `cpp' spec.  This is used to construct the arguments
11642     to be passed to the C preprocessor.
11643
11644`%1'
11645     Process the `cc1' spec.  This is used to construct the options to
11646     be passed to the actual C compiler (`cc1').
11647
11648`%2'
11649     Process the `cc1plus' spec.  This is used to construct the options
11650     to be passed to the actual C++ compiler (`cc1plus').
11651
11652`%*'
11653     Substitute the variable part of a matched option.  See below.
11654     Note that each comma in the substituted string is replaced by a
11655     single space.
11656
11657`%<`S''
11658     Remove all occurrences of `-S' from the command line.  Note--this
11659     command is position dependent.  `%' commands in the spec string
11660     before this one see `-S', `%' commands in the spec string after
11661     this one do not.
11662
11663`%:FUNCTION(ARGS)'
11664     Call the named function FUNCTION, passing it ARGS.  ARGS is first
11665     processed as a nested spec string, then split into an argument
11666     vector in the usual fashion.  The function returns a string which
11667     is processed as if it had appeared literally as part of the
11668     current spec.
11669
11670     The following built-in spec functions are provided:
11671
11672    ``getenv''
11673          The `getenv' spec function takes two arguments: an environment
11674          variable name and a string.  If the environment variable is
11675          not defined, a fatal error is issued.  Otherwise, the return
11676          value is the value of the environment variable concatenated
11677          with the string.  For example, if `TOPDIR' is defined as
11678          `/path/to/top', then:
11679
11680               %:getenv(TOPDIR /include)
11681
11682          expands to `/path/to/top/include'.
11683
11684    ``if-exists''
11685          The `if-exists' spec function takes one argument, an absolute
11686          pathname to a file.  If the file exists, `if-exists' returns
11687          the pathname.  Here is a small example of its usage:
11688
11689               *startfile:
11690               crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
11691
11692    ``if-exists-else''
11693          The `if-exists-else' spec function is similar to the
11694          `if-exists' spec function, except that it takes two
11695          arguments.  The first argument is an absolute pathname to a
11696          file.  If the file exists, `if-exists-else' returns the
11697          pathname.  If it does not exist, it returns the second
11698          argument.  This way, `if-exists-else' can be used to select
11699          one file or another, based on the existence of the first.
11700          Here is a small example of its usage:
11701
11702               *startfile:
11703               crt0%O%s %:if-exists(crti%O%s) \
11704               %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
11705
11706    ``replace-outfile''
11707          The `replace-outfile' spec function takes two arguments.  It
11708          looks for the first argument in the outfiles array and
11709          replaces it with the second argument.  Here is a small
11710          example of its usage:
11711
11712               %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
11713
11714    ``remove-outfile''
11715          The `remove-outfile' spec function takes one argument.  It
11716          looks for the first argument in the outfiles array and
11717          removes it.  Here is a small example its usage:
11718
11719               %:remove-outfile(-lm)
11720
11721    ``pass-through-libs''
11722          The `pass-through-libs' spec function takes any number of
11723          arguments.  It finds any `-l' options and any non-options
11724          ending in `.a' (which it assumes are the names of linker
11725          input library archive files) and returns a result containing
11726          all the found arguments each prepended by
11727          `-plugin-opt=-pass-through=' and joined by spaces.  This list
11728          is intended to be passed to the LTO linker plugin.
11729
11730               %:pass-through-libs(%G %L %G)
11731
11732    ``print-asm-header''
11733          The `print-asm-header' function takes no arguments and simply
11734          prints a banner like:
11735
11736               Assembler options
11737               =================
11738
11739               Use "-Wa,OPTION" to pass "OPTION" to the assembler.
11740
11741          It is used to separate compiler options from assembler options
11742          in the `--target-help' output.
11743
11744`%{`S'}'
11745     Substitutes the `-S' switch, if that switch is given to GCC.  If
11746     that switch is not specified, this substitutes nothing.  Note that
11747     the leading dash is omitted when specifying this option, and it is
11748     automatically inserted if the substitution is performed.  Thus the
11749     spec string `%{foo}' matches the command-line option `-foo' and
11750     outputs the command-line option `-foo'.
11751
11752`%W{`S'}'
11753     Like %{`S'} but mark last argument supplied within as a file to be
11754     deleted on failure.
11755
11756`%{`S'*}'
11757     Substitutes all the switches specified to GCC whose names start
11758     with `-S', but which also take an argument.  This is used for
11759     switches like `-o', `-D', `-I', etc.  GCC considers `-o foo' as
11760     being one switch whose name starts with `o'.  %{o*} substitutes
11761     this text, including the space.  Thus two arguments are generated.
11762
11763`%{`S'*&`T'*}'
11764     Like %{`S'*}, but preserve order of `S' and `T' options (the order
11765     of `S' and `T' in the spec is not significant).  There can be any
11766     number of ampersand-separated variables; for each the wild card is
11767     optional.  Useful for CPP as `%{D*&U*&A*}'.
11768
11769`%{`S':`X'}'
11770     Substitutes `X', if the `-S' switch is given to GCC.
11771
11772`%{!`S':`X'}'
11773     Substitutes `X', if the `-S' switch is _not_ given to GCC.
11774
11775`%{`S'*:`X'}'
11776     Substitutes `X' if one or more switches whose names start with
11777     `-S' are specified to GCC.  Normally `X' is substituted only once,
11778     no matter how many such switches appeared.  However, if `%*'
11779     appears somewhere in `X', then `X' is substituted once for each
11780     matching switch, with the `%*' replaced by the part of that switch
11781     matching the `*'.
11782
11783     If `%*' appears as the last part of a spec sequence then a space
11784     is added after the end of the last substitution.  If there is more
11785     text in the sequence, however, then a space is not generated.  This
11786     allows the `%*' substitution to be used as part of a larger
11787     string.  For example, a spec string like this:
11788
11789          %{mcu=*:--script=%*/memory.ld}
11790
11791     when matching an option like `-mcu=newchip' produces:
11792
11793          --script=newchip/memory.ld
11794
11795`%{.`S':`X'}'
11796     Substitutes `X', if processing a file with suffix `S'.
11797
11798`%{!.`S':`X'}'
11799     Substitutes `X', if _not_ processing a file with suffix `S'.
11800
11801`%{,`S':`X'}'
11802     Substitutes `X', if processing a file for language `S'.
11803
11804`%{!,`S':`X'}'
11805     Substitutes `X', if not processing a file for language `S'.
11806
11807`%{`S'|`P':`X'}'
11808     Substitutes `X' if either `-S' or `-P' is given to GCC.  This may
11809     be combined with `!', `.', `,', and `*' sequences as well,
11810     although they have a stronger binding than the `|'.  If `%*'
11811     appears in `X', all of the alternatives must be starred, and only
11812     the first matching alternative is substituted.
11813
11814     For example, a spec string like this:
11815
11816          %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
11817
11818     outputs the following command-line options from the following input
11819     command-line options:
11820
11821          fred.c        -foo -baz
11822          jim.d         -bar -boggle
11823          -d fred.c     -foo -baz -boggle
11824          -d jim.d      -bar -baz -boggle
11825
11826`%{S:X; T:Y; :D}'
11827     If `S' is given to GCC, substitutes `X'; else if `T' is given to
11828     GCC, substitutes `Y'; else substitutes `D'.  There can be as many
11829     clauses as you need.  This may be combined with `.', `,', `!',
11830     `|', and `*' as needed.
11831
11832
11833 The conditional text `X' in a %{`S':`X'} or similar construct may
11834contain other nested `%' constructs or spaces, or even newlines.  They
11835are processed as usual, as described above.  Trailing white space in
11836`X' is ignored.  White space may also appear anywhere on the left side
11837of the colon in these constructs, except between `.' or `*' and the
11838corresponding word.
11839
11840 The `-O', `-f', `-m', and `-W' switches are handled specifically in
11841these constructs.  If another value of `-O' or the negated form of a
11842`-f', `-m', or `-W' switch is found later in the command line, the
11843earlier switch value is ignored, except with {`S'*} where `S' is just
11844one letter, which passes all matching options.
11845
11846 The character `|' at the beginning of the predicate text is used to
11847indicate that a command should be piped to the following command, but
11848only if `-pipe' is specified.
11849
11850 It is built into GCC which switches take arguments and which do not.
11851(You might think it would be useful to generalize this to allow each
11852compiler's spec to say which switches take arguments.  But this cannot
11853be done in a consistent fashion.  GCC cannot even decide which input
11854files have been specified without knowing which switches take arguments,
11855and it must know which input files to compile in order to tell which
11856compilers to run).
11857
11858 GCC also knows implicitly that arguments starting in `-l' are to be
11859treated as compiler output files, and passed to the linker in their
11860proper position among the other output files.
11861
11862
11863File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC
11864
118653.16 Specifying Target Machine and Compiler Version
11866===================================================
11867
11868The usual way to run GCC is to run the executable called `gcc', or
11869`MACHINE-gcc' when cross-compiling, or `MACHINE-gcc-VERSION' to run a
11870version other than the one that was installed last.
11871
11872
11873File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
11874
118753.17 Hardware Models and Configurations
11876=======================================
11877
11878Each target machine types can have its own special options, starting
11879with `-m', to choose among various hardware models or
11880configurations--for example, 68010 vs 68020, floating coprocessor or
11881none.  A single installed version of the compiler can compile for any
11882model or configuration, according to the options specified.
11883
11884 Some configurations of the compiler also support additional special
11885options, usually for compatibility with other compilers on the same
11886platform.
11887
11888* Menu:
11889
11890* AArch64 Options::
11891* Adapteva Epiphany Options::
11892* ARC Options::
11893* ARM Options::
11894* AVR Options::
11895* Blackfin Options::
11896* C6X Options::
11897* CRIS Options::
11898* CR16 Options::
11899* Darwin Options::
11900* DEC Alpha Options::
11901* FR30 Options::
11902* FRV Options::
11903* GNU/Linux Options::
11904* H8/300 Options::
11905* HPPA Options::
11906* IA-64 Options::
11907* LM32 Options::
11908* M32C Options::
11909* M32R/D Options::
11910* M680x0 Options::
11911* MCore Options::
11912* MeP Options::
11913* MicroBlaze Options::
11914* MIPS Options::
11915* MMIX Options::
11916* MN10300 Options::
11917* Moxie Options::
11918* MSP430 Options::
11919* NDS32 Options::
11920* Nios II Options::
11921* Nvidia PTX Options::
11922* PDP-11 Options::
11923* picoChip Options::
11924* PowerPC Options::
11925* RL78 Options::
11926* RS/6000 and PowerPC Options::
11927* RX Options::
11928* S/390 and zSeries Options::
11929* Score Options::
11930* SH Options::
11931* Solaris 2 Options::
11932* SPARC Options::
11933* SPU Options::
11934* System V Options::
11935* TILE-Gx Options::
11936* TILEPro Options::
11937* V850 Options::
11938* VAX Options::
11939* Visium Options::
11940* VMS Options::
11941* VxWorks Options::
11942* x86 Options::
11943* x86 Windows Options::
11944* Xstormy16 Options::
11945* Xtensa Options::
11946* zSeries Options::
11947
11948
11949File: gcc.info,  Node: AArch64 Options,  Next: Adapteva Epiphany Options,  Up: Submodel Options
11950
119513.17.1 AArch64 Options
11952----------------------
11953
11954These options are defined for AArch64 implementations:
11955
11956`-mabi=NAME'
11957     Generate code for the specified data model.  Permissible values
11958     are `ilp32' for SysV-like data model where int, long int and
11959     pointer are 32-bit, and `lp64' for SysV-like data model where int
11960     is 32-bit, but long int and pointer are 64-bit.
11961
11962     The default depends on the specific target configuration.  Note
11963     that the LP64 and ILP32 ABIs are not link-compatible; you must
11964     compile your entire program with the same ABI, and link with a
11965     compatible set of libraries.
11966
11967`-mbig-endian'
11968     Generate big-endian code.  This is the default when GCC is
11969     configured for an `aarch64_be-*-*' target.
11970
11971`-mgeneral-regs-only'
11972     Generate code which uses only the general registers.
11973
11974`-mlittle-endian'
11975     Generate little-endian code.  This is the default when GCC is
11976     configured for an `aarch64-*-*' but not an `aarch64_be-*-*' target.
11977
11978`-mcmodel=tiny'
11979     Generate code for the tiny code model.  The program and its
11980     statically defined symbols must be within 1GB of each other.
11981     Pointers are 64 bits.  Programs can be statically or dynamically
11982     linked.  This model is not fully implemented and mostly treated as
11983     `small'.
11984
11985`-mcmodel=small'
11986     Generate code for the small code model.  The program and its
11987     statically defined symbols must be within 4GB of each other.
11988     Pointers are 64 bits.  Programs can be statically or dynamically
11989     linked.  This is the default code model.
11990
11991`-mcmodel=large'
11992     Generate code for the large code model.  This makes no assumptions
11993     about addresses and sizes of sections.  Pointers are 64 bits.
11994     Programs can be statically linked only.
11995
11996`-mstrict-align'
11997     Do not assume that unaligned memory references are handled by the
11998     system.
11999
12000`-momit-leaf-frame-pointer'
12001`-mno-omit-leaf-frame-pointer'
12002     Omit or keep the frame pointer in leaf functions.  The former
12003     behaviour is the default.
12004
12005`-mtls-dialect=desc'
12006     Use TLS descriptors as the thread-local storage mechanism for
12007     dynamic accesses of TLS variables.  This is the default.
12008
12009`-mtls-dialect=traditional'
12010     Use traditional TLS as the thread-local storage mechanism for
12011     dynamic accesses of TLS variables.
12012
12013`-mfix-cortex-a53-835769'
12014`-mno-fix-cortex-a53-835769'
12015     Enable or disable the workaround for the ARM Cortex-A53 erratum
12016     number 835769.  This involves inserting a NOP instruction between
12017     memory instructions and 64-bit integer multiply-accumulate
12018     instructions.
12019
12020`-mfix-cortex-a53-843419'
12021`-mno-fix-cortex-a53-843419'
12022     Enable or disable the workaround for the ARM Cortex-A53 erratum
12023     number 843419.  This erratum workaround is made at link time and
12024     this will only pass the corresponding flag to the linker.
12025
12026`-march=NAME'
12027     Specify the name of the target architecture, optionally suffixed
12028     by one or more feature modifiers.  This option has the form
12029     `-march=ARCH{+[no]FEATURE}*', where the only permissible value for
12030     ARCH is `armv8-a'.  The permissible values for FEATURE are
12031     documented in the sub-section below.
12032
12033     Where conflicting feature modifiers are specified, the right-most
12034     feature is used.
12035
12036     GCC uses this name to determine what kind of instructions it can
12037     emit when generating assembly code.
12038
12039     Where `-march' is specified without either of `-mtune' or `-mcpu'
12040     also being specified, the code is tuned to perform well across a
12041     range of target processors implementing the target architecture.
12042
12043`-mtune=NAME'
12044     Specify the name of the target processor for which GCC should tune
12045     the performance of the code.  Permissible values for this option
12046     are: `generic', `cortex-a53', `cortex-a57', `cortex-a72',
12047     `exynos-m1', `thunderx', `xgene1'.
12048
12049     Additionally, this option can specify that GCC should tune the
12050     performance of the code for a big.LITTLE system.  Permissible
12051     values for this option are: `cortex-a57.cortex-a53',
12052     `cortex-a72.cortex-a53'.
12053
12054     Where none of `-mtune=', `-mcpu=' or `-march=' are specified, the
12055     code is tuned to perform well across a range of target processors.
12056
12057     This option cannot be suffixed by feature modifiers.
12058
12059`-mcpu=NAME'
12060     Specify the name of the target processor, optionally suffixed by
12061     one or more feature modifiers.  This option has the form
12062     `-mcpu=CPU{+[no]FEATURE}*', where the permissible values for CPU
12063     are the same as those available for `-mtune'.
12064
12065     The permissible values for FEATURE are documented in the
12066     sub-section below.
12067
12068     Where conflicting feature modifiers are specified, the right-most
12069     feature is used.
12070
12071     GCC uses this name to determine what kind of instructions it can
12072     emit when generating assembly code (as if by `-march') and to
12073     determine the target processor for which to tune for performance
12074     (as if by `-mtune').  Where this option is used in conjunction
12075     with `-march' or `-mtune', those options take precedence over the
12076     appropriate part of this option.
12077
120783.17.1.1 `-march' and `-mcpu' Feature Modifiers
12079...............................................
12080
12081Feature modifiers used with `-march' and `-mcpu' can be one the
12082following:
12083
12084`crc'
12085     Enable CRC extension.
12086
12087`crypto'
12088     Enable Crypto extension.  This implies Advanced SIMD is enabled.
12089
12090`fp'
12091     Enable floating-point instructions.
12092
12093`simd'
12094     Enable Advanced SIMD instructions.  This implies floating-point
12095     instructions are enabled.  This is the default for all current
12096     possible values for options `-march' and `-mcpu='.
12097
12098
12099File: gcc.info,  Node: Adapteva Epiphany Options,  Next: ARC Options,  Prev: AArch64 Options,  Up: Submodel Options
12100
121013.17.2 Adapteva Epiphany Options
12102--------------------------------
12103
12104These `-m' options are defined for Adapteva Epiphany:
12105
12106`-mhalf-reg-file'
12107     Don't allocate any register in the range `r32'...`r63'.  That
12108     allows code to run on hardware variants that lack these registers.
12109
12110`-mprefer-short-insn-regs'
12111     Preferrentially allocate registers that allow short instruction
12112     generation.  This can result in increased instruction count, so
12113     this may either reduce or increase overall code size.
12114
12115`-mbranch-cost=NUM'
12116     Set the cost of branches to roughly NUM "simple" instructions.
12117     This cost is only a heuristic and is not guaranteed to produce
12118     consistent results across releases.
12119
12120`-mcmove'
12121     Enable the generation of conditional moves.
12122
12123`-mnops=NUM'
12124     Emit NUM NOPs before every other generated instruction.
12125
12126`-mno-soft-cmpsf'
12127     For single-precision floating-point comparisons, emit an `fsub'
12128     instruction and test the flags.  This is faster than a software
12129     comparison, but can get incorrect results in the presence of NaNs,
12130     or when two different small numbers are compared such that their
12131     difference is calculated as zero.  The default is `-msoft-cmpsf',
12132     which uses slower, but IEEE-compliant, software comparisons.
12133
12134`-mstack-offset=NUM'
12135     Set the offset between the top of the stack and the stack pointer.
12136     E.g., a value of 8 means that the eight bytes in the range
12137     `sp+0...sp+7' can be used by leaf functions without stack
12138     allocation.  Values other than `8' or `16' are untested and
12139     unlikely to work.  Note also that this option changes the ABI;
12140     compiling a program with a different stack offset than the
12141     libraries have been compiled with generally does not work.  This
12142     option can be useful if you want to evaluate if a different stack
12143     offset would give you better code, but to actually use a different
12144     stack offset to build working programs, it is recommended to
12145     configure the toolchain with the appropriate
12146     `--with-stack-offset=NUM' option.
12147
12148`-mno-round-nearest'
12149     Make the scheduler assume that the rounding mode has been set to
12150     truncating.  The default is `-mround-nearest'.
12151
12152`-mlong-calls'
12153     If not otherwise specified by an attribute, assume all calls might
12154     be beyond the offset range of the `b' / `bl' instructions, and
12155     therefore load the function address into a register before
12156     performing a (otherwise direct) call.  This is the default.
12157
12158`-mshort-calls'
12159     If not otherwise specified by an attribute, assume all direct
12160     calls are in the range of the `b' / `bl' instructions, so use
12161     these instructions for direct calls.  The default is
12162     `-mlong-calls'.
12163
12164`-msmall16'
12165     Assume addresses can be loaded as 16-bit unsigned values.  This
12166     does not apply to function addresses for which `-mlong-calls'
12167     semantics are in effect.
12168
12169`-mfp-mode=MODE'
12170     Set the prevailing mode of the floating-point unit.  This
12171     determines the floating-point mode that is provided and expected
12172     at function call and return time.  Making this mode match the mode
12173     you predominantly need at function start can make your programs
12174     smaller and faster by avoiding unnecessary mode switches.
12175
12176     MODE can be set to one the following values:
12177
12178    `caller'
12179          Any mode at function entry is valid, and retained or restored
12180          when the function returns, and when it calls other functions.
12181          This mode is useful for compiling libraries or other
12182          compilation units you might want to incorporate into
12183          different programs with different prevailing FPU modes, and
12184          the convenience of being able to use a single object file
12185          outweighs the size and speed overhead for any extra mode
12186          switching that might be needed, compared with what would be
12187          needed with a more specific choice of prevailing FPU mode.
12188
12189    `truncate'
12190          This is the mode used for floating-point calculations with
12191          truncating (i.e. round towards zero) rounding mode.  That
12192          includes conversion from floating point to integer.
12193
12194    `round-nearest'
12195          This is the mode used for floating-point calculations with
12196          round-to-nearest-or-even rounding mode.
12197
12198    `int'
12199          This is the mode used to perform integer calculations in the
12200          FPU, e.g.  integer multiply, or integer
12201          multiply-and-accumulate.
12202
12203     The default is `-mfp-mode=caller'
12204
12205`-mnosplit-lohi'
12206`-mno-postinc'
12207`-mno-postmodify'
12208     Code generation tweaks that disable, respectively, splitting of
12209     32-bit loads, generation of post-increment addresses, and
12210     generation of post-modify addresses.  The defaults are
12211     `msplit-lohi', `-mpost-inc', and `-mpost-modify'.
12212
12213`-mnovect-double'
12214     Change the preferred SIMD mode to SImode.  The default is
12215     `-mvect-double', which uses DImode as preferred SIMD mode.
12216
12217`-max-vect-align=NUM'
12218     The maximum alignment for SIMD vector mode types.  NUM may be 4 or
12219     8.  The default is 8.  Note that this is an ABI change, even
12220     though many library function interfaces are unaffected if they
12221     don't use SIMD vector modes in places that affect size and/or
12222     alignment of relevant types.
12223
12224`-msplit-vecmove-early'
12225     Split vector moves into single word moves before reload.  In
12226     theory this can give better register allocation, but so far the
12227     reverse seems to be generally the case.
12228
12229`-m1reg-REG'
12230     Specify a register to hold the constant -1, which makes loading
12231     small negative constants and certain bitmasks faster.  Allowable
12232     values for REG are `r43' and `r63', which specify use of that
12233     register as a fixed register, and `none', which means that no
12234     register is used for this purpose.  The default is `-m1reg-none'.
12235
12236
12237
12238File: gcc.info,  Node: ARC Options,  Next: ARM Options,  Prev: Adapteva Epiphany Options,  Up: Submodel Options
12239
122403.17.3 ARC Options
12241------------------
12242
12243The following options control the architecture variant for which code
12244is being compiled:
12245
12246`-mbarrel-shifter'
12247     Generate instructions supported by barrel shifter.  This is the
12248     default unless `-mcpu=ARC601' is in effect.
12249
12250`-mcpu=CPU'
12251     Set architecture type, register usage, and instruction scheduling
12252     parameters for CPU.  There are also shortcut alias options
12253     available for backward compatibility and convenience.  Supported
12254     values for CPU are
12255
12256    `ARC600'
12257          Compile for ARC600.  Aliases: `-mA6', `-mARC600'.
12258
12259    `ARC601'
12260          Compile for ARC601.  Alias: `-mARC601'.
12261
12262    `ARC700'
12263          Compile for ARC700.  Aliases: `-mA7', `-mARC700'.  This is
12264          the default when configured with `--with-cpu=arc700'.
12265
12266`-mdpfp'
12267`-mdpfp-compact'
12268     FPX: Generate Double Precision FPX instructions, tuned for the
12269     compact implementation.
12270
12271`-mdpfp-fast'
12272     FPX: Generate Double Precision FPX instructions, tuned for the fast
12273     implementation.
12274
12275`-mno-dpfp-lrsr'
12276     Disable LR and SR instructions from using FPX extension aux
12277     registers.
12278
12279`-mea'
12280     Generate Extended arithmetic instructions.  Currently only
12281     `divaw', `adds', `subs', and `sat16' are supported.  This is
12282     always enabled for `-mcpu=ARC700'.
12283
12284`-mno-mpy'
12285     Do not generate mpy instructions for ARC700.
12286
12287`-mmul32x16'
12288     Generate 32x16 bit multiply and mac instructions.
12289
12290`-mmul64'
12291     Generate mul64 and mulu64 instructions.  Only valid for
12292     `-mcpu=ARC600'.
12293
12294`-mnorm'
12295     Generate norm instruction.  This is the default if `-mcpu=ARC700'
12296     is in effect.
12297
12298`-mspfp'
12299`-mspfp-compact'
12300     FPX: Generate Single Precision FPX instructions, tuned for the
12301     compact implementation.
12302
12303`-mspfp-fast'
12304     FPX: Generate Single Precision FPX instructions, tuned for the fast
12305     implementation.
12306
12307`-msimd'
12308     Enable generation of ARC SIMD instructions via target-specific
12309     builtins.  Only valid for `-mcpu=ARC700'.
12310
12311`-msoft-float'
12312     This option ignored; it is provided for compatibility purposes
12313     only.  Software floating point code is emitted by default, and
12314     this default can overridden by FPX options; `mspfp',
12315     `mspfp-compact', or `mspfp-fast' for single precision, and `mdpfp',
12316     `mdpfp-compact', or `mdpfp-fast' for double precision.
12317
12318`-mswap'
12319     Generate swap instructions.
12320
12321
12322 The following options are passed through to the assembler, and also
12323define preprocessor macro symbols.
12324
12325`-mdsp-packa'
12326     Passed down to the assembler to enable the DSP Pack A extensions.
12327     Also sets the preprocessor symbol `__Xdsp_packa'.
12328
12329`-mdvbf'
12330     Passed down to the assembler to enable the dual viterbi butterfly
12331     extension.  Also sets the preprocessor symbol `__Xdvbf'.
12332
12333`-mlock'
12334     Passed down to the assembler to enable the Locked Load/Store
12335     Conditional extension.  Also sets the preprocessor symbol
12336     `__Xlock'.
12337
12338`-mmac-d16'
12339     Passed down to the assembler.  Also sets the preprocessor symbol
12340     `__Xxmac_d16'.
12341
12342`-mmac-24'
12343     Passed down to the assembler.  Also sets the preprocessor symbol
12344     `__Xxmac_24'.
12345
12346`-mrtsc'
12347     Passed down to the assembler to enable the 64-bit Time-Stamp
12348     Counter extension instruction.  Also sets the preprocessor symbol
12349     `__Xrtsc'.
12350
12351`-mswape'
12352     Passed down to the assembler to enable the swap byte ordering
12353     extension instruction.  Also sets the preprocessor symbol
12354     `__Xswape'.
12355
12356`-mtelephony'
12357     Passed down to the assembler to enable dual and single operand
12358     instructions for telephony.  Also sets the preprocessor symbol
12359     `__Xtelephony'.
12360
12361`-mxy'
12362     Passed down to the assembler to enable the XY Memory extension.
12363     Also sets the preprocessor symbol `__Xxy'.
12364
12365
12366 The following options control how the assembly code is annotated:
12367
12368`-misize'
12369     Annotate assembler instructions with estimated addresses.
12370
12371`-mannotate-align'
12372     Explain what alignment considerations lead to the decision to make
12373     an instruction short or long.
12374
12375
12376 The following options are passed through to the linker:
12377
12378`-marclinux'
12379     Passed through to the linker, to specify use of the `arclinux'
12380     emulation.  This option is enabled by default in tool chains built
12381     for `arc-linux-uclibc' and `arceb-linux-uclibc' targets when
12382     profiling is not requested.
12383
12384`-marclinux_prof'
12385     Passed through to the linker, to specify use of the
12386     `arclinux_prof' emulation.  This option is enabled by default in
12387     tool chains built for `arc-linux-uclibc' and `arceb-linux-uclibc'
12388     targets when profiling is requested.
12389
12390
12391 The following options control the semantics of generated code:
12392
12393`-mepilogue-cfi'
12394     Enable generation of call frame information for epilogues.
12395
12396`-mno-epilogue-cfi'
12397     Disable generation of call frame information for epilogues.
12398
12399`-mlong-calls'
12400     Generate call insns as register indirect calls, thus providing
12401     access to the full 32-bit address range.
12402
12403`-mmedium-calls'
12404     Don't use less than 25 bit addressing range for calls, which is the
12405     offset available for an unconditional branch-and-link instruction.
12406     Conditional execution of function calls is suppressed, to allow
12407     use of the 25-bit range, rather than the 21-bit range with
12408     conditional branch-and-link.  This is the default for tool chains
12409     built for `arc-linux-uclibc' and `arceb-linux-uclibc' targets.
12410
12411`-mno-sdata'
12412     Do not generate sdata references.  This is the default for tool
12413     chains built for `arc-linux-uclibc' and `arceb-linux-uclibc'
12414     targets.
12415
12416`-mucb-mcount'
12417     Instrument with mcount calls as used in UCB code.  I.e. do the
12418     counting in the callee, not the caller.  By default ARC
12419     instrumentation counts in the caller.
12420
12421`-mvolatile-cache'
12422     Use ordinarily cached memory accesses for volatile references.
12423     This is the default.
12424
12425`-mno-volatile-cache'
12426     Enable cache bypass for volatile references.
12427
12428
12429 The following options fine tune code generation:
12430`-malign-call'
12431     Do alignment optimizations for call instructions.
12432
12433`-mauto-modify-reg'
12434     Enable the use of pre/post modify with register displacement.
12435
12436`-mbbit-peephole'
12437     Enable bbit peephole2.
12438
12439`-mno-brcc'
12440     This option disables a target-specific pass in `arc_reorg' to
12441     generate `BRcc' instructions.  It has no effect on `BRcc'
12442     generation driven by the combiner pass.
12443
12444`-mcase-vector-pcrel'
12445     Use pc-relative switch case tables - this enables case table
12446     shortening.  This is the default for `-Os'.
12447
12448`-mcompact-casesi'
12449     Enable compact casesi pattern.  This is the default for `-Os'.
12450
12451`-mno-cond-exec'
12452     Disable ARCompact specific pass to generate conditional execution
12453     instructions.  Due to delay slot scheduling and interactions
12454     between operand numbers, literal sizes, instruction lengths, and
12455     the support for conditional execution, the target-independent pass
12456     to generate conditional execution is often lacking, so the ARC
12457     port has kept a special pass around that tries to find more
12458     conditional execution generating opportunities after register
12459     allocation, branch shortening, and delay slot scheduling have been
12460     done.  This pass generally, but not always, improves performance
12461     and code size, at the cost of extra compilation time, which is why
12462     there is an option to switch it off.  If you have a problem with
12463     call instructions exceeding their allowable offset range because
12464     they are conditionalized, you should consider using
12465     `-mmedium-calls' instead.
12466
12467`-mearly-cbranchsi'
12468     Enable pre-reload use of the cbranchsi pattern.
12469
12470`-mexpand-adddi'
12471     Expand `adddi3' and `subdi3' at rtl generation time into `add.f',
12472     `adc' etc.
12473
12474`-mindexed-loads'
12475     Enable the use of indexed loads.  This can be problematic because
12476     some optimizers then assume that indexed stores exist, which is not
12477     the case.
12478
12479`-mlra'
12480     Enable Local Register Allocation.  This is still experimental for
12481     ARC, so by default the compiler uses standard reload (i.e.
12482     `-mno-lra').
12483
12484`-mlra-priority-none'
12485     Don't indicate any priority for target registers.
12486
12487`-mlra-priority-compact'
12488     Indicate target register priority for r0..r3 / r12..r15.
12489
12490`-mlra-priority-noncompact'
12491     Reduce target regsiter priority for r0..r3 / r12..r15.
12492
12493`-mno-millicode'
12494     When optimizing for size (using `-Os'), prologues and epilogues
12495     that have to save or restore a large number of registers are often
12496     shortened by using call to a special function in libgcc; this is
12497     referred to as a _millicode_ call.  As these calls can pose
12498     performance issues, and/or cause linking issues when linking in a
12499     nonstandard way, this option is provided to turn off millicode call
12500     generation.
12501
12502`-mmixed-code'
12503     Tweak register allocation to help 16-bit instruction generation.
12504     This generally has the effect of decreasing the average
12505     instruction size while increasing the instruction count.
12506
12507`-mq-class'
12508     Enable 'q' instruction alternatives.  This is the default for
12509     `-Os'.
12510
12511`-mRcq'
12512     Enable Rcq constraint handling - most short code generation
12513     depends on this.  This is the default.
12514
12515`-mRcw'
12516     Enable Rcw constraint handling - ccfsm condexec mostly depends on
12517     this.  This is the default.
12518
12519`-msize-level=LEVEL'
12520     Fine-tune size optimization with regards to instruction lengths
12521     and alignment.  The recognized values for LEVEL are:
12522    `0'
12523          No size optimization.  This level is deprecated and treated
12524          like `1'.
12525
12526    `1'
12527          Short instructions are used opportunistically.
12528
12529    `2'
12530          In addition, alignment of loops and of code after barriers
12531          are dropped.
12532
12533    `3'
12534          In addition, optional data alignment is dropped, and the
12535          option `Os' is enabled.
12536
12537
12538     This defaults to `3' when `-Os' is in effect.  Otherwise, the
12539     behavior when this is not set is equivalent to level `1'.
12540
12541`-mtune=CPU'
12542     Set instruction scheduling parameters for CPU, overriding any
12543     implied by `-mcpu='.
12544
12545     Supported values for CPU are
12546
12547    `ARC600'
12548          Tune for ARC600 cpu.
12549
12550    `ARC601'
12551          Tune for ARC601 cpu.
12552
12553    `ARC700'
12554          Tune for ARC700 cpu with standard multiplier block.
12555
12556    `ARC700-xmac'
12557          Tune for ARC700 cpu with XMAC block.
12558
12559    `ARC725D'
12560          Tune for ARC725D cpu.
12561
12562    `ARC750D'
12563          Tune for ARC750D cpu.
12564
12565
12566`-mmultcost=NUM'
12567     Cost to assume for a multiply instruction, with `4' being equal to
12568     a normal instruction.
12569
12570`-munalign-prob-threshold=PROBABILITY'
12571     Set probability threshold for unaligning branches.  When tuning
12572     for `ARC700' and optimizing for speed, branches without filled
12573     delay slot are preferably emitted unaligned and long, unless
12574     profiling indicates that the probability for the branch to be taken
12575     is below PROBABILITY.  *Note Cross-profiling::.  The default is
12576     (REG_BR_PROB_BASE/2), i.e. 5000.
12577
12578
12579 The following options are maintained for backward compatibility, but
12580are now deprecated and will be removed in a future release:
12581
12582`-margonaut'
12583     Obsolete FPX.
12584
12585`-mbig-endian'
12586`-EB'
12587     Compile code for big endian targets.  Use of these options is now
12588     deprecated.  Users wanting big-endian code, should use the
12589     `arceb-elf32' and `arceb-linux-uclibc' targets when building the
12590     tool chain, for which big-endian is the default.
12591
12592`-mlittle-endian'
12593`-EL'
12594     Compile code for little endian targets.  Use of these options is
12595     now deprecated.  Users wanting little-endian code should use the
12596     `arc-elf32' and `arc-linux-uclibc' targets when building the tool
12597     chain, for which little-endian is the default.
12598
12599`-mbarrel_shifter'
12600     Replaced by `-mbarrel-shifter'.
12601
12602`-mdpfp_compact'
12603     Replaced by `-mdpfp-compact'.
12604
12605`-mdpfp_fast'
12606     Replaced by `-mdpfp-fast'.
12607
12608`-mdsp_packa'
12609     Replaced by `-mdsp-packa'.
12610
12611`-mEA'
12612     Replaced by `-mea'.
12613
12614`-mmac_24'
12615     Replaced by `-mmac-24'.
12616
12617`-mmac_d16'
12618     Replaced by `-mmac-d16'.
12619
12620`-mspfp_compact'
12621     Replaced by `-mspfp-compact'.
12622
12623`-mspfp_fast'
12624     Replaced by `-mspfp-fast'.
12625
12626`-mtune=CPU'
12627     Values `arc600', `arc601', `arc700' and `arc700-xmac' for CPU are
12628     replaced by `ARC600', `ARC601', `ARC700' and `ARC700-xmac'
12629     respectively
12630
12631`-multcost=NUM'
12632     Replaced by `-mmultcost'.
12633
12634
12635
12636File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
12637
126383.17.4 ARM Options
12639------------------
12640
12641These `-m' options are defined for the ARM port:
12642
12643`-mabi=NAME'
12644     Generate code for the specified ABI.  Permissible values are:
12645     `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'.
12646
12647`-mapcs-frame'
12648     Generate a stack frame that is compliant with the ARM Procedure
12649     Call Standard for all functions, even if this is not strictly
12650     necessary for correct execution of the code.  Specifying
12651     `-fomit-frame-pointer' with this option causes the stack frames
12652     not to be generated for leaf functions.  The default is
12653     `-mno-apcs-frame'.  This option is deprecated.
12654
12655`-mapcs'
12656     This is a synonym for `-mapcs-frame' and is deprecated.
12657
12658`-mthumb-interwork'
12659     Generate code that supports calling between the ARM and Thumb
12660     instruction sets.  Without this option, on pre-v5 architectures,
12661     the two instruction sets cannot be reliably used inside one
12662     program.  The default is `-mno-thumb-interwork', since slightly
12663     larger code is generated when `-mthumb-interwork' is specified.
12664     In AAPCS configurations this option is meaningless.
12665
12666`-mno-sched-prolog'
12667     Prevent the reordering of instructions in the function prologue,
12668     or the merging of those instruction with the instructions in the
12669     function's body.  This means that all functions start with a
12670     recognizable set of instructions (or in fact one of a choice from
12671     a small set of different function prologues), and this information
12672     can be used to locate the start of functions inside an executable
12673     piece of code.  The default is `-msched-prolog'.
12674
12675`-mfloat-abi=NAME'
12676     Specifies which floating-point ABI to use.  Permissible values
12677     are: `soft', `softfp' and `hard'.
12678
12679     Specifying `soft' causes GCC to generate output containing library
12680     calls for floating-point operations.  `softfp' allows the
12681     generation of code using hardware floating-point instructions, but
12682     still uses the soft-float calling conventions.  `hard' allows
12683     generation of floating-point instructions and uses FPU-specific
12684     calling conventions.
12685
12686     The default depends on the specific target configuration.  Note
12687     that the hard-float and soft-float ABIs are not link-compatible;
12688     you must compile your entire program with the same ABI, and link
12689     with a compatible set of libraries.
12690
12691`-mlittle-endian'
12692     Generate code for a processor running in little-endian mode.  This
12693     is the default for all standard configurations.
12694
12695`-mbig-endian'
12696     Generate code for a processor running in big-endian mode; the
12697     default is to compile code for a little-endian processor.
12698
12699`-march=NAME'
12700     This specifies the name of the target ARM architecture.  GCC uses
12701     this name to determine what kind of instructions it can emit when
12702     generating assembly code.  This option can be used in conjunction
12703     with or instead of the `-mcpu=' option.  Permissible names are:
12704     `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5',
12705     `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2',
12706     `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r',
12707     `armv7-m', `armv7e-m', `armv7ve', `armv8-a', `armv8-a+crc',
12708     `iwmmxt', `iwmmxt2', `ep9312'.
12709
12710     `-march=armv7ve' is the armv7-a architecture with virtualization
12711     extensions.
12712
12713     `-march=armv8-a+crc' enables code generation for the ARMv8-A
12714     architecture together with the optional CRC32 extensions.
12715
12716     `-march=native' causes the compiler to auto-detect the architecture
12717     of the build computer.  At present, this feature is only supported
12718     on GNU/Linux, and not all architectures are recognized.  If the
12719     auto-detect is unsuccessful the option has no effect.
12720
12721`-mtune=NAME'
12722     This option specifies the name of the target ARM processor for
12723     which GCC should tune the performance of the code.  For some ARM
12724     implementations better performance can be obtained by using this
12725     option.  Permissible names are: `arm2', `arm250', `arm3', `arm6',
12726     `arm60', `arm600', `arm610', `arm620', `arm7', `arm7m', `arm7d',
12727     `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', `arm700i',
12728     `arm710', `arm710c', `arm7100', `arm720', `arm7500', `arm7500fe',
12729     `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t', `arm740t',
12730     `strongarm', `strongarm110', `strongarm1100', `strongarm1110',
12731     `arm8', `arm810', `arm9', `arm9e', `arm920', `arm920t', `arm922t',
12732     `arm946e-s', `arm966e-s', `arm968e-s', `arm926ej-s', `arm940t',
12733     `arm9tdmi', `arm10tdmi', `arm1020t', `arm1026ej-s', `arm10e',
12734     `arm1020e', `arm1022e', `arm1136j-s', `arm1136jf-s', `mpcore',
12735     `mpcorenovfp', `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s',
12736     `arm1176jzf-s', `cortex-a5', `cortex-a7', `cortex-a8', `cortex-a9',
12737     `cortex-a12', `cortex-a15', `cortex-a53', `cortex-a57',
12738     `cortex-a72', `cortex-r4', `cortex-r4f', `cortex-r5', `cortex-r7',
12739     `cortex-m7', `cortex-m4', `cortex-m3', `cortex-m1', `cortex-m0',
12740     `cortex-m0plus', `cortex-m1.small-multiply',
12741     `cortex-m0.small-multiply', `cortex-m0plus.small-multiply',
12742     `exynos-m1', `marvell-pj4', `xscale', `iwmmxt', `iwmmxt2',
12743     `ep9312', `fa526', `fa626', `fa606te', `fa626te', `fmp626',
12744     `fa726te', `xgene1'.
12745
12746     Additionally, this option can specify that GCC should tune the
12747     performance of the code for a big.LITTLE system.  Permissible
12748     names are: `cortex-a15.cortex-a7', `cortex-a57.cortex-a53',
12749     `cortex-a72.cortex-a53'.
12750
12751     `-mtune=generic-ARCH' specifies that GCC should tune the
12752     performance for a blend of processors within architecture ARCH.
12753     The aim is to generate code that run well on the current most
12754     popular processors, balancing between optimizations that benefit
12755     some CPUs in the range, and avoiding performance pitfalls of other
12756     CPUs.  The effects of this option may change in future GCC
12757     versions as CPU models come and go.
12758
12759     `-mtune=native' causes the compiler to auto-detect the CPU of the
12760     build computer.  At present, this feature is only supported on
12761     GNU/Linux, and not all architectures are recognized.  If the
12762     auto-detect is unsuccessful the option has no effect.
12763
12764`-mcpu=NAME'
12765     This specifies the name of the target ARM processor.  GCC uses
12766     this name to derive the name of the target ARM architecture (as if
12767     specified by `-march') and the ARM processor type for which to
12768     tune for performance (as if specified by `-mtune').  Where this
12769     option is used in conjunction with `-march' or `-mtune', those
12770     options take precedence over the appropriate part of this option.
12771
12772     Permissible names for this option are the same as those for
12773     `-mtune'.
12774
12775     `-mcpu=generic-ARCH' is also permissible, and is equivalent to
12776     `-march=ARCH -mtune=generic-ARCH'.  See `-mtune' for more
12777     information.
12778
12779     `-mcpu=native' causes the compiler to auto-detect the CPU of the
12780     build computer.  At present, this feature is only supported on
12781     GNU/Linux, and not all architectures are recognized.  If the
12782     auto-detect is unsuccessful the option has no effect.
12783
12784`-mfpu=NAME'
12785     This specifies what floating-point hardware (or hardware
12786     emulation) is available on the target.  Permissible names are:
12787     `vfp', `vfpv3', `vfpv3-fp16', `vfpv3-d16', `vfpv3-d16-fp16',
12788     `vfpv3xd', `vfpv3xd-fp16', `neon', `neon-fp16', `vfpv4',
12789     `vfpv4-d16', `fpv4-sp-d16', `neon-vfpv4', `fpv5-d16',
12790     `fpv5-sp-d16', `fp-armv8', `neon-fp-armv8', and
12791     `crypto-neon-fp-armv8'.
12792
12793     If `-msoft-float' is specified this specifies the format of
12794     floating-point values.
12795
12796     If the selected floating-point hardware includes the NEON extension
12797     (e.g. `-mfpu'=`neon'), note that floating-point operations are not
12798     generated by GCC's auto-vectorization pass unless
12799     `-funsafe-math-optimizations' is also specified.  This is because
12800     NEON hardware does not fully implement the IEEE 754 standard for
12801     floating-point arithmetic (in particular denormal values are
12802     treated as zero), so the use of NEON instructions may lead to a
12803     loss of precision.
12804
12805`-mfp16-format=NAME'
12806     Specify the format of the `__fp16' half-precision floating-point
12807     type.  Permissible names are `none', `ieee', and `alternative';
12808     the default is `none', in which case the `__fp16' type is not
12809     defined.  *Note Half-Precision::, for more information.
12810
12811`-mstructure-size-boundary=N'
12812     The sizes of all structures and unions are rounded up to a multiple
12813     of the number of bits set by this option.  Permissible values are
12814     8, 32 and 64.  The default value varies for different toolchains.
12815     For the COFF targeted toolchain the default value is 8.  A value
12816     of 64 is only allowed if the underlying ABI supports it.
12817
12818     Specifying a larger number can produce faster, more efficient
12819     code, but can also increase the size of the program.  Different
12820     values are potentially incompatible.  Code compiled with one value
12821     cannot necessarily expect to work with code or libraries compiled
12822     with another value, if they exchange information using structures
12823     or unions.
12824
12825`-mabort-on-noreturn'
12826     Generate a call to the function `abort' at the end of a `noreturn'
12827     function.  It is executed if the function tries to return.
12828
12829`-mlong-calls'
12830`-mno-long-calls'
12831     Tells the compiler to perform function calls by first loading the
12832     address of the function into a register and then performing a
12833     subroutine call on this register.  This switch is needed if the
12834     target function lies outside of the 64-megabyte addressing range
12835     of the offset-based version of subroutine call instruction.
12836
12837     Even if this switch is enabled, not all function calls are turned
12838     into long calls.  The heuristic is that static functions, functions
12839     that have the `short_call' attribute, functions that are inside
12840     the scope of a `#pragma no_long_calls' directive, and functions
12841     whose definitions have already been compiled within the current
12842     compilation unit are not turned into long calls.  The exceptions
12843     to this rule are that weak function definitions, functions with
12844     the `long_call' attribute or the `section' attribute, and
12845     functions that are within the scope of a `#pragma long_calls'
12846     directive are always turned into long calls.
12847
12848     This feature is not enabled by default.  Specifying
12849     `-mno-long-calls' restores the default behavior, as does placing
12850     the function calls within the scope of a `#pragma long_calls_off'
12851     directive.  Note these switches have no effect on how the compiler
12852     generates code to handle function calls via function pointers.
12853
12854`-msingle-pic-base'
12855     Treat the register used for PIC addressing as read-only, rather
12856     than loading it in the prologue for each function.  The runtime
12857     system is responsible for initializing this register with an
12858     appropriate value before execution begins.
12859
12860`-mpic-register=REG'
12861     Specify the register to be used for PIC addressing.  For standard
12862     PIC base case, the default is any suitable register determined by
12863     compiler.  For single PIC base case, the default is `R9' if target
12864     is EABI based or stack-checking is enabled, otherwise the default
12865     is `R10'.
12866
12867`-mpic-data-is-text-relative'
12868     Assume that each data segments are relative to text segment at
12869     load time.  Therefore, it permits addressing data using
12870     PC-relative operations.  This option is on by default for targets
12871     other than VxWorks RTP.
12872
12873`-mpoke-function-name'
12874     Write the name of each function into the text section, directly
12875     preceding the function prologue.  The generated code is similar to
12876     this:
12877
12878               t0
12879                   .ascii "arm_poke_function_name", 0
12880                   .align
12881               t1
12882                   .word 0xff000000 + (t1 - t0)
12883               arm_poke_function_name
12884                   mov     ip, sp
12885                   stmfd   sp!, {fp, ip, lr, pc}
12886                   sub     fp, ip, #4
12887
12888     When performing a stack backtrace, code can inspect the value of
12889     `pc' stored at `fp + 0'.  If the trace function then looks at
12890     location `pc - 12' and the top 8 bits are set, then we know that
12891     there is a function name embedded immediately preceding this
12892     location and has length `((pc[-3]) & 0xff000000)'.
12893
12894`-mthumb'
12895`-marm'
12896     Select between generating code that executes in ARM and Thumb
12897     states.  The default for most configurations is to generate code
12898     that executes in ARM state, but the default can be changed by
12899     configuring GCC with the `--with-mode='STATE configure option.
12900
12901`-mtpcs-frame'
12902     Generate a stack frame that is compliant with the Thumb Procedure
12903     Call Standard for all non-leaf functions.  (A leaf function is one
12904     that does not call any other functions.)  The default is
12905     `-mno-tpcs-frame'.
12906
12907`-mtpcs-leaf-frame'
12908     Generate a stack frame that is compliant with the Thumb Procedure
12909     Call Standard for all leaf functions.  (A leaf function is one
12910     that does not call any other functions.)  The default is
12911     `-mno-apcs-leaf-frame'.
12912
12913`-mcallee-super-interworking'
12914     Gives all externally visible functions in the file being compiled
12915     an ARM instruction set header which switches to Thumb mode before
12916     executing the rest of the function.  This allows these functions
12917     to be called from non-interworking code.  This option is not valid
12918     in AAPCS configurations because interworking is enabled by default.
12919
12920`-mcaller-super-interworking'
12921     Allows calls via function pointers (including virtual functions) to
12922     execute correctly regardless of whether the target code has been
12923     compiled for interworking or not.  There is a small overhead in
12924     the cost of executing a function pointer if this option is
12925     enabled.  This option is not valid in AAPCS configurations because
12926     interworking is enabled by default.
12927
12928`-mtp=NAME'
12929     Specify the access model for the thread local storage pointer.
12930     The valid models are `soft', which generates calls to
12931     `__aeabi_read_tp', `cp15', which fetches the thread pointer from
12932     `cp15' directly (supported in the arm6k architecture), and `auto',
12933     which uses the best available method for the selected processor.
12934     The default setting is `auto'.
12935
12936`-mtls-dialect=DIALECT'
12937     Specify the dialect to use for accessing thread local storage.  Two
12938     DIALECTs are supported--`gnu' and `gnu2'.  The `gnu' dialect
12939     selects the original GNU scheme for supporting local and global
12940     dynamic TLS models.  The `gnu2' dialect selects the GNU descriptor
12941     scheme, which provides better performance for shared libraries.
12942     The GNU descriptor scheme is compatible with the original scheme,
12943     but does require new assembler, linker and library support.
12944     Initial and local exec TLS models are unaffected by this option
12945     and always use the original scheme.
12946
12947`-mword-relocations'
12948     Only generate absolute relocations on word-sized values (i.e.
12949     R_ARM_ABS32).  This is enabled by default on targets (uClinux,
12950     SymbianOS) where the runtime loader imposes this restriction, and
12951     when `-fpic' or `-fPIC' is specified.
12952
12953`-mfix-cortex-m3-ldrd'
12954     Some Cortex-M3 cores can cause data corruption when `ldrd'
12955     instructions with overlapping destination and base registers are
12956     used.  This option avoids generating these instructions.  This
12957     option is enabled by default when `-mcpu=cortex-m3' is specified.
12958
12959`-munaligned-access'
12960`-mno-unaligned-access'
12961     Enables (or disables) reading and writing of 16- and 32- bit values
12962     from addresses that are not 16- or 32- bit aligned.  By default
12963     unaligned access is disabled for all pre-ARMv6 and all ARMv6-M
12964     architectures, and enabled for all other architectures.  If
12965     unaligned access is not enabled then words in packed data
12966     structures are accessed a byte at a time.
12967
12968     The ARM attribute `Tag_CPU_unaligned_access' is set in the
12969     generated object file to either true or false, depending upon the
12970     setting of this option.  If unaligned access is enabled then the
12971     preprocessor symbol `__ARM_FEATURE_UNALIGNED' is also defined.
12972
12973`-mneon-for-64bits'
12974     Enables using Neon to handle scalar 64-bits operations. This is
12975     disabled by default since the cost of moving data from core
12976     registers to Neon is high.
12977
12978`-mslow-flash-data'
12979     Assume loading data from flash is slower than fetching instruction.
12980     Therefore literal load is minimized for better performance.  This
12981     option is only supported when compiling for ARMv7 M-profile and
12982     off by default.
12983
12984`-masm-syntax-unified'
12985     Assume inline assembler is using unified asm syntax.  The default
12986     is currently off which implies divided syntax.  Currently this
12987     option is available only for Thumb1 and has no effect on ARM state
12988     and Thumb2.  However, this may change in future releases of GCC.
12989     Divided syntax should be considered deprecated.
12990
12991`-mrestrict-it'
12992     Restricts generation of IT blocks to conform to the rules of ARMv8.
12993     IT blocks can only contain a single 16-bit instruction from a
12994     select set of instructions. This option is on by default for ARMv8
12995     Thumb mode.
12996
12997`-mprint-tune-info'
12998     Print CPU tuning information as comment in assembler file.  This is
12999     an option used only for regression testing of the compiler and not
13000     intended for ordinary use in compiling code.  This option is
13001     disabled by default.
13002
13003
13004File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
13005
130063.17.5 AVR Options
13007------------------
13008
13009These options are defined for AVR implementations:
13010
13011`-mmcu=MCU'
13012     Specify Atmel AVR instruction set architectures (ISA) or MCU type.
13013
13014     The default for this option is `avr2'.
13015
13016     GCC supports the following AVR devices and ISAs:
13017
13018    `avr2'
13019          "Classic" devices with up to 8 KiB of program memory.
13020          MCU = `attiny22', `attiny26', `at90c8534', `at90s2313',
13021          `at90s2323', `at90s2333', `at90s2343', `at90s4414',
13022          `at90s4433', `at90s4434', `at90s8515', `at90s8535'.
13023
13024    `avr25'
13025          "Classic" devices with up to 8 KiB of program memory and with
13026          the `MOVW' instruction.
13027          MCU = `ata5272', `ata6616c', `attiny13', `attiny13a',
13028          `attiny2313', `attiny2313a', `attiny24', `attiny24a',
13029          `attiny25', `attiny261', `attiny261a', `attiny43u',
13030          `attiny4313', `attiny44', `attiny44a', `attiny441',
13031          `attiny45', `attiny461', `attiny461a', `attiny48',
13032          `attiny828', `attiny84', `attiny84a', `attiny841',
13033          `attiny85', `attiny861', `attiny861a', `attiny87',
13034          `attiny88', `at86rf401'.
13035
13036    `avr3'
13037          "Classic" devices with 16 KiB up to 64 KiB of  program memory.
13038          MCU = `at43usb355', `at76c711'.
13039
13040    `avr31'
13041          "Classic" devices with 128 KiB of program memory.
13042          MCU = `atmega103', `at43usb320'.
13043
13044    `avr35'
13045          "Classic" devices with 16 KiB up to 64 KiB of program memory
13046          and with the `MOVW' instruction.
13047          MCU = `ata5505', `ata6617c', `ata664251', `atmega16u2',
13048          `atmega32u2', `atmega8u2', `attiny1634', `attiny167',
13049          `at90usb162', `at90usb82'.
13050
13051    `avr4'
13052          "Enhanced" devices with up to 8 KiB of program memory.
13053          MCU = `ata6285', `ata6286', `ata6289', `ata6612c',
13054          `atmega48', `atmega48a', `atmega48p', `atmega48pa',
13055          `atmega8', `atmega8a', `atmega8hva', `atmega8515',
13056          `atmega8535', `atmega88', `atmega88a', `atmega88p',
13057          `atmega88pa', `at90pwm1', `at90pwm2', `at90pwm2b',
13058          `at90pwm3', `at90pwm3b', `at90pwm81'.
13059
13060    `avr5'
13061          "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
13062          MCU = `ata5702m322', `ata5782', `ata5790', `ata5790n',
13063          `ata5795', `ata5831', `ata6613c', `ata6614q', `atmega16',
13064          `atmega16a', `atmega16hva', `atmega16hva2', `atmega16hvb',
13065          `atmega16hvbrevb', `atmega16m1', `atmega16u4', `atmega161',
13066          `atmega162', `atmega163', `atmega164a', `atmega164p',
13067          `atmega164pa', `atmega165', `atmega165a', `atmega165p',
13068          `atmega165pa', `atmega168', `atmega168a', `atmega168p',
13069          `atmega168pa', `atmega169', `atmega169a', `atmega169p',
13070          `atmega169pa', `atmega32', `atmega32a', `atmega32c1',
13071          `atmega32hvb', `atmega32hvbrevb', `atmega32m1', `atmega32u4',
13072          `atmega32u6', `atmega323', `atmega324a', `atmega324p',
13073          `atmega324pa', `atmega325', `atmega325a', `atmega325p',
13074          `atmega325pa', `atmega3250', `atmega3250a', `atmega3250p',
13075          `atmega3250pa', `atmega328', `atmega328p', `atmega329',
13076          `atmega329a', `atmega329p', `atmega329pa', `atmega3290',
13077          `atmega3290a', `atmega3290p', `atmega3290pa', `atmega406',
13078          `atmega64', `atmega64a', `atmega64c1', `atmega64hve',
13079          `atmega64hve2', `atmega64m1', `atmega64rfr2', `atmega640',
13080          `atmega644', `atmega644a', `atmega644p', `atmega644pa',
13081          `atmega644rfr2', `atmega645', `atmega645a', `atmega645p',
13082          `atmega6450', `atmega6450a', `atmega6450p', `atmega649',
13083          `atmega649a', `atmega649p', `atmega6490', `atmega6490a',
13084          `atmega6490p', `at90can32', `at90can64', `at90pwm161',
13085          `at90pwm216', `at90pwm316', `at90scr100', `at90usb646',
13086          `at90usb647', `at94k', `m3000'.
13087
13088    `avr51'
13089          "Enhanced" devices with 128 KiB of program memory.
13090          MCU = `atmega128', `atmega128a', `atmega128rfa1',
13091          `atmega128rfr2', `atmega1280', `atmega1281', `atmega1284',
13092          `atmega1284p', `atmega1284rfr2', `at90can128', `at90usb1286',
13093          `at90usb1287'.
13094
13095    `avr6'
13096          "Enhanced" devices with 3-byte PC, i.e. with more than
13097          128 KiB of program memory.
13098          MCU = `atmega256rfr2', `atmega2560', `atmega2561',
13099          `atmega2564rfr2'.
13100
13101    `avrxmega2'
13102          "XMEGA" devices with more than 8 KiB and up to 64 KiB of
13103          program memory.
13104          MCU = `atxmega16a4', `atxmega16a4u', `atxmega16c4',
13105          `atxmega16d4', `atxmega16e5', `atxmega32a4', `atxmega32a4u',
13106          `atxmega32c3', `atxmega32c4', `atxmega32d3', `atxmega32d4',
13107          `atxmega32e5', `atxmega8e5'.
13108
13109    `avrxmega4'
13110          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
13111          program memory.
13112          MCU = `atxmega64a3', `atxmega64a3u', `atxmega64a4u',
13113          `atxmega64b1', `atxmega64b3', `atxmega64c3', `atxmega64d3',
13114          `atxmega64d4'.
13115
13116    `avrxmega5'
13117          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
13118          program memory and more than 64 KiB of RAM.
13119          MCU = `atxmega64a1', `atxmega64a1u'.
13120
13121    `avrxmega6'
13122          "XMEGA" devices with more than 128 KiB of program memory.
13123          MCU = `atxmega128a3', `atxmega128a3u', `atxmega128b1',
13124          `atxmega128b3', `atxmega128c3', `atxmega128d3',
13125          `atxmega128d4', `atxmega192a3', `atxmega192a3u',
13126          `atxmega192c3', `atxmega192d3', `atxmega256a3',
13127          `atxmega256a3b', `atxmega256a3bu', `atxmega256a3u',
13128          `atxmega256c3', `atxmega256d3', `atxmega384c3',
13129          `atxmega384d3'.
13130
13131    `avrxmega7'
13132          "XMEGA" devices with more than 128 KiB of program memory and
13133          more than 64 KiB of RAM.
13134          MCU = `atxmega128a1', `atxmega128a1u', `atxmega128a4u'.
13135
13136    `avrtiny'
13137          "TINY" Tiny core devices with 512 B up to 4 KiB of program
13138          memory.
13139          MCU = `attiny10', `attiny20', `attiny4', `attiny40',
13140          `attiny5', `attiny9'.
13141
13142    `avr1'
13143          This ISA is implemented by the minimal AVR core and supported
13144          for assembler only.
13145          MCU = `attiny11', `attiny12', `attiny15', `attiny28',
13146          `at90s1200'.
13147
13148
13149`-maccumulate-args'
13150     Accumulate outgoing function arguments and acquire/release the
13151     needed stack space for outgoing function arguments once in function
13152     prologue/epilogue.  Without this option, outgoing arguments are
13153     pushed before calling a function and popped afterwards.
13154
13155     Popping the arguments after the function call can be expensive on
13156     AVR so that accumulating the stack space might lead to smaller
13157     executables because arguments need not to be removed from the
13158     stack after such a function call.
13159
13160     This option can lead to reduced code size for functions that
13161     perform several calls to functions that get their arguments on the
13162     stack like calls to printf-like functions.
13163
13164`-mbranch-cost=COST'
13165     Set the branch costs for conditional branch instructions to COST.
13166     Reasonable values for COST are small, non-negative integers. The
13167     default branch cost is 0.
13168
13169`-mcall-prologues'
13170     Functions prologues/epilogues are expanded as calls to appropriate
13171     subroutines.  Code size is smaller.
13172
13173`-mint8'
13174     Assume `int' to be 8-bit integer.  This affects the sizes of all
13175     types: a `char' is 1 byte, an `int' is 1 byte, a `long' is 2 bytes,
13176     and `long long' is 4 bytes.  Please note that this option does not
13177     conform to the C standards, but it results in smaller code size.
13178
13179`-mn-flash=NUM'
13180     Assume that the flash memory has a size of NUM times 64 KiB.
13181
13182`-mno-interrupts'
13183     Generated code is not compatible with hardware interrupts.  Code
13184     size is smaller.
13185
13186`-mrelax'
13187     Try to replace `CALL' resp. `JMP' instruction by the shorter
13188     `RCALL' resp. `RJMP' instruction if applicable.  Setting `-mrelax'
13189     just adds the `--mlink-relax' option to the assembler's command
13190     line and the `--relax' option to the linker's command line.
13191
13192     Jump relaxing is performed by the linker because jump offsets are
13193     not known before code is located. Therefore, the assembler code
13194     generated by the compiler is the same, but the instructions in the
13195     executable may differ from instructions in the assembler code.
13196
13197     Relaxing must be turned on if linker stubs are needed, see the
13198     section on `EIND' and linker stubs below.
13199
13200`-mrmw'
13201     Assume that the device supports the Read-Modify-Write instructions
13202     `XCH', `LAC', `LAS' and `LAT'.
13203
13204`-msp8'
13205     Treat the stack pointer register as an 8-bit register, i.e. assume
13206     the high byte of the stack pointer is zero.  In general, you don't
13207     need to set this option by hand.
13208
13209     This option is used internally by the compiler to select and build
13210     multilibs for architectures `avr2' and `avr25'.  These
13211     architectures mix devices with and without `SPH'.  For any setting
13212     other than `-mmcu=avr2' or `-mmcu=avr25' the compiler driver adds
13213     or removes this option from the compiler proper's command line,
13214     because the compiler then knows if the device or architecture has
13215     an 8-bit stack pointer and thus no `SPH' register or not.
13216
13217`-mstrict-X'
13218     Use address register `X' in a way proposed by the hardware.  This
13219     means that `X' is only used in indirect, post-increment or
13220     pre-decrement addressing.
13221
13222     Without this option, the `X' register may be used in the same way
13223     as `Y' or `Z' which then is emulated by additional instructions.
13224     For example, loading a value with `X+const' addressing with a
13225     small non-negative `const < 64' to a register RN is performed as
13226
13227          adiw r26, const   ; X += const
13228          ld   RN, X        ; RN = *X
13229          sbiw r26, const   ; X -= const
13230
13231`-mtiny-stack'
13232     Only change the lower 8 bits of the stack pointer.
13233
13234`-nodevicelib'
13235     Don't link against AVR-LibC's device specific library `libdev.a'.
13236
13237`-Waddr-space-convert'
13238     Warn about conversions between address spaces in the case where the
13239     resulting address space is not contained in the incoming address
13240     space.
13241
132423.17.5.1 `EIND' and Devices with More Than 128 Ki Bytes of Flash
13243................................................................
13244
13245Pointers in the implementation are 16 bits wide.  The address of a
13246function or label is represented as word address so that indirect jumps
13247and calls can target any code address in the range of 64 Ki words.
13248
13249 In order to facilitate indirect jump on devices with more than 128 Ki
13250bytes of program memory space, there is a special function register
13251called `EIND' that serves as most significant part of the target address
13252when `EICALL' or `EIJMP' instructions are used.
13253
13254 Indirect jumps and calls on these devices are handled as follows by
13255the compiler and are subject to some limitations:
13256
13257   * The compiler never sets `EIND'.
13258
13259   * The compiler uses `EIND' implicitely in `EICALL'/`EIJMP'
13260     instructions or might read `EIND' directly in order to emulate an
13261     indirect call/jump by means of a `RET' instruction.
13262
13263   * The compiler assumes that `EIND' never changes during the startup
13264     code or during the application. In particular, `EIND' is not
13265     saved/restored in function or interrupt service routine
13266     prologue/epilogue.
13267
13268   * For indirect calls to functions and computed goto, the linker
13269     generates _stubs_. Stubs are jump pads sometimes also called
13270     _trampolines_. Thus, the indirect call/jump jumps to such a stub.
13271     The stub contains a direct jump to the desired address.
13272
13273   * Linker relaxation must be turned on so that the linker generates
13274     the stubs correctly in all situations. See the compiler option
13275     `-mrelax' and the linker option `--relax'.  There are corner cases
13276     where the linker is supposed to generate stubs but aborts without
13277     relaxation and without a helpful error message.
13278
13279   * The default linker script is arranged for code with `EIND = 0'.
13280     If code is supposed to work for a setup with `EIND != 0', a custom
13281     linker script has to be used in order to place the sections whose
13282     name start with `.trampolines' into the segment where `EIND'
13283     points to.
13284
13285   * The startup code from libgcc never sets `EIND'.  Notice that
13286     startup code is a blend of code from libgcc and AVR-LibC.  For the
13287     impact of AVR-LibC on `EIND', see the
13288     AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/).
13289
13290   * It is legitimate for user-specific startup code to set up `EIND'
13291     early, for example by means of initialization code located in
13292     section `.init3'. Such code runs prior to general startup code
13293     that initializes RAM and calls constructors, but after the bit of
13294     startup code from AVR-LibC that sets `EIND' to the segment where
13295     the vector table is located.
13296          #include <avr/io.h>
13297
13298          static void
13299          __attribute__((section(".init3"),naked,used,no_instrument_function))
13300          init3_set_eind (void)
13301          {
13302            __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
13303                            "out %i0,r24" :: "n" (&EIND) : "r24","memory");
13304          }
13305
13306     The `__trampolines_start' symbol is defined in the linker script.
13307
13308   * Stubs are generated automatically by the linker if the following
13309     two conditions are met:
13310        - The address of a label is taken by means of the `gs' modifier
13311          (short for _generate stubs_) like so:
13312               LDI r24, lo8(gs(FUNC))
13313               LDI r25, hi8(gs(FUNC))
13314
13315        - The final location of that label is in a code segment
13316          _outside_ the segment where the stubs are located.
13317
13318   * The compiler emits such `gs' modifiers for code labels in the
13319     following situations:
13320        - Taking address of a function or code label.
13321
13322        - Computed goto.
13323
13324        - If prologue-save function is used, see `-mcall-prologues'
13325          command-line option.
13326
13327        - Switch/case dispatch tables. If you do not want such dispatch
13328          tables you can specify the `-fno-jump-tables' command-line
13329          option.
13330
13331        - C and C++ constructors/destructors called during
13332          startup/shutdown.
13333
13334        - If the tools hit a `gs()' modifier explained above.
13335
13336   * Jumping to non-symbolic addresses like so is _not_ supported:
13337
13338          int main (void)
13339          {
13340              /* Call function at word address 0x2 */
13341              return ((int(*)(void)) 0x2)();
13342          }
13343
13344     Instead, a stub has to be set up, i.e. the function has to be
13345     called through a symbol (`func_4' in the example):
13346
13347          int main (void)
13348          {
13349              extern int func_4 (void);
13350
13351              /* Call function at byte address 0x4 */
13352              return func_4();
13353          }
13354
13355     and the application be linked with `-Wl,--defsym,func_4=0x4'.
13356     Alternatively, `func_4' can be defined in the linker script.
13357
133583.17.5.2 Handling of the `RAMPD', `RAMPX', `RAMPY' and `RAMPZ' Special Function Registers
13359.........................................................................................
13360
13361Some AVR devices support memories larger than the 64 KiB range that can
13362be accessed with 16-bit pointers.  To access memory locations outside
13363this 64 KiB range, the contentent of a `RAMP' register is used as high
13364part of the address: The `X', `Y', `Z' address register is concatenated
13365with the `RAMPX', `RAMPY', `RAMPZ' special function register,
13366respectively, to get a wide address. Similarly, `RAMPD' is used
13367together with direct addressing.
13368
13369   * The startup code initializes the `RAMP' special function registers
13370     with zero.
13371
13372   * If a *note named address space: AVR Named Address Spaces. other
13373     than generic or `__flash' is used, then `RAMPZ' is set as needed
13374     before the operation.
13375
13376   * If the device supports RAM larger than 64 KiB and the compiler
13377     needs to change `RAMPZ' to accomplish an operation, `RAMPZ' is
13378     reset to zero after the operation.
13379
13380   * If the device comes with a specific `RAMP' register, the ISR
13381     prologue/epilogue saves/restores that SFR and initializes it with
13382     zero in case the ISR code might (implicitly) use it.
13383
13384   * RAM larger than 64 KiB is not supported by GCC for AVR targets.
13385     If you use inline assembler to read from locations outside the
13386     16-bit address range and change one of the `RAMP' registers, you
13387     must reset it to zero after the access.
13388
13389
133903.17.5.3 AVR Built-in Macros
13391............................
13392
13393GCC defines several built-in macros so that the user code can test for
13394the presence or absence of features.  Almost any of the following
13395built-in macros are deduced from device capabilities and thus triggered
13396by the `-mmcu=' command-line option.
13397
13398 For even more AVR-specific built-in macros see *note AVR Named Address
13399Spaces:: and *note AVR Built-in Functions::.
13400
13401`__AVR_ARCH__'
13402     Build-in macro that resolves to a decimal number that identifies
13403     the architecture and depends on the `-mmcu=MCU' option.  Possible
13404     values are:
13405
13406     `2', `25', `3', `31', `35', `4', `5', `51', `6'
13407
13408     for MCU=`avr2', `avr25', `avr3', `avr31', `avr35', `avr4', `avr5',
13409     `avr51', `avr6',
13410
13411     respectively and
13412
13413     `100', `102', `104', `105', `106', `107'
13414
13415     for MCU=`avrtiny', `avrxmega2', `avrxmega4', `avrxmega5',
13416     `avrxmega6', `avrxmega7', respectively.  If MCU specifies a
13417     device, this built-in macro is set accordingly. For example, with
13418     `-mmcu=atmega8' the macro is defined to `4'.
13419
13420`__AVR_DEVICE__'
13421     Setting `-mmcu=DEVICE' defines this built-in macro which reflects
13422     the device's name. For example, `-mmcu=atmega8' defines the
13423     built-in macro `__AVR_ATmega8__', `-mmcu=attiny261a' defines
13424     `__AVR_ATtiny261A__', etc.
13425
13426     The built-in macros' names follow the scheme `__AVR_DEVICE__'
13427     where DEVICE is the device name as from the AVR user manual. The
13428     difference between DEVICE in the built-in macro and DEVICE in
13429     `-mmcu=DEVICE' is that the latter is always lowercase.
13430
13431     If DEVICE is not a device but only a core architecture like
13432     `avr51', this macro is not defined.
13433
13434`__AVR_DEVICE_NAME__'
13435     Setting `-mmcu=DEVICE' defines this built-in macro to the device's
13436     name. For example, with `-mmcu=atmega8' the macro is defined to
13437     `atmega8'.
13438
13439     If DEVICE is not a device but only a core architecture like
13440     `avr51', this macro is not defined.
13441
13442`__AVR_XMEGA__'
13443     The device / architecture belongs to the XMEGA family of devices.
13444
13445`__AVR_HAVE_ELPM__'
13446     The device has the the `ELPM' instruction.
13447
13448`__AVR_HAVE_ELPMX__'
13449     The device has the `ELPM RN,Z' and `ELPM RN,Z+' instructions.
13450
13451`__AVR_HAVE_MOVW__'
13452     The device has the `MOVW' instruction to perform 16-bit
13453     register-register moves.
13454
13455`__AVR_HAVE_LPMX__'
13456     The device has the `LPM RN,Z' and `LPM RN,Z+' instructions.
13457
13458`__AVR_HAVE_MUL__'
13459     The device has a hardware multiplier.
13460
13461`__AVR_HAVE_JMP_CALL__'
13462     The device has the `JMP' and `CALL' instructions.  This is the
13463     case for devices with at least 16 KiB of program memory.
13464
13465`__AVR_HAVE_EIJMP_EICALL__'
13466`__AVR_3_BYTE_PC__'
13467     The device has the `EIJMP' and `EICALL' instructions.  This is the
13468     case for devices with more than 128 KiB of program memory.  This
13469     also means that the program counter (PC) is 3 bytes wide.
13470
13471`__AVR_2_BYTE_PC__'
13472     The program counter (PC) is 2 bytes wide. This is the case for
13473     devices with up to 128 KiB of program memory.
13474
13475`__AVR_HAVE_8BIT_SP__'
13476`__AVR_HAVE_16BIT_SP__'
13477     The stack pointer (SP) register is treated as 8-bit respectively
13478     16-bit register by the compiler.  The definition of these macros
13479     is affected by `-mtiny-stack'.
13480
13481`__AVR_HAVE_SPH__'
13482`__AVR_SP8__'
13483     The device has the SPH (high part of stack pointer) special
13484     function register or has an 8-bit stack pointer, respectively.
13485     The definition of these macros is affected by `-mmcu=' and in the
13486     cases of `-mmcu=avr2' and `-mmcu=avr25' also by `-msp8'.
13487
13488`__AVR_HAVE_RAMPD__'
13489`__AVR_HAVE_RAMPX__'
13490`__AVR_HAVE_RAMPY__'
13491`__AVR_HAVE_RAMPZ__'
13492     The device has the `RAMPD', `RAMPX', `RAMPY', `RAMPZ' special
13493     function register, respectively.
13494
13495`__NO_INTERRUPTS__'
13496     This macro reflects the `-mno-interrupts' command-line option.
13497
13498`__AVR_ERRATA_SKIP__'
13499`__AVR_ERRATA_SKIP_JMP_CALL__'
13500     Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
13501     instructions because of a hardware erratum.  Skip instructions are
13502     `SBRS', `SBRC', `SBIS', `SBIC' and `CPSE'.  The second macro is
13503     only defined if `__AVR_HAVE_JMP_CALL__' is also set.
13504
13505`__AVR_ISA_RMW__'
13506     The device has Read-Modify-Write instructions (XCH, LAC, LAS and
13507     LAT).
13508
13509`__AVR_SFR_OFFSET__=OFFSET'
13510     Instructions that can address I/O special function registers
13511     directly like `IN', `OUT', `SBI', etc. may use a different address
13512     as if addressed by an instruction to access RAM like `LD' or
13513     `STS'. This offset depends on the device architecture and has to
13514     be subtracted from the RAM address in order to get the respective
13515     I/O address.
13516
13517`__WITH_AVRLIBC__'
13518     The compiler is configured to be used together with AVR-Libc.  See
13519     the `--with-avrlibc' configure option.
13520
13521
13522
13523File: gcc.info,  Node: Blackfin Options,  Next: C6X Options,  Prev: AVR Options,  Up: Submodel Options
13524
135253.17.6 Blackfin Options
13526-----------------------
13527
13528`-mcpu=CPU[-SIREVISION]'
13529     Specifies the name of the target Blackfin processor.  Currently,
13530     CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522',
13531     `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532',
13532     `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542',
13533     `bf544', `bf547', `bf548', `bf549', `bf542m', `bf544m', `bf547m',
13534     `bf548m', `bf549m', `bf561', `bf592'.
13535
13536     The optional SIREVISION specifies the silicon revision of the
13537     target Blackfin processor.  Any workarounds available for the
13538     targeted silicon revision are enabled.  If SIREVISION is `none',
13539     no workarounds are enabled.  If SIREVISION is `any', all
13540     workarounds for the targeted processor are enabled.  The
13541     `__SILICON_REVISION__' macro is defined to two hexadecimal digits
13542     representing the major and minor numbers in the silicon revision.
13543     If SIREVISION is `none', the `__SILICON_REVISION__' is not
13544     defined.  If SIREVISION is `any', the `__SILICON_REVISION__' is
13545     defined to be `0xffff'.  If this optional SIREVISION is not used,
13546     GCC assumes the latest known silicon revision of the targeted
13547     Blackfin processor.
13548
13549     GCC defines a preprocessor macro for the specified CPU.  For the
13550     `bfin-elf' toolchain, this option causes the hardware BSP provided
13551     by libgloss to be linked in if `-msim' is not given.
13552
13553     Without this option, `bf532' is used as the processor by default.
13554
13555     Note that support for `bf561' is incomplete.  For `bf561', only
13556     the preprocessor macro is defined.
13557
13558`-msim'
13559     Specifies that the program will be run on the simulator.  This
13560     causes the simulator BSP provided by libgloss to be linked in.
13561     This option has effect only for `bfin-elf' toolchain.  Certain
13562     other options, such as `-mid-shared-library' and `-mfdpic', imply
13563     `-msim'.
13564
13565`-momit-leaf-frame-pointer'
13566     Don't keep the frame pointer in a register for leaf functions.
13567     This avoids the instructions to save, set up and restore frame
13568     pointers and makes an extra register available in leaf functions.
13569     The option `-fomit-frame-pointer' removes the frame pointer for
13570     all functions, which might make debugging harder.
13571
13572`-mspecld-anomaly'
13573     When enabled, the compiler ensures that the generated code does not
13574     contain speculative loads after jump instructions. If this option
13575     is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined.
13576
13577`-mno-specld-anomaly'
13578     Don't generate extra code to prevent speculative loads from
13579     occurring.
13580
13581`-mcsync-anomaly'
13582     When enabled, the compiler ensures that the generated code does not
13583     contain CSYNC or SSYNC instructions too soon after conditional
13584     branches.  If this option is used,
13585     `__WORKAROUND_SPECULATIVE_SYNCS' is defined.
13586
13587`-mno-csync-anomaly'
13588     Don't generate extra code to prevent CSYNC or SSYNC instructions
13589     from occurring too soon after a conditional branch.
13590
13591`-mlow-64k'
13592     When enabled, the compiler is free to take advantage of the
13593     knowledge that the entire program fits into the low 64k of memory.
13594
13595`-mno-low-64k'
13596     Assume that the program is arbitrarily large.  This is the default.
13597
13598`-mstack-check-l1'
13599     Do stack checking using information placed into L1 scratchpad
13600     memory by the uClinux kernel.
13601
13602`-mid-shared-library'
13603     Generate code that supports shared libraries via the library ID
13604     method.  This allows for execute in place and shared libraries in
13605     an environment without virtual memory management.  This option
13606     implies `-fPIC'.  With a `bfin-elf' target, this option implies
13607     `-msim'.
13608
13609`-mno-id-shared-library'
13610     Generate code that doesn't assume ID-based shared libraries are
13611     being used.  This is the default.
13612
13613`-mleaf-id-shared-library'
13614     Generate code that supports shared libraries via the library ID
13615     method, but assumes that this library or executable won't link
13616     against any other ID shared libraries.  That allows the compiler
13617     to use faster code for jumps and calls.
13618
13619`-mno-leaf-id-shared-library'
13620     Do not assume that the code being compiled won't link against any
13621     ID shared libraries.  Slower code is generated for jump and call
13622     insns.
13623
13624`-mshared-library-id=n'
13625     Specifies the identification number of the ID-based shared library
13626     being compiled.  Specifying a value of 0 generates more compact
13627     code; specifying other values forces the allocation of that number
13628     to the current library but is no more space- or time-efficient
13629     than omitting this option.
13630
13631`-msep-data'
13632     Generate code that allows the data segment to be located in a
13633     different area of memory from the text segment.  This allows for
13634     execute in place in an environment without virtual memory
13635     management by eliminating relocations against the text section.
13636
13637`-mno-sep-data'
13638     Generate code that assumes that the data segment follows the text
13639     segment.  This is the default.
13640
13641`-mlong-calls'
13642`-mno-long-calls'
13643     Tells the compiler to perform function calls by first loading the
13644     address of the function into a register and then performing a
13645     subroutine call on this register.  This switch is needed if the
13646     target function lies outside of the 24-bit addressing range of the
13647     offset-based version of subroutine call instruction.
13648
13649     This feature is not enabled by default.  Specifying
13650     `-mno-long-calls' restores the default behavior.  Note these
13651     switches have no effect on how the compiler generates code to
13652     handle function calls via function pointers.
13653
13654`-mfast-fp'
13655     Link with the fast floating-point library. This library relaxes
13656     some of the IEEE floating-point standard's rules for checking
13657     inputs against Not-a-Number (NAN), in the interest of performance.
13658
13659`-minline-plt'
13660     Enable inlining of PLT entries in function calls to functions that
13661     are not known to bind locally.  It has no effect without `-mfdpic'.
13662
13663`-mmulticore'
13664     Build a standalone application for multicore Blackfin processors.
13665     This option causes proper start files and link scripts supporting
13666     multicore to be used, and defines the macro `__BFIN_MULTICORE'.
13667     It can only be used with `-mcpu=bf561[-SIREVISION]'.
13668
13669     This option can be used with `-mcorea' or `-mcoreb', which selects
13670     the one-application-per-core programming model.  Without `-mcorea'
13671     or `-mcoreb', the single-application/dual-core programming model
13672     is used. In this model, the main function of Core B should be
13673     named as `coreb_main'.
13674
13675     If this option is not used, the single-core application programming
13676     model is used.
13677
13678`-mcorea'
13679     Build a standalone application for Core A of BF561 when using the
13680     one-application-per-core programming model. Proper start files and
13681     link scripts are used to support Core A, and the macro
13682     `__BFIN_COREA' is defined.  This option can only be used in
13683     conjunction with `-mmulticore'.
13684
13685`-mcoreb'
13686     Build a standalone application for Core B of BF561 when using the
13687     one-application-per-core programming model. Proper start files and
13688     link scripts are used to support Core B, and the macro
13689     `__BFIN_COREB' is defined. When this option is used, `coreb_main'
13690     should be used instead of `main'.  This option can only be used in
13691     conjunction with `-mmulticore'.
13692
13693`-msdram'
13694     Build a standalone application for SDRAM. Proper start files and
13695     link scripts are used to put the application into SDRAM, and the
13696     macro `__BFIN_SDRAM' is defined.  The loader should initialize
13697     SDRAM before loading the application.
13698
13699`-micplb'
13700     Assume that ICPLBs are enabled at run time.  This has an effect on
13701     certain anomaly workarounds.  For Linux targets, the default is to
13702     assume ICPLBs are enabled; for standalone applications the default
13703     is off.
13704
13705
13706File: gcc.info,  Node: C6X Options,  Next: CRIS Options,  Prev: Blackfin Options,  Up: Submodel Options
13707
137083.17.7 C6X Options
13709------------------
13710
13711`-march=NAME'
13712     This specifies the name of the target architecture.  GCC uses this
13713     name to determine what kind of instructions it can emit when
13714     generating assembly code.  Permissible names are: `c62x', `c64x',
13715     `c64x+', `c67x', `c67x+', `c674x'.
13716
13717`-mbig-endian'
13718     Generate code for a big-endian target.
13719
13720`-mlittle-endian'
13721     Generate code for a little-endian target.  This is the default.
13722
13723`-msim'
13724     Choose startup files and linker script suitable for the simulator.
13725
13726`-msdata=default'
13727     Put small global and static data in the `.neardata' section, which
13728     is pointed to by register `B14'.  Put small uninitialized global
13729     and static data in the `.bss' section, which is adjacent to the
13730     `.neardata' section.  Put small read-only data into the `.rodata'
13731     section.  The corresponding sections used for large pieces of data
13732     are `.fardata', `.far' and `.const'.
13733
13734`-msdata=all'
13735     Put all data, not just small objects, into the sections reserved
13736     for small data, and use addressing relative to the `B14' register
13737     to access them.
13738
13739`-msdata=none'
13740     Make no use of the sections reserved for small data, and use
13741     absolute addresses to access all data.  Put all initialized global
13742     and static data in the `.fardata' section, and all uninitialized
13743     data in the `.far' section.  Put all constant data into the
13744     `.const' section.
13745
13746
13747File: gcc.info,  Node: CRIS Options,  Next: CR16 Options,  Prev: C6X Options,  Up: Submodel Options
13748
137493.17.8 CRIS Options
13750-------------------
13751
13752These options are defined specifically for the CRIS ports.
13753
13754`-march=ARCHITECTURE-TYPE'
13755`-mcpu=ARCHITECTURE-TYPE'
13756     Generate code for the specified architecture.  The choices for
13757     ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively
13758     ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is `v0' except for
13759     cris-axis-linux-gnu, where the default is `v10'.
13760
13761`-mtune=ARCHITECTURE-TYPE'
13762     Tune to ARCHITECTURE-TYPE everything applicable about the generated
13763     code, except for the ABI and the set of available instructions.
13764     The choices for ARCHITECTURE-TYPE are the same as for
13765     `-march=ARCHITECTURE-TYPE'.
13766
13767`-mmax-stack-frame=N'
13768     Warn when the stack frame of a function exceeds N bytes.
13769
13770`-metrax4'
13771`-metrax100'
13772     The options `-metrax4' and `-metrax100' are synonyms for
13773     `-march=v3' and `-march=v8' respectively.
13774
13775`-mmul-bug-workaround'
13776`-mno-mul-bug-workaround'
13777     Work around a bug in the `muls' and `mulu' instructions for CPU
13778     models where it applies.  This option is active by default.
13779
13780`-mpdebug'
13781     Enable CRIS-specific verbose debug-related information in the
13782     assembly code.  This option also has the effect of turning off the
13783     `#NO_APP' formatted-code indicator to the assembler at the
13784     beginning of the assembly file.
13785
13786`-mcc-init'
13787     Do not use condition-code results from previous instruction;
13788     always emit compare and test instructions before use of condition
13789     codes.
13790
13791`-mno-side-effects'
13792     Do not emit instructions with side effects in addressing modes
13793     other than post-increment.
13794
13795`-mstack-align'
13796`-mno-stack-align'
13797`-mdata-align'
13798`-mno-data-align'
13799`-mconst-align'
13800`-mno-const-align'
13801     These options (`no-' options) arrange (eliminate arrangements) for
13802     the stack frame, individual data and constants to be aligned for
13803     the maximum single data access size for the chosen CPU model.  The
13804     default is to arrange for 32-bit alignment.  ABI details such as
13805     structure layout are not affected by these options.
13806
13807`-m32-bit'
13808`-m16-bit'
13809`-m8-bit'
13810     Similar to the stack- data- and const-align options above, these
13811     options arrange for stack frame, writable data and constants to
13812     all be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
13813     alignment.
13814
13815`-mno-prologue-epilogue'
13816`-mprologue-epilogue'
13817     With `-mno-prologue-epilogue', the normal function prologue and
13818     epilogue which set up the stack frame are omitted and no return
13819     instructions or return sequences are generated in the code.  Use
13820     this option only together with visual inspection of the compiled
13821     code: no warnings or errors are generated when call-saved
13822     registers must be saved, or storage for local variables needs to
13823     be allocated.
13824
13825`-mno-gotplt'
13826`-mgotplt'
13827     With `-fpic' and `-fPIC', don't generate (do generate) instruction
13828     sequences that load addresses for functions from the PLT part of
13829     the GOT rather than (traditional on other architectures) calls to
13830     the PLT.  The default is `-mgotplt'.
13831
13832`-melf'
13833     Legacy no-op option only recognized with the cris-axis-elf and
13834     cris-axis-linux-gnu targets.
13835
13836`-mlinux'
13837     Legacy no-op option only recognized with the cris-axis-linux-gnu
13838     target.
13839
13840`-sim'
13841     This option, recognized for the cris-axis-elf, arranges to link
13842     with input-output functions from a simulator library.  Code,
13843     initialized data and zero-initialized data are allocated
13844     consecutively.
13845
13846`-sim2'
13847     Like `-sim', but pass linker options to locate initialized data at
13848     0x40000000 and zero-initialized data at 0x80000000.
13849
13850
13851File: gcc.info,  Node: CR16 Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options
13852
138533.17.9 CR16 Options
13854-------------------
13855
13856These options are defined specifically for the CR16 ports.
13857
13858`-mmac'
13859     Enable the use of multiply-accumulate instructions. Disabled by
13860     default.
13861
13862`-mcr16cplus'
13863`-mcr16c'
13864     Generate code for CR16C or CR16C+ architecture. CR16C+ architecture
13865     is default.
13866
13867`-msim'
13868     Links the library libsim.a which is in compatible with simulator.
13869     Applicable to ELF compiler only.
13870
13871`-mint32'
13872     Choose integer type as 32-bit wide.
13873
13874`-mbit-ops'
13875     Generates `sbit'/`cbit' instructions for bit manipulations.
13876
13877`-mdata-model=MODEL'
13878     Choose a data model. The choices for MODEL are `near', `far' or
13879     `medium'. `medium' is default.  However, `far' is not valid with
13880     `-mcr16c', as the CR16C architecture does not support the far data
13881     model.
13882
13883
13884File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CR16 Options,  Up: Submodel Options
13885
138863.17.10 Darwin Options
13887----------------------
13888
13889These options are defined for all architectures running the Darwin
13890operating system.
13891
13892 FSF GCC on Darwin does not create "fat" object files; it creates an
13893object file for the single architecture that GCC was built to target.
13894Apple's GCC on Darwin does create "fat" files if multiple `-arch'
13895options are used; it does so by running the compiler or linker multiple
13896times and joining the results together with `lipo'.
13897
13898 The subtype of the file created (like `ppc7400' or `ppc970' or `i686')
13899is determined by the flags that specify the ISA that GCC is targeting,
13900like `-mcpu' or `-march'.  The `-force_cpusubtype_ALL' option can be
13901used to override this.
13902
13903 The Darwin tools vary in their behavior when presented with an ISA
13904mismatch.  The assembler, `as', only permits instructions to be used
13905that are valid for the subtype of the file it is generating, so you
13906cannot put 64-bit instructions in a `ppc750' object file.  The linker
13907for shared libraries, `/usr/bin/libtool', fails and prints an error if
13908asked to create a shared library with a less restrictive subtype than
13909its input files (for instance, trying to put a `ppc970' object file in
13910a `ppc7400' library).  The linker for executables, `ld', quietly gives
13911the executable the most restrictive subtype of any of its input files.
13912
13913`-FDIR'
13914     Add the framework directory DIR to the head of the list of
13915     directories to be searched for header files.  These directories are
13916     interleaved with those specified by `-I' options and are scanned
13917     in a left-to-right order.
13918
13919     A framework directory is a directory with frameworks in it.  A
13920     framework is a directory with a `Headers' and/or `PrivateHeaders'
13921     directory contained directly in it that ends in `.framework'.  The
13922     name of a framework is the name of this directory excluding the
13923     `.framework'.  Headers associated with the framework are found in
13924     one of those two directories, with `Headers' being searched first.
13925     A subframework is a framework directory that is in a framework's
13926     `Frameworks' directory.  Includes of subframework headers can only
13927     appear in a header of a framework that contains the subframework,
13928     or in a sibling subframework header.  Two subframeworks are
13929     siblings if they occur in the same framework.  A subframework
13930     should not have the same name as a framework; a warning is issued
13931     if this is violated.  Currently a subframework cannot have
13932     subframeworks; in the future, the mechanism may be extended to
13933     support this.  The standard frameworks can be found in
13934     `/System/Library/Frameworks' and `/Library/Frameworks'.  An
13935     example include looks like `#include <Framework/header.h>', where
13936     `Framework' denotes the name of the framework and `header.h' is
13937     found in the `PrivateHeaders' or `Headers' directory.
13938
13939`-iframeworkDIR'
13940     Like `-F' except the directory is a treated as a system directory.
13941     The main difference between this `-iframework' and `-F' is that
13942     with `-iframework' the compiler does not warn about constructs
13943     contained within header files found via DIR.  This option is valid
13944     only for the C family of languages.
13945
13946`-gused'
13947     Emit debugging information for symbols that are used.  For stabs
13948     debugging format, this enables `-feliminate-unused-debug-symbols'.
13949     This is by default ON.
13950
13951`-gfull'
13952     Emit debugging information for all symbols and types.
13953
13954`-mmacosx-version-min=VERSION'
13955     The earliest version of MacOS X that this executable will run on
13956     is VERSION.  Typical values of VERSION include `10.1', `10.2', and
13957     `10.3.9'.
13958
13959     If the compiler was built to use the system's headers by default,
13960     then the default for this option is the system version on which the
13961     compiler is running, otherwise the default is to make choices that
13962     are compatible with as many systems and code bases as possible.
13963
13964`-mkernel'
13965     Enable kernel development mode.  The `-mkernel' option sets
13966     `-static', `-fno-common', `-fno-use-cxa-atexit',
13967     `-fno-exceptions', `-fno-non-call-exceptions', `-fapple-kext',
13968     `-fno-weak' and `-fno-rtti' where applicable.  This mode also sets
13969     `-mno-altivec', `-msoft-float', `-fno-builtin' and `-mlong-branch'
13970     for PowerPC targets.
13971
13972`-mone-byte-bool'
13973     Override the defaults for `bool' so that `sizeof(bool)==1'.  By
13974     default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC
13975     and `1' when compiling for Darwin/x86, so this option has no
13976     effect on x86.
13977
13978     *Warning:* The `-mone-byte-bool' switch causes GCC to generate
13979     code that is not binary compatible with code generated without
13980     that switch.  Using this switch may require recompiling all other
13981     modules in a program, including system libraries.  Use this switch
13982     to conform to a non-default data model.
13983
13984`-mfix-and-continue'
13985`-ffix-and-continue'
13986`-findirect-data'
13987     Generate code suitable for fast turnaround development, such as to
13988     allow GDB to dynamically load `.o' files into already-running
13989     programs.  `-findirect-data' and `-ffix-and-continue' are provided
13990     for backwards compatibility.
13991
13992`-all_load'
13993     Loads all members of static archive libraries.  See man ld(1) for
13994     more information.
13995
13996`-arch_errors_fatal'
13997     Cause the errors having to do with files that have the wrong
13998     architecture to be fatal.
13999
14000`-bind_at_load'
14001     Causes the output file to be marked such that the dynamic linker
14002     will bind all undefined references when the file is loaded or
14003     launched.
14004
14005`-bundle'
14006     Produce a Mach-o bundle format file.  See man ld(1) for more
14007     information.
14008
14009`-bundle_loader EXECUTABLE'
14010     This option specifies the EXECUTABLE that will load the build
14011     output file being linked.  See man ld(1) for more information.
14012
14013`-dynamiclib'
14014     When passed this option, GCC produces a dynamic library instead of
14015     an executable when linking, using the Darwin `libtool' command.
14016
14017`-force_cpusubtype_ALL'
14018     This causes GCC's output file to have the `ALL' subtype, instead of
14019     one controlled by the `-mcpu' or `-march' option.
14020
14021`-allowable_client  CLIENT_NAME'
14022`-client_name'
14023`-compatibility_version'
14024`-current_version'
14025`-dead_strip'
14026`-dependency-file'
14027`-dylib_file'
14028`-dylinker_install_name'
14029`-dynamic'
14030`-exported_symbols_list'
14031`-filelist'
14032`-flat_namespace'
14033`-force_flat_namespace'
14034`-headerpad_max_install_names'
14035`-image_base'
14036`-init'
14037`-install_name'
14038`-keep_private_externs'
14039`-multi_module'
14040`-multiply_defined'
14041`-multiply_defined_unused'
14042`-noall_load'
14043`-no_dead_strip_inits_and_terms'
14044`-nofixprebinding'
14045`-nomultidefs'
14046`-noprebind'
14047`-noseglinkedit'
14048`-pagezero_size'
14049`-prebind'
14050`-prebind_all_twolevel_modules'
14051`-private_bundle'
14052`-read_only_relocs'
14053`-sectalign'
14054`-sectobjectsymbols'
14055`-whyload'
14056`-seg1addr'
14057`-sectcreate'
14058`-sectobjectsymbols'
14059`-sectorder'
14060`-segaddr'
14061`-segs_read_only_addr'
14062`-segs_read_write_addr'
14063`-seg_addr_table'
14064`-seg_addr_table_filename'
14065`-seglinkedit'
14066`-segprot'
14067`-segs_read_only_addr'
14068`-segs_read_write_addr'
14069`-single_module'
14070`-static'
14071`-sub_library'
14072`-sub_umbrella'
14073`-twolevel_namespace'
14074`-umbrella'
14075`-undefined'
14076`-unexported_symbols_list'
14077`-weak_reference_mismatches'
14078`-whatsloaded'
14079     These options are passed to the Darwin linker.  The Darwin linker
14080     man page describes them in detail.
14081
14082
14083File: gcc.info,  Node: DEC Alpha Options,  Next: FR30 Options,  Prev: Darwin Options,  Up: Submodel Options
14084
140853.17.11 DEC Alpha Options
14086-------------------------
14087
14088These `-m' options are defined for the DEC Alpha implementations:
14089
14090`-mno-soft-float'
14091`-msoft-float'
14092     Use (do not use) the hardware floating-point instructions for
14093     floating-point operations.  When `-msoft-float' is specified,
14094     functions in `libgcc.a' are used to perform floating-point
14095     operations.  Unless they are replaced by routines that emulate the
14096     floating-point operations, or compiled in such a way as to call
14097     such emulations routines, these routines issue floating-point
14098     operations.   If you are compiling for an Alpha without
14099     floating-point operations, you must ensure that the library is
14100     built so as not to call them.
14101
14102     Note that Alpha implementations without floating-point operations
14103     are required to have floating-point registers.
14104
14105`-mfp-reg'
14106`-mno-fp-regs'
14107     Generate code that uses (does not use) the floating-point register
14108     set.  `-mno-fp-regs' implies `-msoft-float'.  If the floating-point
14109     register set is not used, floating-point operands are passed in
14110     integer registers as if they were integers and floating-point
14111     results are passed in `$0' instead of `$f0'.  This is a
14112     non-standard calling sequence, so any function with a
14113     floating-point argument or return value called by code compiled
14114     with `-mno-fp-regs' must also be compiled with that option.
14115
14116     A typical use of this option is building a kernel that does not
14117     use, and hence need not save and restore, any floating-point
14118     registers.
14119
14120`-mieee'
14121     The Alpha architecture implements floating-point hardware
14122     optimized for maximum performance.  It is mostly compliant with
14123     the IEEE floating-point standard.  However, for full compliance,
14124     software assistance is required.  This option generates code fully
14125     IEEE-compliant code _except_ that the INEXACT-FLAG is not
14126     maintained (see below).  If this option is turned on, the
14127     preprocessor macro `_IEEE_FP' is defined during compilation.  The
14128     resulting code is less efficient but is able to correctly support
14129     denormalized numbers and exceptional IEEE values such as
14130     not-a-number and plus/minus infinity.  Other Alpha compilers call
14131     this option `-ieee_with_no_inexact'.
14132
14133`-mieee-with-inexact'
14134     This is like `-mieee' except the generated code also maintains the
14135     IEEE INEXACT-FLAG.  Turning on this option causes the generated
14136     code to implement fully-compliant IEEE math.  In addition to
14137     `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro.
14138     On some Alpha implementations the resulting code may execute
14139     significantly slower than the code generated by default.  Since
14140     there is very little code that depends on the INEXACT-FLAG, you
14141     should normally not specify this option.  Other Alpha compilers
14142     call this option `-ieee_with_inexact'.
14143
14144`-mfp-trap-mode=TRAP-MODE'
14145     This option controls what floating-point related traps are enabled.
14146     Other Alpha compilers call this option `-fptm TRAP-MODE'.  The
14147     trap mode can be set to one of four values:
14148
14149    `n'
14150          This is the default (normal) setting.  The only traps that
14151          are enabled are the ones that cannot be disabled in software
14152          (e.g., division by zero trap).
14153
14154    `u'
14155          In addition to the traps enabled by `n', underflow traps are
14156          enabled as well.
14157
14158    `su'
14159          Like `u', but the instructions are marked to be safe for
14160          software completion (see Alpha architecture manual for
14161          details).
14162
14163    `sui'
14164          Like `su', but inexact traps are enabled as well.
14165
14166`-mfp-rounding-mode=ROUNDING-MODE'
14167     Selects the IEEE rounding mode.  Other Alpha compilers call this
14168     option `-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
14169
14170    `n'
14171          Normal IEEE rounding mode.  Floating-point numbers are
14172          rounded towards the nearest machine number or towards the
14173          even machine number in case of a tie.
14174
14175    `m'
14176          Round towards minus infinity.
14177
14178    `c'
14179          Chopped rounding mode.  Floating-point numbers are rounded
14180          towards zero.
14181
14182    `d'
14183          Dynamic rounding mode.  A field in the floating-point control
14184          register (FPCR, see Alpha architecture reference manual)
14185          controls the rounding mode in effect.  The C library
14186          initializes this register for rounding towards plus infinity.
14187          Thus, unless your program modifies the FPCR, `d' corresponds
14188          to round towards plus infinity.
14189
14190`-mtrap-precision=TRAP-PRECISION'
14191     In the Alpha architecture, floating-point traps are imprecise.
14192     This means without software assistance it is impossible to recover
14193     from a floating trap and program execution normally needs to be
14194     terminated.  GCC can generate code that can assist operating
14195     system trap handlers in determining the exact location that caused
14196     a floating-point trap.  Depending on the requirements of an
14197     application, different levels of precisions can be selected:
14198
14199    `p'
14200          Program precision.  This option is the default and means a
14201          trap handler can only identify which program caused a
14202          floating-point exception.
14203
14204    `f'
14205          Function precision.  The trap handler can determine the
14206          function that caused a floating-point exception.
14207
14208    `i'
14209          Instruction precision.  The trap handler can determine the
14210          exact instruction that caused a floating-point exception.
14211
14212     Other Alpha compilers provide the equivalent options called
14213     `-scope_safe' and `-resumption_safe'.
14214
14215`-mieee-conformant'
14216     This option marks the generated code as IEEE conformant.  You must
14217     not use this option unless you also specify `-mtrap-precision=i'
14218     and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'.  Its only
14219     effect is to emit the line `.eflag 48' in the function prologue of
14220     the generated assembly file.
14221
14222`-mbuild-constants'
14223     Normally GCC examines a 32- or 64-bit integer constant to see if
14224     it can construct it from smaller constants in two or three
14225     instructions.  If it cannot, it outputs the constant as a literal
14226     and generates code to load it from the data segment at run time.
14227
14228     Use this option to require GCC to construct _all_ integer constants
14229     using code, even if it takes more instructions (the maximum is
14230     six).
14231
14232     You typically use this option to build a shared library dynamic
14233     loader.  Itself a shared library, it must relocate itself in memory
14234     before it can find the variables and constants in its own data
14235     segment.
14236
14237`-mbwx'
14238`-mno-bwx'
14239`-mcix'
14240`-mno-cix'
14241`-mfix'
14242`-mno-fix'
14243`-mmax'
14244`-mno-max'
14245     Indicate whether GCC should generate code to use the optional BWX,
14246     CIX, FIX and MAX instruction sets.  The default is to use the
14247     instruction sets supported by the CPU type specified via `-mcpu='
14248     option or that of the CPU on which GCC was built if none is
14249     specified.
14250
14251`-mfloat-vax'
14252`-mfloat-ieee'
14253     Generate code that uses (does not use) VAX F and G floating-point
14254     arithmetic instead of IEEE single and double precision.
14255
14256`-mexplicit-relocs'
14257`-mno-explicit-relocs'
14258     Older Alpha assemblers provided no way to generate symbol
14259     relocations except via assembler macros.  Use of these macros does
14260     not allow optimal instruction scheduling.  GNU binutils as of
14261     version 2.12 supports a new syntax that allows the compiler to
14262     explicitly mark which relocations should apply to which
14263     instructions.  This option is mostly useful for debugging, as GCC
14264     detects the capabilities of the assembler when it is built and
14265     sets the default accordingly.
14266
14267`-msmall-data'
14268`-mlarge-data'
14269     When `-mexplicit-relocs' is in effect, static data is accessed via
14270     "gp-relative" relocations.  When `-msmall-data' is used, objects 8
14271     bytes long or smaller are placed in a "small data area" (the
14272     `.sdata' and `.sbss' sections) and are accessed via 16-bit
14273     relocations off of the `$gp' register.  This limits the size of
14274     the small data area to 64KB, but allows the variables to be
14275     directly accessed via a single instruction.
14276
14277     The default is `-mlarge-data'.  With this option the data area is
14278     limited to just below 2GB.  Programs that require more than 2GB of
14279     data must use `malloc' or `mmap' to allocate the data in the heap
14280     instead of in the program's data segment.
14281
14282     When generating code for shared libraries, `-fpic' implies
14283     `-msmall-data' and `-fPIC' implies `-mlarge-data'.
14284
14285`-msmall-text'
14286`-mlarge-text'
14287     When `-msmall-text' is used, the compiler assumes that the code of
14288     the entire program (or shared library) fits in 4MB, and is thus
14289     reachable with a branch instruction.  When `-msmall-data' is used,
14290     the compiler can assume that all local symbols share the same
14291     `$gp' value, and thus reduce the number of instructions required
14292     for a function call from 4 to 1.
14293
14294     The default is `-mlarge-text'.
14295
14296`-mcpu=CPU_TYPE'
14297     Set the instruction set and instruction scheduling parameters for
14298     machine type CPU_TYPE.  You can specify either the `EV' style name
14299     or the corresponding chip number.  GCC supports scheduling
14300     parameters for the EV4, EV5 and EV6 family of processors and
14301     chooses the default values for the instruction set from the
14302     processor you specify.  If you do not specify a processor type,
14303     GCC defaults to the processor on which the compiler was built.
14304
14305     Supported values for CPU_TYPE are
14306
14307    `ev4'
14308    `ev45'
14309    `21064'
14310          Schedules as an EV4 and has no instruction set extensions.
14311
14312    `ev5'
14313    `21164'
14314          Schedules as an EV5 and has no instruction set extensions.
14315
14316    `ev56'
14317    `21164a'
14318          Schedules as an EV5 and supports the BWX extension.
14319
14320    `pca56'
14321    `21164pc'
14322    `21164PC'
14323          Schedules as an EV5 and supports the BWX and MAX extensions.
14324
14325    `ev6'
14326    `21264'
14327          Schedules as an EV6 and supports the BWX, FIX, and MAX
14328          extensions.
14329
14330    `ev67'
14331    `21264a'
14332          Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
14333          extensions.
14334
14335     Native toolchains also support the value `native', which selects
14336     the best architecture option for the host processor.
14337     `-mcpu=native' has no effect if GCC does not recognize the
14338     processor.
14339
14340`-mtune=CPU_TYPE'
14341     Set only the instruction scheduling parameters for machine type
14342     CPU_TYPE.  The instruction set is not changed.
14343
14344     Native toolchains also support the value `native', which selects
14345     the best architecture option for the host processor.
14346     `-mtune=native' has no effect if GCC does not recognize the
14347     processor.
14348
14349`-mmemory-latency=TIME'
14350     Sets the latency the scheduler should assume for typical memory
14351     references as seen by the application.  This number is highly
14352     dependent on the memory access patterns used by the application
14353     and the size of the external cache on the machine.
14354
14355     Valid options for TIME are
14356
14357    `NUMBER'
14358          A decimal number representing clock cycles.
14359
14360    `L1'
14361    `L2'
14362    `L3'
14363    `main'
14364          The compiler contains estimates of the number of clock cycles
14365          for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
14366          (also called Dcache, Scache, and Bcache), as well as to main
14367          memory.  Note that L3 is only valid for EV5.
14368
14369
14370
14371File: gcc.info,  Node: FR30 Options,  Next: FRV Options,  Prev: DEC Alpha Options,  Up: Submodel Options
14372
143733.17.12 FR30 Options
14374--------------------
14375
14376These options are defined specifically for the FR30 port.
14377
14378`-msmall-model'
14379     Use the small address space model.  This can produce smaller code,
14380     but it does assume that all symbolic values and addresses fit into
14381     a 20-bit range.
14382
14383`-mno-lsim'
14384     Assume that runtime support has been provided and so there is no
14385     need to include the simulator library (`libsim.a') on the linker
14386     command line.
14387
14388
14389
14390File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FR30 Options,  Up: Submodel Options
14391
143923.17.13 FRV Options
14393-------------------
14394
14395`-mgpr-32'
14396     Only use the first 32 general-purpose registers.
14397
14398`-mgpr-64'
14399     Use all 64 general-purpose registers.
14400
14401`-mfpr-32'
14402     Use only the first 32 floating-point registers.
14403
14404`-mfpr-64'
14405     Use all 64 floating-point registers.
14406
14407`-mhard-float'
14408     Use hardware instructions for floating-point operations.
14409
14410`-msoft-float'
14411     Use library routines for floating-point operations.
14412
14413`-malloc-cc'
14414     Dynamically allocate condition code registers.
14415
14416`-mfixed-cc'
14417     Do not try to dynamically allocate condition code registers, only
14418     use `icc0' and `fcc0'.
14419
14420`-mdword'
14421     Change ABI to use double word insns.
14422
14423`-mno-dword'
14424     Do not use double word instructions.
14425
14426`-mdouble'
14427     Use floating-point double instructions.
14428
14429`-mno-double'
14430     Do not use floating-point double instructions.
14431
14432`-mmedia'
14433     Use media instructions.
14434
14435`-mno-media'
14436     Do not use media instructions.
14437
14438`-mmuladd'
14439     Use multiply and add/subtract instructions.
14440
14441`-mno-muladd'
14442     Do not use multiply and add/subtract instructions.
14443
14444`-mfdpic'
14445     Select the FDPIC ABI, which uses function descriptors to represent
14446     pointers to functions.  Without any PIC/PIE-related options, it
14447     implies `-fPIE'.  With `-fpic' or `-fpie', it assumes GOT entries
14448     and small data are within a 12-bit range from the GOT base
14449     address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32
14450     bits.  With a `bfin-elf' target, this option implies `-msim'.
14451
14452`-minline-plt'
14453     Enable inlining of PLT entries in function calls to functions that
14454     are not known to bind locally.  It has no effect without `-mfdpic'.
14455     It's enabled by default if optimizing for speed and compiling for
14456     shared libraries (i.e., `-fPIC' or `-fpic'), or when an
14457     optimization option such as `-O3' or above is present in the
14458     command line.
14459
14460`-mTLS'
14461     Assume a large TLS segment when generating thread-local code.
14462
14463`-mtls'
14464     Do not assume a large TLS segment when generating thread-local
14465     code.
14466
14467`-mgprel-ro'
14468     Enable the use of `GPREL' relocations in the FDPIC ABI for data
14469     that is known to be in read-only sections.  It's enabled by
14470     default, except for `-fpic' or `-fpie': even though it may help
14471     make the global offset table smaller, it trades 1 instruction for
14472     4.  With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one
14473     of which may be shared by multiple symbols, and it avoids the need
14474     for a GOT entry for the referenced symbol, so it's more likely to
14475     be a win.  If it is not, `-mno-gprel-ro' can be used to disable it.
14476
14477`-multilib-library-pic'
14478     Link with the (library, not FD) pic libraries.  It's implied by
14479     `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without
14480     `-mfdpic'.  You should never have to use it explicitly.
14481
14482`-mlinked-fp'
14483     Follow the EABI requirement of always creating a frame pointer
14484     whenever a stack frame is allocated.  This option is enabled by
14485     default and can be disabled with `-mno-linked-fp'.
14486
14487`-mlong-calls'
14488     Use indirect addressing to call functions outside the current
14489     compilation unit.  This allows the functions to be placed anywhere
14490     within the 32-bit address space.
14491
14492`-malign-labels'
14493     Try to align labels to an 8-byte boundary by inserting NOPs into
14494     the previous packet.  This option only has an effect when VLIW
14495     packing is enabled.  It doesn't create new packets; it merely adds
14496     NOPs to existing ones.
14497
14498`-mlibrary-pic'
14499     Generate position-independent EABI code.
14500
14501`-macc-4'
14502     Use only the first four media accumulator registers.
14503
14504`-macc-8'
14505     Use all eight media accumulator registers.
14506
14507`-mpack'
14508     Pack VLIW instructions.
14509
14510`-mno-pack'
14511     Do not pack VLIW instructions.
14512
14513`-mno-eflags'
14514     Do not mark ABI switches in e_flags.
14515
14516`-mcond-move'
14517     Enable the use of conditional-move instructions (default).
14518
14519     This switch is mainly for debugging the compiler and will likely
14520     be removed in a future version.
14521
14522`-mno-cond-move'
14523     Disable the use of conditional-move instructions.
14524
14525     This switch is mainly for debugging the compiler and will likely
14526     be removed in a future version.
14527
14528`-mscc'
14529     Enable the use of conditional set instructions (default).
14530
14531     This switch is mainly for debugging the compiler and will likely
14532     be removed in a future version.
14533
14534`-mno-scc'
14535     Disable the use of conditional set instructions.
14536
14537     This switch is mainly for debugging the compiler and will likely
14538     be removed in a future version.
14539
14540`-mcond-exec'
14541     Enable the use of conditional execution (default).
14542
14543     This switch is mainly for debugging the compiler and will likely
14544     be removed in a future version.
14545
14546`-mno-cond-exec'
14547     Disable the use of conditional execution.
14548
14549     This switch is mainly for debugging the compiler and will likely
14550     be removed in a future version.
14551
14552`-mvliw-branch'
14553     Run a pass to pack branches into VLIW instructions (default).
14554
14555     This switch is mainly for debugging the compiler and will likely
14556     be removed in a future version.
14557
14558`-mno-vliw-branch'
14559     Do not run a pass to pack branches into VLIW instructions.
14560
14561     This switch is mainly for debugging the compiler and will likely
14562     be removed in a future version.
14563
14564`-mmulti-cond-exec'
14565     Enable optimization of `&&' and `||' in conditional execution
14566     (default).
14567
14568     This switch is mainly for debugging the compiler and will likely
14569     be removed in a future version.
14570
14571`-mno-multi-cond-exec'
14572     Disable optimization of `&&' and `||' in conditional execution.
14573
14574     This switch is mainly for debugging the compiler and will likely
14575     be removed in a future version.
14576
14577`-mnested-cond-exec'
14578     Enable nested conditional execution optimizations (default).
14579
14580     This switch is mainly for debugging the compiler and will likely
14581     be removed in a future version.
14582
14583`-mno-nested-cond-exec'
14584     Disable nested conditional execution optimizations.
14585
14586     This switch is mainly for debugging the compiler and will likely
14587     be removed in a future version.
14588
14589`-moptimize-membar'
14590     This switch removes redundant `membar' instructions from the
14591     compiler-generated code.  It is enabled by default.
14592
14593`-mno-optimize-membar'
14594     This switch disables the automatic removal of redundant `membar'
14595     instructions from the generated code.
14596
14597`-mtomcat-stats'
14598     Cause gas to print out tomcat statistics.
14599
14600`-mcpu=CPU'
14601     Select the processor type for which to generate code.  Possible
14602     values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405',
14603     `fr400', `fr300' and `simple'.
14604
14605
14606
14607File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
14608
146093.17.14 GNU/Linux Options
14610-------------------------
14611
14612These `-m' options are defined for GNU/Linux targets:
14613
14614`-mglibc'
14615     Use the GNU C library.  This is the default except on
14616     `*-*-linux-*uclibc*' and `*-*-linux-*android*' targets.
14617
14618`-muclibc'
14619     Use uClibc C library.  This is the default on `*-*-linux-*uclibc*'
14620     targets.
14621
14622`-mbionic'
14623     Use Bionic C library.  This is the default on
14624     `*-*-linux-*android*' targets.
14625
14626`-mandroid'
14627     Compile code compatible with Android platform.  This is the
14628     default on `*-*-linux-*android*' targets.
14629
14630     When compiling, this option enables `-mbionic', `-fPIC',
14631     `-fno-exceptions' and `-fno-rtti' by default.  When linking, this
14632     option makes the GCC driver pass Android-specific options to the
14633     linker.  Finally, this option causes the preprocessor macro
14634     `__ANDROID__' to be defined.
14635
14636`-tno-android-cc'
14637     Disable compilation effects of `-mandroid', i.e., do not enable
14638     `-mbionic', `-fPIC', `-fno-exceptions' and `-fno-rtti' by default.
14639
14640`-tno-android-ld'
14641     Disable linking effects of `-mandroid', i.e., pass standard Linux
14642     linking options to the linker.
14643
14644
14645
14646File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
14647
146483.17.15 H8/300 Options
14649----------------------
14650
14651These `-m' options are defined for the H8/300 implementations:
14652
14653`-mrelax'
14654     Shorten some address references at link time, when possible; uses
14655     the linker option `-relax'.  *Note `ld' and the H8/300:
14656     (ld)H8/300, for a fuller description.
14657
14658`-mh'
14659     Generate code for the H8/300H.
14660
14661`-ms'
14662     Generate code for the H8S.
14663
14664`-mn'
14665     Generate code for the H8S and H8/300H in the normal mode.  This
14666     switch must be used either with `-mh' or `-ms'.
14667
14668`-ms2600'
14669     Generate code for the H8S/2600.  This switch must be used with
14670     `-ms'.
14671
14672`-mexr'
14673     Extended registers are stored on stack before execution of function
14674     with monitor attribute. Default option is `-mexr'.  This option is
14675     valid only for H8S targets.
14676
14677`-mno-exr'
14678     Extended registers are not stored on stack before execution of
14679     function with monitor attribute. Default option is `-mno-exr'.
14680     This option is valid only for H8S targets.
14681
14682`-mint32'
14683     Make `int' data 32 bits by default.
14684
14685`-malign-300'
14686     On the H8/300H and H8S, use the same alignment rules as for the
14687     H8/300.  The default for the H8/300H and H8S is to align longs and
14688     floats on 4-byte boundaries.  `-malign-300' causes them to be
14689     aligned on 2-byte boundaries.  This option has no effect on the
14690     H8/300.
14691
14692
14693File: gcc.info,  Node: HPPA Options,  Next: IA-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
14694
146953.17.16 HPPA Options
14696--------------------
14697
14698These `-m' options are defined for the HPPA family of computers:
14699
14700`-march=ARCHITECTURE-TYPE'
14701     Generate code for the specified architecture.  The choices for
14702     ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
14703     `2.0' for PA 2.0 processors.  Refer to `/usr/lib/sched.models' on
14704     an HP-UX system to determine the proper architecture option for
14705     your machine.  Code compiled for lower numbered architectures runs
14706     on higher numbered architectures, but not the other way around.
14707
14708`-mpa-risc-1-0'
14709`-mpa-risc-1-1'
14710`-mpa-risc-2-0'
14711     Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
14712     respectively.
14713
14714`-mjump-in-delay'
14715     This option is ignored and provided for compatibility purposes
14716     only.
14717
14718`-mdisable-fpregs'
14719     Prevent floating-point registers from being used in any manner.
14720     This is necessary for compiling kernels that perform lazy context
14721     switching of floating-point registers.  If you use this option and
14722     attempt to perform floating-point operations, the compiler aborts.
14723
14724`-mdisable-indexing'
14725     Prevent the compiler from using indexing address modes.  This
14726     avoids some rather obscure problems when compiling MIG generated
14727     code under MACH.
14728
14729`-mno-space-regs'
14730     Generate code that assumes the target has no space registers.
14731     This allows GCC to generate faster indirect calls and use unscaled
14732     index address modes.
14733
14734     Such code is suitable for level 0 PA systems and kernels.
14735
14736`-mfast-indirect-calls'
14737     Generate code that assumes calls never cross space boundaries.
14738     This allows GCC to emit code that performs faster indirect calls.
14739
14740     This option does not work in the presence of shared libraries or
14741     nested functions.
14742
14743`-mfixed-range=REGISTER-RANGE'
14744     Generate code treating the given register range as fixed registers.
14745     A fixed register is one that the register allocator cannot use.
14746     This is useful when compiling kernel code.  A register range is
14747     specified as two registers separated by a dash.  Multiple register
14748     ranges can be specified separated by a comma.
14749
14750`-mlong-load-store'
14751     Generate 3-instruction load and store sequences as sometimes
14752     required by the HP-UX 10 linker.  This is equivalent to the `+k'
14753     option to the HP compilers.
14754
14755`-mportable-runtime'
14756     Use the portable calling conventions proposed by HP for ELF
14757     systems.
14758
14759`-mgas'
14760     Enable the use of assembler directives only GAS understands.
14761
14762`-mschedule=CPU-TYPE'
14763     Schedule code according to the constraints for the machine type
14764     CPU-TYPE.  The choices for CPU-TYPE are `700' `7100', `7100LC',
14765     `7200', `7300' and `8000'.  Refer to `/usr/lib/sched.models' on an
14766     HP-UX system to determine the proper scheduling option for your
14767     machine.  The default scheduling is `8000'.
14768
14769`-mlinker-opt'
14770     Enable the optimization pass in the HP-UX linker.  Note this makes
14771     symbolic debugging impossible.  It also triggers a bug in the
14772     HP-UX 8 and HP-UX 9 linkers in which they give bogus error
14773     messages when linking some programs.
14774
14775`-msoft-float'
14776     Generate output containing library calls for floating point.
14777     *Warning:* the requisite libraries are not available for all HPPA
14778     targets.  Normally the facilities of the machine's usual C
14779     compiler are used, but this cannot be done directly in
14780     cross-compilation.  You must make your own arrangements to provide
14781     suitable library functions for cross-compilation.
14782
14783     `-msoft-float' changes the calling convention in the output file;
14784     therefore, it is only useful if you compile _all_ of a program with
14785     this option.  In particular, you need to compile `libgcc.a', the
14786     library that comes with GCC, with `-msoft-float' in order for this
14787     to work.
14788
14789`-msio'
14790     Generate the predefine, `_SIO', for server IO.  The default is
14791     `-mwsio'.  This generates the predefines, `__hp9000s700',
14792     `__hp9000s700__' and `_WSIO', for workstation IO.  These options
14793     are available under HP-UX and HI-UX.
14794
14795`-mgnu-ld'
14796     Use options specific to GNU `ld'.  This passes `-shared' to `ld'
14797     when building a shared library.  It is the default when GCC is
14798     configured, explicitly or implicitly, with the GNU linker.  This
14799     option does not affect which `ld' is called; it only changes what
14800     parameters are passed to that `ld'.  The `ld' that is called is
14801     determined by the `--with-ld' configure option, GCC's program
14802     search path, and finally by the user's `PATH'.  The linker used by
14803     GCC can be printed using `which `gcc -print-prog-name=ld`'.  This
14804     option is only available on the 64-bit HP-UX GCC, i.e. configured
14805     with `hppa*64*-*-hpux*'.
14806
14807`-mhp-ld'
14808     Use options specific to HP `ld'.  This passes `-b' to `ld' when
14809     building a shared library and passes `+Accept TypeMismatch' to
14810     `ld' on all links.  It is the default when GCC is configured,
14811     explicitly or implicitly, with the HP linker.  This option does
14812     not affect which `ld' is called; it only changes what parameters
14813     are passed to that `ld'.  The `ld' that is called is determined by
14814     the `--with-ld' configure option, GCC's program search path, and
14815     finally by the user's `PATH'.  The linker used by GCC can be
14816     printed using `which `gcc -print-prog-name=ld`'.  This option is
14817     only available on the 64-bit HP-UX GCC, i.e. configured with
14818     `hppa*64*-*-hpux*'.
14819
14820`-mlong-calls'
14821     Generate code that uses long call sequences.  This ensures that a
14822     call is always able to reach linker generated stubs.  The default
14823     is to generate long calls only when the distance from the call
14824     site to the beginning of the function or translation unit, as the
14825     case may be, exceeds a predefined limit set by the branch type
14826     being used.  The limits for normal calls are 7,600,000 and 240,000
14827     bytes, respectively for the PA 2.0 and PA 1.X architectures.
14828     Sibcalls are always limited at 240,000 bytes.
14829
14830     Distances are measured from the beginning of functions when using
14831     the `-ffunction-sections' option, or when using the `-mgas' and
14832     `-mno-portable-runtime' options together under HP-UX with the SOM
14833     linker.
14834
14835     It is normally not desirable to use this option as it degrades
14836     performance.  However, it may be useful in large applications,
14837     particularly when partial linking is used to build the application.
14838
14839     The types of long calls used depends on the capabilities of the
14840     assembler and linker, and the type of code being generated.  The
14841     impact on systems that support long absolute calls, and long pic
14842     symbol-difference or pc-relative calls should be relatively small.
14843     However, an indirect call is used on 32-bit ELF systems in pic code
14844     and it is quite long.
14845
14846`-munix=UNIX-STD'
14847     Generate compiler predefines and select a startfile for the
14848     specified UNIX standard.  The choices for UNIX-STD are `93', `95'
14849     and `98'.  `93' is supported on all HP-UX versions.  `95' is
14850     available on HP-UX 10.10 and later.  `98' is available on HP-UX
14851     11.11 and later.  The default values are `93' for HP-UX 10.00,
14852     `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and
14853     later.
14854
14855     `-munix=93' provides the same predefines as GCC 3.3 and 3.4.
14856     `-munix=95' provides additional predefines for `XOPEN_UNIX' and
14857     `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'.
14858     `-munix=98' provides additional predefines for `_XOPEN_UNIX',
14859     `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and
14860     `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'.
14861
14862     It is _important_ to note that this option changes the interfaces
14863     for various library routines.  It also affects the operational
14864     behavior of the C library.  Thus, _extreme_ care is needed in
14865     using this option.
14866
14867     Library code that is intended to operate with more than one UNIX
14868     standard must test, set and restore the variable
14869     `__xpg4_extended_mask' as appropriate.  Most GNU software doesn't
14870     provide this capability.
14871
14872`-nolibdld'
14873     Suppress the generation of link options to search libdld.sl when
14874     the `-static' option is specified on HP-UX 10 and later.
14875
14876`-static'
14877     The HP-UX implementation of setlocale in libc has a dependency on
14878     libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
14879     when the `-static' option is specified, special link options are
14880     needed to resolve this dependency.
14881
14882     On HP-UX 10 and later, the GCC driver adds the necessary options to
14883     link with libdld.sl when the `-static' option is specified.  This
14884     causes the resulting binary to be dynamic.  On the 64-bit port,
14885     the linkers generate dynamic binaries by default in any case.  The
14886     `-nolibdld' option can be used to prevent the GCC driver from
14887     adding these link options.
14888
14889`-threads'
14890     Add support for multithreading with the "dce thread" library under
14891     HP-UX.  This option sets flags for both the preprocessor and
14892     linker.
14893
14894
14895File: gcc.info,  Node: IA-64 Options,  Next: LM32 Options,  Prev: HPPA Options,  Up: Submodel Options
14896
148973.17.17 IA-64 Options
14898---------------------
14899
14900These are the `-m' options defined for the Intel IA-64 architecture.
14901
14902`-mbig-endian'
14903     Generate code for a big-endian target.  This is the default for
14904     HP-UX.
14905
14906`-mlittle-endian'
14907     Generate code for a little-endian target.  This is the default for
14908     AIX5 and GNU/Linux.
14909
14910`-mgnu-as'
14911`-mno-gnu-as'
14912     Generate (or don't) code for the GNU assembler.  This is the
14913     default.
14914
14915`-mgnu-ld'
14916`-mno-gnu-ld'
14917     Generate (or don't) code for the GNU linker.  This is the default.
14918
14919`-mno-pic'
14920     Generate code that does not use a global pointer register.  The
14921     result is not position independent code, and violates the IA-64
14922     ABI.
14923
14924`-mvolatile-asm-stop'
14925`-mno-volatile-asm-stop'
14926     Generate (or don't) a stop bit immediately before and after
14927     volatile asm statements.
14928
14929`-mregister-names'
14930`-mno-register-names'
14931     Generate (or don't) `in', `loc', and `out' register names for the
14932     stacked registers.  This may make assembler output more readable.
14933
14934`-mno-sdata'
14935`-msdata'
14936     Disable (or enable) optimizations that use the small data section.
14937     This may be useful for working around optimizer bugs.
14938
14939`-mconstant-gp'
14940     Generate code that uses a single constant global pointer value.
14941     This is useful when compiling kernel code.
14942
14943`-mauto-pic'
14944     Generate code that is self-relocatable.  This implies
14945     `-mconstant-gp'.  This is useful when compiling firmware code.
14946
14947`-minline-float-divide-min-latency'
14948     Generate code for inline divides of floating-point values using
14949     the minimum latency algorithm.
14950
14951`-minline-float-divide-max-throughput'
14952     Generate code for inline divides of floating-point values using
14953     the maximum throughput algorithm.
14954
14955`-mno-inline-float-divide'
14956     Do not generate inline code for divides of floating-point values.
14957
14958`-minline-int-divide-min-latency'
14959     Generate code for inline divides of integer values using the
14960     minimum latency algorithm.
14961
14962`-minline-int-divide-max-throughput'
14963     Generate code for inline divides of integer values using the
14964     maximum throughput algorithm.
14965
14966`-mno-inline-int-divide'
14967     Do not generate inline code for divides of integer values.
14968
14969`-minline-sqrt-min-latency'
14970     Generate code for inline square roots using the minimum latency
14971     algorithm.
14972
14973`-minline-sqrt-max-throughput'
14974     Generate code for inline square roots using the maximum throughput
14975     algorithm.
14976
14977`-mno-inline-sqrt'
14978     Do not generate inline code for `sqrt'.
14979
14980`-mfused-madd'
14981`-mno-fused-madd'
14982     Do (don't) generate code that uses the fused multiply/add or
14983     multiply/subtract instructions.  The default is to use these
14984     instructions.
14985
14986`-mno-dwarf2-asm'
14987`-mdwarf2-asm'
14988     Don't (or do) generate assembler code for the DWARF 2 line number
14989     debugging info.  This may be useful when not using the GNU
14990     assembler.
14991
14992`-mearly-stop-bits'
14993`-mno-early-stop-bits'
14994     Allow stop bits to be placed earlier than immediately preceding the
14995     instruction that triggered the stop bit.  This can improve
14996     instruction scheduling, but does not always do so.
14997
14998`-mfixed-range=REGISTER-RANGE'
14999     Generate code treating the given register range as fixed registers.
15000     A fixed register is one that the register allocator cannot use.
15001     This is useful when compiling kernel code.  A register range is
15002     specified as two registers separated by a dash.  Multiple register
15003     ranges can be specified separated by a comma.
15004
15005`-mtls-size=TLS-SIZE'
15006     Specify bit size of immediate TLS offsets.  Valid values are 14,
15007     22, and 64.
15008
15009`-mtune=CPU-TYPE'
15010     Tune the instruction scheduling for a particular CPU, Valid values
15011     are `itanium', `itanium1', `merced', `itanium2', and `mckinley'.
15012
15013`-milp32'
15014`-mlp64'
15015     Generate code for a 32-bit or 64-bit environment.  The 32-bit
15016     environment sets int, long and pointer to 32 bits.  The 64-bit
15017     environment sets int to 32 bits and long and pointer to 64 bits.
15018     These are HP-UX specific flags.
15019
15020`-mno-sched-br-data-spec'
15021`-msched-br-data-spec'
15022     (Dis/En)able data speculative scheduling before reload.  This
15023     results in generation of `ld.a' instructions and the corresponding
15024     check instructions (`ld.c' / `chk.a').  The default is 'disable'.
15025
15026`-msched-ar-data-spec'
15027`-mno-sched-ar-data-spec'
15028     (En/Dis)able data speculative scheduling after reload.  This
15029     results in generation of `ld.a' instructions and the corresponding
15030     check instructions (`ld.c' / `chk.a').  The default is 'enable'.
15031
15032`-mno-sched-control-spec'
15033`-msched-control-spec'
15034     (Dis/En)able control speculative scheduling.  This feature is
15035     available only during region scheduling (i.e. before reload).
15036     This results in generation of the `ld.s' instructions and the
15037     corresponding check instructions `chk.s'.  The default is
15038     'disable'.
15039
15040`-msched-br-in-data-spec'
15041`-mno-sched-br-in-data-spec'
15042     (En/Dis)able speculative scheduling of the instructions that are
15043     dependent on the data speculative loads before reload.  This is
15044     effective only with `-msched-br-data-spec' enabled.  The default
15045     is 'enable'.
15046
15047`-msched-ar-in-data-spec'
15048`-mno-sched-ar-in-data-spec'
15049     (En/Dis)able speculative scheduling of the instructions that are
15050     dependent on the data speculative loads after reload.  This is
15051     effective only with `-msched-ar-data-spec' enabled.  The default
15052     is 'enable'.
15053
15054`-msched-in-control-spec'
15055`-mno-sched-in-control-spec'
15056     (En/Dis)able speculative scheduling of the instructions that are
15057     dependent on the control speculative loads.  This is effective
15058     only with `-msched-control-spec' enabled.  The default is 'enable'.
15059
15060`-mno-sched-prefer-non-data-spec-insns'
15061`-msched-prefer-non-data-spec-insns'
15062     If enabled, data-speculative instructions are chosen for schedule
15063     only if there are no other choices at the moment.  This makes the
15064     use of the data speculation much more conservative.  The default
15065     is 'disable'.
15066
15067`-mno-sched-prefer-non-control-spec-insns'
15068`-msched-prefer-non-control-spec-insns'
15069     If enabled, control-speculative instructions are chosen for
15070     schedule only if there are no other choices at the moment.  This
15071     makes the use of the control speculation much more conservative.
15072     The default is 'disable'.
15073
15074`-mno-sched-count-spec-in-critical-path'
15075`-msched-count-spec-in-critical-path'
15076     If enabled, speculative dependencies are considered during
15077     computation of the instructions priorities.  This makes the use of
15078     the speculation a bit more conservative.  The default is 'disable'.
15079
15080`-msched-spec-ldc'
15081     Use a simple data speculation check.  This option is on by default.
15082
15083`-msched-control-spec-ldc'
15084     Use a simple check for control speculation.  This option is on by
15085     default.
15086
15087`-msched-stop-bits-after-every-cycle'
15088     Place a stop bit after every cycle when scheduling.  This option
15089     is on by default.
15090
15091`-msched-fp-mem-deps-zero-cost'
15092     Assume that floating-point stores and loads are not likely to
15093     cause a conflict when placed into the same instruction group.
15094     This option is disabled by default.
15095
15096`-msel-sched-dont-check-control-spec'
15097     Generate checks for control speculation in selective scheduling.
15098     This flag is disabled by default.
15099
15100`-msched-max-memory-insns=MAX-INSNS'
15101     Limit on the number of memory insns per instruction group, giving
15102     lower priority to subsequent memory insns attempting to schedule
15103     in the same instruction group. Frequently useful to prevent cache
15104     bank conflicts.  The default value is 1.
15105
15106`-msched-max-memory-insns-hard-limit'
15107     Makes the limit specified by `msched-max-memory-insns' a hard
15108     limit, disallowing more than that number in an instruction group.
15109     Otherwise, the limit is "soft", meaning that non-memory operations
15110     are preferred when the limit is reached, but memory operations may
15111     still be scheduled.
15112
15113
15114
15115File: gcc.info,  Node: LM32 Options,  Next: M32C Options,  Prev: IA-64 Options,  Up: Submodel Options
15116
151173.17.18 LM32 Options
15118--------------------
15119
15120These `-m' options are defined for the LatticeMico32 architecture:
15121
15122`-mbarrel-shift-enabled'
15123     Enable barrel-shift instructions.
15124
15125`-mdivide-enabled'
15126     Enable divide and modulus instructions.
15127
15128`-mmultiply-enabled'
15129     Enable multiply instructions.
15130
15131`-msign-extend-enabled'
15132     Enable sign extend instructions.
15133
15134`-muser-enabled'
15135     Enable user-defined instructions.
15136
15137
15138
15139File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: LM32 Options,  Up: Submodel Options
15140
151413.17.19 M32C Options
15142--------------------
15143
15144`-mcpu=NAME'
15145     Select the CPU for which code is generated.  NAME may be one of
15146     `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60)
15147     series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80
15148     series.
15149
15150`-msim'
15151     Specifies that the program will be run on the simulator.  This
15152     causes an alternate runtime library to be linked in which
15153     supports, for example, file I/O.  You must not use this option
15154     when generating programs that will run on real hardware; you must
15155     provide your own runtime library for whatever I/O functions are
15156     needed.
15157
15158`-memregs=NUMBER'
15159     Specifies the number of memory-based pseudo-registers GCC uses
15160     during code generation.  These pseudo-registers are used like real
15161     registers, so there is a tradeoff between GCC's ability to fit the
15162     code into available registers, and the performance penalty of using
15163     memory instead of registers.  Note that all modules in a program
15164     must be compiled with the same value for this option.  Because of
15165     that, you must not use this option with GCC's default runtime
15166     libraries.
15167
15168
15169
15170File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
15171
151723.17.20 M32R/D Options
15173----------------------
15174
15175These `-m' options are defined for Renesas M32R/D architectures:
15176
15177`-m32r2'
15178     Generate code for the M32R/2.
15179
15180`-m32rx'
15181     Generate code for the M32R/X.
15182
15183`-m32r'
15184     Generate code for the M32R.  This is the default.
15185
15186`-mmodel=small'
15187     Assume all objects live in the lower 16MB of memory (so that their
15188     addresses can be loaded with the `ld24' instruction), and assume
15189     all subroutines are reachable with the `bl' instruction.  This is
15190     the default.
15191
15192     The addressability of a particular object can be set with the
15193     `model' attribute.
15194
15195`-mmodel=medium'
15196     Assume objects may be anywhere in the 32-bit address space (the
15197     compiler generates `seth/add3' instructions to load their
15198     addresses), and assume all subroutines are reachable with the `bl'
15199     instruction.
15200
15201`-mmodel=large'
15202     Assume objects may be anywhere in the 32-bit address space (the
15203     compiler generates `seth/add3' instructions to load their
15204     addresses), and assume subroutines may not be reachable with the
15205     `bl' instruction (the compiler generates the much slower
15206     `seth/add3/jl' instruction sequence).
15207
15208`-msdata=none'
15209     Disable use of the small data area.  Variables are put into one of
15210     `.data', `.bss', or `.rodata' (unless the `section' attribute has
15211     been specified).  This is the default.
15212
15213     The small data area consists of sections `.sdata' and `.sbss'.
15214     Objects may be explicitly put in the small data area with the
15215     `section' attribute using one of these sections.
15216
15217`-msdata=sdata'
15218     Put small global and static data in the small data area, but do not
15219     generate special code to reference them.
15220
15221`-msdata=use'
15222     Put small global and static data in the small data area, and
15223     generate special instructions to reference them.
15224
15225`-G NUM'
15226     Put global and static objects less than or equal to NUM bytes into
15227     the small data or BSS sections instead of the normal data or BSS
15228     sections.  The default value of NUM is 8.  The `-msdata' option
15229     must be set to one of `sdata' or `use' for this option to have any
15230     effect.
15231
15232     All modules should be compiled with the same `-G NUM' value.
15233     Compiling with different values of NUM may or may not work; if it
15234     doesn't the linker gives an error message--incorrect code is not
15235     generated.
15236
15237`-mdebug'
15238     Makes the M32R-specific code in the compiler display some
15239     statistics that might help in debugging programs.
15240
15241`-malign-loops'
15242     Align all loops to a 32-byte boundary.
15243
15244`-mno-align-loops'
15245     Do not enforce a 32-byte alignment for loops.  This is the default.
15246
15247`-missue-rate=NUMBER'
15248     Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
15249
15250`-mbranch-cost=NUMBER'
15251     NUMBER can only be 1 or 2.  If it is 1 then branches are preferred
15252     over conditional code, if it is 2, then the opposite applies.
15253
15254`-mflush-trap=NUMBER'
15255     Specifies the trap number to use to flush the cache.  The default
15256     is 12.  Valid numbers are between 0 and 15 inclusive.
15257
15258`-mno-flush-trap'
15259     Specifies that the cache cannot be flushed by using a trap.
15260
15261`-mflush-func=NAME'
15262     Specifies the name of the operating system function to call to
15263     flush the cache.  The default is `_flush_cache', but a function
15264     call is only used if a trap is not available.
15265
15266`-mno-flush-func'
15267     Indicates that there is no OS function for flushing the cache.
15268
15269
15270
15271File: gcc.info,  Node: M680x0 Options,  Next: MCore Options,  Prev: M32R/D Options,  Up: Submodel Options
15272
152733.17.21 M680x0 Options
15274----------------------
15275
15276These are the `-m' options defined for M680x0 and ColdFire processors.
15277The default settings depend on which architecture was selected when the
15278compiler was configured; the defaults for the most common choices are
15279given below.
15280
15281`-march=ARCH'
15282     Generate code for a specific M680x0 or ColdFire instruction set
15283     architecture.  Permissible values of ARCH for M680x0 architectures
15284     are: `68000', `68010', `68020', `68030', `68040', `68060' and
15285     `cpu32'.  ColdFire architectures are selected according to
15286     Freescale's ISA classification and the permissible values are:
15287     `isaa', `isaaplus', `isab' and `isac'.
15288
15289     GCC defines a macro `__mcfARCH__' whenever it is generating code
15290     for a ColdFire target.  The ARCH in this macro is one of the
15291     `-march' arguments given above.
15292
15293     When used together, `-march' and `-mtune' select code that runs on
15294     a family of similar processors but that is optimized for a
15295     particular microarchitecture.
15296
15297`-mcpu=CPU'
15298     Generate code for a specific M680x0 or ColdFire processor.  The
15299     M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040',
15300     `68060', `68302', `68332' and `cpu32'.  The ColdFire CPUs are
15301     given by the table below, which also classifies the CPUs into
15302     families:
15303
15304     *Family*      *`-mcpu' arguments*
15305     `51'          `51' `51ac' `51ag' `51cn' `51em' `51je' `51jf' `51jg'
15306                   `51jm' `51mm' `51qe' `51qm'
15307     `5206'        `5202' `5204' `5206'
15308     `5206e'       `5206e'
15309     `5208'        `5207' `5208'
15310     `5211a'       `5210a' `5211a'
15311     `5213'        `5211' `5212' `5213'
15312     `5216'        `5214' `5216'
15313     `52235'       `52230' `52231' `52232' `52233' `52234' `52235'
15314     `5225'        `5224' `5225'
15315     `52259'       `52252' `52254' `52255' `52256' `52258' `52259'
15316     `5235'        `5232' `5233' `5234' `5235' `523x'
15317     `5249'        `5249'
15318     `5250'        `5250'
15319     `5271'        `5270' `5271'
15320     `5272'        `5272'
15321     `5275'        `5274' `5275'
15322     `5282'        `5280' `5281' `5282' `528x'
15323     `53017'       `53011' `53012' `53013' `53014' `53015' `53016'
15324                   `53017'
15325     `5307'        `5307'
15326     `5329'        `5327' `5328' `5329' `532x'
15327     `5373'        `5372' `5373' `537x'
15328     `5407'        `5407'
15329     `5475'        `5470' `5471' `5472' `5473' `5474' `5475' `547x'
15330                   `5480' `5481' `5482' `5483' `5484' `5485'
15331
15332     `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with
15333     CPU.  Other combinations of `-mcpu' and `-march' are rejected.
15334
15335     GCC defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is
15336     selected.  It also defines `__mcf_family_FAMILY', where the value
15337     of FAMILY is given by the table above.
15338
15339`-mtune=TUNE'
15340     Tune the code for a particular microarchitecture within the
15341     constraints set by `-march' and `-mcpu'.  The M680x0
15342     microarchitectures are: `68000', `68010', `68020', `68030',
15343     `68040', `68060' and `cpu32'.  The ColdFire microarchitectures
15344     are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'.
15345
15346     You can also use `-mtune=68020-40' for code that needs to run
15347     relatively well on 68020, 68030 and 68040 targets.
15348     `-mtune=68020-60' is similar but includes 68060 targets as well.
15349     These two options select the same tuning decisions as `-m68020-40'
15350     and `-m68020-60' respectively.
15351
15352     GCC defines the macros `__mcARCH' and `__mcARCH__' when tuning for
15353     680x0 architecture ARCH.  It also defines `mcARCH' unless either
15354     `-ansi' or a non-GNU `-std' option is used.  If GCC is tuning for
15355     a range of architectures, as selected by `-mtune=68020-40' or
15356     `-mtune=68020-60', it defines the macros for every architecture in
15357     the range.
15358
15359     GCC also defines the macro `__mUARCH__' when tuning for ColdFire
15360     microarchitecture UARCH, where UARCH is one of the arguments given
15361     above.
15362
15363`-m68000'
15364`-mc68000'
15365     Generate output for a 68000.  This is the default when the
15366     compiler is configured for 68000-based systems.  It is equivalent
15367     to `-march=68000'.
15368
15369     Use this option for microcontrollers with a 68000 or EC000 core,
15370     including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
15371
15372`-m68010'
15373     Generate output for a 68010.  This is the default when the
15374     compiler is configured for 68010-based systems.  It is equivalent
15375     to `-march=68010'.
15376
15377`-m68020'
15378`-mc68020'
15379     Generate output for a 68020.  This is the default when the
15380     compiler is configured for 68020-based systems.  It is equivalent
15381     to `-march=68020'.
15382
15383`-m68030'
15384     Generate output for a 68030.  This is the default when the
15385     compiler is configured for 68030-based systems.  It is equivalent
15386     to `-march=68030'.
15387
15388`-m68040'
15389     Generate output for a 68040.  This is the default when the
15390     compiler is configured for 68040-based systems.  It is equivalent
15391     to `-march=68040'.
15392
15393     This option inhibits the use of 68881/68882 instructions that have
15394     to be emulated by software on the 68040.  Use this option if your
15395     68040 does not have code to emulate those instructions.
15396
15397`-m68060'
15398     Generate output for a 68060.  This is the default when the
15399     compiler is configured for 68060-based systems.  It is equivalent
15400     to `-march=68060'.
15401
15402     This option inhibits the use of 68020 and 68881/68882 instructions
15403     that have to be emulated by software on the 68060.  Use this
15404     option if your 68060 does not have code to emulate those
15405     instructions.
15406
15407`-mcpu32'
15408     Generate output for a CPU32.  This is the default when the
15409     compiler is configured for CPU32-based systems.  It is equivalent
15410     to `-march=cpu32'.
15411
15412     Use this option for microcontrollers with a CPU32 or CPU32+ core,
15413     including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
15414     68341, 68349 and 68360.
15415
15416`-m5200'
15417     Generate output for a 520X ColdFire CPU.  This is the default when
15418     the compiler is configured for 520X-based systems.  It is
15419     equivalent to `-mcpu=5206', and is now deprecated in favor of that
15420     option.
15421
15422     Use this option for microcontroller with a 5200 core, including
15423     the MCF5202, MCF5203, MCF5204 and MCF5206.
15424
15425`-m5206e'
15426     Generate output for a 5206e ColdFire CPU.  The option is now
15427     deprecated in favor of the equivalent `-mcpu=5206e'.
15428
15429`-m528x'
15430     Generate output for a member of the ColdFire 528X family.  The
15431     option is now deprecated in favor of the equivalent `-mcpu=528x'.
15432
15433`-m5307'
15434     Generate output for a ColdFire 5307 CPU.  The option is now
15435     deprecated in favor of the equivalent `-mcpu=5307'.
15436
15437`-m5407'
15438     Generate output for a ColdFire 5407 CPU.  The option is now
15439     deprecated in favor of the equivalent `-mcpu=5407'.
15440
15441`-mcfv4e'
15442     Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
15443     This includes use of hardware floating-point instructions.  The
15444     option is equivalent to `-mcpu=547x', and is now deprecated in
15445     favor of that option.
15446
15447`-m68020-40'
15448     Generate output for a 68040, without using any of the new
15449     instructions.  This results in code that can run relatively
15450     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
15451     generated code does use the 68881 instructions that are emulated
15452     on the 68040.
15453
15454     The option is equivalent to `-march=68020' `-mtune=68020-40'.
15455
15456`-m68020-60'
15457     Generate output for a 68060, without using any of the new
15458     instructions.  This results in code that can run relatively
15459     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
15460     generated code does use the 68881 instructions that are emulated
15461     on the 68060.
15462
15463     The option is equivalent to `-march=68020' `-mtune=68020-60'.
15464
15465`-mhard-float'
15466`-m68881'
15467     Generate floating-point instructions.  This is the default for
15468     68020 and above, and for ColdFire devices that have an FPU.  It
15469     defines the macro `__HAVE_68881__' on M680x0 targets and
15470     `__mcffpu__' on ColdFire targets.
15471
15472`-msoft-float'
15473     Do not generate floating-point instructions; use library calls
15474     instead.  This is the default for 68000, 68010, and 68832 targets.
15475     It is also the default for ColdFire devices that have no FPU.
15476
15477`-mdiv'
15478`-mno-div'
15479     Generate (do not generate) ColdFire hardware divide and remainder
15480     instructions.  If `-march' is used without `-mcpu', the default is
15481     "on" for ColdFire architectures and "off" for M680x0
15482     architectures.  Otherwise, the default is taken from the target CPU
15483     (either the default CPU, or the one specified by `-mcpu').  For
15484     example, the default is "off" for `-mcpu=5206' and "on" for
15485     `-mcpu=5206e'.
15486
15487     GCC defines the macro `__mcfhwdiv__' when this option is enabled.
15488
15489`-mshort'
15490     Consider type `int' to be 16 bits wide, like `short int'.
15491     Additionally, parameters passed on the stack are also aligned to a
15492     16-bit boundary even on targets whose API mandates promotion to
15493     32-bit.
15494
15495`-mno-short'
15496     Do not consider type `int' to be 16 bits wide.  This is the
15497     default.
15498
15499`-mnobitfield'
15500`-mno-bitfield'
15501     Do not use the bit-field instructions.  The `-m68000', `-mcpu32'
15502     and `-m5200' options imply `-mnobitfield'.
15503
15504`-mbitfield'
15505     Do use the bit-field instructions.  The `-m68020' option implies
15506     `-mbitfield'.  This is the default if you use a configuration
15507     designed for a 68020.
15508
15509`-mrtd'
15510     Use a different function-calling convention, in which functions
15511     that take a fixed number of arguments return with the `rtd'
15512     instruction, which pops their arguments while returning.  This
15513     saves one instruction in the caller since there is no need to pop
15514     the arguments there.
15515
15516     This calling convention is incompatible with the one normally used
15517     on Unix, so you cannot use it if you need to call libraries
15518     compiled with the Unix compiler.
15519
15520     Also, you must provide function prototypes for all functions that
15521     take variable numbers of arguments (including `printf'); otherwise
15522     incorrect code is generated for calls to those functions.
15523
15524     In addition, seriously incorrect code results if you call a
15525     function with too many arguments.  (Normally, extra arguments are
15526     harmlessly ignored.)
15527
15528     The `rtd' instruction is supported by the 68010, 68020, 68030,
15529     68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
15530
15531`-mno-rtd'
15532     Do not use the calling conventions selected by `-mrtd'.  This is
15533     the default.
15534
15535`-malign-int'
15536`-mno-align-int'
15537     Control whether GCC aligns `int', `long', `long long', `float',
15538     `double', and `long double' variables on a 32-bit boundary
15539     (`-malign-int') or a 16-bit boundary (`-mno-align-int').  Aligning
15540     variables on 32-bit boundaries produces code that runs somewhat
15541     faster on processors with 32-bit busses at the expense of more
15542     memory.
15543
15544     *Warning:* if you use the `-malign-int' switch, GCC aligns
15545     structures containing the above types differently than most
15546     published application binary interface specifications for the m68k.
15547
15548`-mpcrel'
15549     Use the pc-relative addressing mode of the 68000 directly, instead
15550     of using a global offset table.  At present, this option implies
15551     `-fpic', allowing at most a 16-bit offset for pc-relative
15552     addressing.  `-fPIC' is not presently supported with `-mpcrel',
15553     though this could be supported for 68020 and higher processors.
15554
15555`-mno-strict-align'
15556`-mstrict-align'
15557     Do not (do) assume that unaligned memory references are handled by
15558     the system.
15559
15560`-msep-data'
15561     Generate code that allows the data segment to be located in a
15562     different area of memory from the text segment.  This allows for
15563     execute-in-place in an environment without virtual memory
15564     management.  This option implies `-fPIC'.
15565
15566`-mno-sep-data'
15567     Generate code that assumes that the data segment follows the text
15568     segment.  This is the default.
15569
15570`-mid-shared-library'
15571     Generate code that supports shared libraries via the library ID
15572     method.  This allows for execute-in-place and shared libraries in
15573     an environment without virtual memory management.  This option
15574     implies `-fPIC'.
15575
15576`-mno-id-shared-library'
15577     Generate code that doesn't assume ID-based shared libraries are
15578     being used.  This is the default.
15579
15580`-mshared-library-id=n'
15581     Specifies the identification number of the ID-based shared library
15582     being compiled.  Specifying a value of 0 generates more compact
15583     code; specifying other values forces the allocation of that number
15584     to the current library, but is no more space- or time-efficient
15585     than omitting this option.
15586
15587`-mxgot'
15588`-mno-xgot'
15589     When generating position-independent code for ColdFire, generate
15590     code that works if the GOT has more than 8192 entries.  This code
15591     is larger and slower than code generated without this option.  On
15592     M680x0 processors, this option is not needed; `-fPIC' suffices.
15593
15594     GCC normally uses a single instruction to load values from the GOT.
15595     While this is relatively efficient, it only works if the GOT is
15596     smaller than about 64k.  Anything larger causes the linker to
15597     report an error such as:
15598
15599          relocation truncated to fit: R_68K_GOT16O foobar
15600
15601     If this happens, you should recompile your code with `-mxgot'.  It
15602     should then work with very large GOTs.  However, code generated
15603     with `-mxgot' is less efficient, since it takes 4 instructions to
15604     fetch the value of a global symbol.
15605
15606     Note that some linkers, including newer versions of the GNU linker,
15607     can create multiple GOTs and sort GOT entries.  If you have such a
15608     linker, you should only need to use `-mxgot' when compiling a
15609     single object file that accesses more than 8192 GOT entries.  Very
15610     few do.
15611
15612     These options have no effect unless GCC is generating
15613     position-independent code.
15614
15615
15616
15617File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M680x0 Options,  Up: Submodel Options
15618
156193.17.22 MCore Options
15620---------------------
15621
15622These are the `-m' options defined for the Motorola M*Core processors.
15623
15624`-mhardlit'
15625`-mno-hardlit'
15626     Inline constants into the code stream if it can be done in two
15627     instructions or less.
15628
15629`-mdiv'
15630`-mno-div'
15631     Use the divide instruction.  (Enabled by default).
15632
15633`-mrelax-immediate'
15634`-mno-relax-immediate'
15635     Allow arbitrary-sized immediates in bit operations.
15636
15637`-mwide-bitfields'
15638`-mno-wide-bitfields'
15639     Always treat bit-fields as `int'-sized.
15640
15641`-m4byte-functions'
15642`-mno-4byte-functions'
15643     Force all functions to be aligned to a 4-byte boundary.
15644
15645`-mcallgraph-data'
15646`-mno-callgraph-data'
15647     Emit callgraph information.
15648
15649`-mslow-bytes'
15650`-mno-slow-bytes'
15651     Prefer word access when reading byte quantities.
15652
15653`-mlittle-endian'
15654`-mbig-endian'
15655     Generate code for a little-endian target.
15656
15657`-m210'
15658`-m340'
15659     Generate code for the 210 processor.
15660
15661`-mno-lsim'
15662     Assume that runtime support has been provided and so omit the
15663     simulator library (`libsim.a)' from the linker command line.
15664
15665`-mstack-increment=SIZE'
15666     Set the maximum amount for a single stack increment operation.
15667     Large values can increase the speed of programs that contain
15668     functions that need a large amount of stack space, but they can
15669     also trigger a segmentation fault if the stack is extended too
15670     much.  The default value is 0x1000.
15671
15672
15673
15674File: gcc.info,  Node: MeP Options,  Next: MicroBlaze Options,  Prev: MCore Options,  Up: Submodel Options
15675
156763.17.23 MeP Options
15677-------------------
15678
15679`-mabsdiff'
15680     Enables the `abs' instruction, which is the absolute difference
15681     between two registers.
15682
15683`-mall-opts'
15684     Enables all the optional instructions--average, multiply, divide,
15685     bit operations, leading zero, absolute difference, min/max, clip,
15686     and saturation.
15687
15688`-maverage'
15689     Enables the `ave' instruction, which computes the average of two
15690     registers.
15691
15692`-mbased=N'
15693     Variables of size N bytes or smaller are placed in the `.based'
15694     section by default.  Based variables use the `$tp' register as a
15695     base register, and there is a 128-byte limit to the `.based'
15696     section.
15697
15698`-mbitops'
15699     Enables the bit operation instructions--bit test (`btstm'), set
15700     (`bsetm'), clear (`bclrm'), invert (`bnotm'), and test-and-set
15701     (`tas').
15702
15703`-mc=NAME'
15704     Selects which section constant data is placed in.  NAME may be
15705     `tiny', `near', or `far'.
15706
15707`-mclip'
15708     Enables the `clip' instruction.  Note that `-mclip' is not useful
15709     unless you also provide `-mminmax'.
15710
15711`-mconfig=NAME'
15712     Selects one of the built-in core configurations.  Each MeP chip has
15713     one or more modules in it; each module has a core CPU and a
15714     variety of coprocessors, optional instructions, and peripherals.
15715     The `MeP-Integrator' tool, not part of GCC, provides these
15716     configurations through this option; using this option is the same
15717     as using all the corresponding command-line options.  The default
15718     configuration is `default'.
15719
15720`-mcop'
15721     Enables the coprocessor instructions.  By default, this is a 32-bit
15722     coprocessor.  Note that the coprocessor is normally enabled via the
15723     `-mconfig=' option.
15724
15725`-mcop32'
15726     Enables the 32-bit coprocessor's instructions.
15727
15728`-mcop64'
15729     Enables the 64-bit coprocessor's instructions.
15730
15731`-mivc2'
15732     Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
15733
15734`-mdc'
15735     Causes constant variables to be placed in the `.near' section.
15736
15737`-mdiv'
15738     Enables the `div' and `divu' instructions.
15739
15740`-meb'
15741     Generate big-endian code.
15742
15743`-mel'
15744     Generate little-endian code.
15745
15746`-mio-volatile'
15747     Tells the compiler that any variable marked with the `io'
15748     attribute is to be considered volatile.
15749
15750`-ml'
15751     Causes variables to be assigned to the `.far' section by default.
15752
15753`-mleadz'
15754     Enables the `leadz' (leading zero) instruction.
15755
15756`-mm'
15757     Causes variables to be assigned to the `.near' section by default.
15758
15759`-mminmax'
15760     Enables the `min' and `max' instructions.
15761
15762`-mmult'
15763     Enables the multiplication and multiply-accumulate instructions.
15764
15765`-mno-opts'
15766     Disables all the optional instructions enabled by `-mall-opts'.
15767
15768`-mrepeat'
15769     Enables the `repeat' and `erepeat' instructions, used for
15770     low-overhead looping.
15771
15772`-ms'
15773     Causes all variables to default to the `.tiny' section.  Note that
15774     there is a 65536-byte limit to this section.  Accesses to these
15775     variables use the `%gp' base register.
15776
15777`-msatur'
15778     Enables the saturation instructions.  Note that the compiler does
15779     not currently generate these itself, but this option is included
15780     for compatibility with other tools, like `as'.
15781
15782`-msdram'
15783     Link the SDRAM-based runtime instead of the default ROM-based
15784     runtime.
15785
15786`-msim'
15787     Link the simulator run-time libraries.
15788
15789`-msimnovec'
15790     Link the simulator runtime libraries, excluding built-in support
15791     for reset and exception vectors and tables.
15792
15793`-mtf'
15794     Causes all functions to default to the `.far' section.  Without
15795     this option, functions default to the `.near' section.
15796
15797`-mtiny=N'
15798     Variables that are N bytes or smaller are allocated to the `.tiny'
15799     section.  These variables use the `$gp' base register.  The
15800     default for this option is 4, but note that there's a 65536-byte
15801     limit to the `.tiny' section.
15802
15803
15804
15805File: gcc.info,  Node: MicroBlaze Options,  Next: MIPS Options,  Prev: MeP Options,  Up: Submodel Options
15806
158073.17.24 MicroBlaze Options
15808--------------------------
15809
15810`-msoft-float'
15811     Use software emulation for floating point (default).
15812
15813`-mhard-float'
15814     Use hardware floating-point instructions.
15815
15816`-mmemcpy'
15817     Do not optimize block moves, use `memcpy'.
15818
15819`-mno-clearbss'
15820     This option is deprecated.  Use `-fno-zero-initialized-in-bss'
15821     instead.
15822
15823`-mcpu=CPU-TYPE'
15824     Use features of, and schedule code for, the given CPU.  Supported
15825     values are in the format `vX.YY.Z', where X is a major version, YY
15826     is the minor version, and Z is compatibility code.  Example values
15827     are `v3.00.a', `v4.00.b', `v5.00.a', `v5.00.b', `v5.00.b',
15828     `v6.00.a'.
15829
15830`-mxl-soft-mul'
15831     Use software multiply emulation (default).
15832
15833`-mxl-soft-div'
15834     Use software emulation for divides (default).
15835
15836`-mxl-barrel-shift'
15837     Use the hardware barrel shifter.
15838
15839`-mxl-pattern-compare'
15840     Use pattern compare instructions.
15841
15842`-msmall-divides'
15843     Use table lookup optimization for small signed integer divisions.
15844
15845`-mxl-stack-check'
15846     This option is deprecated.  Use `-fstack-check' instead.
15847
15848`-mxl-gp-opt'
15849     Use GP-relative `.sdata'/`.sbss' sections.
15850
15851`-mxl-multiply-high'
15852     Use multiply high instructions for high part of 32x32 multiply.
15853
15854`-mxl-float-convert'
15855     Use hardware floating-point conversion instructions.
15856
15857`-mxl-float-sqrt'
15858     Use hardware floating-point square root instruction.
15859
15860`-mbig-endian'
15861     Generate code for a big-endian target.
15862
15863`-mlittle-endian'
15864     Generate code for a little-endian target.
15865
15866`-mxl-reorder'
15867     Use reorder instructions (swap and byte reversed load/store).
15868
15869`-mxl-mode-APP-MODEL'
15870     Select application model APP-MODEL.  Valid models are
15871    `executable'
15872          normal executable (default), uses startup code `crt0.o'.
15873
15874    `xmdstub'
15875          for use with Xilinx Microprocessor Debugger (XMD) based
15876          software intrusive debug agent called xmdstub. This uses
15877          startup file `crt1.o' and sets the start address of the
15878          program to 0x800.
15879
15880    `bootstrap'
15881          for applications that are loaded using a bootloader.  This
15882          model uses startup file `crt2.o' which does not contain a
15883          processor reset vector handler. This is suitable for
15884          transferring control on a processor reset to the bootloader
15885          rather than the application.
15886
15887    `novectors'
15888          for applications that do not require any of the MicroBlaze
15889          vectors. This option may be useful for applications running
15890          within a monitoring application. This model uses `crt3.o' as
15891          a startup file.
15892
15893     Option `-xl-mode-APP-MODEL' is a deprecated alias for
15894     `-mxl-mode-APP-MODEL'.
15895
15896
15897
15898File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MicroBlaze Options,  Up: Submodel Options
15899
159003.17.25 MIPS Options
15901--------------------
15902
15903`-EB'
15904     Generate big-endian code.
15905
15906`-EL'
15907     Generate little-endian code.  This is the default for `mips*el-*-*'
15908     configurations.
15909
15910`-march=ARCH'
15911     Generate code that runs on ARCH, which can be the name of a
15912     generic MIPS ISA, or the name of a particular processor.  The ISA
15913     names are: `mips1', `mips2', `mips3', `mips4', `mips32',
15914     `mips32r2', `mips32r3', `mips32r5', `mips32r6', `mips64',
15915     `mips64r2', `mips64r3', `mips64r5' and `mips64r6'.  The processor
15916     names are: `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep',
15917     `4ksd', `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1',
15918     `24kec', `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1',
15919     `34kn', `74kc', `74kf2_1', `74kf1_1', `74kf3_2', `1004kc',
15920     `1004kf2_1', `1004kf1_1', `loongson2e', `loongson2f', `loongson3a',
15921     `m4k', `m14k', `m14kc', `m14ke', `m14kec', `octeon', `octeon+',
15922     `octeon2', `octeon3', `orion', `p5600', `r2000', `r3000', `r3900',
15923     `r4000', `r4400', `r4600', `r4650', `r4700', `r6000', `r8000',
15924     `rm7000', `rm9000', `r10000', `r12000', `r14000', `r16000', `sb1',
15925     `sr71000', `vr4100', `vr4111', `vr4120', `vr4130', `vr4300',
15926     `vr5000', `vr5400', `vr5500', `xlr' and `xlp'.  The special value
15927     `from-abi' selects the most compatible architecture for the
15928     selected ABI (that is, `mips1' for 32-bit ABIs and `mips3' for
15929     64-bit ABIs).
15930
15931     The native Linux/GNU toolchain also supports the value `native',
15932     which selects the best architecture option for the host processor.
15933     `-march=native' has no effect if GCC does not recognize the
15934     processor.
15935
15936     In processor names, a final `000' can be abbreviated as `k' (for
15937     example, `-march=r2k').  Prefixes are optional, and `vr' may be
15938     written `r'.
15939
15940     Names of the form `Nf2_1' refer to processors with FPUs clocked at
15941     half the rate of the core, names of the form `Nf1_1' refer to
15942     processors with FPUs clocked at the same rate as the core, and
15943     names of the form `Nf3_2' refer to processors with FPUs clocked a
15944     ratio of 3:2 with respect to the core.  For compatibility reasons,
15945     `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are
15946     accepted as synonyms for `Nf1_1'.
15947
15948     GCC defines two macros based on the value of this option.  The
15949     first is `_MIPS_ARCH', which gives the name of target
15950     architecture, as a string.  The second has the form
15951     `_MIPS_ARCH_FOO', where FOO is the capitalized value of
15952     `_MIPS_ARCH'.  For example, `-march=r2000' sets `_MIPS_ARCH' to
15953     `"r2000"' and defines the macro `_MIPS_ARCH_R2000'.
15954
15955     Note that the `_MIPS_ARCH' macro uses the processor names given
15956     above.  In other words, it has the full prefix and does not
15957     abbreviate `000' as `k'.  In the case of `from-abi', the macro
15958     names the resolved architecture (either `"mips1"' or `"mips3"').
15959     It names the default architecture when no `-march' option is given.
15960
15961`-mtune=ARCH'
15962     Optimize for ARCH.  Among other things, this option controls the
15963     way instructions are scheduled, and the perceived cost of
15964     arithmetic operations.  The list of ARCH values is the same as for
15965     `-march'.
15966
15967     When this option is not used, GCC optimizes for the processor
15968     specified by `-march'.  By using `-march' and `-mtune' together,
15969     it is possible to generate code that runs on a family of
15970     processors, but optimize the code for one particular member of
15971     that family.
15972
15973     `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
15974     which work in the same way as the `-march' ones described above.
15975
15976`-mips1'
15977     Equivalent to `-march=mips1'.
15978
15979`-mips2'
15980     Equivalent to `-march=mips2'.
15981
15982`-mips3'
15983     Equivalent to `-march=mips3'.
15984
15985`-mips4'
15986     Equivalent to `-march=mips4'.
15987
15988`-mips32'
15989     Equivalent to `-march=mips32'.
15990
15991`-mips32r3'
15992     Equivalent to `-march=mips32r3'.
15993
15994`-mips32r5'
15995     Equivalent to `-march=mips32r5'.
15996
15997`-mips32r6'
15998     Equivalent to `-march=mips32r6'.
15999
16000`-mips64'
16001     Equivalent to `-march=mips64'.
16002
16003`-mips64r2'
16004     Equivalent to `-march=mips64r2'.
16005
16006`-mips64r3'
16007     Equivalent to `-march=mips64r3'.
16008
16009`-mips64r5'
16010     Equivalent to `-march=mips64r5'.
16011
16012`-mips64r6'
16013     Equivalent to `-march=mips64r6'.
16014
16015`-mips16'
16016`-mno-mips16'
16017     Generate (do not generate) MIPS16 code.  If GCC is targeting a
16018     MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
16019
16020     MIPS16 code generation can also be controlled on a per-function
16021     basis by means of `mips16' and `nomips16' attributes.  *Note
16022     Function Attributes::, for more information.
16023
16024`-mflip-mips16'
16025     Generate MIPS16 code on alternating functions.  This option is
16026     provided for regression testing of mixed MIPS16/non-MIPS16 code
16027     generation, and is not intended for ordinary use in compiling user
16028     code.
16029
16030`-minterlink-compressed'
16031
16032`-mno-interlink-compressed'
16033     Require (do not require) that code using the standard
16034     (uncompressed) MIPS ISA be link-compatible with MIPS16 and
16035     microMIPS code, and vice versa.
16036
16037     For example, code using the standard ISA encoding cannot jump
16038     directly to MIPS16 or microMIPS code; it must either use a call or
16039     an indirect jump.  `-minterlink-compressed' therefore disables
16040     direct jumps unless GCC knows that the target of the jump is not
16041     compressed.
16042
16043`-minterlink-mips16'
16044`-mno-interlink-mips16'
16045     Aliases of `-minterlink-compressed' and
16046     `-mno-interlink-compressed'.  These options predate the microMIPS
16047     ASE and are retained for backwards compatibility.
16048
16049`-mabi=32'
16050`-mabi=o64'
16051`-mabi=n32'
16052`-mabi=64'
16053`-mabi=eabi'
16054     Generate code for the given ABI.
16055
16056     Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
16057     generates 64-bit code when you select a 64-bit architecture, but
16058     you can use `-mgp32' to get 32-bit code instead.
16059
16060     For information about the O64 ABI, see
16061     `http://gcc.gnu.org/projects/mipso64-abi.html'.
16062
16063     GCC supports a variant of the o32 ABI in which floating-point
16064     registers are 64 rather than 32 bits wide.  You can select this
16065     combination with `-mabi=32' `-mfp64'.  This ABI relies on the
16066     `mthc1' and `mfhc1' instructions and is therefore only supported
16067     for MIPS32R2, MIPS32R3 and MIPS32R5 processors.
16068
16069     The register assignments for arguments and return values remain the
16070     same, but each scalar value is passed in a single 64-bit register
16071     rather than a pair of 32-bit registers.  For example, scalar
16072     floating-point values are returned in `$f0' only, not a
16073     `$f0'/`$f1' pair.  The set of call-saved registers also remains
16074     the same in that the even-numbered double-precision registers are
16075     saved.
16076
16077     Two additional variants of the o32 ABI are supported to enable a
16078     transition from 32-bit to 64-bit registers.  These are FPXX
16079     (`-mfpxx') and FP64A (`-mfp64' `-mno-odd-spreg').  The FPXX
16080     extension mandates that all code must execute correctly when run
16081     using 32-bit or 64-bit registers.  The code can be interlinked
16082     with either FP32 or FP64, but not both.  The FP64A extension is
16083     similar to the FP64 extension but forbids the use of odd-numbered
16084     single-precision registers.  This can be used in conjunction with
16085     the `FRE' mode of FPUs in MIPS32R5 processors and allows both FP32
16086     and FP64A code to interlink and run in the same process without
16087     changing FPU modes.
16088
16089`-mabicalls'
16090`-mno-abicalls'
16091     Generate (do not generate) code that is suitable for SVR4-style
16092     dynamic objects.  `-mabicalls' is the default for SVR4-based
16093     systems.
16094
16095`-mshared'
16096`-mno-shared'
16097     Generate (do not generate) code that is fully position-independent,
16098     and that can therefore be linked into shared libraries.  This
16099     option only affects `-mabicalls'.
16100
16101     All `-mabicalls' code has traditionally been position-independent,
16102     regardless of options like `-fPIC' and `-fpic'.  However, as an
16103     extension, the GNU toolchain allows executables to use absolute
16104     accesses for locally-binding symbols.  It can also use shorter GP
16105     initialization sequences and generate direct calls to
16106     locally-defined functions.  This mode is selected by `-mno-shared'.
16107
16108     `-mno-shared' depends on binutils 2.16 or higher and generates
16109     objects that can only be linked by the GNU linker.  However, the
16110     option does not affect the ABI of the final executable; it only
16111     affects the ABI of relocatable objects.  Using `-mno-shared'
16112     generally makes executables both smaller and quicker.
16113
16114     `-mshared' is the default.
16115
16116`-mplt'
16117`-mno-plt'
16118     Assume (do not assume) that the static and dynamic linkers support
16119     PLTs and copy relocations.  This option only affects `-mno-shared
16120     -mabicalls'.  For the n64 ABI, this option has no effect without
16121     `-msym32'.
16122
16123     You can make `-mplt' the default by configuring GCC with
16124     `--with-mips-plt'.  The default is `-mno-plt' otherwise.
16125
16126`-mxgot'
16127`-mno-xgot'
16128     Lift (do not lift) the usual restrictions on the size of the global
16129     offset table.
16130
16131     GCC normally uses a single instruction to load values from the GOT.
16132     While this is relatively efficient, it only works if the GOT is
16133     smaller than about 64k.  Anything larger causes the linker to
16134     report an error such as:
16135
16136          relocation truncated to fit: R_MIPS_GOT16 foobar
16137
16138     If this happens, you should recompile your code with `-mxgot'.
16139     This works with very large GOTs, although the code is also less
16140     efficient, since it takes three instructions to fetch the value of
16141     a global symbol.
16142
16143     Note that some linkers can create multiple GOTs.  If you have such
16144     a linker, you should only need to use `-mxgot' when a single object
16145     file accesses more than 64k's worth of GOT entries.  Very few do.
16146
16147     These options have no effect unless GCC is generating position
16148     independent code.
16149
16150`-mgp32'
16151     Assume that general-purpose registers are 32 bits wide.
16152
16153`-mgp64'
16154     Assume that general-purpose registers are 64 bits wide.
16155
16156`-mfp32'
16157     Assume that floating-point registers are 32 bits wide.
16158
16159`-mfp64'
16160     Assume that floating-point registers are 64 bits wide.
16161
16162`-mfpxx'
16163     Do not assume the width of floating-point registers.
16164
16165`-mhard-float'
16166     Use floating-point coprocessor instructions.
16167
16168`-msoft-float'
16169     Do not use floating-point coprocessor instructions.  Implement
16170     floating-point calculations using library calls instead.
16171
16172`-mno-float'
16173     Equivalent to `-msoft-float', but additionally asserts that the
16174     program being compiled does not perform any floating-point
16175     operations.  This option is presently supported only by some
16176     bare-metal MIPS configurations, where it may select a special set
16177     of libraries that lack all floating-point support (including, for
16178     example, the floating-point `printf' formats).  If code compiled
16179     with `-mno-float' accidentally contains floating-point operations,
16180     it is likely to suffer a link-time or run-time failure.
16181
16182`-msingle-float'
16183     Assume that the floating-point coprocessor only supports
16184     single-precision operations.
16185
16186`-mdouble-float'
16187     Assume that the floating-point coprocessor supports
16188     double-precision operations.  This is the default.
16189
16190`-modd-spreg'
16191`-mno-odd-spreg'
16192     Enable the use of odd-numbered single-precision floating-point
16193     registers for the o32 ABI.  This is the default for processors
16194     that are known to support these registers.  When using the o32
16195     FPXX ABI, `-mno-odd-spreg' is set by default.
16196
16197`-mabs=2008'
16198`-mabs=legacy'
16199     These options control the treatment of the special not-a-number
16200     (NaN) IEEE 754 floating-point data with the `abs.fmt' and
16201     `neg.fmt' machine instructions.
16202
16203     By default or when `-mabs=legacy' is used the legacy treatment is
16204     selected.  In this case these instructions are considered
16205     arithmetic and avoided where correct operation is required and the
16206     input operand might be a NaN.  A longer sequence of instructions
16207     that manipulate the sign bit of floating-point datum manually is
16208     used instead unless the `-ffinite-math-only' option has also been
16209     specified.
16210
16211     The `-mabs=2008' option selects the IEEE 754-2008 treatment.  In
16212     this case these instructions are considered non-arithmetic and
16213     therefore operating correctly in all cases, including in
16214     particular where the input operand is a NaN.  These instructions
16215     are therefore always used for the respective operations.
16216
16217`-mnan=2008'
16218`-mnan=legacy'
16219     These options control the encoding of the special not-a-number
16220     (NaN) IEEE 754 floating-point data.
16221
16222     The `-mnan=legacy' option selects the legacy encoding.  In this
16223     case quiet NaNs (qNaNs) are denoted by the first bit of their
16224     trailing significand field being 0, whereas signalling NaNs
16225     (sNaNs) are denoted by the first bit of their trailing significand
16226     field being 1.
16227
16228     The `-mnan=2008' option selects the IEEE 754-2008 encoding.  In
16229     this case qNaNs are denoted by the first bit of their trailing
16230     significand field being 1, whereas sNaNs are denoted by the first
16231     bit of their trailing significand field being 0.
16232
16233     The default is `-mnan=legacy' unless GCC has been configured with
16234     `--with-nan=2008'.
16235
16236`-mllsc'
16237`-mno-llsc'
16238     Use (do not use) `ll', `sc', and `sync' instructions to implement
16239     atomic memory built-in functions.  When neither option is
16240     specified, GCC uses the instructions if the target architecture
16241     supports them.
16242
16243     `-mllsc' is useful if the runtime environment can emulate the
16244     instructions and `-mno-llsc' can be useful when compiling for
16245     nonstandard ISAs.  You can make either option the default by
16246     configuring GCC with `--with-llsc' and `--without-llsc'
16247     respectively.  `--with-llsc' is the default for some
16248     configurations; see the installation documentation for details.
16249
16250`-mdsp'
16251`-mno-dsp'
16252     Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
16253     Built-in Functions::.  This option defines the preprocessor macro
16254     `__mips_dsp'.  It also defines `__mips_dsp_rev' to 1.
16255
16256`-mdspr2'
16257`-mno-dspr2'
16258     Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
16259     Built-in Functions::.  This option defines the preprocessor macros
16260     `__mips_dsp' and `__mips_dspr2'.  It also defines `__mips_dsp_rev'
16261     to 2.
16262
16263`-msmartmips'
16264`-mno-smartmips'
16265     Use (do not use) the MIPS SmartMIPS ASE.
16266
16267`-mpaired-single'
16268`-mno-paired-single'
16269     Use (do not use) paired-single floating-point instructions.  *Note
16270     MIPS Paired-Single Support::.  This option requires hardware
16271     floating-point support to be enabled.
16272
16273`-mdmx'
16274`-mno-mdmx'
16275     Use (do not use) MIPS Digital Media Extension instructions.  This
16276     option can only be used when generating 64-bit code and requires
16277     hardware floating-point support to be enabled.
16278
16279`-mips3d'
16280`-mno-mips3d'
16281     Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
16282     Functions::.  The option `-mips3d' implies `-mpaired-single'.
16283
16284`-mmicromips'
16285`-mno-micromips'
16286     Generate (do not generate) microMIPS code.
16287
16288     MicroMIPS code generation can also be controlled on a per-function
16289     basis by means of `micromips' and `nomicromips' attributes.  *Note
16290     Function Attributes::, for more information.
16291
16292`-mmt'
16293`-mno-mt'
16294     Use (do not use) MT Multithreading instructions.
16295
16296`-mmcu'
16297`-mno-mcu'
16298     Use (do not use) the MIPS MCU ASE instructions.
16299
16300`-meva'
16301`-mno-eva'
16302     Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
16303
16304`-mvirt'
16305`-mno-virt'
16306     Use (do not use) the MIPS Virtualization Application Specific
16307     instructions.
16308
16309`-mxpa'
16310`-mno-xpa'
16311     Use (do not use) the MIPS eXtended Physical Address (XPA)
16312     instructions.
16313
16314`-mlong64'
16315     Force `long' types to be 64 bits wide.  See `-mlong32' for an
16316     explanation of the default and the way that the pointer size is
16317     determined.
16318
16319`-mlong32'
16320     Force `long', `int', and pointer types to be 32 bits wide.
16321
16322     The default size of `int's, `long's and pointers depends on the
16323     ABI.  All the supported ABIs use 32-bit `int's.  The n64 ABI uses
16324     64-bit `long's, as does the 64-bit EABI; the others use 32-bit
16325     `long's.  Pointers are the same size as `long's, or the same size
16326     as integer registers, whichever is smaller.
16327
16328`-msym32'
16329`-mno-sym32'
16330     Assume (do not assume) that all symbols have 32-bit values,
16331     regardless of the selected ABI.  This option is useful in
16332     combination with `-mabi=64' and `-mno-abicalls' because it allows
16333     GCC to generate shorter and faster references to symbolic
16334     addresses.
16335
16336`-G NUM'
16337     Put definitions of externally-visible data in a small data section
16338     if that data is no bigger than NUM bytes.  GCC can then generate
16339     more efficient accesses to the data; see `-mgpopt' for details.
16340
16341     The default `-G' option depends on the configuration.
16342
16343`-mlocal-sdata'
16344`-mno-local-sdata'
16345     Extend (do not extend) the `-G' behavior to local data too, such
16346     as to static variables in C.  `-mlocal-sdata' is the default for
16347     all configurations.
16348
16349     If the linker complains that an application is using too much
16350     small data, you might want to try rebuilding the less
16351     performance-critical parts with `-mno-local-sdata'.  You might
16352     also want to build large libraries with `-mno-local-sdata', so
16353     that the libraries leave more room for the main program.
16354
16355`-mextern-sdata'
16356`-mno-extern-sdata'
16357     Assume (do not assume) that externally-defined data is in a small
16358     data section if the size of that data is within the `-G' limit.
16359     `-mextern-sdata' is the default for all configurations.
16360
16361     If you compile a module MOD with `-mextern-sdata' `-G NUM'
16362     `-mgpopt', and MOD references a variable VAR that is no bigger
16363     than NUM bytes, you must make sure that VAR is placed in a small
16364     data section.  If VAR is defined by another module, you must
16365     either compile that module with a high-enough `-G' setting or
16366     attach a `section' attribute to VAR's definition.  If VAR is
16367     common, you must link the application with a high-enough `-G'
16368     setting.
16369
16370     The easiest way of satisfying these restrictions is to compile and
16371     link every module with the same `-G' option.  However, you may
16372     wish to build a library that supports several different small data
16373     limits.  You can do this by compiling the library with the highest
16374     supported `-G' setting and additionally using `-mno-extern-sdata'
16375     to stop the library from making assumptions about
16376     externally-defined data.
16377
16378`-mgpopt'
16379`-mno-gpopt'
16380     Use (do not use) GP-relative accesses for symbols that are known
16381     to be in a small data section; see `-G', `-mlocal-sdata' and
16382     `-mextern-sdata'.  `-mgpopt' is the default for all configurations.
16383
16384     `-mno-gpopt' is useful for cases where the `$gp' register might
16385     not hold the value of `_gp'.  For example, if the code is part of
16386     a library that might be used in a boot monitor, programs that call
16387     boot monitor routines pass an unknown value in `$gp'.  (In such
16388     situations, the boot monitor itself is usually compiled with
16389     `-G0'.)
16390
16391     `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'.
16392
16393`-membedded-data'
16394`-mno-embedded-data'
16395     Allocate variables to the read-only data section first if
16396     possible, then next in the small data section if possible,
16397     otherwise in data.  This gives slightly slower code than the
16398     default, but reduces the amount of RAM required when executing,
16399     and thus may be preferred for some embedded systems.
16400
16401`-muninit-const-in-rodata'
16402`-mno-uninit-const-in-rodata'
16403     Put uninitialized `const' variables in the read-only data section.
16404     This option is only meaningful in conjunction with
16405     `-membedded-data'.
16406
16407`-mcode-readable=SETTING'
16408     Specify whether GCC may generate code that reads from executable
16409     sections.  There are three possible settings:
16410
16411    `-mcode-readable=yes'
16412          Instructions may freely access executable sections.  This is
16413          the default setting.
16414
16415    `-mcode-readable=pcrel'
16416          MIPS16 PC-relative load instructions can access executable
16417          sections, but other instructions must not do so.  This option
16418          is useful on 4KSc and 4KSd processors when the code TLBs have
16419          the Read Inhibit bit set.  It is also useful on processors
16420          that can be configured to have a dual instruction/data SRAM
16421          interface and that, like the M4K, automatically redirect
16422          PC-relative loads to the instruction RAM.
16423
16424    `-mcode-readable=no'
16425          Instructions must not access executable sections.  This
16426          option can be useful on targets that are configured to have a
16427          dual instruction/data SRAM interface but that (unlike the
16428          M4K) do not automatically redirect PC-relative loads to the
16429          instruction RAM.
16430
16431`-msplit-addresses'
16432`-mno-split-addresses'
16433     Enable (disable) use of the `%hi()' and `%lo()' assembler
16434     relocation operators.  This option has been superseded by
16435     `-mexplicit-relocs' but is retained for backwards compatibility.
16436
16437`-mexplicit-relocs'
16438`-mno-explicit-relocs'
16439     Use (do not use) assembler relocation operators when dealing with
16440     symbolic addresses.  The alternative, selected by
16441     `-mno-explicit-relocs', is to use assembler macros instead.
16442
16443     `-mexplicit-relocs' is the default if GCC was configured to use an
16444     assembler that supports relocation operators.
16445
16446`-mcheck-zero-division'
16447`-mno-check-zero-division'
16448     Trap (do not trap) on integer division by zero.
16449
16450     The default is `-mcheck-zero-division'.
16451
16452`-mdivide-traps'
16453`-mdivide-breaks'
16454     MIPS systems check for division by zero by generating either a
16455     conditional trap or a break instruction.  Using traps results in
16456     smaller code, but is only supported on MIPS II and later.  Also,
16457     some versions of the Linux kernel have a bug that prevents trap
16458     from generating the proper signal (`SIGFPE').  Use
16459     `-mdivide-traps' to allow conditional traps on architectures that
16460     support them and `-mdivide-breaks' to force the use of breaks.
16461
16462     The default is usually `-mdivide-traps', but this can be
16463     overridden at configure time using `--with-divide=breaks'.
16464     Divide-by-zero checks can be completely disabled using
16465     `-mno-check-zero-division'.
16466
16467`-mmemcpy'
16468`-mno-memcpy'
16469     Force (do not force) the use of `memcpy' for non-trivial block
16470     moves.  The default is `-mno-memcpy', which allows GCC to inline
16471     most constant-sized copies.
16472
16473`-mlong-calls'
16474`-mno-long-calls'
16475     Disable (do not disable) use of the `jal' instruction.  Calling
16476     functions using `jal' is more efficient but requires the caller
16477     and callee to be in the same 256 megabyte segment.
16478
16479     This option has no effect on abicalls code.  The default is
16480     `-mno-long-calls'.
16481
16482`-mmad'
16483`-mno-mad'
16484     Enable (disable) use of the `mad', `madu' and `mul' instructions,
16485     as provided by the R4650 ISA.
16486
16487`-mimadd'
16488`-mno-imadd'
16489     Enable (disable) use of the `madd' and `msub' integer
16490     instructions.  The default is `-mimadd' on architectures that
16491     support `madd' and `msub' except for the 74k architecture where it
16492     was found to generate slower code.
16493
16494`-mfused-madd'
16495`-mno-fused-madd'
16496     Enable (disable) use of the floating-point multiply-accumulate
16497     instructions, when they are available.  The default is
16498     `-mfused-madd'.
16499
16500     On the R8000 CPU when multiply-accumulate instructions are used,
16501     the intermediate product is calculated to infinite precision and
16502     is not subject to the FCSR Flush to Zero bit.  This may be
16503     undesirable in some circumstances.  On other processors the result
16504     is numerically identical to the equivalent computation using
16505     separate multiply, add, subtract and negate instructions.
16506
16507`-nocpp'
16508     Tell the MIPS assembler to not run its preprocessor over user
16509     assembler files (with a `.s' suffix) when assembling them.
16510
16511`-mfix-24k'
16512
16513`-mno-fix-24k'
16514     Work around the 24K E48 (lost data on stores during refill) errata.
16515     The workarounds are implemented by the assembler rather than by
16516     GCC.
16517
16518`-mfix-r4000'
16519`-mno-fix-r4000'
16520     Work around certain R4000 CPU errata:
16521        - A double-word or a variable shift may give an incorrect
16522          result if executed immediately after starting an integer
16523          division.
16524
16525        - A double-word or a variable shift may give an incorrect
16526          result if executed while an integer multiplication is in
16527          progress.
16528
16529        - An integer division may give an incorrect result if started
16530          in a delay slot of a taken branch or a jump.
16531
16532`-mfix-r4400'
16533`-mno-fix-r4400'
16534     Work around certain R4400 CPU errata:
16535        - A double-word or a variable shift may give an incorrect
16536          result if executed immediately after starting an integer
16537          division.
16538
16539`-mfix-r10000'
16540`-mno-fix-r10000'
16541     Work around certain R10000 errata:
16542        - `ll'/`sc' sequences may not behave atomically on revisions
16543          prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
16544
16545     This option can only be used if the target architecture supports
16546     branch-likely instructions.  `-mfix-r10000' is the default when
16547     `-march=r10000' is used; `-mno-fix-r10000' is the default
16548     otherwise.
16549
16550`-mfix-rm7000'
16551`-mno-fix-rm7000'
16552     Work around the RM7000 `dmult'/`dmultu' errata.  The workarounds
16553     are implemented by the assembler rather than by GCC.
16554
16555`-mfix-vr4120'
16556`-mno-fix-vr4120'
16557     Work around certain VR4120 errata:
16558        - `dmultu' does not always produce the correct result.
16559
16560        - `div' and `ddiv' do not always produce the correct result if
16561          one of the operands is negative.
16562     The workarounds for the division errata rely on special functions
16563     in `libgcc.a'.  At present, these functions are only provided by
16564     the `mips64vr*-elf' configurations.
16565
16566     Other VR4120 errata require a NOP to be inserted between certain
16567     pairs of instructions.  These errata are handled by the assembler,
16568     not by GCC itself.
16569
16570`-mfix-vr4130'
16571     Work around the VR4130 `mflo'/`mfhi' errata.  The workarounds are
16572     implemented by the assembler rather than by GCC, although GCC
16573     avoids using `mflo' and `mfhi' if the VR4130 `macc', `macchi',
16574     `dmacc' and `dmacchi' instructions are available instead.
16575
16576`-mfix-sb1'
16577`-mno-fix-sb1'
16578     Work around certain SB-1 CPU core errata.  (This flag currently
16579     works around the SB-1 revision 2 "F1" and "F2" floating-point
16580     errata.)
16581
16582`-mr10k-cache-barrier=SETTING'
16583     Specify whether GCC should insert cache barriers to avoid the
16584     side-effects of speculation on R10K processors.
16585
16586     In common with many processors, the R10K tries to predict the
16587     outcome of a conditional branch and speculatively executes
16588     instructions from the "taken" branch.  It later aborts these
16589     instructions if the predicted outcome is wrong.  However, on the
16590     R10K, even aborted instructions can have side effects.
16591
16592     This problem only affects kernel stores and, depending on the
16593     system, kernel loads.  As an example, a speculatively-executed
16594     store may load the target memory into cache and mark the cache
16595     line as dirty, even if the store itself is later aborted.  If a
16596     DMA operation writes to the same area of memory before the "dirty"
16597     line is flushed, the cached data overwrites the DMA-ed data.  See
16598     the R10K processor manual for a full description, including other
16599     potential problems.
16600
16601     One workaround is to insert cache barrier instructions before
16602     every memory access that might be speculatively executed and that
16603     might have side effects even if aborted.
16604     `-mr10k-cache-barrier=SETTING' controls GCC's implementation of
16605     this workaround.  It assumes that aborted accesses to any byte in
16606     the following regions does not have side effects:
16607
16608       1. the memory occupied by the current function's stack frame;
16609
16610       2. the memory occupied by an incoming stack argument;
16611
16612       3. the memory occupied by an object with a link-time-constant
16613          address.
16614
16615     It is the kernel's responsibility to ensure that speculative
16616     accesses to these regions are indeed safe.
16617
16618     If the input program contains a function declaration such as:
16619
16620          void foo (void);
16621
16622     then the implementation of `foo' must allow `j foo' and `jal foo'
16623     to be executed speculatively.  GCC honors this restriction for
16624     functions it compiles itself.  It expects non-GCC functions (such
16625     as hand-written assembly code) to do the same.
16626
16627     The option has three forms:
16628
16629    `-mr10k-cache-barrier=load-store'
16630          Insert a cache barrier before a load or store that might be
16631          speculatively executed and that might have side effects even
16632          if aborted.
16633
16634    `-mr10k-cache-barrier=store'
16635          Insert a cache barrier before a store that might be
16636          speculatively executed and that might have side effects even
16637          if aborted.
16638
16639    `-mr10k-cache-barrier=none'
16640          Disable the insertion of cache barriers.  This is the default
16641          setting.
16642
16643`-mflush-func=FUNC'
16644`-mno-flush-func'
16645     Specifies the function to call to flush the I and D caches, or to
16646     not call any such function.  If called, the function must take the
16647     same arguments as the common `_flush_func', that is, the address
16648     of the memory range for which the cache is being flushed, the size
16649     of the memory range, and the number 3 (to flush both caches).  The
16650     default depends on the target GCC was configured for, but commonly
16651     is either `_flush_func' or `__cpu_flush'.
16652
16653`mbranch-cost=NUM'
16654     Set the cost of branches to roughly NUM "simple" instructions.
16655     This cost is only a heuristic and is not guaranteed to produce
16656     consistent results across releases.  A zero cost redundantly
16657     selects the default, which is based on the `-mtune' setting.
16658
16659`-mbranch-likely'
16660`-mno-branch-likely'
16661     Enable or disable use of Branch Likely instructions, regardless of
16662     the default for the selected architecture.  By default, Branch
16663     Likely instructions may be generated if they are supported by the
16664     selected architecture.  An exception is for the MIPS32 and MIPS64
16665     architectures and processors that implement those architectures;
16666     for those, Branch Likely instructions are not be generated by
16667     default because the MIPS32 and MIPS64 architectures specifically
16668     deprecate their use.
16669
16670`-mfp-exceptions'
16671`-mno-fp-exceptions'
16672     Specifies whether FP exceptions are enabled.  This affects how FP
16673     instructions are scheduled for some processors.  The default is
16674     that FP exceptions are enabled.
16675
16676     For instance, on the SB-1, if FP exceptions are disabled, and we
16677     are emitting 64-bit code, then we can use both FP pipes.
16678     Otherwise, we can only use one FP pipe.
16679
16680`-mvr4130-align'
16681`-mno-vr4130-align'
16682     The VR4130 pipeline is two-way superscalar, but can only issue two
16683     instructions together if the first one is 8-byte aligned.  When
16684     this option is enabled, GCC aligns pairs of instructions that it
16685     thinks should execute in parallel.
16686
16687     This option only has an effect when optimizing for the VR4130.  It
16688     normally makes code faster, but at the expense of making it bigger.
16689     It is enabled by default at optimization level `-O3'.
16690
16691`-msynci'
16692`-mno-synci'
16693     Enable (disable) generation of `synci' instructions on
16694     architectures that support it.  The `synci' instructions (if
16695     enabled) are generated when `__builtin___clear_cache' is compiled.
16696
16697     This option defaults to `-mno-synci', but the default can be
16698     overridden by configuring GCC with `--with-synci'.
16699
16700     When compiling code for single processor systems, it is generally
16701     safe to use `synci'.  However, on many multi-core (SMP) systems, it
16702     does not invalidate the instruction caches on all cores and may
16703     lead to undefined behavior.
16704
16705`-mrelax-pic-calls'
16706`-mno-relax-pic-calls'
16707     Try to turn PIC calls that are normally dispatched via register
16708     `$25' into direct calls.  This is only possible if the linker can
16709     resolve the destination at link-time and if the destination is
16710     within range for a direct call.
16711
16712     `-mrelax-pic-calls' is the default if GCC was configured to use an
16713     assembler and a linker that support the `.reloc' assembly
16714     directive and `-mexplicit-relocs' is in effect.  With
16715     `-mno-explicit-relocs', this optimization can be performed by the
16716     assembler and the linker alone without help from the compiler.
16717
16718`-mmcount-ra-address'
16719`-mno-mcount-ra-address'
16720     Emit (do not emit) code that allows `_mcount' to modify the
16721     calling function's return address.  When enabled, this option
16722     extends the usual `_mcount' interface with a new RA-ADDRESS
16723     parameter, which has type `intptr_t *' and is passed in register
16724     `$12'.  `_mcount' can then modify the return address by doing both
16725     of the following:
16726        * Returning the new address in register `$31'.
16727
16728        * Storing the new address in `*RA-ADDRESS', if RA-ADDRESS is
16729          nonnull.
16730
16731     The default is `-mno-mcount-ra-address'.
16732
16733
16734
16735File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
16736
167373.17.26 MMIX Options
16738--------------------
16739
16740These options are defined for the MMIX:
16741
16742`-mlibfuncs'
16743`-mno-libfuncs'
16744     Specify that intrinsic library functions are being compiled,
16745     passing all values in registers, no matter the size.
16746
16747`-mepsilon'
16748`-mno-epsilon'
16749     Generate floating-point comparison instructions that compare with
16750     respect to the `rE' epsilon register.
16751
16752`-mabi=mmixware'
16753`-mabi=gnu'
16754     Generate code that passes function parameters and return values
16755     that (in the called function) are seen as registers `$0' and up,
16756     as opposed to the GNU ABI which uses global registers `$231' and
16757     up.
16758
16759`-mzero-extend'
16760`-mno-zero-extend'
16761     When reading data from memory in sizes shorter than 64 bits, use
16762     (do not use) zero-extending load instructions by default, rather
16763     than sign-extending ones.
16764
16765`-mknuthdiv'
16766`-mno-knuthdiv'
16767     Make the result of a division yielding a remainder have the same
16768     sign as the divisor.  With the default, `-mno-knuthdiv', the sign
16769     of the remainder follows the sign of the dividend.  Both methods
16770     are arithmetically valid, the latter being almost exclusively used.
16771
16772`-mtoplevel-symbols'
16773`-mno-toplevel-symbols'
16774     Prepend (do not prepend) a `:' to all global symbols, so the
16775     assembly code can be used with the `PREFIX' assembly directive.
16776
16777`-melf'
16778     Generate an executable in the ELF format, rather than the default
16779     `mmo' format used by the `mmix' simulator.
16780
16781`-mbranch-predict'
16782`-mno-branch-predict'
16783     Use (do not use) the probable-branch instructions, when static
16784     branch prediction indicates a probable branch.
16785
16786`-mbase-addresses'
16787`-mno-base-addresses'
16788     Generate (do not generate) code that uses _base addresses_.  Using
16789     a base address automatically generates a request (handled by the
16790     assembler and the linker) for a constant to be set up in a global
16791     register.  The register is used for one or more base address
16792     requests within the range 0 to 255 from the value held in the
16793     register.  The generally leads to short and fast code, but the
16794     number of different data items that can be addressed is limited.
16795     This means that a program that uses lots of static data may
16796     require `-mno-base-addresses'.
16797
16798`-msingle-exit'
16799`-mno-single-exit'
16800     Force (do not force) generated code to have a single exit point in
16801     each function.
16802
16803
16804File: gcc.info,  Node: MN10300 Options,  Next: Moxie Options,  Prev: MMIX Options,  Up: Submodel Options
16805
168063.17.27 MN10300 Options
16807-----------------------
16808
16809These `-m' options are defined for Matsushita MN10300 architectures:
16810
16811`-mmult-bug'
16812     Generate code to avoid bugs in the multiply instructions for the
16813     MN10300 processors.  This is the default.
16814
16815`-mno-mult-bug'
16816     Do not generate code to avoid bugs in the multiply instructions
16817     for the MN10300 processors.
16818
16819`-mam33'
16820     Generate code using features specific to the AM33 processor.
16821
16822`-mno-am33'
16823     Do not generate code using features specific to the AM33
16824     processor.  This is the default.
16825
16826`-mam33-2'
16827     Generate code using features specific to the AM33/2.0 processor.
16828
16829`-mam34'
16830     Generate code using features specific to the AM34 processor.
16831
16832`-mtune=CPU-TYPE'
16833     Use the timing characteristics of the indicated CPU type when
16834     scheduling instructions.  This does not change the targeted
16835     processor type.  The CPU type must be one of `mn10300', `am33',
16836     `am33-2' or `am34'.
16837
16838`-mreturn-pointer-on-d0'
16839     When generating a function that returns a pointer, return the
16840     pointer in both `a0' and `d0'.  Otherwise, the pointer is returned
16841     only in `a0', and attempts to call such functions without a
16842     prototype result in errors.  Note that this option is on by
16843     default; use `-mno-return-pointer-on-d0' to disable it.
16844
16845`-mno-crt0'
16846     Do not link in the C run-time initialization object file.
16847
16848`-mrelax'
16849     Indicate to the linker that it should perform a relaxation
16850     optimization pass to shorten branches, calls and absolute memory
16851     addresses.  This option only has an effect when used on the
16852     command line for the final link step.
16853
16854     This option makes symbolic debugging impossible.
16855
16856`-mliw'
16857     Allow the compiler to generate _Long Instruction Word_
16858     instructions if the target is the `AM33' or later.  This is the
16859     default.  This option defines the preprocessor macro `__LIW__'.
16860
16861`-mnoliw'
16862     Do not allow the compiler to generate _Long Instruction Word_
16863     instructions.  This option defines the preprocessor macro
16864     `__NO_LIW__'.
16865
16866`-msetlb'
16867     Allow the compiler to generate the _SETLB_ and _Lcc_ instructions
16868     if the target is the `AM33' or later.  This is the default.  This
16869     option defines the preprocessor macro `__SETLB__'.
16870
16871`-mnosetlb'
16872     Do not allow the compiler to generate _SETLB_ or _Lcc_
16873     instructions.  This option defines the preprocessor macro
16874     `__NO_SETLB__'.
16875
16876
16877
16878File: gcc.info,  Node: Moxie Options,  Next: MSP430 Options,  Prev: MN10300 Options,  Up: Submodel Options
16879
168803.17.28 Moxie Options
16881---------------------
16882
16883`-meb'
16884     Generate big-endian code.  This is the default for `moxie-*-*'
16885     configurations.
16886
16887`-mel'
16888     Generate little-endian code.
16889
16890`-mmul.x'
16891     Generate mul.x and umul.x instructions.  This is the default for
16892     `moxiebox-*-*' configurations.
16893
16894`-mno-crt0'
16895     Do not link in the C run-time initialization object file.
16896
16897
16898
16899File: gcc.info,  Node: MSP430 Options,  Next: NDS32 Options,  Prev: Moxie Options,  Up: Submodel Options
16900
169013.17.29 MSP430 Options
16902----------------------
16903
16904These options are defined for the MSP430:
16905
16906`-masm-hex'
16907     Force assembly output to always use hex constants.  Normally such
16908     constants are signed decimals, but this option is available for
16909     testsuite and/or aesthetic purposes.
16910
16911`-mmcu='
16912     Select the MCU to target.  This is used to create a C preprocessor
16913     symbol based upon the MCU name, converted to upper case and pre-
16914     and post-fixed with `__'.  This in turn is used by the `msp430.h'
16915     header file to select an MCU-specific supplementary header file.
16916
16917     The option also sets the ISA to use.  If the MCU name is one that
16918     is known to only support the 430 ISA then that is selected,
16919     otherwise the 430X ISA is selected.  A generic MCU name of
16920     `msp430' can also be used to select the 430 ISA.  Similarly the
16921     generic `msp430x' MCU name selects the 430X ISA.
16922
16923     In addition an MCU-specific linker script is added to the linker
16924     command line.  The script's name is the name of the MCU with `.ld'
16925     appended.  Thus specifying `-mmcu=xxx' on the `gcc' command line
16926     defines the C preprocessor symbol `__XXX__' and cause the linker
16927     to search for a script called `xxx.ld'.
16928
16929     This option is also passed on to the assembler.
16930
16931`-mcpu='
16932     Specifies the ISA to use.  Accepted values are `msp430', `msp430x'
16933     and `msp430xv2'.  This option is deprecated.  The `-mmcu=' option
16934     should be used to select the ISA.
16935
16936`-msim'
16937     Link to the simulator runtime libraries and linker script.
16938     Overrides any scripts that would be selected by the `-mmcu='
16939     option.
16940
16941`-mlarge'
16942     Use large-model addressing (20-bit pointers, 32-bit `size_t').
16943
16944`-msmall'
16945     Use small-model addressing (16-bit pointers, 16-bit `size_t').
16946
16947`-mrelax'
16948     This option is passed to the assembler and linker, and allows the
16949     linker to perform certain optimizations that cannot be done until
16950     the final link.
16951
16952`mhwmult='
16953     Describes the type of hardware multiply supported by the target.
16954     Accepted values are `none' for no hardware multiply, `16bit' for
16955     the original 16-bit-only multiply supported by early MCUs.
16956     `32bit' for the 16/32-bit multiply supported by later MCUs and
16957     `f5series' for the 16/32-bit multiply supported by F5-series MCUs.
16958     A value of `auto' can also be given.  This tells GCC to deduce the
16959     hardware multiply support based upon the MCU name provided by the
16960     `-mmcu' option.  If no `-mmcu' option is specified then `32bit'
16961     hardware multiply support is assumed.  `auto' is the default
16962     setting.
16963
16964     Hardware multiplies are normally performed by calling a library
16965     routine.  This saves space in the generated code.  When compiling
16966     at `-O3' or higher however the hardware multiplier is invoked
16967     inline.  This makes for bigger, but faster code.
16968
16969     The hardware multiply routines disable interrupts whilst running
16970     and restore the previous interrupt state when they finish.  This
16971     makes them safe to use inside interrupt handlers as well as in
16972     normal code.
16973
16974`-minrt'
16975     Enable the use of a minimum runtime environment - no static
16976     initializers or constructors.  This is intended for
16977     memory-constrained devices.  The compiler includes special symbols
16978     in some objects that tell the linker and runtime which code
16979     fragments are required.
16980
16981
16982
16983File: gcc.info,  Node: NDS32 Options,  Next: Nios II Options,  Prev: MSP430 Options,  Up: Submodel Options
16984
169853.17.30 NDS32 Options
16986---------------------
16987
16988These options are defined for NDS32 implementations:
16989
16990`-mbig-endian'
16991     Generate code in big-endian mode.
16992
16993`-mlittle-endian'
16994     Generate code in little-endian mode.
16995
16996`-mreduced-regs'
16997     Use reduced-set registers for register allocation.
16998
16999`-mfull-regs'
17000     Use full-set registers for register allocation.
17001
17002`-mcmov'
17003     Generate conditional move instructions.
17004
17005`-mno-cmov'
17006     Do not generate conditional move instructions.
17007
17008`-mperf-ext'
17009     Generate performance extension instructions.
17010
17011`-mno-perf-ext'
17012     Do not generate performance extension instructions.
17013
17014`-mv3push'
17015     Generate v3 push25/pop25 instructions.
17016
17017`-mno-v3push'
17018     Do not generate v3 push25/pop25 instructions.
17019
17020`-m16-bit'
17021     Generate 16-bit instructions.
17022
17023`-mno-16-bit'
17024     Do not generate 16-bit instructions.
17025
17026`-misr-vector-size=NUM'
17027     Specify the size of each interrupt vector, which must be 4 or 16.
17028
17029`-mcache-block-size=NUM'
17030     Specify the size of each cache block, which must be a power of 2
17031     between 4 and 512.
17032
17033`-march=ARCH'
17034     Specify the name of the target architecture.
17035
17036`-mcmodel=CODE-MODEL'
17037     Set the code model to one of
17038    `small'
17039          All the data and read-only data segments must be within 512KB
17040          addressing space.  The text segment must be within 16MB
17041          addressing space.
17042
17043    `medium'
17044          The data segment must be within 512KB while the read-only
17045          data segment can be within 4GB addressing space.  The text
17046          segment should be still within 16MB addressing space.
17047
17048    `large'
17049          All the text and data segments can be within 4GB addressing
17050          space.
17051
17052`-mctor-dtor'
17053     Enable constructor/destructor feature.
17054
17055`-mrelax'
17056     Guide linker to relax instructions.
17057
17058
17059
17060File: gcc.info,  Node: Nios II Options,  Next: Nvidia PTX Options,  Prev: NDS32 Options,  Up: Submodel Options
17061
170623.17.31 Nios II Options
17063-----------------------
17064
17065These are the options defined for the Altera Nios II processor.
17066
17067`-G NUM'
17068     Put global and static objects less than or equal to NUM bytes into
17069     the small data or BSS sections instead of the normal data or BSS
17070     sections.  The default value of NUM is 8.
17071
17072`-mgpopt=OPTION'
17073
17074`-mgpopt'
17075`-mno-gpopt'
17076     Generate (do not generate) GP-relative accesses.  The following
17077     OPTION names are recognized:
17078
17079    `none'
17080          Do not generate GP-relative accesses.
17081
17082    `local'
17083          Generate GP-relative accesses for small data objects that are
17084          not external or weak.  Also use GP-relative addressing for
17085          objects that have been explicitly placed in a small data
17086          section via a `section' attribute.
17087
17088    `global'
17089          As for `local', but also generate GP-relative accesses for
17090          small data objects that are external or weak.  If you use
17091          this option, you must ensure that all parts of your program
17092          (including libraries) are compiled with the same `-G' setting.
17093
17094    `data'
17095          Generate GP-relative accesses for all data objects in the
17096          program.  If you use this option, the entire data and BSS
17097          segments of your program must fit in 64K of memory and you
17098          must use an appropriate linker script to allocate them within
17099          the addressible range of the global pointer.
17100
17101    `all'
17102          Generate GP-relative addresses for function pointers as well
17103          as data pointers.  If you use this option, the entire text,
17104          data, and BSS segments of your program must fit in 64K of
17105          memory and you must use an appropriate linker script to
17106          allocate them within the addressible range of the global
17107          pointer.
17108
17109
17110     `-mgpopt' is equivalent to `-mgpopt=local', and `-mno-gpopt' is
17111     equivalent to `-mgpopt=none'.
17112
17113     The default is `-mgpopt' except when `-fpic' or `-fPIC' is
17114     specified to generate position-independent code.  Note that the
17115     Nios II ABI does not permit GP-relative accesses from shared
17116     libraries.
17117
17118     You may need to specify `-mno-gpopt' explicitly when building
17119     programs that include large amounts of small data, including large
17120     GOT data sections.  In this case, the 16-bit offset for GP-relative
17121     addressing may not be large enough to allow access to the entire
17122     small data section.
17123
17124`-mel'
17125`-meb'
17126     Generate little-endian (default) or big-endian (experimental) code,
17127     respectively.
17128
17129`-mbypass-cache'
17130`-mno-bypass-cache'
17131     Force all load and store instructions to always bypass cache by
17132     using I/O variants of the instructions. The default is not to
17133     bypass the cache.
17134
17135`-mno-cache-volatile'
17136`-mcache-volatile'
17137     Volatile memory access bypass the cache using the I/O variants of
17138     the load and store instructions. The default is not to bypass the
17139     cache.
17140
17141`-mno-fast-sw-div'
17142`-mfast-sw-div'
17143     Do not use table-based fast divide for small numbers. The default
17144     is to use the fast divide at `-O3' and above.
17145
17146`-mno-hw-mul'
17147`-mhw-mul'
17148`-mno-hw-mulx'
17149`-mhw-mulx'
17150`-mno-hw-div'
17151`-mhw-div'
17152     Enable or disable emitting `mul', `mulx' and `div' family of
17153     instructions by the compiler. The default is to emit `mul' and not
17154     emit `div' and `mulx'.
17155
17156`-mcustom-INSN=N'
17157`-mno-custom-INSN'
17158     Each `-mcustom-INSN=N' option enables use of a custom instruction
17159     with encoding N when generating code that uses INSN.  For example,
17160     `-mcustom-fadds=253' generates custom instruction 253 for
17161     single-precision floating-point add operations instead of the
17162     default behavior of using a library call.
17163
17164     The following values of INSN are supported.  Except as otherwise
17165     noted, floating-point operations are expected to be implemented
17166     with normal IEEE 754 semantics and correspond directly to the C
17167     operators or the equivalent GCC built-in functions (*note Other
17168     Builtins::).
17169
17170     Single-precision floating point:
17171    `fadds', `fsubs', `fdivs', `fmuls'
17172          Binary arithmetic operations.
17173
17174    `fnegs'
17175          Unary negation.
17176
17177    `fabss'
17178          Unary absolute value.
17179
17180    `fcmpeqs', `fcmpges', `fcmpgts', `fcmples', `fcmplts', `fcmpnes'
17181          Comparison operations.
17182
17183    `fmins', `fmaxs'
17184          Floating-point minimum and maximum.  These instructions are
17185          only generated if `-ffinite-math-only' is specified.
17186
17187    `fsqrts'
17188          Unary square root operation.
17189
17190    `fcoss', `fsins', `ftans', `fatans', `fexps', `flogs'
17191          Floating-point trigonometric and exponential functions.
17192          These instructions are only generated if
17193          `-funsafe-math-optimizations' is also specified.
17194
17195
17196     Double-precision floating point:
17197    `faddd', `fsubd', `fdivd', `fmuld'
17198          Binary arithmetic operations.
17199
17200    `fnegd'
17201          Unary negation.
17202
17203    `fabsd'
17204          Unary absolute value.
17205
17206    `fcmpeqd', `fcmpged', `fcmpgtd', `fcmpled', `fcmpltd', `fcmpned'
17207          Comparison operations.
17208
17209    `fmind', `fmaxd'
17210          Double-precision minimum and maximum.  These instructions are
17211          only generated if `-ffinite-math-only' is specified.
17212
17213    `fsqrtd'
17214          Unary square root operation.
17215
17216    `fcosd', `fsind', `ftand', `fatand', `fexpd', `flogd'
17217          Double-precision trigonometric and exponential functions.
17218          These instructions are only generated if
17219          `-funsafe-math-optimizations' is also specified.
17220
17221
17222     Conversions:
17223    `fextsd'
17224          Conversion from single precision to double precision.
17225
17226    `ftruncds'
17227          Conversion from double precision to single precision.
17228
17229    `fixsi', `fixsu', `fixdi', `fixdu'
17230          Conversion from floating point to signed or unsigned integer
17231          types, with truncation towards zero.
17232
17233    `round'
17234          Conversion from single-precision floating point to signed
17235          integer, rounding to the nearest integer and ties away from
17236          zero.  This corresponds to the `__builtin_lroundf' function
17237          when `-fno-math-errno' is used.
17238
17239    `floatis', `floatus', `floatid', `floatud'
17240          Conversion from signed or unsigned integer types to
17241          floating-point types.
17242
17243
17244     In addition, all of the following transfer instructions for
17245     internal registers X and Y must be provided to use any of the
17246     double-precision floating-point instructions.  Custom instructions
17247     taking two double-precision source operands expect the first
17248     operand in the 64-bit register X.  The other operand (or only
17249     operand of a unary operation) is given to the custom arithmetic
17250     instruction with the least significant half in source register
17251     SRC1 and the most significant half in SRC2.  A custom instruction
17252     that returns a double-precision result returns the most
17253     significant 32 bits in the destination register and the other half
17254     in 32-bit register Y.  GCC automatically generates the necessary
17255     code sequences to write register X and/or read register Y when
17256     double-precision floating-point instructions are used.
17257
17258    `fwrx'
17259          Write SRC1 into the least significant half of X and SRC2 into
17260          the most significant half of X.
17261
17262    `fwry'
17263          Write SRC1 into Y.
17264
17265    `frdxhi', `frdxlo'
17266          Read the most or least (respectively) significant half of X
17267          and store it in DEST.
17268
17269    `frdy'
17270          Read the value of Y and store it into DEST.
17271
17272     Note that you can gain more local control over generation of Nios
17273     II custom instructions by using the `target("custom-INSN=N")' and
17274     `target("no-custom-INSN")' function attributes (*note Function
17275     Attributes::) or pragmas (*note Function Specific Option
17276     Pragmas::).
17277
17278`-mcustom-fpu-cfg=NAME'
17279     This option enables a predefined, named set of custom instruction
17280     encodings (see `-mcustom-INSN' above).  Currently, the following
17281     sets are defined:
17282
17283     `-mcustom-fpu-cfg=60-1' is equivalent to:
17284          -mcustom-fmuls=252
17285          -mcustom-fadds=253
17286          -mcustom-fsubs=254
17287          -fsingle-precision-constant
17288
17289     `-mcustom-fpu-cfg=60-2' is equivalent to:
17290          -mcustom-fmuls=252
17291          -mcustom-fadds=253
17292          -mcustom-fsubs=254
17293          -mcustom-fdivs=255
17294          -fsingle-precision-constant
17295
17296     `-mcustom-fpu-cfg=72-3' is equivalent to:
17297          -mcustom-floatus=243
17298          -mcustom-fixsi=244
17299          -mcustom-floatis=245
17300          -mcustom-fcmpgts=246
17301          -mcustom-fcmples=249
17302          -mcustom-fcmpeqs=250
17303          -mcustom-fcmpnes=251
17304          -mcustom-fmuls=252
17305          -mcustom-fadds=253
17306          -mcustom-fsubs=254
17307          -mcustom-fdivs=255
17308          -fsingle-precision-constant
17309
17310     Custom instruction assignments given by individual
17311     `-mcustom-INSN=' options override those given by
17312     `-mcustom-fpu-cfg=', regardless of the order of the options on the
17313     command line.
17314
17315     Note that you can gain more local control over selection of a FPU
17316     configuration by using the `target("custom-fpu-cfg=NAME")'
17317     function attribute (*note Function Attributes::) or pragma (*note
17318     Function Specific Option Pragmas::).
17319
17320
17321 These additional `-m' options are available for the Altera Nios II ELF
17322(bare-metal) target:
17323
17324`-mhal'
17325     Link with HAL BSP.  This suppresses linking with the GCC-provided
17326     C runtime startup and termination code, and is typically used in
17327     conjunction with `-msys-crt0=' to specify the location of the
17328     alternate startup code provided by the HAL BSP.
17329
17330`-msmallc'
17331     Link with a limited version of the C library, `-lsmallc', rather
17332     than Newlib.
17333
17334`-msys-crt0=STARTFILE'
17335     STARTFILE is the file name of the startfile (crt0) to use when
17336     linking.  This option is only useful in conjunction with `-mhal'.
17337
17338`-msys-lib=SYSTEMLIB'
17339     SYSTEMLIB is the library name of the library that provides
17340     low-level system calls required by the C library, e.g. `read' and
17341     `write'.  This option is typically used to link with a library
17342     provided by a HAL BSP.
17343
17344
17345
17346File: gcc.info,  Node: Nvidia PTX Options,  Next: PDP-11 Options,  Prev: Nios II Options,  Up: Submodel Options
17347
173483.17.32 Nvidia PTX Options
17349--------------------------
17350
17351These options are defined for Nvidia PTX:
17352
17353`-m32'
17354`-m64'
17355     Generate code for 32-bit or 64-bit ABI.
17356
17357`-mmainkernel'
17358     Link in code for a __main kernel.  This is for stand-alone instead
17359     of offloading execution.
17360
17361
17362
17363File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: Nvidia PTX Options,  Up: Submodel Options
17364
173653.17.33 PDP-11 Options
17366----------------------
17367
17368These options are defined for the PDP-11:
17369
17370`-mfpu'
17371     Use hardware FPP floating point.  This is the default.  (FIS
17372     floating point on the PDP-11/40 is not supported.)
17373
17374`-msoft-float'
17375     Do not use hardware floating point.
17376
17377`-mac0'
17378     Return floating-point results in ac0 (fr0 in Unix assembler
17379     syntax).
17380
17381`-mno-ac0'
17382     Return floating-point results in memory.  This is the default.
17383
17384`-m40'
17385     Generate code for a PDP-11/40.
17386
17387`-m45'
17388     Generate code for a PDP-11/45.  This is the default.
17389
17390`-m10'
17391     Generate code for a PDP-11/10.
17392
17393`-mbcopy-builtin'
17394     Use inline `movmemhi' patterns for copying memory.  This is the
17395     default.
17396
17397`-mbcopy'
17398     Do not use inline `movmemhi' patterns for copying memory.
17399
17400`-mint16'
17401`-mno-int32'
17402     Use 16-bit `int'.  This is the default.
17403
17404`-mint32'
17405`-mno-int16'
17406     Use 32-bit `int'.
17407
17408`-mfloat64'
17409`-mno-float32'
17410     Use 64-bit `float'.  This is the default.
17411
17412`-mfloat32'
17413`-mno-float64'
17414     Use 32-bit `float'.
17415
17416`-mabshi'
17417     Use `abshi2' pattern.  This is the default.
17418
17419`-mno-abshi'
17420     Do not use `abshi2' pattern.
17421
17422`-mbranch-expensive'
17423     Pretend that branches are expensive.  This is for experimenting
17424     with code generation only.
17425
17426`-mbranch-cheap'
17427     Do not pretend that branches are expensive.  This is the default.
17428
17429`-munix-asm'
17430     Use Unix assembler syntax.  This is the default when configured for
17431     `pdp11-*-bsd'.
17432
17433`-mdec-asm'
17434     Use DEC assembler syntax.  This is the default when configured for
17435     any PDP-11 target other than `pdp11-*-bsd'.
17436
17437
17438File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
17439
174403.17.34 picoChip Options
17441------------------------
17442
17443These `-m' options are defined for picoChip implementations:
17444
17445`-mae=AE_TYPE'
17446     Set the instruction set, register set, and instruction scheduling
17447     parameters for array element type AE_TYPE.  Supported values for
17448     AE_TYPE are `ANY', `MUL', and `MAC'.
17449
17450     `-mae=ANY' selects a completely generic AE type.  Code generated
17451     with this option runs on any of the other AE types.  The code is
17452     not as efficient as it would be if compiled for a specific AE
17453     type, and some types of operation (e.g., multiplication) do not
17454     work properly on all types of AE.
17455
17456     `-mae=MUL' selects a MUL AE type.  This is the most useful AE type
17457     for compiled code, and is the default.
17458
17459     `-mae=MAC' selects a DSP-style MAC AE.  Code compiled with this
17460     option may suffer from poor performance of byte (char)
17461     manipulation, since the DSP AE does not provide hardware support
17462     for byte load/stores.
17463
17464`-msymbol-as-address'
17465     Enable the compiler to directly use a symbol name as an address in
17466     a load/store instruction, without first loading it into a
17467     register.  Typically, the use of this option generates larger
17468     programs, which run faster than when the option isn't used.
17469     However, the results vary from program to program, so it is left
17470     as a user option, rather than being permanently enabled.
17471
17472`-mno-inefficient-warnings'
17473     Disables warnings about the generation of inefficient code.  These
17474     warnings can be generated, for example, when compiling code that
17475     performs byte-level memory operations on the MAC AE type.  The MAC
17476     AE has no hardware support for byte-level memory operations, so
17477     all byte load/stores must be synthesized from word load/store
17478     operations.  This is inefficient and a warning is generated to
17479     indicate that you should rewrite the code to avoid byte
17480     operations, or to target an AE type that has the necessary
17481     hardware support.  This option disables these warnings.
17482
17483
17484
17485File: gcc.info,  Node: PowerPC Options,  Next: RL78 Options,  Prev: picoChip Options,  Up: Submodel Options
17486
174873.17.35 PowerPC Options
17488-----------------------
17489
17490These are listed under *Note RS/6000 and PowerPC Options::.
17491
17492
17493File: gcc.info,  Node: RL78 Options,  Next: RS/6000 and PowerPC Options,  Prev: PowerPC Options,  Up: Submodel Options
17494
174953.17.36 RL78 Options
17496--------------------
17497
17498`-msim'
17499     Links in additional target libraries to support operation within a
17500     simulator.
17501
17502`-mmul=none'
17503`-mmul=g13'
17504`-mmul=rl78'
17505     Specifies the type of hardware multiplication support to be used.
17506     The default is `none', which uses software multiplication
17507     functions.  The `g13' option is for the hardware multiply/divide
17508     peripheral only on the RL78/G13 targets.  The `rl78' option is for
17509     the standard hardware multiplication defined in the RL78 software
17510     manual.
17511
17512`-m64bit-doubles'
17513`-m32bit-doubles'
17514     Make the `double' data type be 64 bits (`-m64bit-doubles') or 32
17515     bits (`-m32bit-doubles') in size.  The default is
17516     `-m32bit-doubles'.
17517
17518
17519
17520File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: RL78 Options,  Up: Submodel Options
17521
175223.17.37 IBM RS/6000 and PowerPC Options
17523---------------------------------------
17524
17525These `-m' options are defined for the IBM RS/6000 and PowerPC:
17526`-mpowerpc-gpopt'
17527`-mno-powerpc-gpopt'
17528`-mpowerpc-gfxopt'
17529`-mno-powerpc-gfxopt'
17530`-mpowerpc64'
17531`-mno-powerpc64'
17532`-mmfcrf'
17533`-mno-mfcrf'
17534`-mpopcntb'
17535`-mno-popcntb'
17536`-mpopcntd'
17537`-mno-popcntd'
17538`-mfprnd'
17539`-mno-fprnd'
17540`-mcmpb'
17541`-mno-cmpb'
17542`-mmfpgpr'
17543`-mno-mfpgpr'
17544`-mhard-dfp'
17545`-mno-hard-dfp'
17546     You use these options to specify which instructions are available
17547     on the processor you are using.  The default value of these
17548     options is determined when configuring GCC.  Specifying the
17549     `-mcpu=CPU_TYPE' overrides the specification of these options.  We
17550     recommend you use the `-mcpu=CPU_TYPE' option rather than the
17551     options listed above.
17552
17553     Specifying `-mpowerpc-gpopt' allows GCC to use the optional
17554     PowerPC architecture instructions in the General Purpose group,
17555     including floating-point square root.  Specifying
17556     `-mpowerpc-gfxopt' allows GCC to use the optional PowerPC
17557     architecture instructions in the Graphics group, including
17558     floating-point select.
17559
17560     The `-mmfcrf' option allows GCC to generate the move from
17561     condition register field instruction implemented on the POWER4
17562     processor and other processors that support the PowerPC V2.01
17563     architecture.  The `-mpopcntb' option allows GCC to generate the
17564     popcount and double-precision FP reciprocal estimate instruction
17565     implemented on the POWER5 processor and other processors that
17566     support the PowerPC V2.02 architecture.  The `-mpopcntd' option
17567     allows GCC to generate the popcount instruction implemented on the
17568     POWER7 processor and other processors that support the PowerPC
17569     V2.06 architecture.  The `-mfprnd' option allows GCC to generate
17570     the FP round to integer instructions implemented on the POWER5+
17571     processor and other processors that support the PowerPC V2.03
17572     architecture.  The `-mcmpb' option allows GCC to generate the
17573     compare bytes instruction implemented on the POWER6 processor and
17574     other processors that support the PowerPC V2.05 architecture.  The
17575     `-mmfpgpr' option allows GCC to generate the FP move to/from
17576     general-purpose register instructions implemented on the POWER6X
17577     processor and other processors that support the extended PowerPC
17578     V2.05 architecture.  The `-mhard-dfp' option allows GCC to
17579     generate the decimal floating-point instructions implemented on
17580     some POWER processors.
17581
17582     The `-mpowerpc64' option allows GCC to generate the additional
17583     64-bit instructions that are found in the full PowerPC64
17584     architecture and to treat GPRs as 64-bit, doubleword quantities.
17585     GCC defaults to `-mno-powerpc64'.
17586
17587`-mcpu=CPU_TYPE'
17588     Set architecture type, register usage, and instruction scheduling
17589     parameters for machine type CPU_TYPE.  Supported values for
17590     CPU_TYPE are `401', `403', `405', `405fp', `440', `440fp', `464',
17591     `464fp', `476', `476fp', `505', `601', `602', `603', `603e',
17592     `604', `604e', `620', `630', `740', `7400', `7450', `750', `801',
17593     `821', `823', `860', `970', `8540', `a2', `e300c2', `e300c3',
17594     `e500mc', `e500mc64', `e5500', `e6500', `ec603e', `G3', `G4', `G5',
17595     `titan', `power3', `power4', `power5', `power5+', `power6',
17596     `power6x', `power7', `power8', `powerpc', `powerpc64',
17597     `powerpc64le', and `rs64'.
17598
17599     `-mcpu=powerpc', `-mcpu=powerpc64', and `-mcpu=powerpc64le'
17600     specify pure 32-bit PowerPC (either endian), 64-bit big endian
17601     PowerPC and 64-bit little endian PowerPC architecture machine
17602     types, with an appropriate, generic processor model assumed for
17603     scheduling purposes.
17604
17605     The other options specify a specific processor.  Code generated
17606     under those options runs best on that processor, and may not run
17607     at all on others.
17608
17609     The `-mcpu' options automatically enable or disable the following
17610     options:
17611
17612          -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
17613          -mpopcntb -mpopcntd  -mpowerpc64
17614          -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float
17615          -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx
17616          -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector
17617          -mquad-memory -mquad-memory-atomic
17618
17619     The particular options set for any particular CPU varies between
17620     compiler versions, depending on what setting seems to produce
17621     optimal code for that CPU; it doesn't necessarily reflect the
17622     actual hardware's capabilities.  If you wish to set an individual
17623     option to a particular value, you may specify it after the `-mcpu'
17624     option, like `-mcpu=970 -mno-altivec'.
17625
17626     On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled
17627     or disabled by the `-mcpu' option at present because AIX does not
17628     have full support for these options.  You may still enable or
17629     disable them individually if you're sure it'll work in your
17630     environment.
17631
17632`-mtune=CPU_TYPE'
17633     Set the instruction scheduling parameters for machine type
17634     CPU_TYPE, but do not set the architecture type or register usage,
17635     as `-mcpu=CPU_TYPE' does.  The same values for CPU_TYPE are used
17636     for `-mtune' as for `-mcpu'.  If both are specified, the code
17637     generated uses the architecture and registers set by `-mcpu', but
17638     the scheduling parameters set by `-mtune'.
17639
17640`-mcmodel=small'
17641     Generate PowerPC64 code for the small model: The TOC is limited to
17642     64k.
17643
17644`-mcmodel=medium'
17645     Generate PowerPC64 code for the medium model: The TOC and other
17646     static data may be up to a total of 4G in size.
17647
17648`-mcmodel=large'
17649     Generate PowerPC64 code for the large model: The TOC may be up to
17650     4G in size.  Other data and code is only limited by the 64-bit
17651     address space.
17652
17653`-maltivec'
17654`-mno-altivec'
17655     Generate code that uses (does not use) AltiVec instructions, and
17656     also enable the use of built-in functions that allow more direct
17657     access to the AltiVec instruction set.  You may also need to set
17658     `-mabi=altivec' to adjust the current ABI with AltiVec ABI
17659     enhancements.
17660
17661     When `-maltivec' is used, rather than `-maltivec=le' or
17662     `-maltivec=be', the element order for Altivec intrinsics such as
17663     `vec_splat', `vec_extract', and `vec_insert' match array element
17664     order corresponding to the endianness of the target.  That is,
17665     element zero identifies the leftmost element in a vector register
17666     when targeting a big-endian platform, and identifies the rightmost
17667     element in a vector register when targeting a little-endian
17668     platform.
17669
17670`-maltivec=be'
17671     Generate Altivec instructions using big-endian element order,
17672     regardless of whether the target is big- or little-endian.  This is
17673     the default when targeting a big-endian platform.
17674
17675     The element order is used to interpret element numbers in Altivec
17676     intrinsics such as `vec_splat', `vec_extract', and `vec_insert'.
17677     By default, these match array element order corresponding to the
17678     endianness for the target.
17679
17680`-maltivec=le'
17681     Generate Altivec instructions using little-endian element order,
17682     regardless of whether the target is big- or little-endian.  This is
17683     the default when targeting a little-endian platform.  This option
17684     is currently ignored when targeting a big-endian platform.
17685
17686     The element order is used to interpret element numbers in Altivec
17687     intrinsics such as `vec_splat', `vec_extract', and `vec_insert'.
17688     By default, these match array element order corresponding to the
17689     endianness for the target.
17690
17691`-mvrsave'
17692`-mno-vrsave'
17693     Generate VRSAVE instructions when generating AltiVec code.
17694
17695`-mgen-cell-microcode'
17696     Generate Cell microcode instructions.
17697
17698`-mwarn-cell-microcode'
17699     Warn when a Cell microcode instruction is emitted.  An example of
17700     a Cell microcode instruction is a variable shift.
17701
17702`-msecure-plt'
17703     Generate code that allows `ld' and `ld.so' to build executables
17704     and shared libraries with non-executable `.plt' and `.got'
17705     sections.  This is a PowerPC 32-bit SYSV ABI option.
17706
17707`-mbss-plt'
17708     Generate code that uses a BSS `.plt' section that `ld.so' fills
17709     in, and requires `.plt' and `.got' sections that are both writable
17710     and executable.  This is a PowerPC 32-bit SYSV ABI option.
17711
17712`-misel'
17713`-mno-isel'
17714     This switch enables or disables the generation of ISEL
17715     instructions.
17716
17717`-misel=YES/NO'
17718     This switch has been deprecated.  Use `-misel' and `-mno-isel'
17719     instead.
17720
17721`-mspe'
17722`-mno-spe'
17723     This switch enables or disables the generation of SPE simd
17724     instructions.
17725
17726`-mpaired'
17727`-mno-paired'
17728     This switch enables or disables the generation of PAIRED simd
17729     instructions.
17730
17731`-mspe=YES/NO'
17732     This option has been deprecated.  Use `-mspe' and `-mno-spe'
17733     instead.
17734
17735`-mvsx'
17736`-mno-vsx'
17737     Generate code that uses (does not use) vector/scalar (VSX)
17738     instructions, and also enable the use of built-in functions that
17739     allow more direct access to the VSX instruction set.
17740
17741`-mcrypto'
17742`-mno-crypto'
17743     Enable the use (disable) of the built-in functions that allow
17744     direct access to the cryptographic instructions that were added in
17745     version 2.07 of the PowerPC ISA.
17746
17747`-mdirect-move'
17748`-mno-direct-move'
17749     Generate code that uses (does not use) the instructions to move
17750     data between the general purpose registers and the vector/scalar
17751     (VSX) registers that were added in version 2.07 of the PowerPC ISA.
17752
17753`-mpower8-fusion'
17754`-mno-power8-fusion'
17755     Generate code that keeps (does not keeps) some integer operations
17756     adjacent so that the instructions can be fused together on power8
17757     and later processors.
17758
17759`-mpower8-vector'
17760`-mno-power8-vector'
17761     Generate code that uses (does not use) the vector and scalar
17762     instructions that were added in version 2.07 of the PowerPC ISA.
17763     Also enable the use of built-in functions that allow more direct
17764     access to the vector instructions.
17765
17766`-mquad-memory'
17767`-mno-quad-memory'
17768     Generate code that uses (does not use) the non-atomic quad word
17769     memory instructions.  The `-mquad-memory' option requires use of
17770     64-bit mode.
17771
17772`-mquad-memory-atomic'
17773`-mno-quad-memory-atomic'
17774     Generate code that uses (does not use) the atomic quad word memory
17775     instructions.  The `-mquad-memory-atomic' option requires use of
17776     64-bit mode.
17777
17778`-mupper-regs-df'
17779`-mno-upper-regs-df'
17780     Generate code that uses (does not use) the scalar double precision
17781     instructions that target all 64 registers in the vector/scalar
17782     floating point register set that were added in version 2.06 of the
17783     PowerPC ISA.  `-mupper-regs-df' is turned on by default if you use
17784     any of the `-mcpu=power7', `-mcpu=power8', or `-mvsx' options.
17785
17786`-mupper-regs-sf'
17787`-mno-upper-regs-sf'
17788     Generate code that uses (does not use) the scalar single precision
17789     instructions that target all 64 registers in the vector/scalar
17790     floating point register set that were added in version 2.07 of the
17791     PowerPC ISA.  `-mupper-regs-sf' is turned on by default if you use
17792     either of the `-mcpu=power8' or `-mpower8-vector' options.
17793
17794`-mupper-regs'
17795`-mno-upper-regs'
17796     Generate code that uses (does not use) the scalar instructions
17797     that target all 64 registers in the vector/scalar floating point
17798     register set, depending on the model of the machine.
17799
17800     If the `-mno-upper-regs' option is used, it turns off both
17801     `-mupper-regs-sf' and `-mupper-regs-df' options.
17802
17803`-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
17804`-mfloat-gprs'
17805     This switch enables or disables the generation of floating-point
17806     operations on the general-purpose registers for architectures that
17807     support it.
17808
17809     The argument `yes' or `single' enables the use of single-precision
17810     floating-point operations.
17811
17812     The argument `double' enables the use of single and
17813     double-precision floating-point operations.
17814
17815     The argument `no' disables floating-point operations on the
17816     general-purpose registers.
17817
17818     This option is currently only available on the MPC854x.
17819
17820`-m32'
17821`-m64'
17822     Generate code for 32-bit or 64-bit environments of Darwin and SVR4
17823     targets (including GNU/Linux).  The 32-bit environment sets int,
17824     long and pointer to 32 bits and generates code that runs on any
17825     PowerPC variant.  The 64-bit environment sets int to 32 bits and
17826     long and pointer to 64 bits, and generates code for PowerPC64, as
17827     for `-mpowerpc64'.
17828
17829`-mfull-toc'
17830`-mno-fp-in-toc'
17831`-mno-sum-in-toc'
17832`-mminimal-toc'
17833     Modify generation of the TOC (Table Of Contents), which is created
17834     for every executable file.  The `-mfull-toc' option is selected by
17835     default.  In that case, GCC allocates at least one TOC entry for
17836     each unique non-automatic variable reference in your program.  GCC
17837     also places floating-point constants in the TOC.  However, only
17838     16,384 entries are available in the TOC.
17839
17840     If you receive a linker error message that saying you have
17841     overflowed the available TOC space, you can reduce the amount of
17842     TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc'
17843     options.  `-mno-fp-in-toc' prevents GCC from putting floating-point
17844     constants in the TOC and `-mno-sum-in-toc' forces GCC to generate
17845     code to calculate the sum of an address and a constant at run time
17846     instead of putting that sum into the TOC.  You may specify one or
17847     both of these options.  Each causes GCC to produce very slightly
17848     slower and larger code at the expense of conserving TOC space.
17849
17850     If you still run out of space in the TOC even when you specify
17851     both of these options, specify `-mminimal-toc' instead.  This
17852     option causes GCC to make only one TOC entry for every file.  When
17853     you specify this option, GCC produces code that is slower and
17854     larger but which uses extremely little TOC space.  You may wish to
17855     use this option only on files that contain less
17856     frequently-executed code.
17857
17858`-maix64'
17859`-maix32'
17860     Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
17861     64-bit `long' type, and the infrastructure needed to support them.
17862     Specifying `-maix64' implies `-mpowerpc64', while `-maix32'
17863     disables the 64-bit ABI and implies `-mno-powerpc64'.  GCC
17864     defaults to `-maix32'.
17865
17866`-mxl-compat'
17867`-mno-xl-compat'
17868     Produce code that conforms more closely to IBM XL compiler
17869     semantics when using AIX-compatible ABI.  Pass floating-point
17870     arguments to prototyped functions beyond the register save area
17871     (RSA) on the stack in addition to argument FPRs.  Do not assume
17872     that most significant double in 128-bit long double value is
17873     properly rounded when comparing values and converting to double.
17874     Use XL symbol names for long double support routines.
17875
17876     The AIX calling convention was extended but not initially
17877     documented to handle an obscure K&R C case of calling a function
17878     that takes the address of its arguments with fewer arguments than
17879     declared.  IBM XL compilers access floating-point arguments that
17880     do not fit in the RSA from the stack when a subroutine is compiled
17881     without optimization.  Because always storing floating-point
17882     arguments on the stack is inefficient and rarely needed, this
17883     option is not enabled by default and only is necessary when
17884     calling subroutines compiled by IBM XL compilers without
17885     optimization.
17886
17887`-mpe'
17888     Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
17889     application written to use message passing with special startup
17890     code to enable the application to run.  The system must have PE
17891     installed in the standard location (`/usr/lpp/ppe.poe/'), or the
17892     `specs' file must be overridden with the `-specs=' option to
17893     specify the appropriate directory location.  The Parallel
17894     Environment does not support threads, so the `-mpe' option and the
17895     `-pthread' option are incompatible.
17896
17897`-malign-natural'
17898`-malign-power'
17899     On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
17900     `-malign-natural' overrides the ABI-defined alignment of larger
17901     types, such as floating-point doubles, on their natural size-based
17902     boundary.  The option `-malign-power' instructs GCC to follow the
17903     ABI-specified alignment rules.  GCC defaults to the standard
17904     alignment defined in the ABI.
17905
17906     On 64-bit Darwin, natural alignment is the default, and
17907     `-malign-power' is not supported.
17908
17909`-msoft-float'
17910`-mhard-float'
17911     Generate code that does not use (uses) the floating-point register
17912     set.  Software floating-point emulation is provided if you use the
17913     `-msoft-float' option, and pass the option to GCC when linking.
17914
17915`-msingle-float'
17916`-mdouble-float'
17917     Generate code for single- or double-precision floating-point
17918     operations.  `-mdouble-float' implies `-msingle-float'.
17919
17920`-msimple-fpu'
17921     Do not generate `sqrt' and `div' instructions for hardware
17922     floating-point unit.
17923
17924`-mfpu=NAME'
17925     Specify type of floating-point unit.  Valid values for NAME are
17926     `sp_lite' (equivalent to `-msingle-float -msimple-fpu'), `dp_lite'
17927     (equivalent to `-mdouble-float -msimple-fpu'), `sp_full'
17928     (equivalent to `-msingle-float'), and `dp_full' (equivalent to
17929     `-mdouble-float').
17930
17931`-mxilinx-fpu'
17932     Perform optimizations for the floating-point unit on Xilinx PPC
17933     405/440.
17934
17935`-mmultiple'
17936`-mno-multiple'
17937     Generate code that uses (does not use) the load multiple word
17938     instructions and the store multiple word instructions.  These
17939     instructions are generated by default on POWER systems, and not
17940     generated on PowerPC systems.  Do not use `-mmultiple' on
17941     little-endian PowerPC systems, since those instructions do not
17942     work when the processor is in little-endian mode.  The exceptions
17943     are PPC740 and PPC750 which permit these instructions in
17944     little-endian mode.
17945
17946`-mstring'
17947`-mno-string'
17948     Generate code that uses (does not use) the load string instructions
17949     and the store string word instructions to save multiple registers
17950     and do small block moves.  These instructions are generated by
17951     default on POWER systems, and not generated on PowerPC systems.
17952     Do not use `-mstring' on little-endian PowerPC systems, since those
17953     instructions do not work when the processor is in little-endian
17954     mode.  The exceptions are PPC740 and PPC750 which permit these
17955     instructions in little-endian mode.
17956
17957`-mupdate'
17958`-mno-update'
17959     Generate code that uses (does not use) the load or store
17960     instructions that update the base register to the address of the
17961     calculated memory location.  These instructions are generated by
17962     default.  If you use `-mno-update', there is a small window
17963     between the time that the stack pointer is updated and the address
17964     of the previous frame is stored, which means code that walks the
17965     stack frame across interrupts or signals may get corrupted data.
17966
17967`-mavoid-indexed-addresses'
17968`-mno-avoid-indexed-addresses'
17969     Generate code that tries to avoid (not avoid) the use of indexed
17970     load or store instructions. These instructions can incur a
17971     performance penalty on Power6 processors in certain situations,
17972     such as when stepping through large arrays that cross a 16M
17973     boundary.  This option is enabled by default when targeting Power6
17974     and disabled otherwise.
17975
17976`-mfused-madd'
17977`-mno-fused-madd'
17978     Generate code that uses (does not use) the floating-point multiply
17979     and accumulate instructions.  These instructions are generated by
17980     default if hardware floating point is used.  The machine-dependent
17981     `-mfused-madd' option is now mapped to the machine-independent
17982     `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to
17983     `-ffp-contract=off'.
17984
17985`-mmulhw'
17986`-mno-mulhw'
17987     Generate code that uses (does not use) the half-word multiply and
17988     multiply-accumulate instructions on the IBM 405, 440, 464 and 476
17989     processors.  These instructions are generated by default when
17990     targeting those processors.
17991
17992`-mdlmzb'
17993`-mno-dlmzb'
17994     Generate code that uses (does not use) the string-search `dlmzb'
17995     instruction on the IBM 405, 440, 464 and 476 processors.  This
17996     instruction is generated by default when targeting those
17997     processors.
17998
17999`-mno-bit-align'
18000`-mbit-align'
18001     On System V.4 and embedded PowerPC systems do not (do) force
18002     structures and unions that contain bit-fields to be aligned to the
18003     base type of the bit-field.
18004
18005     For example, by default a structure containing nothing but 8
18006     `unsigned' bit-fields of length 1 is aligned to a 4-byte boundary
18007     and has a size of 4 bytes.  By using `-mno-bit-align', the
18008     structure is aligned to a 1-byte boundary and is 1 byte in size.
18009
18010`-mno-strict-align'
18011`-mstrict-align'
18012     On System V.4 and embedded PowerPC systems do not (do) assume that
18013     unaligned memory references are handled by the system.
18014
18015`-mrelocatable'
18016`-mno-relocatable'
18017     Generate code that allows (does not allow) a static executable to
18018     be relocated to a different address at run time.  A simple embedded
18019     PowerPC system loader should relocate the entire contents of
18020     `.got2' and 4-byte locations listed in the `.fixup' section, a
18021     table of 32-bit addresses generated by this option.  For this to
18022     work, all objects linked together must be compiled with
18023     `-mrelocatable' or `-mrelocatable-lib'.  `-mrelocatable' code
18024     aligns the stack to an 8-byte boundary.
18025
18026`-mrelocatable-lib'
18027`-mno-relocatable-lib'
18028     Like `-mrelocatable', `-mrelocatable-lib' generates a `.fixup'
18029     section to allow static executables to be relocated at run time,
18030     but `-mrelocatable-lib' does not use the smaller stack alignment
18031     of `-mrelocatable'.  Objects compiled with `-mrelocatable-lib' may
18032     be linked with objects compiled with any combination of the
18033     `-mrelocatable' options.
18034
18035`-mno-toc'
18036`-mtoc'
18037     On System V.4 and embedded PowerPC systems do not (do) assume that
18038     register 2 contains a pointer to a global area pointing to the
18039     addresses used in the program.
18040
18041`-mlittle'
18042`-mlittle-endian'
18043     On System V.4 and embedded PowerPC systems compile code for the
18044     processor in little-endian mode.  The `-mlittle-endian' option is
18045     the same as `-mlittle'.
18046
18047`-mbig'
18048`-mbig-endian'
18049     On System V.4 and embedded PowerPC systems compile code for the
18050     processor in big-endian mode.  The `-mbig-endian' option is the
18051     same as `-mbig'.
18052
18053`-mdynamic-no-pic'
18054     On Darwin and Mac OS X systems, compile code so that it is not
18055     relocatable, but that its external references are relocatable.  The
18056     resulting code is suitable for applications, but not shared
18057     libraries.
18058
18059`-msingle-pic-base'
18060     Treat the register used for PIC addressing as read-only, rather
18061     than loading it in the prologue for each function.  The runtime
18062     system is responsible for initializing this register with an
18063     appropriate value before execution begins.
18064
18065`-mprioritize-restricted-insns=PRIORITY'
18066     This option controls the priority that is assigned to
18067     dispatch-slot restricted instructions during the second scheduling
18068     pass.  The argument PRIORITY takes the value `0', `1', or `2' to
18069     assign no, highest, or second-highest (respectively) priority to
18070     dispatch-slot restricted instructions.
18071
18072`-msched-costly-dep=DEPENDENCE_TYPE'
18073     This option controls which dependences are considered costly by
18074     the target during instruction scheduling.  The argument
18075     DEPENDENCE_TYPE takes one of the following values:
18076
18077    `no'
18078          No dependence is costly.
18079
18080    `all'
18081          All dependences are costly.
18082
18083    `true_store_to_load'
18084          A true dependence from store to load is costly.
18085
18086    `store_to_load'
18087          Any dependence from store to load is costly.
18088
18089    NUMBER
18090          Any dependence for which the latency is greater than or equal
18091          to NUMBER is costly.
18092
18093`-minsert-sched-nops=SCHEME'
18094     This option controls which NOP insertion scheme is used during the
18095     second scheduling pass.  The argument SCHEME takes one of the
18096     following values:
18097
18098    `no'
18099          Don't insert NOPs.
18100
18101    `pad'
18102          Pad with NOPs any dispatch group that has vacant issue slots,
18103          according to the scheduler's grouping.
18104
18105    `regroup_exact'
18106          Insert NOPs to force costly dependent insns into separate
18107          groups.  Insert exactly as many NOPs as needed to force an
18108          insn to a new group, according to the estimated processor
18109          grouping.
18110
18111    NUMBER
18112          Insert NOPs to force costly dependent insns into separate
18113          groups.  Insert NUMBER NOPs to force an insn to a new group.
18114
18115`-mcall-sysv'
18116     On System V.4 and embedded PowerPC systems compile code using
18117     calling conventions that adhere to the March 1995 draft of the
18118     System V Application Binary Interface, PowerPC processor
18119     supplement.  This is the default unless you configured GCC using
18120     `powerpc-*-eabiaix'.
18121
18122`-mcall-sysv-eabi'
18123`-mcall-eabi'
18124     Specify both `-mcall-sysv' and `-meabi' options.
18125
18126`-mcall-sysv-noeabi'
18127     Specify both `-mcall-sysv' and `-mno-eabi' options.
18128
18129`-mcall-aixdesc'
18130     On System V.4 and embedded PowerPC systems compile code for the AIX
18131     operating system.
18132
18133`-mcall-linux'
18134     On System V.4 and embedded PowerPC systems compile code for the
18135     Linux-based GNU system.
18136
18137`-mcall-freebsd'
18138     On System V.4 and embedded PowerPC systems compile code for the
18139     FreeBSD operating system.
18140
18141`-mcall-netbsd'
18142     On System V.4 and embedded PowerPC systems compile code for the
18143     NetBSD operating system.
18144
18145`-mcall-openbsd'
18146     On System V.4 and embedded PowerPC systems compile code for the
18147     OpenBSD operating system.
18148
18149`-maix-struct-return'
18150     Return all structures in memory (as specified by the AIX ABI).
18151
18152`-msvr4-struct-return'
18153     Return structures smaller than 8 bytes in registers (as specified
18154     by the SVR4 ABI).
18155
18156`-mabi=ABI-TYPE'
18157     Extend the current ABI with a particular extension, or remove such
18158     extension.  Valid values are `altivec', `no-altivec', `spe',
18159     `no-spe', `ibmlongdouble', `ieeelongdouble', `elfv1', `elfv2'.
18160
18161`-mabi=spe'
18162     Extend the current ABI with SPE ABI extensions.  This does not
18163     change the default ABI, instead it adds the SPE ABI extensions to
18164     the current ABI.
18165
18166`-mabi=no-spe'
18167     Disable Book-E SPE ABI extensions for the current ABI.
18168
18169`-mabi=ibmlongdouble'
18170     Change the current ABI to use IBM extended-precision long double.
18171     This is a PowerPC 32-bit SYSV ABI option.
18172
18173`-mabi=ieeelongdouble'
18174     Change the current ABI to use IEEE extended-precision long double.
18175     This is a PowerPC 32-bit Linux ABI option.
18176
18177`-mabi=elfv1'
18178     Change the current ABI to use the ELFv1 ABI.  This is the default
18179     ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
18180     ABI requires special system support and is likely to fail in
18181     spectacular ways.
18182
18183`-mabi=elfv2'
18184     Change the current ABI to use the ELFv2 ABI.  This is the default
18185     ABI for little-endian PowerPC 64-bit Linux.  Overriding the
18186     default ABI requires special system support and is likely to fail
18187     in spectacular ways.
18188
18189`-mprototype'
18190`-mno-prototype'
18191     On System V.4 and embedded PowerPC systems assume that all calls to
18192     variable argument functions are properly prototyped.  Otherwise,
18193     the compiler must insert an instruction before every
18194     non-prototyped call to set or clear bit 6 of the condition code
18195     register (`CR') to indicate whether floating-point values are
18196     passed in the floating-point registers in case the function takes
18197     variable arguments.  With `-mprototype', only calls to prototyped
18198     variable argument functions set or clear the bit.
18199
18200`-msim'
18201     On embedded PowerPC systems, assume that the startup module is
18202     called `sim-crt0.o' and that the standard C libraries are
18203     `libsim.a' and `libc.a'.  This is the default for
18204     `powerpc-*-eabisim' configurations.
18205
18206`-mmvme'
18207     On embedded PowerPC systems, assume that the startup module is
18208     called `crt0.o' and the standard C libraries are `libmvme.a' and
18209     `libc.a'.
18210
18211`-mads'
18212     On embedded PowerPC systems, assume that the startup module is
18213     called `crt0.o' and the standard C libraries are `libads.a' and
18214     `libc.a'.
18215
18216`-myellowknife'
18217     On embedded PowerPC systems, assume that the startup module is
18218     called `crt0.o' and the standard C libraries are `libyk.a' and
18219     `libc.a'.
18220
18221`-mvxworks'
18222     On System V.4 and embedded PowerPC systems, specify that you are
18223     compiling for a VxWorks system.
18224
18225`-memb'
18226     On embedded PowerPC systems, set the `PPC_EMB' bit in the ELF flags
18227     header to indicate that `eabi' extended relocations are used.
18228
18229`-meabi'
18230`-mno-eabi'
18231     On System V.4 and embedded PowerPC systems do (do not) adhere to
18232     the Embedded Applications Binary Interface (EABI), which is a set
18233     of modifications to the System V.4 specifications.  Selecting
18234     `-meabi' means that the stack is aligned to an 8-byte boundary, a
18235     function `__eabi' is called from `main' to set up the EABI
18236     environment, and the `-msdata' option can use both `r2' and `r13'
18237     to point to two separate small data areas.  Selecting `-mno-eabi'
18238     means that the stack is aligned to a 16-byte boundary, no EABI
18239     initialization function is called from `main', and the `-msdata'
18240     option only uses `r13' to point to a single small data area.  The
18241     `-meabi' option is on by default if you configured GCC using one
18242     of the `powerpc*-*-eabi*' options.
18243
18244`-msdata=eabi'
18245     On System V.4 and embedded PowerPC systems, put small initialized
18246     `const' global and static data in the `.sdata2' section, which is
18247     pointed to by register `r2'.  Put small initialized non-`const'
18248     global and static data in the `.sdata' section, which is pointed
18249     to by register `r13'.  Put small uninitialized global and static
18250     data in the `.sbss' section, which is adjacent to the `.sdata'
18251     section.  The `-msdata=eabi' option is incompatible with the
18252     `-mrelocatable' option.  The `-msdata=eabi' option also sets the
18253     `-memb' option.
18254
18255`-msdata=sysv'
18256     On System V.4 and embedded PowerPC systems, put small global and
18257     static data in the `.sdata' section, which is pointed to by
18258     register `r13'.  Put small uninitialized global and static data in
18259     the `.sbss' section, which is adjacent to the `.sdata' section.
18260     The `-msdata=sysv' option is incompatible with the `-mrelocatable'
18261     option.
18262
18263`-msdata=default'
18264`-msdata'
18265     On System V.4 and embedded PowerPC systems, if `-meabi' is used,
18266     compile code the same as `-msdata=eabi', otherwise compile code the
18267     same as `-msdata=sysv'.
18268
18269`-msdata=data'
18270     On System V.4 and embedded PowerPC systems, put small global data
18271     in the `.sdata' section.  Put small uninitialized global data in
18272     the `.sbss' section.  Do not use register `r13' to address small
18273     data however.  This is the default behavior unless other `-msdata'
18274     options are used.
18275
18276`-msdata=none'
18277`-mno-sdata'
18278     On embedded PowerPC systems, put all initialized global and static
18279     data in the `.data' section, and all uninitialized data in the
18280     `.bss' section.
18281
18282`-mblock-move-inline-limit=NUM'
18283     Inline all block moves (such as calls to `memcpy' or structure
18284     copies) less than or equal to NUM bytes.  The minimum value for
18285     NUM is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.
18286     The default value is target-specific.
18287
18288`-G NUM'
18289     On embedded PowerPC systems, put global and static items less than
18290     or equal to NUM bytes into the small data or BSS sections instead
18291     of the normal data or BSS section.  By default, NUM is 8.  The `-G
18292     NUM' switch is also passed to the linker.  All modules should be
18293     compiled with the same `-G NUM' value.
18294
18295`-mregnames'
18296`-mno-regnames'
18297     On System V.4 and embedded PowerPC systems do (do not) emit
18298     register names in the assembly language output using symbolic
18299     forms.
18300
18301`-mlongcall'
18302`-mno-longcall'
18303     By default assume that all calls are far away so that a longer and
18304     more expensive calling sequence is required.  This is required for
18305     calls farther than 32 megabytes (33,554,432 bytes) from the
18306     current location.  A short call is generated if the compiler knows
18307     the call cannot be that far away.  This setting can be overridden
18308     by the `shortcall' function attribute, or by `#pragma longcall(0)'.
18309
18310     Some linkers are capable of detecting out-of-range calls and
18311     generating glue code on the fly.  On these systems, long calls are
18312     unnecessary and generate slower code.  As of this writing, the AIX
18313     linker can do this, as can the GNU linker for PowerPC/64.  It is
18314     planned to add this feature to the GNU linker for 32-bit PowerPC
18315     systems as well.
18316
18317     On Darwin/PPC systems, `#pragma longcall' generates `jbsr callee,
18318     L42', plus a "branch island" (glue code).  The two target
18319     addresses represent the callee and the branch island.  The
18320     Darwin/PPC linker prefers the first address and generates a `bl
18321     callee' if the PPC `bl' instruction reaches the callee directly;
18322     otherwise, the linker generates `bl L42' to call the branch
18323     island.  The branch island is appended to the body of the calling
18324     function; it computes the full 32-bit address of the callee and
18325     jumps to it.
18326
18327     On Mach-O (Darwin) systems, this option directs the compiler emit
18328     to the glue for every direct call, and the Darwin linker decides
18329     whether to use or discard it.
18330
18331     In the future, GCC may ignore all longcall specifications when the
18332     linker is known to generate glue.
18333
18334`-mtls-markers'
18335`-mno-tls-markers'
18336     Mark (do not mark) calls to `__tls_get_addr' with a relocation
18337     specifying the function argument.  The relocation allows the
18338     linker to reliably associate function call with argument setup
18339     instructions for TLS optimization, which in turn allows GCC to
18340     better schedule the sequence.
18341
18342`-pthread'
18343     Adds support for multithreading with the "pthreads" library.  This
18344     option sets flags for both the preprocessor and linker.
18345
18346`-mrecip'
18347`-mno-recip'
18348     This option enables use of the reciprocal estimate and reciprocal
18349     square root estimate instructions with additional Newton-Raphson
18350     steps to increase precision instead of doing a divide or square
18351     root and divide for floating-point arguments.  You should use the
18352     `-ffast-math' option when using `-mrecip' (or at least
18353     `-funsafe-math-optimizations', `-finite-math-only',
18354     `-freciprocal-math' and `-fno-trapping-math').  Note that while
18355     the throughput of the sequence is generally higher than the
18356     throughput of the non-reciprocal instruction, the precision of the
18357     sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0
18358     equals 0.99999994) for reciprocal square roots.
18359
18360`-mrecip=OPT'
18361     This option controls which reciprocal estimate instructions may be
18362     used.  OPT is a comma-separated list of options, which may be
18363     preceded by a `!' to invert the option:
18364
18365    `all'
18366          Enable all estimate instructions.
18367
18368    `default'
18369          Enable the default instructions, equivalent to `-mrecip'.
18370
18371    `none'
18372          Disable all estimate instructions, equivalent to `-mno-recip'.
18373
18374    `div'
18375          Enable the reciprocal approximation instructions for both
18376          single and double precision.
18377
18378    `divf'
18379          Enable the single-precision reciprocal approximation
18380          instructions.
18381
18382    `divd'
18383          Enable the double-precision reciprocal approximation
18384          instructions.
18385
18386    `rsqrt'
18387          Enable the reciprocal square root approximation instructions
18388          for both single and double precision.
18389
18390    `rsqrtf'
18391          Enable the single-precision reciprocal square root
18392          approximation instructions.
18393
18394    `rsqrtd'
18395          Enable the double-precision reciprocal square root
18396          approximation instructions.
18397
18398
18399     So, for example, `-mrecip=all,!rsqrtd' enables all of the
18400     reciprocal estimate instructions, except for the `FRSQRTE',
18401     `XSRSQRTEDP', and `XVRSQRTEDP' instructions which handle the
18402     double-precision reciprocal square root calculations.
18403
18404`-mrecip-precision'
18405`-mno-recip-precision'
18406     Assume (do not assume) that the reciprocal estimate instructions
18407     provide higher-precision estimates than is mandated by the PowerPC
18408     ABI.  Selecting `-mcpu=power6', `-mcpu=power7' or `-mcpu=power8'
18409     automatically selects `-mrecip-precision'.  The double-precision
18410     square root estimate instructions are not generated by default on
18411     low-precision machines, since they do not provide an estimate that
18412     converges after three steps.
18413
18414`-mveclibabi=TYPE'
18415     Specifies the ABI type to use for vectorizing intrinsics using an
18416     external library.  The only type supported at present is `mass',
18417     which specifies to use IBM's Mathematical Acceleration Subsystem
18418     (MASS) libraries for vectorizing intrinsics using external
18419     libraries.  GCC currently emits calls to `acosd2', `acosf4',
18420     `acoshd2', `acoshf4', `asind2', `asinf4', `asinhd2', `asinhf4',
18421     `atan2d2', `atan2f4', `atand2', `atanf4', `atanhd2', `atanhf4',
18422     `cbrtd2', `cbrtf4', `cosd2', `cosf4', `coshd2', `coshf4',
18423     `erfcd2', `erfcf4', `erfd2', `erff4', `exp2d2', `exp2f4', `expd2',
18424     `expf4', `expm1d2', `expm1f4', `hypotd2', `hypotf4', `lgammad2',
18425     `lgammaf4', `log10d2', `log10f4', `log1pd2', `log1pf4', `log2d2',
18426     `log2f4', `logd2', `logf4', `powd2', `powf4', `sind2', `sinf4',
18427     `sinhd2', `sinhf4', `sqrtd2', `sqrtf4', `tand2', `tanf4',
18428     `tanhd2', and `tanhf4' when generating code for power7.  Both
18429     `-ftree-vectorize' and `-funsafe-math-optimizations' must also be
18430     enabled.  The MASS libraries must be specified at link time.
18431
18432`-mfriz'
18433`-mno-friz'
18434     Generate (do not generate) the `friz' instruction when the
18435     `-funsafe-math-optimizations' option is used to optimize rounding
18436     of floating-point values to 64-bit integer and back to floating
18437     point.  The `friz' instruction does not return the same value if
18438     the floating-point number is too large to fit in an integer.
18439
18440`-mpointers-to-nested-functions'
18441`-mno-pointers-to-nested-functions'
18442     Generate (do not generate) code to load up the static chain
18443     register (`r11') when calling through a pointer on AIX and 64-bit
18444     Linux systems where a function pointer points to a 3-word
18445     descriptor giving the function address, TOC value to be loaded in
18446     register `r2', and static chain value to be loaded in register
18447     `r11'.  The `-mpointers-to-nested-functions' is on by default.
18448     You cannot call through pointers to nested functions or pointers
18449     to functions compiled in other languages that use the static chain
18450     if you use `-mno-pointers-to-nested-functions'.
18451
18452`-msave-toc-indirect'
18453`-mno-save-toc-indirect'
18454     Generate (do not generate) code to save the TOC value in the
18455     reserved stack location in the function prologue if the function
18456     calls through a pointer on AIX and 64-bit Linux systems.  If the
18457     TOC value is not saved in the prologue, it is saved just before
18458     the call through the pointer.  The `-mno-save-toc-indirect' option
18459     is the default.
18460
18461`-mcompat-align-parm'
18462`-mno-compat-align-parm'
18463     Generate (do not generate) code to pass structure parameters with a
18464     maximum alignment of 64 bits, for compatibility with older versions
18465     of GCC.
18466
18467     Older versions of GCC (prior to 4.9.0) incorrectly did not align a
18468     structure parameter on a 128-bit boundary when that structure
18469     contained a member requiring 128-bit alignment.  This is corrected
18470     in more recent versions of GCC.  This option may be used to
18471     generate code that is compatible with functions compiled with
18472     older versions of GCC.
18473
18474     The `-mno-compat-align-parm' option is the default.
18475
18476
18477File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
18478
184793.17.38 RX Options
18480------------------
18481
18482These command-line options are defined for RX targets:
18483
18484`-m64bit-doubles'
18485`-m32bit-doubles'
18486     Make the `double' data type be 64 bits (`-m64bit-doubles') or 32
18487     bits (`-m32bit-doubles') in size.  The default is
18488     `-m32bit-doubles'.  _Note_ RX floating-point hardware only works
18489     on 32-bit values, which is why the default is `-m32bit-doubles'.
18490
18491`-fpu'
18492`-nofpu'
18493     Enables (`-fpu') or disables (`-nofpu') the use of RX
18494     floating-point hardware.  The default is enabled for the RX600
18495     series and disabled for the RX200 series.
18496
18497     Floating-point instructions are only generated for 32-bit
18498     floating-point values, however, so the FPU hardware is not used
18499     for doubles if the `-m64bit-doubles' option is used.
18500
18501     _Note_ If the `-fpu' option is enabled then
18502     `-funsafe-math-optimizations' is also enabled automatically.  This
18503     is because the RX FPU instructions are themselves unsafe.
18504
18505`-mcpu=NAME'
18506     Selects the type of RX CPU to be targeted.  Currently three types
18507     are supported, the generic `RX600' and `RX200' series hardware and
18508     the specific `RX610' CPU.  The default is `RX600'.
18509
18510     The only difference between `RX600' and `RX610' is that the
18511     `RX610' does not support the `MVTIPL' instruction.
18512
18513     The `RX200' series does not have a hardware floating-point unit
18514     and so `-nofpu' is enabled by default when this type is selected.
18515
18516`-mbig-endian-data'
18517`-mlittle-endian-data'
18518     Store data (but not code) in the big-endian format.  The default is
18519     `-mlittle-endian-data', i.e. to store data in the little-endian
18520     format.
18521
18522`-msmall-data-limit=N'
18523     Specifies the maximum size in bytes of global and static variables
18524     which can be placed into the small data area.  Using the small data
18525     area can lead to smaller and faster code, but the size of area is
18526     limited and it is up to the programmer to ensure that the area does
18527     not overflow.  Also when the small data area is used one of the
18528     RX's registers (usually `r13') is reserved for use pointing to this
18529     area, so it is no longer available for use by the compiler.  This
18530     could result in slower and/or larger code if variables are pushed
18531     onto the stack instead of being held in this register.
18532
18533     Note, common variables (variables that have not been initialized)
18534     and constants are not placed into the small data area as they are
18535     assigned to other sections in the output executable.
18536
18537     The default value is zero, which disables this feature.  Note, this
18538     feature is not enabled by default with higher optimization levels
18539     (`-O2' etc) because of the potentially detrimental effects of
18540     reserving a register.  It is up to the programmer to experiment and
18541     discover whether this feature is of benefit to their program.  See
18542     the description of the `-mpid' option for a description of how the
18543     actual register to hold the small data area pointer is chosen.
18544
18545`-msim'
18546`-mno-sim'
18547     Use the simulator runtime.  The default is to use the libgloss
18548     board-specific runtime.
18549
18550`-mas100-syntax'
18551`-mno-as100-syntax'
18552     When generating assembler output use a syntax that is compatible
18553     with Renesas's AS100 assembler.  This syntax can also be handled
18554     by the GAS assembler, but it has some restrictions so it is not
18555     generated by default.
18556
18557`-mmax-constant-size=N'
18558     Specifies the maximum size, in bytes, of a constant that can be
18559     used as an operand in a RX instruction.  Although the RX
18560     instruction set does allow constants of up to 4 bytes in length to
18561     be used in instructions, a longer value equates to a longer
18562     instruction.  Thus in some circumstances it can be beneficial to
18563     restrict the size of constants that are used in instructions.
18564     Constants that are too big are instead placed into a constant pool
18565     and referenced via register indirection.
18566
18567     The value N can be between 0 and 4.  A value of 0 (the default) or
18568     4 means that constants of any size are allowed.
18569
18570`-mrelax'
18571     Enable linker relaxation.  Linker relaxation is a process whereby
18572     the linker attempts to reduce the size of a program by finding
18573     shorter versions of various instructions.  Disabled by default.
18574
18575`-mint-register=N'
18576     Specify the number of registers to reserve for fast interrupt
18577     handler functions.  The value N can be between 0 and 4.  A value
18578     of 1 means that register `r13' is reserved for the exclusive use
18579     of fast interrupt handlers.  A value of 2 reserves `r13' and
18580     `r12'.  A value of 3 reserves `r13', `r12' and `r11', and a value
18581     of 4 reserves `r13' through `r10'.  A value of 0, the default,
18582     does not reserve any registers.
18583
18584`-msave-acc-in-interrupts'
18585     Specifies that interrupt handler functions should preserve the
18586     accumulator register.  This is only necessary if normal code might
18587     use the accumulator register, for example because it performs
18588     64-bit multiplications.  The default is to ignore the accumulator
18589     as this makes the interrupt handlers faster.
18590
18591`-mpid'
18592`-mno-pid'
18593     Enables the generation of position independent data.  When enabled
18594     any access to constant data is done via an offset from a base
18595     address held in a register.  This allows the location of constant
18596     data to be determined at run time without requiring the executable
18597     to be relocated, which is a benefit to embedded applications with
18598     tight memory constraints.  Data that can be modified is not
18599     affected by this option.
18600
18601     Note, using this feature reserves a register, usually `r13', for
18602     the constant data base address.  This can result in slower and/or
18603     larger code, especially in complicated functions.
18604
18605     The actual register chosen to hold the constant data base address
18606     depends upon whether the `-msmall-data-limit' and/or the
18607     `-mint-register' command-line options are enabled.  Starting with
18608     register `r13' and proceeding downwards, registers are allocated
18609     first to satisfy the requirements of `-mint-register', then
18610     `-mpid' and finally `-msmall-data-limit'.  Thus it is possible for
18611     the small data area register to be `r8' if both `-mint-register=4'
18612     and `-mpid' are specified on the command line.
18613
18614     By default this feature is not enabled.  The default can be
18615     restored via the `-mno-pid' command-line option.
18616
18617`-mno-warn-multiple-fast-interrupts'
18618`-mwarn-multiple-fast-interrupts'
18619     Prevents GCC from issuing a warning message if it finds more than
18620     one fast interrupt handler when it is compiling a file.  The
18621     default is to issue a warning for each extra fast interrupt
18622     handler found, as the RX only supports one such interrupt.
18623
18624
18625 _Note:_ The generic GCC command-line option `-ffixed-REG' has special
18626significance to the RX port when used with the `interrupt' function
18627attribute.  This attribute indicates a function intended to process
18628fast interrupts.  GCC ensures that it only uses the registers `r10',
18629`r11', `r12' and/or `r13' and only provided that the normal use of the
18630corresponding registers have been restricted via the `-ffixed-REG' or
18631`-mint-register' command-line options.
18632
18633
18634File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RX Options,  Up: Submodel Options
18635
186363.17.39 S/390 and zSeries Options
18637---------------------------------
18638
18639These are the `-m' options defined for the S/390 and zSeries
18640architecture.
18641
18642`-mhard-float'
18643`-msoft-float'
18644     Use (do not use) the hardware floating-point instructions and
18645     registers for floating-point operations.  When `-msoft-float' is
18646     specified, functions in `libgcc.a' are used to perform
18647     floating-point operations.  When `-mhard-float' is specified, the
18648     compiler generates IEEE floating-point instructions.  This is the
18649     default.
18650
18651`-mhard-dfp'
18652`-mno-hard-dfp'
18653     Use (do not use) the hardware decimal-floating-point instructions
18654     for decimal-floating-point operations.  When `-mno-hard-dfp' is
18655     specified, functions in `libgcc.a' are used to perform
18656     decimal-floating-point operations.  When `-mhard-dfp' is
18657     specified, the compiler generates decimal-floating-point hardware
18658     instructions.  This is the default for `-march=z9-ec' or higher.
18659
18660`-mlong-double-64'
18661`-mlong-double-128'
18662     These switches control the size of `long double' type. A size of
18663     64 bits makes the `long double' type equivalent to the `double'
18664     type. This is the default.
18665
18666`-mbackchain'
18667`-mno-backchain'
18668     Store (do not store) the address of the caller's frame as
18669     backchain pointer into the callee's stack frame.  A backchain may
18670     be needed to allow debugging using tools that do not understand
18671     DWARF 2 call frame information.  When `-mno-packed-stack' is in
18672     effect, the backchain pointer is stored at the bottom of the stack
18673     frame; when `-mpacked-stack' is in effect, the backchain is placed
18674     into the topmost word of the 96/160 byte register save area.
18675
18676     In general, code compiled with `-mbackchain' is call-compatible
18677     with code compiled with `-mmo-backchain'; however, use of the
18678     backchain for debugging purposes usually requires that the whole
18679     binary is built with `-mbackchain'.  Note that the combination of
18680     `-mbackchain', `-mpacked-stack' and `-mhard-float' is not
18681     supported.  In order to build a linux kernel use `-msoft-float'.
18682
18683     The default is to not maintain the backchain.
18684
18685`-mpacked-stack'
18686`-mno-packed-stack'
18687     Use (do not use) the packed stack layout.  When
18688     `-mno-packed-stack' is specified, the compiler uses the all fields
18689     of the 96/160 byte register save area only for their default
18690     purpose; unused fields still take up stack space.  When
18691     `-mpacked-stack' is specified, register save slots are densely
18692     packed at the top of the register save area; unused space is
18693     reused for other purposes, allowing for more efficient use of the
18694     available stack space.  However, when `-mbackchain' is also in
18695     effect, the topmost word of the save area is always used to store
18696     the backchain, and the return address register is always saved two
18697     words below the backchain.
18698
18699     As long as the stack frame backchain is not used, code generated
18700     with `-mpacked-stack' is call-compatible with code generated with
18701     `-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
18702     for S/390 or zSeries generated code that uses the stack frame
18703     backchain at run time, not just for debugging purposes.  Such code
18704     is not call-compatible with code compiled with `-mpacked-stack'.
18705     Also, note that the combination of `-mbackchain', `-mpacked-stack'
18706     and `-mhard-float' is not supported.  In order to build a linux
18707     kernel use `-msoft-float'.
18708
18709     The default is to not use the packed stack layout.
18710
18711`-msmall-exec'
18712`-mno-small-exec'
18713     Generate (or do not generate) code using the `bras' instruction to
18714     do subroutine calls.  This only works reliably if the total
18715     executable size does not exceed 64k.  The default is to use the
18716     `basr' instruction instead, which does not have this limitation.
18717
18718`-m64'
18719`-m31'
18720     When `-m31' is specified, generate code compliant to the GNU/Linux
18721     for S/390 ABI.  When `-m64' is specified, generate code compliant
18722     to the GNU/Linux for zSeries ABI.  This allows GCC in particular
18723     to generate 64-bit instructions.  For the `s390' targets, the
18724     default is `-m31', while the `s390x' targets default to `-m64'.
18725
18726`-mzarch'
18727`-mesa'
18728     When `-mzarch' is specified, generate code using the instructions
18729     available on z/Architecture.  When `-mesa' is specified, generate
18730     code using the instructions available on ESA/390.  Note that
18731     `-mesa' is not possible with `-m64'.  When generating code
18732     compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'.
18733     When generating code compliant to the GNU/Linux for zSeries ABI,
18734     the default is `-mzarch'.
18735
18736`-mmvcle'
18737`-mno-mvcle'
18738     Generate (or do not generate) code using the `mvcle' instruction
18739     to perform block moves.  When `-mno-mvcle' is specified, use a
18740     `mvc' loop instead.  This is the default unless optimizing for
18741     size.
18742
18743`-mdebug'
18744`-mno-debug'
18745     Print (or do not print) additional debug information when
18746     compiling.  The default is to not print debug information.
18747
18748`-march=CPU-TYPE'
18749     Generate code that runs on CPU-TYPE, which is the name of a system
18750     representing a certain processor type.  Possible values for
18751     CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec', `z10',
18752     `z196', `zEC12', and `z13'.  When generating code using the
18753     instructions available on z/Architecture, the default is
18754     `-march=z900'.  Otherwise, the default is `-march=g5'.
18755
18756`-mtune=CPU-TYPE'
18757     Tune to CPU-TYPE everything applicable about the generated code,
18758     except for the ABI and the set of available instructions.  The
18759     list of CPU-TYPE values is the same as for `-march'.  The default
18760     is the value used for `-march'.
18761
18762`-mtpf-trace'
18763`-mno-tpf-trace'
18764     Generate code that adds (does not add) in TPF OS specific branches
18765     to trace routines in the operating system.  This option is off by
18766     default, even when compiling for the TPF OS.
18767
18768`-mfused-madd'
18769`-mno-fused-madd'
18770     Generate code that uses (does not use) the floating-point multiply
18771     and accumulate instructions.  These instructions are generated by
18772     default if hardware floating point is used.
18773
18774`-mwarn-framesize=FRAMESIZE'
18775     Emit a warning if the current function exceeds the given frame
18776     size.  Because this is a compile-time check it doesn't need to be
18777     a real problem when the program runs.  It is intended to identify
18778     functions that most probably cause a stack overflow.  It is useful
18779     to be used in an environment with limited stack size e.g. the
18780     linux kernel.
18781
18782`-mwarn-dynamicstack'
18783     Emit a warning if the function calls `alloca' or uses
18784     dynamically-sized arrays.  This is generally a bad idea with a
18785     limited stack size.
18786
18787`-mstack-guard=STACK-GUARD'
18788`-mstack-size=STACK-SIZE'
18789     If these options are provided the S/390 back end emits additional
18790     instructions in the function prologue that trigger a trap if the
18791     stack size is STACK-GUARD bytes above the STACK-SIZE (remember
18792     that the stack on S/390 grows downward).  If the STACK-GUARD
18793     option is omitted the smallest power of 2 larger than the frame
18794     size of the compiled function is chosen.  These options are
18795     intended to be used to help debugging stack overflow problems.
18796     The additionally emitted code causes only little overhead and
18797     hence can also be used in production-like systems without greater
18798     performance degradation.  The given values have to be exact powers
18799     of 2 and STACK-SIZE has to be greater than STACK-GUARD without
18800     exceeding 64k.  In order to be efficient the extra code makes the
18801     assumption that the stack starts at an address aligned to the
18802     value given by STACK-SIZE.  The STACK-GUARD option can only be
18803     used in conjunction with STACK-SIZE.
18804
18805`-mhotpatch=PRE-HALFWORDS,POST-HALFWORDS'
18806     If the hotpatch option is enabled, a "hot-patching" function
18807     prologue is generated for all functions in the compilation unit.
18808     The funtion label is prepended with the given number of two-byte
18809     NOP instructions (PRE-HALFWORDS, maximum 1000000).  After the
18810     label, 2 * POST-HALFWORDS bytes are appended, using the largest
18811     NOP like instructions the architecture allows (maximum 1000000).
18812
18813     If both arguments are zero, hotpatching is disabled.
18814
18815     This option can be overridden for individual functions with the
18816     `hotpatch' attribute.
18817
18818
18819File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
18820
188213.17.40 Score Options
18822---------------------
18823
18824These options are defined for Score implementations:
18825
18826`-meb'
18827     Compile code for big-endian mode.  This is the default.
18828
18829`-mel'
18830     Compile code for little-endian mode.
18831
18832`-mnhwloop'
18833     Disable generation of `bcnz' instructions.
18834
18835`-muls'
18836     Enable generation of unaligned load and store instructions.
18837
18838`-mmac'
18839     Enable the use of multiply-accumulate instructions. Disabled by
18840     default.
18841
18842`-mscore5'
18843     Specify the SCORE5 as the target architecture.
18844
18845`-mscore5u'
18846     Specify the SCORE5U of the target architecture.
18847
18848`-mscore7'
18849     Specify the SCORE7 as the target architecture. This is the default.
18850
18851`-mscore7d'
18852     Specify the SCORE7D as the target architecture.
18853
18854
18855File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: Score Options,  Up: Submodel Options
18856
188573.17.41 SH Options
18858------------------
18859
18860These `-m' options are defined for the SH implementations:
18861
18862`-m1'
18863     Generate code for the SH1.
18864
18865`-m2'
18866     Generate code for the SH2.
18867
18868`-m2e'
18869     Generate code for the SH2e.
18870
18871`-m2a-nofpu'
18872     Generate code for the SH2a without FPU, or for a SH2a-FPU in such
18873     a way that the floating-point unit is not used.
18874
18875`-m2a-single-only'
18876     Generate code for the SH2a-FPU, in such a way that no
18877     double-precision floating-point operations are used.
18878
18879`-m2a-single'
18880     Generate code for the SH2a-FPU assuming the floating-point unit is
18881     in single-precision mode by default.
18882
18883`-m2a'
18884     Generate code for the SH2a-FPU assuming the floating-point unit is
18885     in double-precision mode by default.
18886
18887`-m3'
18888     Generate code for the SH3.
18889
18890`-m3e'
18891     Generate code for the SH3e.
18892
18893`-m4-nofpu'
18894     Generate code for the SH4 without a floating-point unit.
18895
18896`-m4-single-only'
18897     Generate code for the SH4 with a floating-point unit that only
18898     supports single-precision arithmetic.
18899
18900`-m4-single'
18901     Generate code for the SH4 assuming the floating-point unit is in
18902     single-precision mode by default.
18903
18904`-m4'
18905     Generate code for the SH4.
18906
18907`-m4-100'
18908     Generate code for SH4-100.
18909
18910`-m4-100-nofpu'
18911     Generate code for SH4-100 in such a way that the floating-point
18912     unit is not used.
18913
18914`-m4-100-single'
18915     Generate code for SH4-100 assuming the floating-point unit is in
18916     single-precision mode by default.
18917
18918`-m4-100-single-only'
18919     Generate code for SH4-100 in such a way that no double-precision
18920     floating-point operations are used.
18921
18922`-m4-200'
18923     Generate code for SH4-200.
18924
18925`-m4-200-nofpu'
18926     Generate code for SH4-200 without in such a way that the
18927     floating-point unit is not used.
18928
18929`-m4-200-single'
18930     Generate code for SH4-200 assuming the floating-point unit is in
18931     single-precision mode by default.
18932
18933`-m4-200-single-only'
18934     Generate code for SH4-200 in such a way that no double-precision
18935     floating-point operations are used.
18936
18937`-m4-300'
18938     Generate code for SH4-300.
18939
18940`-m4-300-nofpu'
18941     Generate code for SH4-300 without in such a way that the
18942     floating-point unit is not used.
18943
18944`-m4-300-single'
18945     Generate code for SH4-300 in such a way that no double-precision
18946     floating-point operations are used.
18947
18948`-m4-300-single-only'
18949     Generate code for SH4-300 in such a way that no double-precision
18950     floating-point operations are used.
18951
18952`-m4-340'
18953     Generate code for SH4-340 (no MMU, no FPU).
18954
18955`-m4-500'
18956     Generate code for SH4-500 (no FPU).  Passes `-isa=sh4-nofpu' to the
18957     assembler.
18958
18959`-m4a-nofpu'
18960     Generate code for the SH4al-dsp, or for a SH4a in such a way that
18961     the floating-point unit is not used.
18962
18963`-m4a-single-only'
18964     Generate code for the SH4a, in such a way that no double-precision
18965     floating-point operations are used.
18966
18967`-m4a-single'
18968     Generate code for the SH4a assuming the floating-point unit is in
18969     single-precision mode by default.
18970
18971`-m4a'
18972     Generate code for the SH4a.
18973
18974`-m4al'
18975     Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to
18976     the assembler.  GCC doesn't generate any DSP instructions at the
18977     moment.
18978
18979`-m5-32media'
18980     Generate 32-bit code for SHmedia.
18981
18982`-m5-32media-nofpu'
18983     Generate 32-bit code for SHmedia in such a way that the
18984     floating-point unit is not used.
18985
18986`-m5-64media'
18987     Generate 64-bit code for SHmedia.
18988
18989`-m5-64media-nofpu'
18990     Generate 64-bit code for SHmedia in such a way that the
18991     floating-point unit is not used.
18992
18993`-m5-compact'
18994     Generate code for SHcompact.
18995
18996`-m5-compact-nofpu'
18997     Generate code for SHcompact in such a way that the floating-point
18998     unit is not used.
18999
19000`-mb'
19001     Compile code for the processor in big-endian mode.
19002
19003`-ml'
19004     Compile code for the processor in little-endian mode.
19005
19006`-mdalign'
19007     Align doubles at 64-bit boundaries.  Note that this changes the
19008     calling conventions, and thus some functions from the standard C
19009     library do not work unless you recompile it first with `-mdalign'.
19010
19011`-mrelax'
19012     Shorten some address references at link time, when possible; uses
19013     the linker option `-relax'.
19014
19015`-mbigtable'
19016     Use 32-bit offsets in `switch' tables.  The default is to use
19017     16-bit offsets.
19018
19019`-mbitops'
19020     Enable the use of bit manipulation instructions on SH2A.
19021
19022`-mfmovd'
19023     Enable the use of the instruction `fmovd'.  Check `-mdalign' for
19024     alignment constraints.
19025
19026`-mrenesas'
19027     Comply with the calling conventions defined by Renesas.
19028
19029`-mno-renesas'
19030     Comply with the calling conventions defined for GCC before the
19031     Renesas conventions were available.  This option is the default
19032     for all targets of the SH toolchain.
19033
19034`-mnomacsave'
19035     Mark the `MAC' register as call-clobbered, even if `-mrenesas' is
19036     given.
19037
19038`-mieee'
19039`-mno-ieee'
19040     Control the IEEE compliance of floating-point comparisons, which
19041     affects the handling of cases where the result of a comparison is
19042     unordered.  By default `-mieee' is implicitly enabled.  If
19043     `-ffinite-math-only' is enabled `-mno-ieee' is implicitly set,
19044     which results in faster floating-point greater-equal and
19045     less-equal comparisons.  The implcit settings can be overridden by
19046     specifying either `-mieee' or `-mno-ieee'.
19047
19048`-minline-ic_invalidate'
19049     Inline code to invalidate instruction cache entries after setting
19050     up nested function trampolines.  This option has no effect if
19051     `-musermode' is in effect and the selected code generation option
19052     (e.g. `-m4') does not allow the use of the `icbi' instruction.  If
19053     the selected code generation option does not allow the use of the
19054     `icbi' instruction, and `-musermode' is not in effect, the inlined
19055     code manipulates the instruction cache address array directly with
19056     an associative write.  This not only requires privileged mode at
19057     run time, but it also fails if the cache line had been mapped via
19058     the TLB and has become unmapped.
19059
19060`-misize'
19061     Dump instruction size and location in the assembly code.
19062
19063`-mpadstruct'
19064     This option is deprecated.  It pads structures to multiple of 4
19065     bytes, which is incompatible with the SH ABI.
19066
19067`-matomic-model=MODEL'
19068     Sets the model of atomic operations and additional parameters as a
19069     comma separated list.  For details on the atomic built-in
19070     functions see *note __atomic Builtins::.  The following models and
19071     parameters are supported:
19072
19073    `none'
19074          Disable compiler generated atomic sequences and emit library
19075          calls for atomic operations.  This is the default if the
19076          target is not `sh*-*-linux*'.
19077
19078    `soft-gusa'
19079          Generate GNU/Linux compatible gUSA software atomic sequences
19080          for the atomic built-in functions.  The generated atomic
19081          sequences require additional support from the
19082          interrupt/exception handling code of the system and are only
19083          suitable for SH3* and SH4* single-core systems.  This option
19084          is enabled by default when the target is `sh*-*-linux*' and
19085          SH3* or SH4*.  When the target is SH4A, this option also
19086          partially utilizes the hardware atomic instructions `movli.l'
19087          and `movco.l' to create more efficient code, unless `strict'
19088          is specified.
19089
19090    `soft-tcb'
19091          Generate software atomic sequences that use a variable in the
19092          thread control block.  This is a variation of the gUSA
19093          sequences which can also be used on SH1* and SH2* targets.
19094          The generated atomic sequences require additional support
19095          from the interrupt/exception handling code of the system and
19096          are only suitable for single-core systems.  When using this
19097          model, the `gbr-offset=' parameter has to be specified as
19098          well.
19099
19100    `soft-imask'
19101          Generate software atomic sequences that temporarily disable
19102          interrupts by setting `SR.IMASK = 1111'.  This model works
19103          only when the program runs in privileged mode and is only
19104          suitable for single-core systems.  Additional support from
19105          the interrupt/exception handling code of the system is not
19106          required.  This model is enabled by default when the target is
19107          `sh*-*-linux*' and SH1* or SH2*.
19108
19109    `hard-llcs'
19110          Generate hardware atomic sequences using the `movli.l' and
19111          `movco.l' instructions only.  This is only available on SH4A
19112          and is suitable for multi-core systems.  Since the hardware
19113          instructions support only 32 bit atomic variables access to 8
19114          or 16 bit variables is emulated with 32 bit accesses.  Code
19115          compiled with this option is also compatible with other
19116          software atomic model interrupt/exception handling systems if
19117          executed on an SH4A system.  Additional support from the
19118          interrupt/exception handling code of the system is not
19119          required for this model.
19120
19121    `gbr-offset='
19122          This parameter specifies the offset in bytes of the variable
19123          in the thread control block structure that should be used by
19124          the generated atomic sequences when the `soft-tcb' model has
19125          been selected.  For other models this parameter is ignored.
19126          The specified value must be an integer multiple of four and
19127          in the range 0-1020.
19128
19129    `strict'
19130          This parameter prevents mixed usage of multiple atomic
19131          models, even if they are compatible, and makes the compiler
19132          generate atomic sequences of the specified model only.
19133
19134
19135`-mtas'
19136     Generate the `tas.b' opcode for `__atomic_test_and_set'.  Notice
19137     that depending on the particular hardware and software
19138     configuration this can degrade overall performance due to the
19139     operand cache line flushes that are implied by the `tas.b'
19140     instruction.  On multi-core SH4A processors the `tas.b'
19141     instruction must be used with caution since it can result in data
19142     corruption for certain cache configurations.
19143
19144`-mprefergot'
19145     When generating position-independent code, emit function calls
19146     using the Global Offset Table instead of the Procedure Linkage
19147     Table.
19148
19149`-musermode'
19150`-mno-usermode'
19151     Don't allow (allow) the compiler generating privileged mode code.
19152     Specifying `-musermode' also implies `-mno-inline-ic_invalidate'
19153     if the inlined code would not work in user mode.  `-musermode' is
19154     the default when the target is `sh*-*-linux*'.  If the target is
19155     SH1* or SH2* `-musermode' has no effect, since there is no user
19156     mode.
19157
19158`-multcost=NUMBER'
19159     Set the cost to assume for a multiply insn.
19160
19161`-mdiv=STRATEGY'
19162     Set the division strategy to be used for integer division
19163     operations.  For SHmedia STRATEGY can be one of:
19164
19165    `fp'
19166          Performs the operation in floating point.  This has a very
19167          high latency, but needs only a few instructions, so it might
19168          be a good choice if your code has enough easily-exploitable
19169          ILP to allow the compiler to schedule the floating-point
19170          instructions together with other instructions.  Division by
19171          zero causes a floating-point exception.
19172
19173    `inv'
19174          Uses integer operations to calculate the inverse of the
19175          divisor, and then multiplies the dividend with the inverse.
19176          This strategy allows CSE and hoisting of the inverse
19177          calculation.  Division by zero calculates an unspecified
19178          result, but does not trap.
19179
19180    `inv:minlat'
19181          A variant of `inv' where, if no CSE or hoisting opportunities
19182          have been found, or if the entire operation has been hoisted
19183          to the same place, the last stages of the inverse calculation
19184          are intertwined with the final multiply to reduce the overall
19185          latency, at the expense of using a few more instructions, and
19186          thus offering fewer scheduling opportunities with other code.
19187
19188    `call'
19189          Calls a library function that usually implements the
19190          `inv:minlat' strategy.  This gives high code density for
19191          `m5-*media-nofpu' compilations.
19192
19193    `call2'
19194          Uses a different entry point of the same library function,
19195          where it assumes that a pointer to a lookup table has already
19196          been set up, which exposes the pointer load to CSE and code
19197          hoisting optimizations.
19198
19199    `inv:call'
19200    `inv:call2'
19201    `inv:fp'
19202          Use the `inv' algorithm for initial code generation, but if
19203          the code stays unoptimized, revert to the `call', `call2', or
19204          `fp' strategies, respectively.  Note that the
19205          potentially-trapping side effect of division by zero is
19206          carried by a separate instruction, so it is possible that all
19207          the integer instructions are hoisted out, but the marker for
19208          the side effect stays where it is.  A recombination to
19209          floating-point operations or a call is not possible in that
19210          case.
19211
19212    `inv20u'
19213    `inv20l'
19214          Variants of the `inv:minlat' strategy.  In the case that the
19215          inverse calculation is not separated from the multiply, they
19216          speed up division where the dividend fits into 20 bits (plus
19217          sign where applicable) by inserting a test to skip a number
19218          of operations in this case; this test slows down the case of
19219          larger dividends.  `inv20u' assumes the case of a such a
19220          small dividend to be unlikely, and `inv20l' assumes it to be
19221          likely.
19222
19223
19224     For targets other than SHmedia STRATEGY can be one of:
19225
19226    `call-div1'
19227          Calls a library function that uses the single-step division
19228          instruction `div1' to perform the operation.  Division by
19229          zero calculates an unspecified result and does not trap.
19230          This is the default except for SH4, SH2A and SHcompact.
19231
19232    `call-fp'
19233          Calls a library function that performs the operation in
19234          double precision floating point.  Division by zero causes a
19235          floating-point exception.  This is the default for SHcompact
19236          with FPU.  Specifying this for targets that do not have a
19237          double precision FPU defaults to `call-div1'.
19238
19239    `call-table'
19240          Calls a library function that uses a lookup table for small
19241          divisors and the `div1' instruction with case distinction for
19242          larger divisors.  Division by zero calculates an unspecified
19243          result and does not trap.  This is the default for SH4.
19244          Specifying this for targets that do not have dynamic shift
19245          instructions defaults to `call-div1'.
19246
19247
19248     When a division strategy has not been specified the default
19249     strategy is selected based on the current target.  For SH2A the
19250     default strategy is to use the `divs' and `divu' instructions
19251     instead of library function calls.
19252
19253`-maccumulate-outgoing-args'
19254     Reserve space once for outgoing arguments in the function prologue
19255     rather than around each call.  Generally beneficial for
19256     performance and size.  Also needed for unwinding to avoid changing
19257     the stack frame around conditional code.
19258
19259`-mdivsi3_libfunc=NAME'
19260     Set the name of the library function used for 32-bit signed
19261     division to NAME.  This only affects the name used in the `call'
19262     and `inv:call' division strategies, and the compiler still expects
19263     the same sets of input/output/clobbered registers as if this
19264     option were not present.
19265
19266`-mfixed-range=REGISTER-RANGE'
19267     Generate code treating the given register range as fixed registers.
19268     A fixed register is one that the register allocator can not use.
19269     This is useful when compiling kernel code.  A register range is
19270     specified as two registers separated by a dash.  Multiple register
19271     ranges can be specified separated by a comma.
19272
19273`-mindexed-addressing'
19274     Enable the use of the indexed addressing mode for
19275     SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
19276     implement 32-bit wrap-around semantics for the indexed addressing
19277     mode.  The architecture allows the implementation of processors
19278     with 64-bit MMU, which the OS could use to get 32-bit addressing,
19279     but since no current hardware implementation supports this or any
19280     other way to make the indexed addressing mode safe to use in the
19281     32-bit ABI, the default is `-mno-indexed-addressing'.
19282
19283`-mgettrcost=NUMBER'
19284     Set the cost assumed for the `gettr' instruction to NUMBER.  The
19285     default is 2 if `-mpt-fixed' is in effect, 100 otherwise.
19286
19287`-mpt-fixed'
19288     Assume `pt*' instructions won't trap.  This generally generates
19289     better-scheduled code, but is unsafe on current hardware.  The
19290     current architecture definition says that `ptabs' and `ptrel' trap
19291     when the target anded with 3 is 3.  This has the unintentional
19292     effect of making it unsafe to schedule these instructions before a
19293     branch, or hoist them out of a loop.  For example,
19294     `__do_global_ctors', a part of `libgcc' that runs constructors at
19295     program startup, calls functions in a list which is delimited by
19296     -1.  With the `-mpt-fixed' option, the `ptabs' is done before
19297     testing against -1.  That means that all the constructors run a
19298     bit more quickly, but when the loop comes to the end of the list,
19299     the program crashes because `ptabs' loads -1 into a target
19300     register.
19301
19302     Since this option is unsafe for any hardware implementing the
19303     current architecture specification, the default is
19304     `-mno-pt-fixed'.  Unless specified explicitly with `-mgettrcost',
19305     `-mno-pt-fixed' also implies `-mgettrcost=100'; this deters
19306     register allocation from using target registers for storing
19307     ordinary integers.
19308
19309`-minvalid-symbols'
19310     Assume symbols might be invalid.  Ordinary function symbols
19311     generated by the compiler are always valid to load with
19312     `movi'/`shori'/`ptabs' or `movi'/`shori'/`ptrel', but with
19313     assembler and/or linker tricks it is possible to generate symbols
19314     that cause `ptabs' or `ptrel' to trap.  This option is only
19315     meaningful when `-mno-pt-fixed' is in effect.  It prevents
19316     cross-basic-block CSE, hoisting and most scheduling of symbol
19317     loads.  The default is `-mno-invalid-symbols'.
19318
19319`-mbranch-cost=NUM'
19320     Assume NUM to be the cost for a branch instruction.  Higher numbers
19321     make the compiler try to generate more branch-free code if
19322     possible.  If not specified the value is selected depending on the
19323     processor type that is being compiled for.
19324
19325`-mzdcbranch'
19326`-mno-zdcbranch'
19327     Assume (do not assume) that zero displacement conditional branch
19328     instructions `bt' and `bf' are fast.  If `-mzdcbranch' is
19329     specified, the compiler prefers zero displacement branch code
19330     sequences.  This is enabled by default when generating code for
19331     SH4 and SH4A.  It can be explicitly disabled by specifying
19332     `-mno-zdcbranch'.
19333
19334`-mcbranch-force-delay-slot'
19335     Force the usage of delay slots for conditional branches, which
19336     stuffs the delay slot with a `nop' if a suitable instruction can't
19337     be found.  By default this option is disabled.  It can be enabled
19338     to work around hardware bugs as found in the original SH7055.
19339
19340`-mfused-madd'
19341`-mno-fused-madd'
19342     Generate code that uses (does not use) the floating-point multiply
19343     and accumulate instructions.  These instructions are generated by
19344     default if hardware floating point is used.  The machine-dependent
19345     `-mfused-madd' option is now mapped to the machine-independent
19346     `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to
19347     `-ffp-contract=off'.
19348
19349`-mfsca'
19350`-mno-fsca'
19351     Allow or disallow the compiler to emit the `fsca' instruction for
19352     sine and cosine approximations.  The option `-mfsca' must be used
19353     in combination with `-funsafe-math-optimizations'.  It is enabled
19354     by default when generating code for SH4A.  Using `-mno-fsca'
19355     disables sine and cosine approximations even if
19356     `-funsafe-math-optimizations' is in effect.
19357
19358`-mfsrra'
19359`-mno-fsrra'
19360     Allow or disallow the compiler to emit the `fsrra' instruction for
19361     reciprocal square root approximations.  The option `-mfsrra' must
19362     be used in combination with `-funsafe-math-optimizations' and
19363     `-ffinite-math-only'.  It is enabled by default when generating
19364     code for SH4A.  Using `-mno-fsrra' disables reciprocal square root
19365     approximations even if `-funsafe-math-optimizations' and
19366     `-ffinite-math-only' are in effect.
19367
19368`-mpretend-cmove'
19369     Prefer zero-displacement conditional branches for conditional move
19370     instruction patterns.  This can result in faster code on the SH4
19371     processor.
19372
19373
19374
19375File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Options,  Up: Submodel Options
19376
193773.17.42 Solaris 2 Options
19378-------------------------
19379
19380These `-m' options are supported on Solaris 2:
19381
19382`-mclear-hwcap'
19383     `-mclear-hwcap' tells the compiler to remove the hardware
19384     capabilities generated by the Solaris assembler.  This is only
19385     necessary when object files use ISA extensions not supported by
19386     the current machine, but check at runtime whether or not to use
19387     them.
19388
19389`-mimpure-text'
19390     `-mimpure-text', used in addition to `-shared', tells the compiler
19391     to not pass `-z text' to the linker when linking a shared object.
19392     Using this option, you can link position-dependent code into a
19393     shared object.
19394
19395     `-mimpure-text' suppresses the "relocations remain against
19396     allocatable but non-writable sections" linker error message.
19397     However, the necessary relocations trigger copy-on-write, and the
19398     shared object is not actually shared across processes.  Instead of
19399     using `-mimpure-text', you should compile all source code with
19400     `-fpic' or `-fPIC'.
19401
19402
19403 These switches are supported in addition to the above on Solaris 2:
19404
19405`-pthreads'
19406     Add support for multithreading using the POSIX threads library.
19407     This option sets flags for both the preprocessor and linker.  This
19408     option does not affect the thread safety of object code produced
19409     by the compiler or that of libraries supplied with it.
19410
19411`-pthread'
19412     This is a synonym for `-pthreads'.
19413
19414
19415File: gcc.info,  Node: SPARC Options,  Next: SPU Options,  Prev: Solaris 2 Options,  Up: Submodel Options
19416
194173.17.43 SPARC Options
19418---------------------
19419
19420These `-m' options are supported on the SPARC:
19421
19422`-mno-app-regs'
19423`-mapp-regs'
19424     Specify `-mapp-regs' to generate output using the global registers
19425     2 through 4, which the SPARC SVR4 ABI reserves for applications.
19426     Like the global register 1, each global register 2 through 4 is
19427     then treated as an allocable register that is clobbered by
19428     function calls.  This is the default.
19429
19430     To be fully SVR4 ABI-compliant at the cost of some performance
19431     loss, specify `-mno-app-regs'.  You should compile libraries and
19432     system software with this option.
19433
19434`-mflat'
19435`-mno-flat'
19436     With `-mflat', the compiler does not generate save/restore
19437     instructions and uses a "flat" or single register window model.
19438     This model is compatible with the regular register window model.
19439     The local registers and the input registers (0-5) are still
19440     treated as "call-saved" registers and are saved on the stack as
19441     needed.
19442
19443     With `-mno-flat' (the default), the compiler generates save/restore
19444     instructions (except for leaf functions).  This is the normal
19445     operating mode.
19446
19447`-mfpu'
19448`-mhard-float'
19449     Generate output containing floating-point instructions.  This is
19450     the default.
19451
19452`-mno-fpu'
19453`-msoft-float'
19454     Generate output containing library calls for floating point.
19455     *Warning:* the requisite libraries are not available for all SPARC
19456     targets.  Normally the facilities of the machine's usual C
19457     compiler are used, but this cannot be done directly in
19458     cross-compilation.  You must make your own arrangements to provide
19459     suitable library functions for cross-compilation.  The embedded
19460     targets `sparc-*-aout' and `sparclite-*-*' do provide software
19461     floating-point support.
19462
19463     `-msoft-float' changes the calling convention in the output file;
19464     therefore, it is only useful if you compile _all_ of a program with
19465     this option.  In particular, you need to compile `libgcc.a', the
19466     library that comes with GCC, with `-msoft-float' in order for this
19467     to work.
19468
19469`-mhard-quad-float'
19470     Generate output containing quad-word (long double) floating-point
19471     instructions.
19472
19473`-msoft-quad-float'
19474     Generate output containing library calls for quad-word (long
19475     double) floating-point instructions.  The functions called are
19476     those specified in the SPARC ABI.  This is the default.
19477
19478     As of this writing, there are no SPARC implementations that have
19479     hardware support for the quad-word floating-point instructions.
19480     They all invoke a trap handler for one of these instructions, and
19481     then the trap handler emulates the effect of the instruction.
19482     Because of the trap handler overhead, this is much slower than
19483     calling the ABI library routines.  Thus the `-msoft-quad-float'
19484     option is the default.
19485
19486`-mno-unaligned-doubles'
19487`-munaligned-doubles'
19488     Assume that doubles have 8-byte alignment.  This is the default.
19489
19490     With `-munaligned-doubles', GCC assumes that doubles have 8-byte
19491     alignment only if they are contained in another type, or if they
19492     have an absolute address.  Otherwise, it assumes they have 4-byte
19493     alignment.  Specifying this option avoids some rare compatibility
19494     problems with code generated by other compilers.  It is not the
19495     default because it results in a performance loss, especially for
19496     floating-point code.
19497
19498`-muser-mode'
19499`-mno-user-mode'
19500     Do not generate code that can only run in supervisor mode.  This
19501     is relevant only for the `casa' instruction emitted for the LEON3
19502     processor.  This is the default.
19503
19504`-mno-faster-structs'
19505`-mfaster-structs'
19506     With `-mfaster-structs', the compiler assumes that structures
19507     should have 8-byte alignment.  This enables the use of pairs of
19508     `ldd' and `std' instructions for copies in structure assignment,
19509     in place of twice as many `ld' and `st' pairs.  However, the use
19510     of this changed alignment directly violates the SPARC ABI.  Thus,
19511     it's intended only for use on targets where the developer
19512     acknowledges that their resulting code is not directly in line with
19513     the rules of the ABI.
19514
19515`-mcpu=CPU_TYPE'
19516     Set the instruction set, register set, and instruction scheduling
19517     parameters for machine type CPU_TYPE.  Supported values for
19518     CPU_TYPE are `v7', `cypress', `v8', `supersparc', `hypersparc',
19519     `leon', `leon3', `leon3v7', `sparclite', `f930', `f934',
19520     `sparclite86x', `sparclet', `tsc701', `v9', `ultrasparc',
19521     `ultrasparc3', `niagara', `niagara2', `niagara3' and `niagara4'.
19522
19523     Native Solaris and GNU/Linux toolchains also support the value
19524     `native', which selects the best architecture option for the host
19525     processor.  `-mcpu=native' has no effect if GCC does not recognize
19526     the processor.
19527
19528     Default instruction scheduling parameters are used for values that
19529     select an architecture and not an implementation.  These are `v7',
19530     `v8', `sparclite', `sparclet', `v9'.
19531
19532     Here is a list of each supported architecture and their supported
19533     implementations.
19534
19535    v7
19536          cypress, leon3v7
19537
19538    v8
19539          supersparc, hypersparc, leon, leon3
19540
19541    sparclite
19542          f930, f934, sparclite86x
19543
19544    sparclet
19545          tsc701
19546
19547    v9
19548          ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
19549
19550     By default (unless configured otherwise), GCC generates code for
19551     the V7 variant of the SPARC architecture.  With `-mcpu=cypress',
19552     the compiler additionally optimizes it for the Cypress CY7C602
19553     chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
19554     also appropriate for the older SPARCStation 1, 2, IPX etc.
19555
19556     With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC
19557     architecture.  The only difference from V7 code is that the
19558     compiler emits the integer multiply and integer divide
19559     instructions which exist in SPARC-V8 but not in SPARC-V7.  With
19560     `-mcpu=supersparc', the compiler additionally optimizes it for the
19561     SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
19562     series.
19563
19564     With `-mcpu=sparclite', GCC generates code for the SPARClite
19565     variant of the SPARC architecture.  This adds the integer
19566     multiply, integer divide step and scan (`ffs') instructions which
19567     exist in SPARClite but not in SPARC-V7.  With `-mcpu=f930', the
19568     compiler additionally optimizes it for the Fujitsu MB86930 chip,
19569     which is the original SPARClite, with no FPU.  With `-mcpu=f934',
19570     the compiler additionally optimizes it for the Fujitsu MB86934
19571     chip, which is the more recent SPARClite with FPU.
19572
19573     With `-mcpu=sparclet', GCC generates code for the SPARClet variant
19574     of the SPARC architecture.  This adds the integer multiply,
19575     multiply/accumulate, integer divide step and scan (`ffs')
19576     instructions which exist in SPARClet but not in SPARC-V7.  With
19577     `-mcpu=tsc701', the compiler additionally optimizes it for the
19578     TEMIC SPARClet chip.
19579
19580     With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC
19581     architecture.  This adds 64-bit integer and floating-point move
19582     instructions, 3 additional floating-point condition code registers
19583     and conditional move instructions.  With `-mcpu=ultrasparc', the
19584     compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
19585     chips.  With `-mcpu=ultrasparc3', the compiler additionally
19586     optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
19587     chips.  With `-mcpu=niagara', the compiler additionally optimizes
19588     it for Sun UltraSPARC T1 chips.  With `-mcpu=niagara2', the
19589     compiler additionally optimizes it for Sun UltraSPARC T2 chips.
19590     With `-mcpu=niagara3', the compiler additionally optimizes it for
19591     Sun UltraSPARC T3 chips.  With `-mcpu=niagara4', the compiler
19592     additionally optimizes it for Sun UltraSPARC T4 chips.
19593
19594`-mtune=CPU_TYPE'
19595     Set the instruction scheduling parameters for machine type
19596     CPU_TYPE, but do not set the instruction set or register set that
19597     the option `-mcpu=CPU_TYPE' does.
19598
19599     The same values for `-mcpu=CPU_TYPE' can be used for
19600     `-mtune=CPU_TYPE', but the only useful values are those that
19601     select a particular CPU implementation.  Those are `cypress',
19602     `supersparc', `hypersparc', `leon', `leon3', `leon3v7', `f930',
19603     `f934', `sparclite86x', `tsc701', `ultrasparc', `ultrasparc3',
19604     `niagara', `niagara2', `niagara3' and `niagara4'.  With native
19605     Solaris and GNU/Linux toolchains, `native' can also be used.
19606
19607`-mv8plus'
19608`-mno-v8plus'
19609     With `-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
19610     difference from the V8 ABI is that the global and out registers are
19611     considered 64 bits wide.  This is enabled by default on Solaris in
19612     32-bit mode for all SPARC-V9 processors.
19613
19614`-mvis'
19615`-mno-vis'
19616     With `-mvis', GCC generates code that takes advantage of the
19617     UltraSPARC Visual Instruction Set extensions.  The default is
19618     `-mno-vis'.
19619
19620`-mvis2'
19621`-mno-vis2'
19622     With `-mvis2', GCC generates code that takes advantage of version
19623     2.0 of the UltraSPARC Visual Instruction Set extensions.  The
19624     default is `-mvis2' when targeting a cpu that supports such
19625     instructions, such as UltraSPARC-III and later.  Setting `-mvis2'
19626     also sets `-mvis'.
19627
19628`-mvis3'
19629`-mno-vis3'
19630     With `-mvis3', GCC generates code that takes advantage of version
19631     3.0 of the UltraSPARC Visual Instruction Set extensions.  The
19632     default is `-mvis3' when targeting a cpu that supports such
19633     instructions, such as niagara-3 and later.  Setting `-mvis3' also
19634     sets `-mvis2' and `-mvis'.
19635
19636`-mcbcond'
19637`-mno-cbcond'
19638     With `-mcbcond', GCC generates code that takes advantage of
19639     compare-and-branch instructions, as defined in the Sparc
19640     Architecture 2011.  The default is `-mcbcond' when targeting a cpu
19641     that supports such instructions, such as niagara-4 and later.
19642
19643`-mpopc'
19644`-mno-popc'
19645     With `-mpopc', GCC generates code that takes advantage of the
19646     UltraSPARC population count instruction.  The default is `-mpopc'
19647     when targeting a cpu that supports such instructions, such as
19648     Niagara-2 and later.
19649
19650`-mfmaf'
19651`-mno-fmaf'
19652     With `-mfmaf', GCC generates code that takes advantage of the
19653     UltraSPARC Fused Multiply-Add Floating-point extensions.  The
19654     default is `-mfmaf' when targeting a cpu that supports such
19655     instructions, such as Niagara-3 and later.
19656
19657`-mfix-at697f'
19658     Enable the documented workaround for the single erratum of the
19659     Atmel AT697F processor (which corresponds to erratum #13 of the
19660     AT697E processor).
19661
19662`-mfix-ut699'
19663     Enable the documented workarounds for the floating-point errata
19664     and the data cache nullify errata of the UT699 processor.
19665
19666 These `-m' options are supported in addition to the above on SPARC-V9
19667processors in 64-bit environments:
19668
19669`-m32'
19670`-m64'
19671     Generate code for a 32-bit or 64-bit environment.  The 32-bit
19672     environment sets int, long and pointer to 32 bits.  The 64-bit
19673     environment sets int to 32 bits and long and pointer to 64 bits.
19674
19675`-mcmodel=WHICH'
19676     Set the code model to one of
19677
19678    `medlow'
19679          The Medium/Low code model: 64-bit addresses, programs must be
19680          linked in the low 32 bits of memory.  Programs can be
19681          statically or dynamically linked.
19682
19683    `medmid'
19684          The Medium/Middle code model: 64-bit addresses, programs must
19685          be linked in the low 44 bits of memory, the text and data
19686          segments must be less than 2GB in size and the data segment
19687          must be located within 2GB of the text segment.
19688
19689    `medany'
19690          The Medium/Anywhere code model: 64-bit addresses, programs
19691          may be linked anywhere in memory, the text and data segments
19692          must be less than 2GB in size and the data segment must be
19693          located within 2GB of the text segment.
19694
19695    `embmedany'
19696          The Medium/Anywhere code model for embedded systems: 64-bit
19697          addresses, the text and data segments must be less than 2GB in
19698          size, both starting anywhere in memory (determined at link
19699          time).  The global register %g4 points to the base of the
19700          data segment.  Programs are statically linked and PIC is not
19701          supported.
19702
19703`-mmemory-model=MEM-MODEL'
19704     Set the memory model in force on the processor to one of
19705
19706    `default'
19707          The default memory model for the processor and operating
19708          system.
19709
19710    `rmo'
19711          Relaxed Memory Order
19712
19713    `pso'
19714          Partial Store Order
19715
19716    `tso'
19717          Total Store Order
19718
19719    `sc'
19720          Sequential Consistency
19721
19722     These memory models are formally defined in Appendix D of the
19723     Sparc V9 architecture manual, as set in the processor's
19724     `PSTATE.MM' field.
19725
19726`-mstack-bias'
19727`-mno-stack-bias'
19728     With `-mstack-bias', GCC assumes that the stack pointer, and frame
19729     pointer if present, are offset by -2047 which must be added back
19730     when making stack frame references.  This is the default in 64-bit
19731     mode.  Otherwise, assume no such offset is present.
19732
19733
19734File: gcc.info,  Node: SPU Options,  Next: System V Options,  Prev: SPARC Options,  Up: Submodel Options
19735
197363.17.44 SPU Options
19737-------------------
19738
19739These `-m' options are supported on the SPU:
19740
19741`-mwarn-reloc'
19742`-merror-reloc'
19743     The loader for SPU does not handle dynamic relocations.  By
19744     default, GCC gives an error when it generates code that requires a
19745     dynamic relocation.  `-mno-error-reloc' disables the error,
19746     `-mwarn-reloc' generates a warning instead.
19747
19748`-msafe-dma'
19749`-munsafe-dma'
19750     Instructions that initiate or test completion of DMA must not be
19751     reordered with respect to loads and stores of the memory that is
19752     being accessed.  With `-munsafe-dma' you must use the `volatile'
19753     keyword to protect memory accesses, but that can lead to
19754     inefficient code in places where the memory is known to not
19755     change.  Rather than mark the memory as volatile, you can use
19756     `-msafe-dma' to tell the compiler to treat the DMA instructions as
19757     potentially affecting all memory.
19758
19759`-mbranch-hints'
19760     By default, GCC generates a branch hint instruction to avoid
19761     pipeline stalls for always-taken or probably-taken branches.  A
19762     hint is not generated closer than 8 instructions away from its
19763     branch.  There is little reason to disable them, except for
19764     debugging purposes, or to make an object a little bit smaller.
19765
19766`-msmall-mem'
19767`-mlarge-mem'
19768     By default, GCC generates code assuming that addresses are never
19769     larger than 18 bits.  With `-mlarge-mem' code is generated that
19770     assumes a full 32-bit address.
19771
19772`-mstdmain'
19773     By default, GCC links against startup code that assumes the
19774     SPU-style main function interface (which has an unconventional
19775     parameter list).  With `-mstdmain', GCC links your program against
19776     startup code that assumes a C99-style interface to `main',
19777     including a local copy of `argv' strings.
19778
19779`-mfixed-range=REGISTER-RANGE'
19780     Generate code treating the given register range as fixed registers.
19781     A fixed register is one that the register allocator cannot use.
19782     This is useful when compiling kernel code.  A register range is
19783     specified as two registers separated by a dash.  Multiple register
19784     ranges can be specified separated by a comma.
19785
19786`-mea32'
19787`-mea64'
19788     Compile code assuming that pointers to the PPU address space
19789     accessed via the `__ea' named address space qualifier are either
19790     32 or 64 bits wide.  The default is 32 bits.  As this is an
19791     ABI-changing option, all object code in an executable must be
19792     compiled with the same setting.
19793
19794`-maddress-space-conversion'
19795`-mno-address-space-conversion'
19796     Allow/disallow treating the `__ea' address space as superset of
19797     the generic address space.  This enables explicit type casts
19798     between `__ea' and generic pointer as well as implicit conversions
19799     of generic pointers to `__ea' pointers.  The default is to allow
19800     address space pointer conversions.
19801
19802`-mcache-size=CACHE-SIZE'
19803     This option controls the version of libgcc that the compiler links
19804     to an executable and selects a software-managed cache for
19805     accessing variables in the `__ea' address space with a particular
19806     cache size.  Possible options for CACHE-SIZE are `8', `16', `32',
19807     `64' and `128'.  The default cache size is 64KB.
19808
19809`-matomic-updates'
19810`-mno-atomic-updates'
19811     This option controls the version of libgcc that the compiler links
19812     to an executable and selects whether atomic updates to the
19813     software-managed cache of PPU-side variables are used.  If you use
19814     atomic updates, changes to a PPU variable from SPU code using the
19815     `__ea' named address space qualifier do not interfere with changes
19816     to other PPU variables residing in the same cache line from PPU
19817     code.  If you do not use atomic updates, such interference may
19818     occur; however, writing back cache lines is more efficient.  The
19819     default behavior is to use atomic updates.
19820
19821`-mdual-nops'
19822`-mdual-nops=N'
19823     By default, GCC inserts nops to increase dual issue when it expects
19824     it to increase performance.  N can be a value from 0 to 10.  A
19825     smaller N inserts fewer nops.  10 is the default, 0 is the same as
19826     `-mno-dual-nops'.  Disabled with `-Os'.
19827
19828`-mhint-max-nops=N'
19829     Maximum number of nops to insert for a branch hint.  A branch hint
19830     must be at least 8 instructions away from the branch it is
19831     affecting.  GCC inserts up to N nops to enforce this, otherwise it
19832     does not generate the branch hint.
19833
19834`-mhint-max-distance=N'
19835     The encoding of the branch hint instruction limits the hint to be
19836     within 256 instructions of the branch it is affecting.  By
19837     default, GCC makes sure it is within 125.
19838
19839`-msafe-hints'
19840     Work around a hardware bug that causes the SPU to stall
19841     indefinitely.  By default, GCC inserts the `hbrp' instruction to
19842     make sure this stall won't happen.
19843
19844
19845
19846File: gcc.info,  Node: System V Options,  Next: TILE-Gx Options,  Prev: SPU Options,  Up: Submodel Options
19847
198483.17.45 Options for System V
19849----------------------------
19850
19851These additional options are available on System V Release 4 for
19852compatibility with other compilers on those systems:
19853
19854`-G'
19855     Create a shared object.  It is recommended that `-symbolic' or
19856     `-shared' be used instead.
19857
19858`-Qy'
19859     Identify the versions of each tool used by the compiler, in a
19860     `.ident' assembler directive in the output.
19861
19862`-Qn'
19863     Refrain from adding `.ident' directives to the output file (this is
19864     the default).
19865
19866`-YP,DIRS'
19867     Search the directories DIRS, and no others, for libraries
19868     specified with `-l'.
19869
19870`-Ym,DIR'
19871     Look in the directory DIR to find the M4 preprocessor.  The
19872     assembler uses this option.
19873
19874
19875File: gcc.info,  Node: TILE-Gx Options,  Next: TILEPro Options,  Prev: System V Options,  Up: Submodel Options
19876
198773.17.46 TILE-Gx Options
19878-----------------------
19879
19880These `-m' options are supported on the TILE-Gx:
19881
19882`-mcmodel=small'
19883     Generate code for the small model.  The distance for direct calls
19884     is limited to 500M in either direction.  PC-relative addresses are
19885     32 bits.  Absolute addresses support the full address range.
19886
19887`-mcmodel=large'
19888     Generate code for the large model.  There is no limitation on call
19889     distance, pc-relative addresses, or absolute addresses.
19890
19891`-mcpu=NAME'
19892     Selects the type of CPU to be targeted.  Currently the only
19893     supported type is `tilegx'.
19894
19895`-m32'
19896`-m64'
19897     Generate code for a 32-bit or 64-bit environment.  The 32-bit
19898     environment sets int, long, and pointer to 32 bits.  The 64-bit
19899     environment sets int to 32 bits and long and pointer to 64 bits.
19900
19901`-mbig-endian'
19902`-mlittle-endian'
19903     Generate code in big/little endian mode, respectively.
19904
19905
19906File: gcc.info,  Node: TILEPro Options,  Next: V850 Options,  Prev: TILE-Gx Options,  Up: Submodel Options
19907
199083.17.47 TILEPro Options
19909-----------------------
19910
19911These `-m' options are supported on the TILEPro:
19912
19913`-mcpu=NAME'
19914     Selects the type of CPU to be targeted.  Currently the only
19915     supported type is `tilepro'.
19916
19917`-m32'
19918     Generate code for a 32-bit environment, which sets int, long, and
19919     pointer to 32 bits.  This is the only supported behavior so the
19920     flag is essentially ignored.
19921
19922
19923File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: TILEPro Options,  Up: Submodel Options
19924
199253.17.48 V850 Options
19926--------------------
19927
19928These `-m' options are defined for V850 implementations:
19929
19930`-mlong-calls'
19931`-mno-long-calls'
19932     Treat all calls as being far away (near).  If calls are assumed to
19933     be far away, the compiler always loads the function's address into
19934     a register, and calls indirect through the pointer.
19935
19936`-mno-ep'
19937`-mep'
19938     Do not optimize (do optimize) basic blocks that use the same index
19939     pointer 4 or more times to copy pointer into the `ep' register, and
19940     use the shorter `sld' and `sst' instructions.  The `-mep' option
19941     is on by default if you optimize.
19942
19943`-mno-prolog-function'
19944`-mprolog-function'
19945     Do not use (do use) external functions to save and restore
19946     registers at the prologue and epilogue of a function.  The
19947     external functions are slower, but use less code space if more
19948     than one function saves the same number of registers.  The
19949     `-mprolog-function' option is on by default if you optimize.
19950
19951`-mspace'
19952     Try to make the code as small as possible.  At present, this just
19953     turns on the `-mep' and `-mprolog-function' options.
19954
19955`-mtda=N'
19956     Put static or global variables whose size is N bytes or less into
19957     the tiny data area that register `ep' points to.  The tiny data
19958     area can hold up to 256 bytes in total (128 bytes for byte
19959     references).
19960
19961`-msda=N'
19962     Put static or global variables whose size is N bytes or less into
19963     the small data area that register `gp' points to.  The small data
19964     area can hold up to 64 kilobytes.
19965
19966`-mzda=N'
19967     Put static or global variables whose size is N bytes or less into
19968     the first 32 kilobytes of memory.
19969
19970`-mv850'
19971     Specify that the target processor is the V850.
19972
19973`-mv850e3v5'
19974     Specify that the target processor is the V850E3V5.  The
19975     preprocessor constant `__v850e3v5__' is defined if this option is
19976     used.
19977
19978`-mv850e2v4'
19979     Specify that the target processor is the V850E3V5.  This is an
19980     alias for the `-mv850e3v5' option.
19981
19982`-mv850e2v3'
19983     Specify that the target processor is the V850E2V3.  The
19984     preprocessor constant `__v850e2v3__' is defined if this option is
19985     used.
19986
19987`-mv850e2'
19988     Specify that the target processor is the V850E2.  The preprocessor
19989     constant `__v850e2__' is defined if this option is used.
19990
19991`-mv850e1'
19992     Specify that the target processor is the V850E1.  The preprocessor
19993     constants `__v850e1__' and `__v850e__' are defined if this option
19994     is used.
19995
19996`-mv850es'
19997     Specify that the target processor is the V850ES.  This is an alias
19998     for the `-mv850e1' option.
19999
20000`-mv850e'
20001     Specify that the target processor is the V850E.  The preprocessor
20002     constant `__v850e__' is defined if this option is used.
20003
20004     If neither `-mv850' nor `-mv850e' nor `-mv850e1' nor `-mv850e2'
20005     nor `-mv850e2v3' nor `-mv850e3v5' are defined then a default
20006     target processor is chosen and the relevant `__v850*__'
20007     preprocessor constant is defined.
20008
20009     The preprocessor constants `__v850' and `__v851__' are always
20010     defined, regardless of which processor variant is the target.
20011
20012`-mdisable-callt'
20013`-mno-disable-callt'
20014     This option suppresses generation of the `CALLT' instruction for
20015     the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
20016     v850 architecture.
20017
20018     This option is enabled by default when the RH850 ABI is in use
20019     (see `-mrh850-abi'), and disabled by default when the GCC ABI is
20020     in use.  If `CALLT' instructions are being generated then the C
20021     preprocessor symbol `__V850_CALLT__' is defined.
20022
20023`-mrelax'
20024`-mno-relax'
20025     Pass on (or do not pass on) the `-mrelax' command-line option to
20026     the assembler.
20027
20028`-mlong-jumps'
20029`-mno-long-jumps'
20030     Disable (or re-enable) the generation of PC-relative jump
20031     instructions.
20032
20033`-msoft-float'
20034`-mhard-float'
20035     Disable (or re-enable) the generation of hardware floating point
20036     instructions.  This option is only significant when the target
20037     architecture is `V850E2V3' or higher.  If hardware floating point
20038     instructions are being generated then the C preprocessor symbol
20039     `__FPU_OK__' is defined, otherwise the symbol `__NO_FPU__' is
20040     defined.
20041
20042`-mloop'
20043     Enables the use of the e3v5 LOOP instruction.  The use of this
20044     instruction is not enabled by default when the e3v5 architecture is
20045     selected because its use is still experimental.
20046
20047`-mrh850-abi'
20048`-mghs'
20049     Enables support for the RH850 version of the V850 ABI.  This is the
20050     default.  With this version of the ABI the following rules apply:
20051
20052        * Integer sized structures and unions are returned via a memory
20053          pointer rather than a register.
20054
20055        * Large structures and unions (more than 8 bytes in size) are
20056          passed by value.
20057
20058        * Functions are aligned to 16-bit boundaries.
20059
20060        * The `-m8byte-align' command-line option is supported.
20061
20062        * The `-mdisable-callt' command-line option is enabled by
20063          default.  The `-mno-disable-callt' command-line option is not
20064          supported.
20065
20066     When this version of the ABI is enabled the C preprocessor symbol
20067     `__V850_RH850_ABI__' is defined.
20068
20069`-mgcc-abi'
20070     Enables support for the old GCC version of the V850 ABI.  With this
20071     version of the ABI the following rules apply:
20072
20073        * Integer sized structures and unions are returned in register
20074          `r10'.
20075
20076        * Large structures and unions (more than 8 bytes in size) are
20077          passed by reference.
20078
20079        * Functions are aligned to 32-bit boundaries, unless optimizing
20080          for size.
20081
20082        * The `-m8byte-align' command-line option is not supported.
20083
20084        * The `-mdisable-callt' command-line option is supported but not
20085          enabled by default.
20086
20087     When this version of the ABI is enabled the C preprocessor symbol
20088     `__V850_GCC_ABI__' is defined.
20089
20090`-m8byte-align'
20091`-mno-8byte-align'
20092     Enables support for `double' and `long long' types to be aligned
20093     on 8-byte boundaries.  The default is to restrict the alignment of
20094     all objects to at most 4-bytes.  When `-m8byte-align' is in effect
20095     the C preprocessor symbol `__V850_8BYTE_ALIGN__' is defined.
20096
20097`-mbig-switch'
20098     Generate code suitable for big switch tables.  Use this option
20099     only if the assembler/linker complain about out of range branches
20100     within a switch table.
20101
20102`-mapp-regs'
20103     This option causes r2 and r5 to be used in the code generated by
20104     the compiler.  This setting is the default.
20105
20106`-mno-app-regs'
20107     This option causes r2 and r5 to be treated as fixed registers.
20108
20109
20110
20111File: gcc.info,  Node: VAX Options,  Next: Visium Options,  Prev: V850 Options,  Up: Submodel Options
20112
201133.17.49 VAX Options
20114-------------------
20115
20116These `-m' options are defined for the VAX:
20117
20118`-munix'
20119     Do not output certain jump instructions (`aobleq' and so on) that
20120     the Unix assembler for the VAX cannot handle across long ranges.
20121
20122`-mgnu'
20123     Do output those jump instructions, on the assumption that the GNU
20124     assembler is being used.
20125
20126`-mg'
20127     Output code for G-format floating-point numbers instead of
20128     D-format.
20129
20130
20131File: gcc.info,  Node: Visium Options,  Next: VMS Options,  Prev: VAX Options,  Up: Submodel Options
20132
201333.17.50 Visium Options
20134----------------------
20135
20136`-mdebug'
20137     A program which performs file I/O and is destined to run on an MCM
20138     target should be linked with this option.  It causes the libraries
20139     libc.a and libdebug.a to be linked.  The program should be run on
20140     the target under the control of the GDB remote debugging stub.
20141
20142`-msim'
20143     A program which performs file I/O and is destined to run on the
20144     simulator should be linked with option.  This causes libraries
20145     libc.a and libsim.a to be linked.
20146
20147`-mfpu'
20148`-mhard-float'
20149     Generate code containing floating-point instructions.  This is the
20150     default.
20151
20152`-mno-fpu'
20153`-msoft-float'
20154     Generate code containing library calls for floating-point.
20155
20156     `-msoft-float' changes the calling convention in the output file;
20157     therefore, it is only useful if you compile _all_ of a program with
20158     this option.  In particular, you need to compile `libgcc.a', the
20159     library that comes with GCC, with `-msoft-float' in order for this
20160     to work.
20161
20162`-mcpu=CPU_TYPE'
20163     Set the instruction set, register set, and instruction scheduling
20164     parameters for machine type CPU_TYPE.  Supported values for
20165     CPU_TYPE are `mcm', `gr5' and `gr6'.
20166
20167     `mcm' is a synonym of `gr5' present for backward compatibility.
20168
20169     By default (unless configured otherwise), GCC generates code for
20170     the GR5 variant of the Visium architecture.
20171
20172     With `-mcpu=gr6', GCC generates code for the GR6 variant of the
20173     Visium architecture.  The only difference from GR5 code is that
20174     the compiler will generate block move instructions.
20175
20176`-mtune=CPU_TYPE'
20177     Set the instruction scheduling parameters for machine type
20178     CPU_TYPE, but do not set the instruction set or register set that
20179     the option `-mcpu=CPU_TYPE' would.
20180
20181`-msv-mode'
20182     Generate code for the supervisor mode, where there are no
20183     restrictions on the access to general registers.  This is the
20184     default.
20185
20186`-muser-mode'
20187     Generate code for the user mode, where the access to some general
20188     registers is forbidden: on the GR5, registers r24 to r31 cannot be
20189     accessed in this mode; on the GR6, only registers r29 to r31 are
20190     affected.
20191
20192
20193File: gcc.info,  Node: VMS Options,  Next: VxWorks Options,  Prev: Visium Options,  Up: Submodel Options
20194
201953.17.51 VMS Options
20196-------------------
20197
20198These `-m' options are defined for the VMS implementations:
20199
20200`-mvms-return-codes'
20201     Return VMS condition codes from `main'. The default is to return
20202     POSIX-style condition (e.g. error) codes.
20203
20204`-mdebug-main=PREFIX'
20205     Flag the first routine whose name starts with PREFIX as the main
20206     routine for the debugger.
20207
20208`-mmalloc64'
20209     Default to 64-bit memory allocation routines.
20210
20211`-mpointer-size=SIZE'
20212     Set the default size of pointers. Possible options for SIZE are
20213     `32' or `short' for 32 bit pointers, `64' or `long' for 64 bit
20214     pointers, and `no' for supporting only 32 bit pointers.  The later
20215     option disables `pragma pointer_size'.
20216
20217
20218File: gcc.info,  Node: VxWorks Options,  Next: x86 Options,  Prev: VMS Options,  Up: Submodel Options
20219
202203.17.52 VxWorks Options
20221-----------------------
20222
20223The options in this section are defined for all VxWorks targets.
20224Options specific to the target hardware are listed with the other
20225options for that target.
20226
20227`-mrtp'
20228     GCC can generate code for both VxWorks kernels and real time
20229     processes (RTPs).  This option switches from the former to the
20230     latter.  It also defines the preprocessor macro `__RTP__'.
20231
20232`-non-static'
20233     Link an RTP executable against shared libraries rather than static
20234     libraries.  The options `-static' and `-shared' can also be used
20235     for RTPs (*note Link Options::); `-static' is the default.
20236
20237`-Bstatic'
20238`-Bdynamic'
20239     These options are passed down to the linker.  They are defined for
20240     compatibility with Diab.
20241
20242`-Xbind-lazy'
20243     Enable lazy binding of function calls.  This option is equivalent
20244     to `-Wl,-z,now' and is defined for compatibility with Diab.
20245
20246`-Xbind-now'
20247     Disable lazy binding of function calls.  This option is the
20248     default and is defined for compatibility with Diab.
20249
20250
20251File: gcc.info,  Node: x86 Options,  Next: x86 Windows Options,  Prev: VxWorks Options,  Up: Submodel Options
20252
202533.17.53 x86 Options
20254-------------------
20255
20256These `-m' options are defined for the x86 family of computers.
20257
20258`-march=CPU-TYPE'
20259     Generate instructions for the machine type CPU-TYPE.  In contrast
20260     to `-mtune=CPU-TYPE', which merely tunes the generated code for
20261     the specified CPU-TYPE, `-march=CPU-TYPE' allows GCC to generate
20262     code that may not run at all on processors other than the one
20263     indicated.  Specifying `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'.
20264
20265     The choices for CPU-TYPE are:
20266
20267    `native'
20268          This selects the CPU to generate code for at compilation time
20269          by determining the processor type of the compiling machine.
20270          Using `-march=native' enables all instruction subsets
20271          supported by the local machine (hence the result might not
20272          run on different machines).  Using `-mtune=native' produces
20273          code optimized for the local machine under the constraints of
20274          the selected instruction set.
20275
20276    `i386'
20277          Original Intel i386 CPU.
20278
20279    `i486'
20280          Intel i486 CPU.  (No scheduling is implemented for this chip.)
20281
20282    `i586'
20283    `pentium'
20284          Intel Pentium CPU with no MMX support.
20285
20286    `pentium-mmx'
20287          Intel Pentium MMX CPU, based on Pentium core with MMX
20288          instruction set support.
20289
20290    `pentiumpro'
20291          Intel Pentium Pro CPU.
20292
20293    `i686'
20294          When used with `-march', the Pentium Pro instruction set is
20295          used, so the code runs on all i686 family chips.  When used
20296          with `-mtune', it has the same meaning as `generic'.
20297
20298    `pentium2'
20299          Intel Pentium II CPU, based on Pentium Pro core with MMX
20300          instruction set support.
20301
20302    `pentium3'
20303    `pentium3m'
20304          Intel Pentium III CPU, based on Pentium Pro core with MMX and
20305          SSE instruction set support.
20306
20307    `pentium-m'
20308          Intel Pentium M; low-power version of Intel Pentium III CPU
20309          with MMX, SSE and SSE2 instruction set support.  Used by
20310          Centrino notebooks.
20311
20312    `pentium4'
20313    `pentium4m'
20314          Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
20315          support.
20316
20317    `prescott'
20318          Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2
20319          and SSE3 instruction set support.
20320
20321    `nocona'
20322          Improved version of Intel Pentium 4 CPU with 64-bit
20323          extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
20324
20325    `core2'
20326          Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
20327          and SSSE3 instruction set support.
20328
20329    `nehalem'
20330          Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2,
20331          SSE3, SSSE3, SSE4.1, SSE4.2 and POPCNT instruction set
20332          support.
20333
20334    `westmere'
20335          Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2,
20336          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES and PCLMUL
20337          instruction set support.
20338
20339    `sandybridge'
20340          Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE,
20341          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES and
20342          PCLMUL instruction set support.
20343
20344    `ivybridge'
20345          Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
20346          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL,
20347          FSGSBASE, RDRND and F16C instruction set support.
20348
20349    `haswell'
20350          Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE,
20351          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
20352          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction
20353          set support.
20354
20355    `broadwell'
20356          Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
20357          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
20358          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX
20359          and PREFETCHW instruction set support.
20360
20361    `bonnell'
20362          Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE,
20363          SSE2, SSE3 and SSSE3 instruction set support.
20364
20365    `silvermont'
20366          Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE,
20367          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and
20368          RDRND instruction set support.
20369
20370    `knl'
20371          Intel Knight's Landing CPU with 64-bit extensions, MOVBE,
20372          MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX,
20373          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
20374          RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER and
20375          AVX512CD instruction set support.
20376
20377    `k6'
20378          AMD K6 CPU with MMX instruction set support.
20379
20380    `k6-2'
20381    `k6-3'
20382          Improved versions of AMD K6 CPU with MMX and 3DNow!
20383          instruction set support.
20384
20385    `athlon'
20386    `athlon-tbird'
20387          AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
20388          prefetch instructions support.
20389
20390    `athlon-4'
20391    `athlon-xp'
20392    `athlon-mp'
20393          Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
20394          full SSE instruction set support.
20395
20396    `k8'
20397    `opteron'
20398    `athlon64'
20399    `athlon-fx'
20400          Processors based on the AMD K8 core with x86-64 instruction
20401          set support, including the AMD Opteron, Athlon 64, and Athlon
20402          64 FX processors.  (This supersets MMX, SSE, SSE2, 3DNow!,
20403          enhanced 3DNow! and 64-bit instruction set extensions.)
20404
20405    `k8-sse3'
20406    `opteron-sse3'
20407    `athlon64-sse3'
20408          Improved versions of AMD K8 cores with SSE3 instruction set
20409          support.
20410
20411    `amdfam10'
20412    `barcelona'
20413          CPUs based on AMD Family 10h cores with x86-64 instruction
20414          set support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A,
20415          3DNow!, enhanced 3DNow!, ABM and 64-bit instruction set
20416          extensions.)
20417
20418    `bdver1'
20419          CPUs based on AMD Family 15h cores with x86-64 instruction
20420          set support.  (This supersets FMA4, AVX, XOP, LWP, AES,
20421          PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
20422          SSE4.2, ABM and 64-bit instruction set extensions.)
20423
20424    `bdver2'
20425          AMD Family 15h core based CPUs with x86-64 instruction set
20426          support.  (This supersets BMI, TBM, F16C, FMA, FMA4, AVX,
20427          XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
20428          SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set
20429          extensions.)
20430
20431    `bdver3'
20432          AMD Family 15h core based CPUs with x86-64 instruction set
20433          support.  (This supersets BMI, TBM, F16C, FMA, FMA4,
20434          FSGSBASE, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
20435          SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit
20436          instruction set extensions.
20437
20438    `bdver4'
20439          AMD Family 15h core based CPUs with x86-64 instruction set
20440          support.  (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4,
20441          FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE,
20442          MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and
20443          64-bit instruction set extensions.
20444
20445    `btver1'
20446          CPUs based on AMD Family 14h cores with x86-64 instruction
20447          set support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3,
20448          SSE4A, CX16, ABM and 64-bit instruction set extensions.)
20449
20450    `btver2'
20451          CPUs based on AMD Family 16h cores with x86-64 instruction
20452          set support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL,
20453          AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2,
20454          SSE, MMX and 64-bit instruction set extensions.
20455
20456    `winchip-c6'
20457          IDT WinChip C6 CPU, dealt in same way as i486 with additional
20458          MMX instruction set support.
20459
20460    `winchip2'
20461          IDT WinChip 2 CPU, dealt in same way as i486 with additional
20462          MMX and 3DNow!  instruction set support.
20463
20464    `c3'
20465          VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
20466          scheduling is implemented for this chip.)
20467
20468    `c3-2'
20469          VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
20470          support.  (No scheduling is implemented for this chip.)
20471
20472    `geode'
20473          AMD Geode embedded processor with MMX and 3DNow! instruction
20474          set support.
20475
20476`-mtune=CPU-TYPE'
20477     Tune to CPU-TYPE everything applicable about the generated code,
20478     except for the ABI and the set of available instructions.  While
20479     picking a specific CPU-TYPE schedules things appropriately for
20480     that particular chip, the compiler does not generate any code that
20481     cannot run on the default machine type unless you use a
20482     `-march=CPU-TYPE' option.  For example, if GCC is configured for
20483     i686-pc-linux-gnu then `-mtune=pentium4' generates code that is
20484     tuned for Pentium 4 but still runs on i686 machines.
20485
20486     The choices for CPU-TYPE are the same as for `-march'.  In
20487     addition, `-mtune' supports 2 extra choices for CPU-TYPE:
20488
20489    `generic'
20490          Produce code optimized for the most common IA32/AMD64/EM64T
20491          processors.  If you know the CPU on which your code will run,
20492          then you should use the corresponding `-mtune' or `-march'
20493          option instead of `-mtune=generic'.  But, if you do not know
20494          exactly what CPU users of your application will have, then
20495          you should use this option.
20496
20497          As new processors are deployed in the marketplace, the
20498          behavior of this option will change.  Therefore, if you
20499          upgrade to a newer version of GCC, code generation controlled
20500          by this option will change to reflect the processors that are
20501          most common at the time that version of GCC is released.
20502
20503          There is no `-march=generic' option because `-march'
20504          indicates the instruction set the compiler can use, and there
20505          is no generic instruction set applicable to all processors.
20506          In contrast, `-mtune' indicates the processor (or, in this
20507          case, collection of processors) for which the code is
20508          optimized.
20509
20510    `intel'
20511          Produce code optimized for the most current Intel processors,
20512          which are Haswell and Silvermont for this version of GCC.  If
20513          you know the CPU on which your code will run, then you should
20514          use the corresponding `-mtune' or `-march' option instead of
20515          `-mtune=intel'.  But, if you want your application performs
20516          better on both Haswell and Silvermont, then you should use
20517          this option.
20518
20519          As new Intel processors are deployed in the marketplace, the
20520          behavior of this option will change.  Therefore, if you
20521          upgrade to a newer version of GCC, code generation controlled
20522          by this option will change to reflect the most current Intel
20523          processors at the time that version of GCC is released.
20524
20525          There is no `-march=intel' option because `-march' indicates
20526          the instruction set the compiler can use, and there is no
20527          common instruction set applicable to all processors.  In
20528          contrast, `-mtune' indicates the processor (or, in this case,
20529          collection of processors) for which the code is optimized.
20530
20531`-mcpu=CPU-TYPE'
20532     A deprecated synonym for `-mtune'.
20533
20534`-mfpmath=UNIT'
20535     Generate floating-point arithmetic for selected unit UNIT.  The
20536     choices for UNIT are:
20537
20538    `387'
20539          Use the standard 387 floating-point coprocessor present on
20540          the majority of chips and emulated otherwise.  Code compiled
20541          with this option runs almost everywhere.  The temporary
20542          results are computed in 80-bit precision instead of the
20543          precision specified by the type, resulting in slightly
20544          different results compared to most of other chips.  See
20545          `-ffloat-store' for more detailed description.
20546
20547          This is the default choice for x86-32 targets.
20548
20549    `sse'
20550          Use scalar floating-point instructions present in the SSE
20551          instruction set.  This instruction set is supported by
20552          Pentium III and newer chips, and in the AMD line by Athlon-4,
20553          Athlon XP and Athlon MP chips.  The earlier version of the SSE
20554          instruction set supports only single-precision arithmetic,
20555          thus the double and extended-precision arithmetic are still
20556          done using 387.  A later version, present only in Pentium 4
20557          and AMD x86-64 chips, supports double-precision arithmetic
20558          too.
20559
20560          For the x86-32 compiler, you must use `-march=CPU-TYPE',
20561          `-msse' or `-msse2' switches to enable SSE extensions and
20562          make this option effective.  For the x86-64 compiler, these
20563          extensions are enabled by default.
20564
20565          The resulting code should be considerably faster in the
20566          majority of cases and avoid the numerical instability
20567          problems of 387 code, but may break some existing code that
20568          expects temporaries to be 80 bits.
20569
20570          This is the default choice for the x86-64 compiler.
20571
20572    `sse,387'
20573    `sse+387'
20574    `both'
20575          Attempt to utilize both instruction sets at once.  This
20576          effectively doubles the amount of available registers, and on
20577          chips with separate execution units for 387 and SSE the
20578          execution resources too.  Use this option with care, as it is
20579          still experimental, because the GCC register allocator does
20580          not model separate functional units well, resulting in
20581          unstable performance.
20582
20583`-masm=DIALECT'
20584     Output assembly instructions using selected DIALECT.  Also affects
20585     which dialect is used for basic `asm' (*note Basic Asm::) and
20586     extended `asm' (*note Extended Asm::). Supported choices (in
20587     dialect order) are `att' or `intel'. The default is `att'. Darwin
20588     does not support `intel'.
20589
20590`-mieee-fp'
20591`-mno-ieee-fp'
20592     Control whether or not the compiler uses IEEE floating-point
20593     comparisons.  These correctly handle the case where the result of a
20594     comparison is unordered.
20595
20596`-msoft-float'
20597     Generate output containing library calls for floating point.
20598
20599     *Warning:* the requisite libraries are not part of GCC.  Normally
20600     the facilities of the machine's usual C compiler are used, but
20601     this can't be done directly in cross-compilation.  You must make
20602     your own arrangements to provide suitable library functions for
20603     cross-compilation.
20604
20605     On machines where a function returns floating-point results in the
20606     80387 register stack, some floating-point opcodes may be emitted
20607     even if `-msoft-float' is used.
20608
20609`-mno-fp-ret-in-387'
20610     Do not use the FPU registers for return values of functions.
20611
20612     The usual calling convention has functions return values of types
20613     `float' and `double' in an FPU register, even if there is no FPU.
20614     The idea is that the operating system should emulate an FPU.
20615
20616     The option `-mno-fp-ret-in-387' causes such values to be returned
20617     in ordinary CPU registers instead.
20618
20619`-mno-fancy-math-387'
20620     Some 387 emulators do not support the `sin', `cos' and `sqrt'
20621     instructions for the 387.  Specify this option to avoid generating
20622     those instructions.  This option is the default on OpenBSD and
20623     NetBSD.  This option is overridden when `-march' indicates that
20624     the target CPU always has an FPU and so the instruction does not
20625     need emulation.  These instructions are not generated unless you
20626     also use the `-funsafe-math-optimizations' switch.
20627
20628`-malign-double'
20629`-mno-align-double'
20630     Control whether GCC aligns `double', `long double', and `long
20631     long' variables on a two-word boundary or a one-word boundary.
20632     Aligning `double' variables on a two-word boundary produces code
20633     that runs somewhat faster on a Pentium at the expense of more
20634     memory.
20635
20636     On x86-64, `-malign-double' is enabled by default.
20637
20638     *Warning:* if you use the `-malign-double' switch, structures
20639     containing the above types are aligned differently than the
20640     published application binary interface specifications for the
20641     x86-32 and are not binary compatible with structures in code
20642     compiled without that switch.
20643
20644`-m96bit-long-double'
20645`-m128bit-long-double'
20646     These switches control the size of `long double' type.  The x86-32
20647     application binary interface specifies the size to be 96 bits, so
20648     `-m96bit-long-double' is the default in 32-bit mode.
20649
20650     Modern architectures (Pentium and newer) prefer `long double' to
20651     be aligned to an 8- or 16-byte boundary.  In arrays or structures
20652     conforming to the ABI, this is not possible.  So specifying
20653     `-m128bit-long-double' aligns `long double' to a 16-byte boundary
20654     by padding the `long double' with an additional 32-bit zero.
20655
20656     In the x86-64 compiler, `-m128bit-long-double' is the default
20657     choice as its ABI specifies that `long double' is aligned on
20658     16-byte boundary.
20659
20660     Notice that neither of these options enable any extra precision
20661     over the x87 standard of 80 bits for a `long double'.
20662
20663     *Warning:* if you override the default value for your target ABI,
20664     this changes the size of structures and arrays containing `long
20665     double' variables, as well as modifying the function calling
20666     convention for functions taking `long double'.  Hence they are not
20667     binary-compatible with code compiled without that switch.
20668
20669`-mlong-double-64'
20670`-mlong-double-80'
20671`-mlong-double-128'
20672     These switches control the size of `long double' type. A size of
20673     64 bits makes the `long double' type equivalent to the `double'
20674     type. This is the default for 32-bit Bionic C library.  A size of
20675     128 bits makes the `long double' type equivalent to the
20676     `__float128' type. This is the default for 64-bit Bionic C library.
20677
20678     *Warning:* if you override the default value for your target ABI,
20679     this changes the size of structures and arrays containing `long
20680     double' variables, as well as modifying the function calling
20681     convention for functions taking `long double'.  Hence they are not
20682     binary-compatible with code compiled without that switch.
20683
20684`-malign-data=TYPE'
20685     Control how GCC aligns variables.  Supported values for TYPE are
20686     `compat' uses increased alignment value compatible uses GCC 4.8
20687     and earlier, `abi' uses alignment value as specified by the psABI,
20688     and `cacheline' uses increased alignment value to match the cache
20689     line size.  `compat' is the default.
20690
20691`-mlarge-data-threshold=THRESHOLD'
20692     When `-mcmodel=medium' is specified, data objects larger than
20693     THRESHOLD are placed in the large data section.  This value must
20694     be the same across all objects linked into the binary, and
20695     defaults to 65535.
20696
20697`-mrtd'
20698     Use a different function-calling convention, in which functions
20699     that take a fixed number of arguments return with the `ret NUM'
20700     instruction, which pops their arguments while returning.  This
20701     saves one instruction in the caller since there is no need to pop
20702     the arguments there.
20703
20704     You can specify that an individual function is called with this
20705     calling sequence with the function attribute `stdcall'.  You can
20706     also override the `-mrtd' option by using the function attribute
20707     `cdecl'.  *Note Function Attributes::.
20708
20709     *Warning:* this calling convention is incompatible with the one
20710     normally used on Unix, so you cannot use it if you need to call
20711     libraries compiled with the Unix compiler.
20712
20713     Also, you must provide function prototypes for all functions that
20714     take variable numbers of arguments (including `printf'); otherwise
20715     incorrect code is generated for calls to those functions.
20716
20717     In addition, seriously incorrect code results if you call a
20718     function with too many arguments.  (Normally, extra arguments are
20719     harmlessly ignored.)
20720
20721`-mregparm=NUM'
20722     Control how many registers are used to pass integer arguments.  By
20723     default, no registers are used to pass arguments, and at most 3
20724     registers can be used.  You can control this behavior for a
20725     specific function by using the function attribute `regparm'.
20726     *Note Function Attributes::.
20727
20728     *Warning:* if you use this switch, and NUM is nonzero, then you
20729     must build all modules with the same value, including any
20730     libraries.  This includes the system libraries and startup modules.
20731
20732`-msseregparm'
20733     Use SSE register passing conventions for float and double arguments
20734     and return values.  You can control this behavior for a specific
20735     function by using the function attribute `sseregparm'.  *Note
20736     Function Attributes::.
20737
20738     *Warning:* if you use this switch then you must build all modules
20739     with the same value, including any libraries.  This includes the
20740     system libraries and startup modules.
20741
20742`-mvect8-ret-in-mem'
20743     Return 8-byte vectors in memory instead of MMX registers.  This is
20744     the default on Solaris 8 and 9 and VxWorks to match the ABI of the
20745     Sun Studio compilers until version 12.  Later compiler versions
20746     (starting with Studio 12 Update 1) follow the ABI used by other
20747     x86 targets, which is the default on Solaris 10 and later.  _Only_
20748     use this option if you need to remain compatible with existing
20749     code produced by those previous compiler versions or older
20750     versions of GCC.
20751
20752`-mpc32'
20753`-mpc64'
20754`-mpc80'
20755     Set 80387 floating-point precision to 32, 64 or 80 bits.  When
20756     `-mpc32' is specified, the significands of results of
20757     floating-point operations are rounded to 24 bits (single
20758     precision); `-mpc64' rounds the significands of results of
20759     floating-point operations to 53 bits (double precision) and
20760     `-mpc80' rounds the significands of results of floating-point
20761     operations to 64 bits (extended double precision), which is the
20762     default.  When this option is used, floating-point operations in
20763     higher precisions are not available to the programmer without
20764     setting the FPU control word explicitly.
20765
20766     Setting the rounding of floating-point operations to less than the
20767     default 80 bits can speed some programs by 2% or more.  Note that
20768     some mathematical libraries assume that extended-precision
20769     (80-bit) floating-point operations are enabled by default;
20770     routines in such libraries could suffer significant loss of
20771     accuracy, typically through so-called "catastrophic cancellation",
20772     when this option is used to set the precision to less than
20773     extended precision.
20774
20775`-mstackrealign'
20776     Realign the stack at entry.  On the x86, the `-mstackrealign'
20777     option generates an alternate prologue and epilogue that realigns
20778     the run-time stack if necessary.  This supports mixing legacy
20779     codes that keep 4-byte stack alignment with modern codes that keep
20780     16-byte stack alignment for SSE compatibility.  See also the
20781     attribute `force_align_arg_pointer', applicable to individual
20782     functions.
20783
20784`-mpreferred-stack-boundary=NUM'
20785     Attempt to keep the stack boundary aligned to a 2 raised to NUM
20786     byte boundary.  If `-mpreferred-stack-boundary' is not specified,
20787     the default is 4 (16 bytes or 128 bits).
20788
20789     *Warning:* When generating code for the x86-64 architecture with
20790     SSE extensions disabled, `-mpreferred-stack-boundary=3' can be
20791     used to keep the stack boundary aligned to 8 byte boundary.  Since
20792     x86-64 ABI require 16 byte stack alignment, this is ABI
20793     incompatible and intended to be used in controlled environment
20794     where stack space is important limitation.  This option leads to
20795     wrong code when functions compiled with 16 byte stack alignment
20796     (such as functions from a standard library) are called with
20797     misaligned stack.  In this case, SSE instructions may lead to
20798     misaligned memory access traps.  In addition, variable arguments
20799     are handled incorrectly for 16 byte aligned objects (including x87
20800     long double and __int128), leading to wrong results.  You must
20801     build all modules with `-mpreferred-stack-boundary=3', including
20802     any libraries.  This includes the system libraries and startup
20803     modules.
20804
20805`-mincoming-stack-boundary=NUM'
20806     Assume the incoming stack is aligned to a 2 raised to NUM byte
20807     boundary.  If `-mincoming-stack-boundary' is not specified, the
20808     one specified by `-mpreferred-stack-boundary' is used.
20809
20810     On Pentium and Pentium Pro, `double' and `long double' values
20811     should be aligned to an 8-byte boundary (see `-malign-double') or
20812     suffer significant run time performance penalties.  On Pentium
20813     III, the Streaming SIMD Extension (SSE) data type `__m128' may not
20814     work properly if it is not 16-byte aligned.
20815
20816     To ensure proper alignment of this values on the stack, the stack
20817     boundary must be as aligned as that required by any value stored
20818     on the stack.  Further, every function must be generated such that
20819     it keeps the stack aligned.  Thus calling a function compiled with
20820     a higher preferred stack boundary from a function compiled with a
20821     lower preferred stack boundary most likely misaligns the stack.
20822     It is recommended that libraries that use callbacks always use the
20823     default setting.
20824
20825     This extra alignment does consume extra stack space, and generally
20826     increases code size.  Code that is sensitive to stack space usage,
20827     such as embedded systems and operating system kernels, may want to
20828     reduce the preferred alignment to `-mpreferred-stack-boundary=2'.
20829
20830`-mmmx'
20831`-msse'
20832`-msse2'
20833`-msse3'
20834`-mssse3'
20835`-msse4'
20836`-msse4a'
20837`-msse4.1'
20838`-msse4.2'
20839`-mavx'
20840`-mavx2'
20841`-mavx512f'
20842`-mavx512pf'
20843`-mavx512er'
20844`-mavx512cd'
20845`-msha'
20846`-maes'
20847`-mpclmul'
20848`-mclfushopt'
20849`-mfsgsbase'
20850`-mrdrnd'
20851`-mf16c'
20852`-mfma'
20853`-mfma4'
20854`-mno-fma4'
20855`-mprefetchwt1'
20856`-mxop'
20857`-mlwp'
20858`-m3dnow'
20859`-mpopcnt'
20860`-mabm'
20861`-mbmi'
20862`-mbmi2'
20863`-mlzcnt'
20864`-mfxsr'
20865`-mxsave'
20866`-mxsaveopt'
20867`-mxsavec'
20868`-mxsaves'
20869`-mrtm'
20870`-mtbm'
20871`-mmpx'
20872`-mmwaitx'
20873     These switches enable the use of instructions in the MMX, SSE,
20874     SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER,
20875     AVX512CD, SHA, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A,
20876     FMA4, XOP, LWP, ABM, BMI, BMI2, FXSR, XSAVE, XSAVEOPT, LZCNT, RTM,
20877     MPX, MWAITX or 3DNow!  extended instruction sets.  Each has a
20878     corresponding `-mno-' option to disable use of these instructions.
20879
20880     These extensions are also available as built-in functions: see
20881     *note x86 Built-in Functions::, for details of the functions
20882     enabled and disabled by these switches.
20883
20884     To generate SSE/SSE2 instructions automatically from floating-point
20885     code (as opposed to 387 instructions), see `-mfpmath=sse'.
20886
20887     GCC depresses SSEx instructions when `-mavx' is used. Instead, it
20888     generates new AVX instructions or AVX equivalence for all SSEx
20889     instructions when needed.
20890
20891     These options enable GCC to use these extended instructions in
20892     generated code, even without `-mfpmath=sse'.  Applications that
20893     perform run-time CPU detection must compile separate files for each
20894     supported architecture, using the appropriate flags.  In
20895     particular, the file containing the CPU detection code should be
20896     compiled without these options.
20897
20898`-mdump-tune-features'
20899     This option instructs GCC to dump the names of the x86 performance
20900     tuning features and default settings. The names can be used in
20901     `-mtune-ctrl=FEATURE-LIST'.
20902
20903`-mtune-ctrl=FEATURE-LIST'
20904     This option is used to do fine grain control of x86 code
20905     generation features.  FEATURE-LIST is a comma separated list of
20906     FEATURE names. See also `-mdump-tune-features'. When specified,
20907     the FEATURE is turned on if it is not preceded with `^',
20908     otherwise, it is turned off.  `-mtune-ctrl=FEATURE-LIST' is
20909     intended to be used by GCC developers. Using it may lead to code
20910     paths not covered by testing and can potentially result in
20911     compiler ICEs or runtime errors.
20912
20913`-mno-default'
20914     This option instructs GCC to turn off all tunable features. See
20915     also `-mtune-ctrl=FEATURE-LIST' and `-mdump-tune-features'.
20916
20917`-mcld'
20918     This option instructs GCC to emit a `cld' instruction in the
20919     prologue of functions that use string instructions.  String
20920     instructions depend on the DF flag to select between autoincrement
20921     or autodecrement mode.  While the ABI specifies the DF flag to be
20922     cleared on function entry, some operating systems violate this
20923     specification by not clearing the DF flag in their exception
20924     dispatchers.  The exception handler can be invoked with the DF flag
20925     set, which leads to wrong direction mode when string instructions
20926     are used.  This option can be enabled by default on 32-bit x86
20927     targets by configuring GCC with the `--enable-cld' configure
20928     option.  Generation of `cld' instructions can be suppressed with
20929     the `-mno-cld' compiler option in this case.
20930
20931`-mvzeroupper'
20932     This option instructs GCC to emit a `vzeroupper' instruction
20933     before a transfer of control flow out of the function to minimize
20934     the AVX to SSE transition penalty as well as remove unnecessary
20935     `zeroupper' intrinsics.
20936
20937`-mprefer-avx128'
20938     This option instructs GCC to use 128-bit AVX instructions instead
20939     of 256-bit AVX instructions in the auto-vectorizer.
20940
20941`-mcx16'
20942     This option enables GCC to generate `CMPXCHG16B' instructions.
20943     `CMPXCHG16B' allows for atomic operations on 128-bit double
20944     quadword (or oword) data types.  This is useful for
20945     high-resolution counters that can be updated by multiple
20946     processors (or cores).  This instruction is generated as part of
20947     atomic built-in functions: see *note __sync Builtins:: or *note
20948     __atomic Builtins:: for details.
20949
20950`-msahf'
20951     This option enables generation of `SAHF' instructions in 64-bit
20952     code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
20953     the introduction of Pentium 4 G1 step in December 2005, lacked the
20954     `LAHF' and `SAHF' instructions which are supported by AMD64.
20955     These are load and store instructions, respectively, for certain
20956     status flags.  In 64-bit mode, the `SAHF' instruction is used to
20957     optimize `fmod', `drem', and `remainder' built-in functions; see
20958     *note Other Builtins:: for details.
20959
20960`-mmovbe'
20961     This option enables use of the `movbe' instruction to implement
20962     `__builtin_bswap32' and `__builtin_bswap64'.
20963
20964`-mcrc32'
20965     This option enables built-in functions `__builtin_ia32_crc32qi',
20966     `__builtin_ia32_crc32hi', `__builtin_ia32_crc32si' and
20967     `__builtin_ia32_crc32di' to generate the `crc32' machine
20968     instruction.
20969
20970`-mrecip'
20971     This option enables use of `RCPSS' and `RSQRTSS' instructions (and
20972     their vectorized variants `RCPPS' and `RSQRTPS') with an
20973     additional Newton-Raphson step to increase precision instead of
20974     `DIVSS' and `SQRTSS' (and their vectorized variants) for
20975     single-precision floating-point arguments.  These instructions are
20976     generated only when `-funsafe-math-optimizations' is enabled
20977     together with `-finite-math-only' and `-fno-trapping-math'.  Note
20978     that while the throughput of the sequence is higher than the
20979     throughput of the non-reciprocal instruction, the precision of the
20980     sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0
20981     equals 0.99999994).
20982
20983     Note that GCC implements `1.0f/sqrtf(X)' in terms of `RSQRTSS' (or
20984     `RSQRTPS') already with `-ffast-math' (or the above option
20985     combination), and doesn't need `-mrecip'.
20986
20987     Also note that GCC emits the above sequence with additional
20988     Newton-Raphson step for vectorized single-float division and
20989     vectorized `sqrtf(X)' already with `-ffast-math' (or the above
20990     option combination), and doesn't need `-mrecip'.
20991
20992`-mrecip=OPT'
20993     This option controls which reciprocal estimate instructions may be
20994     used.  OPT is a comma-separated list of options, which may be
20995     preceded by a `!' to invert the option:
20996
20997    `all'
20998          Enable all estimate instructions.
20999
21000    `default'
21001          Enable the default instructions, equivalent to `-mrecip'.
21002
21003    `none'
21004          Disable all estimate instructions, equivalent to `-mno-recip'.
21005
21006    `div'
21007          Enable the approximation for scalar division.
21008
21009    `vec-div'
21010          Enable the approximation for vectorized division.
21011
21012    `sqrt'
21013          Enable the approximation for scalar square root.
21014
21015    `vec-sqrt'
21016          Enable the approximation for vectorized square root.
21017
21018     So, for example, `-mrecip=all,!sqrt' enables all of the reciprocal
21019     approximations, except for square root.
21020
21021`-mveclibabi=TYPE'
21022     Specifies the ABI type to use for vectorizing intrinsics using an
21023     external library.  Supported values for TYPE are `svml' for the
21024     Intel short vector math library and `acml' for the AMD math core
21025     library.  To use this option, both `-ftree-vectorize' and
21026     `-funsafe-math-optimizations' have to be enabled, and an SVML or
21027     ACML ABI-compatible library must be specified at link time.
21028
21029     GCC currently emits calls to `vmldExp2', `vmldLn2', `vmldLog102',
21030     `vmldLog102', `vmldPow2', `vmldTanh2', `vmldTan2', `vmldAtan2',
21031     `vmldAtanh2', `vmldCbrt2', `vmldSinh2', `vmldSin2', `vmldAsinh2',
21032     `vmldAsin2', `vmldCosh2', `vmldCos2', `vmldAcosh2', `vmldAcos2',
21033     `vmlsExp4', `vmlsLn4', `vmlsLog104', `vmlsLog104', `vmlsPow4',
21034     `vmlsTanh4', `vmlsTan4', `vmlsAtan4', `vmlsAtanh4', `vmlsCbrt4',
21035     `vmlsSinh4', `vmlsSin4', `vmlsAsinh4', `vmlsAsin4', `vmlsCosh4',
21036     `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4' for corresponding
21037     function type when `-mveclibabi=svml' is used, and `__vrd2_sin',
21038     `__vrd2_cos', `__vrd2_exp', `__vrd2_log', `__vrd2_log2',
21039     `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf', `__vrs4_expf',
21040     `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and `__vrs4_powf'
21041     for the corresponding function type when `-mveclibabi=acml' is
21042     used.
21043
21044`-mabi=NAME'
21045     Generate code for the specified calling convention.  Permissible
21046     values are `sysv' for the ABI used on GNU/Linux and other systems,
21047     and `ms' for the Microsoft ABI.  The default is to use the
21048     Microsoft ABI when targeting Microsoft Windows and the SysV ABI on
21049     all other systems.  You can control this behavior for specific
21050     functions by using the function attributes `ms_abi' and `sysv_abi'.
21051     *Note Function Attributes::.
21052
21053`-mtls-dialect=TYPE'
21054     Generate code to access thread-local storage using the `gnu' or
21055     `gnu2' conventions.  `gnu' is the conservative default; `gnu2' is
21056     more efficient, but it may add compile- and run-time requirements
21057     that cannot be satisfied on all systems.
21058
21059`-mpush-args'
21060`-mno-push-args'
21061     Use PUSH operations to store outgoing parameters.  This method is
21062     shorter and usually equally fast as method using SUB/MOV
21063     operations and is enabled by default.  In some cases disabling it
21064     may improve performance because of improved scheduling and reduced
21065     dependencies.
21066
21067`-maccumulate-outgoing-args'
21068     If enabled, the maximum amount of space required for outgoing
21069     arguments is computed in the function prologue.  This is faster on
21070     most modern CPUs because of reduced dependencies, improved
21071     scheduling and reduced stack usage when the preferred stack
21072     boundary is not equal to 2.  The drawback is a notable increase in
21073     code size.  This switch implies `-mno-push-args'.
21074
21075`-mthreads'
21076     Support thread-safe exception handling on MinGW.  Programs that
21077     rely on thread-safe exception handling must compile and link all
21078     code with the `-mthreads' option.  When compiling, `-mthreads'
21079     defines `-D_MT'; when linking, it links in a special thread helper
21080     library `-lmingwthrd' which cleans up per-thread
21081     exception-handling data.
21082
21083`-mno-align-stringops'
21084     Do not align the destination of inlined string operations.  This
21085     switch reduces code size and improves performance in case the
21086     destination is already aligned, but GCC doesn't know about it.
21087
21088`-minline-all-stringops'
21089     By default GCC inlines string operations only when the destination
21090     is known to be aligned to least a 4-byte boundary.  This enables
21091     more inlining and increases code size, but may improve performance
21092     of code that depends on fast `memcpy', `strlen', and `memset' for
21093     short lengths.
21094
21095`-minline-stringops-dynamically'
21096     For string operations of unknown size, use run-time checks with
21097     inline code for small blocks and a library call for large blocks.
21098
21099`-mstringop-strategy=ALG'
21100     Override the internal decision heuristic for the particular
21101     algorithm to use for inlining string operations.  The allowed
21102     values for ALG are:
21103
21104    `rep_byte'
21105    `rep_4byte'
21106    `rep_8byte'
21107          Expand using i386 `rep' prefix of the specified size.
21108
21109    `byte_loop'
21110    `loop'
21111    `unrolled_loop'
21112          Expand into an inline loop.
21113
21114    `libcall'
21115          Always use a library call.
21116
21117`-mmemcpy-strategy=STRATEGY'
21118     Override the internal decision heuristic to decide if
21119     `__builtin_memcpy' should be inlined and what inline algorithm to
21120     use when the expected size of the copy operation is known. STRATEGY
21121     is a comma-separated list of ALG:MAX_SIZE:DEST_ALIGN triplets.
21122     ALG is specified in `-mstringop-strategy', MAX_SIZE specifies the
21123     max byte size with which inline algorithm ALG is allowed.  For the
21124     last triplet, the MAX_SIZE must be `-1'. The MAX_SIZE of the
21125     triplets in the list must be specified in increasing order.  The
21126     minimal byte size for ALG is `0' for the first triplet and
21127     `MAX_SIZE + 1' of the preceding range.
21128
21129`-mmemset-strategy=STRATEGY'
21130     The option is similar to `-mmemcpy-strategy=' except that it is to
21131     control `__builtin_memset' expansion.
21132
21133`-momit-leaf-frame-pointer'
21134     Don't keep the frame pointer in a register for leaf functions.
21135     This avoids the instructions to save, set up, and restore frame
21136     pointers and makes an extra register available in leaf functions.
21137     The option `-fomit-leaf-frame-pointer' removes the frame pointer
21138     for leaf functions, which might make debugging harder.
21139
21140`-mtls-direct-seg-refs'
21141`-mno-tls-direct-seg-refs'
21142     Controls whether TLS variables may be accessed with offsets from
21143     the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or
21144     whether the thread base pointer must be added.  Whether or not this
21145     is valid depends on the operating system, and whether it maps the
21146     segment to cover the entire TLS area.
21147
21148     For systems that use the GNU C Library, the default is on.
21149
21150`-msse2avx'
21151`-mno-sse2avx'
21152     Specify that the assembler should encode SSE instructions with VEX
21153     prefix.  The option `-mavx' turns this on by default.
21154
21155`-mfentry'
21156`-mno-fentry'
21157     If profiling is active (`-pg'), put the profiling counter call
21158     before the prologue.  Note: On x86 architectures the attribute
21159     `ms_hook_prologue' isn't possible at the moment for `-mfentry' and
21160     `-pg'.
21161
21162`-mrecord-mcount'
21163`-mno-record-mcount'
21164     If profiling is active (`-pg'), generate a __mcount_loc section
21165     that contains pointers to each profiling call. This is useful for
21166     automatically patching and out calls.
21167
21168`-mnop-mcount'
21169`-mno-nop-mcount'
21170     If profiling is active (`-pg'), generate the calls to the
21171     profiling functions as nops. This is useful when they should be
21172     patched in later dynamically. This is likely only useful together
21173     with `-mrecord-mcount'.
21174
21175`-mskip-rax-setup'
21176`-mno-skip-rax-setup'
21177     When generating code for the x86-64 architecture with SSE
21178     extensions disabled, `-mskip-rax-setup' can be used to skip
21179     setting up RAX register when there are no variable arguments
21180     passed in vector registers.
21181
21182     *Warning:* Since RAX register is used to avoid unnecessarily
21183     saving vector registers on stack when passing variable arguments,
21184     the impacts of this option are callees may waste some stack space,
21185     misbehave or jump to a random location.  GCC 4.4 or newer don't
21186     have those issues, regardless the RAX register value.
21187
21188`-m8bit-idiv'
21189`-mno-8bit-idiv'
21190     On some processors, like Intel Atom, 8-bit unsigned integer divide
21191     is much faster than 32-bit/64-bit integer divide.  This option
21192     generates a run-time check.  If both dividend and divisor are
21193     within range of 0 to 255, 8-bit unsigned integer divide is used
21194     instead of 32-bit/64-bit integer divide.
21195
21196`-mavx256-split-unaligned-load'
21197`-mavx256-split-unaligned-store'
21198     Split 32-byte AVX unaligned load and store.
21199
21200`-mstack-protector-guard=GUARD'
21201     Generate stack protection code using canary at GUARD.  Supported
21202     locations are `global' for global canary or `tls' for per-thread
21203     canary in the TLS block (the default).  This option has effect
21204     only when `-fstack-protector' or `-fstack-protector-all' is
21205     specified.
21206
21207
21208 These `-m' switches are supported in addition to the above on x86-64
21209processors in 64-bit environments.
21210
21211`-m32'
21212`-m64'
21213`-mx32'
21214`-m16'
21215     Generate code for a 16-bit, 32-bit or 64-bit environment.  The
21216     `-m32' option sets `int', `long', and pointer types to 32 bits, and
21217     generates code that runs on any i386 system.
21218
21219     The `-m64' option sets `int' to 32 bits and `long' and pointer
21220     types to 64 bits, and generates code for the x86-64 architecture.
21221     For Darwin only the `-m64' option also turns off the `-fno-pic'
21222     and `-mdynamic-no-pic' options.
21223
21224     The `-mx32' option sets `int', `long', and pointer types to 32
21225     bits, and generates code for the x86-64 architecture.
21226
21227     The `-m16' option is the same as `-m32', except for that it
21228     outputs the `.code16gcc' assembly directive at the beginning of
21229     the assembly output so that the binary can run in 16-bit mode.
21230
21231`-mno-red-zone'
21232     Do not use a so-called "red zone" for x86-64 code.  The red zone
21233     is mandated by the x86-64 ABI; it is a 128-byte area beyond the
21234     location of the stack pointer that is not modified by signal or
21235     interrupt handlers and therefore can be used for temporary data
21236     without adjusting the stack pointer.  The flag `-mno-red-zone'
21237     disables this red zone.
21238
21239`-mcmodel=small'
21240     Generate code for the small code model: the program and its
21241     symbols must be linked in the lower 2 GB of the address space.
21242     Pointers are 64 bits.  Programs can be statically or dynamically
21243     linked.  This is the default code model.
21244
21245`-mcmodel=kernel'
21246     Generate code for the kernel code model.  The kernel runs in the
21247     negative 2 GB of the address space.  This model has to be used for
21248     Linux kernel code.
21249
21250`-mcmodel=medium'
21251     Generate code for the medium model: the program is linked in the
21252     lower 2 GB of the address space.  Small symbols are also placed
21253     there.  Symbols with sizes larger than `-mlarge-data-threshold'
21254     are put into large data or BSS sections and can be located above
21255     2GB.  Programs can be statically or dynamically linked.
21256
21257`-mcmodel=large'
21258     Generate code for the large model.  This model makes no assumptions
21259     about addresses and sizes of sections.
21260
21261`-maddress-mode=long'
21262     Generate code for long address mode.  This is only supported for
21263     64-bit and x32 environments.  It is the default address mode for
21264     64-bit environments.
21265
21266`-maddress-mode=short'
21267     Generate code for short address mode.  This is only supported for
21268     32-bit and x32 environments.  It is the default address mode for
21269     32-bit and x32 environments.
21270
21271
21272File: gcc.info,  Node: x86 Windows Options,  Next: Xstormy16 Options,  Prev: x86 Options,  Up: Submodel Options
21273
212743.17.54 x86 Windows Options
21275---------------------------
21276
21277These additional options are available for Microsoft Windows targets:
21278
21279`-mconsole'
21280     This option specifies that a console application is to be
21281     generated, by instructing the linker to set the PE header
21282     subsystem type required for console applications.  This option is
21283     available for Cygwin and MinGW targets and is enabled by default
21284     on those targets.
21285
21286`-mdll'
21287     This option is available for Cygwin and MinGW targets.  It
21288     specifies that a DLL--a dynamic link library--is to be generated,
21289     enabling the selection of the required runtime startup object and
21290     entry point.
21291
21292`-mnop-fun-dllimport'
21293     This option is available for Cygwin and MinGW targets.  It
21294     specifies that the `dllimport' attribute should be ignored.
21295
21296`-mthread'
21297     This option is available for MinGW targets. It specifies that
21298     MinGW-specific thread support is to be used.
21299
21300`-municode'
21301     This option is available for MinGW-w64 targets.  It causes the
21302     `UNICODE' preprocessor macro to be predefined, and chooses
21303     Unicode-capable runtime startup code.
21304
21305`-mwin32'
21306     This option is available for Cygwin and MinGW targets.  It
21307     specifies that the typical Microsoft Windows predefined macros are
21308     to be set in the pre-processor, but does not influence the choice
21309     of runtime library/startup code.
21310
21311`-mwindows'
21312     This option is available for Cygwin and MinGW targets.  It
21313     specifies that a GUI application is to be generated by instructing
21314     the linker to set the PE header subsystem type appropriately.
21315
21316`-fno-set-stack-executable'
21317     This option is available for MinGW targets. It specifies that the
21318     executable flag for the stack used by nested functions isn't set.
21319     This is necessary for binaries running in kernel mode of Microsoft
21320     Windows, as there the User32 API, which is used to set executable
21321     privileges, isn't available.
21322
21323`-fwritable-relocated-rdata'
21324     This option is available for MinGW and Cygwin targets.  It
21325     specifies that relocated-data in read-only section is put into
21326     .data section.  This is a necessary for older runtimes not
21327     supporting modification of .rdata sections for pseudo-relocation.
21328
21329`-mpe-aligned-commons'
21330     This option is available for Cygwin and MinGW targets.  It
21331     specifies that the GNU extension to the PE file format that
21332     permits the correct alignment of COMMON variables should be used
21333     when generating code.  It is enabled by default if GCC detects
21334     that the target assembler found during configuration supports the
21335     feature.
21336
21337 See also under *note x86 Options:: for standard options.
21338
21339
21340File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86 Windows Options,  Up: Submodel Options
21341
213423.17.55 Xstormy16 Options
21343-------------------------
21344
21345These options are defined for Xstormy16:
21346
21347`-msim'
21348     Choose startup files and linker script suitable for the simulator.
21349
21350
21351File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
21352
213533.17.56 Xtensa Options
21354----------------------
21355
21356These options are supported for Xtensa targets:
21357
21358`-mconst16'
21359`-mno-const16'
21360     Enable or disable use of `CONST16' instructions for loading
21361     constant values.  The `CONST16' instruction is currently not a
21362     standard option from Tensilica.  When enabled, `CONST16'
21363     instructions are always used in place of the standard `L32R'
21364     instructions.  The use of `CONST16' is enabled by default only if
21365     the `L32R' instruction is not available.
21366
21367`-mfused-madd'
21368`-mno-fused-madd'
21369     Enable or disable use of fused multiply/add and multiply/subtract
21370     instructions in the floating-point option.  This has no effect if
21371     the floating-point option is not also enabled.  Disabling fused
21372     multiply/add and multiply/subtract instructions forces the
21373     compiler to use separate instructions for the multiply and
21374     add/subtract operations.  This may be desirable in some cases
21375     where strict IEEE 754-compliant results are required: the fused
21376     multiply add/subtract instructions do not round the intermediate
21377     result, thereby producing results with _more_ bits of precision
21378     than specified by the IEEE standard.  Disabling fused multiply
21379     add/subtract instructions also ensures that the program output is
21380     not sensitive to the compiler's ability to combine multiply and
21381     add/subtract operations.
21382
21383`-mserialize-volatile'
21384`-mno-serialize-volatile'
21385     When this option is enabled, GCC inserts `MEMW' instructions before
21386     `volatile' memory references to guarantee sequential consistency.
21387     The default is `-mserialize-volatile'.  Use
21388     `-mno-serialize-volatile' to omit the `MEMW' instructions.
21389
21390`-mforce-no-pic'
21391     For targets, like GNU/Linux, where all user-mode Xtensa code must
21392     be position-independent code (PIC), this option disables PIC for
21393     compiling kernel code.
21394
21395`-mtext-section-literals'
21396`-mno-text-section-literals'
21397     These options control the treatment of literal pools.  The default
21398     is `-mno-text-section-literals', which places literals in a
21399     separate section in the output file.  This allows the literal pool
21400     to be placed in a data RAM/ROM, and it also allows the linker to
21401     combine literal pools from separate object files to remove
21402     redundant literals and improve code size.  With
21403     `-mtext-section-literals', the literals are interspersed in the
21404     text section in order to keep them as close as possible to their
21405     references.  This may be necessary for large assembly files.
21406
21407`-mtarget-align'
21408`-mno-target-align'
21409     When this option is enabled, GCC instructs the assembler to
21410     automatically align instructions to reduce branch penalties at the
21411     expense of some code density.  The assembler attempts to widen
21412     density instructions to align branch targets and the instructions
21413     following call instructions.  If there are not enough preceding
21414     safe density instructions to align a target, no widening is
21415     performed.  The default is `-mtarget-align'.  These options do not
21416     affect the treatment of auto-aligned instructions like `LOOP',
21417     which the assembler always aligns, either by widening density
21418     instructions or by inserting NOP instructions.
21419
21420`-mlongcalls'
21421`-mno-longcalls'
21422     When this option is enabled, GCC instructs the assembler to
21423     translate direct calls to indirect calls unless it can determine
21424     that the target of a direct call is in the range allowed by the
21425     call instruction.  This translation typically occurs for calls to
21426     functions in other source files.  Specifically, the assembler
21427     translates a direct `CALL' instruction into an `L32R' followed by
21428     a `CALLX' instruction.  The default is `-mno-longcalls'.  This
21429     option should be used in programs where the call target can
21430     potentially be out of range.  This option is implemented in the
21431     assembler, not the compiler, so the assembly code generated by GCC
21432     still shows direct call instructions--look at the disassembled
21433     object code to see the actual instructions.  Note that the
21434     assembler uses an indirect call for every cross-file call, not
21435     just those that really are out of range.
21436
21437
21438File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
21439
214403.17.57 zSeries Options
21441-----------------------
21442
21443These are listed under *Note S/390 and zSeries Options::.
21444
21445
21446File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
21447
214483.18 Options for Code Generation Conventions
21449============================================
21450
21451These machine-independent options control the interface conventions
21452used in code generation.
21453
21454 Most of them have both positive and negative forms; the negative form
21455of `-ffoo' is `-fno-foo'.  In the table below, only one of the forms is
21456listed--the one that is not the default.  You can figure out the other
21457form by either removing `no-' or adding it.
21458
21459`-fbounds-check'
21460     For front ends that support it, generate additional code to check
21461     that indices used to access arrays are within the declared range.
21462     This is currently only supported by the Java and Fortran front
21463     ends, where this option defaults to true and false respectively.
21464
21465`-fstack-reuse=REUSE-LEVEL'
21466     This option controls stack space reuse for user declared
21467     local/auto variables and compiler generated temporaries.
21468     REUSE_LEVEL can be `all', `named_vars', or `none'. `all' enables
21469     stack reuse for all local variables and temporaries, `named_vars'
21470     enables the reuse only for user defined local variables with
21471     names, and `none' disables stack reuse completely. The default
21472     value is `all'. The option is needed when the program extends the
21473     lifetime of a scoped local variable or a compiler generated
21474     temporary beyond the end point defined by the language.  When a
21475     lifetime of a variable ends, and if the variable lives in memory,
21476     the optimizing compiler has the freedom to reuse its stack space
21477     with other temporaries or scoped local variables whose live range
21478     does not overlap with it. Legacy code extending local lifetime is
21479     likely to break with the stack reuse optimization.
21480
21481     For example,
21482
21483             int *p;
21484             {
21485               int local1;
21486
21487               p = &local1;
21488               local1 = 10;
21489               ....
21490             }
21491             {
21492                int local2;
21493                local2 = 20;
21494                ...
21495             }
21496
21497             if (*p == 10)  // out of scope use of local1
21498               {
21499
21500               }
21501
21502     Another example:
21503
21504             struct A
21505             {
21506                 A(int k) : i(k), j(k) { }
21507                 int i;
21508                 int j;
21509             };
21510
21511             A *ap;
21512
21513             void foo(const A& ar)
21514             {
21515                ap = &ar;
21516             }
21517
21518             void bar()
21519             {
21520                foo(A(10)); // temp object's lifetime ends when foo returns
21521
21522                {
21523                  A a(20);
21524                  ....
21525                }
21526                ap->i+= 10;  // ap references out of scope temp whose space
21527                             // is reused with a. What is the value of ap->i?
21528             }
21529
21530     The lifetime of a compiler generated temporary is well defined by
21531     the C++ standard. When a lifetime of a temporary ends, and if the
21532     temporary lives in memory, the optimizing compiler has the freedom
21533     to reuse its stack space with other temporaries or scoped local
21534     variables whose live range does not overlap with it. However some
21535     of the legacy code relies on the behavior of older compilers in
21536     which temporaries' stack space is not reused, the aggressive stack
21537     reuse can lead to runtime errors. This option is used to control
21538     the temporary stack reuse optimization.
21539
21540`-ftrapv'
21541     This option generates traps for signed overflow on addition,
21542     subtraction, multiplication operations.
21543
21544`-fwrapv'
21545     This option instructs the compiler to assume that signed arithmetic
21546     overflow of addition, subtraction and multiplication wraps around
21547     using twos-complement representation.  This flag enables some
21548     optimizations and disables others.  This option is enabled by
21549     default for the Java front end, as required by the Java language
21550     specification.
21551
21552`-fexceptions'
21553     Enable exception handling.  Generates extra code needed to
21554     propagate exceptions.  For some targets, this implies GCC
21555     generates frame unwind information for all functions, which can
21556     produce significant data size overhead, although it does not
21557     affect execution.  If you do not specify this option, GCC enables
21558     it by default for languages like C++ that normally require
21559     exception handling, and disables it for languages like C that do
21560     not normally require it.  However, you may need to enable this
21561     option when compiling C code that needs to interoperate properly
21562     with exception handlers written in C++.  You may also wish to
21563     disable this option if you are compiling older C++ programs that
21564     don't use exception handling.
21565
21566`-fnon-call-exceptions'
21567     Generate code that allows trapping instructions to throw
21568     exceptions.  Note that this requires platform-specific runtime
21569     support that does not exist everywhere.  Moreover, it only allows
21570     _trapping_ instructions to throw exceptions, i.e. memory
21571     references or floating-point instructions.  It does not allow
21572     exceptions to be thrown from arbitrary signal handlers such as
21573     `SIGALRM'.
21574
21575`-fdelete-dead-exceptions'
21576     Consider that instructions that may throw exceptions but don't
21577     otherwise contribute to the execution of the program can be
21578     optimized away.  This option is enabled by default for the Ada
21579     front end, as permitted by the Ada language specification.
21580     Optimization passes that cause dead exceptions to be removed are
21581     enabled independently at different optimization levels.
21582
21583`-funwind-tables'
21584     Similar to `-fexceptions', except that it just generates any needed
21585     static data, but does not affect the generated code in any other
21586     way.  You normally do not need to enable this option; instead, a
21587     language processor that needs this handling enables it on your
21588     behalf.
21589
21590`-fasynchronous-unwind-tables'
21591     Generate unwind table in DWARF 2 format, if supported by target
21592     machine.  The table is exact at each instruction boundary, so it
21593     can be used for stack unwinding from asynchronous events (such as
21594     debugger or garbage collector).
21595
21596`-fno-gnu-unique'
21597     On systems with recent GNU assembler and C library, the C++
21598     compiler uses the `STB_GNU_UNIQUE' binding to make sure that
21599     definitions of template static data members and static local
21600     variables in inline functions are unique even in the presence of
21601     `RTLD_LOCAL'; this is necessary to avoid problems with a library
21602     used by two different `RTLD_LOCAL' plugins depending on a
21603     definition in one of them and therefore disagreeing with the other
21604     one about the binding of the symbol.  But this causes `dlclose' to
21605     be ignored for affected DSOs; if your program relies on
21606     reinitialization of a DSO via `dlclose' and `dlopen', you can use
21607     `-fno-gnu-unique'.
21608
21609`-fpcc-struct-return'
21610     Return "short" `struct' and `union' values in memory like longer
21611     ones, rather than in registers.  This convention is less
21612     efficient, but it has the advantage of allowing intercallability
21613     between GCC-compiled files and files compiled with other
21614     compilers, particularly the Portable C Compiler (pcc).
21615
21616     The precise convention for returning structures in memory depends
21617     on the target configuration macros.
21618
21619     Short structures and unions are those whose size and alignment
21620     match that of some integer type.
21621
21622     *Warning:* code compiled with the `-fpcc-struct-return' switch is
21623     not binary compatible with code compiled with the
21624     `-freg-struct-return' switch.  Use it to conform to a non-default
21625     application binary interface.
21626
21627`-freg-struct-return'
21628     Return `struct' and `union' values in registers when possible.
21629     This is more efficient for small structures than
21630     `-fpcc-struct-return'.
21631
21632     If you specify neither `-fpcc-struct-return' nor
21633     `-freg-struct-return', GCC defaults to whichever convention is
21634     standard for the target.  If there is no standard convention, GCC
21635     defaults to `-fpcc-struct-return', except on targets where GCC is
21636     the principal compiler.  In those cases, we can choose the
21637     standard, and we chose the more efficient register return
21638     alternative.
21639
21640     *Warning:* code compiled with the `-freg-struct-return' switch is
21641     not binary compatible with code compiled with the
21642     `-fpcc-struct-return' switch.  Use it to conform to a non-default
21643     application binary interface.
21644
21645`-fshort-enums'
21646     Allocate to an `enum' type only as many bytes as it needs for the
21647     declared range of possible values.  Specifically, the `enum' type
21648     is equivalent to the smallest integer type that has enough room.
21649
21650     *Warning:* the `-fshort-enums' switch causes GCC to generate code
21651     that is not binary compatible with code generated without that
21652     switch.  Use it to conform to a non-default application binary
21653     interface.
21654
21655`-fshort-double'
21656     Use the same size for `double' as for `float'.
21657
21658     *Warning:* the `-fshort-double' switch causes GCC to generate code
21659     that is not binary compatible with code generated without that
21660     switch.  Use it to conform to a non-default application binary
21661     interface.
21662
21663`-fshort-wchar'
21664     Override the underlying type for `wchar_t' to be `short unsigned
21665     int' instead of the default for the target.  This option is useful
21666     for building programs to run under WINE.
21667
21668     *Warning:* the `-fshort-wchar' switch causes GCC to generate code
21669     that is not binary compatible with code generated without that
21670     switch.  Use it to conform to a non-default application binary
21671     interface.
21672
21673`-fno-common'
21674     In C code, controls the placement of uninitialized global
21675     variables.  Unix C compilers have traditionally permitted multiple
21676     definitions of such variables in different compilation units by
21677     placing the variables in a common block.  This is the behavior
21678     specified by `-fcommon', and is the default for GCC on most
21679     targets.  On the other hand, this behavior is not required by ISO
21680     C, and on some targets may carry a speed or code size penalty on
21681     variable references.  The `-fno-common' option specifies that the
21682     compiler should place uninitialized global variables in the data
21683     section of the object file, rather than generating them as common
21684     blocks.  This has the effect that if the same variable is declared
21685     (without `extern') in two different compilations, you get a
21686     multiple-definition error when you link them.  In this case, you
21687     must compile with `-fcommon' instead.  Compiling with
21688     `-fno-common' is useful on targets for which it provides better
21689     performance, or if you wish to verify that the program will work
21690     on other systems that always treat uninitialized variable
21691     declarations this way.
21692
21693`-fno-ident'
21694     Ignore the `#ident' directive.
21695
21696`-finhibit-size-directive'
21697     Don't output a `.size' assembler directive, or anything else that
21698     would cause trouble if the function is split in the middle, and the
21699     two halves are placed at locations far apart in memory.  This
21700     option is used when compiling `crtstuff.c'; you should not need to
21701     use it for anything else.
21702
21703`-fverbose-asm'
21704     Put extra commentary information in the generated assembly code to
21705     make it more readable.  This option is generally only of use to
21706     those who actually need to read the generated assembly code
21707     (perhaps while debugging the compiler itself).
21708
21709     `-fno-verbose-asm', the default, causes the extra information to
21710     be omitted and is useful when comparing two assembler files.
21711
21712`-frecord-gcc-switches'
21713     This switch causes the command line used to invoke the compiler to
21714     be recorded into the object file that is being created.  This
21715     switch is only implemented on some targets and the exact format of
21716     the recording is target and binary file format dependent, but it
21717     usually takes the form of a section containing ASCII text.  This
21718     switch is related to the `-fverbose-asm' switch, but that switch
21719     only records information in the assembler output file as comments,
21720     so it never reaches the object file.  See also
21721     `-grecord-gcc-switches' for another way of storing compiler
21722     options into the object file.
21723
21724`-fpic'
21725     Generate position-independent code (PIC) suitable for use in a
21726     shared library, if supported for the target machine.  Such code
21727     accesses all constant addresses through a global offset table
21728     (GOT).  The dynamic loader resolves the GOT entries when the
21729     program starts (the dynamic loader is not part of GCC; it is part
21730     of the operating system).  If the GOT size for the linked
21731     executable exceeds a machine-specific maximum size, you get an
21732     error message from the linker indicating that `-fpic' does not
21733     work; in that case, recompile with `-fPIC' instead.  (These
21734     maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
21735     x86 has no such limit.)
21736
21737     Position-independent code requires special support, and therefore
21738     works only on certain machines.  For the x86, GCC supports PIC for
21739     System V but not for the Sun 386i.  Code generated for the IBM
21740     RS/6000 is always position-independent.
21741
21742     When this flag is set, the macros `__pic__' and `__PIC__' are
21743     defined to 1.
21744
21745`-fPIC'
21746     If supported for the target machine, emit position-independent
21747     code, suitable for dynamic linking and avoiding any limit on the
21748     size of the global offset table.  This option makes a difference
21749     on the m68k, PowerPC and SPARC.
21750
21751     Position-independent code requires special support, and therefore
21752     works only on certain machines.
21753
21754     When this flag is set, the macros `__pic__' and `__PIC__' are
21755     defined to 2.
21756
21757`-fpie'
21758`-fPIE'
21759     These options are similar to `-fpic' and `-fPIC', but generated
21760     position independent code can be only linked into executables.
21761     Usually these options are used when `-pie' GCC option is used
21762     during linking.
21763
21764     `-fpie' and `-fPIE' both define the macros `__pie__' and
21765     `__PIE__'.  The macros have the value 1 for `-fpie' and 2 for
21766     `-fPIE'.
21767
21768`-fno-jump-tables'
21769     Do not use jump tables for switch statements even where it would be
21770     more efficient than other code generation strategies.  This option
21771     is of use in conjunction with `-fpic' or `-fPIC' for building code
21772     that forms part of a dynamic linker and cannot reference the
21773     address of a jump table.  On some targets, jump tables do not
21774     require a GOT and this option is not needed.
21775
21776`-ffixed-REG'
21777     Treat the register named REG as a fixed register; generated code
21778     should never refer to it (except perhaps as a stack pointer, frame
21779     pointer or in some other fixed role).
21780
21781     REG must be the name of a register.  The register names accepted
21782     are machine-specific and are defined in the `REGISTER_NAMES' macro
21783     in the machine description macro file.
21784
21785     This flag does not have a negative form, because it specifies a
21786     three-way choice.
21787
21788`-fcall-used-REG'
21789     Treat the register named REG as an allocable register that is
21790     clobbered by function calls.  It may be allocated for temporaries
21791     or variables that do not live across a call.  Functions compiled
21792     this way do not save and restore the register REG.
21793
21794     It is an error to use this flag with the frame pointer or stack
21795     pointer.  Use of this flag for other registers that have fixed
21796     pervasive roles in the machine's execution model produces
21797     disastrous results.
21798
21799     This flag does not have a negative form, because it specifies a
21800     three-way choice.
21801
21802`-fcall-saved-REG'
21803     Treat the register named REG as an allocable register saved by
21804     functions.  It may be allocated even for temporaries or variables
21805     that live across a call.  Functions compiled this way save and
21806     restore the register REG if they use it.
21807
21808     It is an error to use this flag with the frame pointer or stack
21809     pointer.  Use of this flag for other registers that have fixed
21810     pervasive roles in the machine's execution model produces
21811     disastrous results.
21812
21813     A different sort of disaster results from the use of this flag for
21814     a register in which function values may be returned.
21815
21816     This flag does not have a negative form, because it specifies a
21817     three-way choice.
21818
21819`-fpack-struct[=N]'
21820     Without a value specified, pack all structure members together
21821     without holes.  When a value is specified (which must be a small
21822     power of two), pack structure members according to this value,
21823     representing the maximum alignment (that is, objects with default
21824     alignment requirements larger than this are output potentially
21825     unaligned at the next fitting location.
21826
21827     *Warning:* the `-fpack-struct' switch causes GCC to generate code
21828     that is not binary compatible with code generated without that
21829     switch.  Additionally, it makes the code suboptimal.  Use it to
21830     conform to a non-default application binary interface.
21831
21832`-finstrument-functions'
21833     Generate instrumentation calls for entry and exit to functions.
21834     Just after function entry and just before function exit, the
21835     following profiling functions are called with the address of the
21836     current function and its call site.  (On some platforms,
21837     `__builtin_return_address' does not work beyond the current
21838     function, so the call site information may not be available to the
21839     profiling functions otherwise.)
21840
21841          void __cyg_profile_func_enter (void *this_fn,
21842                                         void *call_site);
21843          void __cyg_profile_func_exit  (void *this_fn,
21844                                         void *call_site);
21845
21846     The first argument is the address of the start of the current
21847     function, which may be looked up exactly in the symbol table.
21848
21849     This instrumentation is also done for functions expanded inline in
21850     other functions.  The profiling calls indicate where,
21851     conceptually, the inline function is entered and exited.  This
21852     means that addressable versions of such functions must be
21853     available.  If all your uses of a function are expanded inline,
21854     this may mean an additional expansion of code size.  If you use
21855     `extern inline' in your C code, an addressable version of such
21856     functions must be provided.  (This is normally the case anyway,
21857     but if you get lucky and the optimizer always expands the
21858     functions inline, you might have gotten away without providing
21859     static copies.)
21860
21861     A function may be given the attribute `no_instrument_function', in
21862     which case this instrumentation is not done.  This can be used, for
21863     example, for the profiling functions listed above, high-priority
21864     interrupt routines, and any functions from which the profiling
21865     functions cannot safely be called (perhaps signal handlers, if the
21866     profiling routines generate output or allocate memory).
21867
21868`-finstrument-functions-exclude-file-list=FILE,FILE,...'
21869     Set the list of functions that are excluded from instrumentation
21870     (see the description of `-finstrument-functions').  If the file
21871     that contains a function definition matches with one of FILE, then
21872     that function is not instrumented.  The match is done on
21873     substrings: if the FILE parameter is a substring of the file name,
21874     it is considered to be a match.
21875
21876     For example:
21877
21878          -finstrument-functions-exclude-file-list=/bits/stl,include/sys
21879
21880     excludes any inline function defined in files whose pathnames
21881     contain `/bits/stl' or `include/sys'.
21882
21883     If, for some reason, you want to include letter `,' in one of SYM,
21884     write `\,'. For example,
21885     `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
21886     single quote surrounding the option).
21887
21888`-finstrument-functions-exclude-function-list=SYM,SYM,...'
21889     This is similar to `-finstrument-functions-exclude-file-list', but
21890     this option sets the list of function names to be excluded from
21891     instrumentation.  The function name to be matched is its
21892     user-visible name, such as `vector<int> blah(const vector<int>
21893     &)', not the internal mangled name (e.g.,
21894     `_Z4blahRSt6vectorIiSaIiEE').  The match is done on substrings: if
21895     the SYM parameter is a substring of the function name, it is
21896     considered to be a match.  For C99 and C++ extended identifiers,
21897     the function name must be given in UTF-8, not using universal
21898     character names.
21899
21900`-fstack-check'
21901     Generate code to verify that you do not go beyond the boundary of
21902     the stack.  You should specify this flag if you are running in an
21903     environment with multiple threads, but you only rarely need to
21904     specify it in a single-threaded environment since stack overflow
21905     is automatically detected on nearly all systems if there is only
21906     one stack.
21907
21908     Note that this switch does not actually cause checking to be done;
21909     the operating system or the language runtime must do that.  The
21910     switch causes generation of code to ensure that they see the stack
21911     being extended.
21912
21913     You can additionally specify a string parameter: `no' means no
21914     checking, `generic' means force the use of old-style checking,
21915     `specific' means use the best checking method and is equivalent to
21916     bare `-fstack-check'.
21917
21918     Old-style checking is a generic mechanism that requires no specific
21919     target support in the compiler but comes with the following
21920     drawbacks:
21921
21922       1. Modified allocation strategy for large objects: they are
21923          always allocated dynamically if their size exceeds a fixed
21924          threshold.
21925
21926       2. Fixed limit on the size of the static frame of functions:
21927          when it is topped by a particular function, stack checking is
21928          not reliable and a warning is issued by the compiler.
21929
21930       3. Inefficiency: because of both the modified allocation
21931          strategy and the generic implementation, code performance is
21932          hampered.
21933
21934     Note that old-style stack checking is also the fallback method for
21935     `specific' if no target support has been added in the compiler.
21936
21937`-fstack-limit-register=REG'
21938`-fstack-limit-symbol=SYM'
21939`-fno-stack-limit'
21940     Generate code to ensure that the stack does not grow beyond a
21941     certain value, either the value of a register or the address of a
21942     symbol.  If a larger stack is required, a signal is raised at run
21943     time.  For most targets, the signal is raised before the stack
21944     overruns the boundary, so it is possible to catch the signal
21945     without taking special precautions.
21946
21947     For instance, if the stack starts at absolute address `0x80000000'
21948     and grows downwards, you can use the flags
21949     `-fstack-limit-symbol=__stack_limit' and
21950     `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit
21951     of 128KB.  Note that this may only work with the GNU linker.
21952
21953`-fsplit-stack'
21954     Generate code to automatically split the stack before it overflows.
21955     The resulting program has a discontiguous stack which can only
21956     overflow if the program is unable to allocate any more memory.
21957     This is most useful when running threaded programs, as it is no
21958     longer necessary to calculate a good stack size to use for each
21959     thread.  This is currently only implemented for the x86 targets
21960     running GNU/Linux.
21961
21962     When code compiled with `-fsplit-stack' calls code compiled
21963     without `-fsplit-stack', there may not be much stack space
21964     available for the latter code to run.  If compiling all code,
21965     including library code, with `-fsplit-stack' is not an option,
21966     then the linker can fix up these calls so that the code compiled
21967     without `-fsplit-stack' always has a large stack.  Support for
21968     this is implemented in the gold linker in GNU binutils release 2.21
21969     and later.
21970
21971`-fleading-underscore'
21972     This option and its counterpart, `-fno-leading-underscore',
21973     forcibly change the way C symbols are represented in the object
21974     file.  One use is to help link with legacy assembly code.
21975
21976     *Warning:* the `-fleading-underscore' switch causes GCC to
21977     generate code that is not binary compatible with code generated
21978     without that switch.  Use it to conform to a non-default
21979     application binary interface.  Not all targets provide complete
21980     support for this switch.
21981
21982`-ftls-model=MODEL'
21983     Alter the thread-local storage model to be used (*note
21984     Thread-Local::).  The MODEL argument should be one of
21985     `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'.
21986     Note that the choice is subject to optimization: the compiler may
21987     use a more efficient model for symbols not visible outside of the
21988     translation unit, or if `-fpic' is not given on the command line.
21989
21990     The default without `-fpic' is `initial-exec'; with `-fpic' the
21991     default is `global-dynamic'.
21992
21993`-fvisibility=[default|internal|hidden|protected]'
21994     Set the default ELF image symbol visibility to the specified
21995     option--all symbols are marked with this unless overridden within
21996     the code.  Using this feature can very substantially improve
21997     linking and load times of shared object libraries, produce more
21998     optimized code, provide near-perfect API export and prevent symbol
21999     clashes.  It is *strongly* recommended that you use this in any
22000     shared objects you distribute.
22001
22002     Despite the nomenclature, `default' always means public; i.e.,
22003     available to be linked against from outside the shared object.
22004     `protected' and `internal' are pretty useless in real-world usage
22005     so the only other commonly used option is `hidden'.  The default
22006     if `-fvisibility' isn't specified is `default', i.e., make every
22007     symbol public.
22008
22009     A good explanation of the benefits offered by ensuring ELF symbols
22010     have the correct visibility is given by "How To Write Shared
22011     Libraries" by Ulrich Drepper (which can be found at
22012     `http://www.akkadia.org/drepper/')--however a superior solution
22013     made possible by this option to marking things hidden when the
22014     default is public is to make the default hidden and mark things
22015     public.  This is the norm with DLLs on Windows and with
22016     `-fvisibility=hidden' and `__attribute__
22017     ((visibility("default")))' instead of `__declspec(dllexport)' you
22018     get almost identical semantics with identical syntax.  This is a
22019     great boon to those working with cross-platform projects.
22020
22021     For those adding visibility support to existing code, you may find
22022     `#pragma GCC visibility' of use.  This works by you enclosing the
22023     declarations you wish to set visibility for with (for example)
22024     `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility
22025     pop'.  Bear in mind that symbol visibility should be viewed *as
22026     part of the API interface contract* and thus all new code should
22027     always specify visibility when it is not the default; i.e.,
22028     declarations only for use within the local DSO should *always* be
22029     marked explicitly as hidden as so to avoid PLT indirection
22030     overheads--making this abundantly clear also aids readability and
22031     self-documentation of the code.  Note that due to ISO C++
22032     specification requirements, `operator new' and `operator delete'
22033     must always be of default visibility.
22034
22035     Be aware that headers from outside your project, in particular
22036     system headers and headers from any other library you use, may not
22037     be expecting to be compiled with visibility other than the
22038     default.  You may need to explicitly say `#pragma GCC visibility
22039     push(default)' before including any such headers.
22040
22041     `extern' declarations are not affected by `-fvisibility', so a lot
22042     of code can be recompiled with `-fvisibility=hidden' with no
22043     modifications.  However, this means that calls to `extern'
22044     functions with no explicit visibility use the PLT, so it is more
22045     effective to use `__attribute ((visibility))' and/or `#pragma GCC
22046     visibility' to tell the compiler which `extern' declarations
22047     should be treated as hidden.
22048
22049     Note that `-fvisibility' does affect C++ vague linkage entities.
22050     This means that, for instance, an exception class that is be
22051     thrown between DSOs must be explicitly marked with default
22052     visibility so that the `type_info' nodes are unified between the
22053     DSOs.
22054
22055     An overview of these techniques, their benefits and how to use them
22056     is at `http://gcc.gnu.org/wiki/Visibility'.
22057
22058`-fstrict-volatile-bitfields'
22059     This option should be used if accesses to volatile bit-fields (or
22060     other structure fields, although the compiler usually honors those
22061     types anyway) should use a single access of the width of the
22062     field's type, aligned to a natural alignment if possible.  For
22063     example, targets with memory-mapped peripheral registers might
22064     require all such accesses to be 16 bits wide; with this flag you
22065     can declare all peripheral bit-fields as `unsigned short'
22066     (assuming short is 16 bits on these targets) to force GCC to use
22067     16-bit accesses instead of, perhaps, a more efficient 32-bit
22068     access.
22069
22070     If this option is disabled, the compiler uses the most efficient
22071     instruction.  In the previous example, that might be a 32-bit load
22072     instruction, even though that accesses bytes that do not contain
22073     any portion of the bit-field, or memory-mapped registers unrelated
22074     to the one being updated.
22075
22076     In some cases, such as when the `packed' attribute is applied to a
22077     structure field, it may not be possible to access the field with a
22078     single read or write that is correctly aligned for the target
22079     machine.  In this case GCC falls back to generating multiple
22080     accesses rather than code that will fault or truncate the result
22081     at run time.
22082
22083     Note:  Due to restrictions of the C/C++11 memory model, write
22084     accesses are not allowed to touch non bit-field members.  It is
22085     therefore recommended to define all bits of the field's type as
22086     bit-field members.
22087
22088     The default value of this option is determined by the application
22089     binary interface for the target processor.
22090
22091`-fsync-libcalls'
22092     This option controls whether any out-of-line instance of the
22093     `__sync' family of functions may be used to implement the C++11
22094     `__atomic' family of functions.
22095
22096     The default value of this option is enabled, thus the only useful
22097     form of the option is `-fno-sync-libcalls'.  This option is used in
22098     the implementation of the `libatomic' runtime library.
22099
22100
22101
22102File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC
22103
221043.19 Environment Variables Affecting GCC
22105========================================
22106
22107This section describes several environment variables that affect how GCC
22108operates.  Some of them work by specifying directories or prefixes to
22109use when searching for various kinds of files.  Some are used to
22110specify other aspects of the compilation environment.
22111
22112 Note that you can also specify places to search using options such as
22113`-B', `-I' and `-L' (*note Directory Options::).  These take precedence
22114over places specified using environment variables, which in turn take
22115precedence over those specified by the configuration of GCC.  *Note
22116Controlling the Compilation Driver `gcc': (gccint)Driver.
22117
22118`LANG'
22119`LC_CTYPE'
22120`LC_MESSAGES'
22121`LC_ALL'
22122     These environment variables control the way that GCC uses
22123     localization information which allows GCC to work with different
22124     national conventions.  GCC inspects the locale categories
22125     `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so.
22126     These locale categories can be set to any value supported by your
22127     installation.  A typical value is `en_GB.UTF-8' for English in the
22128     United Kingdom encoded in UTF-8.
22129
22130     The `LC_CTYPE' environment variable specifies character
22131     classification.  GCC uses it to determine the character boundaries
22132     in a string; this is needed for some multibyte encodings that
22133     contain quote and escape characters that are otherwise interpreted
22134     as a string end or escape.
22135
22136     The `LC_MESSAGES' environment variable specifies the language to
22137     use in diagnostic messages.
22138
22139     If the `LC_ALL' environment variable is set, it overrides the value
22140     of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and
22141     `LC_MESSAGES' default to the value of the `LANG' environment
22142     variable.  If none of these variables are set, GCC defaults to
22143     traditional C English behavior.
22144
22145`TMPDIR'
22146     If `TMPDIR' is set, it specifies the directory to use for temporary
22147     files.  GCC uses temporary files to hold the output of one stage of
22148     compilation which is to be used as input to the next stage: for
22149     example, the output of the preprocessor, which is the input to the
22150     compiler proper.
22151
22152`GCC_COMPARE_DEBUG'
22153     Setting `GCC_COMPARE_DEBUG' is nearly equivalent to passing
22154     `-fcompare-debug' to the compiler driver.  See the documentation
22155     of this option for more details.
22156
22157`GCC_EXEC_PREFIX'
22158     If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
22159     names of the subprograms executed by the compiler.  No slash is
22160     added when this prefix is combined with the name of a subprogram,
22161     but you can specify a prefix that ends with a slash if you wish.
22162
22163     If `GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an
22164     appropriate prefix to use based on the pathname it is invoked with.
22165
22166     If GCC cannot find the subprogram using the specified prefix, it
22167     tries looking in the usual places for the subprogram.
22168
22169     The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where
22170     PREFIX is the prefix to the installed compiler. In many cases
22171     PREFIX is the value of `prefix' when you ran the `configure'
22172     script.
22173
22174     Other prefixes specified with `-B' take precedence over this
22175     prefix.
22176
22177     This prefix is also used for finding files such as `crt0.o' that
22178     are used for linking.
22179
22180     In addition, the prefix is used in an unusual way in finding the
22181     directories to search for header files.  For each of the standard
22182     directories whose name normally begins with `/usr/local/lib/gcc'
22183     (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries
22184     replacing that beginning with the specified prefix to produce an
22185     alternate directory name.  Thus, with `-Bfoo/', GCC searches
22186     `foo/bar' just before it searches the standard directory
22187     `/usr/local/lib/bar'.  If a standard directory begins with the
22188     configured PREFIX then the value of PREFIX is replaced by
22189     `GCC_EXEC_PREFIX' when looking for header files.
22190
22191`COMPILER_PATH'
22192     The value of `COMPILER_PATH' is a colon-separated list of
22193     directories, much like `PATH'.  GCC tries the directories thus
22194     specified when searching for subprograms, if it can't find the
22195     subprograms using `GCC_EXEC_PREFIX'.
22196
22197`LIBRARY_PATH'
22198     The value of `LIBRARY_PATH' is a colon-separated list of
22199     directories, much like `PATH'.  When configured as a native
22200     compiler, GCC tries the directories thus specified when searching
22201     for special linker files, if it can't find them using
22202     `GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
22203     when searching for ordinary libraries for the `-l' option (but
22204     directories specified with `-L' come first).
22205
22206`LANG'
22207     This variable is used to pass locale information to the compiler.
22208     One way in which this information is used is to determine the
22209     character set to be used when character literals, string literals
22210     and comments are parsed in C and C++.  When the compiler is
22211     configured to allow multibyte characters, the following values for
22212     `LANG' are recognized:
22213
22214    `C-JIS'
22215          Recognize JIS characters.
22216
22217    `C-SJIS'
22218          Recognize SJIS characters.
22219
22220    `C-EUCJP'
22221          Recognize EUCJP characters.
22222
22223     If `LANG' is not defined, or if it has some other value, then the
22224     compiler uses `mblen' and `mbtowc' as defined by the default
22225     locale to recognize and translate multibyte characters.
22226
22227Some additional environment variables affect the behavior of the
22228preprocessor.
22229
22230`CPATH'
22231`C_INCLUDE_PATH'
22232`CPLUS_INCLUDE_PATH'
22233`OBJC_INCLUDE_PATH'
22234     Each variable's value is a list of directories separated by a
22235     special character, much like `PATH', in which to look for header
22236     files.  The special character, `PATH_SEPARATOR', is
22237     target-dependent and determined at GCC build time.  For Microsoft
22238     Windows-based targets it is a semicolon, and for almost all other
22239     targets it is a colon.
22240
22241     `CPATH' specifies a list of directories to be searched as if
22242     specified with `-I', but after any paths given with `-I' options
22243     on the command line.  This environment variable is used regardless
22244     of which language is being preprocessed.
22245
22246     The remaining environment variables apply only when preprocessing
22247     the particular language indicated.  Each specifies a list of
22248     directories to be searched as if specified with `-isystem', but
22249     after any paths given with `-isystem' options on the command line.
22250
22251     In all these variables, an empty element instructs the compiler to
22252     search its current working directory.  Empty elements can appear
22253     at the beginning or end of a path.  For instance, if the value of
22254     `CPATH' is `:/special/include', that has the same effect as
22255     `-I. -I/special/include'.
22256
22257`DEPENDENCIES_OUTPUT'
22258     If this variable is set, its value specifies how to output
22259     dependencies for Make based on the non-system header files
22260     processed by the compiler.  System header files are ignored in the
22261     dependency output.
22262
22263     The value of `DEPENDENCIES_OUTPUT' can be just a file name, in
22264     which case the Make rules are written to that file, guessing the
22265     target name from the source file name.  Or the value can have the
22266     form `FILE TARGET', in which case the rules are written to file
22267     FILE using TARGET as the target name.
22268
22269     In other words, this environment variable is equivalent to
22270     combining the options `-MM' and `-MF' (*note Preprocessor
22271     Options::), with an optional `-MT' switch too.
22272
22273`SUNPRO_DEPENDENCIES'
22274     This variable is the same as `DEPENDENCIES_OUTPUT' (see above),
22275     except that system header files are not ignored, so it implies
22276     `-M' rather than `-MM'.  However, the dependence on the main input
22277     file is omitted.  *Note Preprocessor Options::.
22278
22279
22280File: gcc.info,  Node: Precompiled Headers,  Prev: Environment Variables,  Up: Invoking GCC
22281
222823.20 Using Precompiled Headers
22283==============================
22284
22285Often large projects have many header files that are included in every
22286source file.  The time the compiler takes to process these header files
22287over and over again can account for nearly all of the time required to
22288build the project.  To make builds faster, GCC allows you to
22289"precompile" a header file.
22290
22291 To create a precompiled header file, simply compile it as you would any
22292other file, if necessary using the `-x' option to make the driver treat
22293it as a C or C++ header file.  You may want to use a tool like `make'
22294to keep the precompiled header up-to-date when the headers it contains
22295change.
22296
22297 A precompiled header file is searched for when `#include' is seen in
22298the compilation.  As it searches for the included file (*note Search
22299Path: (cpp)Search Path.) the compiler looks for a precompiled header in
22300each directory just before it looks for the include file in that
22301directory.  The name searched for is the name specified in the
22302`#include' with `.gch' appended.  If the precompiled header file can't
22303be used, it is ignored.
22304
22305 For instance, if you have `#include "all.h"', and you have `all.h.gch'
22306in the same directory as `all.h', then the precompiled header file is
22307used if possible, and the original header is used otherwise.
22308
22309 Alternatively, you might decide to put the precompiled header file in a
22310directory and use `-I' to ensure that directory is searched before (or
22311instead of) the directory containing the original header.  Then, if you
22312want to check that the precompiled header file is always used, you can
22313put a file of the same name as the original header in this directory
22314containing an `#error' command.
22315
22316 This also works with `-include'.  So yet another way to use
22317precompiled headers, good for projects not designed with precompiled
22318header files in mind, is to simply take most of the header files used by
22319a project, include them from another header file, precompile that header
22320file, and `-include' the precompiled header.  If the header files have
22321guards against multiple inclusion, they are skipped because they've
22322already been included (in the precompiled header).
22323
22324 If you need to precompile the same header file for different
22325languages, targets, or compiler options, you can instead make a
22326_directory_ named like `all.h.gch', and put each precompiled header in
22327the directory, perhaps using `-o'.  It doesn't matter what you call the
22328files in the directory; every precompiled header in the directory is
22329considered.  The first precompiled header encountered in the directory
22330that is valid for this compilation is used; they're searched in no
22331particular order.
22332
22333 There are many other possibilities, limited only by your imagination,
22334good sense, and the constraints of your build system.
22335
22336 A precompiled header file can be used only when these conditions apply:
22337
22338   * Only one precompiled header can be used in a particular
22339     compilation.
22340
22341   * A precompiled header can't be used once the first C token is seen.
22342     You can have preprocessor directives before a precompiled header;
22343     you cannot include a precompiled header from inside another header.
22344
22345   * The precompiled header file must be produced for the same language
22346     as the current compilation.  You can't use a C precompiled header
22347     for a C++ compilation.
22348
22349   * The precompiled header file must have been produced by the same
22350     compiler binary as the current compilation is using.
22351
22352   * Any macros defined before the precompiled header is included must
22353     either be defined in the same way as when the precompiled header
22354     was generated, or must not affect the precompiled header, which
22355     usually means that they don't appear in the precompiled header at
22356     all.
22357
22358     The `-D' option is one way to define a macro before a precompiled
22359     header is included; using a `#define' can also do it.  There are
22360     also some options that define macros implicitly, like `-O' and
22361     `-Wdeprecated'; the same rule applies to macros defined this way.
22362
22363   * If debugging information is output when using the precompiled
22364     header, using `-g' or similar, the same kind of debugging
22365     information must have been output when building the precompiled
22366     header.  However, a precompiled header built using `-g' can be
22367     used in a compilation when no debugging information is being
22368     output.
22369
22370   * The same `-m' options must generally be used when building and
22371     using the precompiled header.  *Note Submodel Options::, for any
22372     cases where this rule is relaxed.
22373
22374   * Each of the following options must be the same when building and
22375     using the precompiled header:
22376
22377          -fexceptions
22378
22379   * Some other command-line options starting with `-f', `-p', or `-O'
22380     must be defined in the same way as when the precompiled header was
22381     generated.  At present, it's not clear which options are safe to
22382     change and which are not; the safest choice is to use exactly the
22383     same options when generating and using the precompiled header.
22384     The following are known to be safe:
22385
22386          -fmessage-length=  -fpreprocessed  -fsched-interblock
22387          -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
22388          -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
22389          -pedantic-errors
22390
22391
22392 For all of these except the last, the compiler automatically ignores
22393the precompiled header if the conditions aren't met.  If you find an
22394option combination that doesn't work and doesn't cause the precompiled
22395header to be ignored, please consider filing a bug report, see *note
22396Bugs::.
22397
22398 If you do use differing options when generating and using the
22399precompiled header, the actual behavior is a mixture of the behavior
22400for the options.  For instance, if you use `-g' to generate the
22401precompiled header but not when using it, you may or may not get
22402debugging information for routines in the precompiled header.
22403
22404
22405File: gcc.info,  Node: C Implementation,  Next: C++ Implementation,  Prev: Invoking GCC,  Up: Top
22406
224074 C Implementation-Defined Behavior
22408***********************************
22409
22410A conforming implementation of ISO C is required to document its choice
22411of behavior in each of the areas that are designated "implementation
22412defined".  The following lists all such areas, along with the section
22413numbers from the ISO/IEC 9899:1990, ISO/IEC 9899:1999 and ISO/IEC
224149899:2011 standards.  Some areas are only implementation-defined in one
22415version of the standard.
22416
22417 Some choices depend on the externally determined ABI for the platform
22418(including standard character encodings) which GCC follows; these are
22419listed as "determined by ABI" below.  *Note Binary Compatibility:
22420Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
22421are documented in the preprocessor manual.  *Note
22422Implementation-defined behavior: (cpp)Implementation-defined behavior.
22423Some choices are made by the library and operating system (or other
22424environment when compiling for a freestanding environment); refer to
22425their documentation for details.
22426
22427* Menu:
22428
22429* Translation implementation::
22430* Environment implementation::
22431* Identifiers implementation::
22432* Characters implementation::
22433* Integers implementation::
22434* Floating point implementation::
22435* Arrays and pointers implementation::
22436* Hints implementation::
22437* Structures unions enumerations and bit-fields implementation::
22438* Qualifiers implementation::
22439* Declarators implementation::
22440* Statements implementation::
22441* Preprocessing directives implementation::
22442* Library functions implementation::
22443* Architecture implementation::
22444* Locale-specific behavior implementation::
22445
22446
22447File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
22448
224494.1 Translation
22450===============
22451
22452   * `How a diagnostic is identified (C90 3.7, C99 and C11 3.10, C90,
22453     C99 and C11 5.1.1.3).'
22454
22455     Diagnostics consist of all the output sent to stderr by GCC.
22456
22457   * `Whether each nonempty sequence of white-space characters other
22458     than new-line is retained or replaced by one space character in
22459     translation phase 3 (C90, C99 and C11 5.1.1.2).'
22460
22461     *Note Implementation-defined behavior: (cpp)Implementation-defined
22462     behavior.
22463
22464
22465
22466File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
22467
224684.2 Environment
22469===============
22470
22471The behavior of most of these points are dependent on the implementation
22472of the C library, and are not defined by GCC itself.
22473
22474   * `The mapping between physical source file multibyte characters and
22475     the source character set in translation phase 1 (C90, C99 and C11
22476     5.1.1.2).'
22477
22478     *Note Implementation-defined behavior: (cpp)Implementation-defined
22479     behavior.
22480
22481
22482
22483File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
22484
224854.3 Identifiers
22486===============
22487
22488   * `Which additional multibyte characters may appear in identifiers
22489     and their correspondence to universal character names (C99 and C11
22490     6.4.2).'
22491
22492     *Note Implementation-defined behavior: (cpp)Implementation-defined
22493     behavior.
22494
22495   * `The number of significant initial characters in an identifier
22496     (C90 6.1.2, C90, C99 and C11 5.2.4.1, C99 and C11 6.4.2).'
22497
22498     For internal names, all characters are significant.  For external
22499     names, the number of significant characters are defined by the
22500     linker; for almost all targets, all characters are significant.
22501
22502   * `Whether case distinctions are significant in an identifier with
22503     external linkage (C90 6.1.2).'
22504
22505     This is a property of the linker.  C99 and C11 require that case
22506     distinctions are always significant in identifiers with external
22507     linkage and systems without this property are not supported by GCC.
22508
22509
22510
22511File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
22512
225134.4 Characters
22514==============
22515
22516   * `The number of bits in a byte (C90 3.4, C99 and C11 3.6).'
22517
22518     Determined by ABI.
22519
22520   * `The values of the members of the execution character set (C90,
22521     C99 and C11 5.2.1).'
22522
22523     Determined by ABI.
22524
22525   * `The unique value of the member of the execution character set
22526     produced for each of the standard alphabetic escape sequences
22527     (C90, C99 and C11 5.2.2).'
22528
22529     Determined by ABI.
22530
22531   * `The value of a `char' object into which has been stored any
22532     character other than a member of the basic execution character set
22533     (C90 6.1.2.5, C99 and C11 6.2.5).'
22534
22535     Determined by ABI.
22536
22537   * `Which of `signed char' or `unsigned char' has the same range,
22538     representation, and behavior as "plain" `char' (C90 6.1.2.5, C90
22539     6.2.1.1, C99 and C11 6.2.5, C99 and C11 6.3.1.1).'
22540
22541     Determined by ABI.  The options `-funsigned-char' and
22542     `-fsigned-char' change the default.  *Note Options Controlling C
22543     Dialect: C Dialect Options.
22544
22545   * `The mapping of members of the source character set (in character
22546     constants and string literals) to members of the execution
22547     character set (C90 6.1.3.4, C99 and C11 6.4.4.4, C90, C99 and C11
22548     5.1.1.2).'
22549
22550     Determined by ABI.
22551
22552   * `The value of an integer character constant containing more than
22553     one character or containing a character or escape sequence that
22554     does not map to a single-byte execution character (C90 6.1.3.4,
22555     C99 and C11 6.4.4.4).'
22556
22557     *Note Implementation-defined behavior: (cpp)Implementation-defined
22558     behavior.
22559
22560   * `The value of a wide character constant containing more than one
22561     multibyte character or a single multibyte character that maps to
22562     multiple members of the extended execution character set, or
22563     containing a multibyte character or escape sequence not
22564     represented in the extended execution character set (C90 6.1.3.4,
22565     C99 and C11 6.4.4.4).'
22566
22567     *Note Implementation-defined behavior: (cpp)Implementation-defined
22568     behavior.
22569
22570   * `The current locale used to convert a wide character constant
22571     consisting of a single multibyte character that maps to a member
22572     of the extended execution character set into a corresponding wide
22573     character code (C90 6.1.3.4, C99 and C11 6.4.4.4).'
22574
22575     *Note Implementation-defined behavior: (cpp)Implementation-defined
22576     behavior.
22577
22578   * `Whether differently-prefixed wide string literal tokens can be
22579     concatenated and, if so, the treatment of the resulting multibyte
22580     character sequence (C11 6.4.5).'
22581
22582     Such tokens may not be concatenated.
22583
22584   * `The current locale used to convert a wide string literal into
22585     corresponding wide character codes (C90 6.1.4, C99 and C11 6.4.5).'
22586
22587     *Note Implementation-defined behavior: (cpp)Implementation-defined
22588     behavior.
22589
22590   * `The value of a string literal containing a multibyte character or
22591     escape sequence not represented in the execution character set
22592     (C90 6.1.4, C99 and C11 6.4.5).'
22593
22594     *Note Implementation-defined behavior: (cpp)Implementation-defined
22595     behavior.
22596
22597   * `The encoding of any of `wchar_t', `char16_t', and `char32_t'
22598     where the corresponding standard encoding macro
22599     (`__STDC_ISO_10646__', `__STDC_UTF_16__', or `__STDC_UTF_32__') is
22600     not defined (C11 6.10.8.2).'
22601
22602     *Note Implementation-defined behavior: (cpp)Implementation-defined
22603     behavior.  `char16_t' and `char32_t' literals are always encoded
22604     in UTF-16 and UTF-32 respectively.
22605
22606
22607
22608File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
22609
226104.5 Integers
22611============
22612
22613   * `Any extended integer types that exist in the implementation (C99
22614     and C11 6.2.5).'
22615
22616     GCC does not support any extended integer types.
22617
22618   * `Whether signed integer types are represented using sign and
22619     magnitude, two's complement, or one's complement, and whether the
22620     extraordinary value is a trap representation or an ordinary value
22621     (C99 and C11 6.2.6.2).'
22622
22623     GCC supports only two's complement integer types, and all bit
22624     patterns are ordinary values.
22625
22626   * `The rank of any extended integer type relative to another extended
22627     integer type with the same precision (C99 and C11 6.3.1.1).'
22628
22629     GCC does not support any extended integer types.
22630
22631   * `The result of, or the signal raised by, converting an integer to a
22632     signed integer type when the value cannot be represented in an
22633     object of that type (C90 6.2.1.2, C99 and C11 6.3.1.3).'
22634
22635     For conversion to a type of width N, the value is reduced modulo
22636     2^N to be within range of the type; no signal is raised.
22637
22638   * `The results of some bitwise operations on signed integers (C90
22639     6.3, C99 and C11 6.5).'
22640
22641     Bitwise operators act on the representation of the value including
22642     both the sign and value bits, where the sign bit is considered
22643     immediately above the highest-value value bit.  Signed `>>' acts
22644     on negative numbers by sign extension.
22645
22646     GCC does not use the latitude given in C99 and C11 only to treat
22647     certain aspects of signed `<<' as undefined, but this is subject to
22648     change.
22649
22650   * `The sign of the remainder on integer division (C90 6.3.5).'
22651
22652     GCC always follows the C99 and C11 requirement that the result of
22653     division is truncated towards zero.
22654
22655
22656
22657File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
22658
226594.6 Floating Point
22660==================
22661
22662   * `The accuracy of the floating-point operations and of the library
22663     functions in `<math.h>' and `<complex.h>' that return
22664     floating-point results (C90, C99 and C11 5.2.4.2.2).'
22665
22666     The accuracy is unknown.
22667
22668   * `The rounding behaviors characterized by non-standard values of
22669     `FLT_ROUNDS'  (C90, C99 and C11 5.2.4.2.2).'
22670
22671     GCC does not use such values.
22672
22673   * `The evaluation methods characterized by non-standard negative
22674     values of `FLT_EVAL_METHOD' (C99 and C11 5.2.4.2.2).'
22675
22676     GCC does not use such values.
22677
22678   * `The direction of rounding when an integer is converted to a
22679     floating-point number that cannot exactly represent the original
22680     value (C90 6.2.1.3, C99 and C11 6.3.1.4).'
22681
22682     C99 Annex F is followed.
22683
22684   * `The direction of rounding when a floating-point number is
22685     converted to a narrower floating-point number (C90 6.2.1.4, C99
22686     and C11 6.3.1.5).'
22687
22688     C99 Annex F is followed.
22689
22690   * `How the nearest representable value or the larger or smaller
22691     representable value immediately adjacent to the nearest
22692     representable value is chosen for certain floating constants (C90
22693     6.1.3.1, C99 and C11 6.4.4.2).'
22694
22695     C99 Annex F is followed.
22696
22697   * `Whether and how floating expressions are contracted when not
22698     disallowed by the `FP_CONTRACT' pragma (C99 and C11 6.5).'
22699
22700     Expressions are currently only contracted if `-ffp-contract=fast',
22701     `-funsafe-math-optimizations' or `-ffast-math' are used.  This is
22702     subject to change.
22703
22704   * `The default state for the `FENV_ACCESS' pragma (C99 and C11
22705     7.6.1).'
22706
22707     This pragma is not implemented, but the default is to "off" unless
22708     `-frounding-math' is used in which case it is "on".
22709
22710   * `Additional floating-point exceptions, rounding modes,
22711     environments, and classifications, and their macro names (C99 and
22712     C11 7.6, C99 and C11 7.12).'
22713
22714     This is dependent on the implementation of the C library, and is
22715     not defined by GCC itself.
22716
22717   * `The default state for the `FP_CONTRACT' pragma (C99 and C11
22718     7.12.2).'
22719
22720     This pragma is not implemented.  Expressions are currently only
22721     contracted if `-ffp-contract=fast', `-funsafe-math-optimizations'
22722     or `-ffast-math' are used.  This is subject to change.
22723
22724   * `Whether the "inexact" floating-point exception can be raised when
22725     the rounded result actually does equal the mathematical result in
22726     an IEC 60559 conformant implementation (C99 F.9).'
22727
22728     This is dependent on the implementation of the C library, and is
22729     not defined by GCC itself.
22730
22731   * `Whether the "underflow" (and "inexact") floating-point exception
22732     can be raised when a result is tiny but not inexact in an IEC
22733     60559 conformant implementation (C99 F.9).'
22734
22735     This is dependent on the implementation of the C library, and is
22736     not defined by GCC itself.
22737
22738
22739
22740File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
22741
227424.7 Arrays and Pointers
22743=======================
22744
22745   * `The result of converting a pointer to an integer or vice versa
22746     (C90 6.3.4, C99 and C11 6.3.2.3).'
22747
22748     A cast from pointer to integer discards most-significant bits if
22749     the pointer representation is larger than the integer type,
22750     sign-extends(1) if the pointer representation is smaller than the
22751     integer type, otherwise the bits are unchanged.
22752
22753     A cast from integer to pointer discards most-significant bits if
22754     the pointer representation is smaller than the integer type,
22755     extends according to the signedness of the integer type if the
22756     pointer representation is larger than the integer type, otherwise
22757     the bits are unchanged.
22758
22759     When casting from pointer to integer and back again, the resulting
22760     pointer must reference the same object as the original pointer,
22761     otherwise the behavior is undefined.  That is, one may not use
22762     integer arithmetic to avoid the undefined behavior of pointer
22763     arithmetic as proscribed in C99 and C11 6.5.6/8.
22764
22765   * `The size of the result of subtracting two pointers to elements of
22766     the same array (C90 6.3.6, C99 and C11 6.5.6).'
22767
22768     The value is as specified in the standard and the type is
22769     determined by the ABI.
22770
22771
22772 ---------- Footnotes ----------
22773
22774 (1) Future versions of GCC may zero-extend, or use a target-defined
22775`ptr_extend' pattern.  Do not rely on sign extension.
22776
22777
22778File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
22779
227804.8 Hints
22781=========
22782
22783   * `The extent to which suggestions made by using the `register'
22784     storage-class specifier are effective (C90 6.5.1, C99 and C11
22785     6.7.1).'
22786
22787     The `register' specifier affects code generation only in these
22788     ways:
22789
22790        * When used as part of the register variable extension, see
22791          *note Explicit Reg Vars::.
22792
22793        * When `-O0' is in use, the compiler allocates distinct stack
22794          memory for all variables that do not have the `register'
22795          storage-class specifier; if `register' is specified, the
22796          variable may have a shorter lifespan than the code would
22797          indicate and may never be placed in memory.
22798
22799        * On some rare x86 targets, `setjmp' doesn't save the registers
22800          in all circumstances.  In those cases, GCC doesn't allocate
22801          any variables in registers unless they are marked `register'.
22802
22803
22804   * `The extent to which suggestions made by using the inline function
22805     specifier are effective (C99 and C11 6.7.4).'
22806
22807     GCC will not inline any functions if the `-fno-inline' option is
22808     used or if `-O0' is used.  Otherwise, GCC may still be unable to
22809     inline a function for many reasons; the `-Winline' option may be
22810     used to determine if a function has not been inlined and why not.
22811
22812
22813
22814File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
22815
228164.9 Structures, Unions, Enumerations, and Bit-Fields
22817====================================================
22818
22819   * `A member of a union object is accessed using a member of a
22820     different type (C90 6.3.2.3).'
22821
22822     The relevant bytes of the representation of the object are treated
22823     as an object of the type used for the access.  *Note
22824     Type-punning::.  This may be a trap representation.
22825
22826   * `Whether a "plain" `int' bit-field is treated as a `signed int'
22827     bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90
22828     6.5.2.1, C99 and C11 6.7.2, C99 and C11 6.7.2.1).'
22829
22830     By default it is treated as `signed int' but this may be changed
22831     by the `-funsigned-bitfields' option.
22832
22833   * `Allowable bit-field types other than `_Bool', `signed int', and
22834     `unsigned int' (C99 and C11 6.7.2.1).'
22835
22836     Other integer types, such as `long int', and enumerated types are
22837     permitted even in strictly conforming mode.
22838
22839   * `Whether atomic types are permitted for bit-fields (C11 6.7.2.1).'
22840
22841     Atomic types are not permitted for bit-fields.
22842
22843   * `Whether a bit-field can straddle a storage-unit boundary (C90
22844     6.5.2.1, C99 and C11 6.7.2.1).'
22845
22846     Determined by ABI.
22847
22848   * `The order of allocation of bit-fields within a unit (C90 6.5.2.1,
22849     C99 and C11 6.7.2.1).'
22850
22851     Determined by ABI.
22852
22853   * `The alignment of non-bit-field members of structures (C90
22854     6.5.2.1, C99 and C11 6.7.2.1).'
22855
22856     Determined by ABI.
22857
22858   * `The integer type compatible with each enumerated type (C90
22859     6.5.2.2, C99 and C11 6.7.2.2).'
22860
22861     Normally, the type is `unsigned int' if there are no negative
22862     values in the enumeration, otherwise `int'.  If `-fshort-enums' is
22863     specified, then if there are negative values it is the first of
22864     `signed char', `short' and `int' that can represent all the
22865     values, otherwise it is the first of `unsigned char', `unsigned
22866     short' and `unsigned int' that can represent all the values.
22867
22868     On some targets, `-fshort-enums' is the default; this is
22869     determined by the ABI.
22870
22871
22872
22873File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
22874
228754.10 Qualifiers
22876===============
22877
22878   * `What constitutes an access to an object that has
22879     volatile-qualified type (C90 6.5.3, C99 and C11 6.7.3).'
22880
22881     Such an object is normally accessed by pointers and used for
22882     accessing hardware.  In most expressions, it is intuitively
22883     obvious what is a read and what is a write.  For example
22884
22885          volatile int *dst = SOMEVALUE;
22886          volatile int *src = SOMEOTHERVALUE;
22887          *dst = *src;
22888
22889     will cause a read of the volatile object pointed to by SRC and
22890     store the value into the volatile object pointed to by DST.  There
22891     is no guarantee that these reads and writes are atomic, especially
22892     for objects larger than `int'.
22893
22894     However, if the volatile storage is not being modified, and the
22895     value of the volatile storage is not used, then the situation is
22896     less obvious.  For example
22897
22898          volatile int *src = SOMEVALUE;
22899          *src;
22900
22901     According to the C standard, such an expression is an rvalue whose
22902     type is the unqualified version of its original type, i.e. `int'.
22903     Whether GCC interprets this as a read of the volatile object being
22904     pointed to or only as a request to evaluate the expression for its
22905     side-effects depends on this type.
22906
22907     If it is a scalar type, or on most targets an aggregate type whose
22908     only member object is of a scalar type, or a union type whose
22909     member objects are of scalar types, the expression is interpreted
22910     by GCC as a read of the volatile object; in the other cases, the
22911     expression is only evaluated for its side-effects.
22912
22913
22914
22915File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
22916
229174.11 Declarators
22918================
22919
22920   * `The maximum number of declarators that may modify an arithmetic,
22921     structure or union type (C90 6.5.4).'
22922
22923     GCC is only limited by available memory.
22924
22925
22926
22927File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
22928
229294.12 Statements
22930===============
22931
22932   * `The maximum number of `case' values in a `switch' statement (C90
22933     6.6.4.2).'
22934
22935     GCC is only limited by available memory.
22936
22937
22938
22939File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
22940
229414.13 Preprocessing Directives
22942=============================
22943
22944*Note Implementation-defined behavior: (cpp)Implementation-defined
22945behavior, for details of these aspects of implementation-defined
22946behavior.
22947
22948   * `The locations within `#pragma' directives where header name
22949     preprocessing tokens are recognized (C11 6.4, C11 6.4.7).'
22950
22951   * `How sequences in both forms of header names are mapped to headers
22952     or external source file names (C90 6.1.7, C99 and C11 6.4.7).'
22953
22954   * `Whether the value of a character constant in a constant expression
22955     that controls conditional inclusion matches the value of the same
22956     character constant in the execution character set (C90 6.8.1, C99
22957     and C11 6.10.1).'
22958
22959   * `Whether the value of a single-character character constant in a
22960     constant expression that controls conditional inclusion may have a
22961     negative value (C90 6.8.1, C99 and C11 6.10.1).'
22962
22963   * `The places that are searched for an included `<>' delimited
22964     header, and how the places are specified or the header is
22965     identified (C90 6.8.2, C99 and C11 6.10.2).'
22966
22967   * `How the named source file is searched for in an included `""'
22968     delimited header (C90 6.8.2, C99 and C11 6.10.2).'
22969
22970   * `The method by which preprocessing tokens (possibly resulting from
22971     macro expansion) in a `#include' directive are combined into a
22972     header name (C90 6.8.2, C99 and C11 6.10.2).'
22973
22974   * `The nesting limit for `#include' processing (C90 6.8.2, C99 and
22975     C11 6.10.2).'
22976
22977   * `Whether the `#' operator inserts a `\' character before the `\'
22978     character that begins a universal character name in a character
22979     constant or string literal (C99 and C11 6.10.3.2).'
22980
22981   * `The behavior on each recognized non-`STDC #pragma' directive (C90
22982     6.8.6, C99 and C11 6.10.6).'
22983
22984     *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by
22985     GCC on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
22986     details of target-specific pragmas.
22987
22988   * `The definitions for `__DATE__' and `__TIME__' when respectively,
22989     the date and time of translation are not available (C90 6.8.8, C99
22990     6.10.8, C11 6.10.8.1).'
22991
22992
22993
22994File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
22995
229964.14 Library Functions
22997======================
22998
22999The behavior of most of these points are dependent on the implementation
23000of the C library, and are not defined by GCC itself.
23001
23002   * `The null pointer constant to which the macro `NULL' expands (C90
23003     7.1.6, C99 7.17, C11 7.19).'
23004
23005     In `<stddef.h>', `NULL' expands to `((void *)0)'.  GCC does not
23006     provide the other headers which define `NULL' and some library
23007     implementations may use other definitions in those headers.
23008
23009
23010
23011File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
23012
230134.15 Architecture
23014=================
23015
23016   * `The values or expressions assigned to the macros specified in the
23017     headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90, C99 and
23018     C11 5.2.4.2, C99 7.18.2, C99 7.18.3, C11 7.20.2, C11 7.20.3).'
23019
23020     Determined by ABI.
23021
23022   * `The result of attempting to indirectly access an object with
23023     automatic or thread storage duration from a thread other than the
23024     one with which it is associated (C11 6.2.4).'
23025
23026     Such accesses are supported, subject to the same requirements for
23027     synchronization for concurrent accesses as for concurrent accesses
23028     to any object.
23029
23030   * `The number, order, and encoding of bytes in any object (when not
23031     explicitly specified in this International Standard) (C99 and C11
23032     6.2.6.1).'
23033
23034     Determined by ABI.
23035
23036   * `Whether any extended alignments are supported and the contexts in
23037     which they are supported (C11 6.2.8).'
23038
23039     Extended alignments up to 2^28 (bytes) are supported for objects
23040     of automatic storage duration.  Alignments supported for objects
23041     of static and thread storage duration are determined by the ABI.
23042
23043   * `Valid alignment values other than those returned by an _Alignof
23044     expression for fundamental types, if any (C11 6.2.8).'
23045
23046     Valid alignments are powers of 2 up to and including 2^28.
23047
23048   * `The value of the result of the `sizeof' and `_Alignof' operators
23049     (C90 6.3.3.4, C99 and C11 6.5.3.4).'
23050
23051     Determined by ABI.
23052
23053
23054
23055File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
23056
230574.16 Locale-Specific Behavior
23058=============================
23059
23060The behavior of these points are dependent on the implementation of the
23061C library, and are not defined by GCC itself.
23062
23063
23064File: gcc.info,  Node: C++ Implementation,  Next: C Extensions,  Prev: C Implementation,  Up: Top
23065
230665 C++ Implementation-Defined Behavior
23067*************************************
23068
23069A conforming implementation of ISO C++ is required to document its
23070choice of behavior in each of the areas that are designated
23071"implementation defined".  The following lists all such areas, along
23072with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC
2307314882:2003 standards.  Some areas are only implementation-defined in
23074one version of the standard.
23075
23076 Some choices depend on the externally determined ABI for the platform
23077(including standard character encodings) which GCC follows; these are
23078listed as "determined by ABI" below.  *Note Binary Compatibility:
23079Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
23080are documented in the preprocessor manual.  *Note
23081Implementation-defined behavior: (cpp)Implementation-defined behavior.
23082Some choices are documented in the corresponding document for the C
23083language.  *Note C Implementation::.  Some choices are made by the
23084library and operating system (or other environment when compiling for a
23085freestanding environment); refer to their documentation for details.
23086
23087* Menu:
23088
23089* Conditionally-supported behavior::
23090* Exception handling::
23091
23092
23093File: gcc.info,  Node: Conditionally-supported behavior,  Next: Exception handling,  Up: C++ Implementation
23094
230955.1 Conditionally-Supported Behavior
23096====================================
23097
23098`Each implementation shall include documentation that identifies all
23099conditionally-supported constructs that it does not support (C++0x
231001.4).'
23101
23102   * `Whether an argument of class type with a non-trivial copy
23103     constructor or destructor can be passed to ... (C++0x 5.2.2).'
23104
23105     Such argument passing is supported, using the same
23106     pass-by-invisible-reference approach used for normal function
23107     arguments of such types.
23108
23109
23110
23111File: gcc.info,  Node: Exception handling,  Prev: Conditionally-supported behavior,  Up: C++ Implementation
23112
231135.2 Exception Handling
23114======================
23115
23116   * `In the situation where no matching handler is found, it is
23117     implementation-defined whether or not the stack is unwound before
23118     std::terminate() is called (C++98 15.5.1).'
23119
23120     The stack is not unwound before std::terminate is called.
23121
23122
23123
23124File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C++ Implementation,  Up: Top
23125
231266 Extensions to the C Language Family
23127*************************************
23128
23129GNU C provides several language features not found in ISO standard C.
23130(The `-pedantic' option directs GCC to print a warning message if any
23131of these features is used.)  To test for the availability of these
23132features in conditional compilation, check for a predefined macro
23133`__GNUC__', which is always defined under GCC.
23134
23135 These extensions are available in C and Objective-C.  Most of them are
23136also available in C++.  *Note Extensions to the C++ Language: C++
23137Extensions, for extensions that apply _only_ to C++.
23138
23139 Some features that are in ISO C99 but not C90 or C++ are also, as
23140extensions, accepted by GCC in C90 mode and in C++.
23141
23142* Menu:
23143
23144* Statement Exprs::     Putting statements and declarations inside expressions.
23145* Local Labels::        Labels local to a block.
23146* Labels as Values::    Getting pointers to labels, and computed gotos.
23147* Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
23148* Constructing Calls::  Dispatching a call to another function.
23149* Typeof::              `typeof': referring to the type of an expression.
23150* Conditionals::        Omitting the middle operand of a `?:' expression.
23151* __int128::		128-bit integers---`__int128'.
23152* Long Long::           Double-word integers---`long long int'.
23153* Complex::             Data types for complex numbers.
23154* Floating Types::      Additional Floating Types.
23155* Half-Precision::      Half-Precision Floating Point.
23156* Decimal Float::       Decimal Floating Types.
23157* Hex Floats::          Hexadecimal floating-point constants.
23158* Fixed-Point::         Fixed-Point Types.
23159* Named Address Spaces::Named address spaces.
23160* Zero Length::         Zero-length arrays.
23161* Empty Structures::    Structures with no members.
23162* Variable Length::     Arrays whose length is computed at run time.
23163* Variadic Macros::     Macros with a variable number of arguments.
23164* Escaped Newlines::    Slightly looser rules for escaped newlines.
23165* Subscripting::        Any array can be subscripted, even if not an lvalue.
23166* Pointer Arith::       Arithmetic on `void'-pointers and function pointers.
23167* Pointers to Arrays::  Pointers to arrays with qualifiers work as expected.
23168* Initializers::        Non-constant initializers.
23169* Compound Literals::   Compound literals give structures, unions
23170                        or arrays as values.
23171* Designated Inits::    Labeling elements of initializers.
23172* Case Ranges::         `case 1 ... 9' and such.
23173* Cast to Union::       Casting to union type from any member of the union.
23174* Mixed Declarations::  Mixing declarations and code.
23175* Function Attributes:: Declaring that functions have no side effects,
23176                        or that they can never return.
23177* Label Attributes::    Specifying attributes on labels.
23178* Attribute Syntax::    Formal syntax for attributes.
23179* Function Prototypes:: Prototype declarations and old-style definitions.
23180* C++ Comments::        C++ comments are recognized.
23181* Dollar Signs::        Dollar sign is allowed in identifiers.
23182* Character Escapes::   `\e' stands for the character <ESC>.
23183* Variable Attributes:: Specifying attributes of variables.
23184* Type Attributes::     Specifying attributes of types.
23185* Alignment::           Inquiring about the alignment of a type or variable.
23186* Inline::              Defining inline functions (as fast as macros).
23187* Volatiles::           What constitutes an access to a volatile object.
23188* Using Assembly Language with C:: Instructions and extensions for interfacing C with assembler.
23189* Alternate Keywords::  `__const__', `__asm__', etc., for header files.
23190* Incomplete Enums::    `enum foo;', with details to follow.
23191* Function Names::      Printable strings which are the name of the current
23192                        function.
23193* Return Address::      Getting the return or frame address of a function.
23194* Vector Extensions::   Using vector instructions through built-in functions.
23195* Offsetof::            Special syntax for implementing `offsetof'.
23196* __sync Builtins::     Legacy built-in functions for atomic memory access.
23197* __atomic Builtins::   Atomic built-in functions with memory model.
23198* Integer Overflow Builtins:: Built-in functions to perform arithmetics and
23199                        arithmetic overflow checking.
23200* x86 specific memory model extensions for transactional memory:: x86 memory models.
23201* Object Size Checking:: Built-in functions for limited buffer overflow
23202                        checking.
23203* Pointer Bounds Checker builtins:: Built-in functions for Pointer Bounds Checker.
23204* Cilk Plus Builtins::  Built-in functions for the Cilk Plus language extension.
23205* Other Builtins::      Other built-in functions.
23206* Target Builtins::     Built-in functions specific to particular targets.
23207* Target Format Checks:: Format checks specific to particular targets.
23208* Pragmas::             Pragmas accepted by GCC.
23209* Unnamed Fields::      Unnamed struct/union fields within structs/unions.
23210* Thread-Local::        Per-thread variables.
23211* Binary constants::    Binary constants using the `0b' prefix.
23212
23213
23214File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
23215
232166.1 Statements and Declarations in Expressions
23217==============================================
23218
23219A compound statement enclosed in parentheses may appear as an expression
23220in GNU C.  This allows you to use loops, switches, and local variables
23221within an expression.
23222
23223 Recall that a compound statement is a sequence of statements surrounded
23224by braces; in this construct, parentheses go around the braces.  For
23225example:
23226
23227     ({ int y = foo (); int z;
23228        if (y > 0) z = y;
23229        else z = - y;
23230        z; })
23231
23232is a valid (though slightly more complex than necessary) expression for
23233the absolute value of `foo ()'.
23234
23235 The last thing in the compound statement should be an expression
23236followed by a semicolon; the value of this subexpression serves as the
23237value of the entire construct.  (If you use some other kind of statement
23238last within the braces, the construct has type `void', and thus
23239effectively no value.)
23240
23241 This feature is especially useful in making macro definitions "safe"
23242(so that they evaluate each operand exactly once).  For example, the
23243"maximum" function is commonly defined as a macro in standard C as
23244follows:
23245
23246     #define max(a,b) ((a) > (b) ? (a) : (b))
23247
23248But this definition computes either A or B twice, with bad results if
23249the operand has side effects.  In GNU C, if you know the type of the
23250operands (here taken as `int'), you can define the macro safely as
23251follows:
23252
23253     #define maxint(a,b) \
23254       ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
23255
23256 Embedded statements are not allowed in constant expressions, such as
23257the value of an enumeration constant, the width of a bit-field, or the
23258initial value of a static variable.
23259
23260 If you don't know the type of the operand, you can still do this, but
23261you must use `typeof' or `__auto_type' (*note Typeof::).
23262
23263 In G++, the result value of a statement expression undergoes array and
23264function pointer decay, and is returned by value to the enclosing
23265expression.  For instance, if `A' is a class, then
23266
23267             A a;
23268
23269             ({a;}).Foo ()
23270
23271constructs a temporary `A' object to hold the result of the statement
23272expression, and that is used to invoke `Foo'.  Therefore the `this'
23273pointer observed by `Foo' is not the address of `a'.
23274
23275 In a statement expression, any temporaries created within a statement
23276are destroyed at that statement's end.  This makes statement
23277expressions inside macros slightly different from function calls.  In
23278the latter case temporaries introduced during argument evaluation are
23279destroyed at the end of the statement that includes the function call.
23280In the statement expression case they are destroyed during the
23281statement expression.  For instance,
23282
23283     #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
23284     template<typename T> T function(T a) { T b = a; return b + 3; }
23285
23286     void foo ()
23287     {
23288       macro (X ());
23289       function (X ());
23290     }
23291
23292has different places where temporaries are destroyed.  For the `macro'
23293case, the temporary `X' is destroyed just after the initialization of
23294`b'.  In the `function' case that temporary is destroyed when the
23295function returns.
23296
23297 These considerations mean that it is probably a bad idea to use
23298statement expressions of this form in header files that are designed to
23299work with C++.  (Note that some versions of the GNU C Library contained
23300header files using statement expressions that lead to precisely this
23301bug.)
23302
23303 Jumping into a statement expression with `goto' or using a `switch'
23304statement outside the statement expression with a `case' or `default'
23305label inside the statement expression is not permitted.  Jumping into a
23306statement expression with a computed `goto' (*note Labels as Values::)
23307has undefined behavior.  Jumping out of a statement expression is
23308permitted, but if the statement expression is part of a larger
23309expression then it is unspecified which other subexpressions of that
23310expression have been evaluated except where the language definition
23311requires certain subexpressions to be evaluated before or after the
23312statement expression.  In any case, as with a function call, the
23313evaluation of a statement expression is not interleaved with the
23314evaluation of other parts of the containing expression.  For example,
23315
23316       foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
23317
23318calls `foo' and `bar1' and does not call `baz' but may or may not call
23319`bar2'.  If `bar2' is called, it is called after `foo' and before
23320`bar1'.
23321
23322
23323File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
23324
233256.2 Locally Declared Labels
23326===========================
23327
23328GCC allows you to declare "local labels" in any nested block scope.  A
23329local label is just like an ordinary label, but you can only reference
23330it (with a `goto' statement, or by taking its address) within the block
23331in which it is declared.
23332
23333 A local label declaration looks like this:
23334
23335     __label__ LABEL;
23336
23337or
23338
23339     __label__ LABEL1, LABEL2, /* ... */;
23340
23341 Local label declarations must come at the beginning of the block,
23342before any ordinary declarations or statements.
23343
23344 The label declaration defines the label _name_, but does not define
23345the label itself.  You must do this in the usual way, with `LABEL:',
23346within the statements of the statement expression.
23347
23348 The local label feature is useful for complex macros.  If a macro
23349contains nested loops, a `goto' can be useful for breaking out of them.
23350However, an ordinary label whose scope is the whole function cannot be
23351used: if the macro can be expanded several times in one function, the
23352label is multiply defined in that function.  A local label avoids this
23353problem.  For example:
23354
23355     #define SEARCH(value, array, target)              \
23356     do {                                              \
23357       __label__ found;                                \
23358       typeof (target) _SEARCH_target = (target);      \
23359       typeof (*(array)) *_SEARCH_array = (array);     \
23360       int i, j;                                       \
23361       int value;                                      \
23362       for (i = 0; i < max; i++)                       \
23363         for (j = 0; j < max; j++)                     \
23364           if (_SEARCH_array[i][j] == _SEARCH_target)  \
23365             { (value) = i; goto found; }              \
23366       (value) = -1;                                   \
23367      found:;                                          \
23368     } while (0)
23369
23370 This could also be written using a statement expression:
23371
23372     #define SEARCH(array, target)                     \
23373     ({                                                \
23374       __label__ found;                                \
23375       typeof (target) _SEARCH_target = (target);      \
23376       typeof (*(array)) *_SEARCH_array = (array);     \
23377       int i, j;                                       \
23378       int value;                                      \
23379       for (i = 0; i < max; i++)                       \
23380         for (j = 0; j < max; j++)                     \
23381           if (_SEARCH_array[i][j] == _SEARCH_target)  \
23382             { value = i; goto found; }                \
23383       value = -1;                                     \
23384      found:                                           \
23385       value;                                          \
23386     })
23387
23388 Local label declarations also make the labels they declare visible to
23389nested functions, if there are any.  *Note Nested Functions::, for
23390details.
23391
23392
23393File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
23394
233956.3 Labels as Values
23396====================
23397
23398You can get the address of a label defined in the current function (or
23399a containing function) with the unary operator `&&'.  The value has
23400type `void *'.  This value is a constant and can be used wherever a
23401constant of that type is valid.  For example:
23402
23403     void *ptr;
23404     /* ... */
23405     ptr = &&foo;
23406
23407 To use these values, you need to be able to jump to one.  This is done
23408with the computed goto statement(1), `goto *EXP;'.  For example,
23409
23410     goto *ptr;
23411
23412Any expression of type `void *' is allowed.
23413
23414 One way of using these constants is in initializing a static array that
23415serves as a jump table:
23416
23417     static void *array[] = { &&foo, &&bar, &&hack };
23418
23419Then you can select a label with indexing, like this:
23420
23421     goto *array[i];
23422
23423Note that this does not check whether the subscript is in bounds--array
23424indexing in C never does that.
23425
23426 Such an array of label values serves a purpose much like that of the
23427`switch' statement.  The `switch' statement is cleaner, so use that
23428rather than an array unless the problem does not fit a `switch'
23429statement very well.
23430
23431 Another use of label values is in an interpreter for threaded code.
23432The labels within the interpreter function can be stored in the
23433threaded code for super-fast dispatching.
23434
23435 You may not use this mechanism to jump to code in a different function.
23436If you do that, totally unpredictable things happen.  The best way to
23437avoid this is to store the label address only in automatic variables and
23438never pass it as an argument.
23439
23440 An alternate way to write the above example is
23441
23442     static const int array[] = { &&foo - &&foo, &&bar - &&foo,
23443                                  &&hack - &&foo };
23444     goto *(&&foo + array[i]);
23445
23446This is more friendly to code living in shared libraries, as it reduces
23447the number of dynamic relocations that are needed, and by consequence,
23448allows the data to be read-only.  This alternative with label
23449differences is not supported for the AVR target, please use the first
23450approach for AVR programs.
23451
23452 The `&&foo' expressions for the same label might have different values
23453if the containing function is inlined or cloned.  If a program relies
23454on them being always the same,
23455`__attribute__((__noinline__,__noclone__))' should be used to prevent
23456inlining and cloning.  If `&&foo' is used in a static variable
23457initializer, inlining and cloning is forbidden.
23458
23459 ---------- Footnotes ----------
23460
23461 (1) The analogous feature in Fortran is called an assigned goto, but
23462that name seems inappropriate in C, where one can do more than simply
23463store label addresses in label variables.
23464
23465
23466File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
23467
234686.4 Nested Functions
23469====================
23470
23471A "nested function" is a function defined inside another function.
23472Nested functions are supported as an extension in GNU C, but are not
23473supported by GNU C++.
23474
23475 The nested function's name is local to the block where it is defined.
23476For example, here we define a nested function named `square', and call
23477it twice:
23478
23479     foo (double a, double b)
23480     {
23481       double square (double z) { return z * z; }
23482
23483       return square (a) + square (b);
23484     }
23485
23486 The nested function can access all the variables of the containing
23487function that are visible at the point of its definition.  This is
23488called "lexical scoping".  For example, here we show a nested function
23489which uses an inherited variable named `offset':
23490
23491     bar (int *array, int offset, int size)
23492     {
23493       int access (int *array, int index)
23494         { return array[index + offset]; }
23495       int i;
23496       /* ... */
23497       for (i = 0; i < size; i++)
23498         /* ... */ access (array, i) /* ... */
23499     }
23500
23501 Nested function definitions are permitted within functions in the
23502places where variable definitions are allowed; that is, in any block,
23503mixed with the other declarations and statements in the block.
23504
23505 It is possible to call the nested function from outside the scope of
23506its name by storing its address or passing the address to another
23507function:
23508
23509     hack (int *array, int size)
23510     {
23511       void store (int index, int value)
23512         { array[index] = value; }
23513
23514       intermediate (store, size);
23515     }
23516
23517 Here, the function `intermediate' receives the address of `store' as
23518an argument.  If `intermediate' calls `store', the arguments given to
23519`store' are used to store into `array'.  But this technique works only
23520so long as the containing function (`hack', in this example) does not
23521exit.
23522
23523 If you try to call the nested function through its address after the
23524containing function exits, all hell breaks loose.  If you try to call
23525it after a containing scope level exits, and if it refers to some of
23526the variables that are no longer in scope, you may be lucky, but it's
23527not wise to take the risk.  If, however, the nested function does not
23528refer to anything that has gone out of scope, you should be safe.
23529
23530 GCC implements taking the address of a nested function using a
23531technique called "trampolines".  This technique was described in
23532`Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
23533Proceedings, October 17-21, 1988).
23534
23535 A nested function can jump to a label inherited from a containing
23536function, provided the label is explicitly declared in the containing
23537function (*note Local Labels::).  Such a jump returns instantly to the
23538containing function, exiting the nested function that did the `goto'
23539and any intermediate functions as well.  Here is an example:
23540
23541     bar (int *array, int offset, int size)
23542     {
23543       __label__ failure;
23544       int access (int *array, int index)
23545         {
23546           if (index > size)
23547             goto failure;
23548           return array[index + offset];
23549         }
23550       int i;
23551       /* ... */
23552       for (i = 0; i < size; i++)
23553         /* ... */ access (array, i) /* ... */
23554       /* ... */
23555       return 0;
23556
23557      /* Control comes here from `access'
23558         if it detects an error.  */
23559      failure:
23560       return -1;
23561     }
23562
23563 A nested function always has no linkage.  Declaring one with `extern'
23564or `static' is erroneous.  If you need to declare the nested function
23565before its definition, use `auto' (which is otherwise meaningless for
23566function declarations).
23567
23568     bar (int *array, int offset, int size)
23569     {
23570       __label__ failure;
23571       auto int access (int *, int);
23572       /* ... */
23573       int access (int *array, int index)
23574         {
23575           if (index > size)
23576             goto failure;
23577           return array[index + offset];
23578         }
23579       /* ... */
23580     }
23581
23582
23583File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
23584
235856.5 Constructing Function Calls
23586===============================
23587
23588Using the built-in functions described below, you can record the
23589arguments a function received, and call another function with the same
23590arguments, without knowing the number or types of the arguments.
23591
23592 You can also record the return value of that function call, and later
23593return that value, without knowing what data type the function tried to
23594return (as long as your caller expects that data type).
23595
23596 However, these built-in functions may interact badly with some
23597sophisticated features or other extensions of the language.  It is,
23598therefore, not recommended to use them outside very simple functions
23599acting as mere forwarders for their arguments.
23600
23601 -- Built-in Function: void * __builtin_apply_args ()
23602     This built-in function returns a pointer to data describing how to
23603     perform a call with the same arguments as are passed to the
23604     current function.
23605
23606     The function saves the arg pointer register, structure value
23607     address, and all registers that might be used to pass arguments to
23608     a function into a block of memory allocated on the stack.  Then it
23609     returns the address of that block.
23610
23611 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
23612          *ARGUMENTS, size_t SIZE)
23613     This built-in function invokes FUNCTION with a copy of the
23614     parameters described by ARGUMENTS and SIZE.
23615
23616     The value of ARGUMENTS should be the value returned by
23617     `__builtin_apply_args'.  The argument SIZE specifies the size of
23618     the stack argument data, in bytes.
23619
23620     This function returns a pointer to data describing how to return
23621     whatever value is returned by FUNCTION.  The data is saved in a
23622     block of memory allocated on the stack.
23623
23624     It is not always simple to compute the proper value for SIZE.  The
23625     value is used by `__builtin_apply' to compute the amount of data
23626     that should be pushed on the stack and copied from the incoming
23627     argument area.
23628
23629 -- Built-in Function: void __builtin_return (void *RESULT)
23630     This built-in function returns the value described by RESULT from
23631     the containing function.  You should specify, for RESULT, a value
23632     returned by `__builtin_apply'.
23633
23634 -- Built-in Function:  __builtin_va_arg_pack ()
23635     This built-in function represents all anonymous arguments of an
23636     inline function.  It can be used only in inline functions that are
23637     always inlined, never compiled as a separate function, such as
23638     those using `__attribute__ ((__always_inline__))' or
23639     `__attribute__ ((__gnu_inline__))' extern inline functions.  It
23640     must be only passed as last argument to some other function with
23641     variable arguments.  This is useful for writing small wrapper
23642     inlines for variable argument functions, when using preprocessor
23643     macros is undesirable.  For example:
23644          extern int myprintf (FILE *f, const char *format, ...);
23645          extern inline __attribute__ ((__gnu_inline__)) int
23646          myprintf (FILE *f, const char *format, ...)
23647          {
23648            int r = fprintf (f, "myprintf: ");
23649            if (r < 0)
23650              return r;
23651            int s = fprintf (f, format, __builtin_va_arg_pack ());
23652            if (s < 0)
23653              return s;
23654            return r + s;
23655          }
23656
23657 -- Built-in Function: size_t __builtin_va_arg_pack_len ()
23658     This built-in function returns the number of anonymous arguments of
23659     an inline function.  It can be used only in inline functions that
23660     are always inlined, never compiled as a separate function, such as
23661     those using `__attribute__ ((__always_inline__))' or
23662     `__attribute__ ((__gnu_inline__))' extern inline functions.  For
23663     example following does link- or run-time checking of open
23664     arguments for optimized code:
23665          #ifdef __OPTIMIZE__
23666          extern inline __attribute__((__gnu_inline__)) int
23667          myopen (const char *path, int oflag, ...)
23668          {
23669            if (__builtin_va_arg_pack_len () > 1)
23670              warn_open_too_many_arguments ();
23671
23672            if (__builtin_constant_p (oflag))
23673              {
23674                if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
23675                  {
23676                    warn_open_missing_mode ();
23677                    return __open_2 (path, oflag);
23678                  }
23679                return open (path, oflag, __builtin_va_arg_pack ());
23680              }
23681
23682            if (__builtin_va_arg_pack_len () < 1)
23683              return __open_2 (path, oflag);
23684
23685            return open (path, oflag, __builtin_va_arg_pack ());
23686          }
23687          #endif
23688
23689
23690File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
23691
236926.6 Referring to a Type with `typeof'
23693=====================================
23694
23695Another way to refer to the type of an expression is with `typeof'.
23696The syntax of using of this keyword looks like `sizeof', but the
23697construct acts semantically like a type name defined with `typedef'.
23698
23699 There are two ways of writing the argument to `typeof': with an
23700expression or with a type.  Here is an example with an expression:
23701
23702     typeof (x[0](1))
23703
23704This assumes that `x' is an array of pointers to functions; the type
23705described is that of the values of the functions.
23706
23707 Here is an example with a typename as the argument:
23708
23709     typeof (int *)
23710
23711Here the type described is that of pointers to `int'.
23712
23713 If you are writing a header file that must work when included in ISO C
23714programs, write `__typeof__' instead of `typeof'.  *Note Alternate
23715Keywords::.
23716
23717 A `typeof' construct can be used anywhere a typedef name can be used.
23718For example, you can use it in a declaration, in a cast, or inside of
23719`sizeof' or `typeof'.
23720
23721 The operand of `typeof' is evaluated for its side effects if and only
23722if it is an expression of variably modified type or the name of such a
23723type.
23724
23725 `typeof' is often useful in conjunction with statement expressions
23726(*note Statement Exprs::).  Here is how the two together can be used to
23727define a safe "maximum" macro which operates on any arithmetic type and
23728evaluates each of its arguments exactly once:
23729
23730     #define max(a,b) \
23731       ({ typeof (a) _a = (a); \
23732           typeof (b) _b = (b); \
23733         _a > _b ? _a : _b; })
23734
23735 The reason for using names that start with underscores for the local
23736variables is to avoid conflicts with variable names that occur within
23737the expressions that are substituted for `a' and `b'.  Eventually we
23738hope to design a new form of declaration syntax that allows you to
23739declare variables whose scopes start only after their initializers;
23740this will be a more reliable way to prevent such conflicts.
23741
23742Some more examples of the use of `typeof':
23743
23744   * This declares `y' with the type of what `x' points to.
23745
23746          typeof (*x) y;
23747
23748   * This declares `y' as an array of such values.
23749
23750          typeof (*x) y[4];
23751
23752   * This declares `y' as an array of pointers to characters:
23753
23754          typeof (typeof (char *)[4]) y;
23755
23756     It is equivalent to the following traditional C declaration:
23757
23758          char *y[4];
23759
23760     To see the meaning of the declaration using `typeof', and why it
23761     might be a useful way to write, rewrite it with these macros:
23762
23763          #define pointer(T)  typeof(T *)
23764          #define array(T, N) typeof(T [N])
23765
23766     Now the declaration can be rewritten this way:
23767
23768          array (pointer (char), 4) y;
23769
23770     Thus, `array (pointer (char), 4)' is the type of arrays of 4
23771     pointers to `char'.
23772
23773 In GNU C, but not GNU C++, you may also declare the type of a variable
23774as `__auto_type'.  In that case, the declaration must declare only one
23775variable, whose declarator must just be an identifier, the declaration
23776must be initialized, and the type of the variable is determined by the
23777initializer; the name of the variable is not in scope until after the
23778initializer.  (In C++, you should use C++11 `auto' for this purpose.)
23779Using `__auto_type', the "maximum" macro above could be written as:
23780
23781     #define max(a,b) \
23782       ({ __auto_type _a = (a); \
23783           __auto_type _b = (b); \
23784         _a > _b ? _a : _b; })
23785
23786 Using `__auto_type' instead of `typeof' has two advantages:
23787
23788   * Each argument to the macro appears only once in the expansion of
23789     the macro.  This prevents the size of the macro expansion growing
23790     exponentially when calls to such macros are nested inside
23791     arguments of such macros.
23792
23793   * If the argument to the macro has variably modified type, it is
23794     evaluated only once when using `__auto_type', but twice if
23795     `typeof' is used.
23796
23797
23798File: gcc.info,  Node: Conditionals,  Next: __int128,  Prev: Typeof,  Up: C Extensions
23799
238006.7 Conditionals with Omitted Operands
23801======================================
23802
23803The middle operand in a conditional expression may be omitted.  Then if
23804the first operand is nonzero, its value is the value of the conditional
23805expression.
23806
23807 Therefore, the expression
23808
23809     x ? : y
23810
23811has the value of `x' if that is nonzero; otherwise, the value of `y'.
23812
23813 This example is perfectly equivalent to
23814
23815     x ? x : y
23816
23817In this simple case, the ability to omit the middle operand is not
23818especially useful.  When it becomes useful is when the first operand
23819does, or may (if it is a macro argument), contain a side effect.  Then
23820repeating the operand in the middle would perform the side effect
23821twice.  Omitting the middle operand uses the value already computed
23822without the undesirable effects of recomputing it.
23823
23824
23825File: gcc.info,  Node: __int128,  Next: Long Long,  Prev: Conditionals,  Up: C Extensions
23826
238276.8 128-bit Integers
23828====================
23829
23830As an extension the integer scalar type `__int128' is supported for
23831targets which have an integer mode wide enough to hold 128 bits.
23832Simply write `__int128' for a signed 128-bit integer, or `unsigned
23833__int128' for an unsigned 128-bit integer.  There is no support in GCC
23834for expressing an integer constant of type `__int128' for targets with
23835`long long' integer less than 128 bits wide.
23836
23837
23838File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: __int128,  Up: C Extensions
23839
238406.9 Double-Word Integers
23841========================
23842
23843ISO C99 supports data types for integers that are at least 64 bits wide,
23844and as an extension GCC supports them in C90 mode and in C++.  Simply
23845write `long long int' for a signed integer, or `unsigned long long int'
23846for an unsigned integer.  To make an integer constant of type `long
23847long int', add the suffix `LL' to the integer.  To make an integer
23848constant of type `unsigned long long int', add the suffix `ULL' to the
23849integer.
23850
23851 You can use these types in arithmetic like any other integer types.
23852Addition, subtraction, and bitwise boolean operations on these types
23853are open-coded on all types of machines.  Multiplication is open-coded
23854if the machine supports a fullword-to-doubleword widening multiply
23855instruction.  Division and shifts are open-coded only on machines that
23856provide special support.  The operations that are not open-coded use
23857special library routines that come with GCC.
23858
23859 There may be pitfalls when you use `long long' types for function
23860arguments without function prototypes.  If a function expects type
23861`int' for its argument, and you pass a value of type `long long int',
23862confusion results because the caller and the subroutine disagree about
23863the number of bytes for the argument.  Likewise, if the function
23864expects `long long int' and you pass `int'.  The best way to avoid such
23865problems is to use prototypes.
23866
23867
23868File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: Long Long,  Up: C Extensions
23869
238706.10 Complex Numbers
23871====================
23872
23873ISO C99 supports complex floating data types, and as an extension GCC
23874supports them in C90 mode and in C++.  GCC also supports complex
23875integer data types which are not part of ISO C99.  You can declare
23876complex types using the keyword `_Complex'.  As an extension, the older
23877GNU keyword `__complex__' is also supported.
23878
23879 For example, `_Complex double x;' declares `x' as a variable whose
23880real part and imaginary part are both of type `double'.  `_Complex
23881short int y;' declares `y' to have real and imaginary parts of type
23882`short int'; this is not likely to be useful, but it shows that the set
23883of complex types is complete.
23884
23885 To write a constant with a complex data type, use the suffix `i' or
23886`j' (either one; they are equivalent).  For example, `2.5fi' has type
23887`_Complex float' and `3i' has type `_Complex int'.  Such a constant
23888always has a pure imaginary value, but you can form any complex value
23889you like by adding one to a real constant.  This is a GNU extension; if
23890you have an ISO C99 conforming C library (such as the GNU C Library),
23891and want to construct complex constants of floating type, you should
23892include `<complex.h>' and use the macros `I' or `_Complex_I' instead.
23893
23894 To extract the real part of a complex-valued expression EXP, write
23895`__real__ EXP'.  Likewise, use `__imag__' to extract the imaginary
23896part.  This is a GNU extension; for values of floating type, you should
23897use the ISO C99 functions `crealf', `creal', `creall', `cimagf',
23898`cimag' and `cimagl', declared in `<complex.h>' and also provided as
23899built-in functions by GCC.
23900
23901 The operator `~' performs complex conjugation when used on a value
23902with a complex type.  This is a GNU extension; for values of floating
23903type, you should use the ISO C99 functions `conjf', `conj' and `conjl',
23904declared in `<complex.h>' and also provided as built-in functions by
23905GCC.
23906
23907 GCC can allocate complex automatic variables in a noncontiguous
23908fashion; it's even possible for the real part to be in a register while
23909the imaginary part is on the stack (or vice versa).  Only the DWARF 2
23910debug info format can represent this, so use of DWARF 2 is recommended.
23911If you are using the stabs debug info format, GCC describes a
23912noncontiguous complex variable as if it were two separate variables of
23913noncomplex type.  If the variable's actual name is `foo', the two
23914fictitious variables are named `foo$real' and `foo$imag'.  You can
23915examine and set these two fictitious variables with your debugger.
23916
23917
23918File: gcc.info,  Node: Floating Types,  Next: Half-Precision,  Prev: Complex,  Up: C Extensions
23919
239206.11 Additional Floating Types
23921==============================
23922
23923As an extension, GNU C supports additional floating types, `__float80'
23924and `__float128' to support 80-bit (`XFmode') and 128-bit (`TFmode')
23925floating types.  Support for additional types includes the arithmetic
23926operators: add, subtract, multiply, divide; unary arithmetic operators;
23927relational operators; equality operators; and conversions to and from
23928integer and other floating types.  Use a suffix `w' or `W' in a literal
23929constant of type `__float80' and `q' or `Q' for `_float128'.  You can
23930declare complex types using the corresponding internal complex type,
23931`XCmode' for `__float80' type and `TCmode' for `__float128' type:
23932
23933     typedef _Complex float __attribute__((mode(TC))) _Complex128;
23934     typedef _Complex float __attribute__((mode(XC))) _Complex80;
23935
23936 Not all targets support additional floating-point types.  `__float80'
23937and `__float128' types are supported on x86 and IA-64 targets.  The
23938`__float128' type is supported on hppa HP-UX targets.
23939
23940
23941File: gcc.info,  Node: Half-Precision,  Next: Decimal Float,  Prev: Floating Types,  Up: C Extensions
23942
239436.12 Half-Precision Floating Point
23944==================================
23945
23946On ARM targets, GCC supports half-precision (16-bit) floating point via
23947the `__fp16' type.  You must enable this type explicitly with the
23948`-mfp16-format' command-line option in order to use it.
23949
23950 ARM supports two incompatible representations for half-precision
23951floating-point values.  You must choose one of the representations and
23952use it consistently in your program.
23953
23954 Specifying `-mfp16-format=ieee' selects the IEEE 754-2008 format.
23955This format can represent normalized values in the range of 2^-14 to
2395665504.  There are 11 bits of significand precision, approximately 3
23957decimal digits.
23958
23959 Specifying `-mfp16-format=alternative' selects the ARM alternative
23960format.  This representation is similar to the IEEE format, but does
23961not support infinities or NaNs.  Instead, the range of exponents is
23962extended, so that this format can represent normalized values in the
23963range of 2^-14 to 131008.
23964
23965 The `__fp16' type is a storage format only.  For purposes of
23966arithmetic and other operations, `__fp16' values in C or C++
23967expressions are automatically promoted to `float'.  In addition, you
23968cannot declare a function with a return value or parameters of type
23969`__fp16'.
23970
23971 Note that conversions from `double' to `__fp16' involve an
23972intermediate conversion to `float'.  Because of rounding, this can
23973sometimes produce a different result than a direct conversion.
23974
23975 ARM provides hardware support for conversions between `__fp16' and
23976`float' values as an extension to VFP and NEON (Advanced SIMD).  GCC
23977generates code using these hardware instructions if you compile with
23978options to select an FPU that provides them; for example,
23979`-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the
23980`-mfp16-format' option to select a half-precision format.
23981
23982 Language-level support for the `__fp16' data type is independent of
23983whether GCC generates code using hardware floating-point instructions.
23984In cases where hardware support is not specified, GCC implements
23985conversions between `__fp16' and `float' values as library calls.
23986
23987
23988File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Half-Precision,  Up: C Extensions
23989
239906.13 Decimal Floating Types
23991===========================
23992
23993As an extension, GNU C supports decimal floating types as defined in
23994the N1312 draft of ISO/IEC WDTR24732.  Support for decimal floating
23995types in GCC will evolve as the draft technical report changes.
23996Calling conventions for any target might also change.  Not all targets
23997support decimal floating types.
23998
23999 The decimal floating types are `_Decimal32', `_Decimal64', and
24000`_Decimal128'.  They use a radix of ten, unlike the floating types
24001`float', `double', and `long double' whose radix is not specified by
24002the C standard but is usually two.
24003
24004 Support for decimal floating types includes the arithmetic operators
24005add, subtract, multiply, divide; unary arithmetic operators; relational
24006operators; equality operators; and conversions to and from integer and
24007other floating types.  Use a suffix `df' or `DF' in a literal constant
24008of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL'
24009for `_Decimal128'.
24010
24011 GCC support of decimal float as specified by the draft technical report
24012is incomplete:
24013
24014   * When the value of a decimal floating type cannot be represented in
24015     the integer type to which it is being converted, the result is
24016     undefined rather than the result value specified by the draft
24017     technical report.
24018
24019   * GCC does not provide the C library functionality associated with
24020     `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which
24021     must come from a separate C library implementation.  Because of
24022     this the GNU C compiler does not define macro `__STDC_DEC_FP__' to
24023     indicate that the implementation conforms to the technical report.
24024
24025 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by
24026the DWARF 2 debug information format.
24027
24028
24029File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
24030
240316.14 Hex Floats
24032===============
24033
24034ISO C99 supports floating-point numbers written not only in the usual
24035decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3'
24036written in hexadecimal format.  As a GNU extension, GCC supports this
24037in C90 mode (except in some cases when strictly conforming) and in C++.
24038In that format the `0x' hex introducer and the `p' or `P' exponent
24039field are mandatory.  The exponent is a decimal number that indicates
24040the power of 2 by which the significant part is multiplied.  Thus
24041`0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3'
24042is the same as `1.55e1'.
24043
24044 Unlike for floating-point numbers in the decimal notation the exponent
24045is always required in the hexadecimal notation.  Otherwise the compiler
24046would not be able to resolve the ambiguity of, e.g., `0x1.f'.  This
24047could mean `1.0f' or `1.9375' since `f' is also the extension for
24048floating-point constants of type `float'.
24049
24050
24051File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
24052
240536.15 Fixed-Point Types
24054======================
24055
24056As an extension, GNU C supports fixed-point types as defined in the
24057N1169 draft of ISO/IEC DTR 18037.  Support for fixed-point types in GCC
24058will evolve as the draft technical report changes.  Calling conventions
24059for any target might also change.  Not all targets support fixed-point
24060types.
24061
24062 The fixed-point types are `short _Fract', `_Fract', `long _Fract',
24063`long long _Fract', `unsigned short _Fract', `unsigned _Fract',
24064`unsigned long _Fract', `unsigned long long _Fract', `_Sat short
24065_Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract',
24066`_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned
24067long _Fract', `_Sat unsigned long long _Fract', `short _Accum',
24068`_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum',
24069`unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum',
24070`_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long
24071_Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat
24072unsigned long _Accum', `_Sat unsigned long long _Accum'.
24073
24074 Fixed-point data values contain fractional and optional integral parts.
24075The format of fixed-point data varies and depends on the target machine.
24076
24077 Support for fixed-point types includes:
24078   * prefix and postfix increment and decrement operators (`++', `--')
24079
24080   * unary arithmetic operators (`+', `-', `!')
24081
24082   * binary arithmetic operators (`+', `-', `*', `/')
24083
24084   * binary shift operators (`<<', `>>')
24085
24086   * relational operators (`<', `<=', `>=', `>')
24087
24088   * equality operators (`==', `!=')
24089
24090   * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=')
24091
24092   * conversions to and from integer, floating-point, or fixed-point
24093     types
24094
24095 Use a suffix in a fixed-point literal constant:
24096   * `hr' or `HR' for `short _Fract' and `_Sat short _Fract'
24097
24098   * `r' or `R' for `_Fract' and `_Sat _Fract'
24099
24100   * `lr' or `LR' for `long _Fract' and `_Sat long _Fract'
24101
24102   * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract'
24103
24104   * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned
24105     short _Fract'
24106
24107   * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract'
24108
24109   * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long
24110     _Fract'
24111
24112   * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat
24113     unsigned long long _Fract'
24114
24115   * `hk' or `HK' for `short _Accum' and `_Sat short _Accum'
24116
24117   * `k' or `K' for `_Accum' and `_Sat _Accum'
24118
24119   * `lk' or `LK' for `long _Accum' and `_Sat long _Accum'
24120
24121   * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum'
24122
24123   * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned
24124     short _Accum'
24125
24126   * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum'
24127
24128   * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long
24129     _Accum'
24130
24131   * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat
24132     unsigned long long _Accum'
24133
24134 GCC support of fixed-point types as specified by the draft technical
24135report is incomplete:
24136
24137   * Pragmas to control overflow and rounding behaviors are not
24138     implemented.
24139
24140 Fixed-point types are supported by the DWARF 2 debug information
24141format.
24142
24143
24144File: gcc.info,  Node: Named Address Spaces,  Next: Zero Length,  Prev: Fixed-Point,  Up: C Extensions
24145
241466.16 Named Address Spaces
24147=========================
24148
24149As an extension, GNU C supports named address spaces as defined in the
24150N1275 draft of ISO/IEC DTR 18037.  Support for named address spaces in
24151GCC will evolve as the draft technical report changes.  Calling
24152conventions for any target might also change.  At present, only the
24153AVR, SPU, M32C, and RL78 targets support address spaces other than the
24154generic address space.
24155
24156 Address space identifiers may be used exactly like any other C type
24157qualifier (e.g., `const' or `volatile').  See the N1275 document for
24158more details.
24159
241606.16.1 AVR Named Address Spaces
24161-------------------------------
24162
24163On the AVR target, there are several address spaces that can be used in
24164order to put read-only data into the flash memory and access that data
24165by means of the special instructions `LPM' or `ELPM' needed to read
24166from flash.
24167
24168 Per default, any data including read-only data is located in RAM (the
24169generic address space) so that non-generic address spaces are needed to
24170locate read-only data in flash memory _and_ to generate the right
24171instructions to access this data without using (inline) assembler code.
24172
24173`__flash'
24174     The `__flash' qualifier locates data in the `.progmem.data'
24175     section. Data is read using the `LPM' instruction. Pointers to
24176     this address space are 16 bits wide.
24177
24178`__flash1'
24179`__flash2'
24180`__flash3'
24181`__flash4'
24182`__flash5'
24183     These are 16-bit address spaces locating data in section
24184     `.progmemN.data' where N refers to address space `__flashN'.  The
24185     compiler sets the `RAMPZ' segment register appropriately before
24186     reading data by means of the `ELPM' instruction.
24187
24188`__memx'
24189     This is a 24-bit address space that linearizes flash and RAM: If
24190     the high bit of the address is set, data is read from RAM using
24191     the lower two bytes as RAM address.  If the high bit of the
24192     address is clear, data is read from flash with `RAMPZ' set
24193     according to the high byte of the address.  *Note
24194     `__builtin_avr_flash_segment': AVR Built-in Functions.
24195
24196     Objects in this address space are located in `.progmemx.data'.
24197
24198 Example
24199
24200     char my_read (const __flash char ** p)
24201     {
24202         /* p is a pointer to RAM that points to a pointer to flash.
24203            The first indirection of p reads that flash pointer
24204            from RAM and the second indirection reads a char from this
24205            flash address.  */
24206
24207         return **p;
24208     }
24209
24210     /* Locate array[] in flash memory */
24211     const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 };
24212
24213     int i = 1;
24214
24215     int main (void)
24216     {
24217        /* Return 17 by reading from flash memory */
24218        return array[array[i]];
24219     }
24220
24221For each named address space supported by avr-gcc there is an equally
24222named but uppercase built-in macro defined.  The purpose is to
24223facilitate testing if respective address space support is available or
24224not:
24225
24226     #ifdef __FLASH
24227     const __flash int var = 1;
24228
24229     int read_var (void)
24230     {
24231         return var;
24232     }
24233     #else
24234     #include <avr/pgmspace.h> /* From AVR-LibC */
24235
24236     const int var PROGMEM = 1;
24237
24238     int read_var (void)
24239     {
24240         return (int) pgm_read_word (&var);
24241     }
24242     #endif /* __FLASH */
24243
24244Notice that attribute *note `progmem': AVR Variable Attributes.
24245locates data in flash but accesses to these data read from generic
24246address space, i.e.  from RAM, so that you need special accessors like
24247`pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/)
24248together with attribute `progmem'.
24249
24250Limitations and caveats
24251
24252   * Reading across the 64 KiB section boundary of the `__flash' or
24253     `__flashN' address spaces shows undefined behavior. The only
24254     address space that supports reading across the 64 KiB flash
24255     segment boundaries is `__memx'.
24256
24257   * If you use one of the `__flashN' address spaces you must arrange
24258     your linker script to locate the `.progmemN.data' sections
24259     according to your needs.
24260
24261   * Any data or pointers to the non-generic address spaces must be
24262     qualified as `const', i.e. as read-only data.  This still applies
24263     if the data in one of these address spaces like software version
24264     number or calibration lookup table are intended to be changed
24265     after load time by, say, a boot loader. In this case the right
24266     qualification is `const' `volatile' so that the compiler must not
24267     optimize away known values or insert them as immediates into
24268     operands of instructions.
24269
24270   * The following code initializes a variable `pfoo' located in static
24271     storage with a 24-bit address:
24272          extern const __memx char foo;
24273          const __memx void *pfoo = &foo;
24274
24275     Such code requires at least binutils 2.23, see
24276     PR13503 (http://sourceware.org/PR13503).
24277
24278
242796.16.2 M32C Named Address Spaces
24280--------------------------------
24281
24282On the M32C target, with the R8C and M16C CPU variants, variables
24283qualified with `__far' are accessed using 32-bit addresses in order to
24284access memory beyond the first 64 Ki bytes.  If `__far' is used with
24285the M32CM or M32C CPU variants, it has no effect.
24286
242876.16.3 RL78 Named Address Spaces
24288--------------------------------
24289
24290On the RL78 target, variables qualified with `__far' are accessed with
2429132-bit pointers (20-bit addresses) rather than the default 16-bit
24292addresses.  Non-far variables are assumed to appear in the topmost
2429364 KiB of the address space.
24294
242956.16.4 SPU Named Address Spaces
24296-------------------------------
24297
24298On the SPU target variables may be declared as belonging to another
24299address space by qualifying the type with the `__ea' address space
24300identifier:
24301
24302     extern int __ea i;
24303
24304The compiler generates special code to access the variable `i'.  It may
24305use runtime library support, or generate special machine instructions
24306to access that address space.
24307
24308
24309File: gcc.info,  Node: Zero Length,  Next: Empty Structures,  Prev: Named Address Spaces,  Up: C Extensions
24310
243116.17 Arrays of Length Zero
24312==========================
24313
24314Zero-length arrays are allowed in GNU C.  They are very useful as the
24315last element of a structure that is really a header for a
24316variable-length object:
24317
24318     struct line {
24319       int length;
24320       char contents[0];
24321     };
24322
24323     struct line *thisline = (struct line *)
24324       malloc (sizeof (struct line) + this_length);
24325     thisline->length = this_length;
24326
24327 In ISO C90, you would have to give `contents' a length of 1, which
24328means either you waste space or complicate the argument to `malloc'.
24329
24330 In ISO C99, you would use a "flexible array member", which is slightly
24331different in syntax and semantics:
24332
24333   * Flexible array members are written as `contents[]' without the `0'.
24334
24335   * Flexible array members have incomplete type, and so the `sizeof'
24336     operator may not be applied.  As a quirk of the original
24337     implementation of zero-length arrays, `sizeof' evaluates to zero.
24338
24339   * Flexible array members may only appear as the last member of a
24340     `struct' that is otherwise non-empty.
24341
24342   * A structure containing a flexible array member, or a union
24343     containing such a structure (possibly recursively), may not be a
24344     member of a structure or an element of an array.  (However, these
24345     uses are permitted by GCC as extensions.)
24346
24347 Non-empty initialization of zero-length arrays is treated like any
24348case where there are more initializer elements than the array holds, in
24349that a suitable warning about "excess elements in array" is given, and
24350the excess elements (all of them, in this case) are ignored.
24351
24352 GCC allows static initialization of flexible array members.  This is
24353equivalent to defining a new structure containing the original
24354structure followed by an array of sufficient size to contain the data.
24355E.g. in the following, `f1' is constructed as if it were declared like
24356`f2'.
24357
24358     struct f1 {
24359       int x; int y[];
24360     } f1 = { 1, { 2, 3, 4 } };
24361
24362     struct f2 {
24363       struct f1 f1; int data[3];
24364     } f2 = { { 1 }, { 2, 3, 4 } };
24365
24366The convenience of this extension is that `f1' has the desired type,
24367eliminating the need to consistently refer to `f2.f1'.
24368
24369 This has symmetry with normal static arrays, in that an array of
24370unknown size is also written with `[]'.
24371
24372 Of course, this extension only makes sense if the extra data comes at
24373the end of a top-level object, as otherwise we would be overwriting
24374data at subsequent offsets.  To avoid undue complication and confusion
24375with initialization of deeply nested arrays, we simply disallow any
24376non-empty initialization except when the structure is the top-level
24377object.  For example:
24378
24379     struct foo { int x; int y[]; };
24380     struct bar { struct foo z; };
24381
24382     struct foo a = { 1, { 2, 3, 4 } };        // Valid.
24383     struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
24384     struct bar c = { { 1, { } } };            // Valid.
24385     struct foo d[1] = { { 1, { 2, 3, 4 } } };  // Invalid.
24386
24387
24388File: gcc.info,  Node: Empty Structures,  Next: Variable Length,  Prev: Zero Length,  Up: C Extensions
24389
243906.18 Structures with No Members
24391===============================
24392
24393GCC permits a C structure to have no members:
24394
24395     struct empty {
24396     };
24397
24398 The structure has size zero.  In C++, empty structures are part of the
24399language.  G++ treats empty structures as if they had a single member
24400of type `char'.
24401
24402
24403File: gcc.info,  Node: Variable Length,  Next: Variadic Macros,  Prev: Empty Structures,  Up: C Extensions
24404
244056.19 Arrays of Variable Length
24406==============================
24407
24408Variable-length automatic arrays are allowed in ISO C99, and as an
24409extension GCC accepts them in C90 mode and in C++.  These arrays are
24410declared like any other automatic arrays, but with a length that is not
24411a constant expression.  The storage is allocated at the point of
24412declaration and deallocated when the block scope containing the
24413declaration exits.  For example:
24414
24415     FILE *
24416     concat_fopen (char *s1, char *s2, char *mode)
24417     {
24418       char str[strlen (s1) + strlen (s2) + 1];
24419       strcpy (str, s1);
24420       strcat (str, s2);
24421       return fopen (str, mode);
24422     }
24423
24424 Jumping or breaking out of the scope of the array name deallocates the
24425storage.  Jumping into the scope is not allowed; you get an error
24426message for it.
24427
24428 As an extension, GCC accepts variable-length arrays as a member of a
24429structure or a union.  For example:
24430
24431     void
24432     foo (int n)
24433     {
24434       struct S { int x[n]; };
24435     }
24436
24437 You can use the function `alloca' to get an effect much like
24438variable-length arrays.  The function `alloca' is available in many
24439other C implementations (but not in all).  On the other hand,
24440variable-length arrays are more elegant.
24441
24442 There are other differences between these two methods.  Space allocated
24443with `alloca' exists until the containing _function_ returns.  The
24444space for a variable-length array is deallocated as soon as the array
24445name's scope ends.  (If you use both variable-length arrays and
24446`alloca' in the same function, deallocation of a variable-length array
24447also deallocates anything more recently allocated with `alloca'.)
24448
24449 You can also use variable-length arrays as arguments to functions:
24450
24451     struct entry
24452     tester (int len, char data[len][len])
24453     {
24454       /* ... */
24455     }
24456
24457 The length of an array is computed once when the storage is allocated
24458and is remembered for the scope of the array in case you access it with
24459`sizeof'.
24460
24461 If you want to pass the array first and the length afterward, you can
24462use a forward declaration in the parameter list--another GNU extension.
24463
24464     struct entry
24465     tester (int len; char data[len][len], int len)
24466     {
24467       /* ... */
24468     }
24469
24470 The `int len' before the semicolon is a "parameter forward
24471declaration", and it serves the purpose of making the name `len' known
24472when the declaration of `data' is parsed.
24473
24474 You can write any number of such parameter forward declarations in the
24475parameter list.  They can be separated by commas or semicolons, but the
24476last one must end with a semicolon, which is followed by the "real"
24477parameter declarations.  Each forward declaration must match a "real"
24478declaration in parameter name and data type.  ISO C99 does not support
24479parameter forward declarations.
24480
24481
24482File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Variable Length,  Up: C Extensions
24483
244846.20 Macros with a Variable Number of Arguments.
24485================================================
24486
24487In the ISO C standard of 1999, a macro can be declared to accept a
24488variable number of arguments much as a function can.  The syntax for
24489defining the macro is similar to that of a function.  Here is an
24490example:
24491
24492     #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
24493
24494Here `...' is a "variable argument".  In the invocation of such a
24495macro, it represents the zero or more tokens until the closing
24496parenthesis that ends the invocation, including any commas.  This set of
24497tokens replaces the identifier `__VA_ARGS__' in the macro body wherever
24498it appears.  See the CPP manual for more information.
24499
24500 GCC has long supported variadic macros, and used a different syntax
24501that allowed you to give a name to the variable arguments just like any
24502other argument.  Here is an example:
24503
24504     #define debug(format, args...) fprintf (stderr, format, args)
24505
24506This is in all ways equivalent to the ISO C example above, but arguably
24507more readable and descriptive.
24508
24509 GNU CPP has two further variadic macro extensions, and permits them to
24510be used with either of the above forms of macro definition.
24511
24512 In standard C, you are not allowed to leave the variable argument out
24513entirely; but you are allowed to pass an empty argument.  For example,
24514this invocation is invalid in ISO C, because there is no comma after
24515the string:
24516
24517     debug ("A message")
24518
24519 GNU CPP permits you to completely omit the variable arguments in this
24520way.  In the above examples, the compiler would complain, though since
24521the expansion of the macro still has the extra comma after the format
24522string.
24523
24524 To help solve this problem, CPP behaves specially for variable
24525arguments used with the token paste operator, `##'.  If instead you
24526write
24527
24528     #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
24529
24530and if the variable arguments are omitted or empty, the `##' operator
24531causes the preprocessor to remove the comma before it.  If you do
24532provide some variable arguments in your macro invocation, GNU CPP does
24533not complain about the paste operation and instead places the variable
24534arguments after the comma.  Just like any other pasted macro argument,
24535these arguments are not macro expanded.
24536
24537
24538File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
24539
245406.21 Slightly Looser Rules for Escaped Newlines
24541===============================================
24542
24543The preprocessor treatment of escaped newlines is more relaxed than
24544that specified by the C90 standard, which requires the newline to
24545immediately follow a backslash.  GCC's implementation allows whitespace
24546in the form of spaces, horizontal and vertical tabs, and form feeds
24547between the backslash and the subsequent newline.  The preprocessor
24548issues a warning, but treats it as a valid escaped newline and combines
24549the two lines to form a single logical line.  This works within
24550comments and tokens, as well as between tokens.  Comments are _not_
24551treated as whitespace for the purposes of this relaxation, since they
24552have not yet been replaced with spaces.
24553
24554
24555File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
24556
245576.22 Non-Lvalue Arrays May Have Subscripts
24558==========================================
24559
24560In ISO C99, arrays that are not lvalues still decay to pointers, and
24561may be subscripted, although they may not be modified or used after the
24562next sequence point and the unary `&' operator may not be applied to
24563them.  As an extension, GNU C allows such arrays to be subscripted in
24564C90 mode, though otherwise they do not decay to pointers outside C99
24565mode.  For example, this is valid in GNU C though not valid in C90:
24566
24567     struct foo {int a[4];};
24568
24569     struct foo f();
24570
24571     bar (int index)
24572     {
24573       return f().a[index];
24574     }
24575
24576
24577File: gcc.info,  Node: Pointer Arith,  Next: Pointers to Arrays,  Prev: Subscripting,  Up: C Extensions
24578
245796.23 Arithmetic on `void'- and Function-Pointers
24580================================================
24581
24582In GNU C, addition and subtraction operations are supported on pointers
24583to `void' and on pointers to functions.  This is done by treating the
24584size of a `void' or of a function as 1.
24585
24586 A consequence of this is that `sizeof' is also allowed on `void' and
24587on function types, and returns 1.
24588
24589 The option `-Wpointer-arith' requests a warning if these extensions
24590are used.
24591
24592
24593File: gcc.info,  Node: Pointers to Arrays,  Next: Initializers,  Prev: Pointer Arith,  Up: C Extensions
24594
245956.24 Pointers to Arrays with Qualifiers Work as Expected
24596========================================================
24597
24598In GNU C, pointers to arrays with qualifiers work similar to pointers
24599to other qualified types. For example, a value of type `int (*)[5]' can
24600be used to initialize a variable of type `const int (*)[5]'.  These
24601types are incompatible in ISO C because the `const' qualifier is
24602formally attached to the element type of the array and not the array
24603itself.
24604
24605     extern void
24606     transpose (int N, int M, double out[M][N], const double in[N][M]);
24607     double x[3][2];
24608     double y[2][3];
24609     ...
24610     transpose(3, 2, y, x);
24611
24612
24613File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointers to Arrays,  Up: C Extensions
24614
246156.25 Non-Constant Initializers
24616==============================
24617
24618As in standard C++ and ISO C99, the elements of an aggregate
24619initializer for an automatic variable are not required to be constant
24620expressions in GNU C.  Here is an example of an initializer with
24621run-time varying elements:
24622
24623     foo (float f, float g)
24624     {
24625       float beat_freqs[2] = { f-g, f+g };
24626       /* ... */
24627     }
24628
24629
24630File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
24631
246326.26 Compound Literals
24633======================
24634
24635ISO C99 supports compound literals.  A compound literal looks like a
24636cast containing an initializer.  Its value is an object of the type
24637specified in the cast, containing the elements specified in the
24638initializer; it is an lvalue.  As an extension, GCC supports compound
24639literals in C90 mode and in C++, though the semantics are somewhat
24640different in C++.
24641
24642 Usually, the specified type is a structure.  Assume that `struct foo'
24643and `structure' are declared as shown:
24644
24645     struct foo {int a; char b[2];} structure;
24646
24647Here is an example of constructing a `struct foo' with a compound
24648literal:
24649
24650     structure = ((struct foo) {x + y, 'a', 0});
24651
24652This is equivalent to writing the following:
24653
24654     {
24655       struct foo temp = {x + y, 'a', 0};
24656       structure = temp;
24657     }
24658
24659 You can also construct an array, though this is dangerous in C++, as
24660explained below.  If all the elements of the compound literal are (made
24661up of) simple constant expressions, suitable for use in initializers of
24662objects of static storage duration, then the compound literal can be
24663coerced to a pointer to its first element and used in such an
24664initializer, as shown here:
24665
24666     char **foo = (char *[]) { "x", "y", "z" };
24667
24668 Compound literals for scalar types and union types are also allowed,
24669but then the compound literal is equivalent to a cast.
24670
24671 As a GNU extension, GCC allows initialization of objects with static
24672storage duration by compound literals (which is not possible in ISO
24673C99, because the initializer is not a constant).  It is handled as if
24674the object is initialized only with the bracket enclosed list if the
24675types of the compound literal and the object match.  The initializer
24676list of the compound literal must be constant.  If the object being
24677initialized has array type of unknown size, the size is determined by
24678compound literal size.
24679
24680     static struct foo x = (struct foo) {1, 'a', 'b'};
24681     static int y[] = (int []) {1, 2, 3};
24682     static int z[] = (int [3]) {1};
24683
24684The above lines are equivalent to the following:
24685     static struct foo x = {1, 'a', 'b'};
24686     static int y[] = {1, 2, 3};
24687     static int z[] = {1, 0, 0};
24688
24689 In C, a compound literal designates an unnamed object with static or
24690automatic storage duration.  In C++, a compound literal designates a
24691temporary object, which only lives until the end of its
24692full-expression.  As a result, well-defined C code that takes the
24693address of a subobject of a compound literal can be undefined in C++,
24694so the C++ compiler rejects the conversion of a temporary array to a
24695pointer.  For instance, if the array compound literal example above
24696appeared inside a function, any subsequent use of `foo' in C++ has
24697undefined behavior because the lifetime of the array ends after the
24698declaration of `foo'.
24699
24700 As an optimization, the C++ compiler sometimes gives array compound
24701literals longer lifetimes: when the array either appears outside a
24702function or has const-qualified type.  If `foo' and its initializer had
24703elements of `char *const' type rather than `char *', or if `foo' were a
24704global variable, the array would have static storage duration.  But it
24705is probably safest just to avoid the use of array compound literals in
24706code compiled as C++.
24707
24708
24709File: gcc.info,  Node: Designated Inits,  Next: Case Ranges,  Prev: Compound Literals,  Up: C Extensions
24710
247116.27 Designated Initializers
24712============================
24713
24714Standard C90 requires the elements of an initializer to appear in a
24715fixed order, the same as the order of the elements in the array or
24716structure being initialized.
24717
24718 In ISO C99 you can give the elements in any order, specifying the array
24719indices or structure field names they apply to, and GNU C allows this as
24720an extension in C90 mode as well.  This extension is not implemented in
24721GNU C++.
24722
24723 To specify an array index, write `[INDEX] =' before the element value.
24724For example,
24725
24726     int a[6] = { [4] = 29, [2] = 15 };
24727
24728is equivalent to
24729
24730     int a[6] = { 0, 0, 15, 0, 29, 0 };
24731
24732The index values must be constant expressions, even if the array being
24733initialized is automatic.
24734
24735 An alternative syntax for this that has been obsolete since GCC 2.5 but
24736GCC still accepts is to write `[INDEX]' before the element value, with
24737no `='.
24738
24739 To initialize a range of elements to the same value, write `[FIRST ...
24740LAST] = VALUE'.  This is a GNU extension.  For example,
24741
24742     int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
24743
24744If the value in it has side-effects, the side-effects happen only once,
24745not for each initialized field by the range initializer.
24746
24747Note that the length of the array is the highest value specified plus
24748one.
24749
24750 In a structure initializer, specify the name of a field to initialize
24751with `.FIELDNAME =' before the element value.  For example, given the
24752following structure,
24753
24754     struct point { int x, y; };
24755
24756the following initialization
24757
24758     struct point p = { .y = yvalue, .x = xvalue };
24759
24760is equivalent to
24761
24762     struct point p = { xvalue, yvalue };
24763
24764 Another syntax that has the same meaning, obsolete since GCC 2.5, is
24765`FIELDNAME:', as shown here:
24766
24767     struct point p = { y: yvalue, x: xvalue };
24768
24769 Omitted field members are implicitly initialized the same as objects
24770that have static storage duration.
24771
24772 The `[INDEX]' or `.FIELDNAME' is known as a "designator".  You can
24773also use a designator (or the obsolete colon syntax) when initializing
24774a union, to specify which element of the union should be used.  For
24775example,
24776
24777     union foo { int i; double d; };
24778
24779     union foo f = { .d = 4 };
24780
24781converts 4 to a `double' to store it in the union using the second
24782element.  By contrast, casting 4 to type `union foo' stores it into the
24783union as the integer `i', since it is an integer.  (*Note Cast to
24784Union::.)
24785
24786 You can combine this technique of naming elements with ordinary C
24787initialization of successive elements.  Each initializer element that
24788does not have a designator applies to the next consecutive element of
24789the array or structure.  For example,
24790
24791     int a[6] = { [1] = v1, v2, [4] = v4 };
24792
24793is equivalent to
24794
24795     int a[6] = { 0, v1, v2, 0, v4, 0 };
24796
24797 Labeling the elements of an array initializer is especially useful
24798when the indices are characters or belong to an `enum' type.  For
24799example:
24800
24801     int whitespace[256]
24802       = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
24803           ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
24804
24805 You can also write a series of `.FIELDNAME' and `[INDEX]' designators
24806before an `=' to specify a nested subobject to initialize; the list is
24807taken relative to the subobject corresponding to the closest
24808surrounding brace pair.  For example, with the `struct point'
24809declaration above:
24810
24811     struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
24812
24813If the same field is initialized multiple times, it has the value from
24814the last initialization.  If any such overridden initialization has
24815side-effect, it is unspecified whether the side-effect happens or not.
24816Currently, GCC discards them and issues a warning.
24817
24818
24819File: gcc.info,  Node: Case Ranges,  Next: Cast to Union,  Prev: Designated Inits,  Up: C Extensions
24820
248216.28 Case Ranges
24822================
24823
24824You can specify a range of consecutive values in a single `case' label,
24825like this:
24826
24827     case LOW ... HIGH:
24828
24829This has the same effect as the proper number of individual `case'
24830labels, one for each integer value from LOW to HIGH, inclusive.
24831
24832 This feature is especially useful for ranges of ASCII character codes:
24833
24834     case 'A' ... 'Z':
24835
24836 *Be careful:* Write spaces around the `...', for otherwise it may be
24837parsed wrong when you use it with integer values.  For example, write
24838this:
24839
24840     case 1 ... 5:
24841
24842rather than this:
24843
24844     case 1...5:
24845
24846
24847File: gcc.info,  Node: Cast to Union,  Next: Mixed Declarations,  Prev: Case Ranges,  Up: C Extensions
24848
248496.29 Cast to a Union Type
24850=========================
24851
24852A cast to union type is similar to other casts, except that the type
24853specified is a union type.  You can specify the type either with `union
24854TAG' or with a typedef name.  A cast to union is actually a
24855constructor, not a cast, and hence does not yield an lvalue like normal
24856casts.  (*Note Compound Literals::.)
24857
24858 The types that may be cast to the union type are those of the members
24859of the union.  Thus, given the following union and variables:
24860
24861     union foo { int i; double d; };
24862     int x;
24863     double y;
24864
24865both `x' and `y' can be cast to type `union foo'.
24866
24867 Using the cast as the right-hand side of an assignment to a variable of
24868union type is equivalent to storing in a member of the union:
24869
24870     union foo u;
24871     /* ... */
24872     u = (union foo) x  ==  u.i = x
24873     u = (union foo) y  ==  u.d = y
24874
24875 You can also use the union cast as a function argument:
24876
24877     void hack (union foo);
24878     /* ... */
24879     hack ((union foo) x);
24880
24881
24882File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Cast to Union,  Up: C Extensions
24883
248846.30 Mixed Declarations and Code
24885================================
24886
24887ISO C99 and ISO C++ allow declarations and code to be freely mixed
24888within compound statements.  As an extension, GNU C also allows this in
24889C90 mode.  For example, you could do:
24890
24891     int i;
24892     /* ... */
24893     i++;
24894     int j = i + 2;
24895
24896 Each identifier is visible from where it is declared until the end of
24897the enclosing block.
24898
24899
24900File: gcc.info,  Node: Function Attributes,  Next: Label Attributes,  Prev: Mixed Declarations,  Up: C Extensions
24901
249026.31 Declaring Attributes of Functions
24903======================================
24904
24905In GNU C, you declare certain things about functions called in your
24906program which help the compiler optimize function calls and check your
24907code more carefully.
24908
24909 The keyword `__attribute__' allows you to specify special attributes
24910when making a declaration.  This keyword is followed by an attribute
24911specification inside double parentheses.  The following attributes are
24912currently defined for functions on all targets: `aligned',
24913`alloc_size', `alloc_align', `assume_aligned', `noreturn',
24914`returns_twice', `noinline', `noclone', `no_icf', `always_inline',
24915`flatten', `pure', `const', `nothrow', `sentinel', `format',
24916`format_arg', `no_instrument_function', `no_split_stack', `section',
24917`constructor', `destructor', `used', `unused', `deprecated', `weak',
24918`malloc', `alias', `ifunc', `warn_unused_result', `nonnull',
24919`returns_nonnull', `gnu_inline', `externally_visible', `hot', `cold',
24920`artificial', `no_sanitize_address', `no_address_safety_analysis',
24921`no_sanitize_thread', `no_sanitize_undefined', `no_reorder',
24922`bnd_legacy', `bnd_instrument', `stack_protect', `error' and `warning'.
24923Several other attributes are defined for functions on particular target
24924systems.  Other attributes, including `section' are supported for
24925variables declarations (*note Variable Attributes::), labels (*note
24926Label Attributes::) and for types (*note Type Attributes::).
24927
24928 GCC plugins may provide their own attributes.
24929
24930 You may also specify attributes with `__' preceding and following each
24931keyword.  This allows you to use them in header files without being
24932concerned about a possible macro of the same name.  For example, you
24933may use `__noreturn__' instead of `noreturn'.
24934
24935 *Note Attribute Syntax::, for details of the exact syntax for using
24936attributes.
24937
24938`alias ("TARGET")'
24939     The `alias' attribute causes the declaration to be emitted as an
24940     alias for another symbol, which must be specified.  For instance,
24941
24942          void __f () { /* Do something. */; }
24943          void f () __attribute__ ((weak, alias ("__f")));
24944
24945     defines `f' to be a weak alias for `__f'.  In C++, the mangled
24946     name for the target must be used.  It is an error if `__f' is not
24947     defined in the same translation unit.
24948
24949     Not all target machines support this attribute.
24950
24951`aligned (ALIGNMENT)'
24952     This attribute specifies a minimum alignment for the function,
24953     measured in bytes.
24954
24955     You cannot use this attribute to decrease the alignment of a
24956     function, only to increase it.  However, when you explicitly
24957     specify a function alignment this overrides the effect of the
24958     `-falign-functions' (*note Optimize Options::) option for this
24959     function.
24960
24961     Note that the effectiveness of `aligned' attributes may be limited
24962     by inherent limitations in your linker.  On many systems, the
24963     linker is only able to arrange for functions to be aligned up to a
24964     certain maximum alignment.  (For some linkers, the maximum
24965     supported alignment may be very very small.)  See your linker
24966     documentation for further information.
24967
24968     The `aligned' attribute can also be used for variables and fields
24969     (*note Variable Attributes::.)
24970
24971`alloc_size'
24972     The `alloc_size' attribute is used to tell the compiler that the
24973     function return value points to memory, where the size is given by
24974     one or two of the functions parameters.  GCC uses this information
24975     to improve the correctness of `__builtin_object_size'.
24976
24977     The function parameter(s) denoting the allocated size are
24978     specified by one or two integer arguments supplied to the
24979     attribute.  The allocated size is either the value of the single
24980     function argument specified or the product of the two function
24981     arguments specified.  Argument numbering starts at one.
24982
24983     For instance,
24984
24985          void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)))
24986          void* my_realloc(void*, size_t) __attribute__((alloc_size(2)))
24987
24988     declares that `my_calloc' returns memory of the size given by the
24989     product of parameter 1 and 2 and that `my_realloc' returns memory
24990     of the size given by parameter 2.
24991
24992`alloc_align'
24993     The `alloc_align' attribute is used to tell the compiler that the
24994     function return value points to memory, where the returned pointer
24995     minimum alignment is given by one of the functions parameters.
24996     GCC uses this information to improve pointer alignment analysis.
24997
24998     The function parameter denoting the allocated alignment is
24999     specified by one integer argument, whose number is the argument of
25000     the attribute.  Argument numbering starts at one.
25001
25002     For instance,
25003
25004          void* my_memalign(size_t, size_t) __attribute__((alloc_align(1)))
25005
25006     declares that `my_memalign' returns memory with minimum alignment
25007     given by parameter 1.
25008
25009`assume_aligned'
25010     The `assume_aligned' attribute is used to tell the compiler that
25011     the function return value points to memory, where the returned
25012     pointer minimum alignment is given by the first argument.  If the
25013     attribute has two arguments, the second argument is misalignment
25014     offset.
25015
25016     For instance
25017
25018          void* my_alloc1(size_t) __attribute__((assume_aligned(16)))
25019          void* my_alloc2(size_t) __attribute__((assume_aligned(32, 8)))
25020
25021     declares that `my_alloc1' returns 16-byte aligned pointer and that
25022     `my_alloc2' returns a pointer whose value modulo 32 is equal to 8.
25023
25024`always_inline'
25025     Generally, functions are not inlined unless optimization is
25026     specified.  For functions declared inline, this attribute inlines
25027     the function independent of any restrictions that otherwise apply
25028     to inlining.  Failure to inline such a function is diagnosed as an
25029     error.  Note that if such a function is called indirectly the
25030     compiler may or may not inline it depending on optimization level
25031     and a failure to inline an indirect call may or may not be
25032     diagnosed.
25033
25034`gnu_inline'
25035     This attribute should be used with a function that is also declared
25036     with the `inline' keyword.  It directs GCC to treat the function
25037     as if it were defined in gnu90 mode even when compiling in C99 or
25038     gnu99 mode.
25039
25040     If the function is declared `extern', then this definition of the
25041     function is used only for inlining.  In no case is the function
25042     compiled as a standalone function, not even if you take its address
25043     explicitly.  Such an address becomes an external reference, as if
25044     you had only declared the function, and had not defined it.  This
25045     has almost the effect of a macro.  The way to use this is to put a
25046     function definition in a header file with this attribute, and put
25047     another copy of the function, without `extern', in a library file.
25048     The definition in the header file causes most calls to the
25049     function to be inlined.  If any uses of the function remain, they
25050     refer to the single copy in the library.  Note that the two
25051     definitions of the functions need not be precisely the same,
25052     although if they do not have the same effect your program may
25053     behave oddly.
25054
25055     In C, if the function is neither `extern' nor `static', then the
25056     function is compiled as a standalone function, as well as being
25057     inlined where possible.
25058
25059     This is how GCC traditionally handled functions declared `inline'.
25060     Since ISO C99 specifies a different semantics for `inline', this
25061     function attribute is provided as a transition measure and as a
25062     useful feature in its own right.  This attribute is available in
25063     GCC 4.1.3 and later.  It is available if either of the
25064     preprocessor macros `__GNUC_GNU_INLINE__' or
25065     `__GNUC_STDC_INLINE__' are defined.  *Note An Inline Function is
25066     As Fast As a Macro: Inline.
25067
25068     In C++, this attribute does not depend on `extern' in any way, but
25069     it still requires the `inline' keyword to enable its special
25070     behavior.
25071
25072`artificial'
25073     This attribute is useful for small inline wrappers that if possible
25074     should appear during debugging as a unit.  Depending on the debug
25075     info format it either means marking the function as artificial or
25076     using the caller location for all instructions within the inlined
25077     body.
25078
25079`bank_switch'
25080     When added to an interrupt handler with the M32C port, causes the
25081     prologue and epilogue to use bank switching to preserve the
25082     registers rather than saving them on the stack.
25083
25084`flatten'
25085     Generally, inlining into a function is limited.  For a function
25086     marked with this attribute, every call inside this function is
25087     inlined, if possible.  Whether the function itself is considered
25088     for inlining depends on its size and the current inlining
25089     parameters.
25090
25091`error ("MESSAGE")'
25092     If this attribute is used on a function declaration and a call to
25093     such a function is not eliminated through dead code elimination or
25094     other optimizations, an error that includes MESSAGE is diagnosed.
25095     This is useful for compile-time checking, especially together with
25096     `__builtin_constant_p' and inline functions where checking the
25097     inline function arguments is not possible through `extern char
25098     [(condition) ? 1 : -1];' tricks.  While it is possible to leave
25099     the function undefined and thus invoke a link failure, when using
25100     this attribute the problem is diagnosed earlier and with exact
25101     location of the call even in presence of inline functions or when
25102     not emitting debugging information.
25103
25104`warning ("MESSAGE")'
25105     If this attribute is used on a function declaration and a call to
25106     such a function is not eliminated through dead code elimination or
25107     other optimizations, a warning that includes MESSAGE is diagnosed.
25108     This is useful for compile-time checking, especially together with
25109     `__builtin_constant_p' and inline functions.  While it is possible
25110     to define the function with a message in `.gnu.warning*' section,
25111     when using this attribute the problem is diagnosed earlier and
25112     with exact location of the call even in presence of inline
25113     functions or when not emitting debugging information.
25114
25115`cdecl'
25116     On the x86-32 targets, the `cdecl' attribute causes the compiler to
25117     assume that the calling function pops off the stack space used to
25118     pass arguments.  This is useful to override the effects of the
25119     `-mrtd' switch.
25120
25121`const'
25122     Many functions do not examine any values except their arguments,
25123     and have no effects except the return value.  Basically this is
25124     just slightly more strict class than the `pure' attribute below,
25125     since function is not allowed to read global memory.
25126
25127     Note that a function that has pointer arguments and examines the
25128     data pointed to must _not_ be declared `const'.  Likewise, a
25129     function that calls a non-`const' function usually must not be
25130     `const'.  It does not make sense for a `const' function to return
25131     `void'.
25132
25133`constructor'
25134`destructor'
25135`constructor (PRIORITY)'
25136`destructor (PRIORITY)'
25137     The `constructor' attribute causes the function to be called
25138     automatically before execution enters `main ()'.  Similarly, the
25139     `destructor' attribute causes the function to be called
25140     automatically after `main ()' completes or `exit ()' is called.
25141     Functions with these attributes are useful for initializing data
25142     that is used implicitly during the execution of the program.
25143
25144     You may provide an optional integer priority to control the order
25145     in which constructor and destructor functions are run.  A
25146     constructor with a smaller priority number runs before a
25147     constructor with a larger priority number; the opposite
25148     relationship holds for destructors.  So, if you have a constructor
25149     that allocates a resource and a destructor that deallocates the
25150     same resource, both functions typically have the same priority.
25151     The priorities for constructor and destructor functions are the
25152     same as those specified for namespace-scope C++ objects (*note C++
25153     Attributes::).
25154
25155     These attributes are not currently implemented for Objective-C.
25156
25157`deprecated'
25158`deprecated (MSG)'
25159     The `deprecated' attribute results in a warning if the function is
25160     used anywhere in the source file.  This is useful when identifying
25161     functions that are expected to be removed in a future version of a
25162     program.  The warning also includes the location of the declaration
25163     of the deprecated function, to enable users to easily find further
25164     information about why the function is deprecated, or what they
25165     should do instead.  Note that the warnings only occurs for uses:
25166
25167          int old_fn () __attribute__ ((deprecated));
25168          int old_fn ();
25169          int (*fn_ptr)() = old_fn;
25170
25171     results in a warning on line 3 but not line 2.  The optional MSG
25172     argument, which must be a string, is printed in the warning if
25173     present.
25174
25175     The `deprecated' attribute can also be used for variables and
25176     types (*note Variable Attributes::, *note Type Attributes::.)
25177
25178`disinterrupt'
25179     On Epiphany and MeP targets, this attribute causes the compiler to
25180     emit instructions to disable interrupts for the duration of the
25181     given function.
25182
25183`dllexport'
25184     On Microsoft Windows targets and Symbian OS targets the
25185     `dllexport' attribute causes the compiler to provide a global
25186     pointer to a pointer in a DLL, so that it can be referenced with
25187     the `dllimport' attribute.  On Microsoft Windows targets, the
25188     pointer name is formed by combining `_imp__' and the function or
25189     variable name.
25190
25191     You can use `__declspec(dllexport)' as a synonym for
25192     `__attribute__ ((dllexport))' for compatibility with other
25193     compilers.
25194
25195     On systems that support the `visibility' attribute, this attribute
25196     also implies "default" visibility.  It is an error to explicitly
25197     specify any other visibility.
25198
25199     GCC's default behavior is to emit all inline functions with the
25200     `dllexport' attribute.  Since this can cause object file-size
25201     bloat, you can use `-fno-keep-inline-dllexport', which tells GCC to
25202     ignore the attribute for inlined functions unless the
25203     `-fkeep-inline-functions' flag is used instead.
25204
25205     The attribute is ignored for undefined symbols.
25206
25207     When applied to C++ classes, the attribute marks defined
25208     non-inlined member functions and static data members as exports.
25209     Static consts initialized in-class are not marked unless they are
25210     also defined out-of-class.
25211
25212     For Microsoft Windows targets there are alternative methods for
25213     including the symbol in the DLL's export table such as using a
25214     `.def' file with an `EXPORTS' section or, with GNU ld, using the
25215     `--export-all' linker flag.
25216
25217`dllimport'
25218     On Microsoft Windows and Symbian OS targets, the `dllimport'
25219     attribute causes the compiler to reference a function or variable
25220     via a global pointer to a pointer that is set up by the DLL
25221     exporting the symbol.  The attribute implies `extern'.  On
25222     Microsoft Windows targets, the pointer name is formed by combining
25223     `_imp__' and the function or variable name.
25224
25225     You can use `__declspec(dllimport)' as a synonym for
25226     `__attribute__ ((dllimport))' for compatibility with other
25227     compilers.
25228
25229     On systems that support the `visibility' attribute, this attribute
25230     also implies "default" visibility.  It is an error to explicitly
25231     specify any other visibility.
25232
25233     Currently, the attribute is ignored for inlined functions.  If the
25234     attribute is applied to a symbol _definition_, an error is
25235     reported.  If a symbol previously declared `dllimport' is later
25236     defined, the attribute is ignored in subsequent references, and a
25237     warning is emitted.  The attribute is also overridden by a
25238     subsequent declaration as `dllexport'.
25239
25240     When applied to C++ classes, the attribute marks non-inlined
25241     member functions and static data members as imports.  However, the
25242     attribute is ignored for virtual methods to allow creation of
25243     vtables using thunks.
25244
25245     On the SH Symbian OS target the `dllimport' attribute also has
25246     another affect--it can cause the vtable and run-time type
25247     information for a class to be exported.  This happens when the
25248     class has a dllimported constructor or a non-inline, non-pure
25249     virtual function and, for either of those two conditions, the
25250     class also has an inline constructor or destructor and has a key
25251     function that is defined in the current translation unit.
25252
25253     For Microsoft Windows targets the use of the `dllimport' attribute
25254     on functions is not necessary, but provides a small performance
25255     benefit by eliminating a thunk in the DLL.  The use of the
25256     `dllimport' attribute on imported variables can be avoided by
25257     passing the `--enable-auto-import' switch to the GNU linker.  As
25258     with functions, using the attribute for a variable eliminates a
25259     thunk in the DLL.
25260
25261     One drawback to using this attribute is that a pointer to a
25262     _variable_ marked as `dllimport' cannot be used as a constant
25263     address. However, a pointer to a _function_ with the `dllimport'
25264     attribute can be used as a constant initializer; in this case, the
25265     address of a stub function in the import lib is referenced.  On
25266     Microsoft Windows targets, the attribute can be disabled for
25267     functions by setting the `-mnop-fun-dllimport' flag.
25268
25269`exception'
25270     Use this attribute on the NDS32 target to indicate that the
25271     specified function is an exception handler.  The compiler will
25272     generate corresponding sections for use in an exception handler.
25273
25274`exception_handler'
25275     Use this attribute on the Blackfin to indicate that the specified
25276     function is an exception handler.  The compiler generates function
25277     entry and exit sequences suitable for use in an exception handler
25278     when this attribute is present.
25279
25280`externally_visible'
25281     This attribute, attached to a global variable or function,
25282     nullifies the effect of the `-fwhole-program' command-line option,
25283     so the object remains visible outside the current compilation unit.
25284
25285     If `-fwhole-program' is used together with `-flto' and `gold' is
25286     used as the linker plugin, `externally_visible' attributes are
25287     automatically added to functions (not variable yet due to a
25288     current `gold' issue) that are accessed outside of LTO objects
25289     according to resolution file produced by `gold'.  For other
25290     linkers that cannot generate resolution file, explicit
25291     `externally_visible' attributes are still necessary.
25292
25293`far'
25294     On MeP targets this causes the compiler to use a calling convention
25295     that assumes the called function is too far away for the built-in
25296     addressing modes.
25297
25298`fast_interrupt'
25299     Use this attribute on the M32C and RX ports to indicate that the
25300     specified function is a fast interrupt handler.  This is just like
25301     the `interrupt' attribute, except that `freit' is used to return
25302     instead of `reit'.
25303
25304`fastcall'
25305     On x86-32 targets, the `fastcall' attribute causes the compiler to
25306     pass the first argument (if of integral type) in the register ECX
25307     and the second argument (if of integral type) in the register EDX.
25308     Subsequent and other typed arguments are passed on the stack.  The
25309     called function pops the arguments off the stack.  If the number
25310     of arguments is variable all arguments are pushed on the stack.
25311
25312`thiscall'
25313     On x86-32 targets, the `thiscall' attribute causes the compiler to
25314     pass the first argument (if of integral type) in the register ECX.
25315     Subsequent and other typed arguments are passed on the stack. The
25316     called function pops the arguments off the stack.  If the number
25317     of arguments is variable all arguments are pushed on the stack.
25318     The `thiscall' attribute is intended for C++ non-static member
25319     functions.  As a GCC extension, this calling convention can be
25320     used for C functions and for static member methods.
25321
25322`format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
25323     The `format' attribute specifies that a function takes `printf',
25324     `scanf', `strftime' or `strfmon' style arguments that should be
25325     type-checked against a format string.  For example, the
25326     declaration:
25327
25328          extern int
25329          my_printf (void *my_object, const char *my_format, ...)
25330                __attribute__ ((format (printf, 2, 3)));
25331
25332     causes the compiler to check the arguments in calls to `my_printf'
25333     for consistency with the `printf' style format string argument
25334     `my_format'.
25335
25336     The parameter ARCHETYPE determines how the format string is
25337     interpreted, and should be `printf', `scanf', `strftime',
25338     `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'.  (You can
25339     also use `__printf__', `__scanf__', `__strftime__' or
25340     `__strfmon__'.)  On MinGW targets, `ms_printf', `ms_scanf', and
25341     `ms_strftime' are also present.  ARCHETYPE values such as `printf'
25342     refer to the formats accepted by the system's C runtime library,
25343     while values prefixed with `gnu_' always refer to the formats
25344     accepted by the GNU C Library.  On Microsoft Windows targets,
25345     values prefixed with `ms_' refer to the formats accepted by the
25346     `msvcrt.dll' library.  The parameter STRING-INDEX specifies which
25347     argument is the format string argument (starting from 1), while
25348     FIRST-TO-CHECK is the number of the first argument to check
25349     against the format string.  For functions where the arguments are
25350     not available to be checked (such as `vprintf'), specify the third
25351     parameter as zero.  In this case the compiler only checks the
25352     format string for consistency.  For `strftime' formats, the third
25353     parameter is required to be zero.  Since non-static C++ methods
25354     have an implicit `this' argument, the arguments of such methods
25355     should be counted from two, not one, when giving values for
25356     STRING-INDEX and FIRST-TO-CHECK.
25357
25358     In the example above, the format string (`my_format') is the second
25359     argument of the function `my_print', and the arguments to check
25360     start with the third argument, so the correct parameters for the
25361     format attribute are 2 and 3.
25362
25363     The `format' attribute allows you to identify your own functions
25364     that take format strings as arguments, so that GCC can check the
25365     calls to these functions for errors.  The compiler always (unless
25366     `-ffreestanding' or `-fno-builtin' is used) checks formats for the
25367     standard library functions `printf', `fprintf', `sprintf',
25368     `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and
25369     `vsprintf' whenever such warnings are requested (using
25370     `-Wformat'), so there is no need to modify the header file
25371     `stdio.h'.  In C99 mode, the functions `snprintf', `vsnprintf',
25372     `vscanf', `vfscanf' and `vsscanf' are also checked.  Except in
25373     strictly conforming C standard modes, the X/Open function
25374     `strfmon' is also checked as are `printf_unlocked' and
25375     `fprintf_unlocked'.  *Note Options Controlling C Dialect: C
25376     Dialect Options.
25377
25378     For Objective-C dialects, `NSString' (or `__NSString__') is
25379     recognized in the same context.  Declarations including these
25380     format attributes are parsed for correct syntax, however the
25381     result of checking of such format strings is not yet defined, and
25382     is not carried out by this version of the compiler.
25383
25384     The target may also provide additional types of format checks.
25385     *Note Format Checks Specific to Particular Target Machines: Target
25386     Format Checks.
25387
25388`format_arg (STRING-INDEX)'
25389     The `format_arg' attribute specifies that a function takes a format
25390     string for a `printf', `scanf', `strftime' or `strfmon' style
25391     function and modifies it (for example, to translate it into
25392     another language), so the result can be passed to a `printf',
25393     `scanf', `strftime' or `strfmon' style function (with the
25394     remaining arguments to the format function the same as they would
25395     have been for the unmodified string).  For example, the
25396     declaration:
25397
25398          extern char *
25399          my_dgettext (char *my_domain, const char *my_format)
25400                __attribute__ ((format_arg (2)));
25401
25402     causes the compiler to check the arguments in calls to a `printf',
25403     `scanf', `strftime' or `strfmon' type function, whose format
25404     string argument is a call to the `my_dgettext' function, for
25405     consistency with the format string argument `my_format'.  If the
25406     `format_arg' attribute had not been specified, all the compiler
25407     could tell in such calls to format functions would be that the
25408     format string argument is not constant; this would generate a
25409     warning when `-Wformat-nonliteral' is used, but the calls could
25410     not be checked without the attribute.
25411
25412     The parameter STRING-INDEX specifies which argument is the format
25413     string argument (starting from one).  Since non-static C++ methods
25414     have an implicit `this' argument, the arguments of such methods
25415     should be counted from two.
25416
25417     The `format_arg' attribute allows you to identify your own
25418     functions that modify format strings, so that GCC can check the
25419     calls to `printf', `scanf', `strftime' or `strfmon' type function
25420     whose operands are a call to one of your own function.  The
25421     compiler always treats `gettext', `dgettext', and `dcgettext' in
25422     this manner except when strict ISO C support is requested by
25423     `-ansi' or an appropriate `-std' option, or `-ffreestanding' or
25424     `-fno-builtin' is used.  *Note Options Controlling C Dialect: C
25425     Dialect Options.
25426
25427     For Objective-C dialects, the `format-arg' attribute may refer to
25428     an `NSString' reference for compatibility with the `format'
25429     attribute above.
25430
25431     The target may also allow additional types in `format-arg'
25432     attributes.  *Note Format Checks Specific to Particular Target
25433     Machines: Target Format Checks.
25434
25435`function_vector'
25436     Use this attribute on the H8/300, H8/300H, and H8S to indicate
25437     that the specified function should be called through the function
25438     vector.  Calling a function through the function vector reduces
25439     code size, however; the function vector has a limited size
25440     (maximum 128 entries on the H8/300 and 64 entries on the H8/300H
25441     and H8S) and shares space with the interrupt vector.
25442
25443     On SH2A targets, this attribute declares a function to be called
25444     using the TBR relative addressing mode.  The argument to this
25445     attribute is the entry number of the same function in a vector
25446     table containing all the TBR relative addressable functions.  For
25447     correct operation the TBR must be setup accordingly to point to
25448     the start of the vector table before any functions with this
25449     attribute are invoked.  Usually a good place to do the
25450     initialization is the startup routine.  The TBR relative vector
25451     table can have at max 256 function entries.  The jumps to these
25452     functions are generated using a SH2A specific, non delayed branch
25453     instruction JSR/N @(disp8,TBR).  You must use GAS and GLD from GNU
25454     binutils version 2.7 or later for this attribute to work correctly.
25455
25456     Please refer the example of M16C target, to see the use of this
25457     attribute while declaring a function,
25458
25459     In an application, for a function being called once, this attribute
25460     saves at least 8 bytes of code; and if other successive calls are
25461     being made to the same function, it saves 2 bytes of code per each
25462     of these calls.
25463
25464     On M16C/M32C targets, the `function_vector' attribute declares a
25465     special page subroutine call function. Use of this attribute
25466     reduces the code size by 2 bytes for each call generated to the
25467     subroutine. The argument to the attribute is the vector number
25468     entry from the special page vector table which contains the 16
25469     low-order bits of the subroutine's entry address. Each vector
25470     table has special page number (18 to 255) that is used in `jsrs'
25471     instructions.  Jump addresses of the routines are generated by
25472     adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
25473     M32C targets), to the 2-byte addresses set in the vector table.
25474     Therefore you need to ensure that all the special page vector
25475     routines should get mapped within the address range 0x0F0000 to
25476     0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
25477
25478     In the following example 2 bytes are saved for each call to
25479     function `foo'.
25480
25481          void foo (void) __attribute__((function_vector(0x18)));
25482          void foo (void)
25483          {
25484          }
25485
25486          void bar (void)
25487          {
25488              foo();
25489          }
25490
25491     If functions are defined in one file and are called in another
25492     file, then be sure to write this declaration in both files.
25493
25494     This attribute is ignored for R8C target.
25495
25496`ifunc ("RESOLVER")'
25497     The `ifunc' attribute is used to mark a function as an indirect
25498     function using the STT_GNU_IFUNC symbol type extension to the ELF
25499     standard.  This allows the resolution of the symbol value to be
25500     determined dynamically at load time, and an optimized version of
25501     the routine can be selected for the particular processor or other
25502     system characteristics determined then.  To use this attribute,
25503     first define the implementation functions available, and a
25504     resolver function that returns a pointer to the selected
25505     implementation function.  The implementation functions'
25506     declarations must match the API of the function being implemented,
25507     the resolver's declaration is be a function returning pointer to
25508     void function returning void:
25509
25510          void *my_memcpy (void *dst, const void *src, size_t len)
25511          {
25512            ...
25513          }
25514
25515          static void (*resolve_memcpy (void)) (void)
25516          {
25517            return my_memcpy; // we'll just always select this routine
25518          }
25519
25520     The exported header file declaring the function the user calls
25521     would contain:
25522
25523          extern void *memcpy (void *, const void *, size_t);
25524
25525     allowing the user to call this as a regular function, unaware of
25526     the implementation.  Finally, the indirect function needs to be
25527     defined in the same translation unit as the resolver function:
25528
25529          void *memcpy (void *, const void *, size_t)
25530               __attribute__ ((ifunc ("resolve_memcpy")));
25531
25532     Indirect functions cannot be weak.  Binutils version 2.20.1 or
25533     higher and GNU C Library version 2.11.1 are required to use this
25534     feature.
25535
25536`interrupt'
25537     Use this attribute on the ARC, ARM, AVR, CR16, Epiphany, M32C,
25538     M32R/D, m68k, MeP, MIPS, MSP430, NDS32, RL78, RX, Visium and
25539     Xstormy16 ports to indicate that the specified function is an
25540     interrupt handler.  The compiler generates function entry and exit
25541     sequences suitable for use in an interrupt handler when this
25542     attribute is present.  With Epiphany targets it may also generate
25543     a special section with code to initialize the interrupt vector
25544     table.
25545
25546     Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S,
25547     MicroBlaze, and SH processors can be specified via the
25548     `interrupt_handler' attribute.
25549
25550     Note, on the ARC, you must specify the kind of interrupt to be
25551     handled in a parameter to the interrupt attribute like this:
25552
25553          void f () __attribute__ ((interrupt ("ilink1")));
25554
25555     Permissible values for this parameter are: `ilink1' and `ilink2'.
25556
25557     Note, on the AVR, the hardware globally disables interrupts when an
25558     interrupt is executed.  The first instruction of an interrupt
25559     handler declared with this attribute is a `SEI' instruction to
25560     re-enable interrupts.  See also the `signal' function attribute
25561     that does not insert a `SEI' instruction.  If both `signal' and
25562     `interrupt' are specified for the same function, `signal' is
25563     silently ignored.
25564
25565     Note, for the ARM, you can specify the kind of interrupt to be
25566     handled by adding an optional parameter to the interrupt attribute
25567     like this:
25568
25569          void f () __attribute__ ((interrupt ("IRQ")));
25570
25571     Permissible values for this parameter are: `IRQ', `FIQ', `SWI',
25572     `ABORT' and `UNDEF'.
25573
25574     On ARMv7-M the interrupt type is ignored, and the attribute means
25575     the function may be called with a word-aligned stack pointer.
25576
25577     Note, for the MSP430 you can provide an argument to the interrupt
25578     attribute which specifies a name or number.  If the argument is a
25579     number it indicates the slot in the interrupt vector table (0 -
25580     31) to which this handler should be assigned.  If the argument is
25581     a name it is treated as a symbolic name for the vector slot.
25582     These names should match up with appropriate entries in the linker
25583     script.  By default the names `watchdog' for vector 26, `nmi' for
25584     vector 30 and `reset' for vector 31 are recognized.
25585
25586     You can also use the following function attributes to modify how
25587     normal functions interact with interrupt functions:
25588
25589    `critical'
25590          Critical functions disable interrupts upon entry and restore
25591          the previous interrupt state upon exit.  Critical functions
25592          cannot also have the `naked' or `reentrant' attributes.  They
25593          can have the `interrupt' attribute.
25594
25595    `reentrant'
25596          Reentrant functions disable interrupts upon entry and enable
25597          them upon exit.  Reentrant functions cannot also have the
25598          `naked' or `critical' attributes.  They can have the
25599          `interrupt' attribute.
25600
25601    `wakeup'
25602          This attribute only applies to interrupt functions.  It is
25603          silently ignored if applied to a non-interrupt function.  A
25604          wakeup interrupt function will rouse the processor from any
25605          low-power state that it might be in when the function exits.
25606
25607
25608     On Epiphany targets one or more optional parameters can be added
25609     like this:
25610
25611          void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
25612
25613     Permissible values for these parameters are: `reset',
25614     `software_exception', `page_miss', `timer0', `timer1', `message',
25615     `dma0', `dma1', `wand' and `swi'.  Multiple parameters indicate
25616     that multiple entries in the interrupt vector table should be
25617     initialized for this function, i.e. for each parameter NAME, a
25618     jump to the function is emitted in the section ivt_entry_NAME.
25619     The parameter(s) may be omitted entirely, in which case no
25620     interrupt vector table entry is provided.
25621
25622     Note, on Epiphany targets, interrupts are enabled inside the
25623     function unless the `disinterrupt' attribute is also specified.
25624
25625     On Epiphany targets, you can also use the following attribute to
25626     modify the behavior of an interrupt handler:
25627    `forwarder_section'
25628          The interrupt handler may be in external memory which cannot
25629          be reached by a branch instruction, so generate a local
25630          memory trampoline to transfer control.  The single parameter
25631          identifies the section where the trampoline is placed.
25632
25633     The following examples are all valid uses of these attributes on
25634     Epiphany targets:
25635          void __attribute__ ((interrupt)) universal_handler ();
25636          void __attribute__ ((interrupt ("dma1"))) dma1_handler ();
25637          void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
25638          void __attribute__ ((interrupt ("timer0"), disinterrupt))
25639            fast_timer_handler ();
25640          void __attribute__ ((interrupt ("dma0, dma1"), forwarder_section ("tramp")))
25641            external_dma_handler ();
25642
25643     On MIPS targets, you can use the following attributes to modify
25644     the behavior of an interrupt handler:
25645    `use_shadow_register_set'
25646          Assume that the handler uses a shadow register set, instead of
25647          the main general-purpose registers.
25648
25649    `keep_interrupts_masked'
25650          Keep interrupts masked for the whole function.  Without this
25651          attribute, GCC tries to reenable interrupts for as much of
25652          the function as it can.
25653
25654    `use_debug_exception_return'
25655          Return using the `deret' instruction.  Interrupt handlers
25656          that don't have this attribute return using `eret' instead.
25657
25658     You can use any combination of these attributes, as shown below:
25659          void __attribute__ ((interrupt)) v0 ();
25660          void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
25661          void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
25662          void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
25663          void __attribute__ ((interrupt, use_shadow_register_set,
25664                               keep_interrupts_masked)) v4 ();
25665          void __attribute__ ((interrupt, use_shadow_register_set,
25666                               use_debug_exception_return)) v5 ();
25667          void __attribute__ ((interrupt, keep_interrupts_masked,
25668                               use_debug_exception_return)) v6 ();
25669          void __attribute__ ((interrupt, use_shadow_register_set,
25670                               keep_interrupts_masked,
25671                               use_debug_exception_return)) v7 ();
25672
25673     On NDS32 target, this attribute indicates that the specified
25674     function is an interrupt handler.  The compiler generates
25675     corresponding sections for use in an interrupt handler.  You can
25676     use the following attributes to modify the behavior:
25677    `nested'
25678          This interrupt service routine is interruptible.
25679
25680    `not_nested'
25681          This interrupt service routine is not interruptible.
25682
25683    `nested_ready'
25684          This interrupt service routine is interruptible after
25685          `PSW.GIE' (global interrupt enable) is set.  This allows
25686          interrupt service routine to finish some short critical code
25687          before enabling interrupts.
25688
25689    `save_all'
25690          The system will help save all registers into stack before
25691          entering interrupt handler.
25692
25693    `partial_save'
25694          The system will help save caller registers into stack before
25695          entering interrupt handler.
25696
25697     On RL78, use `brk_interrupt' instead of `interrupt' for handlers
25698     intended to be used with the `BRK' opcode (i.e. those that must
25699     end with `RETB' instead of `RETI').
25700
25701     On RX targets, you may specify one or more vector numbers as
25702     arguments to the attribute, as well as naming an alternate table
25703     name.  Parameters are handled sequentially, so one handler can be
25704     assigned to multiple entries in multiple tables.  One may also
25705     pass the magic string `"$default"' which causes the function to be
25706     used for any unfilled slots in the current table.
25707
25708     This example shows a simple assignment of a function to one vector
25709     in the default table (note that preprocessor macros may be used for
25710     chip-specific symbolic vector names):
25711          void __attribute__ ((interrupt (5))) txd1_handler ();
25712
25713     This example assigns a function to two slots in the default table
25714     (using preprocessor macros defined elsewhere) and makes it the
25715     default for the `dct' table:
25716          void __attribute__ ((interrupt (RXD1_VECT,RXD2_VECT,"dct","$default")))
25717          	txd1_handler ();
25718
25719`interrupt_handler'
25720     Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S,
25721     and SH to indicate that the specified function is an interrupt
25722     handler.  The compiler generates function entry and exit sequences
25723     suitable for use in an interrupt handler when this attribute is
25724     present.
25725
25726`interrupt_thread'
25727     Use this attribute on fido, a subarchitecture of the m68k, to
25728     indicate that the specified function is an interrupt handler that
25729     is designed to run as a thread.  The compiler omits generate
25730     prologue/epilogue sequences and replaces the return instruction
25731     with a `sleep' instruction.  This attribute is available only on
25732     fido.
25733
25734`isr'
25735     Use this attribute on ARM to write Interrupt Service Routines.
25736     This is an alias to the `interrupt' attribute above.
25737
25738`kspisusp'
25739     When used together with `interrupt_handler', `exception_handler'
25740     or `nmi_handler', code is generated to load the stack pointer from
25741     the USP register in the function prologue.
25742
25743`l1_text'
25744     This attribute specifies a function to be placed into L1
25745     Instruction SRAM. The function is put into a specific section
25746     named `.l1.text'.  With `-mfdpic', function calls with a such
25747     function as the callee or caller uses inlined PLT.
25748
25749`l2'
25750     On the Blackfin, this attribute specifies a function to be placed
25751     into L2 SRAM. The function is put into a specific section named
25752     `.l1.text'. With `-mfdpic', callers of such functions use an
25753     inlined PLT.
25754
25755`leaf'
25756     Calls to external functions with this attribute must return to the
25757     current compilation unit only by return or by exception handling.
25758     In particular, leaf functions are not allowed to call callback
25759     function passed to it from the current compilation unit or
25760     directly call functions exported by the unit or longjmp into the
25761     unit.  Leaf function might still call functions from other
25762     compilation units and thus they are not necessarily leaf in the
25763     sense that they contain no function calls at all.
25764
25765     The attribute is intended for library functions to improve
25766     dataflow analysis.  The compiler takes the hint that any data not
25767     escaping the current compilation unit can not be used or modified
25768     by the leaf function.  For example, the `sin' function is a leaf
25769     function, but `qsort' is not.
25770
25771     Note that leaf functions might invoke signals and signal handlers
25772     might be defined in the current compilation unit and use static
25773     variables.  The only compliant way to write such a signal handler
25774     is to declare such variables `volatile'.
25775
25776     The attribute has no effect on functions defined within the
25777     current compilation unit.  This is to allow easy merging of
25778     multiple compilation units into one, for example, by using the
25779     link-time optimization.  For this reason the attribute is not
25780     allowed on types to annotate indirect calls.
25781
25782`long_call'
25783`medium_call'
25784`short_call'
25785     These attributes specify how a particular function is called on
25786     ARC, ARM and Epiphany - with `medium_call' being specific to ARC.
25787     These attributes override the `-mlong-calls' (*note ARM Options::
25788     and *note ARC Options::) and `-mmedium-calls' (*note ARC Options::)
25789     command-line switches and `#pragma long_calls' settings.  For ARM,
25790     the `long_call' attribute indicates that the function might be far
25791     away from the call site and require a different (more expensive)
25792     calling sequence.   The `short_call' attribute always places the
25793     offset to the function from the call site into the `BL'
25794     instruction directly.
25795
25796     For ARC, a function marked with the `long_call' attribute is
25797     always called using register-indirect jump-and-link instructions,
25798     thereby enabling the called function to be placed anywhere within
25799     the 32-bit address space.  A function marked with the `medium_call'
25800     attribute will always be close enough to be called with an
25801     unconditional branch-and-link instruction, which has a 25-bit
25802     offset from the call site.  A function marked with the `short_call'
25803     attribute will always be close enough to be called with a
25804     conditional branch-and-link instruction, which has a 21-bit offset
25805     from the call site.
25806
25807`longcall'
25808`shortcall'
25809     On Blackfin and PowerPC, the `longcall' attribute indicates that
25810     the function might be far away from the call site and require a
25811     different (more expensive) calling sequence.  The `shortcall'
25812     attribute indicates that the function is always close enough for
25813     the shorter calling sequence to be used.  These attributes
25814     override both the `-mlongcall' switch and, on the RS/6000 and
25815     PowerPC, the `#pragma longcall' setting.
25816
25817     *Note RS/6000 and PowerPC Options::, for more information on
25818     whether long calls are necessary.
25819
25820`long_call'
25821`near'
25822`far'
25823     These attributes specify how a particular function is called on
25824     MIPS.  The attributes override the `-mlong-calls' (*note MIPS
25825     Options::) command-line switch.  The `long_call' and `far'
25826     attributes are synonyms, and cause the compiler to always call the
25827     function by first loading its address into a register, and then
25828     using the contents of that register.  The `near' attribute has the
25829     opposite effect; it specifies that non-PIC calls should be made
25830     using the more efficient `jal' instruction.
25831
25832`malloc'
25833     This tells the compiler that a function is `malloc'-like, i.e.,
25834     that the pointer P returned by the function cannot alias any other
25835     pointer valid when the function returns, and moreover no pointers
25836     to valid objects occur in any storage addressed by P.
25837
25838     Using this attribute can improve optimization.  Functions like
25839     `malloc' and `calloc' have this property because they return a
25840     pointer to uninitialized or zeroed-out storage.  However, functions
25841     like `realloc' do not have this property, as they can return a
25842     pointer to storage containing pointers.
25843
25844`mips16'
25845`nomips16'
25846     On MIPS targets, you can use the `mips16' and `nomips16' function
25847     attributes to locally select or turn off MIPS16 code generation.
25848     A function with the `mips16' attribute is emitted as MIPS16 code,
25849     while MIPS16 code generation is disabled for functions with the
25850     `nomips16' attribute.  These attributes override the `-mips16' and
25851     `-mno-mips16' options on the command line (*note MIPS Options::).
25852
25853     When compiling files containing mixed MIPS16 and non-MIPS16 code,
25854     the preprocessor symbol `__mips16' reflects the setting on the
25855     command line, not that within individual functions.  Mixed MIPS16
25856     and non-MIPS16 code may interact badly with some GCC extensions
25857     such as `__builtin_apply' (*note Constructing Calls::).
25858
25859`micromips, MIPS'
25860`nomicromips, MIPS'
25861     On MIPS targets, you can use the `micromips' and `nomicromips'
25862     function attributes to locally select or turn off microMIPS code
25863     generation.  A function with the `micromips' attribute is emitted
25864     as microMIPS code, while microMIPS code generation is disabled for
25865     functions with the `nomicromips' attribute.  These attributes
25866     override the `-mmicromips' and `-mno-micromips' options on the
25867     command line (*note MIPS Options::).
25868
25869     When compiling files containing mixed microMIPS and non-microMIPS
25870     code, the preprocessor symbol `__mips_micromips' reflects the
25871     setting on the command line, not that within individual functions.
25872     Mixed microMIPS and non-microMIPS code may interact badly with
25873     some GCC extensions such as `__builtin_apply' (*note Constructing
25874     Calls::).
25875
25876`model (MODEL-NAME)'
25877     On the M32R/D, use this attribute to set the addressability of an
25878     object, and of the code generated for a function.  The identifier
25879     MODEL-NAME is one of `small', `medium', or `large', representing
25880     each of the code models.
25881
25882     Small model objects live in the lower 16MB of memory (so that their
25883     addresses can be loaded with the `ld24' instruction), and are
25884     callable with the `bl' instruction.
25885
25886     Medium model objects may live anywhere in the 32-bit address space
25887     (the compiler generates `seth/add3' instructions to load their
25888     addresses), and are callable with the `bl' instruction.
25889
25890     Large model objects may live anywhere in the 32-bit address space
25891     (the compiler generates `seth/add3' instructions to load their
25892     addresses), and may not be reachable with the `bl' instruction
25893     (the compiler generates the much slower `seth/add3/jl' instruction
25894     sequence).
25895
25896`ms_abi'
25897`sysv_abi'
25898     On 32-bit and 64-bit x86 targets, you can use an ABI attribute to
25899     indicate which calling convention should be used for a function.
25900     The `ms_abi' attribute tells the compiler to use the Microsoft ABI,
25901     while the `sysv_abi' attribute tells the compiler to use the ABI
25902     used on GNU/Linux and other systems.  The default is to use the
25903     Microsoft ABI when targeting Windows.  On all other systems, the
25904     default is the x86/AMD ABI.
25905
25906     Note, the `ms_abi' attribute for Microsoft Windows 64-bit targets
25907     currently requires the `-maccumulate-outgoing-args' option.
25908
25909`callee_pop_aggregate_return (NUMBER)'
25910     On x86-32 targets, you can use this attribute to control how
25911     aggregates are returned in memory.  If the caller is responsible
25912     for popping the hidden pointer together with the rest of the
25913     arguments, specify NUMBER equal to zero.  If callee is responsible
25914     for popping the hidden pointer, specify NUMBER equal to one.
25915
25916     The default x86-32 ABI assumes that the callee pops the stack for
25917     hidden pointer.  However, on x86-32 Microsoft Windows targets, the
25918     compiler assumes that the caller pops the stack for hidden pointer.
25919
25920`ms_hook_prologue'
25921     On 32-bit and 64-bit x86 targets, you can use this function
25922     attribute to make GCC generate the "hot-patching" function
25923     prologue used in Win32 API functions in Microsoft Windows XP
25924     Service Pack 2 and newer.
25925
25926`hotpatch (HALFWORDS-BEFORE-FUNCTION-LABEL,HALFWORDS-AFTER-FUNCTION-LABEL)'
25927     On S/390 System z targets, you can use this function attribute to
25928     make GCC generate a "hot-patching" function prologue.  If the
25929     `-mhotpatch=' command-line option is used at the same time, the
25930     `hotpatch' attribute takes precedence.  The first of the two
25931     arguments specifies the number of halfwords to be added before the
25932     function label.  A second argument can be used to specify the
25933     number of halfwords to be added after the function label.  For
25934     both arguments the maximum allowed value is 1000000.
25935
25936     If both arguments are zero, hotpatching is disabled.
25937
25938`naked'
25939     This attribute is available on the ARM, AVR, MCORE, MSP430, NDS32,
25940     RL78, RX and SPU ports.  It allows the compiler to construct the
25941     requisite function declaration, while allowing the body of the
25942     function to be assembly code. The specified function will not have
25943     prologue/epilogue sequences generated by the compiler. Only basic
25944     `asm' statements can safely be included in naked functions (*note
25945     Basic Asm::). While using extended `asm' or a mixture of basic
25946     `asm' and C code may appear to work, they cannot be depended upon
25947     to work reliably and are not supported.
25948
25949`near'
25950     On MeP targets this attribute causes the compiler to assume the
25951     called function is close enough to use the normal calling
25952     convention, overriding the `-mtf' command-line option.
25953
25954`nesting'
25955     Use this attribute together with `interrupt_handler',
25956     `exception_handler' or `nmi_handler' to indicate that the function
25957     entry code should enable nested interrupts or exceptions.
25958
25959`nmi_handler'
25960     Use this attribute on the Blackfin to indicate that the specified
25961     function is an NMI handler.  The compiler generates function entry
25962     and exit sequences suitable for use in an NMI handler when this
25963     attribute is present.
25964
25965`nocompression'
25966     On MIPS targets, you can use the `nocompression' function attribute
25967     to locally turn off MIPS16 and microMIPS code generation.  This
25968     attribute overrides the `-mips16' and `-mmicromips' options on the
25969     command line (*note MIPS Options::).
25970
25971`no_instrument_function'
25972     If `-finstrument-functions' is given, profiling function calls are
25973     generated at entry and exit of most user-compiled functions.
25974     Functions with this attribute are not so instrumented.
25975
25976`no_split_stack'
25977     If `-fsplit-stack' is given, functions have a small prologue which
25978     decides whether to split the stack.  Functions with the
25979     `no_split_stack' attribute do not have that prologue, and thus may
25980     run with only a small amount of stack space available.
25981
25982`stack_protect'
25983     This function attribute make a stack protection of the function if
25984     flags `fstack-protector' or `fstack-protector-strong' or
25985     `fstack-protector-explicit' are set.
25986
25987`noinline'
25988     This function attribute prevents a function from being considered
25989     for inlining.  If the function does not have side-effects, there
25990     are optimizations other than inlining that cause function calls to
25991     be optimized away, although the function call is live.  To keep
25992     such calls from being optimized away, put
25993          asm ("");
25994
25995     (*note Extended Asm::) in the called function, to serve as a
25996     special side-effect.
25997
25998`noclone'
25999     This function attribute prevents a function from being considered
26000     for cloning--a mechanism that produces specialized copies of
26001     functions and which is (currently) performed by interprocedural
26002     constant propagation.
26003
26004`no_icf'
26005     This function attribute prevents a functions from being merged
26006     with another semantically equivalent function.
26007
26008`nonnull (ARG-INDEX, ...)'
26009     The `nonnull' attribute specifies that some function parameters
26010     should be non-null pointers.  For instance, the declaration:
26011
26012          extern void *
26013          my_memcpy (void *dest, const void *src, size_t len)
26014                  __attribute__((nonnull (1, 2)));
26015
26016     causes the compiler to check that, in calls to `my_memcpy',
26017     arguments DEST and SRC are non-null.  If the compiler determines
26018     that a null pointer is passed in an argument slot marked as
26019     non-null, and the `-Wnonnull' option is enabled, a warning is
26020     issued.  The compiler may also choose to make optimizations based
26021     on the knowledge that certain function arguments will never be
26022     null.
26023
26024     If no argument index list is given to the `nonnull' attribute, all
26025     pointer arguments are marked as non-null.  To illustrate, the
26026     following declaration is equivalent to the previous example:
26027
26028          extern void *
26029          my_memcpy (void *dest, const void *src, size_t len)
26030                  __attribute__((nonnull));
26031
26032`no_reorder'
26033     Do not reorder functions or variables marked `no_reorder' against
26034     each other or top level assembler statements the executable.  The
26035     actual order in the program will depend on the linker command
26036     line. Static variables marked like this are also not removed.
26037     This has a similar effect as the `-fno-toplevel-reorder' option,
26038     but only applies to the marked symbols.
26039
26040`returns_nonnull'
26041     The `returns_nonnull' attribute specifies that the function return
26042     value should be a non-null pointer.  For instance, the declaration:
26043
26044          extern void *
26045          mymalloc (size_t len) __attribute__((returns_nonnull));
26046
26047     lets the compiler optimize callers based on the knowledge that the
26048     return value will never be null.
26049
26050`noreturn'
26051     A few standard library functions, such as `abort' and `exit',
26052     cannot return.  GCC knows this automatically.  Some programs define
26053     their own functions that never return.  You can declare them
26054     `noreturn' to tell the compiler this fact.  For example,
26055
26056          void fatal () __attribute__ ((noreturn));
26057
26058          void
26059          fatal (/* ... */)
26060          {
26061            /* ... */ /* Print error message. */ /* ... */
26062            exit (1);
26063          }
26064
26065     The `noreturn' keyword tells the compiler to assume that `fatal'
26066     cannot return.  It can then optimize without regard to what would
26067     happen if `fatal' ever did return.  This makes slightly better
26068     code.  More importantly, it helps avoid spurious warnings of
26069     uninitialized variables.
26070
26071     The `noreturn' keyword does not affect the exceptional path when
26072     that applies: a `noreturn'-marked function may still return to the
26073     caller by throwing an exception or calling `longjmp'.
26074
26075     Do not assume that registers saved by the calling function are
26076     restored before calling the `noreturn' function.
26077
26078     It does not make sense for a `noreturn' function to have a return
26079     type other than `void'.
26080
26081`nothrow'
26082     The `nothrow' attribute is used to inform the compiler that a
26083     function cannot throw an exception.  For example, most functions in
26084     the standard C library can be guaranteed not to throw an exception
26085     with the notable exceptions of `qsort' and `bsearch' that take
26086     function pointer arguments.
26087
26088`nosave_low_regs'
26089     Use this attribute on SH targets to indicate that an
26090     `interrupt_handler' function should not save and restore registers
26091     R0..R7.  This can be used on SH3* and SH4* targets that have a
26092     second R0..R7 register bank for non-reentrant interrupt handlers.
26093
26094`optimize'
26095     The `optimize' attribute is used to specify that a function is to
26096     be compiled with different optimization options than specified on
26097     the command line.  Arguments can either be numbers or strings.
26098     Numbers are assumed to be an optimization level.  Strings that
26099     begin with `O' are assumed to be an optimization option, while
26100     other options are assumed to be used with a `-f' prefix.  You can
26101     also use the `#pragma GCC optimize' pragma to set the optimization
26102     options that affect more than one function.  *Note Function
26103     Specific Option Pragmas::, for details about the `#pragma GCC
26104     optimize' pragma.
26105
26106     This can be used for instance to have frequently-executed functions
26107     compiled with more aggressive optimization options that produce
26108     faster and larger code, while other functions can be compiled with
26109     less aggressive options.
26110
26111`OS_main'
26112`OS_task'
26113     On AVR, functions with the `OS_main' or `OS_task' attribute do not
26114     save/restore any call-saved register in their prologue/epilogue.
26115
26116     The `OS_main' attribute can be used when there _is guarantee_ that
26117     interrupts are disabled at the time when the function is entered.
26118     This saves resources when the stack pointer has to be changed to
26119     set up a frame for local variables.
26120
26121     The `OS_task' attribute can be used when there is _no guarantee_
26122     that interrupts are disabled at that time when the function is
26123     entered like for, e.g. task functions in a multi-threading
26124     operating system. In that case, changing the stack pointer
26125     register is guarded by save/clear/restore of the global interrupt
26126     enable flag.
26127
26128     The differences to the `naked' function attribute are:
26129        * `naked' functions do not have a return instruction whereas
26130          `OS_main' and `OS_task' functions have a `RET' or `RETI'
26131          return instruction.
26132
26133        * `naked' functions do not set up a frame for local variables
26134          or a frame pointer whereas `OS_main' and `OS_task' do this as
26135          needed.
26136
26137`pcs'
26138     The `pcs' attribute can be used to control the calling convention
26139     used for a function on ARM.  The attribute takes an argument that
26140     specifies the calling convention to use.
26141
26142     When compiling using the AAPCS ABI (or a variant of it) then valid
26143     values for the argument are `"aapcs"' and `"aapcs-vfp"'.  In order
26144     to use a variant other than `"aapcs"' then the compiler must be
26145     permitted to use the appropriate co-processor registers (i.e., the
26146     VFP registers must be available in order to use `"aapcs-vfp"').
26147     For example,
26148
26149          /* Argument passed in r0, and result returned in r0+r1.  */
26150          double f2d (float) __attribute__((pcs("aapcs")));
26151
26152     Variadic functions always use the `"aapcs"' calling convention and
26153     the compiler rejects attempts to specify an alternative.
26154
26155`pure'
26156     Many functions have no effects except the return value and their
26157     return value depends only on the parameters and/or global
26158     variables.  Such a function can be subject to common subexpression
26159     elimination and loop optimization just as an arithmetic operator
26160     would be.  These functions should be declared with the attribute
26161     `pure'.  For example,
26162
26163          int square (int) __attribute__ ((pure));
26164
26165     says that the hypothetical function `square' is safe to call fewer
26166     times than the program says.
26167
26168     Some of common examples of pure functions are `strlen' or `memcmp'.
26169     Interesting non-pure functions are functions with infinite loops
26170     or those depending on volatile memory or other system resource,
26171     that may change between two consecutive calls (such as `feof' in a
26172     multithreading environment).
26173
26174`hot'
26175     The `hot' attribute on a function is used to inform the compiler
26176     that the function is a hot spot of the compiled program.  The
26177     function is optimized more aggressively and on many targets it is
26178     placed into a special subsection of the text section so all hot
26179     functions appear close together, improving locality.
26180
26181     When profile feedback is available, via `-fprofile-use', hot
26182     functions are automatically detected and this attribute is ignored.
26183
26184`cold'
26185     The `cold' attribute on functions is used to inform the compiler
26186     that the function is unlikely to be executed.  The function is
26187     optimized for size rather than speed and on many targets it is
26188     placed into a special subsection of the text section so all cold
26189     functions appear close together, improving code locality of
26190     non-cold parts of program.  The paths leading to calls of cold
26191     functions within code are marked as unlikely by the branch
26192     prediction mechanism.  It is thus useful to mark functions used to
26193     handle unlikely conditions, such as `perror', as cold to improve
26194     optimization of hot functions that do call marked functions in
26195     rare occasions.
26196
26197     When profile feedback is available, via `-fprofile-use', cold
26198     functions are automatically detected and this attribute is ignored.
26199
26200`no_sanitize_address'
26201`no_address_safety_analysis'
26202     The `no_sanitize_address' attribute on functions is used to inform
26203     the compiler that it should not instrument memory accesses in the
26204     function when compiling with the `-fsanitize=address' option.  The
26205     `no_address_safety_analysis' is a deprecated alias of the
26206     `no_sanitize_address' attribute, new code should use
26207     `no_sanitize_address'.
26208
26209`no_sanitize_thread'
26210     The `no_sanitize_thread' attribute on functions is used to inform
26211     the compiler that it should not instrument memory accesses in the
26212     function when compiling with the `-fsanitize=thread' option.
26213
26214`no_sanitize_undefined'
26215     The `no_sanitize_undefined' attribute on functions is used to
26216     inform the compiler that it should not check for undefined behavior
26217     in the function when compiling with the `-fsanitize=undefined'
26218     option.
26219
26220`bnd_legacy'
26221     The `bnd_legacy' attribute on functions is used to inform the
26222     compiler that the function should not be instrumented when compiled
26223     with the `-fcheck-pointer-bounds' option.
26224
26225`bnd_instrument'
26226     The `bnd_instrument' attribute on functions is used to inform the
26227     compiler that the function should be instrumented when compiled
26228     with the `-fchkp-instrument-marked-only' option.
26229
26230`regparm (NUMBER)'
26231     On x86-32 targets, the `regparm' attribute causes the compiler to
26232     pass arguments number one to NUMBER if they are of integral type
26233     in registers EAX, EDX, and ECX instead of on the stack.  Functions
26234     that take a variable number of arguments continue to be passed all
26235     of their arguments on the stack.
26236
26237     Beware that on some ELF systems this attribute is unsuitable for
26238     global functions in shared libraries with lazy binding (which is
26239     the default).  Lazy binding sends the first call via resolving
26240     code in the loader, which might assume EAX, EDX and ECX can be
26241     clobbered, as per the standard calling conventions.  Solaris 8 is
26242     affected by this.  Systems with the GNU C Library version 2.1 or
26243     higher and FreeBSD are believed to be safe since the loaders there
26244     save EAX, EDX and ECX.  (Lazy binding can be disabled with the
26245     linker or the loader if desired, to avoid the problem.)
26246
26247`reset'
26248     Use this attribute on the NDS32 target to indicate that the
26249     specified function is a reset handler.  The compiler will generate
26250     corresponding sections for use in a reset handler.  You can use
26251     the following attributes to provide extra exception handling:
26252    `nmi'
26253          Provide a user-defined function to handle NMI exception.
26254
26255    `warm'
26256          Provide a user-defined function to handle warm reset
26257          exception.
26258
26259`sseregparm'
26260     On x86-32 targets with SSE support, the `sseregparm' attribute
26261     causes the compiler to pass up to 3 floating-point arguments in
26262     SSE registers instead of on the stack.  Functions that take a
26263     variable number of arguments continue to pass all of their
26264     floating-point arguments on the stack.
26265
26266`force_align_arg_pointer'
26267     On x86 targets, the `force_align_arg_pointer' attribute may be
26268     applied to individual function definitions, generating an alternate
26269     prologue and epilogue that realigns the run-time stack if
26270     necessary.  This supports mixing legacy codes that run with a
26271     4-byte aligned stack with modern codes that keep a 16-byte stack
26272     for SSE compatibility.
26273
26274`renesas'
26275     On SH targets this attribute specifies that the function or struct
26276     follows the Renesas ABI.
26277
26278`resbank'
26279     On the SH2A target, this attribute enables the high-speed register
26280     saving and restoration using a register bank for
26281     `interrupt_handler' routines.  Saving to the bank is performed
26282     automatically after the CPU accepts an interrupt that uses a
26283     register bank.
26284
26285     The nineteen 32-bit registers comprising general register R0 to
26286     R14, control register GBR, and system registers MACH, MACL, and PR
26287     and the vector table address offset are saved into a register
26288     bank.  Register banks are stacked in first-in last-out (FILO)
26289     sequence.  Restoration from the bank is executed by issuing a
26290     RESBANK instruction.
26291
26292`returns_twice'
26293     The `returns_twice' attribute tells the compiler that a function
26294     may return more than one time.  The compiler ensures that all
26295     registers are dead before calling such a function and emits a
26296     warning about the variables that may be clobbered after the second
26297     return from the function.  Examples of such functions are `setjmp'
26298     and `vfork'.  The `longjmp'-like counterpart of such function, if
26299     any, might need to be marked with the `noreturn' attribute.
26300
26301`saveall'
26302     Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to
26303     indicate that all registers except the stack pointer should be
26304     saved in the prologue regardless of whether they are used or not.
26305
26306`save_volatiles'
26307     Use this attribute on the MicroBlaze to indicate that the function
26308     is an interrupt handler.  All volatile registers (in addition to
26309     non-volatile registers) are saved in the function prologue.  If
26310     the function is a leaf function, only volatiles used by the
26311     function are saved.  A normal function return is generated instead
26312     of a return from interrupt.
26313
26314`break_handler'
26315     Use this attribute on the MicroBlaze ports to indicate that the
26316     specified function is a break handler.  The compiler generates
26317     function entry and exit sequences suitable for use in an break
26318     handler when this attribute is present. The return from
26319     `break_handler' is done through the `rtbd' instead of `rtsd'.
26320
26321          void f () __attribute__ ((break_handler));
26322
26323`section ("SECTION-NAME")'
26324     Normally, the compiler places the code it generates in the `text'
26325     section.  Sometimes, however, you need additional sections, or you
26326     need certain particular functions to appear in special sections.
26327     The `section' attribute specifies that a function lives in a
26328     particular section.  For example, the declaration:
26329
26330          extern void foobar (void) __attribute__ ((section ("bar")));
26331
26332     puts the function `foobar' in the `bar' section.
26333
26334     Some file formats do not support arbitrary sections so the
26335     `section' attribute is not available on all platforms.  If you
26336     need to map the entire contents of a module to a particular
26337     section, consider using the facilities of the linker instead.
26338
26339`sentinel'
26340     This function attribute ensures that a parameter in a function
26341     call is an explicit `NULL'.  The attribute is only valid on
26342     variadic functions.  By default, the sentinel is located at
26343     position zero, the last parameter of the function call.  If an
26344     optional integer position argument P is supplied to the attribute,
26345     the sentinel must be located at position P counting backwards from
26346     the end of the argument list.
26347
26348          __attribute__ ((sentinel))
26349          is equivalent to
26350          __attribute__ ((sentinel(0)))
26351
26352     The attribute is automatically set with a position of 0 for the
26353     built-in functions `execl' and `execlp'.  The built-in function
26354     `execle' has the attribute set with a position of 1.
26355
26356     A valid `NULL' in this context is defined as zero with any pointer
26357     type.  If your system defines the `NULL' macro with an integer type
26358     then you need to add an explicit cast.  GCC replaces `stddef.h'
26359     with a copy that redefines NULL appropriately.
26360
26361     The warnings for missing or incorrect sentinels are enabled with
26362     `-Wformat'.
26363
26364`short_call'
26365     See `long_call'.
26366
26367`shortcall'
26368     See `longcall'.
26369
26370`signal'
26371     Use this attribute on the AVR to indicate that the specified
26372     function is an interrupt handler.  The compiler generates function
26373     entry and exit sequences suitable for use in an interrupt handler
26374     when this attribute is present.
26375
26376     See also the `interrupt' function attribute.
26377
26378     The AVR hardware globally disables interrupts when an interrupt is
26379     executed.  Interrupt handler functions defined with the `signal'
26380     attribute do not re-enable interrupts.  It is save to enable
26381     interrupts in a `signal' handler.  This "save" only applies to the
26382     code generated by the compiler and not to the IRQ layout of the
26383     application which is responsibility of the application.
26384
26385     If both `signal' and `interrupt' are specified for the same
26386     function, `signal' is silently ignored.
26387
26388`sp_switch'
26389     Use this attribute on the SH to indicate an `interrupt_handler'
26390     function should switch to an alternate stack.  It expects a string
26391     argument that names a global variable holding the address of the
26392     alternate stack.
26393
26394          void *alt_stack;
26395          void f () __attribute__ ((interrupt_handler,
26396                                    sp_switch ("alt_stack")));
26397
26398`stdcall'
26399     On x86-32 targets, the `stdcall' attribute causes the compiler to
26400     assume that the called function pops off the stack space used to
26401     pass arguments, unless it takes a variable number of arguments.
26402
26403`syscall_linkage'
26404     This attribute is used to modify the IA-64 calling convention by
26405     marking all input registers as live at all function exits.  This
26406     makes it possible to restart a system call after an interrupt
26407     without having to save/restore the input registers.  This also
26408     prevents kernel data from leaking into application code.
26409
26410`target'
26411     The `target' attribute is used to specify that a function is to be
26412     compiled with different target options than specified on the
26413     command line.  This can be used for instance to have functions
26414     compiled with a different ISA (instruction set architecture) than
26415     the default.  You can also use the `#pragma GCC target' pragma to
26416     set more than one function to be compiled with specific target
26417     options.  *Note Function Specific Option Pragmas::, for details
26418     about the `#pragma GCC target' pragma.
26419
26420     For instance on an x86, you could compile one function with
26421     `target("sse4.1,arch=core2")' and another with
26422     `target("sse4a,arch=amdfam10")'.  This is equivalent to compiling
26423     the first function with `-msse4.1' and `-march=core2' options, and
26424     the second function with `-msse4a' and `-march=amdfam10' options.
26425     It is up to the user to make sure that a function is only invoked
26426     on a machine that supports the particular ISA it is compiled for
26427     (for example by using `cpuid' on x86 to determine what feature
26428     bits and architecture family are used).
26429
26430          int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
26431          int sse3_func (void) __attribute__ ((__target__ ("sse3")));
26432
26433     You can either use multiple strings to specify multiple options,
26434     or separate the options with a comma (`,').
26435
26436     The `target' attribute is presently implemented for x86, PowerPC,
26437     and Nios II targets only.  The options supported are specific to
26438     each target.
26439
26440     On the x86, the following options are allowed:
26441
26442    `abm'
26443    `no-abm'
26444          Enable/disable the generation of the advanced bit
26445          instructions.
26446
26447    `aes'
26448    `no-aes'
26449          Enable/disable the generation of the AES instructions.
26450
26451    `default'
26452          *Note Function Multiversioning::, where it is used to specify
26453          the default function version.
26454
26455    `mmx'
26456    `no-mmx'
26457          Enable/disable the generation of the MMX instructions.
26458
26459    `pclmul'
26460    `no-pclmul'
26461          Enable/disable the generation of the PCLMUL instructions.
26462
26463    `popcnt'
26464    `no-popcnt'
26465          Enable/disable the generation of the POPCNT instruction.
26466
26467    `sse'
26468    `no-sse'
26469          Enable/disable the generation of the SSE instructions.
26470
26471    `sse2'
26472    `no-sse2'
26473          Enable/disable the generation of the SSE2 instructions.
26474
26475    `sse3'
26476    `no-sse3'
26477          Enable/disable the generation of the SSE3 instructions.
26478
26479    `sse4'
26480    `no-sse4'
26481          Enable/disable the generation of the SSE4 instructions (both
26482          SSE4.1 and SSE4.2).
26483
26484    `sse4.1'
26485    `no-sse4.1'
26486          Enable/disable the generation of the sse4.1 instructions.
26487
26488    `sse4.2'
26489    `no-sse4.2'
26490          Enable/disable the generation of the sse4.2 instructions.
26491
26492    `sse4a'
26493    `no-sse4a'
26494          Enable/disable the generation of the SSE4A instructions.
26495
26496    `fma4'
26497    `no-fma4'
26498          Enable/disable the generation of the FMA4 instructions.
26499
26500    `xop'
26501    `no-xop'
26502          Enable/disable the generation of the XOP instructions.
26503
26504    `lwp'
26505    `no-lwp'
26506          Enable/disable the generation of the LWP instructions.
26507
26508    `ssse3'
26509    `no-ssse3'
26510          Enable/disable the generation of the SSSE3 instructions.
26511
26512    `cld'
26513    `no-cld'
26514          Enable/disable the generation of the CLD before string moves.
26515
26516    `fancy-math-387'
26517    `no-fancy-math-387'
26518          Enable/disable the generation of the `sin', `cos', and `sqrt'
26519          instructions on the 387 floating-point unit.
26520
26521    `fused-madd'
26522    `no-fused-madd'
26523          Enable/disable the generation of the fused multiply/add
26524          instructions.
26525
26526    `ieee-fp'
26527    `no-ieee-fp'
26528          Enable/disable the generation of floating point that depends
26529          on IEEE arithmetic.
26530
26531    `inline-all-stringops'
26532    `no-inline-all-stringops'
26533          Enable/disable inlining of string operations.
26534
26535    `inline-stringops-dynamically'
26536    `no-inline-stringops-dynamically'
26537          Enable/disable the generation of the inline code to do small
26538          string operations and calling the library routines for large
26539          operations.
26540
26541    `align-stringops'
26542    `no-align-stringops'
26543          Do/do not align destination of inlined string operations.
26544
26545    `recip'
26546    `no-recip'
26547          Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
26548          RSQRTPS instructions followed an additional Newton-Raphson
26549          step instead of doing a floating-point division.
26550
26551    `arch=ARCH'
26552          Specify the architecture to generate code for in compiling
26553          the function.
26554
26555    `tune=TUNE'
26556          Specify the architecture to tune for in compiling the
26557          function.
26558
26559    `fpmath=FPMATH'
26560          Specify which floating-point unit to use.  The
26561          `target("fpmath=sse,387")' option must be specified as
26562          `target("fpmath=sse+387")' because the comma would separate
26563          different options.
26564
26565     On the PowerPC, the following options are allowed:
26566
26567    `altivec'
26568    `no-altivec'
26569          Generate code that uses (does not use) AltiVec instructions.
26570          In 32-bit code, you cannot enable AltiVec instructions unless
26571          `-mabi=altivec' is used on the command line.
26572
26573    `cmpb'
26574    `no-cmpb'
26575          Generate code that uses (does not use) the compare bytes
26576          instruction implemented on the POWER6 processor and other
26577          processors that support the PowerPC V2.05 architecture.
26578
26579    `dlmzb'
26580    `no-dlmzb'
26581          Generate code that uses (does not use) the string-search
26582          `dlmzb' instruction on the IBM 405, 440, 464 and 476
26583          processors.  This instruction is generated by default when
26584          targeting those processors.
26585
26586    `fprnd'
26587    `no-fprnd'
26588          Generate code that uses (does not use) the FP round to integer
26589          instructions implemented on the POWER5+ processor and other
26590          processors that support the PowerPC V2.03 architecture.
26591
26592    `hard-dfp'
26593    `no-hard-dfp'
26594          Generate code that uses (does not use) the decimal
26595          floating-point instructions implemented on some POWER
26596          processors.
26597
26598    `isel'
26599    `no-isel'
26600          Generate code that uses (does not use) ISEL instruction.
26601
26602    `mfcrf'
26603    `no-mfcrf'
26604          Generate code that uses (does not use) the move from condition
26605          register field instruction implemented on the POWER4
26606          processor and other processors that support the PowerPC V2.01
26607          architecture.
26608
26609    `mfpgpr'
26610    `no-mfpgpr'
26611          Generate code that uses (does not use) the FP move to/from
26612          general purpose register instructions implemented on the
26613          POWER6X processor and other processors that support the
26614          extended PowerPC V2.05 architecture.
26615
26616    `mulhw'
26617    `no-mulhw'
26618          Generate code that uses (does not use) the half-word multiply
26619          and multiply-accumulate instructions on the IBM 405, 440, 464
26620          and 476 processors.  These instructions are generated by
26621          default when targeting those processors.
26622
26623    `multiple'
26624    `no-multiple'
26625          Generate code that uses (does not use) the load multiple word
26626          instructions and the store multiple word instructions.
26627
26628    `update'
26629    `no-update'
26630          Generate code that uses (does not use) the load or store
26631          instructions that update the base register to the address of
26632          the calculated memory location.
26633
26634    `popcntb'
26635    `no-popcntb'
26636          Generate code that uses (does not use) the popcount and
26637          double-precision FP reciprocal estimate instruction
26638          implemented on the POWER5 processor and other processors that
26639          support the PowerPC V2.02 architecture.
26640
26641    `popcntd'
26642    `no-popcntd'
26643          Generate code that uses (does not use) the popcount
26644          instruction implemented on the POWER7 processor and other
26645          processors that support the PowerPC V2.06 architecture.
26646
26647    `powerpc-gfxopt'
26648    `no-powerpc-gfxopt'
26649          Generate code that uses (does not use) the optional PowerPC
26650          architecture instructions in the Graphics group, including
26651          floating-point select.
26652
26653    `powerpc-gpopt'
26654    `no-powerpc-gpopt'
26655          Generate code that uses (does not use) the optional PowerPC
26656          architecture instructions in the General Purpose group,
26657          including floating-point square root.
26658
26659    `recip-precision'
26660    `no-recip-precision'
26661          Assume (do not assume) that the reciprocal estimate
26662          instructions provide higher-precision estimates than is
26663          mandated by the PowerPC ABI.
26664
26665    `string'
26666    `no-string'
26667          Generate code that uses (does not use) the load string
26668          instructions and the store string word instructions to save
26669          multiple registers and do small block moves.
26670
26671    `vsx'
26672    `no-vsx'
26673          Generate code that uses (does not use) vector/scalar (VSX)
26674          instructions, and also enable the use of built-in functions
26675          that allow more direct access to the VSX instruction set.  In
26676          32-bit code, you cannot enable VSX or AltiVec instructions
26677          unless `-mabi=altivec' is used on the command line.
26678
26679    `friz'
26680    `no-friz'
26681          Generate (do not generate) the `friz' instruction when the
26682          `-funsafe-math-optimizations' option is used to optimize
26683          rounding a floating-point value to 64-bit integer and back to
26684          floating point.  The `friz' instruction does not return the
26685          same value if the floating-point number is too large to fit
26686          in an integer.
26687
26688    `avoid-indexed-addresses'
26689    `no-avoid-indexed-addresses'
26690          Generate code that tries to avoid (not avoid) the use of
26691          indexed load or store instructions.
26692
26693    `paired'
26694    `no-paired'
26695          Generate code that uses (does not use) the generation of
26696          PAIRED simd instructions.
26697
26698    `longcall'
26699    `no-longcall'
26700          Generate code that assumes (does not assume) that all calls
26701          are far away so that a longer more expensive calling sequence
26702          is required.
26703
26704    `cpu=CPU'
26705          Specify the architecture to generate code for when compiling
26706          the function.  If you select the `target("cpu=power7")'
26707          attribute when generating 32-bit code, VSX and AltiVec
26708          instructions are not generated unless you use the
26709          `-mabi=altivec' option on the command line.
26710
26711    `tune=TUNE'
26712          Specify the architecture to tune for when compiling the
26713          function.  If you do not specify the `target("tune=TUNE")'
26714          attribute and you do specify the `target("cpu=CPU")'
26715          attribute, compilation tunes for the CPU architecture, and
26716          not the default tuning specified on the command line.
26717
26718     When compiling for Nios II, the following options are allowed:
26719
26720    `custom-INSN=N'
26721    `no-custom-INSN'
26722          Each `custom-INSN=N' attribute locally enables use of a
26723          custom instruction with encoding N when generating code that
26724          uses INSN.  Similarly, `no-custom-INSN' locally inhibits use
26725          of the custom instruction INSN.  These target attributes
26726          correspond to the `-mcustom-INSN=N' and `-mno-custom-INSN'
26727          command-line options, and support the same set of INSN
26728          keywords.  *Note Nios II Options::, for more information.
26729
26730    `custom-fpu-cfg=NAME'
26731          This attribute corresponds to the `-mcustom-fpu-cfg=NAME'
26732          command-line option, to select a predefined set of custom
26733          instructions named NAME.  *Note Nios II Options::, for more
26734          information.
26735
26736     On the x86 and PowerPC back ends, the inliner does not inline a
26737     function that has different target options than the caller, unless
26738     the callee has a subset of the target options of the caller.  For
26739     example a function declared with `target("sse3")' can inline a
26740     function with `target("sse2")', since `-msse3' implies `-msse2'.
26741
26742`trap_exit'
26743     Use this attribute on the SH for an `interrupt_handler' to return
26744     using `trapa' instead of `rte'.  This attribute expects an integer
26745     argument specifying the trap number to be used.
26746
26747`trapa_handler'
26748     On SH targets this function attribute is similar to
26749     `interrupt_handler' but it does not save and restore all registers.
26750
26751`unused'
26752     This attribute, attached to a function, means that the function is
26753     meant to be possibly unused.  GCC does not produce a warning for
26754     this function.
26755
26756`used'
26757     This attribute, attached to a function, means that code must be
26758     emitted for the function even if it appears that the function is
26759     not referenced.  This is useful, for example, when the function is
26760     referenced only in inline assembly.
26761
26762     When applied to a member function of a C++ class template, the
26763     attribute also means that the function is instantiated if the
26764     class itself is instantiated.
26765
26766`vector'
26767     This RX attribute is similar to the `interrupt' attribute,
26768     including its parameters, but does not make the function an
26769     interrupt-handler type function (i.e. it retains the normal C
26770     function calling ABI).  See the `interrupt' attribute for a
26771     description of its arguments.
26772
26773`version_id'
26774     This IA-64 HP-UX attribute, attached to a global variable or
26775     function, renames a symbol to contain a version string, thus
26776     allowing for function level versioning.  HP-UX system header files
26777     may use function level versioning for some system calls.
26778
26779          extern int foo () __attribute__((version_id ("20040821")));
26780
26781     Calls to FOO are mapped to calls to FOO{20040821}.
26782
26783`visibility ("VISIBILITY_TYPE")'
26784     This attribute affects the linkage of the declaration to which it
26785     is attached.  There are four supported VISIBILITY_TYPE values:
26786     default, hidden, protected or internal visibility.
26787
26788          void __attribute__ ((visibility ("protected")))
26789          f () { /* Do something. */; }
26790          int i __attribute__ ((visibility ("hidden")));
26791
26792     The possible values of VISIBILITY_TYPE correspond to the
26793     visibility settings in the ELF gABI.
26794
26795    "default"
26796          Default visibility is the normal case for the object file
26797          format.  This value is available for the visibility attribute
26798          to override other options that may change the assumed
26799          visibility of entities.
26800
26801          On ELF, default visibility means that the declaration is
26802          visible to other modules and, in shared libraries, means that
26803          the declared entity may be overridden.
26804
26805          On Darwin, default visibility means that the declaration is
26806          visible to other modules.
26807
26808          Default visibility corresponds to "external linkage" in the
26809          language.
26810
26811    "hidden"
26812          Hidden visibility indicates that the entity declared has a new
26813          form of linkage, which we call "hidden linkage".  Two
26814          declarations of an object with hidden linkage refer to the
26815          same object if they are in the same shared object.
26816
26817    "internal"
26818          Internal visibility is like hidden visibility, but with
26819          additional processor specific semantics.  Unless otherwise
26820          specified by the psABI, GCC defines internal visibility to
26821          mean that a function is _never_ called from another module.
26822          Compare this with hidden functions which, while they cannot
26823          be referenced directly by other modules, can be referenced
26824          indirectly via function pointers.  By indicating that a
26825          function cannot be called from outside the module, GCC may
26826          for instance omit the load of a PIC register since it is known
26827          that the calling function loaded the correct value.
26828
26829    "protected"
26830          Protected visibility is like default visibility except that it
26831          indicates that references within the defining module bind to
26832          the definition in that module.  That is, the declared entity
26833          cannot be overridden by another module.
26834
26835
26836     All visibilities are supported on many, but not all, ELF targets
26837     (supported when the assembler supports the `.visibility'
26838     pseudo-op).  Default visibility is supported everywhere.  Hidden
26839     visibility is supported on Darwin targets.
26840
26841     The visibility attribute should be applied only to declarations
26842     that would otherwise have external linkage.  The attribute should
26843     be applied consistently, so that the same entity should not be
26844     declared with different settings of the attribute.
26845
26846     In C++, the visibility attribute applies to types as well as
26847     functions and objects, because in C++ types have linkage.  A class
26848     must not have greater visibility than its non-static data member
26849     types and bases, and class members default to the visibility of
26850     their class.  Also, a declaration without explicit visibility is
26851     limited to the visibility of its type.
26852
26853     In C++, you can mark member functions and static member variables
26854     of a class with the visibility attribute.  This is useful if you
26855     know a particular method or static member variable should only be
26856     used from one shared object; then you can mark it hidden while the
26857     rest of the class has default visibility.  Care must be taken to
26858     avoid breaking the One Definition Rule; for example, it is usually
26859     not useful to mark an inline method as hidden without marking the
26860     whole class as hidden.
26861
26862     A C++ namespace declaration can also have the visibility attribute.
26863
26864          namespace nspace1 __attribute__ ((visibility ("protected")))
26865          { /* Do something. */; }
26866
26867     This attribute applies only to the particular namespace body, not
26868     to other definitions of the same namespace; it is equivalent to
26869     using `#pragma GCC visibility' before and after the namespace
26870     definition (*note Visibility Pragmas::).
26871
26872     In C++, if a template argument has limited visibility, this
26873     restriction is implicitly propagated to the template instantiation.
26874     Otherwise, template instantiations and specializations default to
26875     the visibility of their template.
26876
26877     If both the template and enclosing class have explicit visibility,
26878     the visibility from the template is used.
26879
26880`vliw'
26881     On MeP, the `vliw' attribute tells the compiler to emit
26882     instructions in VLIW mode instead of core mode.  Note that this
26883     attribute is not allowed unless a VLIW coprocessor has been
26884     configured and enabled through command-line options.
26885
26886`warn_unused_result'
26887     The `warn_unused_result' attribute causes a warning to be emitted
26888     if a caller of the function with this attribute does not use its
26889     return value.  This is useful for functions where not checking the
26890     result is either a security problem or always a bug, such as
26891     `realloc'.
26892
26893          int fn () __attribute__ ((warn_unused_result));
26894          int foo ()
26895          {
26896            if (fn () < 0) return -1;
26897            fn ();
26898            return 0;
26899          }
26900
26901     results in warning on line 5.
26902
26903`weak'
26904     The `weak' attribute causes the declaration to be emitted as a weak
26905     symbol rather than a global.  This is primarily useful in defining
26906     library functions that can be overridden in user code, though it
26907     can also be used with non-function declarations.  Weak symbols are
26908     supported for ELF targets, and also for a.out targets when using
26909     the GNU assembler and linker.
26910
26911`weakref'
26912`weakref ("TARGET")'
26913     The `weakref' attribute marks a declaration as a weak reference.
26914     Without arguments, it should be accompanied by an `alias' attribute
26915     naming the target symbol.  Optionally, the TARGET may be given as
26916     an argument to `weakref' itself.  In either case, `weakref'
26917     implicitly marks the declaration as `weak'.  Without a TARGET,
26918     given as an argument to `weakref' or to `alias', `weakref' is
26919     equivalent to `weak'.
26920
26921          static int x() __attribute__ ((weakref ("y")));
26922          /* is equivalent to... */
26923          static int x() __attribute__ ((weak, weakref, alias ("y")));
26924          /* and to... */
26925          static int x() __attribute__ ((weakref));
26926          static int x() __attribute__ ((alias ("y")));
26927
26928     A weak reference is an alias that does not by itself require a
26929     definition to be given for the target symbol.  If the target
26930     symbol is only referenced through weak references, then it becomes
26931     a `weak' undefined symbol.  If it is directly referenced, however,
26932     then such strong references prevail, and a definition is required
26933     for the symbol, not necessarily in the same translation unit.
26934
26935     The effect is equivalent to moving all references to the alias to a
26936     separate translation unit, renaming the alias to the aliased
26937     symbol, declaring it as weak, compiling the two separate
26938     translation units and performing a reloadable link on them.
26939
26940     At present, a declaration to which `weakref' is attached can only
26941     be `static'.
26942
26943
26944 You can specify multiple attributes in a declaration by separating them
26945by commas within the double parentheses or by immediately following an
26946attribute declaration with another attribute declaration.
26947
26948 Some people object to the `__attribute__' feature, suggesting that ISO
26949C's `#pragma' should be used instead.  At the time `__attribute__' was
26950designed, there were two reasons for not doing this.
26951
26952  1. It is impossible to generate `#pragma' commands from a macro.
26953
26954  2. There is no telling what the same `#pragma' might mean in another
26955     compiler.
26956
26957 These two reasons applied to almost any application that might have
26958been proposed for `#pragma'.  It was basically a mistake to use
26959`#pragma' for _anything_.
26960
26961 The ISO C99 standard includes `_Pragma', which now allows pragmas to
26962be generated from macros.  In addition, a `#pragma GCC' namespace is
26963now in use for GCC-specific pragmas.  However, it has been found
26964convenient to use `__attribute__' to achieve a natural attachment of
26965attributes to their corresponding declarations, whereas `#pragma GCC'
26966is of use for constructs that do not naturally form part of the
26967grammar.  *Note Pragmas Accepted by GCC: Pragmas.
26968
26969
26970File: gcc.info,  Node: Label Attributes,  Next: Attribute Syntax,  Prev: Function Attributes,  Up: C Extensions
26971
269726.32 Label Attributes
26973=====================
26974
26975GCC allows attributes to be set on C labels.  *Note Attribute Syntax::,
26976for details of the exact syntax for using attributes.  Other attributes
26977are available for functions (*note Function Attributes::), variables
26978(*note Variable Attributes::) and for types (*note Type Attributes::).
26979
26980 This example uses the `cold' label attribute to indicate the
26981`ErrorHandling' branch is unlikely to be taken and that the
26982`ErrorHandling' label is unused:
26983
26984
26985        asm goto ("some asm" : : : : NoError);
26986
26987     /* This branch (the fall-through from the asm) is less commonly used */
26988     ErrorHandling:
26989        __attribute__((cold, unused)); /* Semi-colon is required here */
26990        printf("error\n");
26991        return 0;
26992
26993     NoError:
26994        printf("no error\n");
26995        return 1;
26996
26997`unused'
26998     This feature is intended for program-generated code that may
26999     contain unused labels, but which is compiled with `-Wall'.  It is
27000     not normally appropriate to use in it human-written code, though it
27001     could be useful in cases where the code that jumps to the label is
27002     contained within an `#ifdef' conditional.
27003
27004`hot'
27005     The `hot' attribute on a label is used to inform the compiler that
27006     the path following the label is more likely than paths that are
27007     not so annotated.  This attribute is used in cases where
27008     `__builtin_expect' cannot be used, for instance with computed goto
27009     or `asm goto'.
27010
27011`cold'
27012     The `cold' attribute on labels is used to inform the compiler that
27013     the path following the label is unlikely to be executed.  This
27014     attribute is used in cases where `__builtin_expect' cannot be
27015     used, for instance with computed goto or `asm goto'.
27016
27017
27018
27019File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Label Attributes,  Up: C Extensions
27020
270216.33 Attribute Syntax
27022=====================
27023
27024This section describes the syntax with which `__attribute__' may be
27025used, and the constructs to which attribute specifiers bind, for the C
27026language.  Some details may vary for C++ and Objective-C.  Because of
27027infelicities in the grammar for attributes, some forms described here
27028may not be successfully parsed in all cases.
27029
27030 There are some problems with the semantics of attributes in C++.  For
27031example, there are no manglings for attributes, although they may affect
27032code generation, so problems may arise when attributed types are used in
27033conjunction with templates or overloading.  Similarly, `typeid' does
27034not distinguish between types with different attributes.  Support for
27035attributes in C++ may be restricted in future to attributes on
27036declarations only, but not on nested declarators.
27037
27038 *Note Function Attributes::, for details of the semantics of attributes
27039applying to functions.  *Note Variable Attributes::, for details of the
27040semantics of attributes applying to variables.  *Note Type Attributes::,
27041for details of the semantics of attributes applying to structure, union
27042and enumerated types.  *Note Label Attributes::, for details of the
27043semantics of attributes applying to labels.
27044
27045 An "attribute specifier" is of the form `__attribute__
27046((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
27047comma-separated sequence of "attributes", where each attribute is one
27048of the following:
27049
27050   * Empty.  Empty attributes are ignored.
27051
27052   * A word (which may be an identifier such as `unused', or a reserved
27053     word such as `const').
27054
27055   * A word, followed by, in parentheses, parameters for the attribute.
27056     These parameters take one of the following forms:
27057
27058        * An identifier.  For example, `mode' attributes use this form.
27059
27060        * An identifier followed by a comma and a non-empty
27061          comma-separated list of expressions.  For example, `format'
27062          attributes use this form.
27063
27064        * A possibly empty comma-separated list of expressions.  For
27065          example, `format_arg' attributes use this form with the list
27066          being a single integer constant expression, and `alias'
27067          attributes use this form with the list being a single string
27068          constant.
27069
27070 An "attribute specifier list" is a sequence of one or more attribute
27071specifiers, not separated by any other tokens.
27072
27073Label Attributes
27074................
27075
27076In GNU C, an attribute specifier list may appear after the colon
27077following a label, other than a `case' or `default' label.  GNU C++
27078only permits attributes on labels if the attribute specifier is
27079immediately followed by a semicolon (i.e., the label applies to an empty
27080statement).  If the semicolon is missing, C++ label attributes are
27081ambiguous, as it is permissible for a declaration, which could begin
27082with an attribute list, to be labelled in C++.  Declarations cannot be
27083labelled in C90 or C99, so the ambiguity does not arise there.
27084
27085Type Attributes
27086...............
27087
27088An attribute specifier list may appear as part of a `struct', `union'
27089or `enum' specifier.  It may go either immediately after the `struct',
27090`union' or `enum' keyword, or after the closing brace.  The former
27091syntax is preferred.  Where attribute specifiers follow the closing
27092brace, they are considered to relate to the structure, union or
27093enumerated type defined, not to any enclosing declaration the type
27094specifier appears in, and the type defined is not complete until after
27095the attribute specifiers.
27096
27097All other attributes
27098....................
27099
27100Otherwise, an attribute specifier appears as part of a declaration,
27101counting declarations of unnamed parameters and type names, and relates
27102to that declaration (which may be nested in another declaration, for
27103example in the case of a parameter declaration), or to a particular
27104declarator within a declaration.  Where an attribute specifier is
27105applied to a parameter declared as a function or an array, it should
27106apply to the function or array rather than the pointer to which the
27107parameter is implicitly converted, but this is not yet correctly
27108implemented.
27109
27110 Any list of specifiers and qualifiers at the start of a declaration may
27111contain attribute specifiers, whether or not such a list may in that
27112context contain storage class specifiers.  (Some attributes, however,
27113are essentially in the nature of storage class specifiers, and only make
27114sense where storage class specifiers may be used; for example,
27115`section'.)  There is one necessary limitation to this syntax: the
27116first old-style parameter declaration in a function definition cannot
27117begin with an attribute specifier, because such an attribute applies to
27118the function instead by syntax described below (which, however, is not
27119yet implemented in this case).  In some other cases, attribute
27120specifiers are permitted by this grammar but not yet supported by the
27121compiler.  All attribute specifiers in this place relate to the
27122declaration as a whole.  In the obsolescent usage where a type of `int'
27123is implied by the absence of type specifiers, such a list of specifiers
27124and qualifiers may be an attribute specifier list with no other
27125specifiers or qualifiers.
27126
27127 At present, the first parameter in a function prototype must have some
27128type specifier that is not an attribute specifier; this resolves an
27129ambiguity in the interpretation of `void f(int (__attribute__((foo))
27130x))', but is subject to change.  At present, if the parentheses of a
27131function declarator contain only attributes then those attributes are
27132ignored, rather than yielding an error or warning or implying a single
27133parameter of type int, but this is subject to change.
27134
27135 An attribute specifier list may appear immediately before a declarator
27136(other than the first) in a comma-separated list of declarators in a
27137declaration of more than one identifier using a single list of
27138specifiers and qualifiers.  Such attribute specifiers apply only to the
27139identifier before whose declarator they appear.  For example, in
27140
27141     __attribute__((noreturn)) void d0 (void),
27142         __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
27143          d2 (void);
27144
27145the `noreturn' attribute applies to all the functions declared; the
27146`format' attribute only applies to `d1'.
27147
27148 An attribute specifier list may appear immediately before the comma,
27149`=' or semicolon terminating the declaration of an identifier other
27150than a function definition.  Such attribute specifiers apply to the
27151declared object or function.  Where an assembler name for an object or
27152function is specified (*note Asm Labels::), the attribute must follow
27153the `asm' specification.
27154
27155 An attribute specifier list may, in future, be permitted to appear
27156after the declarator in a function definition (before any old-style
27157parameter declarations or the function body).
27158
27159 Attribute specifiers may be mixed with type qualifiers appearing inside
27160the `[]' of a parameter array declarator, in the C99 construct by which
27161such qualifiers are applied to the pointer to which the array is
27162implicitly converted.  Such attribute specifiers apply to the pointer,
27163not to the array, but at present this is not implemented and they are
27164ignored.
27165
27166 An attribute specifier list may appear at the start of a nested
27167declarator.  At present, there are some limitations in this usage: the
27168attributes correctly apply to the declarator, but for most individual
27169attributes the semantics this implies are not implemented.  When
27170attribute specifiers follow the `*' of a pointer declarator, they may
27171be mixed with any type qualifiers present.  The following describes the
27172formal semantics of this syntax.  It makes the most sense if you are
27173familiar with the formal specification of declarators in the ISO C
27174standard.
27175
27176 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1',
27177where `T' contains declaration specifiers that specify a type TYPE
27178(such as `int') and `D1' is a declarator that contains an identifier
27179IDENT.  The type specified for IDENT for derived declarators whose type
27180does not include an attribute specifier is as in the ISO C standard.
27181
27182 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the
27183declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
27184TYPE" for IDENT, then `T D1' specifies the type
27185"DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
27186
27187 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST
27188D', and the declaration `T D' specifies the type
27189"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies
27190the type "DERIVED-DECLARATOR-TYPE-LIST
27191TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.
27192
27193 For example,
27194
27195     void (__attribute__((noreturn)) ****f) (void);
27196
27197specifies the type "pointer to pointer to pointer to pointer to
27198non-returning function returning `void'".  As another example,
27199
27200     char *__attribute__((aligned(8))) *f;
27201
27202specifies the type "pointer to 8-byte-aligned pointer to `char'".  Note
27203again that this does not work with most attributes; for example, the
27204usage of `aligned' and `noreturn' attributes given above is not yet
27205supported.
27206
27207 For compatibility with existing code written for compiler versions that
27208did not implement attributes on nested declarators, some laxity is
27209allowed in the placing of attributes.  If an attribute that only applies
27210to types is applied to a declaration, it is treated as applying to the
27211type of that declaration.  If an attribute that only applies to
27212declarations is applied to the type of a declaration, it is treated as
27213applying to that declaration; and, for compatibility with code placing
27214the attributes immediately before the identifier declared, such an
27215attribute applied to a function return type is treated as applying to
27216the function type, and such an attribute applied to an array element
27217type is treated as applying to the array type.  If an attribute that
27218only applies to function types is applied to a pointer-to-function
27219type, it is treated as applying to the pointer target type; if such an
27220attribute is applied to a function return type that is not a
27221pointer-to-function type, it is treated as applying to the function
27222type.
27223
27224
27225File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
27226
272276.34 Prototypes and Old-Style Function Definitions
27228==================================================
27229
27230GNU C extends ISO C to allow a function prototype to override a later
27231old-style non-prototype definition.  Consider the following example:
27232
27233     /* Use prototypes unless the compiler is old-fashioned.  */
27234     #ifdef __STDC__
27235     #define P(x) x
27236     #else
27237     #define P(x) ()
27238     #endif
27239
27240     /* Prototype function declaration.  */
27241     int isroot P((uid_t));
27242
27243     /* Old-style function definition.  */
27244     int
27245     isroot (x)   /* ??? lossage here ??? */
27246          uid_t x;
27247     {
27248       return x == 0;
27249     }
27250
27251 Suppose the type `uid_t' happens to be `short'.  ISO C does not allow
27252this example, because subword arguments in old-style non-prototype
27253definitions are promoted.  Therefore in this example the function
27254definition's argument is really an `int', which does not match the
27255prototype argument type of `short'.
27256
27257 This restriction of ISO C makes it hard to write code that is portable
27258to traditional C compilers, because the programmer does not know
27259whether the `uid_t' type is `short', `int', or `long'.  Therefore, in
27260cases like these GNU C allows a prototype to override a later old-style
27261definition.  More precisely, in GNU C, a function prototype argument
27262type overrides the argument type specified by a later old-style
27263definition if the former type is the same as the latter type before
27264promotion.  Thus in GNU C the above example is equivalent to the
27265following:
27266
27267     int isroot (uid_t);
27268
27269     int
27270     isroot (uid_t x)
27271     {
27272       return x == 0;
27273     }
27274
27275GNU C++ does not support old-style function definitions, so this
27276extension is irrelevant.
27277
27278
27279File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
27280
272816.35 C++ Style Comments
27282=======================
27283
27284In GNU C, you may use C++ style comments, which start with `//' and
27285continue until the end of the line.  Many other C implementations allow
27286such comments, and they are included in the 1999 C standard.  However,
27287C++ style comments are not recognized if you specify an `-std' option
27288specifying a version of ISO C before C99, or `-ansi' (equivalent to
27289`-std=c90').
27290
27291
27292File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
27293
272946.36 Dollar Signs in Identifier Names
27295=====================================
27296
27297In GNU C, you may normally use dollar signs in identifier names.  This
27298is because many traditional C implementations allow such identifiers.
27299However, dollar signs in identifiers are not supported on a few target
27300machines, typically because the target assembler does not allow them.
27301
27302
27303File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
27304
273056.37 The Character <ESC> in Constants
27306=====================================
27307
27308You can use the sequence `\e' in a string or character constant to
27309stand for the ASCII character <ESC>.
27310
27311
27312File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
27313
273146.38 Specifying Attributes of Variables
27315=======================================
27316
27317The keyword `__attribute__' allows you to specify special attributes of
27318variables or structure fields.  This keyword is followed by an
27319attribute specification inside double parentheses.  Some attributes are
27320currently defined generically for variables.  Other attributes are
27321defined for variables on particular target systems.  Other attributes
27322are available for functions (*note Function Attributes::), labels
27323(*note Label Attributes::) and for types (*note Type Attributes::).
27324Other front ends might define more attributes (*note Extensions to the
27325C++ Language: C++ Extensions.).
27326
27327 You may also specify attributes with `__' preceding and following each
27328keyword.  This allows you to use them in header files without being
27329concerned about a possible macro of the same name.  For example, you
27330may use `__aligned__' instead of `aligned'.
27331
27332 *Note Attribute Syntax::, for details of the exact syntax for using
27333attributes.
27334
27335`aligned (ALIGNMENT)'
27336     This attribute specifies a minimum alignment for the variable or
27337     structure field, measured in bytes.  For example, the declaration:
27338
27339          int x __attribute__ ((aligned (16))) = 0;
27340
27341     causes the compiler to allocate the global variable `x' on a
27342     16-byte boundary.  On a 68040, this could be used in conjunction
27343     with an `asm' expression to access the `move16' instruction which
27344     requires 16-byte aligned operands.
27345
27346     You can also specify the alignment of structure fields.  For
27347     example, to create a double-word aligned `int' pair, you could
27348     write:
27349
27350          struct foo { int x[2] __attribute__ ((aligned (8))); };
27351
27352     This is an alternative to creating a union with a `double' member,
27353     which forces the union to be double-word aligned.
27354
27355     As in the preceding examples, you can explicitly specify the
27356     alignment (in bytes) that you wish the compiler to use for a given
27357     variable or structure field.  Alternatively, you can leave out the
27358     alignment factor and just ask the compiler to align a variable or
27359     field to the default alignment for the target architecture you are
27360     compiling for.  The default alignment is sufficient for all scalar
27361     types, but may not be enough for all vector types on a target that
27362     supports vector operations.  The default alignment is fixed for a
27363     particular target ABI.
27364
27365     GCC also provides a target specific macro `__BIGGEST_ALIGNMENT__',
27366     which is the largest alignment ever used for any data type on the
27367     target machine you are compiling for.  For example, you could
27368     write:
27369
27370          short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
27371
27372     The compiler automatically sets the alignment for the declared
27373     variable or field to `__BIGGEST_ALIGNMENT__'.  Doing this can
27374     often make copy operations more efficient, because the compiler can
27375     use whatever instructions copy the biggest chunks of memory when
27376     performing copies to or from the variables or fields that you have
27377     aligned this way.  Note that the value of `__BIGGEST_ALIGNMENT__'
27378     may change depending on command-line options.
27379
27380     When used on a struct, or struct member, the `aligned' attribute
27381     can only increase the alignment; in order to decrease it, the
27382     `packed' attribute must be specified as well.  When used as part
27383     of a typedef, the `aligned' attribute can both increase and
27384     decrease alignment, and specifying the `packed' attribute
27385     generates a warning.
27386
27387     Note that the effectiveness of `aligned' attributes may be limited
27388     by inherent limitations in your linker.  On many systems, the
27389     linker is only able to arrange for variables to be aligned up to a
27390     certain maximum alignment.  (For some linkers, the maximum
27391     supported alignment may be very very small.)  If your linker is
27392     only able to align variables up to a maximum of 8-byte alignment,
27393     then specifying `aligned(16)' in an `__attribute__' still only
27394     provides you with 8-byte alignment.  See your linker documentation
27395     for further information.
27396
27397     The `aligned' attribute can also be used for functions (*note
27398     Function Attributes::.)
27399
27400`cleanup (CLEANUP_FUNCTION)'
27401     The `cleanup' attribute runs a function when the variable goes out
27402     of scope.  This attribute can only be applied to auto function
27403     scope variables; it may not be applied to parameters or variables
27404     with static storage duration.  The function must take one
27405     parameter, a pointer to a type compatible with the variable.  The
27406     return value of the function (if any) is ignored.
27407
27408     If `-fexceptions' is enabled, then CLEANUP_FUNCTION is run during
27409     the stack unwinding that happens during the processing of the
27410     exception.  Note that the `cleanup' attribute does not allow the
27411     exception to be caught, only to perform an action.  It is
27412     undefined what happens if CLEANUP_FUNCTION does not return
27413     normally.
27414
27415`common'
27416`nocommon'
27417     The `common' attribute requests GCC to place a variable in
27418     "common" storage.  The `nocommon' attribute requests the
27419     opposite--to allocate space for it directly.
27420
27421     These attributes override the default chosen by the `-fno-common'
27422     and `-fcommon' flags respectively.
27423
27424`deprecated'
27425`deprecated (MSG)'
27426     The `deprecated' attribute results in a warning if the variable is
27427     used anywhere in the source file.  This is useful when identifying
27428     variables that are expected to be removed in a future version of a
27429     program.  The warning also includes the location of the declaration
27430     of the deprecated variable, to enable users to easily find further
27431     information about why the variable is deprecated, or what they
27432     should do instead.  Note that the warning only occurs for uses:
27433
27434          extern int old_var __attribute__ ((deprecated));
27435          extern int old_var;
27436          int new_fn () { return old_var; }
27437
27438     results in a warning on line 3 but not line 2.  The optional MSG
27439     argument, which must be a string, is printed in the warning if
27440     present.
27441
27442     The `deprecated' attribute can also be used for functions and
27443     types (*note Function Attributes::, *note Type Attributes::.)
27444
27445`mode (MODE)'
27446     This attribute specifies the data type for the
27447     declaration--whichever type corresponds to the mode MODE.  This in
27448     effect lets you request an integer or floating-point type
27449     according to its width.
27450
27451     You may also specify a mode of `byte' or `__byte__' to indicate
27452     the mode corresponding to a one-byte integer, `word' or `__word__'
27453     for the mode of a one-word integer, and `pointer' or `__pointer__'
27454     for the mode used to represent pointers.
27455
27456`packed'
27457     The `packed' attribute specifies that a variable or structure field
27458     should have the smallest possible alignment--one byte for a
27459     variable, and one bit for a field, unless you specify a larger
27460     value with the `aligned' attribute.
27461
27462     Here is a structure in which the field `x' is packed, so that it
27463     immediately follows `a':
27464
27465          struct foo
27466          {
27467            char a;
27468            int x[2] __attribute__ ((packed));
27469          };
27470
27471     _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed'
27472     attribute on bit-fields of type `char'.  This has been fixed in
27473     GCC 4.4 but the change can lead to differences in the structure
27474     layout.  See the documentation of `-Wpacked-bitfield-compat' for
27475     more information.
27476
27477`section ("SECTION-NAME")'
27478     Normally, the compiler places the objects it generates in sections
27479     like `data' and `bss'.  Sometimes, however, you need additional
27480     sections, or you need certain particular variables to appear in
27481     special sections, for example to map to special hardware.  The
27482     `section' attribute specifies that a variable (or function) lives
27483     in a particular section.  For example, this small program uses
27484     several specific section names:
27485
27486          struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
27487          struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
27488          char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
27489          int init_data __attribute__ ((section ("INITDATA")));
27490
27491          main()
27492          {
27493            /* Initialize stack pointer */
27494            init_sp (stack + sizeof (stack));
27495
27496            /* Initialize initialized data */
27497            memcpy (&init_data, &data, &edata - &data);
27498
27499            /* Turn on the serial ports */
27500            init_duart (&a);
27501            init_duart (&b);
27502          }
27503
27504     Use the `section' attribute with _global_ variables and not
27505     _local_ variables, as shown in the example.
27506
27507     You may use the `section' attribute with initialized or
27508     uninitialized global variables but the linker requires each object
27509     be defined once, with the exception that uninitialized variables
27510     tentatively go in the `common' (or `bss') section and can be
27511     multiply "defined".  Using the `section' attribute changes what
27512     section the variable goes into and may cause the linker to issue
27513     an error if an uninitialized variable has multiple definitions.
27514     You can force a variable to be initialized with the `-fno-common'
27515     flag or the `nocommon' attribute.
27516
27517     Some file formats do not support arbitrary sections so the
27518     `section' attribute is not available on all platforms.  If you
27519     need to map the entire contents of a module to a particular
27520     section, consider using the facilities of the linker instead.
27521
27522`shared'
27523     On Microsoft Windows, in addition to putting variable definitions
27524     in a named section, the section can also be shared among all
27525     running copies of an executable or DLL.  For example, this small
27526     program defines shared data by putting it in a named section
27527     `shared' and marking the section shareable:
27528
27529          int foo __attribute__((section ("shared"), shared)) = 0;
27530
27531          int
27532          main()
27533          {
27534            /* Read and write foo.  All running
27535               copies see the same value.  */
27536            return 0;
27537          }
27538
27539     You may only use the `shared' attribute along with `section'
27540     attribute with a fully-initialized global definition because of
27541     the way linkers work.  See `section' attribute for more
27542     information.
27543
27544     The `shared' attribute is only available on Microsoft Windows.
27545
27546`tls_model ("TLS_MODEL")'
27547     The `tls_model' attribute sets thread-local storage model (*note
27548     Thread-Local::) of a particular `__thread' variable, overriding
27549     `-ftls-model=' command-line switch on a per-variable basis.  The
27550     TLS_MODEL argument should be one of `global-dynamic',
27551     `local-dynamic', `initial-exec' or `local-exec'.
27552
27553     Not all targets support this attribute.
27554
27555`unused'
27556     This attribute, attached to a variable, means that the variable is
27557     meant to be possibly unused.  GCC does not produce a warning for
27558     this variable.
27559
27560`used'
27561     This attribute, attached to a variable with static storage, means
27562     that the variable must be emitted even if it appears that the
27563     variable is not referenced.
27564
27565     When applied to a static data member of a C++ class template, the
27566     attribute also means that the member is instantiated if the class
27567     itself is instantiated.
27568
27569`vector_size (BYTES)'
27570     This attribute specifies the vector size for the variable,
27571     measured in bytes.  For example, the declaration:
27572
27573          int foo __attribute__ ((vector_size (16)));
27574
27575     causes the compiler to set the mode for `foo', to be 16 bytes,
27576     divided into `int' sized units.  Assuming a 32-bit int (a vector of
27577     4 units of 4 bytes), the corresponding mode of `foo' is V4SI.
27578
27579     This attribute is only applicable to integral and float scalars,
27580     although arrays, pointers, and function return values are allowed
27581     in conjunction with this construct.
27582
27583     Aggregates with this attribute are invalid, even if they are of
27584     the same size as a corresponding scalar.  For example, the
27585     declaration:
27586
27587          struct S { int a; };
27588          struct S  __attribute__ ((vector_size (16))) foo;
27589
27590     is invalid even if the size of the structure is the same as the
27591     size of the `int'.
27592
27593`selectany'
27594     The `selectany' attribute causes an initialized global variable to
27595     have link-once semantics.  When multiple definitions of the
27596     variable are encountered by the linker, the first is selected and
27597     the remainder are discarded.  Following usage by the Microsoft
27598     compiler, the linker is told _not_ to warn about size or content
27599     differences of the multiple definitions.
27600
27601     Although the primary usage of this attribute is for POD types, the
27602     attribute can also be applied to global C++ objects that are
27603     initialized by a constructor.  In this case, the static
27604     initialization and destruction code for the object is emitted in
27605     each translation defining the object, but the calls to the
27606     constructor and destructor are protected by a link-once guard
27607     variable.
27608
27609     The `selectany' attribute is only available on Microsoft Windows
27610     targets.  You can use `__declspec (selectany)' as a synonym for
27611     `__attribute__ ((selectany))' for compatibility with other
27612     compilers.
27613
27614`weak'
27615     The `weak' attribute is described in *note Function Attributes::.
27616
27617`dllimport'
27618     The `dllimport' attribute is described in *note Function
27619     Attributes::.
27620
27621`dllexport'
27622     The `dllexport' attribute is described in *note Function
27623     Attributes::.
27624
27625
276266.38.1 AVR Variable Attributes
27627------------------------------
27628
27629`progmem'
27630     The `progmem' attribute is used on the AVR to place read-only data
27631     in the non-volatile program memory (flash). The `progmem'
27632     attribute accomplishes this by putting respective variables into a
27633     section whose name starts with `.progmem'.
27634
27635     This attribute works similar to the `section' attribute but adds
27636     additional checking. Notice that just like the `section'
27637     attribute, `progmem' affects the location of the data but not how
27638     this data is accessed.
27639
27640     In order to read data located with the `progmem' attribute
27641     (inline) assembler must be used.
27642          /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */
27643          #include <avr/pgmspace.h>
27644
27645          /* Locate var in flash memory */
27646          const int var[2] PROGMEM = { 1, 2 };
27647
27648          int read_var (int i)
27649          {
27650              /* Access var[] by accessor macro from avr/pgmspace.h */
27651              return (int) pgm_read_word (& var[i]);
27652          }
27653
27654     AVR is a Harvard architecture processor and data and read-only data
27655     normally resides in the data memory (RAM).
27656
27657     See also the *note AVR Named Address Spaces:: section for an
27658     alternate way to locate and access data in flash memory.
27659
27660`io'
27661`io (ADDR)'
27662     Variables with the `io' attribute are used to address
27663     memory-mapped peripherals in the io address range.  If an address
27664     is specified, the variable is assigned that address, and the value
27665     is interpreted as an address in the data address space.  Example:
27666
27667          volatile int porta __attribute__((io (0x22)));
27668
27669     The address specified in the address in the data address range.
27670
27671     Otherwise, the variable it is not assigned an address, but the
27672     compiler will still use in/out instructions where applicable,
27673     assuming some other module assigns an address in the io address
27674     range.  Example:
27675
27676          extern volatile int porta __attribute__((io));
27677
27678`io_low'
27679`io_low (ADDR)'
27680     This is like the `io' attribute, but additionally it informs the
27681     compiler that the object lies in the lower half of the I/O area,
27682     allowing the use of `cbi', `sbi', `sbic' and `sbis' instructions.
27683
27684`address'
27685`address (ADDR)'
27686     Variables with the `address' attribute are used to address
27687     memory-mapped peripherals that may lie outside the io address
27688     range.
27689
27690          volatile int porta __attribute__((address (0x600)));
27691
27692
276936.38.2 Blackfin Variable Attributes
27694-----------------------------------
27695
27696Three attributes are currently defined for the Blackfin.
27697
27698`l1_data'
27699`l1_data_A'
27700`l1_data_B'
27701     Use these attributes on the Blackfin to place the variable into L1
27702     Data SRAM.  Variables with `l1_data' attribute are put into the
27703     specific section named `.l1.data'. Those with `l1_data_A'
27704     attribute are put into the specific section named `.l1.data.A'.
27705     Those with `l1_data_B' attribute are put into the specific section
27706     named `.l1.data.B'.
27707
27708`l2'
27709     Use this attribute on the Blackfin to place the variable into L2
27710     SRAM.  Variables with `l2' attribute are put into the specific
27711     section named `.l2.data'.
27712
277136.38.3 H8/300 Variable Attributes
27714---------------------------------
27715
27716These variable attributes are available for H8/300 targets:
27717
27718`eightbit_data'
27719     Use this attribute on the H8/300, H8/300H, and H8S to indicate
27720     that the specified variable should be placed into the eight-bit
27721     data section.  The compiler generates more efficient code for
27722     certain operations on data in the eight-bit data area.  Note the
27723     eight-bit data area is limited to 256 bytes of data.
27724
27725     You must use GAS and GLD from GNU binutils version 2.7 or later for
27726     this attribute to work correctly.
27727
27728`tiny_data'
27729     Use this attribute on the H8/300H and H8S to indicate that the
27730     specified variable should be placed into the tiny data section.
27731     The compiler generates more efficient code for loads and stores on
27732     data in the tiny data section.  Note the tiny data area is limited
27733     to slightly under 32KB of data.
27734
27735
277366.38.4 IA-64 Variable Attributes
27737--------------------------------
27738
27739The IA-64 back end supports the following variable attribute:
27740
27741`model (MODEL-NAME)'
27742     On IA-64, use this attribute to set the addressability of an
27743     object.  At present, the only supported identifier for MODEL-NAME
27744     is `small', indicating addressability via "small" (22-bit)
27745     addresses (so that their addresses can be loaded with the `addl'
27746     instruction).  Caveat: such addressing is by definition not
27747     position independent and hence this attribute must not be used for
27748     objects defined by shared libraries.
27749
27750
277516.38.5 M32R/D Variable Attributes
27752---------------------------------
27753
27754One attribute is currently defined for the M32R/D.
27755
27756`model (MODEL-NAME)'
27757     Use this attribute on the M32R/D to set the addressability of an
27758     object.  The identifier MODEL-NAME is one of `small', `medium', or
27759     `large', representing each of the code models.
27760
27761     Small model objects live in the lower 16MB of memory (so that their
27762     addresses can be loaded with the `ld24' instruction).
27763
27764     Medium and large model objects may live anywhere in the 32-bit
27765     address space (the compiler generates `seth/add3' instructions to
27766     load their addresses).
27767
277686.38.6 MeP Variable Attributes
27769------------------------------
27770
27771The MeP target has a number of addressing modes and busses.  The `near'
27772space spans the standard memory space's first 16 megabytes (24 bits).
27773The `far' space spans the entire 32-bit memory space.  The `based'
27774space is a 128-byte region in the memory space that is addressed
27775relative to the `$tp' register.  The `tiny' space is a 65536-byte
27776region relative to the `$gp' register.  In addition to these memory
27777regions, the MeP target has a separate 16-bit control bus which is
27778specified with `cb' attributes.
27779
27780`based'
27781     Any variable with the `based' attribute is assigned to the
27782     `.based' section, and is accessed with relative to the `$tp'
27783     register.
27784
27785`tiny'
27786     Likewise, the `tiny' attribute assigned variables to the `.tiny'
27787     section, relative to the `$gp' register.
27788
27789`near'
27790     Variables with the `near' attribute are assumed to have addresses
27791     that fit in a 24-bit addressing mode.  This is the default for
27792     large variables (`-mtiny=4' is the default) but this attribute can
27793     override `-mtiny=' for small variables, or override `-ml'.
27794
27795`far'
27796     Variables with the `far' attribute are addressed using a full
27797     32-bit address.  Since this covers the entire memory space, this
27798     allows modules to make no assumptions about where variables might
27799     be stored.
27800
27801`io'
27802`io (ADDR)'
27803     Variables with the `io' attribute are used to address
27804     memory-mapped peripherals.  If an address is specified, the
27805     variable is assigned that address, else it is not assigned an
27806     address (it is assumed some other module assigns an address).
27807     Example:
27808
27809          int timer_count __attribute__((io(0x123)));
27810
27811`cb'
27812`cb (ADDR)'
27813     Variables with the `cb' attribute are used to access the control
27814     bus, using special instructions.  `addr' indicates the control bus
27815     address.  Example:
27816
27817          int cpu_clock __attribute__((cb(0x123)));
27818
27819
278206.38.7 PowerPC Variable Attributes
27821----------------------------------
27822
27823Three attributes currently are defined for PowerPC configurations:
27824`altivec', `ms_struct' and `gcc_struct'.
27825
27826 For full documentation of the struct attributes please see the
27827documentation in *note x86 Variable Attributes::.
27828
27829 For documentation of `altivec' attribute please see the documentation
27830in *note PowerPC Type Attributes::.
27831
278326.38.8 SPU Variable Attributes
27833------------------------------
27834
27835The SPU supports the `spu_vector' attribute for variables.  For
27836documentation of this attribute please see the documentation in *note
27837SPU Type Attributes::.
27838
278396.38.9 x86 Variable Attributes
27840------------------------------
27841
27842Two attributes are currently defined for x86 configurations:
27843`ms_struct' and `gcc_struct'.
27844
27845`ms_struct'
27846`gcc_struct'
27847     If `packed' is used on a structure, or if bit-fields are used, it
27848     may be that the Microsoft ABI lays out the structure differently
27849     than the way GCC normally does.  Particularly when moving packed
27850     data between functions compiled with GCC and the native Microsoft
27851     compiler (either via function call or as data in a file), it may
27852     be necessary to access either format.
27853
27854     Currently `-m[no-]ms-bitfields' is provided for the Microsoft
27855     Windows x86 compilers to match the native Microsoft compiler.
27856
27857     The Microsoft structure layout algorithm is fairly simple with the
27858     exception of the bit-field packing.  The padding and alignment of
27859     members of structures and whether a bit-field can straddle a
27860     storage-unit boundary are determine by these rules:
27861
27862       1. Structure members are stored sequentially in the order in
27863          which they are declared: the first member has the lowest
27864          memory address and the last member the highest.
27865
27866       2. Every data object has an alignment requirement.  The
27867          alignment requirement for all data except structures, unions,
27868          and arrays is either the size of the object or the current
27869          packing size (specified with either the `aligned' attribute
27870          or the `pack' pragma), whichever is less.  For structures,
27871          unions, and arrays, the alignment requirement is the largest
27872          alignment requirement of its members.  Every object is
27873          allocated an offset so that:
27874
27875               offset % alignment_requirement == 0
27876
27877       3. Adjacent bit-fields are packed into the same 1-, 2-, or
27878          4-byte allocation unit if the integral types are the same
27879          size and if the next bit-field fits into the current
27880          allocation unit without crossing the boundary imposed by the
27881          common alignment requirements of the bit-fields.
27882
27883     MSVC interprets zero-length bit-fields in the following ways:
27884
27885       1. If a zero-length bit-field is inserted between two bit-fields
27886          that are normally coalesced, the bit-fields are not coalesced.
27887
27888          For example:
27889
27890               struct
27891                {
27892                  unsigned long bf_1 : 12;
27893                  unsigned long : 0;
27894                  unsigned long bf_2 : 12;
27895                } t1;
27896
27897          The size of `t1' is 8 bytes with the zero-length bit-field.
27898          If the zero-length bit-field were removed, `t1''s size would
27899          be 4 bytes.
27900
27901       2. If a zero-length bit-field is inserted after a bit-field,
27902          `foo', and the alignment of the zero-length bit-field is
27903          greater than the member that follows it, `bar', `bar' is
27904          aligned as the type of the zero-length bit-field.
27905
27906          For example:
27907
27908               struct
27909                {
27910                  char foo : 4;
27911                  short : 0;
27912                  char bar;
27913                } t2;
27914
27915               struct
27916                {
27917                  char foo : 4;
27918                  short : 0;
27919                  double bar;
27920                } t3;
27921
27922          For `t2', `bar' is placed at offset 2, rather than offset 1.
27923          Accordingly, the size of `t2' is 4.  For `t3', the zero-length
27924          bit-field does not affect the alignment of `bar' or, as a
27925          result, the size of the structure.
27926
27927          Taking this into account, it is important to note the
27928          following:
27929
27930            1. If a zero-length bit-field follows a normal bit-field,
27931               the type of the zero-length bit-field may affect the
27932               alignment of the structure as whole. For example, `t2'
27933               has a size of 4 bytes, since the zero-length bit-field
27934               follows a normal bit-field, and is of type short.
27935
27936            2. Even if a zero-length bit-field is not followed by a
27937               normal bit-field, it may still affect the alignment of
27938               the structure:
27939
27940                    struct
27941                     {
27942                       char foo : 6;
27943                       long : 0;
27944                     } t4;
27945
27946               Here, `t4' takes up 4 bytes.
27947
27948       3. Zero-length bit-fields following non-bit-field members are
27949          ignored:
27950
27951               struct
27952                {
27953                  char foo;
27954                  long : 0;
27955                  char bar;
27956                } t5;
27957
27958          Here, `t5' takes up 2 bytes.
27959
279606.38.10 Xstormy16 Variable Attributes
27961-------------------------------------
27962
27963One attribute is currently defined for xstormy16 configurations:
27964`below100'.
27965
27966`below100'
27967     If a variable has the `below100' attribute (`BELOW100' is allowed
27968     also), GCC places the variable in the first 0x100 bytes of memory
27969     and use special opcodes to access it.  Such variables are placed
27970     in either the `.bss_below100' section or the `.data_below100'
27971     section.
27972
27973
27974
27975File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
27976
279776.39 Specifying Attributes of Types
27978===================================
27979
27980The keyword `__attribute__' allows you to specify special attributes of
27981`struct' and `union' types when you define such types.  This keyword is
27982followed by an attribute specification inside double parentheses.
27983Eight attributes are currently defined for types: `aligned', `packed',
27984`transparent_union', `unused', `deprecated', `visibility', `may_alias'
27985and `bnd_variable_size'.  Other attributes are defined for functions
27986(*note Function Attributes::), labels (*note Label Attributes::) and
27987for variables (*note Variable Attributes::).
27988
27989 You may also specify any one of these attributes with `__' preceding
27990and following its keyword.  This allows you to use these attributes in
27991header files without being concerned about a possible macro of the same
27992name.  For example, you may use `__aligned__' instead of `aligned'.
27993
27994 You may specify type attributes in an enum, struct or union type
27995declaration or definition, or for other types in a `typedef'
27996declaration.
27997
27998 For an enum, struct or union type, you may specify attributes either
27999between the enum, struct or union tag and the name of the type, or just
28000past the closing curly brace of the _definition_.  The former syntax is
28001preferred.
28002
28003 *Note Attribute Syntax::, for details of the exact syntax for using
28004attributes.
28005
28006`aligned (ALIGNMENT)'
28007     This attribute specifies a minimum alignment (in bytes) for
28008     variables of the specified type.  For example, the declarations:
28009
28010          struct S { short f[3]; } __attribute__ ((aligned (8)));
28011          typedef int more_aligned_int __attribute__ ((aligned (8)));
28012
28013     force the compiler to ensure (as far as it can) that each variable
28014     whose type is `struct S' or `more_aligned_int' is allocated and
28015     aligned _at least_ on a 8-byte boundary.  On a SPARC, having all
28016     variables of type `struct S' aligned to 8-byte boundaries allows
28017     the compiler to use the `ldd' and `std' (doubleword load and
28018     store) instructions when copying one variable of type `struct S' to
28019     another, thus improving run-time efficiency.
28020
28021     Note that the alignment of any given `struct' or `union' type is
28022     required by the ISO C standard to be at least a perfect multiple of
28023     the lowest common multiple of the alignments of all of the members
28024     of the `struct' or `union' in question.  This means that you _can_
28025     effectively adjust the alignment of a `struct' or `union' type by
28026     attaching an `aligned' attribute to any one of the members of such
28027     a type, but the notation illustrated in the example above is a
28028     more obvious, intuitive, and readable way to request the compiler
28029     to adjust the alignment of an entire `struct' or `union' type.
28030
28031     As in the preceding example, you can explicitly specify the
28032     alignment (in bytes) that you wish the compiler to use for a given
28033     `struct' or `union' type.  Alternatively, you can leave out the
28034     alignment factor and just ask the compiler to align a type to the
28035     maximum useful alignment for the target machine you are compiling
28036     for.  For example, you could write:
28037
28038          struct S { short f[3]; } __attribute__ ((aligned));
28039
28040     Whenever you leave out the alignment factor in an `aligned'
28041     attribute specification, the compiler automatically sets the
28042     alignment for the type to the largest alignment that is ever used
28043     for any data type on the target machine you are compiling for.
28044     Doing this can often make copy operations more efficient, because
28045     the compiler can use whatever instructions copy the biggest chunks
28046     of memory when performing copies to or from the variables that
28047     have types that you have aligned this way.
28048
28049     In the example above, if the size of each `short' is 2 bytes, then
28050     the size of the entire `struct S' type is 6 bytes.  The smallest
28051     power of two that is greater than or equal to that is 8, so the
28052     compiler sets the alignment for the entire `struct S' type to 8
28053     bytes.
28054
28055     Note that although you can ask the compiler to select a
28056     time-efficient alignment for a given type and then declare only
28057     individual stand-alone objects of that type, the compiler's
28058     ability to select a time-efficient alignment is primarily useful
28059     only when you plan to create arrays of variables having the
28060     relevant (efficiently aligned) type.  If you declare or use arrays
28061     of variables of an efficiently-aligned type, then it is likely
28062     that your program also does pointer arithmetic (or subscripting,
28063     which amounts to the same thing) on pointers to the relevant type,
28064     and the code that the compiler generates for these pointer
28065     arithmetic operations is often more efficient for
28066     efficiently-aligned types than for other types.
28067
28068     The `aligned' attribute can only increase the alignment; but you
28069     can decrease it by specifying `packed' as well.  See below.
28070
28071     Note that the effectiveness of `aligned' attributes may be limited
28072     by inherent limitations in your linker.  On many systems, the
28073     linker is only able to arrange for variables to be aligned up to a
28074     certain maximum alignment.  (For some linkers, the maximum
28075     supported alignment may be very very small.)  If your linker is
28076     only able to align variables up to a maximum of 8-byte alignment,
28077     then specifying `aligned(16)' in an `__attribute__' still only
28078     provides you with 8-byte alignment.  See your linker documentation
28079     for further information.
28080
28081`packed'
28082     This attribute, attached to `struct' or `union' type definition,
28083     specifies that each member (other than zero-width bit-fields) of
28084     the structure or union is placed to minimize the memory required.
28085     When attached to an `enum' definition, it indicates that the
28086     smallest integral type should be used.
28087
28088     Specifying this attribute for `struct' and `union' types is
28089     equivalent to specifying the `packed' attribute on each of the
28090     structure or union members.  Specifying the `-fshort-enums' flag
28091     on the line is equivalent to specifying the `packed' attribute on
28092     all `enum' definitions.
28093
28094     In the following example `struct my_packed_struct''s members are
28095     packed closely together, but the internal layout of its `s' member
28096     is not packed--to do that, `struct my_unpacked_struct' needs to be
28097     packed too.
28098
28099          struct my_unpacked_struct
28100           {
28101              char c;
28102              int i;
28103           };
28104
28105          struct __attribute__ ((__packed__)) my_packed_struct
28106            {
28107               char c;
28108               int  i;
28109               struct my_unpacked_struct s;
28110            };
28111
28112     You may only specify this attribute on the definition of an `enum',
28113     `struct' or `union', not on a `typedef' that does not also define
28114     the enumerated type, structure or union.
28115
28116`transparent_union'
28117     This attribute, attached to a `union' type definition, indicates
28118     that any function parameter having that union type causes calls to
28119     that function to be treated in a special way.
28120
28121     First, the argument corresponding to a transparent union type can
28122     be of any type in the union; no cast is required.  Also, if the
28123     union contains a pointer type, the corresponding argument can be a
28124     null pointer constant or a void pointer expression; and if the
28125     union contains a void pointer type, the corresponding argument can
28126     be any pointer expression.  If the union member type is a pointer,
28127     qualifiers like `const' on the referenced type must be respected,
28128     just as with normal pointer conversions.
28129
28130     Second, the argument is passed to the function using the calling
28131     conventions of the first member of the transparent union, not the
28132     calling conventions of the union itself.  All members of the union
28133     must have the same machine representation; this is necessary for
28134     this argument passing to work properly.
28135
28136     Transparent unions are designed for library functions that have
28137     multiple interfaces for compatibility reasons.  For example,
28138     suppose the `wait' function must accept either a value of type
28139     `int *' to comply with POSIX, or a value of type `union wait *' to
28140     comply with the 4.1BSD interface.  If `wait''s parameter were
28141     `void *', `wait' would accept both kinds of arguments, but it
28142     would also accept any other pointer type and this would make
28143     argument type checking less useful.  Instead, `<sys/wait.h>' might
28144     define the interface as follows:
28145
28146          typedef union __attribute__ ((__transparent_union__))
28147            {
28148              int *__ip;
28149              union wait *__up;
28150            } wait_status_ptr_t;
28151
28152          pid_t wait (wait_status_ptr_t);
28153
28154     This interface allows either `int *' or `union wait *' arguments
28155     to be passed, using the `int *' calling convention.  The program
28156     can call `wait' with arguments of either type:
28157
28158          int w1 () { int w; return wait (&w); }
28159          int w2 () { union wait w; return wait (&w); }
28160
28161     With this interface, `wait''s implementation might look like this:
28162
28163          pid_t wait (wait_status_ptr_t p)
28164          {
28165            return waitpid (-1, p.__ip, 0);
28166          }
28167
28168`unused'
28169     When attached to a type (including a `union' or a `struct'), this
28170     attribute means that variables of that type are meant to appear
28171     possibly unused.  GCC does not produce a warning for any variables
28172     of that type, even if the variable appears to do nothing.  This is
28173     often the case with lock or thread classes, which are usually
28174     defined and then not referenced, but contain constructors and
28175     destructors that have nontrivial bookkeeping functions.
28176
28177`deprecated'
28178`deprecated (MSG)'
28179     The `deprecated' attribute results in a warning if the type is
28180     used anywhere in the source file.  This is useful when identifying
28181     types that are expected to be removed in a future version of a
28182     program.  If possible, the warning also includes the location of
28183     the declaration of the deprecated type, to enable users to easily
28184     find further information about why the type is deprecated, or what
28185     they should do instead.  Note that the warnings only occur for
28186     uses and then only if the type is being applied to an identifier
28187     that itself is not being declared as deprecated.
28188
28189          typedef int T1 __attribute__ ((deprecated));
28190          T1 x;
28191          typedef T1 T2;
28192          T2 y;
28193          typedef T1 T3 __attribute__ ((deprecated));
28194          T3 z __attribute__ ((deprecated));
28195
28196     results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
28197     warning is issued for line 4 because T2 is not explicitly
28198     deprecated.  Line 5 has no warning because T3 is explicitly
28199     deprecated.  Similarly for line 6.  The optional MSG argument,
28200     which must be a string, is printed in the warning if present.
28201
28202     The `deprecated' attribute can also be used for functions and
28203     variables (*note Function Attributes::, *note Variable
28204     Attributes::.)
28205
28206`may_alias'
28207     Accesses through pointers to types with this attribute are not
28208     subject to type-based alias analysis, but are instead assumed to
28209     be able to alias any other type of objects.  In the context of
28210     section 6.5 paragraph 7 of the C99 standard, an lvalue expression
28211     dereferencing such a pointer is treated like having a character
28212     type.  See `-fstrict-aliasing' for more information on aliasing
28213     issues.  This extension exists to support some vector APIs, in
28214     which pointers to one vector type are permitted to alias pointers
28215     to a different vector type.
28216
28217     Note that an object of a type with this attribute does not have any
28218     special semantics.
28219
28220     Example of use:
28221
28222          typedef short __attribute__((__may_alias__)) short_a;
28223
28224          int
28225          main (void)
28226          {
28227            int a = 0x12345678;
28228            short_a *b = (short_a *) &a;
28229
28230            b[1] = 0;
28231
28232            if (a == 0x12345678)
28233              abort();
28234
28235            exit(0);
28236          }
28237
28238     If you replaced `short_a' with `short' in the variable
28239     declaration, the above program would abort when compiled with
28240     `-fstrict-aliasing', which is on by default at `-O2' or above.
28241
28242`visibility'
28243     In C++, attribute visibility (*note Function Attributes::) can
28244     also be applied to class, struct, union and enum types.  Unlike
28245     other type attributes, the attribute must appear between the
28246     initial keyword and the name of the type; it cannot appear after
28247     the body of the type.
28248
28249     Note that the type visibility is applied to vague linkage entities
28250     associated with the class (vtable, typeinfo node, etc.).  In
28251     particular, if a class is thrown as an exception in one shared
28252     object and caught in another, the class must have default
28253     visibility.  Otherwise the two shared objects are unable to use
28254     the same typeinfo node and exception handling will break.
28255
28256`designated_init'
28257     This attribute may only be applied to structure types.  It
28258     indicates that any initialization of an object of this type must
28259     use designated initializers rather than positional initializers.
28260     The intent of this attribute is to allow the programmer to
28261     indicate that a structure's layout may change, and that therefore
28262     relying on positional initialization will result in future
28263     breakage.
28264
28265     GCC emits warnings based on this attribute by default; use
28266     `-Wno-designated-init' to suppress them.
28267
28268`bnd_variable_size'
28269     When applied to a structure field, this attribute tells Pointer
28270     Bounds Checker that the size of this field should not be computed
28271     using static type information.  It may be used to mark
28272     variably-sized static array fields placed at the end of a
28273     structure.
28274
28275          struct S
28276          {
28277            int size;
28278            char data[1];
28279          }
28280          S *p = (S *)malloc (sizeof(S) + 100);
28281          p->data[10] = 0; //Bounds violation
28282
28283     By using an attribute for the field we may avoid unwanted bound
28284     violation checks:
28285
28286          struct S
28287          {
28288            int size;
28289            char data[1] __attribute__((bnd_variable_size));
28290          }
28291          S *p = (S *)malloc (sizeof(S) + 100);
28292          p->data[10] = 0; //OK
28293
28294
28295 To specify multiple attributes, separate them by commas within the
28296double parentheses: for example, `__attribute__ ((aligned (16),
28297packed))'.
28298
282996.39.1 ARM Type Attributes
28300--------------------------
28301
28302On those ARM targets that support `dllimport' (such as Symbian OS), you
28303can use the `notshared' attribute to indicate that the virtual table
28304and other similar data for a class should not be exported from a DLL.
28305For example:
28306
28307     class __declspec(notshared) C {
28308     public:
28309       __declspec(dllimport) C();
28310       virtual void f();
28311     }
28312
28313     __declspec(dllexport)
28314     C::C() {}
28315
28316In this code, `C::C' is exported from the current DLL, but the virtual
28317table for `C' is not exported.  (You can use `__attribute__' instead of
28318`__declspec' if you prefer, but most Symbian OS code uses `__declspec'.)
28319
283206.39.2 MeP Type Attributes
28321--------------------------
28322
28323Many of the MeP variable attributes may be applied to types as well.
28324Specifically, the `based', `tiny', `near', and `far' attributes may be
28325applied to either.  The `io' and `cb' attributes may not be applied to
28326types.
28327
283286.39.3 PowerPC Type Attributes
28329------------------------------
28330
28331Three attributes currently are defined for PowerPC configurations:
28332`altivec', `ms_struct' and `gcc_struct'.
28333
28334 For full documentation of the `ms_struct' and `gcc_struct' attributes
28335please see the documentation in *note x86 Type Attributes::.
28336
28337 The `altivec' attribute allows one to declare AltiVec vector data
28338types supported by the AltiVec Programming Interface Manual.  The
28339attribute requires an argument to specify one of three vector types:
28340`vector__', `pixel__' (always followed by unsigned short), and `bool__'
28341(always followed by unsigned).
28342
28343     __attribute__((altivec(vector__)))
28344     __attribute__((altivec(pixel__))) unsigned short
28345     __attribute__((altivec(bool__))) unsigned
28346
28347 These attributes mainly are intended to support the `__vector',
28348`__pixel', and `__bool' AltiVec keywords.
28349
283506.39.4 SPU Type Attributes
28351--------------------------
28352
28353The SPU supports the `spu_vector' attribute for types.  This attribute
28354allows one to declare vector data types supported by the
28355Sony/Toshiba/IBM SPU Language Extensions Specification.  It is intended
28356to support the `__vector' keyword.
28357
283586.39.5 x86 Type Attributes
28359--------------------------
28360
28361Two attributes are currently defined for x86 configurations:
28362`ms_struct' and `gcc_struct'.
28363
28364`ms_struct'
28365`gcc_struct'
28366     If `packed' is used on a structure, or if bit-fields are used it
28367     may be that the Microsoft ABI packs them differently than GCC
28368     normally packs them.  Particularly when moving packed data between
28369     functions compiled with GCC and the native Microsoft compiler
28370     (either via function call or as data in a file), it may be
28371     necessary to access either format.
28372
28373     Currently `-m[no-]ms-bitfields' is provided for the Microsoft
28374     Windows x86 compilers to match the native Microsoft compiler.
28375
28376
28377File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
28378
283796.40 Inquiring on Alignment of Types or Variables
28380=================================================
28381
28382The keyword `__alignof__' allows you to inquire about how an object is
28383aligned, or the minimum alignment usually required by a type.  Its
28384syntax is just like `sizeof'.
28385
28386 For example, if the target machine requires a `double' value to be
28387aligned on an 8-byte boundary, then `__alignof__ (double)' is 8.  This
28388is true on many RISC machines.  On more traditional machine designs,
28389`__alignof__ (double)' is 4 or even 2.
28390
28391 Some machines never actually require alignment; they allow reference
28392to any data type even at an odd address.  For these machines,
28393`__alignof__' reports the smallest alignment that GCC gives the data
28394type, usually as mandated by the target ABI.
28395
28396 If the operand of `__alignof__' is an lvalue rather than a type, its
28397value is the required alignment for its type, taking into account any
28398minimum alignment specified with GCC's `__attribute__' extension (*note
28399Variable Attributes::).  For example, after this declaration:
28400
28401     struct foo { int x; char y; } foo1;
28402
28403the value of `__alignof__ (foo1.y)' is 1, even though its actual
28404alignment is probably 2 or 4, the same as `__alignof__ (int)'.
28405
28406 It is an error to ask for the alignment of an incomplete type.
28407
28408
28409File: gcc.info,  Node: Inline,  Next: Volatiles,  Prev: Alignment,  Up: C Extensions
28410
284116.41 An Inline Function is As Fast As a Macro
28412=============================================
28413
28414By declaring a function inline, you can direct GCC to make calls to
28415that function faster.  One way GCC can achieve this is to integrate
28416that function's code into the code for its callers.  This makes
28417execution faster by eliminating the function-call overhead; in
28418addition, if any of the actual argument values are constant, their
28419known values may permit simplifications at compile time so that not all
28420of the inline function's code needs to be included.  The effect on code
28421size is less predictable; object code may be larger or smaller with
28422function inlining, depending on the particular case.  You can also
28423direct GCC to try to integrate all "simple enough" functions into their
28424callers with the option `-finline-functions'.
28425
28426 GCC implements three different semantics of declaring a function
28427inline.  One is available with `-std=gnu89' or `-fgnu89-inline' or when
28428`gnu_inline' attribute is present on all inline declarations, another
28429when `-std=c99', `-std=c11', `-std=gnu99' or `-std=gnu11' (without
28430`-fgnu89-inline'), and the third is used when compiling C++.
28431
28432 To declare a function inline, use the `inline' keyword in its
28433declaration, like this:
28434
28435     static inline int
28436     inc (int *a)
28437     {
28438       return (*a)++;
28439     }
28440
28441 If you are writing a header file to be included in ISO C90 programs,
28442write `__inline__' instead of `inline'.  *Note Alternate Keywords::.
28443
28444 The three types of inlining behave similarly in two important cases:
28445when the `inline' keyword is used on a `static' function, like the
28446example above, and when a function is first declared without using the
28447`inline' keyword and then is defined with `inline', like this:
28448
28449     extern int inc (int *a);
28450     inline int
28451     inc (int *a)
28452     {
28453       return (*a)++;
28454     }
28455
28456 In both of these common cases, the program behaves the same as if you
28457had not used the `inline' keyword, except for its speed.
28458
28459 When a function is both inline and `static', if all calls to the
28460function are integrated into the caller, and the function's address is
28461never used, then the function's own assembler code is never referenced.
28462In this case, GCC does not actually output assembler code for the
28463function, unless you specify the option `-fkeep-inline-functions'.
28464Some calls cannot be integrated for various reasons (in particular,
28465calls that precede the function's definition cannot be integrated, and
28466neither can recursive calls within the definition).  If there is a
28467nonintegrated call, then the function is compiled to assembler code as
28468usual.  The function must also be compiled as usual if the program
28469refers to its address, because that can't be inlined.
28470
28471 Note that certain usages in a function definition can make it
28472unsuitable for inline substitution.  Among these usages are: variadic
28473functions, use of `alloca', use of variable-length data types (*note
28474Variable Length::), use of computed goto (*note Labels as Values::),
28475use of nonlocal goto, and nested functions (*note Nested Functions::).
28476Using `-Winline' warns when a function marked `inline' could not be
28477substituted, and gives the reason for the failure.
28478
28479 As required by ISO C++, GCC considers member functions defined within
28480the body of a class to be marked inline even if they are not explicitly
28481declared with the `inline' keyword.  You can override this with
28482`-fno-default-inline'; *note Options Controlling C++ Dialect: C++
28483Dialect Options.
28484
28485 GCC does not inline any functions when not optimizing unless you
28486specify the `always_inline' attribute for the function, like this:
28487
28488     /* Prototype.  */
28489     inline void foo (const char) __attribute__((always_inline));
28490
28491 The remainder of this section is specific to GNU C90 inlining.
28492
28493 When an inline function is not `static', then the compiler must assume
28494that there may be calls from other source files; since a global symbol
28495can be defined only once in any program, the function must not be
28496defined in the other source files, so the calls therein cannot be
28497integrated.  Therefore, a non-`static' inline function is always
28498compiled on its own in the usual fashion.
28499
28500 If you specify both `inline' and `extern' in the function definition,
28501then the definition is used only for inlining.  In no case is the
28502function compiled on its own, not even if you refer to its address
28503explicitly.  Such an address becomes an external reference, as if you
28504had only declared the function, and had not defined it.
28505
28506 This combination of `inline' and `extern' has almost the effect of a
28507macro.  The way to use it is to put a function definition in a header
28508file with these keywords, and put another copy of the definition
28509(lacking `inline' and `extern') in a library file.  The definition in
28510the header file causes most calls to the function to be inlined.  If
28511any uses of the function remain, they refer to the single copy in the
28512library.
28513
28514
28515File: gcc.info,  Node: Volatiles,  Next: Using Assembly Language with C,  Prev: Inline,  Up: C Extensions
28516
285176.42 When is a Volatile Object Accessed?
28518========================================
28519
28520C has the concept of volatile objects.  These are normally accessed by
28521pointers and used for accessing hardware or inter-thread communication.
28522The standard encourages compilers to refrain from optimizations
28523concerning accesses to volatile objects, but leaves it implementation
28524defined as to what constitutes a volatile access.  The minimum
28525requirement is that at a sequence point all previous accesses to
28526volatile objects have stabilized and no subsequent accesses have
28527occurred.  Thus an implementation is free to reorder and combine
28528volatile accesses that occur between sequence points, but cannot do so
28529for accesses across a sequence point.  The use of volatile does not
28530allow you to violate the restriction on updating objects multiple times
28531between two sequence points.
28532
28533 Accesses to non-volatile objects are not ordered with respect to
28534volatile accesses.  You cannot use a volatile object as a memory
28535barrier to order a sequence of writes to non-volatile memory.  For
28536instance:
28537
28538     int *ptr = SOMETHING;
28539     volatile int vobj;
28540     *ptr = SOMETHING;
28541     vobj = 1;
28542
28543Unless *PTR and VOBJ can be aliased, it is not guaranteed that the
28544write to *PTR occurs by the time the update of VOBJ happens.  If you
28545need this guarantee, you must use a stronger memory barrier such as:
28546
28547     int *ptr = SOMETHING;
28548     volatile int vobj;
28549     *ptr = SOMETHING;
28550     asm volatile ("" : : : "memory");
28551     vobj = 1;
28552
28553 A scalar volatile object is read when it is accessed in a void context:
28554
28555     volatile int *src = SOMEVALUE;
28556     *src;
28557
28558 Such expressions are rvalues, and GCC implements this as a read of the
28559volatile object being pointed to.
28560
28561 Assignments are also expressions and have an rvalue.  However when
28562assigning to a scalar volatile, the volatile object is not reread,
28563regardless of whether the assignment expression's rvalue is used or
28564not.  If the assignment's rvalue is used, the value is that assigned to
28565the volatile object.  For instance, there is no read of VOBJ in all the
28566following cases:
28567
28568     int obj;
28569     volatile int vobj;
28570     vobj = SOMETHING;
28571     obj = vobj = SOMETHING;
28572     obj ? vobj = ONETHING : vobj = ANOTHERTHING;
28573     obj = (SOMETHING, vobj = ANOTHERTHING);
28574
28575 If you need to read the volatile object after an assignment has
28576occurred, you must use a separate expression with an intervening
28577sequence point.
28578
28579 As bit-fields are not individually addressable, volatile bit-fields may
28580be implicitly read when written to, or when adjacent bit-fields are
28581accessed.  Bit-field operations may be optimized such that adjacent
28582bit-fields are only partially accessed, if they straddle a storage unit
28583boundary.  For these reasons it is unwise to use volatile bit-fields to
28584access hardware.
28585
28586
28587File: gcc.info,  Node: Using Assembly Language with C,  Next: Alternate Keywords,  Prev: Volatiles,  Up: C Extensions
28588
285896.43 How to Use Inline Assembly Language in C Code
28590==================================================
28591
28592The `asm' keyword allows you to embed assembler instructions within C
28593code.  GCC provides two forms of inline `asm' statements.  A "basic
28594`asm'" statement is one with no operands (*note Basic Asm::), while an
28595"extended `asm'" statement (*note Extended Asm::) includes one or more
28596operands.  The extended form is preferred for mixing C and assembly
28597language within a function, but to include assembly language at top
28598level you must use basic `asm'.
28599
28600 You can also use the `asm' keyword to override the assembler name for
28601a C symbol, or to place a C variable in a specific register.
28602
28603* Menu:
28604
28605* Basic Asm::          Inline assembler without operands.
28606* Extended Asm::       Inline assembler with operands.
28607* Constraints::        Constraints for `asm' operands
28608* Asm Labels::         Specifying the assembler name to use for a C symbol.
28609* Explicit Reg Vars::  Defining variables residing in specified registers.
28610* Size of an asm::     How GCC calculates the size of an `asm' block.
28611
28612
28613File: gcc.info,  Node: Basic Asm,  Next: Extended Asm,  Up: Using Assembly Language with C
28614
286156.43.1 Basic Asm -- Assembler Instructions Without Operands
28616-----------------------------------------------------------
28617
28618A basic `asm' statement has the following syntax:
28619
28620     asm [ volatile ] ( ASSEMBLERINSTRUCTIONS )
28621
28622 The `asm' keyword is a GNU extension.  When writing code that can be
28623compiled with `-ansi' and the various `-std' options, use `__asm__'
28624instead of `asm' (*note Alternate Keywords::).
28625
28626Qualifiers
28627..........
28628
28629`volatile'
28630     The optional `volatile' qualifier has no effect.  All basic `asm'
28631     blocks are implicitly volatile.
28632
28633Parameters
28634..........
28635
28636ASSEMBLERINSTRUCTIONS
28637     This is a literal string that specifies the assembler code. The
28638     string can contain any instructions recognized by the assembler,
28639     including directives.  GCC does not parse the assembler
28640     instructions themselves and does not know what they mean or even
28641     whether they are valid assembler input.
28642
28643     You may place multiple assembler instructions together in a single
28644     `asm' string, separated by the characters normally used in
28645     assembly code for the system. A combination that works in most
28646     places is a newline to break the line, plus a tab character
28647     (written as `\n\t').  Some assemblers allow semicolons as a line
28648     separator. However, note that some assembler dialects use
28649     semicolons to start a comment.
28650
28651Remarks
28652.......
28653
28654Using extended `asm' typically produces smaller, safer, and more
28655efficient code, and in most cases it is a better solution than basic
28656`asm'.  However, there are two situations where only basic `asm' can be
28657used:
28658
28659   * Extended `asm' statements have to be inside a C function, so to
28660     write inline assembly language at file scope ("top-level"),
28661     outside of C functions, you must use basic `asm'.  You can use
28662     this technique to emit assembler directives, define assembly
28663     language macros that can be invoked elsewhere in the file, or
28664     write entire functions in assembly language.
28665
28666   * Functions declared with the `naked' attribute also require basic
28667     `asm' (*note Function Attributes::).
28668
28669 Safely accessing C data and calling functions from basic `asm' is more
28670complex than it may appear. To access C data, it is better to use
28671extended `asm'.
28672
28673 Do not expect a sequence of `asm' statements to remain perfectly
28674consecutive after compilation. If certain instructions need to remain
28675consecutive in the output, put them in a single multi-instruction `asm'
28676statement. Note that GCC's optimizers can move `asm' statements
28677relative to other code, including across jumps.
28678
28679 `asm' statements may not perform jumps into other `asm' statements.
28680GCC does not know about these jumps, and therefore cannot take account
28681of them when deciding how to optimize. Jumps from `asm' to C labels are
28682only supported in extended `asm'.
28683
28684 Under certain circumstances, GCC may duplicate (or remove duplicates
28685of) your assembly code when optimizing. This can lead to unexpected
28686duplicate symbol errors during compilation if your assembly code
28687defines symbols or labels.
28688
28689 Since GCC does not parse the ASSEMBLERINSTRUCTIONS, it has no
28690visibility of any symbols it references. This may result in GCC
28691discarding those symbols as unreferenced.
28692
28693 The compiler copies the assembler instructions in a basic `asm'
28694verbatim to the assembly language output file, without processing
28695dialects or any of the `%' operators that are available with extended
28696`asm'. This results in minor differences between basic `asm' strings
28697and extended `asm' templates. For example, to refer to registers you
28698might use `%eax' in basic `asm' and `%%eax' in extended `asm'.
28699
28700 On targets such as x86 that support multiple assembler dialects, all
28701basic `asm' blocks use the assembler dialect specified by the `-masm'
28702command-line option (*note x86 Options::).  Basic `asm' provides no
28703mechanism to provide different assembler strings for different dialects.
28704
28705 Here is an example of basic `asm' for i386:
28706
28707     /* Note that this code will not compile with -masm=intel */
28708     #define DebugBreak() asm("int $3")
28709
28710
28711File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Basic Asm,  Up: Using Assembly Language with C
28712
287136.43.2 Extended Asm - Assembler Instructions with C Expression Operands
28714-----------------------------------------------------------------------
28715
28716With extended `asm' you can read and write C variables from assembler
28717and perform jumps from assembler code to C labels.  Extended `asm'
28718syntax uses colons (`:') to delimit the operand parameters after the
28719assembler template:
28720
28721     asm [volatile] ( ASSEMBLERTEMPLATE
28722                      : OUTPUTOPERANDS
28723                      [ : INPUTOPERANDS
28724                      [ : CLOBBERS ] ])
28725
28726     asm [volatile] goto ( ASSEMBLERTEMPLATE
28727                           :
28728                           : INPUTOPERANDS
28729                           : CLOBBERS
28730                           : GOTOLABELS)
28731
28732 The `asm' keyword is a GNU extension.  When writing code that can be
28733compiled with `-ansi' and the various `-std' options, use `__asm__'
28734instead of `asm' (*note Alternate Keywords::).
28735
28736Qualifiers
28737..........
28738
28739`volatile'
28740     The typical use of extended `asm' statements is to manipulate input
28741     values to produce output values. However, your `asm' statements may
28742     also produce side effects. If so, you may need to use the
28743     `volatile' qualifier to disable certain optimizations. *Note
28744     Volatile::.
28745
28746`goto'
28747     This qualifier informs the compiler that the `asm' statement may
28748     perform a jump to one of the labels listed in the GOTOLABELS.
28749     *Note GotoLabels::.
28750
28751Parameters
28752..........
28753
28754ASSEMBLERTEMPLATE
28755     This is a literal string that is the template for the assembler
28756     code. It is a combination of fixed text and tokens that refer to
28757     the input, output, and goto parameters. *Note AssemblerTemplate::.
28758
28759OUTPUTOPERANDS
28760     A comma-separated list of the C variables modified by the
28761     instructions in the ASSEMBLERTEMPLATE.  An empty list is
28762     permitted.  *Note OutputOperands::.
28763
28764INPUTOPERANDS
28765     A comma-separated list of C expressions read by the instructions
28766     in the ASSEMBLERTEMPLATE.  An empty list is permitted.  *Note
28767     InputOperands::.
28768
28769CLOBBERS
28770     A comma-separated list of registers or other values changed by the
28771     ASSEMBLERTEMPLATE, beyond those listed as outputs.  An empty list
28772     is permitted.  *Note Clobbers::.
28773
28774GOTOLABELS
28775     When you are using the `goto' form of `asm', this section contains
28776     the list of all C labels to which the code in the
28777     ASSEMBLERTEMPLATE may jump.  *Note GotoLabels::.
28778
28779     `asm' statements may not perform jumps into other `asm' statements,
28780     only to the listed GOTOLABELS.  GCC's optimizers do not know about
28781     other jumps; therefore they cannot take account of them when
28782     deciding how to optimize.
28783
28784 The total number of input + output + goto operands is limited to 30.
28785
28786Remarks
28787.......
28788
28789The `asm' statement allows you to include assembly instructions directly
28790within C code. This may help you to maximize performance in
28791time-sensitive code or to access assembly instructions that are not
28792readily available to C programs.
28793
28794 Note that extended `asm' statements must be inside a function. Only
28795basic `asm' may be outside functions (*note Basic Asm::).  Functions
28796declared with the `naked' attribute also require basic `asm' (*note
28797Function Attributes::).
28798
28799 While the uses of `asm' are many and varied, it may help to think of an
28800`asm' statement as a series of low-level instructions that convert input
28801parameters to output parameters. So a simple (if not particularly
28802useful) example for i386 using `asm' might look like this:
28803
28804     int src = 1;
28805     int dst;
28806
28807     asm ("mov %1, %0\n\t"
28808         "add $1, %0"
28809         : "=r" (dst)
28810         : "r" (src));
28811
28812     printf("%d\n", dst);
28813
28814 This code copies `src' to `dst' and add 1 to `dst'.
28815
288166.43.2.1 Volatile
28817.................
28818
28819GCC's optimizers sometimes discard `asm' statements if they determine
28820there is no need for the output variables. Also, the optimizers may move
28821code out of loops if they believe that the code will always return the
28822same result (i.e. none of its input values change between calls). Using
28823the `volatile' qualifier disables these optimizations. `asm' statements
28824that have no output operands, including `asm goto' statements, are
28825implicitly volatile.
28826
28827 This i386 code demonstrates a case that does not use (or require) the
28828`volatile' qualifier. If it is performing assertion checking, this code
28829uses `asm' to perform the validation. Otherwise, `dwRes' is
28830unreferenced by any code. As a result, the optimizers can discard the
28831`asm' statement, which in turn removes the need for the entire
28832`DoCheck' routine. By omitting the `volatile' qualifier when it isn't
28833needed you allow the optimizers to produce the most efficient code
28834possible.
28835
28836     void DoCheck(uint32_t dwSomeValue)
28837     {
28838        uint32_t dwRes;
28839
28840        // Assumes dwSomeValue is not zero.
28841        asm ("bsfl %1,%0"
28842          : "=r" (dwRes)
28843          : "r" (dwSomeValue)
28844          : "cc");
28845
28846        assert(dwRes > 3);
28847     }
28848
28849 The next example shows a case where the optimizers can recognize that
28850the input (`dwSomeValue') never changes during the execution of the
28851function and can therefore move the `asm' outside the loop to produce
28852more efficient code.  Again, using `volatile' disables this type of
28853optimization.
28854
28855     void do_print(uint32_t dwSomeValue)
28856     {
28857        uint32_t dwRes;
28858
28859        for (uint32_t x=0; x < 5; x++)
28860        {
28861           // Assumes dwSomeValue is not zero.
28862           asm ("bsfl %1,%0"
28863             : "=r" (dwRes)
28864             : "r" (dwSomeValue)
28865             : "cc");
28866
28867           printf("%u: %u %u\n", x, dwSomeValue, dwRes);
28868        }
28869     }
28870
28871 The following example demonstrates a case where you need to use the
28872`volatile' qualifier.  It uses the x86 `rdtsc' instruction, which reads
28873the computer's time-stamp counter. Without the `volatile' qualifier,
28874the optimizers might assume that the `asm' block will always return the
28875same value and therefore optimize away the second call.
28876
28877     uint64_t msr;
28878
28879     asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
28880             "shl $32, %%rdx\n\t"  // Shift the upper bits left.
28881             "or %%rdx, %0"        // 'Or' in the lower bits.
28882             : "=a" (msr)
28883             :
28884             : "rdx");
28885
28886     printf("msr: %llx\n", msr);
28887
28888     // Do other work...
28889
28890     // Reprint the timestamp
28891     asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
28892             "shl $32, %%rdx\n\t"  // Shift the upper bits left.
28893             "or %%rdx, %0"        // 'Or' in the lower bits.
28894             : "=a" (msr)
28895             :
28896             : "rdx");
28897
28898     printf("msr: %llx\n", msr);
28899
28900 GCC's optimizers do not treat this code like the non-volatile code in
28901the earlier examples. They do not move it out of loops or omit it on the
28902assumption that the result from a previous call is still valid.
28903
28904 Note that the compiler can move even volatile `asm' instructions
28905relative to other code, including across jump instructions. For
28906example, on many targets there is a system register that controls the
28907rounding mode of floating-point operations. Setting it with a volatile
28908`asm', as in the following PowerPC example, does not work reliably.
28909
28910     asm volatile("mtfsf 255, %0" : : "f" (fpenv));
28911     sum = x + y;
28912
28913 The compiler may move the addition back before the volatile `asm'. To
28914make it work as expected, add an artificial dependency to the `asm' by
28915referencing a variable in the subsequent code, for example:
28916
28917     asm volatile ("mtfsf 255,%1" : "=X" (sum) : "f" (fpenv));
28918     sum = x + y;
28919
28920 Under certain circumstances, GCC may duplicate (or remove duplicates
28921of) your assembly code when optimizing. This can lead to unexpected
28922duplicate symbol errors during compilation if your asm code defines
28923symbols or labels.  Using `%=' (*note AssemblerTemplate::) may help
28924resolve this problem.
28925
289266.43.2.2 Assembler Template
28927...........................
28928
28929An assembler template is a literal string containing assembler
28930instructions.  The compiler replaces tokens in the template that refer
28931to inputs, outputs, and goto labels, and then outputs the resulting
28932string to the assembler. The string can contain any instructions
28933recognized by the assembler, including directives. GCC does not parse
28934the assembler instructions themselves and does not know what they mean
28935or even whether they are valid assembler input. However, it does count
28936the statements (*note Size of an asm::).
28937
28938 You may place multiple assembler instructions together in a single
28939`asm' string, separated by the characters normally used in assembly
28940code for the system. A combination that works in most places is a
28941newline to break the line, plus a tab character to move to the
28942instruction field (written as `\n\t').  Some assemblers allow
28943semicolons as a line separator. However, note that some assembler
28944dialects use semicolons to start a comment.
28945
28946 Do not expect a sequence of `asm' statements to remain perfectly
28947consecutive after compilation, even when you are using the `volatile'
28948qualifier. If certain instructions need to remain consecutive in the
28949output, put them in a single multi-instruction asm statement.
28950
28951 Accessing data from C programs without using input/output operands
28952(such as by using global symbols directly from the assembler template)
28953may not work as expected. Similarly, calling functions directly from an
28954assembler template requires a detailed understanding of the target
28955assembler and ABI.
28956
28957 Since GCC does not parse the assembler template, it has no visibility
28958of any symbols it references. This may result in GCC discarding those
28959symbols as unreferenced unless they are also listed as input, output,
28960or goto operands.
28961
28962Special format strings
28963......................
28964
28965In addition to the tokens described by the input, output, and goto
28966operands, these tokens have special meanings in the assembler template:
28967
28968`%%'
28969     Outputs a single `%' into the assembler code.
28970
28971`%='
28972     Outputs a number that is unique to each instance of the `asm'
28973     statement in the entire compilation. This option is useful when
28974     creating local labels and referring to them multiple times in a
28975     single template that generates multiple assembler instructions.
28976
28977`%{'
28978`%|'
28979`%}'
28980     Outputs `{', `|', and `}' characters (respectively) into the
28981     assembler code.  When unescaped, these characters have special
28982     meaning to indicate multiple assembler dialects, as described
28983     below.
28984
28985Multiple assembler dialects in `asm' templates
28986..............................................
28987
28988On targets such as x86, GCC supports multiple assembler dialects.  The
28989`-masm' option controls which dialect GCC uses as its default for
28990inline assembler. The target-specific documentation for the `-masm'
28991option contains the list of supported dialects, as well as the default
28992dialect if the option is not specified. This information may be
28993important to understand, since assembler code that works correctly when
28994compiled using one dialect will likely fail if compiled using another.
28995*Note x86 Options::.
28996
28997 If your code needs to support multiple assembler dialects (for
28998example, if you are writing public headers that need to support a
28999variety of compilation options), use constructs of this form:
29000
29001     { dialect0 | dialect1 | dialect2... }
29002
29003 This construct outputs `dialect0' when using dialect #0 to compile the
29004code, `dialect1' for dialect #1, etc. If there are fewer alternatives
29005within the braces than the number of dialects the compiler supports,
29006the construct outputs nothing.
29007
29008 For example, if an x86 compiler supports two dialects (`att',
29009`intel'), an assembler template such as this:
29010
29011     "bt{l %[Offset],%[Base] | %[Base],%[Offset]}; jc %l2"
29012
29013is equivalent to one of
29014
29015     "btl %[Offset],%[Base] ; jc %l2"   /* att dialect */
29016     "bt %[Base],%[Offset]; jc %l2"     /* intel dialect */
29017
29018 Using that same compiler, this code:
29019
29020     "xchg{l}\t{%%}ebx, %1"
29021
29022corresponds to either
29023
29024     "xchgl\t%%ebx, %1"                 /* att dialect */
29025     "xchg\tebx, %1"                    /* intel dialect */
29026
29027 There is no support for nesting dialect alternatives.
29028
290296.43.2.3 Output Operands
29030........................
29031
29032An `asm' statement has zero or more output operands indicating the names
29033of C variables modified by the assembler code.
29034
29035 In this i386 example, `old' (referred to in the template string as
29036`%0') and `*Base' (as `%1') are outputs and `Offset' (`%2') is an input:
29037
29038     bool old;
29039
29040     __asm__ ("btsl %2,%1\n\t" // Turn on zero-based bit #Offset in Base.
29041              "sbb %0,%0"      // Use the CF to calculate old.
29042        : "=r" (old), "+rm" (*Base)
29043        : "Ir" (Offset)
29044        : "cc");
29045
29046     return old;
29047
29048 Operands are separated by commas.  Each operand has this format:
29049
29050     [ [ASMSYMBOLICNAME] ] CONSTRAINT (CVARIABLENAME)
29051
29052ASMSYMBOLICNAME
29053     Specifies a symbolic name for the operand.  Reference the name in
29054     the assembler template by enclosing it in square brackets (i.e.
29055     `%[Value]'). The scope of the name is the `asm' statement that
29056     contains the definition. Any valid C variable name is acceptable,
29057     including names already defined in the surrounding code. No two
29058     operands within the same `asm' statement can use the same symbolic
29059     name.
29060
29061     When not using an ASMSYMBOLICNAME, use the (zero-based) position
29062     of the operand in the list of operands in the assembler template.
29063     For example if there are three output operands, use `%0' in the
29064     template to refer to the first, `%1' for the second, and `%2' for
29065     the third.
29066
29067CONSTRAINT
29068     A string constant specifying constraints on the placement of the
29069     operand; *Note Constraints::, for details.
29070
29071     Output constraints must begin with either `=' (a variable
29072     overwriting an existing value) or `+' (when reading and writing).
29073     When using `=', do not assume the location contains the existing
29074     value on entry to the `asm', except when the operand is tied to an
29075     input; *note Input Operands: InputOperands.
29076
29077     After the prefix, there must be one or more additional constraints
29078     (*note Constraints::) that describe where the value resides. Common
29079     constraints include `r' for register and `m' for memory.  When you
29080     list more than one possible location (for example, `"=rm"'), the
29081     compiler chooses the most efficient one based on the current
29082     context.  If you list as many alternates as the `asm' statement
29083     allows, you permit the optimizers to produce the best possible
29084     code.  If you must use a specific register, but your Machine
29085     Constraints do not provide sufficient control to select the
29086     specific register you want, local register variables may provide a
29087     solution (*note Local Reg Vars::).
29088
29089CVARIABLENAME
29090     Specifies a C lvalue expression to hold the output, typically a
29091     variable name.  The enclosing parentheses are a required part of
29092     the syntax.
29093
29094
29095 When the compiler selects the registers to use to represent the output
29096operands, it does not use any of the clobbered registers (*note
29097Clobbers::).
29098
29099 Output operand expressions must be lvalues. The compiler cannot check
29100whether the operands have data types that are reasonable for the
29101instruction being executed. For output expressions that are not
29102directly addressable (for example a bit-field), the constraint must
29103allow a register. In that case, GCC uses the register as the output of
29104the `asm', and then stores that register into the output.
29105
29106 Operands using the `+' constraint modifier count as two operands (that
29107is, both as input and output) towards the total maximum of 30 operands
29108per `asm' statement.
29109
29110 Use the `&' constraint modifier (*note Modifiers::) on all output
29111operands that must not overlap an input.  Otherwise, GCC may allocate
29112the output operand in the same register as an unrelated input operand,
29113on the assumption that the assembler code consumes its inputs before
29114producing outputs. This assumption may be false if the assembler code
29115actually consists of more than one instruction.
29116
29117 The same problem can occur if one output parameter (A) allows a
29118register constraint and another output parameter (B) allows a memory
29119constraint.  The code generated by GCC to access the memory address in
29120B can contain registers which _might_ be shared by A, and GCC considers
29121those registers to be inputs to the asm. As above, GCC assumes that
29122such input registers are consumed before any outputs are written. This
29123assumption may result in incorrect behavior if the asm writes to A
29124before using B. Combining the `&' modifier with the register constraint
29125on A ensures that modifying A does not affect the address referenced by
29126B. Otherwise, the location of B is undefined if A is modified before
29127using B.
29128
29129 `asm' supports operand modifiers on operands (for example `%k2'
29130instead of simply `%2'). Typically these qualifiers are hardware
29131dependent. The list of supported modifiers for x86 is found at *note
29132x86 Operand modifiers: x86Operandmodifiers.
29133
29134 If the C code that follows the `asm' makes no use of any of the output
29135operands, use `volatile' for the `asm' statement to prevent the
29136optimizers from discarding the `asm' statement as unneeded (see *note
29137Volatile::).
29138
29139 This code makes no use of the optional ASMSYMBOLICNAME. Therefore it
29140references the first output operand as `%0' (were there a second, it
29141would be `%1', etc). The number of the first input operand is one
29142greater than that of the last output operand. In this i386 example,
29143that makes `Mask' referenced as `%1':
29144
29145     uint32_t Mask = 1234;
29146     uint32_t Index;
29147
29148       asm ("bsfl %1, %0"
29149          : "=r" (Index)
29150          : "r" (Mask)
29151          : "cc");
29152
29153 That code overwrites the variable `Index' (`='), placing the value in
29154a register (`r').  Using the generic `r' constraint instead of a
29155constraint for a specific register allows the compiler to pick the
29156register to use, which can result in more efficient code. This may not
29157be possible if an assembler instruction requires a specific register.
29158
29159 The following i386 example uses the ASMSYMBOLICNAME syntax.  It
29160produces the same result as the code above, but some may consider it
29161more readable or more maintainable since reordering index numbers is
29162not necessary when adding or removing operands. The names `aIndex' and
29163`aMask' are only used in this example to emphasize which names get used
29164where.  It is acceptable to reuse the names `Index' and `Mask'.
29165
29166     uint32_t Mask = 1234;
29167     uint32_t Index;
29168
29169       asm ("bsfl %[aMask], %[aIndex]"
29170          : [aIndex] "=r" (Index)
29171          : [aMask] "r" (Mask)
29172          : "cc");
29173
29174 Here are some more examples of output operands.
29175
29176     uint32_t c = 1;
29177     uint32_t d;
29178     uint32_t *e = &c;
29179
29180     asm ("mov %[e], %[d]"
29181        : [d] "=rm" (d)
29182        : [e] "rm" (*e));
29183
29184 Here, `d' may either be in a register or in memory. Since the compiler
29185might already have the current value of the `uint32_t' location pointed
29186to by `e' in a register, you can enable it to choose the best location
29187for `d' by specifying both constraints.
29188
291896.43.2.4 Input Operands
29190.......................
29191
29192Input operands make values from C variables and expressions available
29193to the assembly code.
29194
29195 Operands are separated by commas.  Each operand has this format:
29196
29197     [ [ASMSYMBOLICNAME] ] CONSTRAINT (CEXPRESSION)
29198
29199ASMSYMBOLICNAME
29200     Specifies a symbolic name for the operand.  Reference the name in
29201     the assembler template by enclosing it in square brackets (i.e.
29202     `%[Value]'). The scope of the name is the `asm' statement that
29203     contains the definition. Any valid C variable name is acceptable,
29204     including names already defined in the surrounding code. No two
29205     operands within the same `asm' statement can use the same symbolic
29206     name.
29207
29208     When not using an ASMSYMBOLICNAME, use the (zero-based) position
29209     of the operand in the list of operands in the assembler template.
29210     For example if there are two output operands and three inputs, use
29211     `%2' in the template to refer to the first input operand, `%3' for
29212     the second, and `%4' for the third.
29213
29214CONSTRAINT
29215     A string constant specifying constraints on the placement of the
29216     operand; *Note Constraints::, for details.
29217
29218     Input constraint strings may not begin with either `=' or `+'.
29219     When you list more than one possible location (for example,
29220     `"irm"'), the compiler chooses the most efficient one based on the
29221     current context.  If you must use a specific register, but your
29222     Machine Constraints do not provide sufficient control to select
29223     the specific register you want, local register variables may
29224     provide a solution (*note Local Reg Vars::).
29225
29226     Input constraints can also be digits (for example, `"0"'). This
29227     indicates that the specified input must be in the same place as
29228     the output constraint at the (zero-based) index in the output
29229     constraint list.  When using ASMSYMBOLICNAME syntax for the output
29230     operands, you may use these names (enclosed in brackets `[]')
29231     instead of digits.
29232
29233CEXPRESSION
29234     This is the C variable or expression being passed to the `asm'
29235     statement as input.  The enclosing parentheses are a required part
29236     of the syntax.
29237
29238
29239 When the compiler selects the registers to use to represent the input
29240operands, it does not use any of the clobbered registers (*note
29241Clobbers::).
29242
29243 If there are no output operands but there are input operands, place two
29244consecutive colons where the output operands would go:
29245
29246     __asm__ ("some instructions"
29247        : /* No outputs. */
29248        : "r" (Offset / 8));
29249
29250 *Warning:* Do _not_ modify the contents of input-only operands (except
29251for inputs tied to outputs). The compiler assumes that on exit from the
29252`asm' statement these operands contain the same values as they had
29253before executing the statement.  It is _not_ possible to use clobbers
29254to inform the compiler that the values in these inputs are changing. One
29255common work-around is to tie the changing input variable to an output
29256variable that never gets used. Note, however, that if the code that
29257follows the `asm' statement makes no use of any of the output operands,
29258the GCC optimizers may discard the `asm' statement as unneeded (see
29259*note Volatile::).
29260
29261 `asm' supports operand modifiers on operands (for example `%k2'
29262instead of simply `%2'). Typically these qualifiers are hardware
29263dependent. The list of supported modifiers for x86 is found at *note
29264x86 Operand modifiers: x86Operandmodifiers.
29265
29266 In this example using the fictitious `combine' instruction, the
29267constraint `"0"' for input operand 1 says that it must occupy the same
29268location as output operand 0. Only input operands may use numbers in
29269constraints, and they must each refer to an output operand. Only a
29270number (or the symbolic assembler name) in the constraint can guarantee
29271that one operand is in the same place as another. The mere fact that
29272`foo' is the value of both operands is not enough to guarantee that
29273they are in the same place in the generated assembler code.
29274
29275     asm ("combine %2, %0"
29276        : "=r" (foo)
29277        : "0" (foo), "g" (bar));
29278
29279 Here is an example using symbolic names.
29280
29281     asm ("cmoveq %1, %2, %[result]"
29282        : [result] "=r"(result)
29283        : "r" (test), "r" (new), "[result]" (old));
29284
292856.43.2.5 Clobbers
29286.................
29287
29288While the compiler is aware of changes to entries listed in the output
29289operands, the inline `asm' code may modify more than just the outputs.
29290For example, calculations may require additional registers, or the
29291processor may overwrite a register as a side effect of a particular
29292assembler instruction.  In order to inform the compiler of these
29293changes, list them in the clobber list. Clobber list items are either
29294register names or the special clobbers (listed below). Each clobber
29295list item is a string constant enclosed in double quotes and separated
29296by commas.
29297
29298 Clobber descriptions may not in any way overlap with an input or output
29299operand. For example, you may not have an operand describing a register
29300class with one member when listing that register in the clobber list.
29301Variables declared to live in specific registers (*note Explicit Reg
29302Vars::) and used as `asm' input or output operands must have no part
29303mentioned in the clobber description. In particular, there is no way to
29304specify that input operands get modified without also specifying them
29305as output operands.
29306
29307 When the compiler selects which registers to use to represent input
29308and output operands, it does not use any of the clobbered registers. As
29309a result, clobbered registers are available for any use in the
29310assembler code.
29311
29312 Here is a realistic example for the VAX showing the use of clobbered
29313registers:
29314
29315     asm volatile ("movc3 %0, %1, %2"
29316                        : /* No outputs. */
29317                        : "g" (from), "g" (to), "g" (count)
29318                        : "r0", "r1", "r2", "r3", "r4", "r5");
29319
29320 Also, there are two special clobber arguments:
29321
29322`"cc"'
29323     The `"cc"' clobber indicates that the assembler code modifies the
29324     flags register. On some machines, GCC represents the condition
29325     codes as a specific hardware register; `"cc"' serves to name this
29326     register.  On other machines, condition code handling is different,
29327     and specifying `"cc"' has no effect. But it is valid no matter
29328     what the target.
29329
29330`"memory"'
29331     The `"memory"' clobber tells the compiler that the assembly code
29332     performs memory reads or writes to items other than those listed
29333     in the input and output operands (for example, accessing the
29334     memory pointed to by one of the input parameters). To ensure
29335     memory contains correct values, GCC may need to flush specific
29336     register values to memory before executing the `asm'. Further, the
29337     compiler does not assume that any values read from memory before an
29338     `asm' remain unchanged after that `asm'; it reloads them as needed.
29339     Using the `"memory"' clobber effectively forms a read/write memory
29340     barrier for the compiler.
29341
29342     Note that this clobber does not prevent the _processor_ from doing
29343     speculative reads past the `asm' statement. To prevent that, you
29344     need processor-specific fence instructions.
29345
29346     Flushing registers to memory has performance implications and may
29347     be an issue for time-sensitive code.  You can use a trick to avoid
29348     this if the size of the memory being accessed is known at compile
29349     time. For example, if accessing ten bytes of a string, use a
29350     memory input like:
29351
29352     `{"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}'.
29353
29354
293556.43.2.6 Goto Labels
29356....................
29357
29358`asm goto' allows assembly code to jump to one or more C labels.  The
29359GOTOLABELS section in an `asm goto' statement contains a comma-separated
29360list of all C labels to which the assembler code may jump. GCC assumes
29361that `asm' execution falls through to the next statement (if this is
29362not the case, consider using the `__builtin_unreachable' intrinsic
29363after the `asm' statement). Optimization of `asm goto' may be improved
29364by using the `hot' and `cold' label attributes (*note Label
29365Attributes::).
29366
29367 An `asm goto' statement cannot have outputs.  This is due to an
29368internal restriction of the compiler: control transfer instructions
29369cannot have outputs.  If the assembler code does modify anything, use
29370the `"memory"' clobber to force the optimizers to flush all register
29371values to memory and reload them if necessary after the `asm' statement.
29372
29373 Also note that an `asm goto' statement is always implicitly considered
29374volatile.
29375
29376 To reference a label in the assembler template, prefix it with `%l'
29377(lowercase `L') followed by its (zero-based) position in GOTOLABELS
29378plus the number of input operands.  For example, if the `asm' has three
29379inputs and references two labels, refer to the first label as `%l3' and
29380the second as `%l4').
29381
29382 Alternately, you can reference labels using the actual C label name
29383enclosed in brackets.  For example, to reference a label named `carry',
29384you can use `%l[carry]'.  The label must still be listed in the
29385GOTOLABELS section when using this approach.
29386
29387 Here is an example of `asm goto' for i386:
29388
29389     asm goto (
29390         "btl %1, %0\n\t"
29391         "jc %l2"
29392         : /* No outputs. */
29393         : "r" (p1), "r" (p2)
29394         : "cc"
29395         : carry);
29396
29397     return 0;
29398
29399     carry:
29400     return 1;
29401
29402 The following example shows an `asm goto' that uses a memory clobber.
29403
29404     int frob(int x)
29405     {
29406       int y;
29407       asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
29408                 : /* No outputs. */
29409                 : "r"(x), "r"(&y)
29410                 : "r5", "memory"
29411                 : error);
29412       return y;
29413     error:
29414       return -1;
29415     }
29416
294176.43.2.7 x86 Operand Modifiers
29418..............................
29419
29420References to input, output, and goto operands in the assembler template
29421of extended `asm' statements can use modifiers to affect the way the
29422operands are formatted in the code output to the assembler. For
29423example, the following code uses the `h' and `b' modifiers for x86:
29424
29425     uint16_t  num;
29426     asm volatile ("xchg %h0, %b0" : "+a" (num) );
29427
29428These modifiers generate this assembler code:
29429
29430     xchg %ah, %al
29431
29432 The rest of this discussion uses the following code for illustrative
29433purposes.
29434
29435     int main()
29436     {
29437        int iInt = 1;
29438
29439     top:
29440
29441        asm volatile goto ("some assembler instructions here"
29442        : /* No outputs. */
29443        : "q" (iInt), "X" (sizeof(unsigned char) + 1)
29444        : /* No clobbers. */
29445        : top);
29446     }
29447
29448 With no modifiers, this is what the output from the operands would be
29449for the `att' and `intel' dialects of assembler:
29450
29451Operand   masm=att   masm=intel
29452--------------------------------------- 
29453`%0'      `%eax'     `eax'
29454`%1'      `$2'       `2'
29455`%2'      `$.L2'     `OFFSET FLAT:.L2'
29456
29457 The table below shows the list of supported modifiers and their
29458effects.
29459
29460Modifier   Description                                  Operand   `masm=att' `masm=intel'
29461------------------------------------------------------------------------------------------ 
29462`z'        Print the opcode suffix for the size of the  `%z0'     `l'        
29463           current integer operand (one of                                   
29464           `b'/`w'/`l'/`q').                                                 
29465`b'        Print the QImode name of the register.       `%b0'     `%al'      `al'
29466`h'        Print the QImode name for a "high" register. `%h0'     `%ah'      `ah'
29467`w'        Print the HImode name of the register.       `%w0'     `%ax'      `ax'
29468`k'        Print the SImode name of the register.       `%k0'     `%eax'     `eax'
29469`q'        Print the DImode name of the register.       `%q0'     `%rax'     `rax'
29470`l'        Print the label name with no punctuation.    `%l2'     `.L2'      `.L2'
29471`c'        Require a constant operand and print the     `%c1'     `2'        `2'
29472           constant expression with no punctuation.                          
29473
294746.43.2.8 x86 Floating-Point `asm' Operands
29475..........................................
29476
29477On x86 targets, there are several rules on the usage of stack-like
29478registers in the operands of an `asm'.  These rules apply only to the
29479operands that are stack-like registers:
29480
29481  1. Given a set of input registers that die in an `asm', it is
29482     necessary to know which are implicitly popped by the `asm', and
29483     which must be explicitly popped by GCC.
29484
29485     An input register that is implicitly popped by the `asm' must be
29486     explicitly clobbered, unless it is constrained to match an output
29487     operand.
29488
29489  2. For any input register that is implicitly popped by an `asm', it is
29490     necessary to know how to adjust the stack to compensate for the
29491     pop.  If any non-popped input is closer to the top of the
29492     reg-stack than the implicitly popped register, it would not be
29493     possible to know what the stack looked like--it's not clear how
29494     the rest of the stack "slides up".
29495
29496     All implicitly popped input registers must be closer to the top of
29497     the reg-stack than any input that is not implicitly popped.
29498
29499     It is possible that if an input dies in an `asm', the compiler
29500     might use the input register for an output reload.  Consider this
29501     example:
29502
29503          asm ("foo" : "=t" (a) : "f" (b));
29504
29505     This code says that input `b' is not popped by the `asm', and that
29506     the `asm' pushes a result onto the reg-stack, i.e., the stack is
29507     one deeper after the `asm' than it was before.  But, it is
29508     possible that reload may think that it can use the same register
29509     for both the input and the output.
29510
29511     To prevent this from happening, if any input operand uses the `f'
29512     constraint, all output register constraints must use the `&'
29513     early-clobber modifier.
29514
29515     The example above is correctly written as:
29516
29517          asm ("foo" : "=&t" (a) : "f" (b));
29518
29519  3. Some operands need to be in particular places on the stack.  All
29520     output operands fall in this category--GCC has no other way to
29521     know which registers the outputs appear in unless you indicate
29522     this in the constraints.
29523
29524     Output operands must specifically indicate which register an output
29525     appears in after an `asm'.  `=f' is not allowed: the operand
29526     constraints must select a class with a single register.
29527
29528  4. Output operands may not be "inserted" between existing stack
29529     registers.  Since no 387 opcode uses a read/write operand, all
29530     output operands are dead before the `asm', and are pushed by the
29531     `asm'.  It makes no sense to push anywhere but the top of the
29532     reg-stack.
29533
29534     Output operands must start at the top of the reg-stack: output
29535     operands may not "skip" a register.
29536
29537  5. Some `asm' statements may need extra stack space for internal
29538     calculations.  This can be guaranteed by clobbering stack registers
29539     unrelated to the inputs and outputs.
29540
29541
29542 This `asm' takes one input, which is internally popped, and produces
29543two outputs.
29544
29545     asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
29546
29547This `asm' takes two inputs, which are popped by the `fyl2xp1' opcode,
29548and replaces them with one output.  The `st(1)' clobber is necessary
29549for the compiler to know that `fyl2xp1' pops both inputs.
29550
29551     asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
29552
29553
29554File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: Using Assembly Language with C
29555
295566.43.3 Constraints for `asm' Operands
29557-------------------------------------
29558
29559Here are specific details on what constraint letters you can use with
29560`asm' operands.  Constraints can say whether an operand may be in a
29561register, and which kinds of register; whether the operand can be a
29562memory reference, and which kinds of address; whether the operand may
29563be an immediate constant, and which possible values it may have.
29564Constraints can also require two operands to match.  Side-effects
29565aren't allowed in operands of inline `asm', unless `<' or `>'
29566constraints are used, because there is no guarantee that the
29567side-effects will happen exactly once in an instruction that can update
29568the addressing register.
29569
29570* Menu:
29571
29572* Simple Constraints::  Basic use of constraints.
29573* Multi-Alternative::   When an insn has two alternative constraint-patterns.
29574* Modifiers::           More precise control over effects of constraints.
29575* Machine Constraints:: Special constraints for some particular machines.
29576
29577
29578File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
29579
295806.43.3.1 Simple Constraints
29581...........................
29582
29583The simplest kind of constraint is a string full of letters, each of
29584which describes one kind of operand that is permitted.  Here are the
29585letters that are allowed:
29586
29587whitespace
29588     Whitespace characters are ignored and can be inserted at any
29589     position except the first.  This enables each alternative for
29590     different operands to be visually aligned in the machine
29591     description even if they have different number of constraints and
29592     modifiers.
29593
29594`m'
29595     A memory operand is allowed, with any kind of address that the
29596     machine supports in general.  Note that the letter used for the
29597     general memory constraint can be re-defined by a back end using
29598     the `TARGET_MEM_CONSTRAINT' macro.
29599
29600`o'
29601     A memory operand is allowed, but only if the address is
29602     "offsettable".  This means that adding a small integer (actually,
29603     the width in bytes of the operand, as determined by its machine
29604     mode) may be added to the address and the result is also a valid
29605     memory address.
29606
29607     For example, an address which is constant is offsettable; so is an
29608     address that is the sum of a register and a constant (as long as a
29609     slightly larger constant is also within the range of
29610     address-offsets supported by the machine); but an autoincrement or
29611     autodecrement address is not offsettable.  More complicated
29612     indirect/indexed addresses may or may not be offsettable depending
29613     on the other addressing modes that the machine supports.
29614
29615     Note that in an output operand which can be matched by another
29616     operand, the constraint letter `o' is valid only when accompanied
29617     by both `<' (if the target machine has predecrement addressing)
29618     and `>' (if the target machine has preincrement addressing).
29619
29620`V'
29621     A memory operand that is not offsettable.  In other words,
29622     anything that would fit the `m' constraint but not the `o'
29623     constraint.
29624
29625`<'
29626     A memory operand with autodecrement addressing (either
29627     predecrement or postdecrement) is allowed.  In inline `asm' this
29628     constraint is only allowed if the operand is used exactly once in
29629     an instruction that can handle the side-effects.  Not using an
29630     operand with `<' in constraint string in the inline `asm' pattern
29631     at all or using it in multiple instructions isn't valid, because
29632     the side-effects wouldn't be performed or would be performed more
29633     than once.  Furthermore, on some targets the operand with `<' in
29634     constraint string must be accompanied by special instruction
29635     suffixes like `%U0' instruction suffix on PowerPC or `%P0' on
29636     IA-64.
29637
29638`>'
29639     A memory operand with autoincrement addressing (either
29640     preincrement or postincrement) is allowed.  In inline `asm' the
29641     same restrictions as for `<' apply.
29642
29643`r'
29644     A register operand is allowed provided that it is in a general
29645     register.
29646
29647`i'
29648     An immediate integer operand (one with constant value) is allowed.
29649     This includes symbolic constants whose values will be known only at
29650     assembly time or later.
29651
29652`n'
29653     An immediate integer operand with a known numeric value is allowed.
29654     Many systems cannot support assembly-time constants for operands
29655     less than a word wide.  Constraints for these operands should use
29656     `n' rather than `i'.
29657
29658`I', `J', `K', ... `P'
29659     Other letters in the range `I' through `P' may be defined in a
29660     machine-dependent fashion to permit immediate integer operands with
29661     explicit integer values in specified ranges.  For example, on the
29662     68000, `I' is defined to stand for the range of values 1 to 8.
29663     This is the range permitted as a shift count in the shift
29664     instructions.
29665
29666`E'
29667     An immediate floating operand (expression code `const_double') is
29668     allowed, but only if the target floating point format is the same
29669     as that of the host machine (on which the compiler is running).
29670
29671`F'
29672     An immediate floating operand (expression code `const_double' or
29673     `const_vector') is allowed.
29674
29675`G', `H'
29676     `G' and `H' may be defined in a machine-dependent fashion to
29677     permit immediate floating operands in particular ranges of values.
29678
29679`s'
29680     An immediate integer operand whose value is not an explicit
29681     integer is allowed.
29682
29683     This might appear strange; if an insn allows a constant operand
29684     with a value not known at compile time, it certainly must allow
29685     any known value.  So why use `s' instead of `i'?  Sometimes it
29686     allows better code to be generated.
29687
29688     For example, on the 68000 in a fullword instruction it is possible
29689     to use an immediate operand; but if the immediate value is between
29690     -128 and 127, better code results from loading the value into a
29691     register and using the register.  This is because the load into
29692     the register can be done with a `moveq' instruction.  We arrange
29693     for this to happen by defining the letter `K' to mean "any integer
29694     outside the range -128 to 127", and then specifying `Ks' in the
29695     operand constraints.
29696
29697`g'
29698     Any register, memory or immediate integer operand is allowed,
29699     except for registers that are not general registers.
29700
29701`X'
29702     Any operand whatsoever is allowed.
29703
29704`0', `1', `2', ... `9'
29705     An operand that matches the specified operand number is allowed.
29706     If a digit is used together with letters within the same
29707     alternative, the digit should come last.
29708
29709     This number is allowed to be more than a single digit.  If multiple
29710     digits are encountered consecutively, they are interpreted as a
29711     single decimal integer.  There is scant chance for ambiguity,
29712     since to-date it has never been desirable that `10' be interpreted
29713     as matching either operand 1 _or_ operand 0.  Should this be
29714     desired, one can use multiple alternatives instead.
29715
29716     This is called a "matching constraint" and what it really means is
29717     that the assembler has only a single operand that fills two roles
29718     which `asm' distinguishes.  For example, an add instruction uses
29719     two input operands and an output operand, but on most CISC
29720     machines an add instruction really has only two operands, one of
29721     them an input-output operand:
29722
29723          addl #35,r12
29724
29725     Matching constraints are used in these circumstances.  More
29726     precisely, the two operands that match must include one input-only
29727     operand and one output-only operand.  Moreover, the digit must be a
29728     smaller number than the number of the operand that uses it in the
29729     constraint.
29730
29731`p'
29732     An operand that is a valid memory address is allowed.  This is for
29733     "load address" and "push address" instructions.
29734
29735     `p' in the constraint must be accompanied by `address_operand' as
29736     the predicate in the `match_operand'.  This predicate interprets
29737     the mode specified in the `match_operand' as the mode of the memory
29738     reference for which the address would be valid.
29739
29740OTHER-LETTERS
29741     Other letters can be defined in machine-dependent fashion to stand
29742     for particular classes of registers or other arbitrary operand
29743     types.  `d', `a' and `f' are defined on the 68000/68020 to stand
29744     for data, address and floating point registers.
29745
29746
29747File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
29748
297496.43.3.2 Multiple Alternative Constraints
29750.........................................
29751
29752Sometimes a single instruction has multiple alternative sets of possible
29753operands.  For example, on the 68000, a logical-or instruction can
29754combine register or an immediate value into memory, or it can combine
29755any kind of operand into a register; but it cannot combine one memory
29756location into another.
29757
29758 These constraints are represented as multiple alternatives.  An
29759alternative can be described by a series of letters for each operand.
29760The overall constraint for an operand is made from the letters for this
29761operand from the first alternative, a comma, the letters for this
29762operand from the second alternative, a comma, and so on until the last
29763alternative.
29764
29765 If all the operands fit any one alternative, the instruction is valid.
29766Otherwise, for each alternative, the compiler counts how many
29767instructions must be added to copy the operands so that that
29768alternative applies.  The alternative requiring the least copying is
29769chosen.  If two alternatives need the same amount of copying, the one
29770that comes first is chosen.  These choices can be altered with the `?'
29771and `!' characters:
29772
29773`?'
29774     Disparage slightly the alternative that the `?' appears in, as a
29775     choice when no alternative applies exactly.  The compiler regards
29776     this alternative as one unit more costly for each `?' that appears
29777     in it.
29778
29779`!'
29780     Disparage severely the alternative that the `!' appears in.  This
29781     alternative can still be used if it fits without reloading, but if
29782     reloading is needed, some other alternative will be used.
29783
29784`^'
29785     This constraint is analogous to `?' but it disparages slightly the
29786     alternative only if the operand with the `^' needs a reload.
29787
29788`$'
29789     This constraint is analogous to `!' but it disparages severely the
29790     alternative only if the operand with the `$' needs a reload.
29791
29792
29793File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
29794
297956.43.3.3 Constraint Modifier Characters
29796.......................................
29797
29798Here are constraint modifier characters.
29799
29800`='
29801     Means that this operand is written to by this instruction: the
29802     previous value is discarded and replaced by new data.
29803
29804`+'
29805     Means that this operand is both read and written by the
29806     instruction.
29807
29808     When the compiler fixes up the operands to satisfy the constraints,
29809     it needs to know which operands are read by the instruction and
29810     which are written by it.  `=' identifies an operand which is only
29811     written; `+' identifies an operand that is both read and written;
29812     all other operands are assumed to only be read.
29813
29814     If you specify `=' or `+' in a constraint, you put it in the first
29815     character of the constraint string.
29816
29817`&'
29818     Means (in a particular alternative) that this operand is an
29819     "earlyclobber" operand, which is written before the instruction is
29820     finished using the input operands.  Therefore, this operand may
29821     not lie in a register that is read by the instruction or as part
29822     of any memory address.
29823
29824     `&' applies only to the alternative in which it is written.  In
29825     constraints with multiple alternatives, sometimes one alternative
29826     requires `&' while others do not.  See, for example, the `movdf'
29827     insn of the 68000.
29828
29829     A operand which is read by the instruction can be tied to an
29830     earlyclobber operand if its only use as an input occurs before the
29831     early result is written.  Adding alternatives of this form often
29832     allows GCC to produce better code when only some of the read
29833     operands can be affected by the earlyclobber. See, for example,
29834     the `mulsi3' insn of the ARM.
29835
29836     Furthermore, if the "earlyclobber" operand is also a read/write
29837     operand, then that operand is written only after it's used.
29838
29839     `&' does not obviate the need to write `=' or `+'.  As
29840     "earlyclobber" operands are always written, a read-only
29841     "earlyclobber" operand is ill-formed and will be rejected by the
29842     compiler.
29843
29844`%'
29845     Declares the instruction to be commutative for this operand and the
29846     following operand.  This means that the compiler may interchange
29847     the two operands if that is the cheapest way to make all operands
29848     fit the constraints.  `%' applies to all alternatives and must
29849     appear as the first character in the constraint.  Only read-only
29850     operands can use `%'.
29851
29852     GCC can only handle one commutative pair in an asm; if you use
29853     more, the compiler may fail.  Note that you need not use the
29854     modifier if the two alternatives are strictly identical; this
29855     would only waste time in the reload pass.  The modifier is not
29856     operational after register allocation, so the result of
29857     `define_peephole2' and `define_split's performed after reload
29858     cannot rely on `%' to make the intended insn match.
29859
29860`#'
29861     Says that all following characters, up to the next comma, are to be
29862     ignored as a constraint.  They are significant only for choosing
29863     register preferences.
29864
29865`*'
29866     Says that the following character should be ignored when choosing
29867     register preferences.  `*' has no effect on the meaning of the
29868     constraint as a constraint, and no effect on reloading.  For LRA
29869     `*' additionally disparages slightly the alternative if the
29870     following character matches the operand.
29871
29872
29873
29874File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
29875
298766.43.3.4 Constraints for Particular Machines
29877............................................
29878
29879Whenever possible, you should use the general-purpose constraint letters
29880in `asm' arguments, since they will convey meaning more readily to
29881people reading your code.  Failing that, use the constraint letters
29882that usually have very similar meanings across architectures.  The most
29883commonly used constraints are `m' and `r' (for memory and
29884general-purpose registers respectively; *note Simple Constraints::), and
29885`I', usually the letter indicating the most common immediate-constant
29886format.
29887
29888 Each architecture defines additional constraints.  These constraints
29889are used by the compiler itself for instruction generation, as well as
29890for `asm' statements; therefore, some of the constraints are not
29891particularly useful for `asm'.  Here is a summary of some of the
29892machine-dependent constraints available on some particular machines; it
29893includes both constraints that are useful for `asm' and constraints
29894that aren't.  The compiler source file mentioned in the table heading
29895for each architecture is the definitive reference for the meanings of
29896that architecture's constraints.
29897
29898_AArch64 family--`config/aarch64/constraints.md'_
29899
29900    `k'
29901          The stack pointer register (`SP')
29902
29903    `w'
29904          Floating point or SIMD vector register
29905
29906    `I'
29907          Integer constant that is valid as an immediate operand in an
29908          `ADD' instruction
29909
29910    `J'
29911          Integer constant that is valid as an immediate operand in a
29912          `SUB' instruction (once negated)
29913
29914    `K'
29915          Integer constant that can be used with a 32-bit logical
29916          instruction
29917
29918    `L'
29919          Integer constant that can be used with a 64-bit logical
29920          instruction
29921
29922    `M'
29923          Integer constant that is valid as an immediate operand in a
29924          32-bit `MOV' pseudo instruction. The `MOV' may be assembled
29925          to one of several different machine instructions depending on
29926          the value
29927
29928    `N'
29929          Integer constant that is valid as an immediate operand in a
29930          64-bit `MOV' pseudo instruction
29931
29932    `S'
29933          An absolute symbolic address or a label reference
29934
29935    `Y'
29936          Floating point constant zero
29937
29938    `Z'
29939          Integer constant zero
29940
29941    `Ush'
29942          The high part (bits 12 and upwards) of the pc-relative
29943          address of a symbol within 4GB of the instruction
29944
29945    `Q'
29946          A memory address which uses a single base register with no
29947          offset
29948
29949    `Ump'
29950          A memory address suitable for a load/store pair instruction
29951          in SI, DI, SF and DF modes
29952
29953
29954_ARC --`config/arc/constraints.md'_
29955
29956    `q'
29957          Registers usable in ARCompact 16-bit instructions: `r0'-`r3',
29958          `r12'-`r15'.  This constraint can only match when the `-mq'
29959          option is in effect.
29960
29961    `e'
29962          Registers usable as base-regs of memory addresses in
29963          ARCompact 16-bit memory instructions: `r0'-`r3', `r12'-`r15',
29964          `sp'.  This constraint can only match when the `-mq' option
29965          is in effect.
29966
29967    `D'
29968          ARC FPX (dpfp) 64-bit registers. `D0', `D1'.
29969
29970    `I'
29971          A signed 12-bit integer constant.
29972
29973    `Cal'
29974          constant for arithmetic/logical operations.  This might be
29975          any constant that can be put into a long immediate by the
29976          assmbler or linker without involving a PIC relocation.
29977
29978    `K'
29979          A 3-bit unsigned integer constant.
29980
29981    `L'
29982          A 6-bit unsigned integer constant.
29983
29984    `CnL'
29985          One's complement of a 6-bit unsigned integer constant.
29986
29987    `CmL'
29988          Two's complement of a 6-bit unsigned integer constant.
29989
29990    `M'
29991          A 5-bit unsigned integer constant.
29992
29993    `O'
29994          A 7-bit unsigned integer constant.
29995
29996    `P'
29997          A 8-bit unsigned integer constant.
29998
29999    `H'
30000          Any const_double value.
30001
30002_ARM family--`config/arm/constraints.md'_
30003
30004    `h'
30005          In Thumb state, the core registers `r8'-`r15'.
30006
30007    `k'
30008          The stack pointer register.
30009
30010    `l'
30011          In Thumb State the core registers `r0'-`r7'.  In ARM state
30012          this is an alias for the `r' constraint.
30013
30014    `t'
30015          VFP floating-point registers `s0'-`s31'.  Used for 32 bit
30016          values.
30017
30018    `w'
30019          VFP floating-point registers `d0'-`d31' and the appropriate
30020          subset `d0'-`d15' based on command line options.  Used for 64
30021          bit values only.  Not valid for Thumb1.
30022
30023    `y'
30024          The iWMMX co-processor registers.
30025
30026    `z'
30027          The iWMMX GR registers.
30028
30029    `G'
30030          The floating-point constant 0.0
30031
30032    `I'
30033          Integer that is valid as an immediate operand in a data
30034          processing instruction.  That is, an integer in the range 0
30035          to 255 rotated by a multiple of 2
30036
30037    `J'
30038          Integer in the range -4095 to 4095
30039
30040    `K'
30041          Integer that satisfies constraint `I' when inverted (ones
30042          complement)
30043
30044    `L'
30045          Integer that satisfies constraint `I' when negated (twos
30046          complement)
30047
30048    `M'
30049          Integer in the range 0 to 32
30050
30051    `Q'
30052          A memory reference where the exact address is in a single
30053          register (``m'' is preferable for `asm' statements)
30054
30055    `R'
30056          An item in the constant pool
30057
30058    `S'
30059          A symbol in the text segment of the current file
30060
30061    `Uv'
30062          A memory reference suitable for VFP load/store insns
30063          (reg+constant offset)
30064
30065    `Uy'
30066          A memory reference suitable for iWMMXt load/store
30067          instructions.
30068
30069    `Uq'
30070          A memory reference suitable for the ARMv4 ldrsb instruction.
30071
30072_AVR family--`config/avr/constraints.md'_
30073
30074    `l'
30075          Registers from r0 to r15
30076
30077    `a'
30078          Registers from r16 to r23
30079
30080    `d'
30081          Registers from r16 to r31
30082
30083    `w'
30084          Registers from r24 to r31.  These registers can be used in
30085          `adiw' command
30086
30087    `e'
30088          Pointer register (r26-r31)
30089
30090    `b'
30091          Base pointer register (r28-r31)
30092
30093    `q'
30094          Stack pointer register (SPH:SPL)
30095
30096    `t'
30097          Temporary register r0
30098
30099    `x'
30100          Register pair X (r27:r26)
30101
30102    `y'
30103          Register pair Y (r29:r28)
30104
30105    `z'
30106          Register pair Z (r31:r30)
30107
30108    `I'
30109          Constant greater than -1, less than 64
30110
30111    `J'
30112          Constant greater than -64, less than 1
30113
30114    `K'
30115          Constant integer 2
30116
30117    `L'
30118          Constant integer 0
30119
30120    `M'
30121          Constant that fits in 8 bits
30122
30123    `N'
30124          Constant integer -1
30125
30126    `O'
30127          Constant integer 8, 16, or 24
30128
30129    `P'
30130          Constant integer 1
30131
30132    `G'
30133          A floating point constant 0.0
30134
30135    `Q'
30136          A memory address based on Y or Z pointer with displacement.
30137
30138_Blackfin family--`config/bfin/constraints.md'_
30139
30140    `a'
30141          P register
30142
30143    `d'
30144          D register
30145
30146    `z'
30147          A call clobbered P register.
30148
30149    `qN'
30150          A single register.  If N is in the range 0 to 7, the
30151          corresponding D register.  If it is `A', then the register P0.
30152
30153    `D'
30154          Even-numbered D register
30155
30156    `W'
30157          Odd-numbered D register
30158
30159    `e'
30160          Accumulator register.
30161
30162    `A'
30163          Even-numbered accumulator register.
30164
30165    `B'
30166          Odd-numbered accumulator register.
30167
30168    `b'
30169          I register
30170
30171    `v'
30172          B register
30173
30174    `f'
30175          M register
30176
30177    `c'
30178          Registers used for circular buffering, i.e. I, B, or L
30179          registers.
30180
30181    `C'
30182          The CC register.
30183
30184    `t'
30185          LT0 or LT1.
30186
30187    `k'
30188          LC0 or LC1.
30189
30190    `u'
30191          LB0 or LB1.
30192
30193    `x'
30194          Any D, P, B, M, I or L register.
30195
30196    `y'
30197          Additional registers typically used only in prologues and
30198          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
30199          USP.
30200
30201    `w'
30202          Any register except accumulators or CC.
30203
30204    `Ksh'
30205          Signed 16 bit integer (in the range -32768 to 32767)
30206
30207    `Kuh'
30208          Unsigned 16 bit integer (in the range 0 to 65535)
30209
30210    `Ks7'
30211          Signed 7 bit integer (in the range -64 to 63)
30212
30213    `Ku7'
30214          Unsigned 7 bit integer (in the range 0 to 127)
30215
30216    `Ku5'
30217          Unsigned 5 bit integer (in the range 0 to 31)
30218
30219    `Ks4'
30220          Signed 4 bit integer (in the range -8 to 7)
30221
30222    `Ks3'
30223          Signed 3 bit integer (in the range -3 to 4)
30224
30225    `Ku3'
30226          Unsigned 3 bit integer (in the range 0 to 7)
30227
30228    `PN'
30229          Constant N, where N is a single-digit constant in the range 0
30230          to 4.
30231
30232    `PA'
30233          An integer equal to one of the MACFLAG_XXX constants that is
30234          suitable for use with either accumulator.
30235
30236    `PB'
30237          An integer equal to one of the MACFLAG_XXX constants that is
30238          suitable for use only with accumulator A1.
30239
30240    `M1'
30241          Constant 255.
30242
30243    `M2'
30244          Constant 65535.
30245
30246    `J'
30247          An integer constant with exactly a single bit set.
30248
30249    `L'
30250          An integer constant with all bits set except exactly one.
30251
30252    `H'
30253
30254    `Q'
30255          Any SYMBOL_REF.
30256
30257_CR16 Architecture--`config/cr16/cr16.h'_
30258
30259    `b'
30260          Registers from r0 to r14 (registers without stack pointer)
30261
30262    `t'
30263          Register from r0 to r11 (all 16-bit registers)
30264
30265    `p'
30266          Register from r12 to r15 (all 32-bit registers)
30267
30268    `I'
30269          Signed constant that fits in 4 bits
30270
30271    `J'
30272          Signed constant that fits in 5 bits
30273
30274    `K'
30275          Signed constant that fits in 6 bits
30276
30277    `L'
30278          Unsigned constant that fits in 4 bits
30279
30280    `M'
30281          Signed constant that fits in 32 bits
30282
30283    `N'
30284          Check for 64 bits wide constants for add/sub instructions
30285
30286    `G'
30287          Floating point constant that is legal for store immediate
30288
30289_Epiphany--`config/epiphany/constraints.md'_
30290
30291    `U16'
30292          An unsigned 16-bit constant.
30293
30294    `K'
30295          An unsigned 5-bit constant.
30296
30297    `L'
30298          A signed 11-bit constant.
30299
30300    `Cm1'
30301          A signed 11-bit constant added to -1.  Can only match when
30302          the `-m1reg-REG' option is active.
30303
30304    `Cl1'
30305          Left-shift of -1, i.e., a bit mask with a block of leading
30306          ones, the rest being a block of trailing zeroes.  Can only
30307          match when the `-m1reg-REG' option is active.
30308
30309    `Cr1'
30310          Right-shift of -1, i.e., a bit mask with a trailing block of
30311          ones, the rest being zeroes.  Or to put it another way, one
30312          less than a power of two.  Can only match when the
30313          `-m1reg-REG' option is active.
30314
30315    `Cal'
30316          Constant for arithmetic/logical operations.  This is like
30317          `i', except that for position independent code, no symbols /
30318          expressions needing relocations are allowed.
30319
30320    `Csy'
30321          Symbolic constant for call/jump instruction.
30322
30323    `Rcs'
30324          The register class usable in short insns.  This is a register
30325          class constraint, and can thus drive register allocation.
30326          This constraint won't match unless `-mprefer-short-insn-regs'
30327          is in effect.
30328
30329    `Rsc'
30330          The the register class of registers that can be used to hold a
30331          sibcall call address.  I.e., a caller-saved register.
30332
30333    `Rct'
30334          Core control register class.
30335
30336    `Rgs'
30337          The register group usable in short insns.  This constraint
30338          does not use a register class, so that it only passively
30339          matches suitable registers, and doesn't drive register
30340          allocation.
30341
30342    `Rra'
30343          Matches the return address if it can be replaced with the
30344          link register.
30345
30346    `Rcc'
30347          Matches the integer condition code register.
30348
30349    `Sra'
30350          Matches the return address if it is in a stack slot.
30351
30352    `Cfm'
30353          Matches control register values to switch fp mode, which are
30354          encapsulated in `UNSPEC_FP_MODE'.
30355
30356_FRV--`config/frv/frv.h'_
30357
30358    `a'
30359          Register in the class `ACC_REGS' (`acc0' to `acc7').
30360
30361    `b'
30362          Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
30363
30364    `c'
30365          Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
30366          to `icc3').
30367
30368    `d'
30369          Register in the class `GPR_REGS' (`gr0' to `gr63').
30370
30371    `e'
30372          Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
30373          registers are excluded not in the class but through the use
30374          of a machine mode larger than 4 bytes.
30375
30376    `f'
30377          Register in the class `FPR_REGS' (`fr0' to `fr63').
30378
30379    `h'
30380          Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
30381          registers are excluded not in the class but through the use
30382          of a machine mode larger than 4 bytes.
30383
30384    `l'
30385          Register in the class `LR_REG' (the `lr' register).
30386
30387    `q'
30388          Register in the class `QUAD_REGS' (`gr2' to `gr63').
30389          Register numbers not divisible by 4 are excluded not in the
30390          class but through the use of a machine mode larger than 8
30391          bytes.
30392
30393    `t'
30394          Register in the class `ICC_REGS' (`icc0' to `icc3').
30395
30396    `u'
30397          Register in the class `FCC_REGS' (`fcc0' to `fcc3').
30398
30399    `v'
30400          Register in the class `ICR_REGS' (`cc4' to `cc7').
30401
30402    `w'
30403          Register in the class `FCR_REGS' (`cc0' to `cc3').
30404
30405    `x'
30406          Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
30407          Register numbers not divisible by 4 are excluded not in the
30408          class but through the use of a machine mode larger than 8
30409          bytes.
30410
30411    `z'
30412          Register in the class `SPR_REGS' (`lcr' and `lr').
30413
30414    `A'
30415          Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
30416
30417    `B'
30418          Register in the class `ACCG_REGS' (`accg0' to `accg7').
30419
30420    `C'
30421          Register in the class `CR_REGS' (`cc0' to `cc7').
30422
30423    `G'
30424          Floating point constant zero
30425
30426    `I'
30427          6-bit signed integer constant
30428
30429    `J'
30430          10-bit signed integer constant
30431
30432    `L'
30433          16-bit signed integer constant
30434
30435    `M'
30436          16-bit unsigned integer constant
30437
30438    `N'
30439          12-bit signed integer constant that is negative--i.e. in the
30440          range of -2048 to -1
30441
30442    `O'
30443          Constant zero
30444
30445    `P'
30446          12-bit signed integer constant that is greater than
30447          zero--i.e. in the range of 1 to 2047.
30448
30449
30450_Hewlett-Packard PA-RISC--`config/pa/pa.h'_
30451
30452    `a'
30453          General register 1
30454
30455    `f'
30456          Floating point register
30457
30458    `q'
30459          Shift amount register
30460
30461    `x'
30462          Floating point register (deprecated)
30463
30464    `y'
30465          Upper floating point register (32-bit), floating point
30466          register (64-bit)
30467
30468    `Z'
30469          Any register
30470
30471    `I'
30472          Signed 11-bit integer constant
30473
30474    `J'
30475          Signed 14-bit integer constant
30476
30477    `K'
30478          Integer constant that can be deposited with a `zdepi'
30479          instruction
30480
30481    `L'
30482          Signed 5-bit integer constant
30483
30484    `M'
30485          Integer constant 0
30486
30487    `N'
30488          Integer constant that can be loaded with a `ldil' instruction
30489
30490    `O'
30491          Integer constant whose value plus one is a power of 2
30492
30493    `P'
30494          Integer constant that can be used for `and' operations in
30495          `depi' and `extru' instructions
30496
30497    `S'
30498          Integer constant 31
30499
30500    `U'
30501          Integer constant 63
30502
30503    `G'
30504          Floating-point constant 0.0
30505
30506    `A'
30507          A `lo_sum' data-linkage-table memory operand
30508
30509    `Q'
30510          A memory operand that can be used as the destination operand
30511          of an integer store instruction
30512
30513    `R'
30514          A scaled or unscaled indexed memory operand
30515
30516    `T'
30517          A memory operand for floating-point loads and stores
30518
30519    `W'
30520          A register indirect memory operand
30521
30522_Intel IA-64--`config/ia64/ia64.h'_
30523
30524    `a'
30525          General register `r0' to `r3' for `addl' instruction
30526
30527    `b'
30528          Branch register
30529
30530    `c'
30531          Predicate register (`c' as in "conditional")
30532
30533    `d'
30534          Application register residing in M-unit
30535
30536    `e'
30537          Application register residing in I-unit
30538
30539    `f'
30540          Floating-point register
30541
30542    `m'
30543          Memory operand.  If used together with `<' or `>', the
30544          operand can have postincrement and postdecrement which
30545          require printing with `%Pn' on IA-64.
30546
30547    `G'
30548          Floating-point constant 0.0 or 1.0
30549
30550    `I'
30551          14-bit signed integer constant
30552
30553    `J'
30554          22-bit signed integer constant
30555
30556    `K'
30557          8-bit signed integer constant for logical instructions
30558
30559    `L'
30560          8-bit adjusted signed integer constant for compare pseudo-ops
30561
30562    `M'
30563          6-bit unsigned integer constant for shift counts
30564
30565    `N'
30566          9-bit signed integer constant for load and store
30567          postincrements
30568
30569    `O'
30570          The constant zero
30571
30572    `P'
30573          0 or -1 for `dep' instruction
30574
30575    `Q'
30576          Non-volatile memory for floating-point loads and stores
30577
30578    `R'
30579          Integer constant in the range 1 to 4 for `shladd' instruction
30580
30581    `S'
30582          Memory operand except postincrement and postdecrement.  This
30583          is now roughly the same as `m' when not used together with `<'
30584          or `>'.
30585
30586_M32C--`config/m32c/m32c.c'_
30587
30588    `Rsp'
30589    `Rfb'
30590    `Rsb'
30591          `$sp', `$fb', `$sb'.
30592
30593    `Rcr'
30594          Any control register, when they're 16 bits wide (nothing if
30595          control registers are 24 bits wide)
30596
30597    `Rcl'
30598          Any control register, when they're 24 bits wide.
30599
30600    `R0w'
30601    `R1w'
30602    `R2w'
30603    `R3w'
30604          $r0, $r1, $r2, $r3.
30605
30606    `R02'
30607          $r0 or $r2, or $r2r0 for 32 bit values.
30608
30609    `R13'
30610          $r1 or $r3, or $r3r1 for 32 bit values.
30611
30612    `Rdi'
30613          A register that can hold a 64 bit value.
30614
30615    `Rhl'
30616          $r0 or $r1 (registers with addressable high/low bytes)
30617
30618    `R23'
30619          $r2 or $r3
30620
30621    `Raa'
30622          Address registers
30623
30624    `Raw'
30625          Address registers when they're 16 bits wide.
30626
30627    `Ral'
30628          Address registers when they're 24 bits wide.
30629
30630    `Rqi'
30631          Registers that can hold QI values.
30632
30633    `Rad'
30634          Registers that can be used with displacements ($a0, $a1, $sb).
30635
30636    `Rsi'
30637          Registers that can hold 32 bit values.
30638
30639    `Rhi'
30640          Registers that can hold 16 bit values.
30641
30642    `Rhc'
30643          Registers chat can hold 16 bit values, including all control
30644          registers.
30645
30646    `Rra'
30647          $r0 through R1, plus $a0 and $a1.
30648
30649    `Rfl'
30650          The flags register.
30651
30652    `Rmm'
30653          The memory-based pseudo-registers $mem0 through $mem15.
30654
30655    `Rpi'
30656          Registers that can hold pointers (16 bit registers for r8c,
30657          m16c; 24 bit registers for m32cm, m32c).
30658
30659    `Rpa'
30660          Matches multiple registers in a PARALLEL to form a larger
30661          register.  Used to match function return values.
30662
30663    `Is3'
30664          -8 ... 7
30665
30666    `IS1'
30667          -128 ... 127
30668
30669    `IS2'
30670          -32768 ... 32767
30671
30672    `IU2'
30673          0 ... 65535
30674
30675    `In4'
30676          -8 ... -1 or 1 ... 8
30677
30678    `In5'
30679          -16 ... -1 or 1 ... 16
30680
30681    `In6'
30682          -32 ... -1 or 1 ... 32
30683
30684    `IM2'
30685          -65536 ... -1
30686
30687    `Ilb'
30688          An 8 bit value with exactly one bit set.
30689
30690    `Ilw'
30691          A 16 bit value with exactly one bit set.
30692
30693    `Sd'
30694          The common src/dest memory addressing modes.
30695
30696    `Sa'
30697          Memory addressed using $a0 or $a1.
30698
30699    `Si'
30700          Memory addressed with immediate addresses.
30701
30702    `Ss'
30703          Memory addressed using the stack pointer ($sp).
30704
30705    `Sf'
30706          Memory addressed using the frame base register ($fb).
30707
30708    `Ss'
30709          Memory addressed using the small base register ($sb).
30710
30711    `S1'
30712          $r1h
30713
30714_MeP--`config/mep/constraints.md'_
30715
30716    `a'
30717          The $sp register.
30718
30719    `b'
30720          The $tp register.
30721
30722    `c'
30723          Any control register.
30724
30725    `d'
30726          Either the $hi or the $lo register.
30727
30728    `em'
30729          Coprocessor registers that can be directly loaded ($c0-$c15).
30730
30731    `ex'
30732          Coprocessor registers that can be moved to each other.
30733
30734    `er'
30735          Coprocessor registers that can be moved to core registers.
30736
30737    `h'
30738          The $hi register.
30739
30740    `j'
30741          The $rpc register.
30742
30743    `l'
30744          The $lo register.
30745
30746    `t'
30747          Registers which can be used in $tp-relative addressing.
30748
30749    `v'
30750          The $gp register.
30751
30752    `x'
30753          The coprocessor registers.
30754
30755    `y'
30756          The coprocessor control registers.
30757
30758    `z'
30759          The $0 register.
30760
30761    `A'
30762          User-defined register set A.
30763
30764    `B'
30765          User-defined register set B.
30766
30767    `C'
30768          User-defined register set C.
30769
30770    `D'
30771          User-defined register set D.
30772
30773    `I'
30774          Offsets for $gp-rel addressing.
30775
30776    `J'
30777          Constants that can be used directly with boolean insns.
30778
30779    `K'
30780          Constants that can be moved directly to registers.
30781
30782    `L'
30783          Small constants that can be added to registers.
30784
30785    `M'
30786          Long shift counts.
30787
30788    `N'
30789          Small constants that can be compared to registers.
30790
30791    `O'
30792          Constants that can be loaded into the top half of registers.
30793
30794    `S'
30795          Signed 8-bit immediates.
30796
30797    `T'
30798          Symbols encoded for $tp-rel or $gp-rel addressing.
30799
30800    `U'
30801          Non-constant addresses for loading/saving coprocessor
30802          registers.
30803
30804    `W'
30805          The top half of a symbol's value.
30806
30807    `Y'
30808          A register indirect address without offset.
30809
30810    `Z'
30811          Symbolic references to the control bus.
30812
30813
30814_MicroBlaze--`config/microblaze/constraints.md'_
30815
30816    `d'
30817          A general register (`r0' to `r31').
30818
30819    `z'
30820          A status register (`rmsr', `$fcc1' to `$fcc7').
30821
30822
30823_MIPS--`config/mips/constraints.md'_
30824
30825    `d'
30826          An address register.  This is equivalent to `r' unless
30827          generating MIPS16 code.
30828
30829    `f'
30830          A floating-point register (if available).
30831
30832    `h'
30833          Formerly the `hi' register.  This constraint is no longer
30834          supported.
30835
30836    `l'
30837          The `lo' register.  Use this register to store values that are
30838          no bigger than a word.
30839
30840    `x'
30841          The concatenated `hi' and `lo' registers.  Use this register
30842          to store doubleword values.
30843
30844    `c'
30845          A register suitable for use in an indirect jump.  This will
30846          always be `$25' for `-mabicalls'.
30847
30848    `v'
30849          Register `$3'.  Do not use this constraint in new code; it is
30850          retained only for compatibility with glibc.
30851
30852    `y'
30853          Equivalent to `r'; retained for backwards compatibility.
30854
30855    `z'
30856          A floating-point condition code register.
30857
30858    `I'
30859          A signed 16-bit constant (for arithmetic instructions).
30860
30861    `J'
30862          Integer zero.
30863
30864    `K'
30865          An unsigned 16-bit constant (for logic instructions).
30866
30867    `L'
30868          A signed 32-bit constant in which the lower 16 bits are zero.
30869          Such constants can be loaded using `lui'.
30870
30871    `M'
30872          A constant that cannot be loaded using `lui', `addiu' or
30873          `ori'.
30874
30875    `N'
30876          A constant in the range -65535 to -1 (inclusive).
30877
30878    `O'
30879          A signed 15-bit constant.
30880
30881    `P'
30882          A constant in the range 1 to 65535 (inclusive).
30883
30884    `G'
30885          Floating-point zero.
30886
30887    `R'
30888          An address that can be used in a non-macro load or store.
30889
30890    `ZC'
30891          A memory operand whose address is formed by a base register
30892          and offset that is suitable for use in instructions with the
30893          same addressing mode as `ll' and `sc'.
30894
30895    `ZD'
30896          An address suitable for a `prefetch' instruction, or for any
30897          other instruction with the same addressing mode as `prefetch'.
30898
30899_Motorola 680x0--`config/m68k/constraints.md'_
30900
30901    `a'
30902          Address register
30903
30904    `d'
30905          Data register
30906
30907    `f'
30908          68881 floating-point register, if available
30909
30910    `I'
30911          Integer in the range 1 to 8
30912
30913    `J'
30914          16-bit signed number
30915
30916    `K'
30917          Signed number whose magnitude is greater than 0x80
30918
30919    `L'
30920          Integer in the range -8 to -1
30921
30922    `M'
30923          Signed number whose magnitude is greater than 0x100
30924
30925    `N'
30926          Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
30927
30928    `O'
30929          16 (for rotate using swap)
30930
30931    `P'
30932          Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
30933
30934    `R'
30935          Numbers that mov3q can handle
30936
30937    `G'
30938          Floating point constant that is not a 68881 constant
30939
30940    `S'
30941          Operands that satisfy 'm' when -mpcrel is in effect
30942
30943    `T'
30944          Operands that satisfy 's' when -mpcrel is not in effect
30945
30946    `Q'
30947          Address register indirect addressing mode
30948
30949    `U'
30950          Register offset addressing
30951
30952    `W'
30953          const_call_operand
30954
30955    `Cs'
30956          symbol_ref or const
30957
30958    `Ci'
30959          const_int
30960
30961    `C0'
30962          const_int 0
30963
30964    `Cj'
30965          Range of signed numbers that don't fit in 16 bits
30966
30967    `Cmvq'
30968          Integers valid for mvq
30969
30970    `Capsw'
30971          Integers valid for a moveq followed by a swap
30972
30973    `Cmvz'
30974          Integers valid for mvz
30975
30976    `Cmvs'
30977          Integers valid for mvs
30978
30979    `Ap'
30980          push_operand
30981
30982    `Ac'
30983          Non-register operands allowed in clr
30984
30985
30986_Moxie--`config/moxie/constraints.md'_
30987
30988    `A'
30989          An absolute address
30990
30991    `B'
30992          An offset address
30993
30994    `W'
30995          A register indirect memory operand
30996
30997    `I'
30998          A constant in the range of 0 to 255.
30999
31000    `N'
31001          A constant in the range of 0 to -255.
31002
31003
31004_MSP430-`config/msp430/constraints.md'_
31005
31006    `R12'
31007          Register R12.
31008
31009    `R13'
31010          Register R13.
31011
31012    `K'
31013          Integer constant 1.
31014
31015    `L'
31016          Integer constant -1^20..1^19.
31017
31018    `M'
31019          Integer constant 1-4.
31020
31021    `Ya'
31022          Memory references which do not require an extended MOVX
31023          instruction.
31024
31025    `Yl'
31026          Memory reference, labels only.
31027
31028    `Ys'
31029          Memory reference, stack only.
31030
31031
31032_NDS32--`config/nds32/constraints.md'_
31033
31034    `w'
31035          LOW register class $r0 to $r7 constraint for V3/V3M ISA.
31036
31037    `l'
31038          LOW register class $r0 to $r7.
31039
31040    `d'
31041          MIDDLE register class $r0 to $r11, $r16 to $r19.
31042
31043    `h'
31044          HIGH register class $r12 to $r14, $r20 to $r31.
31045
31046    `t'
31047          Temporary assist register $ta (i.e. $r15).
31048
31049    `k'
31050          Stack register $sp.
31051
31052    `Iu03'
31053          Unsigned immediate 3-bit value.
31054
31055    `In03'
31056          Negative immediate 3-bit value in the range of -7-0.
31057
31058    `Iu04'
31059          Unsigned immediate 4-bit value.
31060
31061    `Is05'
31062          Signed immediate 5-bit value.
31063
31064    `Iu05'
31065          Unsigned immediate 5-bit value.
31066
31067    `In05'
31068          Negative immediate 5-bit value in the range of -31-0.
31069
31070    `Ip05'
31071          Unsigned immediate 5-bit value for movpi45 instruction with
31072          range 16-47.
31073
31074    `Iu06'
31075          Unsigned immediate 6-bit value constraint for addri36.sp
31076          instruction.
31077
31078    `Iu08'
31079          Unsigned immediate 8-bit value.
31080
31081    `Iu09'
31082          Unsigned immediate 9-bit value.
31083
31084    `Is10'
31085          Signed immediate 10-bit value.
31086
31087    `Is11'
31088          Signed immediate 11-bit value.
31089
31090    `Is15'
31091          Signed immediate 15-bit value.
31092
31093    `Iu15'
31094          Unsigned immediate 15-bit value.
31095
31096    `Ic15'
31097          A constant which is not in the range of imm15u but ok for
31098          bclr instruction.
31099
31100    `Ie15'
31101          A constant which is not in the range of imm15u but ok for
31102          bset instruction.
31103
31104    `It15'
31105          A constant which is not in the range of imm15u but ok for
31106          btgl instruction.
31107
31108    `Ii15'
31109          A constant whose compliment value is in the range of imm15u
31110          and ok for bitci instruction.
31111
31112    `Is16'
31113          Signed immediate 16-bit value.
31114
31115    `Is17'
31116          Signed immediate 17-bit value.
31117
31118    `Is19'
31119          Signed immediate 19-bit value.
31120
31121    `Is20'
31122          Signed immediate 20-bit value.
31123
31124    `Ihig'
31125          The immediate value that can be simply set high 20-bit.
31126
31127    `Izeb'
31128          The immediate value 0xff.
31129
31130    `Izeh'
31131          The immediate value 0xffff.
31132
31133    `Ixls'
31134          The immediate value 0x01.
31135
31136    `Ix11'
31137          The immediate value 0x7ff.
31138
31139    `Ibms'
31140          The immediate value with power of 2.
31141
31142    `Ifex'
31143          The immediate value with power of 2 minus 1.
31144
31145    `U33'
31146          Memory constraint for 333 format.
31147
31148    `U45'
31149          Memory constraint for 45 format.
31150
31151    `U37'
31152          Memory constraint for 37 format.
31153
31154_Nios II family--`config/nios2/constraints.md'_
31155
31156    `I'
31157          Integer that is valid as an immediate operand in an
31158          instruction taking a signed 16-bit number. Range -32768 to
31159          32767.
31160
31161    `J'
31162          Integer that is valid as an immediate operand in an
31163          instruction taking an unsigned 16-bit number. Range 0 to
31164          65535.
31165
31166    `K'
31167          Integer that is valid as an immediate operand in an
31168          instruction taking only the upper 16-bits of a 32-bit number.
31169          Range 32-bit numbers with the lower 16-bits being 0.
31170
31171    `L'
31172          Integer that is valid as an immediate operand for a shift
31173          instruction. Range 0 to 31.
31174
31175    `M'
31176          Integer that is valid as an immediate operand for only the
31177          value 0. Can be used in conjunction with the format modifier
31178          `z' to use `r0' instead of `0' in the assembly output.
31179
31180    `N'
31181          Integer that is valid as an immediate operand for a custom
31182          instruction opcode. Range 0 to 255.
31183
31184    `S'
31185          Matches immediates which are addresses in the small data
31186          section and therefore can be added to `gp' as a 16-bit
31187          immediate to re-create their 32-bit value.
31188
31189
31190_PDP-11--`config/pdp11/constraints.md'_
31191
31192    `a'
31193          Floating point registers AC0 through AC3.  These can be
31194          loaded from/to memory with a single instruction.
31195
31196    `d'
31197          Odd numbered general registers (R1, R3, R5).  These are used
31198          for 16-bit multiply operations.
31199
31200    `f'
31201          Any of the floating point registers (AC0 through AC5).
31202
31203    `G'
31204          Floating point constant 0.
31205
31206    `I'
31207          An integer constant that fits in 16 bits.
31208
31209    `J'
31210          An integer constant whose low order 16 bits are zero.
31211
31212    `K'
31213          An integer constant that does not meet the constraints for
31214          codes `I' or `J'.
31215
31216    `L'
31217          The integer constant 1.
31218
31219    `M'
31220          The integer constant -1.
31221
31222    `N'
31223          The integer constant 0.
31224
31225    `O'
31226          Integer constants -4 through -1 and 1 through 4; shifts by
31227          these amounts are handled as multiple single-bit shifts
31228          rather than a single variable-length shift.
31229
31230    `Q'
31231          A memory reference which requires an additional word (address
31232          or offset) after the opcode.
31233
31234    `R'
31235          A memory reference that is encoded within the opcode.
31236
31237
31238_PowerPC and IBM RS6000--`config/rs6000/constraints.md'_
31239
31240    `b'
31241          Address base register
31242
31243    `d'
31244          Floating point register (containing 64-bit value)
31245
31246    `f'
31247          Floating point register (containing 32-bit value)
31248
31249    `v'
31250          Altivec vector register
31251
31252    `wa'
31253          Any VSX register if the -mvsx option was used or NO_REGS.
31254
31255          When using any of the register constraints (`wa', `wd', `wf',
31256          `wg', `wh', `wi', `wj', `wk', `wl', `wm', `ws', `wt', `wu',
31257          `wv', `ww', or `wy') that take VSX registers, you must use
31258          `%x<n>' in the template so that the correct register is used.
31259          Otherwise the register number output in the assembly file
31260          will be incorrect if an Altivec register is an operand of a
31261          VSX instruction that expects VSX register numbering.
31262
31263               asm ("xvadddp %x0,%x1,%x2" : "=wa" (v1) : "wa" (v2), "wa" (v3));
31264
31265          is correct, but:
31266
31267               asm ("xvadddp %0,%1,%2" : "=wa" (v1) : "wa" (v2), "wa" (v3));
31268
31269          is not correct.
31270
31271    `wd'
31272          VSX vector register to hold vector double data or NO_REGS.
31273
31274    `wf'
31275          VSX vector register to hold vector float data or NO_REGS.
31276
31277    `wg'
31278          If `-mmfpgpr' was used, a floating point register or NO_REGS.
31279
31280    `wh'
31281          Floating point register if direct moves are available, or
31282          NO_REGS.
31283
31284    `wi'
31285          FP or VSX register to hold 64-bit integers for VSX insns or
31286          NO_REGS.
31287
31288    `wj'
31289          FP or VSX register to hold 64-bit integers for direct moves
31290          or NO_REGS.
31291
31292    `wk'
31293          FP or VSX register to hold 64-bit doubles for direct moves or
31294          NO_REGS.
31295
31296    `wl'
31297          Floating point register if the LFIWAX instruction is enabled
31298          or NO_REGS.
31299
31300    `wm'
31301          VSX register if direct move instructions are enabled, or
31302          NO_REGS.
31303
31304    `wn'
31305          No register (NO_REGS).
31306
31307    `wr'
31308          General purpose register if 64-bit instructions are enabled
31309          or NO_REGS.
31310
31311    `ws'
31312          VSX vector register to hold scalar double values or NO_REGS.
31313
31314    `wt'
31315          VSX vector register to hold 128 bit integer or NO_REGS.
31316
31317    `wu'
31318          Altivec register to use for float/32-bit int loads/stores  or
31319          NO_REGS.
31320
31321    `wv'
31322          Altivec register to use for double loads/stores  or NO_REGS.
31323
31324    `ww'
31325          FP or VSX register to perform float operations under `-mvsx'
31326          or NO_REGS.
31327
31328    `wx'
31329          Floating point register if the STFIWX instruction is enabled
31330          or NO_REGS.
31331
31332    `wy'
31333          FP or VSX register to perform ISA 2.07 float ops or NO_REGS.
31334
31335    `wz'
31336          Floating point register if the LFIWZX instruction is enabled
31337          or NO_REGS.
31338
31339    `wD'
31340          Int constant that is the element number of the 64-bit scalar
31341          in a vector.
31342
31343    `wQ'
31344          A memory address that will work with the `lq' and `stq'
31345          instructions.
31346
31347    `h'
31348          `MQ', `CTR', or `LINK' register
31349
31350    `q'
31351          `MQ' register
31352
31353    `c'
31354          `CTR' register
31355
31356    `l'
31357          `LINK' register
31358
31359    `x'
31360          `CR' register (condition register) number 0
31361
31362    `y'
31363          `CR' register (condition register)
31364
31365    `z'
31366          `XER[CA]' carry bit (part of the XER register)
31367
31368    `I'
31369          Signed 16-bit constant
31370
31371    `J'
31372          Unsigned 16-bit constant shifted left 16 bits (use `L'
31373          instead for `SImode' constants)
31374
31375    `K'
31376          Unsigned 16-bit constant
31377
31378    `L'
31379          Signed 16-bit constant shifted left 16 bits
31380
31381    `M'
31382          Constant larger than 31
31383
31384    `N'
31385          Exact power of 2
31386
31387    `O'
31388          Zero
31389
31390    `P'
31391          Constant whose negation is a signed 16-bit constant
31392
31393    `G'
31394          Floating point constant that can be loaded into a register
31395          with one instruction per word
31396
31397    `H'
31398          Integer/Floating point constant that can be loaded into a
31399          register using three instructions
31400
31401    `m'
31402          Memory operand.  Normally, `m' does not allow addresses that
31403          update the base register.  If `<' or `>' constraint is also
31404          used, they are allowed and therefore on PowerPC targets in
31405          that case it is only safe to use `m<>' in an `asm' statement
31406          if that `asm' statement accesses the operand exactly once.
31407          The `asm' statement must also use `%U<OPNO>' as a placeholder
31408          for the "update" flag in the corresponding load or store
31409          instruction.  For example:
31410
31411               asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
31412
31413          is correct but:
31414
31415               asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
31416
31417          is not.
31418
31419    `es'
31420          A "stable" memory operand; that is, one which does not
31421          include any automodification of the base register.  This used
31422          to be useful when `m' allowed automodification of the base
31423          register, but as those are now only allowed when `<' or `>'
31424          is used, `es' is basically the same as `m' without `<' and
31425          `>'.
31426
31427    `Q'
31428          Memory operand that is an offset from a register (it is
31429          usually better to use `m' or `es' in `asm' statements)
31430
31431    `Z'
31432          Memory operand that is an indexed or indirect from a register
31433          (it is usually better to use `m' or `es' in `asm' statements)
31434
31435    `R'
31436          AIX TOC entry
31437
31438    `a'
31439          Address operand that is an indexed or indirect from a
31440          register (`p' is preferable for `asm' statements)
31441
31442    `S'
31443          Constant suitable as a 64-bit mask operand
31444
31445    `T'
31446          Constant suitable as a 32-bit mask operand
31447
31448    `U'
31449          System V Release 4 small data area reference
31450
31451    `t'
31452          AND masks that can be performed by two rldic{l, r}
31453          instructions
31454
31455    `W'
31456          Vector constant that does not require memory
31457
31458    `j'
31459          Vector constant that is all zeros.
31460
31461
31462_RL78--`config/rl78/constraints.md'_
31463
31464    `Int3'
31465          An integer constant in the range 1 ... 7.
31466
31467    `Int8'
31468          An integer constant in the range 0 ... 255.
31469
31470    `J'
31471          An integer constant in the range -255 ... 0
31472
31473    `K'
31474          The integer constant 1.
31475
31476    `L'
31477          The integer constant -1.
31478
31479    `M'
31480          The integer constant 0.
31481
31482    `N'
31483          The integer constant 2.
31484
31485    `O'
31486          The integer constant -2.
31487
31488    `P'
31489          An integer constant in the range 1 ... 15.
31490
31491    `Qbi'
31492          The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
31493
31494    `Qsc'
31495          The synthetic compare types-gt, lt, ge, and le.
31496
31497    `Wab'
31498          A memory reference with an absolute address.
31499
31500    `Wbc'
31501          A memory reference using `BC' as a base register, with an
31502          optional offset.
31503
31504    `Wca'
31505          A memory reference using `AX', `BC', `DE', or `HL' for the
31506          address, for calls.
31507
31508    `Wcv'
31509          A memory reference using any 16-bit register pair for the
31510          address, for calls.
31511
31512    `Wd2'
31513          A memory reference using `DE' as a base register, with an
31514          optional offset.
31515
31516    `Wde'
31517          A memory reference using `DE' as a base register, without any
31518          offset.
31519
31520    `Wfr'
31521          Any memory reference to an address in the far address space.
31522
31523    `Wh1'
31524          A memory reference using `HL' as a base register, with an
31525          optional one-byte offset.
31526
31527    `Whb'
31528          A memory reference using `HL' as a base register, with `B' or
31529          `C' as the index register.
31530
31531    `Whl'
31532          A memory reference using `HL' as a base register, without any
31533          offset.
31534
31535    `Ws1'
31536          A memory reference using `SP' as a base register, with an
31537          optional one-byte offset.
31538
31539    `Y'
31540          Any memory reference to an address in the near address space.
31541
31542    `A'
31543          The `AX' register.
31544
31545    `B'
31546          The `BC' register.
31547
31548    `D'
31549          The `DE' register.
31550
31551    `R'
31552          `A' through `L' registers.
31553
31554    `S'
31555          The `SP' register.
31556
31557    `T'
31558          The `HL' register.
31559
31560    `Z08W'
31561          The 16-bit `R8' register.
31562
31563    `Z10W'
31564          The 16-bit `R10' register.
31565
31566    `Zint'
31567          The registers reserved for interrupts (`R24' to `R31').
31568
31569    `a'
31570          The `A' register.
31571
31572    `b'
31573          The `B' register.
31574
31575    `c'
31576          The `C' register.
31577
31578    `d'
31579          The `D' register.
31580
31581    `e'
31582          The `E' register.
31583
31584    `h'
31585          The `H' register.
31586
31587    `l'
31588          The `L' register.
31589
31590    `v'
31591          The virtual registers.
31592
31593    `w'
31594          The `PSW' register.
31595
31596    `x'
31597          The `X' register.
31598
31599
31600_RX--`config/rx/constraints.md'_
31601
31602    `Q'
31603          An address which does not involve register indirect
31604          addressing or pre/post increment/decrement addressing.
31605
31606    `Symbol'
31607          A symbol reference.
31608
31609    `Int08'
31610          A constant in the range -256 to 255, inclusive.
31611
31612    `Sint08'
31613          A constant in the range -128 to 127, inclusive.
31614
31615    `Sint16'
31616          A constant in the range -32768 to 32767, inclusive.
31617
31618    `Sint24'
31619          A constant in the range -8388608 to 8388607, inclusive.
31620
31621    `Uint04'
31622          A constant in the range 0 to 15, inclusive.
31623
31624
31625_S/390 and zSeries--`config/s390/s390.h'_
31626
31627    `a'
31628          Address register (general purpose register except r0)
31629
31630    `c'
31631          Condition code register
31632
31633    `d'
31634          Data register (arbitrary general purpose register)
31635
31636    `f'
31637          Floating-point register
31638
31639    `I'
31640          Unsigned 8-bit constant (0-255)
31641
31642    `J'
31643          Unsigned 12-bit constant (0-4095)
31644
31645    `K'
31646          Signed 16-bit constant (-32768-32767)
31647
31648    `L'
31649          Value appropriate as displacement.
31650         `(0..4095)'
31651               for short displacement
31652
31653         `(-524288..524287)'
31654               for long displacement
31655
31656    `M'
31657          Constant integer with a value of 0x7fffffff.
31658
31659    `N'
31660          Multiple letter constraint followed by 4 parameter letters.
31661         `0..9:'
31662               number of the part counting from most to least
31663               significant
31664
31665         `H,Q:'
31666               mode of the part
31667
31668         `D,S,H:'
31669               mode of the containing operand
31670
31671         `0,F:'
31672               value of the other parts (F--all bits set)
31673          The constraint matches if the specified part of a constant
31674          has a value different from its other parts.
31675
31676    `Q'
31677          Memory reference without index register and with short
31678          displacement.
31679
31680    `R'
31681          Memory reference with index register and short displacement.
31682
31683    `S'
31684          Memory reference without index register but with long
31685          displacement.
31686
31687    `T'
31688          Memory reference with index register and long displacement.
31689
31690    `U'
31691          Pointer with short displacement.
31692
31693    `W'
31694          Pointer with long displacement.
31695
31696    `Y'
31697          Shift count operand.
31698
31699
31700_SPARC--`config/sparc/sparc.h'_
31701
31702    `f'
31703          Floating-point register on the SPARC-V8 architecture and
31704          lower floating-point register on the SPARC-V9 architecture.
31705
31706    `e'
31707          Floating-point register.  It is equivalent to `f' on the
31708          SPARC-V8 architecture and contains both lower and upper
31709          floating-point registers on the SPARC-V9 architecture.
31710
31711    `c'
31712          Floating-point condition code register.
31713
31714    `d'
31715          Lower floating-point register.  It is only valid on the
31716          SPARC-V9 architecture when the Visual Instruction Set is
31717          available.
31718
31719    `b'
31720          Floating-point register.  It is only valid on the SPARC-V9
31721          architecture when the Visual Instruction Set is available.
31722
31723    `h'
31724          64-bit global or out register for the SPARC-V8+ architecture.
31725
31726    `C'
31727          The constant all-ones, for floating-point.
31728
31729    `A'
31730          Signed 5-bit constant
31731
31732    `D'
31733          A vector constant
31734
31735    `I'
31736          Signed 13-bit constant
31737
31738    `J'
31739          Zero
31740
31741    `K'
31742          32-bit constant with the low 12 bits clear (a constant that
31743          can be loaded with the `sethi' instruction)
31744
31745    `L'
31746          A constant in the range supported by `movcc' instructions
31747          (11-bit signed immediate)
31748
31749    `M'
31750          A constant in the range supported by `movrcc' instructions
31751          (10-bit signed immediate)
31752
31753    `N'
31754          Same as `K', except that it verifies that bits that are not
31755          in the lower 32-bit range are all zero.  Must be used instead
31756          of `K' for modes wider than `SImode'
31757
31758    `O'
31759          The constant 4096
31760
31761    `G'
31762          Floating-point zero
31763
31764    `H'
31765          Signed 13-bit constant, sign-extended to 32 or 64 bits
31766
31767    `P'
31768          The constant -1
31769
31770    `Q'
31771          Floating-point constant whose integral representation can be
31772          moved into an integer register using a single sethi
31773          instruction
31774
31775    `R'
31776          Floating-point constant whose integral representation can be
31777          moved into an integer register using a single mov instruction
31778
31779    `S'
31780          Floating-point constant whose integral representation can be
31781          moved into an integer register using a high/lo_sum
31782          instruction sequence
31783
31784    `T'
31785          Memory address aligned to an 8-byte boundary
31786
31787    `U'
31788          Even register
31789
31790    `W'
31791          Memory address for `e' constraint registers
31792
31793    `w'
31794          Memory address with only a base register
31795
31796    `Y'
31797          Vector zero
31798
31799
31800_SPU--`config/spu/spu.h'_
31801
31802    `a'
31803          An immediate which can be loaded with the il/ila/ilh/ilhu
31804          instructions.  const_int is treated as a 64 bit value.
31805
31806    `c'
31807          An immediate for and/xor/or instructions.  const_int is
31808          treated as a 64 bit value.
31809
31810    `d'
31811          An immediate for the `iohl' instruction.  const_int is
31812          treated as a 64 bit value.
31813
31814    `f'
31815          An immediate which can be loaded with `fsmbi'.
31816
31817    `A'
31818          An immediate which can be loaded with the il/ila/ilh/ilhu
31819          instructions.  const_int is treated as a 32 bit value.
31820
31821    `B'
31822          An immediate for most arithmetic instructions.  const_int is
31823          treated as a 32 bit value.
31824
31825    `C'
31826          An immediate for and/xor/or instructions.  const_int is
31827          treated as a 32 bit value.
31828
31829    `D'
31830          An immediate for the `iohl' instruction.  const_int is
31831          treated as a 32 bit value.
31832
31833    `I'
31834          A constant in the range [-64, 63] for shift/rotate
31835          instructions.
31836
31837    `J'
31838          An unsigned 7-bit constant for conversion/nop/channel
31839          instructions.
31840
31841    `K'
31842          A signed 10-bit constant for most arithmetic instructions.
31843
31844    `M'
31845          A signed 16 bit immediate for `stop'.
31846
31847    `N'
31848          An unsigned 16-bit constant for `iohl' and `fsmbi'.
31849
31850    `O'
31851          An unsigned 7-bit constant whose 3 least significant bits are
31852          0.
31853
31854    `P'
31855          An unsigned 3-bit constant for 16-byte rotates and shifts
31856
31857    `R'
31858          Call operand, reg, for indirect calls
31859
31860    `S'
31861          Call operand, symbol, for relative calls.
31862
31863    `T'
31864          Call operand, const_int, for absolute calls.
31865
31866    `U'
31867          An immediate which can be loaded with the il/ila/ilh/ilhu
31868          instructions.  const_int is sign extended to 128 bit.
31869
31870    `W'
31871          An immediate for shift and rotate instructions.  const_int is
31872          treated as a 32 bit value.
31873
31874    `Y'
31875          An immediate for and/xor/or instructions.  const_int is sign
31876          extended as a 128 bit.
31877
31878    `Z'
31879          An immediate for the `iohl' instruction.  const_int is sign
31880          extended to 128 bit.
31881
31882
31883_TI C6X family--`config/c6x/constraints.md'_
31884
31885    `a'
31886          Register file A (A0-A31).
31887
31888    `b'
31889          Register file B (B0-B31).
31890
31891    `A'
31892          Predicate registers in register file A (A0-A2 on C64X and
31893          higher, A1 and A2 otherwise).
31894
31895    `B'
31896          Predicate registers in register file B (B0-B2).
31897
31898    `C'
31899          A call-used register in register file B (B0-B9, B16-B31).
31900
31901    `Da'
31902          Register file A, excluding predicate registers (A3-A31, plus
31903          A0 if not C64X or higher).
31904
31905    `Db'
31906          Register file B, excluding predicate registers (B3-B31).
31907
31908    `Iu4'
31909          Integer constant in the range 0 ... 15.
31910
31911    `Iu5'
31912          Integer constant in the range 0 ... 31.
31913
31914    `In5'
31915          Integer constant in the range -31 ... 0.
31916
31917    `Is5'
31918          Integer constant in the range -16 ... 15.
31919
31920    `I5x'
31921          Integer constant that can be the operand of an ADDA or a SUBA
31922          insn.
31923
31924    `IuB'
31925          Integer constant in the range 0 ... 65535.
31926
31927    `IsB'
31928          Integer constant in the range -32768 ... 32767.
31929
31930    `IsC'
31931          Integer constant in the range -2^20 ... 2^20 - 1.
31932
31933    `Jc'
31934          Integer constant that is a valid mask for the clr instruction.
31935
31936    `Js'
31937          Integer constant that is a valid mask for the set instruction.
31938
31939    `Q'
31940          Memory location with A base register.
31941
31942    `R'
31943          Memory location with B base register.
31944
31945    `Z'
31946          Register B14 (aka DP).
31947
31948
31949_TILE-Gx--`config/tilegx/constraints.md'_
31950
31951    `R00'
31952    `R01'
31953    `R02'
31954    `R03'
31955    `R04'
31956    `R05'
31957    `R06'
31958    `R07'
31959    `R08'
31960    `R09'
31961    `R10'
31962          Each of these represents a register constraint for an
31963          individual register, from r0 to r10.
31964
31965    `I'
31966          Signed 8-bit integer constant.
31967
31968    `J'
31969          Signed 16-bit integer constant.
31970
31971    `K'
31972          Unsigned 16-bit integer constant.
31973
31974    `L'
31975          Integer constant that fits in one signed byte when
31976          incremented by one (-129 ... 126).
31977
31978    `m'
31979          Memory operand.  If used together with `<' or `>', the
31980          operand can have postincrement which requires printing with
31981          `%In' and `%in' on TILE-Gx.  For example:
31982
31983               asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
31984
31985    `M'
31986          A bit mask suitable for the BFINS instruction.
31987
31988    `N'
31989          Integer constant that is a byte tiled out eight times.
31990
31991    `O'
31992          The integer zero constant.
31993
31994    `P'
31995          Integer constant that is a sign-extended byte tiled out as
31996          four shorts.
31997
31998    `Q'
31999          Integer constant that fits in one signed byte when incremented
32000          (-129 ... 126), but excluding -1.
32001
32002    `S'
32003          Integer constant that has all 1 bits consecutive and starting
32004          at bit 0.
32005
32006    `T'
32007          A 16-bit fragment of a got, tls, or pc-relative reference.
32008
32009    `U'
32010          Memory operand except postincrement.  This is roughly the
32011          same as `m' when not used together with `<' or `>'.
32012
32013    `W'
32014          An 8-element vector constant with identical elements.
32015
32016    `Y'
32017          A 4-element vector constant with identical elements.
32018
32019    `Z0'
32020          The integer constant 0xffffffff.
32021
32022    `Z1'
32023          The integer constant 0xffffffff00000000.
32024
32025
32026_TILEPro--`config/tilepro/constraints.md'_
32027
32028    `R00'
32029    `R01'
32030    `R02'
32031    `R03'
32032    `R04'
32033    `R05'
32034    `R06'
32035    `R07'
32036    `R08'
32037    `R09'
32038    `R10'
32039          Each of these represents a register constraint for an
32040          individual register, from r0 to r10.
32041
32042    `I'
32043          Signed 8-bit integer constant.
32044
32045    `J'
32046          Signed 16-bit integer constant.
32047
32048    `K'
32049          Nonzero integer constant with low 16 bits zero.
32050
32051    `L'
32052          Integer constant that fits in one signed byte when
32053          incremented by one (-129 ... 126).
32054
32055    `m'
32056          Memory operand.  If used together with `<' or `>', the
32057          operand can have postincrement which requires printing with
32058          `%In' and `%in' on TILEPro.  For example:
32059
32060               asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
32061
32062    `M'
32063          A bit mask suitable for the MM instruction.
32064
32065    `N'
32066          Integer constant that is a byte tiled out four times.
32067
32068    `O'
32069          The integer zero constant.
32070
32071    `P'
32072          Integer constant that is a sign-extended byte tiled out as
32073          two shorts.
32074
32075    `Q'
32076          Integer constant that fits in one signed byte when incremented
32077          (-129 ... 126), but excluding -1.
32078
32079    `T'
32080          A symbolic operand, or a 16-bit fragment of a got, tls, or
32081          pc-relative reference.
32082
32083    `U'
32084          Memory operand except postincrement.  This is roughly the
32085          same as `m' when not used together with `<' or `>'.
32086
32087    `W'
32088          A 4-element vector constant with identical elements.
32089
32090    `Y'
32091          A 2-element vector constant with identical elements.
32092
32093
32094_Visium--`config/visium/constraints.md'_
32095
32096    `b'
32097          EAM register `mdb'
32098
32099    `c'
32100          EAM register `mdc'
32101
32102    `f'
32103          Floating point register
32104
32105    `l'
32106          General register, but not `r29', `r30' and `r31'
32107
32108    `t'
32109          Register `r1'
32110
32111    `u'
32112          Register `r2'
32113
32114    `v'
32115          Register `r3'
32116
32117    `G'
32118          Floating-point constant 0.0
32119
32120    `J'
32121          Integer constant in the range 0 .. 65535 (16-bit immediate)
32122
32123    `K'
32124          Integer constant in the range 1 .. 31 (5-bit immediate)
32125
32126    `L'
32127          Integer constant in the range -65535 .. -1 (16-bit negative
32128          immediate)
32129
32130    `M'
32131          Integer constant -1
32132
32133    `O'
32134          Integer constant 0
32135
32136    `P'
32137          Integer constant 32
32138
32139_x86 family--`config/i386/constraints.md'_
32140
32141    `R'
32142          Legacy register--the eight integer registers available on all
32143          i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
32144
32145    `q'
32146          Any register accessible as `Rl'.  In 32-bit mode, `a', `b',
32147          `c', and `d'; in 64-bit mode, any integer register.
32148
32149    `Q'
32150          Any register accessible as `Rh': `a', `b', `c', and `d'.
32151
32152    `a'
32153          The `a' register.
32154
32155    `b'
32156          The `b' register.
32157
32158    `c'
32159          The `c' register.
32160
32161    `d'
32162          The `d' register.
32163
32164    `S'
32165          The `si' register.
32166
32167    `D'
32168          The `di' register.
32169
32170    `A'
32171          The `a' and `d' registers.  This class is used for
32172          instructions that return double word results in the `ax:dx'
32173          register pair.  Single word values will be allocated either
32174          in `ax' or `dx'.  For example on i386 the following
32175          implements `rdtsc':
32176
32177               unsigned long long rdtsc (void)
32178               {
32179                 unsigned long long tick;
32180                 __asm__ __volatile__("rdtsc":"=A"(tick));
32181                 return tick;
32182               }
32183
32184          This is not correct on x86-64 as it would allocate tick in
32185          either `ax' or `dx'.  You have to use the following variant
32186          instead:
32187
32188               unsigned long long rdtsc (void)
32189               {
32190                 unsigned int tickl, tickh;
32191                 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
32192                 return ((unsigned long long)tickh << 32)|tickl;
32193               }
32194
32195    `f'
32196          Any 80387 floating-point (stack) register.
32197
32198    `t'
32199          Top of 80387 floating-point stack (`%st(0)').
32200
32201    `u'
32202          Second from top of 80387 floating-point stack (`%st(1)').
32203
32204    `y'
32205          Any MMX register.
32206
32207    `x'
32208          Any SSE register.
32209
32210    `Yz'
32211          First SSE register (`%xmm0').
32212
32213    `I'
32214          Integer constant in the range 0 ... 31, for 32-bit shifts.
32215
32216    `J'
32217          Integer constant in the range 0 ... 63, for 64-bit shifts.
32218
32219    `K'
32220          Signed 8-bit integer constant.
32221
32222    `L'
32223          `0xFF' or `0xFFFF', for andsi as a zero-extending move.
32224
32225    `M'
32226          0, 1, 2, or 3 (shifts for the `lea' instruction).
32227
32228    `N'
32229          Unsigned 8-bit integer constant (for `in' and `out'
32230          instructions).
32231
32232    `G'
32233          Standard 80387 floating point constant.
32234
32235    `C'
32236          SSE constant zero operand.
32237
32238    `e'
32239          32-bit signed integer constant, or a symbolic reference known
32240          to fit that range (for immediate operands in sign-extending
32241          x86-64 instructions).
32242
32243    `Z'
32244          32-bit unsigned integer constant, or a symbolic reference
32245          known to fit that range (for immediate operands in
32246          zero-extending x86-64 instructions).
32247
32248
32249_Xstormy16--`config/stormy16/stormy16.h'_
32250
32251    `a'
32252          Register r0.
32253
32254    `b'
32255          Register r1.
32256
32257    `c'
32258          Register r2.
32259
32260    `d'
32261          Register r8.
32262
32263    `e'
32264          Registers r0 through r7.
32265
32266    `t'
32267          Registers r0 and r1.
32268
32269    `y'
32270          The carry register.
32271
32272    `z'
32273          Registers r8 and r9.
32274
32275    `I'
32276          A constant between 0 and 3 inclusive.
32277
32278    `J'
32279          A constant that has exactly one bit set.
32280
32281    `K'
32282          A constant that has exactly one bit clear.
32283
32284    `L'
32285          A constant between 0 and 255 inclusive.
32286
32287    `M'
32288          A constant between -255 and 0 inclusive.
32289
32290    `N'
32291          A constant between -3 and 0 inclusive.
32292
32293    `O'
32294          A constant between 1 and 4 inclusive.
32295
32296    `P'
32297          A constant between -4 and -1 inclusive.
32298
32299    `Q'
32300          A memory reference that is a stack push.
32301
32302    `R'
32303          A memory reference that is a stack pop.
32304
32305    `S'
32306          A memory reference that refers to a constant address of known
32307          value.
32308
32309    `T'
32310          The register indicated by Rx (not implemented yet).
32311
32312    `U'
32313          A constant that is not between 2 and 15 inclusive.
32314
32315    `Z'
32316          The constant 0.
32317
32318
32319_Xtensa--`config/xtensa/constraints.md'_
32320
32321    `a'
32322          General-purpose 32-bit register
32323
32324    `b'
32325          One-bit boolean register
32326
32327    `A'
32328          MAC16 40-bit accumulator register
32329
32330    `I'
32331          Signed 12-bit integer constant, for use in MOVI instructions
32332
32333    `J'
32334          Signed 8-bit integer constant, for use in ADDI instructions
32335
32336    `K'
32337          Integer constant valid for BccI instructions
32338
32339    `L'
32340          Unsigned constant valid for BccUI instructions
32341
32342
32343
32344
32345File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: Using Assembly Language with C
32346
323476.43.4 Controlling Names Used in Assembler Code
32348-----------------------------------------------
32349
32350You can specify the name to be used in the assembler code for a C
32351function or variable by writing the `asm' (or `__asm__') keyword after
32352the declarator as follows:
32353
32354     int foo asm ("myfoo") = 2;
32355
32356This specifies that the name to be used for the variable `foo' in the
32357assembler code should be `myfoo' rather than the usual `_foo'.
32358
32359 On systems where an underscore is normally prepended to the name of a C
32360function or variable, this feature allows you to define names for the
32361linker that do not start with an underscore.
32362
32363 It does not make sense to use this feature with a non-static local
32364variable since such variables do not have assembler names.  If you are
32365trying to put the variable in a particular register, see *note Explicit
32366Reg Vars::.  GCC presently accepts such code with a warning, but will
32367probably be changed to issue an error, rather than a warning, in the
32368future.
32369
32370 You cannot use `asm' in this way in a function _definition_; but you
32371can get the same effect by writing a declaration for the function
32372before its definition and putting `asm' there, like this:
32373
32374     extern func () asm ("FUNC");
32375
32376     func (x, y)
32377          int x, y;
32378     /* ... */
32379
32380 It is up to you to make sure that the assembler names you choose do not
32381conflict with any other assembler symbols.  Also, you must not use a
32382register name; that would produce completely invalid assembler code.
32383GCC does not as yet have the ability to store static variables in
32384registers.  Perhaps that will be added.
32385
32386
32387File: gcc.info,  Node: Explicit Reg Vars,  Next: Size of an asm,  Prev: Asm Labels,  Up: Using Assembly Language with C
32388
323896.43.5 Variables in Specified Registers
32390---------------------------------------
32391
32392GNU C allows you to put a few global variables into specified hardware
32393registers.  You can also specify the register in which an ordinary
32394register variable should be allocated.
32395
32396   * Global register variables reserve registers throughout the program.
32397     This may be useful in programs such as programming language
32398     interpreters that have a couple of global variables that are
32399     accessed very often.
32400
32401   * Local register variables in specific registers do not reserve the
32402     registers, except at the point where they are used as input or
32403     output operands in an `asm' statement and the `asm' statement
32404     itself is not deleted.  The compiler's data flow analysis is
32405     capable of determining where the specified registers contain live
32406     values, and where they are available for other uses.  Stores into
32407     local register variables may be deleted when they appear to be
32408     dead according to dataflow analysis.  References to local register
32409     variables may be deleted or moved or simplified.
32410
32411     These local variables are sometimes convenient for use with the
32412     extended `asm' feature (*note Extended Asm::), if you want to
32413     write one output of the assembler instruction directly into a
32414     particular register.  (This works provided the register you
32415     specify fits the constraints specified for that operand in the
32416     `asm'.)
32417
32418* Menu:
32419
32420* Global Reg Vars::
32421* Local Reg Vars::
32422
32423
32424File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
32425
324266.43.5.1 Defining Global Register Variables
32427...........................................
32428
32429You can define a global register variable in GNU C like this:
32430
32431     register int *foo asm ("a5");
32432
32433Here `a5' is the name of the register that should be used.  Choose a
32434register that is normally saved and restored by function calls on your
32435machine, so that library routines will not clobber it.
32436
32437 Naturally the register name is CPU-dependent, so you need to
32438conditionalize your program according to CPU type.  The register `a5'
32439is a good choice on a 68000 for a variable of pointer type.  On
32440machines with register windows, be sure to choose a "global" register
32441that is not affected magically by the function call mechanism.
32442
32443 In addition, different operating systems on the same CPU may differ in
32444how they name the registers; then you need additional conditionals.  For
32445example, some 68000 operating systems call this register `%a5'.
32446
32447 Eventually there may be a way of asking the compiler to choose a
32448register automatically, but first we need to figure out how it should
32449choose and how to enable you to guide the choice.  No solution is
32450evident.
32451
32452 Defining a global register variable in a certain register reserves that
32453register entirely for this use, at least within the current compilation.
32454The register is not allocated for any other purpose in the functions in
32455the current compilation, and is not saved and restored by these
32456functions.  Stores into this register are never deleted even if they
32457appear to be dead, but references may be deleted or moved or simplified.
32458
32459 It is not safe to access the global register variables from signal
32460handlers, or from more than one thread of control, because the system
32461library routines may temporarily use the register for other things
32462(unless you recompile them specially for the task at hand).
32463
32464 It is not safe for one function that uses a global register variable to
32465call another such function `foo' by way of a third function `lose' that
32466is compiled without knowledge of this variable (i.e. in a different
32467source file in which the variable isn't declared).  This is because
32468`lose' might save the register and put some other value there.  For
32469example, you can't expect a global register variable to be available in
32470the comparison-function that you pass to `qsort', since `qsort' might
32471have put something else in that register.  (If you are prepared to
32472recompile `qsort' with the same global register variable, you can solve
32473this problem.)
32474
32475 If you want to recompile `qsort' or other source files that do not
32476actually use your global register variable, so that they do not use that
32477register for any other purpose, then it suffices to specify the compiler
32478option `-ffixed-REG'.  You need not actually add a global register
32479declaration to their source code.
32480
32481 A function that can alter the value of a global register variable
32482cannot safely be called from a function compiled without this variable,
32483because it could clobber the value the caller expects to find there on
32484return.  Therefore, the function that is the entry point into the part
32485of the program that uses the global register variable must explicitly
32486save and restore the value that belongs to its caller.
32487
32488 On most machines, `longjmp' restores to each global register variable
32489the value it had at the time of the `setjmp'.  On some machines,
32490however, `longjmp' does not change the value of global register
32491variables.  To be portable, the function that called `setjmp' should
32492make other arrangements to save the values of the global register
32493variables, and to restore them in a `longjmp'.  This way, the same
32494thing happens regardless of what `longjmp' does.
32495
32496 All global register variable declarations must precede all function
32497definitions.  If such a declaration could appear after function
32498definitions, the declaration would be too late to prevent the register
32499from being used for other purposes in the preceding functions.
32500
32501 Global register variables may not have initial values, because an
32502executable file has no means to supply initial contents for a register.
32503
32504 On the SPARC, there are reports that g3 ... g7 are suitable registers,
32505but certain library functions, such as `getwd', as well as the
32506subroutines for division and remainder, modify g3 and g4.  g1 and g2
32507are local temporaries.
32508
32509 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
32510course, it does not do to use more than a few of those.
32511
32512
32513File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
32514
325156.43.5.2 Specifying Registers for Local Variables
32516.................................................
32517
32518You can define a local register variable with a specified register like
32519this:
32520
32521     register int *foo asm ("a5");
32522
32523Here `a5' is the name of the register that should be used.  Note that
32524this is the same syntax used for defining global register variables,
32525but for a local variable it appears within a function.
32526
32527 Naturally the register name is CPU-dependent, but this is not a
32528problem, since specific registers are most often useful with explicit
32529assembler instructions (*note Extended Asm::).  Both of these things
32530generally require that you conditionalize your program according to CPU
32531type.
32532
32533 In addition, operating systems on one type of CPU may differ in how
32534they name the registers; then you need additional conditionals.  For
32535example, some 68000 operating systems call this register `%a5'.
32536
32537 Defining such a register variable does not reserve the register; it
32538remains available for other uses in places where flow control determines
32539the variable's value is not live.
32540
32541 This option does not guarantee that GCC generates code that has this
32542variable in the register you specify at all times.  You may not code an
32543explicit reference to this register in the assembler instruction
32544template part of an `asm' statement and assume it always refers to this
32545variable.  However, using the variable as an input or output operand to
32546the `asm' guarantees that the specified register is used for that
32547operand.  *Note Extended Asm::, for more information.
32548
32549 Stores into local register variables may be deleted when they appear
32550to be dead according to dataflow analysis.  References to local
32551register variables may be deleted or moved or simplified.
32552
32553 As with global register variables, it is recommended that you choose a
32554register that is normally saved and restored by function calls on your
32555machine, so that library routines will not clobber it.
32556
32557 Sometimes when writing inline `asm' code, you need to make an operand
32558be a specific register, but there's no matching constraint letter for
32559that register. To force the operand into that register, create a local
32560variable and specify the register in the variable's declaration. Then
32561use the local variable for the asm operand and specify any constraint
32562letter that matches the register:
32563
32564     register int *p1 asm ("r0") = ...;
32565     register int *p2 asm ("r1") = ...;
32566     register int *result asm ("r0");
32567     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
32568
32569 _Warning:_ In the above example, be aware that a register (for example
32570r0) can be call-clobbered by subsequent code, including function calls
32571and library calls for arithmetic operators on other variables (for
32572example the initialization of p2). In this case, use temporary
32573variables for expressions between the register assignments:
32574
32575     int t1 = ...;
32576     register int *p1 asm ("r0") = ...;
32577     register int *p2 asm ("r1") = t1;
32578     register int *result asm ("r0");
32579     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
32580
32581
32582File: gcc.info,  Node: Size of an asm,  Prev: Explicit Reg Vars,  Up: Using Assembly Language with C
32583
325846.43.6 Size of an `asm'
32585-----------------------
32586
32587Some targets require that GCC track the size of each instruction used
32588in order to generate correct code.  Because the final length of the
32589code produced by an `asm' statement is only known by the assembler, GCC
32590must make an estimate as to how big it will be.  It does this by
32591counting the number of instructions in the pattern of the `asm' and
32592multiplying that by the length of the longest instruction supported by
32593that processor.  (When working out the number of instructions, it
32594assumes that any occurrence of a newline or of whatever statement
32595separator character is supported by the assembler - typically `;' --
32596indicates the end of an instruction.)
32597
32598 Normally, GCC's estimate is adequate to ensure that correct code is
32599generated, but it is possible to confuse the compiler if you use pseudo
32600instructions or assembler macros that expand into multiple real
32601instructions, or if you use assembler directives that expand to more
32602space in the object file than is needed for a single instruction.  If
32603this happens then the assembler may produce a diagnostic saying that a
32604label is unreachable.
32605
32606
32607File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Using Assembly Language with C,  Up: C Extensions
32608
326096.44 Alternate Keywords
32610=======================
32611
32612`-ansi' and the various `-std' options disable certain keywords.  This
32613causes trouble when you want to use GNU C extensions, or a
32614general-purpose header file that should be usable by all programs,
32615including ISO C programs.  The keywords `asm', `typeof' and `inline'
32616are not available in programs compiled with `-ansi' or `-std' (although
32617`inline' can be used in a program compiled with `-std=c99' or
32618`-std=c11').  The ISO C99 keyword `restrict' is only available when
32619`-std=gnu99' (which will eventually be the default) or `-std=c99' (or
32620the equivalent `-std=iso9899:1999'), or an option for a later standard
32621version, is used.
32622
32623 The way to solve these problems is to put `__' at the beginning and
32624end of each problematical keyword.  For example, use `__asm__' instead
32625of `asm', and `__inline__' instead of `inline'.
32626
32627 Other C compilers won't accept these alternative keywords; if you want
32628to compile with another compiler, you can define the alternate keywords
32629as macros to replace them with the customary keywords.  It looks like
32630this:
32631
32632     #ifndef __GNUC__
32633     #define __asm__ asm
32634     #endif
32635
32636 `-pedantic' and other options cause warnings for many GNU C extensions.
32637You can prevent such warnings within one expression by writing
32638`__extension__' before the expression.  `__extension__' has no effect
32639aside from this.
32640
32641
32642File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
32643
326446.45 Incomplete `enum' Types
32645============================
32646
32647You can define an `enum' tag without specifying its possible values.
32648This results in an incomplete type, much like what you get if you write
32649`struct foo' without describing the elements.  A later declaration that
32650does specify the possible values completes the type.
32651
32652 You can't allocate variables or storage using the type while it is
32653incomplete.  However, you can work with pointers to that type.
32654
32655 This extension may not be very useful, but it makes the handling of
32656`enum' more consistent with the way `struct' and `union' are handled.
32657
32658 This extension is not supported by GNU C++.
32659
32660
32661File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
32662
326636.46 Function Names as Strings
32664==============================
32665
32666GCC provides three magic variables that hold the name of the current
32667function, as a string.  The first of these is `__func__', which is part
32668of the C99 standard:
32669
32670 The identifier `__func__' is implicitly declared by the translator as
32671if, immediately following the opening brace of each function
32672definition, the declaration
32673
32674     static const char __func__[] = "function-name";
32675
32676appeared, where function-name is the name of the lexically-enclosing
32677function.  This name is the unadorned name of the function.
32678
32679 `__FUNCTION__' is another name for `__func__', provided for backward
32680compatibility with old versions of GCC.
32681
32682 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'.
32683However, in C++, `__PRETTY_FUNCTION__' contains the type signature of
32684the function as well as its bare name.  For example, this program:
32685
32686     extern "C" {
32687     extern int printf (char *, ...);
32688     }
32689
32690     class a {
32691      public:
32692       void sub (int i)
32693         {
32694           printf ("__FUNCTION__ = %s\n", __FUNCTION__);
32695           printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
32696         }
32697     };
32698
32699     int
32700     main (void)
32701     {
32702       a ax;
32703       ax.sub (0);
32704       return 0;
32705     }
32706
32707gives this output:
32708
32709     __FUNCTION__ = sub
32710     __PRETTY_FUNCTION__ = void a::sub(int)
32711
32712 These identifiers are variables, not preprocessor macros, and may not
32713be used to initialize `char' arrays or be concatenated with other string
32714literals.
32715
32716
32717File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
32718
327196.47 Getting the Return or Frame Address of a Function
32720======================================================
32721
32722These functions may be used to get information about the callers of a
32723function.
32724
32725 -- Built-in Function: void * __builtin_return_address (unsigned int
32726          LEVEL)
32727     This function returns the return address of the current function,
32728     or of one of its callers.  The LEVEL argument is number of frames
32729     to scan up the call stack.  A value of `0' yields the return
32730     address of the current function, a value of `1' yields the return
32731     address of the caller of the current function, and so forth.  When
32732     inlining the expected behavior is that the function returns the
32733     address of the function that is returned to.  To work around this
32734     behavior use the `noinline' function attribute.
32735
32736     The LEVEL argument must be a constant integer.
32737
32738     On some machines it may be impossible to determine the return
32739     address of any function other than the current one; in such cases,
32740     or when the top of the stack has been reached, this function
32741     returns `0' or a random value.  In addition,
32742     `__builtin_frame_address' may be used to determine if the top of
32743     the stack has been reached.
32744
32745     Additional post-processing of the returned value may be needed, see
32746     `__builtin_extract_return_addr'.
32747
32748     This function should only be used with a nonzero argument for
32749     debugging purposes.
32750
32751 -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR)
32752     The address as returned by `__builtin_return_address' may have to
32753     be fed through this function to get the actual encoded address.
32754     For example, on the 31-bit S/390 platform the highest bit has to
32755     be masked out, or on SPARC platforms an offset has to be added for
32756     the true next instruction to be executed.
32757
32758     If no fixup is needed, this function simply passes through ADDR.
32759
32760 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR)
32761     This function does the reverse of `__builtin_extract_return_addr'.
32762
32763 -- Built-in Function: void * __builtin_frame_address (unsigned int
32764          LEVEL)
32765     This function is similar to `__builtin_return_address', but it
32766     returns the address of the function frame rather than the return
32767     address of the function.  Calling `__builtin_frame_address' with a
32768     value of `0' yields the frame address of the current function, a
32769     value of `1' yields the frame address of the caller of the current
32770     function, and so forth.
32771
32772     The frame is the area on the stack that holds local variables and
32773     saved registers.  The frame address is normally the address of the
32774     first word pushed on to the stack by the function.  However, the
32775     exact definition depends upon the processor and the calling
32776     convention.  If the processor has a dedicated frame pointer
32777     register, and the function has a frame, then
32778     `__builtin_frame_address' returns the value of the frame pointer
32779     register.
32780
32781     On some machines it may be impossible to determine the frame
32782     address of any function other than the current one; in such cases,
32783     or when the top of the stack has been reached, this function
32784     returns `0' if the first frame pointer is properly initialized by
32785     the startup code.
32786
32787     This function should only be used with a nonzero argument for
32788     debugging purposes.
32789
32790
32791File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
32792
327936.48 Using Vector Instructions through Built-in Functions
32794=========================================================
32795
32796On some targets, the instruction set contains SIMD vector instructions
32797which operate on multiple values contained in one large register at the
32798same time.  For example, on the x86 the MMX, 3DNow! and SSE extensions
32799can be used this way.
32800
32801 The first step in using these extensions is to provide the necessary
32802data types.  This should be done using an appropriate `typedef':
32803
32804     typedef int v4si __attribute__ ((vector_size (16)));
32805
32806The `int' type specifies the base type, while the attribute specifies
32807the vector size for the variable, measured in bytes.  For example, the
32808declaration above causes the compiler to set the mode for the `v4si'
32809type to be 16 bytes wide and divided into `int' sized units.  For a
3281032-bit `int' this means a vector of 4 units of 4 bytes, and the
32811corresponding mode of `foo' is V4SI.
32812
32813 The `vector_size' attribute is only applicable to integral and float
32814scalars, although arrays, pointers, and function return values are
32815allowed in conjunction with this construct. Only sizes that are a power
32816of two are currently allowed.
32817
32818 All the basic integer types can be used as base types, both as signed
32819and as unsigned: `char', `short', `int', `long', `long long'.  In
32820addition, `float' and `double' can be used to build floating-point
32821vector types.
32822
32823 Specifying a combination that is not valid for the current architecture
32824causes GCC to synthesize the instructions using a narrower mode.  For
32825example, if you specify a variable of type `V4SI' and your architecture
32826does not allow for this specific SIMD type, GCC produces code that uses
328274 `SIs'.
32828
32829 The types defined in this manner can be used with a subset of normal C
32830operations.  Currently, GCC allows using the following operators on
32831these types: `+, -, *, /, unary minus, ^, |, &, ~, %'.
32832
32833 The operations behave like C++ `valarrays'.  Addition is defined as
32834the addition of the corresponding elements of the operands.  For
32835example, in the code below, each of the 4 elements in A is added to the
32836corresponding 4 elements in B and the resulting vector is stored in C.
32837
32838     typedef int v4si __attribute__ ((vector_size (16)));
32839
32840     v4si a, b, c;
32841
32842     c = a + b;
32843
32844 Subtraction, multiplication, division, and the logical operations
32845operate in a similar manner.  Likewise, the result of using the unary
32846minus or complement operators on a vector type is a vector whose
32847elements are the negative or complemented values of the corresponding
32848elements in the operand.
32849
32850 It is possible to use shifting operators `<<', `>>' on integer-type
32851vectors. The operation is defined as following: `{a0, a1, ..., an} >>
32852{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'. Vector
32853operands must have the same number of elements.
32854
32855 For convenience, it is allowed to use a binary vector operation where
32856one operand is a scalar. In that case the compiler transforms the
32857scalar operand into a vector where each element is the scalar from the
32858operation. The transformation happens only if the scalar could be
32859safely converted to the vector-element type.  Consider the following
32860code.
32861
32862     typedef int v4si __attribute__ ((vector_size (16)));
32863
32864     v4si a, b, c;
32865     long l;
32866
32867     a = b + 1;    /* a = b + {1,1,1,1}; */
32868     a = 2 * b;    /* a = {2,2,2,2} * b; */
32869
32870     a = l + a;    /* Error, cannot convert long to int. */
32871
32872 Vectors can be subscripted as if the vector were an array with the
32873same number of elements and base type.  Out of bound accesses invoke
32874undefined behavior at run time.  Warnings for out of bound accesses for
32875vector subscription can be enabled with `-Warray-bounds'.
32876
32877 Vector comparison is supported with standard comparison operators:
32878`==, !=, <, <=, >, >='. Comparison operands can be vector expressions
32879of integer-type or real-type. Comparison between integer-type vectors
32880and real-type vectors are not supported.  The result of the comparison
32881is a vector of the same width and number of elements as the comparison
32882operands with a signed integral element type.
32883
32884 Vectors are compared element-wise producing 0 when comparison is false
32885and -1 (constant of the appropriate type where all bits are set)
32886otherwise. Consider the following example.
32887
32888     typedef int v4si __attribute__ ((vector_size (16)));
32889
32890     v4si a = {1,2,3,4};
32891     v4si b = {3,2,1,4};
32892     v4si c;
32893
32894     c = a >  b;     /* The result would be {0, 0,-1, 0}  */
32895     c = a == b;     /* The result would be {0,-1, 0,-1}  */
32896
32897 In C++, the ternary operator `?:' is available. `a?b:c', where `b' and
32898`c' are vectors of the same type and `a' is an integer vector with the
32899same number of elements of the same size as `b' and `c', computes all
32900three arguments and creates a vector `{a[0]?b[0]:c[0], a[1]?b[1]:c[1],
32901...}'.  Note that unlike in OpenCL, `a' is thus interpreted as `a != 0'
32902and not `a < 0'.  As in the case of binary operations, this syntax is
32903also accepted when one of `b' or `c' is a scalar that is then
32904transformed into a vector. If both `b' and `c' are scalars and the type
32905of `true?b:c' has the same size as the element type of `a', then `b'
32906and `c' are converted to a vector type whose elements have this type
32907and with the same number of elements as `a'.
32908
32909 In C++, the logic operators `!, &&, ||' are available for vectors.
32910`!v' is equivalent to `v == 0', `a && b' is equivalent to `a!=0 & b!=0'
32911and `a || b' is equivalent to `a!=0 | b!=0'.  For mixed operations
32912between a scalar `s' and a vector `v', `s && v' is equivalent to
32913`s?v!=0:0' (the evaluation is short-circuit) and `v && s' is equivalent
32914to `v!=0 & (s?-1:0)'.
32915
32916 Vector shuffling is available using functions `__builtin_shuffle (vec,
32917mask)' and `__builtin_shuffle (vec0, vec1, mask)'.  Both functions
32918construct a permutation of elements from one or two vectors and return
32919a vector of the same type as the input vector(s).  The MASK is an
32920integral vector with the same width (W) and element count (N) as the
32921output vector.
32922
32923 The elements of the input vectors are numbered in memory ordering of
32924VEC0 beginning at 0 and VEC1 beginning at N.  The elements of MASK are
32925considered modulo N in the single-operand case and modulo 2*N in the
32926two-operand case.
32927
32928 Consider the following example,
32929
32930     typedef int v4si __attribute__ ((vector_size (16)));
32931
32932     v4si a = {1,2,3,4};
32933     v4si b = {5,6,7,8};
32934     v4si mask1 = {0,1,1,3};
32935     v4si mask2 = {0,4,2,5};
32936     v4si res;
32937
32938     res = __builtin_shuffle (a, mask1);       /* res is {1,2,2,4}  */
32939     res = __builtin_shuffle (a, b, mask2);    /* res is {1,5,3,6}  */
32940
32941 Note that `__builtin_shuffle' is intentionally semantically compatible
32942with the OpenCL `shuffle' and `shuffle2' functions.
32943
32944 You can declare variables and use them in function calls and returns,
32945as well as in assignments and some casts.  You can specify a vector
32946type as a return type for a function.  Vector types can also be used as
32947function arguments.  It is possible to cast from one vector type to
32948another, provided they are of the same size (in fact, you can also cast
32949vectors to and from other datatypes of the same size).
32950
32951 You cannot operate between vectors of different lengths or different
32952signedness without a cast.
32953
32954
32955File: gcc.info,  Node: Offsetof,  Next: __sync Builtins,  Prev: Vector Extensions,  Up: C Extensions
32956
329576.49 Support for `offsetof'
32958===========================
32959
32960GCC implements for both C and C++ a syntactic extension to implement
32961the `offsetof' macro.
32962
32963     primary:
32964             "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")"
32965
32966     offsetof_member_designator:
32967               `identifier'
32968             | offsetof_member_designator "." `identifier'
32969             | offsetof_member_designator "[" `expr' "]"
32970
32971 This extension is sufficient such that
32972
32973     #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
32974
32975is a suitable definition of the `offsetof' macro.  In C++, TYPE may be
32976dependent.  In either case, MEMBER may consist of a single identifier,
32977or a sequence of member accesses and array references.
32978
32979
32980File: gcc.info,  Node: __sync Builtins,  Next: __atomic Builtins,  Prev: Offsetof,  Up: C Extensions
32981
329826.50 Legacy `__sync' Built-in Functions for Atomic Memory Access
32983================================================================
32984
32985The following built-in functions are intended to be compatible with
32986those described in the `Intel Itanium Processor-specific Application
32987Binary Interface', section 7.4.  As such, they depart from the normal
32988GCC practice of using the `__builtin_' prefix, and further that they
32989are overloaded such that they work on multiple types.
32990
32991 The definition given in the Intel documentation allows only for the
32992use of the types `int', `long', `long long' as well as their unsigned
32993counterparts.  GCC allows any integral scalar or pointer type that is
329941, 2, 4 or 8 bytes in length.
32995
32996 Not all operations are supported by all target processors.  If a
32997particular operation cannot be implemented on the target processor, a
32998warning is generated and a call to an external function is generated.
32999The external function carries the same name as the built-in version,
33000with an additional suffix `_N' where N is the size of the data type.
33001
33002 In most cases, these built-in functions are considered a "full
33003barrier".  That is, no memory operand is moved across the operation,
33004either forward or backward.  Further, instructions are issued as
33005necessary to prevent the processor from speculating loads across the
33006operation and from queuing stores after the operation.
33007
33008 All of the routines are described in the Intel documentation to take
33009"an optional list of variables protected by the memory barrier".  It's
33010not clear what is meant by that; it could mean that _only_ the
33011following variables are protected, or it could mean that these variables
33012should in addition be protected.  At present GCC ignores this list and
33013protects all variables that are globally accessible.  If in the future
33014we make some use of this list, an empty list will continue to mean all
33015globally accessible variables.
33016
33017`TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
33018`TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
33019`TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
33020`TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
33021`TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
33022`TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
33023     These built-in functions perform the operation suggested by the
33024     name, and returns the value that had previously been in memory.
33025     That is,
33026
33027          { tmp = *ptr; *ptr OP= value; return tmp; }
33028          { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand
33029
33030     _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand' as
33031     `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp & value'.
33032
33033`TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
33034`TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
33035`TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
33036`TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
33037`TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
33038`TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
33039     These built-in functions perform the operation suggested by the
33040     name, and return the new value.  That is,
33041
33042          { *ptr OP= value; return *ptr; }
33043          { *ptr = ~(*ptr & value); return *ptr; }   // nand
33044
33045     _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch' as
33046     `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr & value'.
33047
33048`bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
33049`TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
33050     These built-in functions perform an atomic compare and swap.  That
33051     is, if the current value of `*PTR' is OLDVAL, then write NEWVAL
33052     into `*PTR'.
33053
33054     The "bool" version returns true if the comparison is successful and
33055     NEWVAL is written.  The "val" version returns the contents of
33056     `*PTR' before the operation.
33057
33058`__sync_synchronize (...)'
33059     This built-in function issues a full memory barrier.
33060
33061`TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
33062     This built-in function, as described by Intel, is not a
33063     traditional test-and-set operation, but rather an atomic exchange
33064     operation.  It writes VALUE into `*PTR', and returns the previous
33065     contents of `*PTR'.
33066
33067     Many targets have only minimal support for such locks, and do not
33068     support a full exchange operation.  In this case, a target may
33069     support reduced functionality here by which the _only_ valid value
33070     to store is the immediate constant 1.  The exact value actually
33071     stored in `*PTR' is implementation defined.
33072
33073     This built-in function is not a full barrier, but rather an
33074     "acquire barrier".  This means that references after the operation
33075     cannot move to (or be speculated to) before the operation, but
33076     previous memory stores may not be globally visible yet, and
33077     previous memory loads may not yet be satisfied.
33078
33079`void __sync_lock_release (TYPE *ptr, ...)'
33080     This built-in function releases the lock acquired by
33081     `__sync_lock_test_and_set'.  Normally this means writing the
33082     constant 0 to `*PTR'.
33083
33084     This built-in function is not a full barrier, but rather a
33085     "release barrier".  This means that all previous memory stores are
33086     globally visible, and all previous memory loads have been
33087     satisfied, but following memory reads are not prevented from being
33088     speculated to before the barrier.
33089
33090
33091File: gcc.info,  Node: __atomic Builtins,  Next: Integer Overflow Builtins,  Prev: __sync Builtins,  Up: C Extensions
33092
330936.51 Built-in Functions for Memory Model Aware Atomic Operations
33094================================================================
33095
33096The following built-in functions approximately match the requirements
33097for C++11 memory model. Many are similar to the `__sync' prefixed
33098built-in functions, but all also have a memory model parameter.  These
33099are all identified by being prefixed with `__atomic', and most are
33100overloaded such that they work with multiple types.
33101
33102 GCC allows any integral scalar or pointer type that is 1, 2, 4, or 8
33103bytes in length. 16-byte integral types are also allowed if `__int128'
33104(*note __int128::) is supported by the architecture.
33105
33106 Target architectures are encouraged to provide their own patterns for
33107each of these built-in functions.  If no target is provided, the
33108original non-memory model set of `__sync' atomic built-in functions are
33109utilized, along with any required synchronization fences surrounding it
33110in order to achieve the proper behavior.  Execution in this case is
33111subject to the same restrictions as those built-in functions.
33112
33113 If there is no pattern or mechanism to provide a lock free instruction
33114sequence, a call is made to an external routine with the same parameters
33115to be resolved at run time.
33116
33117 The four non-arithmetic functions (load, store, exchange, and
33118compare_exchange) all have a generic version as well.  This generic
33119version works on any data type.  If the data type size maps to one of
33120the integral sizes that may have lock free support, the generic version
33121utilizes the lock free built-in function.  Otherwise an external call
33122is left to be resolved at run time.  This external call is the same
33123format with the addition of a `size_t' parameter inserted as the first
33124parameter indicating the size of the object being pointed to.  All
33125objects must be the same size.
33126
33127 There are 6 different memory models that can be specified.  These map
33128to the same names in the C++11 standard.  Refer there or to the GCC
33129wiki on atomic synchronization
33130(http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for more detailed
33131definitions.  These memory models integrate both barriers to code
33132motion as well as synchronization requirements with other threads.
33133These are listed in approximately ascending order of strength. It is
33134also possible to use target specific flags for memory model flags, like
33135Hardware Lock Elision.
33136
33137`__ATOMIC_RELAXED'
33138     No barriers or synchronization.
33139
33140`__ATOMIC_CONSUME'
33141     Data dependency only for both barrier and synchronization with
33142     another thread.
33143
33144`__ATOMIC_ACQUIRE'
33145     Barrier to hoisting of code and synchronizes with release (or
33146     stronger) semantic stores from another thread.
33147
33148`__ATOMIC_RELEASE'
33149     Barrier to sinking of code and synchronizes with acquire (or
33150     stronger) semantic loads from another thread.
33151
33152`__ATOMIC_ACQ_REL'
33153     Full barrier in both directions and synchronizes with acquire
33154     loads and release stores in another thread.
33155
33156`__ATOMIC_SEQ_CST'
33157     Full barrier in both directions and synchronizes with acquire
33158     loads and release stores in all threads.
33159
33160 When implementing patterns for these built-in functions, the memory
33161model parameter can be ignored as long as the pattern implements the
33162most restrictive `__ATOMIC_SEQ_CST' model.  Any of the other memory
33163models execute correctly with this memory model but they may not
33164execute as efficiently as they could with a more appropriate
33165implementation of the relaxed requirements.
33166
33167 Note that the C++11 standard allows for the memory model parameter to
33168be determined at run time rather than at compile time.  These built-in
33169functions map any run-time value to `__ATOMIC_SEQ_CST' rather than
33170invoke a runtime library call or inline a switch statement.  This is
33171standard compliant, safe, and the simplest approach for now.
33172
33173 The memory model parameter is a signed int, but only the lower 16 bits
33174are reserved for the memory model.  The remainder of the signed int is
33175reserved for target use and should be 0.  Use of the predefined atomic
33176values ensures proper usage.
33177
33178 -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memmodel)
33179     This built-in function implements an atomic load operation.  It
33180     returns the contents of `*PTR'.
33181
33182     The valid memory model variants are `__ATOMIC_RELAXED',
33183     `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', and `__ATOMIC_CONSUME'.
33184
33185
33186 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int
33187          memmodel)
33188     This is the generic version of an atomic load.  It returns the
33189     contents of `*PTR' in `*RET'.
33190
33191
33192 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int
33193          memmodel)
33194     This built-in function implements an atomic store operation.  It
33195     writes `VAL' into `*PTR'.
33196
33197     The valid memory model variants are `__ATOMIC_RELAXED',
33198     `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'.
33199
33200
33201 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int
33202          memmodel)
33203     This is the generic version of an atomic store.  It stores the
33204     value of `*VAL' into `*PTR'.
33205
33206
33207 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val,
33208          int memmodel)
33209     This built-in function implements an atomic exchange operation.
33210     It writes VAL into `*PTR', and returns the previous contents of
33211     `*PTR'.
33212
33213     The valid memory model variants are `__ATOMIC_RELAXED',
33214     `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', `__ATOMIC_RELEASE', and
33215     `__ATOMIC_ACQ_REL'.
33216
33217
33218 -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val,
33219          TYPE *ret, int memmodel)
33220     This is the generic version of an atomic exchange.  It stores the
33221     contents of `*VAL' into `*PTR'. The original value of `*PTR' is
33222     copied into `*RET'.
33223
33224
33225 -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr,
33226          TYPE *expected, TYPE desired, bool weak, int
33227          success_memmodel, int failure_memmodel)
33228     This built-in function implements an atomic compare and exchange
33229     operation.  This compares the contents of `*PTR' with the contents
33230     of `*EXPECTED' and if equal, writes DESIRED into `*PTR'.  If they
33231     are not equal, the current contents of `*PTR' is written into
33232     `*EXPECTED'.  WEAK is true for weak compare_exchange, and false
33233     for the strong variation.  Many targets only offer the strong
33234     variation and ignore the parameter.  When in doubt, use the strong
33235     variation.
33236
33237     True is returned if DESIRED is written into `*PTR' and the
33238     execution is considered to conform to the memory model specified
33239     by SUCCESS_MEMMODEL.  There are no restrictions on what memory
33240     model can be used here.
33241
33242     False is returned otherwise, and the execution is considered to
33243     conform to FAILURE_MEMMODEL. This memory model cannot be
33244     `__ATOMIC_RELEASE' nor `__ATOMIC_ACQ_REL'.  It also cannot be a
33245     stronger model than that specified by SUCCESS_MEMMODEL.
33246
33247
33248 -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE
33249          *expected, TYPE *desired, bool weak, int success_memmodel,
33250          int failure_memmodel)
33251     This built-in function implements the generic version of
33252     `__atomic_compare_exchange'.  The function is virtually identical
33253     to `__atomic_compare_exchange_n', except the desired value is also
33254     a pointer.
33255
33256
33257 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val,
33258          int memmodel)
33259 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val,
33260          int memmodel)
33261 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val,
33262          int memmodel)
33263 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val,
33264          int memmodel)
33265 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int
33266          memmodel)
33267 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val,
33268          int memmodel)
33269     These built-in functions perform the operation suggested by the
33270     name, and return the result of the operation. That is,
33271
33272          { *ptr OP= val; return *ptr; }
33273
33274     All memory models are valid.
33275
33276
33277 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val,
33278          int memmodel)
33279 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val,
33280          int memmodel)
33281 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val,
33282          int memmodel)
33283 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val,
33284          int memmodel)
33285 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int
33286          memmodel)
33287 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val,
33288          int memmodel)
33289     These built-in functions perform the operation suggested by the
33290     name, and return the value that had previously been in `*PTR'.
33291     That is,
33292
33293          { tmp = *ptr; *ptr OP= val; return tmp; }
33294
33295     All memory models are valid.
33296
33297
33298 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int
33299          memmodel)
33300     This built-in function performs an atomic test-and-set operation on
33301     the byte at `*PTR'.  The byte is set to some implementation
33302     defined nonzero "set" value and the return value is `true' if and
33303     only if the previous contents were "set".  It should be only used
33304     for operands of type `bool' or `char'. For other types only part
33305     of the value may be set.
33306
33307     All memory models are valid.
33308
33309
33310 -- Built-in Function: void __atomic_clear (bool *ptr, int memmodel)
33311     This built-in function performs an atomic clear operation on
33312     `*PTR'.  After the operation, `*PTR' contains 0.  It should be
33313     only used for operands of type `bool' or `char' and in conjunction
33314     with `__atomic_test_and_set'.  For other types it may only clear
33315     partially. If the type is not `bool' prefer using `__atomic_store'.
33316
33317     The valid memory model variants are `__ATOMIC_RELAXED',
33318     `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'.
33319
33320
33321 -- Built-in Function: void __atomic_thread_fence (int memmodel)
33322     This built-in function acts as a synchronization fence between
33323     threads based on the specified memory model.
33324
33325     All memory orders are valid.
33326
33327
33328 -- Built-in Function: void __atomic_signal_fence (int memmodel)
33329     This built-in function acts as a synchronization fence between a
33330     thread and signal handlers based in the same thread.
33331
33332     All memory orders are valid.
33333
33334
33335 -- Built-in Function: bool __atomic_always_lock_free (size_t size,
33336          void *ptr)
33337     This built-in function returns true if objects of SIZE bytes always
33338     generate lock free atomic instructions for the target architecture.
33339     SIZE must resolve to a compile-time constant and the result also
33340     resolves to a compile-time constant.
33341
33342     PTR is an optional pointer to the object that may be used to
33343     determine alignment.  A value of 0 indicates typical alignment
33344     should be used.  The compiler may also ignore this parameter.
33345
33346          if (_atomic_always_lock_free (sizeof (long long), 0))
33347
33348
33349 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void
33350          *ptr)
33351     This built-in function returns true if objects of SIZE bytes always
33352     generate lock free atomic instructions for the target
33353     architecture.  If it is not known to be lock free a call is made
33354     to a runtime routine named `__atomic_is_lock_free'.
33355
33356     PTR is an optional pointer to the object that may be used to
33357     determine alignment.  A value of 0 indicates typical alignment
33358     should be used.  The compiler may also ignore this parameter.
33359
33360
33361File: gcc.info,  Node: Integer Overflow Builtins,  Next: x86 specific memory model extensions for transactional memory,  Prev: __atomic Builtins,  Up: C Extensions
33362
333636.52 Built-in Functions to Perform Arithmetic with Overflow Checking
33364====================================================================
33365
33366The following built-in functions allow performing simple arithmetic
33367operations together with checking whether the operations overflowed.
33368
33369 -- Built-in Function: bool __builtin_add_overflow (TYPE1 a, TYPE2 b,
33370          TYPE3 *res)
33371 -- Built-in Function: bool __builtin_sadd_overflow (int a, int b, int
33372          *res)
33373 -- Built-in Function: bool __builtin_saddl_overflow (long int a, long
33374          int b, long int *res)
33375 -- Built-in Function: bool __builtin_saddll_overflow (long long int a,
33376          long long int b, long int *res)
33377 -- Built-in Function: bool __builtin_uadd_overflow (unsigned int a,
33378          unsigned int b, unsigned int *res)
33379 -- Built-in Function: bool __builtin_uaddl_overflow (unsigned long int
33380          a, unsigned long int b, unsigned long int *res)
33381 -- Built-in Function: bool __builtin_uaddll_overflow (unsigned long
33382          long int a, unsigned long long int b, unsigned long int *res)
33383     These built-in functions promote the first two operands into
33384     infinite precision signed type and perform addition on those
33385     promoted operands.  The result is then cast to the type the third
33386     pointer argument points to and stored there.  If the stored result
33387     is equal to the infinite precision result, the built-in functions
33388     return false, otherwise they return true.  As the addition is
33389     performed in infinite signed precision, these built-in functions
33390     have fully defined behavior for all argument values.
33391
33392     The first built-in function allows arbitrary integral types for
33393     operands and the result type must be pointer to some integer type,
33394     the rest of the built-in functions have explicit integer types.
33395
33396     The compiler will attempt to use hardware instructions to implement
33397     these built-in functions where possible, like conditional jump on
33398     overflow after addition, conditional jump on carry etc.
33399
33400
33401 -- Built-in Function: bool __builtin_sub_overflow (TYPE1 a, TYPE2 b,
33402          TYPE3 *res)
33403 -- Built-in Function: bool __builtin_ssub_overflow (int a, int b, int
33404          *res)
33405 -- Built-in Function: bool __builtin_ssubl_overflow (long int a, long
33406          int b, long int *res)
33407 -- Built-in Function: bool __builtin_ssubll_overflow (long long int a,
33408          long long int b, long int *res)
33409 -- Built-in Function: bool __builtin_usub_overflow (unsigned int a,
33410          unsigned int b, unsigned int *res)
33411 -- Built-in Function: bool __builtin_usubl_overflow (unsigned long int
33412          a, unsigned long int b, unsigned long int *res)
33413 -- Built-in Function: bool __builtin_usubll_overflow (unsigned long
33414          long int a, unsigned long long int b, unsigned long int *res)
33415     These built-in functions are similar to the add overflow checking
33416     built-in functions above, except they perform subtraction,
33417     subtract the second argument from the first one, instead of
33418     addition.
33419
33420
33421 -- Built-in Function: bool __builtin_mul_overflow (TYPE1 a, TYPE2 b,
33422          TYPE3 *res)
33423 -- Built-in Function: bool __builtin_smul_overflow (int a, int b, int
33424          *res)
33425 -- Built-in Function: bool __builtin_smull_overflow (long int a, long
33426          int b, long int *res)
33427 -- Built-in Function: bool __builtin_smulll_overflow (long long int a,
33428          long long int b, long int *res)
33429 -- Built-in Function: bool __builtin_umul_overflow (unsigned int a,
33430          unsigned int b, unsigned int *res)
33431 -- Built-in Function: bool __builtin_umull_overflow (unsigned long int
33432          a, unsigned long int b, unsigned long int *res)
33433 -- Built-in Function: bool __builtin_umulll_overflow (unsigned long
33434          long int a, unsigned long long int b, unsigned long int *res)
33435     These built-in functions are similar to the add overflow checking
33436     built-in functions above, except they perform multiplication,
33437     instead of addition.
33438
33439
33440
33441File: gcc.info,  Node: x86 specific memory model extensions for transactional memory,  Next: Object Size Checking,  Prev: Integer Overflow Builtins,  Up: C Extensions
33442
334436.53 x86-Specific Memory Model Extensions for Transactional Memory
33444==================================================================
33445
33446The x86 architecture supports additional memory ordering flags to mark
33447lock critical sections for hardware lock elision.  These must be
33448specified in addition to an existing memory model to atomic intrinsics.
33449
33450`__ATOMIC_HLE_ACQUIRE'
33451     Start lock elision on a lock variable.  Memory model must be
33452     `__ATOMIC_ACQUIRE' or stronger.
33453
33454`__ATOMIC_HLE_RELEASE'
33455     End lock elision on a lock variable.  Memory model must be
33456     `__ATOMIC_RELEASE' or stronger.
33457
33458 When a lock acquire fails it is required for good performance to abort
33459the transaction quickly. This can be done with a `_mm_pause'
33460
33461     #include <immintrin.h> // For _mm_pause
33462
33463     int lockvar;
33464
33465     /* Acquire lock with lock elision */
33466     while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
33467         _mm_pause(); /* Abort failed transaction */
33468     ...
33469     /* Free lock with lock elision */
33470     __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
33471
33472
33473File: gcc.info,  Node: Object Size Checking,  Next: Pointer Bounds Checker builtins,  Prev: x86 specific memory model extensions for transactional memory,  Up: C Extensions
33474
334756.54 Object Size Checking Built-in Functions
33476============================================
33477
33478GCC implements a limited buffer overflow protection mechanism that can
33479prevent some buffer overflow attacks.
33480
33481 -- Built-in Function: size_t __builtin_object_size (void * PTR, int
33482          TYPE)
33483     is a built-in construct that returns a constant number of bytes
33484     from PTR to the end of the object PTR pointer points to (if known
33485     at compile time).  `__builtin_object_size' never evaluates its
33486     arguments for side-effects.  If there are any side-effects in
33487     them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0'
33488     for TYPE 2 or 3.  If there are multiple objects PTR can point to
33489     and all of them are known at compile time, the returned number is
33490     the maximum of remaining byte counts in those objects if TYPE & 2
33491     is 0 and minimum if nonzero.  If it is not possible to determine
33492     which objects PTR points to at compile time,
33493     `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or
33494     1 and `(size_t) 0' for TYPE 2 or 3.
33495
33496     TYPE is an integer constant from 0 to 3.  If the least significant
33497     bit is clear, objects are whole variables, if it is set, a closest
33498     surrounding subobject is considered the object a pointer points to.
33499     The second bit determines if maximum or minimum of remaining bytes
33500     is computed.
33501
33502          struct V { char buf1[10]; int b; char buf2[10]; } var;
33503          char *p = &var.buf1[1], *q = &var.b;
33504
33505          /* Here the object p points to is var.  */
33506          assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
33507          /* The subobject p points to is var.buf1.  */
33508          assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
33509          /* The object q points to is var.  */
33510          assert (__builtin_object_size (q, 0)
33511                  == (char *) (&var + 1) - (char *) &var.b);
33512          /* The subobject q points to is var.b.  */
33513          assert (__builtin_object_size (q, 1) == sizeof (var.b));
33514
33515 There are built-in functions added for many common string operation
33516functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is
33517provided.  This built-in has an additional last argument, which is the
33518number of bytes remaining in object the DEST argument points to or
33519`(size_t) -1' if the size is not known.
33520
33521 The built-in functions are optimized into the normal string functions
33522like `memcpy' if the last argument is `(size_t) -1' or if it is known
33523at compile time that the destination object will not be overflown.  If
33524the compiler can determine at compile time the object will be always
33525overflown, it issues a warning.
33526
33527 The intended use can be e.g.
33528
33529     #undef memcpy
33530     #define bos0(dest) __builtin_object_size (dest, 0)
33531     #define memcpy(dest, src, n) \
33532       __builtin___memcpy_chk (dest, src, n, bos0 (dest))
33533
33534     char *volatile p;
33535     char buf[10];
33536     /* It is unknown what object p points to, so this is optimized
33537        into plain memcpy - no checking is possible.  */
33538     memcpy (p, "abcde", n);
33539     /* Destination is known and length too.  It is known at compile
33540        time there will be no overflow.  */
33541     memcpy (&buf[5], "abcde", 5);
33542     /* Destination is known, but the length is not known at compile time.
33543        This will result in __memcpy_chk call that can check for overflow
33544        at run time.  */
33545     memcpy (&buf[5], "abcde", n);
33546     /* Destination is known and it is known at compile time there will
33547        be overflow.  There will be a warning and __memcpy_chk call that
33548        will abort the program at run time.  */
33549     memcpy (&buf[6], "abcde", 5);
33550
33551 Such built-in functions are provided for `memcpy', `mempcpy',
33552`memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and
33553`strncat'.
33554
33555 There are also checking built-in functions for formatted output
33556functions.
33557     int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
33558     int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
33559                                   const char *fmt, ...);
33560     int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
33561                                   va_list ap);
33562     int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
33563                                    const char *fmt, va_list ap);
33564
33565 The added FLAG argument is passed unchanged to `__sprintf_chk' etc.
33566functions and can contain implementation specific flags on what
33567additional security measures the checking function might take, such as
33568handling `%n' differently.
33569
33570 The OS argument is the object size S points to, like in the other
33571built-in functions.  There is a small difference in the behavior
33572though, if OS is `(size_t) -1', the built-in functions are optimized
33573into the non-checking functions only if FLAG is 0, otherwise the
33574checking function is called with OS argument set to `(size_t) -1'.
33575
33576 In addition to this, there are checking built-in functions
33577`__builtin___printf_chk', `__builtin___vprintf_chk',
33578`__builtin___fprintf_chk' and `__builtin___vfprintf_chk'.  These have
33579just one additional argument, FLAG, right before format string FMT.  If
33580the compiler is able to optimize them to `fputc' etc. functions, it
33581does, otherwise the checking function is called and the FLAG argument
33582passed to it.
33583
33584
33585File: gcc.info,  Node: Pointer Bounds Checker builtins,  Next: Cilk Plus Builtins,  Prev: Object Size Checking,  Up: C Extensions
33586
335876.55 Pointer Bounds Checker Built-in Functions
33588==============================================
33589
33590GCC provides a set of built-in functions to control Pointer Bounds
33591Checker instrumentation.  Note that all Pointer Bounds Checker builtins
33592can be used even if you compile with Pointer Bounds Checker off
33593(`-fno-check-pointer-bounds').  The behavior may differ in such case as
33594documented below.
33595
33596 -- Built-in Function: void * __builtin___bnd_set_ptr_bounds (const
33597          void *Q, size_t SIZE)
33598     This built-in function returns a new pointer with the value of Q,
33599     and associate it with the bounds [Q, Q+SIZE-1].  With Pointer
33600     Bounds Checker off, the built-in function just returns the first
33601     argument.
33602
33603          extern void *__wrap_malloc (size_t n)
33604          {
33605            void *p = (void *)__real_malloc (n);
33606            if (!p) return __builtin___bnd_null_ptr_bounds (p);
33607            return __builtin___bnd_set_ptr_bounds (p, n);
33608          }
33609
33610
33611 -- Built-in Function: void * __builtin___bnd_narrow_ptr_bounds (const
33612          void *P, const void *Q, size_t SIZE)
33613     This built-in function returns a new pointer with the value of P
33614     and associates it with the narrowed bounds formed by the
33615     intersection of bounds associated with Q and the bounds [P, P +
33616     SIZE - 1].  With Pointer Bounds Checker off, the built-in function
33617     just returns the first argument.
33618
33619          void init_objects (object *objs, size_t size)
33620          {
33621            size_t i;
33622            /* Initialize objects one-by-one passing pointers with bounds of
33623               an object, not the full array of objects.  */
33624            for (i = 0; i < size; i++)
33625              init_object (__builtin___bnd_narrow_ptr_bounds (objs + i, objs,
33626                                                              sizeof(object)));
33627          }
33628
33629
33630 -- Built-in Function: void * __builtin___bnd_copy_ptr_bounds (const
33631          void *Q, const void *R)
33632     This built-in function returns a new pointer with the value of Q,
33633     and associates it with the bounds already associated with pointer
33634     R.  With Pointer Bounds Checker off, the built-in function just
33635     returns the first argument.
33636
33637          /* Here is a way to get pointer to object's field but
33638             still with the full object's bounds.  */
33639          int *field_ptr = __builtin___bnd_copy_ptr_bounds (&objptr->int_field,
33640                                                            objptr);
33641
33642
33643 -- Built-in Function: void * __builtin___bnd_init_ptr_bounds (const
33644          void *Q)
33645     This built-in function returns a new pointer with the value of Q,
33646     and associates it with INIT (allowing full memory access) bounds.
33647     With Pointer Bounds Checker off, the built-in function just
33648     returns the first argument.
33649
33650
33651 -- Built-in Function: void * __builtin___bnd_null_ptr_bounds (const
33652          void *Q)
33653     This built-in function returns a new pointer with the value of Q,
33654     and associates it with NULL (allowing no memory access) bounds.
33655     With Pointer Bounds Checker off, the built-in function just
33656     returns the first argument.
33657
33658
33659 -- Built-in Function: void __builtin___bnd_store_ptr_bounds (const
33660          void **PTR_ADDR, const void *PTR_VAL)
33661     This built-in function stores the bounds associated with pointer
33662     PTR_VAL and location PTR_ADDR into Bounds Table.  This can be
33663     useful to propagate bounds from legacy code without touching the
33664     associated pointer's memory when pointers are copied as integers.
33665     With Pointer Bounds Checker off, the built-in function call is
33666     ignored.
33667
33668
33669 -- Built-in Function: void __builtin___bnd_chk_ptr_lbounds (const void
33670          *Q)
33671     This built-in function checks if the pointer Q is within the lower
33672     bound of its associated bounds.  With Pointer Bounds Checker off,
33673     the built-in function call is ignored.
33674
33675          extern void *__wrap_memset (void *dst, int c, size_t len)
33676          {
33677            if (len > 0)
33678              {
33679                __builtin___bnd_chk_ptr_lbounds (dst);
33680                __builtin___bnd_chk_ptr_ubounds ((char *)dst + len - 1);
33681                __real_memset (dst, c, len);
33682              }
33683            return dst;
33684          }
33685
33686
33687 -- Built-in Function: void __builtin___bnd_chk_ptr_ubounds (const void
33688          *Q)
33689     This built-in function checks if the pointer Q is within the upper
33690     bound of its associated bounds.  With Pointer Bounds Checker off,
33691     the built-in function call is ignored.
33692
33693
33694 -- Built-in Function: void __builtin___bnd_chk_ptr_bounds (const void
33695          *Q, size_t SIZE)
33696     This built-in function checks if [Q, Q + SIZE - 1] is within the
33697     lower and upper bounds associated with Q.  With Pointer Bounds
33698     Checker off, the built-in function call is ignored.
33699
33700          extern void *__wrap_memcpy (void *dst, const void *src, size_t n)
33701          {
33702            if (n > 0)
33703              {
33704                __bnd_chk_ptr_bounds (dst, n);
33705                __bnd_chk_ptr_bounds (src, n);
33706                __real_memcpy (dst, src, n);
33707              }
33708            return dst;
33709          }
33710
33711
33712 -- Built-in Function: const void * __builtin___bnd_get_ptr_lbound
33713          (const void *Q)
33714     This built-in function returns the lower bound associated with the
33715     pointer Q, as a pointer value.  This is useful for debugging using
33716     `printf'.  With Pointer Bounds Checker off, the built-in function
33717     returns 0.
33718
33719          void *lb = __builtin___bnd_get_ptr_lbound (q);
33720          void *ub = __builtin___bnd_get_ptr_ubound (q);
33721          printf ("q = %p  lb(q) = %p  ub(q) = %p", q, lb, ub);
33722
33723
33724 -- Built-in Function: const void * __builtin___bnd_get_ptr_ubound
33725          (const void *Q)
33726     This built-in function returns the upper bound (which is a
33727     pointer) associated with the pointer Q.  With Pointer Bounds
33728     Checker off, the built-in function returns -1.
33729
33730
33731
33732File: gcc.info,  Node: Cilk Plus Builtins,  Next: Other Builtins,  Prev: Pointer Bounds Checker builtins,  Up: C Extensions
33733
337346.56 Cilk Plus C/C++ Language Extension Built-in Functions
33735==========================================================
33736
33737GCC provides support for the following built-in reduction functions if
33738Cilk Plus is enabled. Cilk Plus can be enabled using the `-fcilkplus'
33739flag.
33740
33741   * `__sec_implicit_index'
33742
33743   * `__sec_reduce'
33744
33745   * `__sec_reduce_add'
33746
33747   * `__sec_reduce_all_nonzero'
33748
33749   * `__sec_reduce_all_zero'
33750
33751   * `__sec_reduce_any_nonzero'
33752
33753   * `__sec_reduce_any_zero'
33754
33755   * `__sec_reduce_max'
33756
33757   * `__sec_reduce_min'
33758
33759   * `__sec_reduce_max_ind'
33760
33761   * `__sec_reduce_min_ind'
33762
33763   * `__sec_reduce_mul'
33764
33765   * `__sec_reduce_mutating'
33766
33767 Further details and examples about these built-in functions are
33768described in the Cilk Plus language manual which can be found at
33769`http://www.cilkplus.org'.
33770
33771
33772File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Cilk Plus Builtins,  Up: C Extensions
33773
337746.57 Other Built-in Functions Provided by GCC
33775=============================================
33776
33777GCC provides a large number of built-in functions other than the ones
33778mentioned above.  Some of these are for internal use in the processing
33779of exceptions or variable-length argument lists and are not documented
33780here because they may change from time to time; we do not recommend
33781general use of these functions.
33782
33783 The remaining functions are provided for optimization purposes.
33784
33785 GCC includes built-in versions of many of the functions in the standard
33786C library.  The versions prefixed with `__builtin_' are always treated
33787as having the same meaning as the C library function even if you
33788specify the `-fno-builtin' option.  (*note C Dialect Options::) Many of
33789these functions are only optimized in certain cases; if they are not
33790optimized in a particular case, a call to the library function is
33791emitted.
33792
33793 Outside strict ISO C mode (`-ansi', `-std=c90', `-std=c99' or
33794`-std=c11'), the functions `_exit', `alloca', `bcmp', `bzero',
33795`dcgettext', `dgettext', `dremf', `dreml', `drem', `exp10f', `exp10l',
33796`exp10', `ffsll', `ffsl', `ffs', `fprintf_unlocked', `fputs_unlocked',
33797`gammaf', `gammal', `gamma', `gammaf_r', `gammal_r', `gamma_r',
33798`gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1',
33799`jnf', `jnl', `jn', `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy',
33800`pow10f', `pow10l', `pow10', `printf_unlocked', `rindex', `scalbf',
33801`scalbl', `scalb', `signbit', `signbitf', `signbitl', `signbitd32',
33802`signbitd64', `signbitd128', `significandf', `significandl',
33803`significand', `sincosf', `sincosl', `sincos', `stpcpy', `stpncpy',
33804`strcasecmp', `strdup', `strfmon', `strncasecmp', `strndup', `toascii',
33805`y0f', `y0l', `y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be
33806handled as built-in functions.  All these functions have corresponding
33807versions prefixed with `__builtin_', which may be used even in strict
33808C90 mode.
33809
33810 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf',
33811`asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl',
33812`cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos',
33813`cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh',
33814`casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl',
33815`catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl',
33816`ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl',
33817`cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj',
33818`copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow',
33819`cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf',
33820`csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl',
33821`csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan',
33822`erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l',
33823`exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf',
33824`fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin',
33825`hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs',
33826`isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs',
33827`llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround',
33828`log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf',
33829`logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl',
33830`lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf',
33831`nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward',
33832`remainderf', `remainderl', `remainder', `remquof', `remquol',
33833`remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round',
33834`scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn',
33835`snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc',
33836`vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in
33837functions except in strict ISO C90 mode (`-ansi' or `-std=c90').
33838
33839 There are also built-in versions of the ISO C99 functions `acosf',
33840`acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl',
33841`ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl',
33842`fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf',
33843`frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl',
33844`modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl',
33845`sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are
33846recognized in any mode since ISO C90 reserves these names for the
33847purpose to which ISO C99 puts them.  All these functions have
33848corresponding versions prefixed with `__builtin_'.
33849
33850 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit',
33851`iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper',
33852`iswxdigit', `towlower' and `towupper' are handled as built-in functions
33853except in strict ISO C90 mode (`-ansi' or `-std=c90').
33854
33855 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan',
33856`calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod',
33857`fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl',
33858`isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace',
33859`isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10',
33860`log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow',
33861`printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf',
33862`sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy',
33863`strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk',
33864`strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and
33865`vsprintf' are all recognized as built-in functions unless
33866`-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified
33867for an individual function).  All of these functions have corresponding
33868versions prefixed with `__builtin_'.
33869
33870 GCC provides built-in versions of the ISO C99 floating-point comparison
33871macros that avoid raising exceptions for unordered operands.  They have
33872the same names as the standard macros ( `isgreater', `isgreaterequal',
33873`isless', `islessequal', `islessgreater', and `isunordered') , with
33874`__builtin_' prefixed.  We intend for a library implementor to be able
33875to simply `#define' each standard macro to its built-in equivalent.  In
33876the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign'
33877and `isnormal' built-ins used with `__builtin_' prefixed.  The `isinf'
33878and `isnan' built-in functions appear both with and without the
33879`__builtin_' prefix.
33880
33881 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
33882     You can use the built-in function `__builtin_types_compatible_p' to
33883     determine whether two types are the same.
33884
33885     This built-in function returns 1 if the unqualified versions of the
33886     types TYPE1 and TYPE2 (which are types, not expressions) are
33887     compatible, 0 otherwise.  The result of this built-in function can
33888     be used in integer constant expressions.
33889
33890     This built-in function ignores top level qualifiers (e.g., `const',
33891     `volatile').  For example, `int' is equivalent to `const int'.
33892
33893     The type `int[]' and `int[5]' are compatible.  On the other hand,
33894     `int' and `char *' are not compatible, even if the size of their
33895     types, on the particular architecture are the same.  Also, the
33896     amount of pointer indirection is taken into account when
33897     determining similarity.  Consequently, `short *' is not similar to
33898     `short **'.  Furthermore, two types that are typedefed are
33899     considered compatible if their underlying types are compatible.
33900
33901     An `enum' type is not considered to be compatible with another
33902     `enum' type even if both are compatible with the same integer
33903     type; this is what the C standard specifies.  For example, `enum
33904     {foo, bar}' is not similar to `enum {hot, dog}'.
33905
33906     You typically use this function in code whose execution varies
33907     depending on the arguments' types.  For example:
33908
33909          #define foo(x)                                                  \
33910            ({                                                           \
33911              typeof (x) tmp = (x);                                       \
33912              if (__builtin_types_compatible_p (typeof (x), long double)) \
33913                tmp = foo_long_double (tmp);                              \
33914              else if (__builtin_types_compatible_p (typeof (x), double)) \
33915                tmp = foo_double (tmp);                                   \
33916              else if (__builtin_types_compatible_p (typeof (x), float))  \
33917                tmp = foo_float (tmp);                                    \
33918              else                                                        \
33919                abort ();                                                 \
33920              tmp;                                                        \
33921            })
33922
33923     _Note:_ This construct is only available for C.
33924
33925
33926 -- Built-in Function: TYPE __builtin_call_with_static_chain (CALL_EXP,
33927          POINTER_EXP)
33928     The CALL_EXP expression must be a function call, and the
33929     POINTER_EXP expression must be a pointer.  The POINTER_EXP is
33930     passed to the function call in the target's static chain location.
33931     The result of builtin is the result of the function call.
33932
33933     _Note:_ This builtin is only available for C.  This builtin can be
33934     used to call Go closures from C.
33935
33936
33937 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
33938          EXP2)
33939     You can use the built-in function `__builtin_choose_expr' to
33940     evaluate code depending on the value of a constant expression.
33941     This built-in function returns EXP1 if CONST_EXP, which is an
33942     integer constant expression, is nonzero.  Otherwise it returns
33943     EXP2.
33944
33945     This built-in function is analogous to the `? :' operator in C,
33946     except that the expression returned has its type unaltered by
33947     promotion rules.  Also, the built-in function does not evaluate
33948     the expression that is not chosen.  For example, if CONST_EXP
33949     evaluates to true, EXP2 is not evaluated even if it has
33950     side-effects.
33951
33952     This built-in function can return an lvalue if the chosen argument
33953     is an lvalue.
33954
33955     If EXP1 is returned, the return type is the same as EXP1's type.
33956     Similarly, if EXP2 is returned, its return type is the same as
33957     EXP2.
33958
33959     Example:
33960
33961          #define foo(x)                                                    \
33962            __builtin_choose_expr (                                         \
33963              __builtin_types_compatible_p (typeof (x), double),            \
33964              foo_double (x),                                               \
33965              __builtin_choose_expr (                                       \
33966                __builtin_types_compatible_p (typeof (x), float),           \
33967                foo_float (x),                                              \
33968                /* The void expression results in a compile-time error  \
33969                   when assigning the result to something.  */          \
33970                (void)0))
33971
33972     _Note:_ This construct is only available for C.  Furthermore, the
33973     unused expression (EXP1 or EXP2 depending on the value of
33974     CONST_EXP) may still generate syntax errors.  This may change in
33975     future revisions.
33976
33977
33978 -- Built-in Function: TYPE __builtin_complex (REAL, IMAG)
33979     The built-in function `__builtin_complex' is provided for use in
33980     implementing the ISO C11 macros `CMPLXF', `CMPLX' and `CMPLXL'.
33981     REAL and IMAG must have the same type, a real binary
33982     floating-point type, and the result has the corresponding complex
33983     type with real and imaginary parts REAL and IMAG.  Unlike `REAL +
33984     I * IMAG', this works even when infinities, NaNs and negative
33985     zeros are involved.
33986
33987
33988 -- Built-in Function: int __builtin_constant_p (EXP)
33989     You can use the built-in function `__builtin_constant_p' to
33990     determine if a value is known to be constant at compile time and
33991     hence that GCC can perform constant-folding on expressions
33992     involving that value.  The argument of the function is the value
33993     to test.  The function returns the integer 1 if the argument is
33994     known to be a compile-time constant and 0 if it is not known to be
33995     a compile-time constant.  A return of 0 does not indicate that the
33996     value is _not_ a constant, but merely that GCC cannot prove it is
33997     a constant with the specified value of the `-O' option.
33998
33999     You typically use this function in an embedded application where
34000     memory is a critical resource.  If you have some complex
34001     calculation, you may want it to be folded if it involves
34002     constants, but need to call a function if it does not.  For
34003     example:
34004
34005          #define Scale_Value(X)      \
34006            (__builtin_constant_p (X) \
34007            ? ((X) * SCALE + OFFSET) : Scale (X))
34008
34009     You may use this built-in function in either a macro or an inline
34010     function.  However, if you use it in an inlined function and pass
34011     an argument of the function as the argument to the built-in, GCC
34012     never returns 1 when you call the inline function with a string
34013     constant or compound literal (*note Compound Literals::) and does
34014     not return 1 when you pass a constant numeric value to the inline
34015     function unless you specify the `-O' option.
34016
34017     You may also use `__builtin_constant_p' in initializers for static
34018     data.  For instance, you can write
34019
34020          static const int table[] = {
34021             __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
34022             /* ... */
34023          };
34024
34025     This is an acceptable initializer even if EXPRESSION is not a
34026     constant expression, including the case where
34027     `__builtin_constant_p' returns 1 because EXPRESSION can be folded
34028     to a constant but EXPRESSION contains operands that are not
34029     otherwise permitted in a static initializer (for example, `0 &&
34030     foo ()').  GCC must be more conservative about evaluating the
34031     built-in in this case, because it has no opportunity to perform
34032     optimization.
34033
34034 -- Built-in Function: long __builtin_expect (long EXP, long C)
34035     You may use `__builtin_expect' to provide the compiler with branch
34036     prediction information.  In general, you should prefer to use
34037     actual profile feedback for this (`-fprofile-arcs'), as
34038     programmers are notoriously bad at predicting how their programs
34039     actually perform.  However, there are applications in which this
34040     data is hard to collect.
34041
34042     The return value is the value of EXP, which should be an integral
34043     expression.  The semantics of the built-in are that it is expected
34044     that EXP == C.  For example:
34045
34046          if (__builtin_expect (x, 0))
34047            foo ();
34048
34049     indicates that we do not expect to call `foo', since we expect `x'
34050     to be zero.  Since you are limited to integral expressions for
34051     EXP, you should use constructions such as
34052
34053          if (__builtin_expect (ptr != NULL, 1))
34054            foo (*ptr);
34055
34056     when testing pointer or floating-point values.
34057
34058 -- Built-in Function: void __builtin_trap (void)
34059     This function causes the program to exit abnormally.  GCC
34060     implements this function by using a target-dependent mechanism
34061     (such as intentionally executing an illegal instruction) or by
34062     calling `abort'.  The mechanism used may vary from release to
34063     release so you should not rely on any particular implementation.
34064
34065 -- Built-in Function: void __builtin_unreachable (void)
34066     If control flow reaches the point of the `__builtin_unreachable',
34067     the program is undefined.  It is useful in situations where the
34068     compiler cannot deduce the unreachability of the code.
34069
34070     One such case is immediately following an `asm' statement that
34071     either never terminates, or one that transfers control elsewhere
34072     and never returns.  In this example, without the
34073     `__builtin_unreachable', GCC issues a warning that control reaches
34074     the end of a non-void function.  It also generates code to return
34075     after the `asm'.
34076
34077          int f (int c, int v)
34078          {
34079            if (c)
34080              {
34081                return v;
34082              }
34083            else
34084              {
34085                asm("jmp error_handler");
34086                __builtin_unreachable ();
34087              }
34088          }
34089
34090     Because the `asm' statement unconditionally transfers control out
34091     of the function, control never reaches the end of the function
34092     body.  The `__builtin_unreachable' is in fact unreachable and
34093     communicates this fact to the compiler.
34094
34095     Another use for `__builtin_unreachable' is following a call a
34096     function that never returns but that is not declared
34097     `__attribute__((noreturn))', as in this example:
34098
34099          void function_that_never_returns (void);
34100
34101          int g (int c)
34102          {
34103            if (c)
34104              {
34105                return 1;
34106              }
34107            else
34108              {
34109                function_that_never_returns ();
34110                __builtin_unreachable ();
34111              }
34112          }
34113
34114
34115 -- Built-in Function: void *__builtin_assume_aligned (const void *EXP,
34116          size_t ALIGN, ...)
34117     This function returns its first argument, and allows the compiler
34118     to assume that the returned pointer is at least ALIGN bytes
34119     aligned.  This built-in can have either two or three arguments, if
34120     it has three, the third argument should have integer type, and if
34121     it is nonzero means misalignment offset.  For example:
34122
34123          void *x = __builtin_assume_aligned (arg, 16);
34124
34125     means that the compiler can assume `x', set to `arg', is at least
34126     16-byte aligned, while:
34127
34128          void *x = __builtin_assume_aligned (arg, 32, 8);
34129
34130     means that the compiler can assume for `x', set to `arg', that
34131     `(char *) x - 8' is 32-byte aligned.
34132
34133 -- Built-in Function: int __builtin_LINE ()
34134     This function is the equivalent to the preprocessor `__LINE__'
34135     macro and returns the line number of the invocation of the
34136     built-in.  In a C++ default argument for a function F, it gets the
34137     line number of the call to F.
34138
34139 -- Built-in Function: const char * __builtin_FUNCTION ()
34140     This function is the equivalent to the preprocessor `__FUNCTION__'
34141     macro and returns the function name the invocation of the built-in
34142     is in.
34143
34144 -- Built-in Function: const char * __builtin_FILE ()
34145     This function is the equivalent to the preprocessor `__FILE__'
34146     macro and returns the file name the invocation of the built-in is
34147     in.  In a C++ default argument for a function F, it gets the file
34148     name of the call to F.
34149
34150 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char
34151          *END)
34152     This function is used to flush the processor's instruction cache
34153     for the region of memory between BEGIN inclusive and END
34154     exclusive.  Some targets require that the instruction cache be
34155     flushed, after modifying memory containing code, in order to obtain
34156     deterministic behavior.
34157
34158     If the target does not require instruction cache flushes,
34159     `__builtin___clear_cache' has no effect.  Otherwise either
34160     instructions are emitted in-line to clear the instruction cache or
34161     a call to the `__clear_cache' function in libgcc is made.
34162
34163 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
34164     This function is used to minimize cache-miss latency by moving
34165     data into a cache before it is accessed.  You can insert calls to
34166     `__builtin_prefetch' into code for which you know addresses of
34167     data in memory that is likely to be accessed soon.  If the target
34168     supports them, data prefetch instructions are generated.  If the
34169     prefetch is done early enough before the access then the data will
34170     be in the cache by the time it is accessed.
34171
34172     The value of ADDR is the address of the memory to prefetch.  There
34173     are two optional arguments, RW and LOCALITY.  The value of RW is a
34174     compile-time constant one or zero; one means that the prefetch is
34175     preparing for a write to the memory address and zero, the default,
34176     means that the prefetch is preparing for a read.  The value
34177     LOCALITY must be a compile-time constant integer between zero and
34178     three.  A value of zero means that the data has no temporal
34179     locality, so it need not be left in the cache after the access.  A
34180     value of three means that the data has a high degree of temporal
34181     locality and should be left in all levels of cache possible.
34182     Values of one and two mean, respectively, a low or moderate degree
34183     of temporal locality.  The default is three.
34184
34185          for (i = 0; i < n; i++)
34186            {
34187              a[i] = a[i] + b[i];
34188              __builtin_prefetch (&a[i+j], 1, 1);
34189              __builtin_prefetch (&b[i+j], 0, 1);
34190              /* ... */
34191            }
34192
34193     Data prefetch does not generate faults if ADDR is invalid, but the
34194     address expression itself must be valid.  For example, a prefetch
34195     of `p->next' does not fault if `p->next' is not a valid address,
34196     but evaluation faults if `p' is not a valid address.
34197
34198     If the target does not support data prefetch, the address
34199     expression is evaluated if it includes side effects but no other
34200     code is generated and GCC does not issue a warning.
34201
34202 -- Built-in Function: double __builtin_huge_val (void)
34203     Returns a positive infinity, if supported by the floating-point
34204     format, else `DBL_MAX'.  This function is suitable for
34205     implementing the ISO C macro `HUGE_VAL'.
34206
34207 -- Built-in Function: float __builtin_huge_valf (void)
34208     Similar to `__builtin_huge_val', except the return type is `float'.
34209
34210 -- Built-in Function: long double __builtin_huge_vall (void)
34211     Similar to `__builtin_huge_val', except the return type is `long
34212     double'.
34213
34214 -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
34215          int, ...)
34216     This built-in implements the C99 fpclassify functionality.  The
34217     first five int arguments should be the target library's notion of
34218     the possible FP classes and are used for return values.  They must
34219     be constant values and they must appear in this order: `FP_NAN',
34220     `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'.  The
34221     ellipsis is for exactly one floating-point value to classify.  GCC
34222     treats the last argument as type-generic, which means it does not
34223     do default promotion from float to double.
34224
34225 -- Built-in Function: double __builtin_inf (void)
34226     Similar to `__builtin_huge_val', except a warning is generated if
34227     the target floating-point format does not support infinities.
34228
34229 -- Built-in Function: _Decimal32 __builtin_infd32 (void)
34230     Similar to `__builtin_inf', except the return type is `_Decimal32'.
34231
34232 -- Built-in Function: _Decimal64 __builtin_infd64 (void)
34233     Similar to `__builtin_inf', except the return type is `_Decimal64'.
34234
34235 -- Built-in Function: _Decimal128 __builtin_infd128 (void)
34236     Similar to `__builtin_inf', except the return type is
34237     `_Decimal128'.
34238
34239 -- Built-in Function: float __builtin_inff (void)
34240     Similar to `__builtin_inf', except the return type is `float'.
34241     This function is suitable for implementing the ISO C99 macro
34242     `INFINITY'.
34243
34244 -- Built-in Function: long double __builtin_infl (void)
34245     Similar to `__builtin_inf', except the return type is `long
34246     double'.
34247
34248 -- Built-in Function: int __builtin_isinf_sign (...)
34249     Similar to `isinf', except the return value is -1 for an argument
34250     of `-Inf' and 1 for an argument of `+Inf'.  Note while the
34251     parameter list is an ellipsis, this function only accepts exactly
34252     one floating-point argument.  GCC treats this parameter as
34253     type-generic, which means it does not do default promotion from
34254     float to double.
34255
34256 -- Built-in Function: double __builtin_nan (const char *str)
34257     This is an implementation of the ISO C99 function `nan'.
34258
34259     Since ISO C99 defines this function in terms of `strtod', which we
34260     do not implement, a description of the parsing is in order.  The
34261     string is parsed as by `strtol'; that is, the base is recognized by
34262     leading `0' or `0x' prefixes.  The number parsed is placed in the
34263     significand such that the least significant bit of the number is
34264     at the least significant bit of the significand.  The number is
34265     truncated to fit the significand field provided.  The significand
34266     is forced to be a quiet NaN.
34267
34268     This function, if given a string literal all of which would have
34269     been consumed by `strtol', is evaluated early enough that it is
34270     considered a compile-time constant.
34271
34272 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
34273     Similar to `__builtin_nan', except the return type is `_Decimal32'.
34274
34275 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
34276     Similar to `__builtin_nan', except the return type is `_Decimal64'.
34277
34278 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
34279     Similar to `__builtin_nan', except the return type is
34280     `_Decimal128'.
34281
34282 -- Built-in Function: float __builtin_nanf (const char *str)
34283     Similar to `__builtin_nan', except the return type is `float'.
34284
34285 -- Built-in Function: long double __builtin_nanl (const char *str)
34286     Similar to `__builtin_nan', except the return type is `long
34287     double'.
34288
34289 -- Built-in Function: double __builtin_nans (const char *str)
34290     Similar to `__builtin_nan', except the significand is forced to be
34291     a signaling NaN.  The `nans' function is proposed by WG14 N965.
34292
34293 -- Built-in Function: float __builtin_nansf (const char *str)
34294     Similar to `__builtin_nans', except the return type is `float'.
34295
34296 -- Built-in Function: long double __builtin_nansl (const char *str)
34297     Similar to `__builtin_nans', except the return type is `long
34298     double'.
34299
34300 -- Built-in Function: int __builtin_ffs (int x)
34301     Returns one plus the index of the least significant 1-bit of X, or
34302     if X is zero, returns zero.
34303
34304 -- Built-in Function: int __builtin_clz (unsigned int x)
34305     Returns the number of leading 0-bits in X, starting at the most
34306     significant bit position.  If X is 0, the result is undefined.
34307
34308 -- Built-in Function: int __builtin_ctz (unsigned int x)
34309     Returns the number of trailing 0-bits in X, starting at the least
34310     significant bit position.  If X is 0, the result is undefined.
34311
34312 -- Built-in Function: int __builtin_clrsb (int x)
34313     Returns the number of leading redundant sign bits in X, i.e. the
34314     number of bits following the most significant bit that are
34315     identical to it.  There are no special cases for 0 or other values.
34316
34317 -- Built-in Function: int __builtin_popcount (unsigned int x)
34318     Returns the number of 1-bits in X.
34319
34320 -- Built-in Function: int __builtin_parity (unsigned int x)
34321     Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
34322
34323 -- Built-in Function: int __builtin_ffsl (long)
34324     Similar to `__builtin_ffs', except the argument type is `long'.
34325
34326 -- Built-in Function: int __builtin_clzl (unsigned long)
34327     Similar to `__builtin_clz', except the argument type is `unsigned
34328     long'.
34329
34330 -- Built-in Function: int __builtin_ctzl (unsigned long)
34331     Similar to `__builtin_ctz', except the argument type is `unsigned
34332     long'.
34333
34334 -- Built-in Function: int __builtin_clrsbl (long)
34335     Similar to `__builtin_clrsb', except the argument type is `long'.
34336
34337 -- Built-in Function: int __builtin_popcountl (unsigned long)
34338     Similar to `__builtin_popcount', except the argument type is
34339     `unsigned long'.
34340
34341 -- Built-in Function: int __builtin_parityl (unsigned long)
34342     Similar to `__builtin_parity', except the argument type is
34343     `unsigned long'.
34344
34345 -- Built-in Function: int __builtin_ffsll (long long)
34346     Similar to `__builtin_ffs', except the argument type is `long
34347     long'.
34348
34349 -- Built-in Function: int __builtin_clzll (unsigned long long)
34350     Similar to `__builtin_clz', except the argument type is `unsigned
34351     long long'.
34352
34353 -- Built-in Function: int __builtin_ctzll (unsigned long long)
34354     Similar to `__builtin_ctz', except the argument type is `unsigned
34355     long long'.
34356
34357 -- Built-in Function: int __builtin_clrsbll (long long)
34358     Similar to `__builtin_clrsb', except the argument type is `long
34359     long'.
34360
34361 -- Built-in Function: int __builtin_popcountll (unsigned long long)
34362     Similar to `__builtin_popcount', except the argument type is
34363     `unsigned long long'.
34364
34365 -- Built-in Function: int __builtin_parityll (unsigned long long)
34366     Similar to `__builtin_parity', except the argument type is
34367     `unsigned long long'.
34368
34369 -- Built-in Function: double __builtin_powi (double, int)
34370     Returns the first argument raised to the power of the second.
34371     Unlike the `pow' function no guarantees about precision and
34372     rounding are made.
34373
34374 -- Built-in Function: float __builtin_powif (float, int)
34375     Similar to `__builtin_powi', except the argument and return types
34376     are `float'.
34377
34378 -- Built-in Function: long double __builtin_powil (long double, int)
34379     Similar to `__builtin_powi', except the argument and return types
34380     are `long double'.
34381
34382 -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x)
34383     Returns X with the order of the bytes reversed; for example,
34384     `0xaabb' becomes `0xbbaa'.  Byte here always means exactly 8 bits.
34385
34386 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x)
34387     Similar to `__builtin_bswap16', except the argument and return
34388     types are 32 bit.
34389
34390 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x)
34391     Similar to `__builtin_bswap32', except the argument and return
34392     types are 64 bit.
34393
34394
34395File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
34396
343976.58 Built-in Functions Specific to Particular Target Machines
34398==============================================================
34399
34400On some target machines, GCC supports many built-in functions specific
34401to those machines.  Generally these generate calls to specific machine
34402instructions, but allow the compiler to schedule those calls.
34403
34404* Menu:
34405
34406* AArch64 Built-in Functions::
34407* Alpha Built-in Functions::
34408* Altera Nios II Built-in Functions::
34409* ARC Built-in Functions::
34410* ARC SIMD Built-in Functions::
34411* ARM iWMMXt Built-in Functions::
34412* ARM C Language Extensions (ACLE)::
34413* ARM Floating Point Status and Control Intrinsics::
34414* AVR Built-in Functions::
34415* Blackfin Built-in Functions::
34416* FR-V Built-in Functions::
34417* MIPS DSP Built-in Functions::
34418* MIPS Paired-Single Support::
34419* MIPS Loongson Built-in Functions::
34420* Other MIPS Built-in Functions::
34421* MSP430 Built-in Functions::
34422* NDS32 Built-in Functions::
34423* picoChip Built-in Functions::
34424* PowerPC Built-in Functions::
34425* PowerPC AltiVec/VSX Built-in Functions::
34426* PowerPC Hardware Transactional Memory Built-in Functions::
34427* RX Built-in Functions::
34428* S/390 System z Built-in Functions::
34429* SH Built-in Functions::
34430* SPARC VIS Built-in Functions::
34431* SPU Built-in Functions::
34432* TI C6X Built-in Functions::
34433* TILE-Gx Built-in Functions::
34434* TILEPro Built-in Functions::
34435* x86 Built-in Functions::
34436* x86 transactional memory intrinsics::
34437
34438
34439File: gcc.info,  Node: AArch64 Built-in Functions,  Next: Alpha Built-in Functions,  Up: Target Builtins
34440
344416.58.1 AArch64 Built-in Functions
34442---------------------------------
34443
34444These built-in functions are available for the AArch64 family of
34445processors.
34446     unsigned int __builtin_aarch64_get_fpcr ()
34447     void __builtin_aarch64_set_fpcr (unsigned int)
34448     unsigned int __builtin_aarch64_get_fpsr ()
34449     void __builtin_aarch64_set_fpsr (unsigned int)
34450
34451
34452File: gcc.info,  Node: Alpha Built-in Functions,  Next: Altera Nios II Built-in Functions,  Prev: AArch64 Built-in Functions,  Up: Target Builtins
34453
344546.58.2 Alpha Built-in Functions
34455-------------------------------
34456
34457These built-in functions are available for the Alpha family of
34458processors, depending on the command-line switches used.
34459
34460 The following built-in functions are always available.  They all
34461generate the machine instruction that is part of the name.
34462
34463     long __builtin_alpha_implver (void)
34464     long __builtin_alpha_rpcc (void)
34465     long __builtin_alpha_amask (long)
34466     long __builtin_alpha_cmpbge (long, long)
34467     long __builtin_alpha_extbl (long, long)
34468     long __builtin_alpha_extwl (long, long)
34469     long __builtin_alpha_extll (long, long)
34470     long __builtin_alpha_extql (long, long)
34471     long __builtin_alpha_extwh (long, long)
34472     long __builtin_alpha_extlh (long, long)
34473     long __builtin_alpha_extqh (long, long)
34474     long __builtin_alpha_insbl (long, long)
34475     long __builtin_alpha_inswl (long, long)
34476     long __builtin_alpha_insll (long, long)
34477     long __builtin_alpha_insql (long, long)
34478     long __builtin_alpha_inswh (long, long)
34479     long __builtin_alpha_inslh (long, long)
34480     long __builtin_alpha_insqh (long, long)
34481     long __builtin_alpha_mskbl (long, long)
34482     long __builtin_alpha_mskwl (long, long)
34483     long __builtin_alpha_mskll (long, long)
34484     long __builtin_alpha_mskql (long, long)
34485     long __builtin_alpha_mskwh (long, long)
34486     long __builtin_alpha_msklh (long, long)
34487     long __builtin_alpha_mskqh (long, long)
34488     long __builtin_alpha_umulh (long, long)
34489     long __builtin_alpha_zap (long, long)
34490     long __builtin_alpha_zapnot (long, long)
34491
34492 The following built-in functions are always with `-mmax' or
34493`-mcpu=CPU' where CPU is `pca56' or later.  They all generate the
34494machine instruction that is part of the name.
34495
34496     long __builtin_alpha_pklb (long)
34497     long __builtin_alpha_pkwb (long)
34498     long __builtin_alpha_unpkbl (long)
34499     long __builtin_alpha_unpkbw (long)
34500     long __builtin_alpha_minub8 (long, long)
34501     long __builtin_alpha_minsb8 (long, long)
34502     long __builtin_alpha_minuw4 (long, long)
34503     long __builtin_alpha_minsw4 (long, long)
34504     long __builtin_alpha_maxub8 (long, long)
34505     long __builtin_alpha_maxsb8 (long, long)
34506     long __builtin_alpha_maxuw4 (long, long)
34507     long __builtin_alpha_maxsw4 (long, long)
34508     long __builtin_alpha_perr (long, long)
34509
34510 The following built-in functions are always with `-mcix' or
34511`-mcpu=CPU' where CPU is `ev67' or later.  They all generate the
34512machine instruction that is part of the name.
34513
34514     long __builtin_alpha_cttz (long)
34515     long __builtin_alpha_ctlz (long)
34516     long __builtin_alpha_ctpop (long)
34517
34518 The following built-in functions are available on systems that use the
34519OSF/1 PALcode.  Normally they invoke the `rduniq' and `wruniq' PAL
34520calls, but when invoked with `-mtls-kernel', they invoke `rdval' and
34521`wrval'.
34522
34523     void *__builtin_thread_pointer (void)
34524     void __builtin_set_thread_pointer (void *)
34525
34526
34527File: gcc.info,  Node: Altera Nios II Built-in Functions,  Next: ARC Built-in Functions,  Prev: Alpha Built-in Functions,  Up: Target Builtins
34528
345296.58.3 Altera Nios II Built-in Functions
34530----------------------------------------
34531
34532These built-in functions are available for the Altera Nios II family of
34533processors.
34534
34535 The following built-in functions are always available.  They all
34536generate the machine instruction that is part of the name.
34537
34538     int __builtin_ldbio (volatile const void *)
34539     int __builtin_ldbuio (volatile const void *)
34540     int __builtin_ldhio (volatile const void *)
34541     int __builtin_ldhuio (volatile const void *)
34542     int __builtin_ldwio (volatile const void *)
34543     void __builtin_stbio (volatile void *, int)
34544     void __builtin_sthio (volatile void *, int)
34545     void __builtin_stwio (volatile void *, int)
34546     void __builtin_sync (void)
34547     int __builtin_rdctl (int)
34548     void __builtin_wrctl (int, int)
34549
34550 The following built-in functions are always available.  They all
34551generate a Nios II Custom Instruction. The name of the function
34552represents the types that the function takes and returns. The letter
34553before the `n' is the return type or void if absent. The `n' represents
34554the first parameter to all the custom instructions, the custom
34555instruction number.  The two letters after the `n' represent the up to
34556two parameters to the function.
34557
34558 The letters represent the following data types:
34559`<no letter>'
34560     `void' for return type and no parameter for parameter types.
34561
34562`i'
34563     `int' for return type and parameter type
34564
34565`f'
34566     `float' for return type and parameter type
34567
34568`p'
34569     `void *' for return type and parameter type
34570
34571
34572 And the function names are:
34573     void __builtin_custom_n (void)
34574     void __builtin_custom_ni (int)
34575     void __builtin_custom_nf (float)
34576     void __builtin_custom_np (void *)
34577     void __builtin_custom_nii (int, int)
34578     void __builtin_custom_nif (int, float)
34579     void __builtin_custom_nip (int, void *)
34580     void __builtin_custom_nfi (float, int)
34581     void __builtin_custom_nff (float, float)
34582     void __builtin_custom_nfp (float, void *)
34583     void __builtin_custom_npi (void *, int)
34584     void __builtin_custom_npf (void *, float)
34585     void __builtin_custom_npp (void *, void *)
34586     int __builtin_custom_in (void)
34587     int __builtin_custom_ini (int)
34588     int __builtin_custom_inf (float)
34589     int __builtin_custom_inp (void *)
34590     int __builtin_custom_inii (int, int)
34591     int __builtin_custom_inif (int, float)
34592     int __builtin_custom_inip (int, void *)
34593     int __builtin_custom_infi (float, int)
34594     int __builtin_custom_inff (float, float)
34595     int __builtin_custom_infp (float, void *)
34596     int __builtin_custom_inpi (void *, int)
34597     int __builtin_custom_inpf (void *, float)
34598     int __builtin_custom_inpp (void *, void *)
34599     float __builtin_custom_fn (void)
34600     float __builtin_custom_fni (int)
34601     float __builtin_custom_fnf (float)
34602     float __builtin_custom_fnp (void *)
34603     float __builtin_custom_fnii (int, int)
34604     float __builtin_custom_fnif (int, float)
34605     float __builtin_custom_fnip (int, void *)
34606     float __builtin_custom_fnfi (float, int)
34607     float __builtin_custom_fnff (float, float)
34608     float __builtin_custom_fnfp (float, void *)
34609     float __builtin_custom_fnpi (void *, int)
34610     float __builtin_custom_fnpf (void *, float)
34611     float __builtin_custom_fnpp (void *, void *)
34612     void * __builtin_custom_pn (void)
34613     void * __builtin_custom_pni (int)
34614     void * __builtin_custom_pnf (float)
34615     void * __builtin_custom_pnp (void *)
34616     void * __builtin_custom_pnii (int, int)
34617     void * __builtin_custom_pnif (int, float)
34618     void * __builtin_custom_pnip (int, void *)
34619     void * __builtin_custom_pnfi (float, int)
34620     void * __builtin_custom_pnff (float, float)
34621     void * __builtin_custom_pnfp (float, void *)
34622     void * __builtin_custom_pnpi (void *, int)
34623     void * __builtin_custom_pnpf (void *, float)
34624     void * __builtin_custom_pnpp (void *, void *)
34625
34626
34627File: gcc.info,  Node: ARC Built-in Functions,  Next: ARC SIMD Built-in Functions,  Prev: Altera Nios II Built-in Functions,  Up: Target Builtins
34628
346296.58.4 ARC Built-in Functions
34630-----------------------------
34631
34632The following built-in functions are provided for ARC targets.  The
34633built-ins generate the corresponding assembly instructions.  In the
34634examples given below, the generated code often requires an operand or
34635result to be in a register.  Where necessary further code will be
34636generated to ensure this is true, but for brevity this is not described
34637in each case.
34638
34639 _Note:_ Using a built-in to generate an instruction not supported by a
34640target may cause problems. At present the compiler is not guaranteed to
34641detect such misuse, and as a result an internal compiler error may be
34642generated.
34643
34644 -- Built-in Function: int __builtin_arc_aligned (void *VAL, int
34645          ALIGNVAL)
34646     Return 1 if VAL is known to have the byte alignment given by
34647     ALIGNVAL, otherwise return 0.  Note that this is different from
34648          __alignof__(*(char *)VAL) >= alignval
34649     because __alignof__ sees only the type of the dereference, whereas
34650     __builtin_arc_align uses alignment information from the pointer as
34651     well as from the pointed-to type.  The information available will
34652     depend on optimization level.
34653
34654 -- Built-in Function: void __builtin_arc_brk (void)
34655     Generates
34656          brk
34657
34658 -- Built-in Function: unsigned int __builtin_arc_core_read (unsigned
34659          int REGNO)
34660     The operand is the number of a register to be read.  Generates:
34661          mov  DEST, rREGNO
34662     where the value in DEST will be the result returned from the
34663     built-in.
34664
34665 -- Built-in Function: void __builtin_arc_core_write (unsigned int
34666          REGNO, unsigned int VAL)
34667     The first operand is the number of a register to be written, the
34668     second operand is a compile time constant to write into that
34669     register.  Generates:
34670          mov  rREGNO, VAL
34671
34672 -- Built-in Function: int __builtin_arc_divaw (int A, int B)
34673     Only available if either `-mcpu=ARC700' or `-meA' is set.
34674     Generates:
34675          divaw  DEST, A, B
34676     where the value in DEST will be the result returned from the
34677     built-in.
34678
34679 -- Built-in Function: void __builtin_arc_flag (unsigned int A)
34680     Generates
34681          flag  A
34682
34683 -- Built-in Function: unsigned int __builtin_arc_lr (unsigned int AUXR)
34684     The operand, AUXV, is the address of an auxiliary register and
34685     must be a compile time constant.  Generates:
34686          lr  DEST, [AUXR]
34687     Where the value in DEST will be the result returned from the
34688     built-in.
34689
34690 -- Built-in Function: void __builtin_arc_mul64 (int A, int B)
34691     Only available with `-mmul64'.  Generates:
34692          mul64  A, B
34693
34694 -- Built-in Function: void __builtin_arc_mulu64 (unsigned int A,
34695          unsigned int B)
34696     Only available with `-mmul64'.  Generates:
34697          mulu64  A, B
34698
34699 -- Built-in Function: void __builtin_arc_nop (void)
34700     Generates:
34701          nop
34702
34703 -- Built-in Function: int __builtin_arc_norm (int SRC)
34704     Only valid if the `norm' instruction is available through the
34705     `-mnorm' option or by default with `-mcpu=ARC700'.  Generates:
34706          norm  DEST, SRC
34707     Where the value in DEST will be the result returned from the
34708     built-in.
34709
34710 -- Built-in Function: short int __builtin_arc_normw (short int SRC)
34711     Only valid if the `normw' instruction is available through the
34712     `-mnorm' option or by default with `-mcpu=ARC700'.  Generates:
34713          normw  DEST, SRC
34714     Where the value in DEST will be the result returned from the
34715     built-in.
34716
34717 -- Built-in Function: void __builtin_arc_rtie (void)
34718     Generates:
34719          rtie
34720
34721 -- Built-in Function: void __builtin_arc_sleep (int A
34722     Generates:
34723          sleep  A
34724
34725 -- Built-in Function: void __builtin_arc_sr (unsigned int AUXR,
34726          unsigned int VAL)
34727     The first argument, AUXV, is the address of an auxiliary register,
34728     the second argument, VAL, is a compile time constant to be written
34729     to the register.  Generates:
34730          sr  AUXR, [VAL]
34731
34732 -- Built-in Function: int __builtin_arc_swap (int SRC)
34733     Only valid with `-mswap'.  Generates:
34734          swap  DEST, SRC
34735     Where the value in DEST will be the result returned from the
34736     built-in.
34737
34738 -- Built-in Function: void __builtin_arc_swi (void)
34739     Generates:
34740          swi
34741
34742 -- Built-in Function: void __builtin_arc_sync (void)
34743     Only available with `-mcpu=ARC700'.  Generates:
34744          sync
34745
34746 -- Built-in Function: void __builtin_arc_trap_s (unsigned int C)
34747     Only available with `-mcpu=ARC700'.  Generates:
34748          trap_s  C
34749
34750 -- Built-in Function: void __builtin_arc_unimp_s (void)
34751     Only available with `-mcpu=ARC700'.  Generates:
34752          unimp_s
34753
34754 The instructions generated by the following builtins are not
34755considered as candidates for scheduling.  They are not moved around by
34756the compiler during scheduling, and thus can be expected to appear
34757where they are put in the C code:
34758     __builtin_arc_brk()
34759     __builtin_arc_core_read()
34760     __builtin_arc_core_write()
34761     __builtin_arc_flag()
34762     __builtin_arc_lr()
34763     __builtin_arc_sleep()
34764     __builtin_arc_sr()
34765     __builtin_arc_swi()
34766
34767
34768File: gcc.info,  Node: ARC SIMD Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Prev: ARC Built-in Functions,  Up: Target Builtins
34769
347706.58.5 ARC SIMD Built-in Functions
34771----------------------------------
34772
34773SIMD builtins provided by the compiler can be used to generate the
34774vector instructions.  This section describes the available builtins and
34775their usage in programs.  With the `-msimd' option, the compiler
34776provides 128-bit vector types, which can be specified using the
34777`vector_size' attribute.  The header file `arc-simd.h' can be included
34778to use the following predefined types:
34779     typedef int __v4si   __attribute__((vector_size(16)));
34780     typedef short __v8hi __attribute__((vector_size(16)));
34781
34782 These types can be used to define 128-bit variables.  The built-in
34783functions listed in the following section can be used on these
34784variables to generate the vector operations.
34785
34786 For all builtins, `__builtin_arc_SOMEINSN', the header file
34787`arc-simd.h' also provides equivalent macros called `_SOMEINSN' that
34788can be used for programming ease and improved readability.  The
34789following macros for DMA control are also provided:
34790     #define _setup_dma_in_channel_reg _vdiwr
34791     #define _setup_dma_out_channel_reg _vdowr
34792
34793 The following is a complete list of all the SIMD built-ins provided
34794for ARC, grouped by calling signature.
34795
34796 The following take two `__v8hi' arguments and return a `__v8hi' result:
34797     __v8hi __builtin_arc_vaddaw (__v8hi, __v8hi)
34798     __v8hi __builtin_arc_vaddw (__v8hi, __v8hi)
34799     __v8hi __builtin_arc_vand (__v8hi, __v8hi)
34800     __v8hi __builtin_arc_vandaw (__v8hi, __v8hi)
34801     __v8hi __builtin_arc_vavb (__v8hi, __v8hi)
34802     __v8hi __builtin_arc_vavrb (__v8hi, __v8hi)
34803     __v8hi __builtin_arc_vbic (__v8hi, __v8hi)
34804     __v8hi __builtin_arc_vbicaw (__v8hi, __v8hi)
34805     __v8hi __builtin_arc_vdifaw (__v8hi, __v8hi)
34806     __v8hi __builtin_arc_vdifw (__v8hi, __v8hi)
34807     __v8hi __builtin_arc_veqw (__v8hi, __v8hi)
34808     __v8hi __builtin_arc_vh264f (__v8hi, __v8hi)
34809     __v8hi __builtin_arc_vh264ft (__v8hi, __v8hi)
34810     __v8hi __builtin_arc_vh264fw (__v8hi, __v8hi)
34811     __v8hi __builtin_arc_vlew (__v8hi, __v8hi)
34812     __v8hi __builtin_arc_vltw (__v8hi, __v8hi)
34813     __v8hi __builtin_arc_vmaxaw (__v8hi, __v8hi)
34814     __v8hi __builtin_arc_vmaxw (__v8hi, __v8hi)
34815     __v8hi __builtin_arc_vminaw (__v8hi, __v8hi)
34816     __v8hi __builtin_arc_vminw (__v8hi, __v8hi)
34817     __v8hi __builtin_arc_vmr1aw (__v8hi, __v8hi)
34818     __v8hi __builtin_arc_vmr1w (__v8hi, __v8hi)
34819     __v8hi __builtin_arc_vmr2aw (__v8hi, __v8hi)
34820     __v8hi __builtin_arc_vmr2w (__v8hi, __v8hi)
34821     __v8hi __builtin_arc_vmr3aw (__v8hi, __v8hi)
34822     __v8hi __builtin_arc_vmr3w (__v8hi, __v8hi)
34823     __v8hi __builtin_arc_vmr4aw (__v8hi, __v8hi)
34824     __v8hi __builtin_arc_vmr4w (__v8hi, __v8hi)
34825     __v8hi __builtin_arc_vmr5aw (__v8hi, __v8hi)
34826     __v8hi __builtin_arc_vmr5w (__v8hi, __v8hi)
34827     __v8hi __builtin_arc_vmr6aw (__v8hi, __v8hi)
34828     __v8hi __builtin_arc_vmr6w (__v8hi, __v8hi)
34829     __v8hi __builtin_arc_vmr7aw (__v8hi, __v8hi)
34830     __v8hi __builtin_arc_vmr7w (__v8hi, __v8hi)
34831     __v8hi __builtin_arc_vmrb (__v8hi, __v8hi)
34832     __v8hi __builtin_arc_vmulaw (__v8hi, __v8hi)
34833     __v8hi __builtin_arc_vmulfaw (__v8hi, __v8hi)
34834     __v8hi __builtin_arc_vmulfw (__v8hi, __v8hi)
34835     __v8hi __builtin_arc_vmulw (__v8hi, __v8hi)
34836     __v8hi __builtin_arc_vnew (__v8hi, __v8hi)
34837     __v8hi __builtin_arc_vor (__v8hi, __v8hi)
34838     __v8hi __builtin_arc_vsubaw (__v8hi, __v8hi)
34839     __v8hi __builtin_arc_vsubw (__v8hi, __v8hi)
34840     __v8hi __builtin_arc_vsummw (__v8hi, __v8hi)
34841     __v8hi __builtin_arc_vvc1f (__v8hi, __v8hi)
34842     __v8hi __builtin_arc_vvc1ft (__v8hi, __v8hi)
34843     __v8hi __builtin_arc_vxor (__v8hi, __v8hi)
34844     __v8hi __builtin_arc_vxoraw (__v8hi, __v8hi)
34845
34846 The following take one `__v8hi' and one `int' argument and return a
34847`__v8hi' result:
34848
34849     __v8hi __builtin_arc_vbaddw (__v8hi, int)
34850     __v8hi __builtin_arc_vbmaxw (__v8hi, int)
34851     __v8hi __builtin_arc_vbminw (__v8hi, int)
34852     __v8hi __builtin_arc_vbmulaw (__v8hi, int)
34853     __v8hi __builtin_arc_vbmulfw (__v8hi, int)
34854     __v8hi __builtin_arc_vbmulw (__v8hi, int)
34855     __v8hi __builtin_arc_vbrsubw (__v8hi, int)
34856     __v8hi __builtin_arc_vbsubw (__v8hi, int)
34857
34858 The following take one `__v8hi' argument and one `int' argument which
34859must be a 3-bit compile time constant indicating a register number
34860I0-I7.  They return a `__v8hi' result.
34861     __v8hi __builtin_arc_vasrw (__v8hi, const int)
34862     __v8hi __builtin_arc_vsr8 (__v8hi, const int)
34863     __v8hi __builtin_arc_vsr8aw (__v8hi, const int)
34864
34865 The following take one `__v8hi' argument and one `int' argument which
34866must be a 6-bit compile time constant.  They return a `__v8hi' result.
34867     __v8hi __builtin_arc_vasrpwbi (__v8hi, const int)
34868     __v8hi __builtin_arc_vasrrpwbi (__v8hi, const int)
34869     __v8hi __builtin_arc_vasrrwi (__v8hi, const int)
34870     __v8hi __builtin_arc_vasrsrwi (__v8hi, const int)
34871     __v8hi __builtin_arc_vasrwi (__v8hi, const int)
34872     __v8hi __builtin_arc_vsr8awi (__v8hi, const int)
34873     __v8hi __builtin_arc_vsr8i (__v8hi, const int)
34874
34875 The following take one `__v8hi' argument and one `int' argument which
34876must be a 8-bit compile time constant.  They return a `__v8hi' result.
34877     __v8hi __builtin_arc_vd6tapf (__v8hi, const int)
34878     __v8hi __builtin_arc_vmvaw (__v8hi, const int)
34879     __v8hi __builtin_arc_vmvw (__v8hi, const int)
34880     __v8hi __builtin_arc_vmvzw (__v8hi, const int)
34881
34882 The following take two `int' arguments, the second of which which must
34883be a 8-bit compile time constant.  They return a `__v8hi' result:
34884     __v8hi __builtin_arc_vmovaw (int, const int)
34885     __v8hi __builtin_arc_vmovw (int, const int)
34886     __v8hi __builtin_arc_vmovzw (int, const int)
34887
34888 The following take a single `__v8hi' argument and return a `__v8hi'
34889result:
34890     __v8hi __builtin_arc_vabsaw (__v8hi)
34891     __v8hi __builtin_arc_vabsw (__v8hi)
34892     __v8hi __builtin_arc_vaddsuw (__v8hi)
34893     __v8hi __builtin_arc_vexch1 (__v8hi)
34894     __v8hi __builtin_arc_vexch2 (__v8hi)
34895     __v8hi __builtin_arc_vexch4 (__v8hi)
34896     __v8hi __builtin_arc_vsignw (__v8hi)
34897     __v8hi __builtin_arc_vupbaw (__v8hi)
34898     __v8hi __builtin_arc_vupbw (__v8hi)
34899     __v8hi __builtin_arc_vupsbaw (__v8hi)
34900     __v8hi __builtin_arc_vupsbw (__v8hi)
34901
34902 The following take two `int' arguments and return no result:
34903     void __builtin_arc_vdirun (int, int)
34904     void __builtin_arc_vdorun (int, int)
34905
34906 The following take two `int' arguments and return no result.  The
34907first argument must a 3-bit compile time constant indicating one of the
34908DR0-DR7 DMA setup channels:
34909     void __builtin_arc_vdiwr (const int, int)
34910     void __builtin_arc_vdowr (const int, int)
34911
34912 The following take an `int' argument and return no result:
34913     void __builtin_arc_vendrec (int)
34914     void __builtin_arc_vrec (int)
34915     void __builtin_arc_vrecrun (int)
34916     void __builtin_arc_vrun (int)
34917
34918 The following take a `__v8hi' argument and two `int' arguments and
34919return a `__v8hi' result.  The second argument must be a 3-bit compile
34920time constants, indicating one the registers I0-I7, and the third
34921argument must be an 8-bit compile time constant.
34922
34923 _Note:_ Although the equivalent hardware instructions do not take an
34924SIMD register as an operand, these builtins overwrite the relevant bits
34925of the `__v8hi' register provided as the first argument with the value
34926loaded from the `[Ib, u8]' location in the SDM.
34927
34928     __v8hi __builtin_arc_vld32 (__v8hi, const int, const int)
34929     __v8hi __builtin_arc_vld32wh (__v8hi, const int, const int)
34930     __v8hi __builtin_arc_vld32wl (__v8hi, const int, const int)
34931     __v8hi __builtin_arc_vld64 (__v8hi, const int, const int)
34932
34933 The following take two `int' arguments and return a `__v8hi' result.
34934The first argument must be a 3-bit compile time constants, indicating
34935one the registers I0-I7, and the second argument must be an 8-bit
34936compile time constant.
34937
34938     __v8hi __builtin_arc_vld128 (const int, const int)
34939     __v8hi __builtin_arc_vld64w (const int, const int)
34940
34941 The following take a `__v8hi' argument and two `int' arguments and
34942return no result.  The second argument must be a 3-bit compile time
34943constants, indicating one the registers I0-I7, and the third argument
34944must be an 8-bit compile time constant.
34945
34946     void __builtin_arc_vst128 (__v8hi, const int, const int)
34947     void __builtin_arc_vst64 (__v8hi, const int, const int)
34948
34949 The following take a `__v8hi' argument and three `int' arguments and
34950return no result.  The second argument must be a 3-bit compile-time
34951constant, identifying the 16-bit sub-register to be stored, the third
34952argument must be a 3-bit compile time constants, indicating one the
34953registers I0-I7, and the fourth argument must be an 8-bit compile time
34954constant.
34955
34956     void __builtin_arc_vst16_n (__v8hi, const int, const int, const int)
34957     void __builtin_arc_vst32_n (__v8hi, const int, const int, const int)
34958
34959
34960File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM C Language Extensions (ACLE),  Prev: ARC SIMD Built-in Functions,  Up: Target Builtins
34961
349626.58.6 ARM iWMMXt Built-in Functions
34963------------------------------------
34964
34965These built-in functions are available for the ARM family of processors
34966when the `-mcpu=iwmmxt' switch is used:
34967
34968     typedef int v2si __attribute__ ((vector_size (8)));
34969     typedef short v4hi __attribute__ ((vector_size (8)));
34970     typedef char v8qi __attribute__ ((vector_size (8)));
34971
34972     int __builtin_arm_getwcgr0 (void)
34973     void __builtin_arm_setwcgr0 (int)
34974     int __builtin_arm_getwcgr1 (void)
34975     void __builtin_arm_setwcgr1 (int)
34976     int __builtin_arm_getwcgr2 (void)
34977     void __builtin_arm_setwcgr2 (int)
34978     int __builtin_arm_getwcgr3 (void)
34979     void __builtin_arm_setwcgr3 (int)
34980     int __builtin_arm_textrmsb (v8qi, int)
34981     int __builtin_arm_textrmsh (v4hi, int)
34982     int __builtin_arm_textrmsw (v2si, int)
34983     int __builtin_arm_textrmub (v8qi, int)
34984     int __builtin_arm_textrmuh (v4hi, int)
34985     int __builtin_arm_textrmuw (v2si, int)
34986     v8qi __builtin_arm_tinsrb (v8qi, int, int)
34987     v4hi __builtin_arm_tinsrh (v4hi, int, int)
34988     v2si __builtin_arm_tinsrw (v2si, int, int)
34989     long long __builtin_arm_tmia (long long, int, int)
34990     long long __builtin_arm_tmiabb (long long, int, int)
34991     long long __builtin_arm_tmiabt (long long, int, int)
34992     long long __builtin_arm_tmiaph (long long, int, int)
34993     long long __builtin_arm_tmiatb (long long, int, int)
34994     long long __builtin_arm_tmiatt (long long, int, int)
34995     int __builtin_arm_tmovmskb (v8qi)
34996     int __builtin_arm_tmovmskh (v4hi)
34997     int __builtin_arm_tmovmskw (v2si)
34998     long long __builtin_arm_waccb (v8qi)
34999     long long __builtin_arm_wacch (v4hi)
35000     long long __builtin_arm_waccw (v2si)
35001     v8qi __builtin_arm_waddb (v8qi, v8qi)
35002     v8qi __builtin_arm_waddbss (v8qi, v8qi)
35003     v8qi __builtin_arm_waddbus (v8qi, v8qi)
35004     v4hi __builtin_arm_waddh (v4hi, v4hi)
35005     v4hi __builtin_arm_waddhss (v4hi, v4hi)
35006     v4hi __builtin_arm_waddhus (v4hi, v4hi)
35007     v2si __builtin_arm_waddw (v2si, v2si)
35008     v2si __builtin_arm_waddwss (v2si, v2si)
35009     v2si __builtin_arm_waddwus (v2si, v2si)
35010     v8qi __builtin_arm_walign (v8qi, v8qi, int)
35011     long long __builtin_arm_wand(long long, long long)
35012     long long __builtin_arm_wandn (long long, long long)
35013     v8qi __builtin_arm_wavg2b (v8qi, v8qi)
35014     v8qi __builtin_arm_wavg2br (v8qi, v8qi)
35015     v4hi __builtin_arm_wavg2h (v4hi, v4hi)
35016     v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
35017     v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
35018     v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
35019     v2si __builtin_arm_wcmpeqw (v2si, v2si)
35020     v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
35021     v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
35022     v2si __builtin_arm_wcmpgtsw (v2si, v2si)
35023     v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
35024     v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
35025     v2si __builtin_arm_wcmpgtuw (v2si, v2si)
35026     long long __builtin_arm_wmacs (long long, v4hi, v4hi)
35027     long long __builtin_arm_wmacsz (v4hi, v4hi)
35028     long long __builtin_arm_wmacu (long long, v4hi, v4hi)
35029     long long __builtin_arm_wmacuz (v4hi, v4hi)
35030     v4hi __builtin_arm_wmadds (v4hi, v4hi)
35031     v4hi __builtin_arm_wmaddu (v4hi, v4hi)
35032     v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
35033     v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
35034     v2si __builtin_arm_wmaxsw (v2si, v2si)
35035     v8qi __builtin_arm_wmaxub (v8qi, v8qi)
35036     v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
35037     v2si __builtin_arm_wmaxuw (v2si, v2si)
35038     v8qi __builtin_arm_wminsb (v8qi, v8qi)
35039     v4hi __builtin_arm_wminsh (v4hi, v4hi)
35040     v2si __builtin_arm_wminsw (v2si, v2si)
35041     v8qi __builtin_arm_wminub (v8qi, v8qi)
35042     v4hi __builtin_arm_wminuh (v4hi, v4hi)
35043     v2si __builtin_arm_wminuw (v2si, v2si)
35044     v4hi __builtin_arm_wmulsm (v4hi, v4hi)
35045     v4hi __builtin_arm_wmulul (v4hi, v4hi)
35046     v4hi __builtin_arm_wmulum (v4hi, v4hi)
35047     long long __builtin_arm_wor (long long, long long)
35048     v2si __builtin_arm_wpackdss (long long, long long)
35049     v2si __builtin_arm_wpackdus (long long, long long)
35050     v8qi __builtin_arm_wpackhss (v4hi, v4hi)
35051     v8qi __builtin_arm_wpackhus (v4hi, v4hi)
35052     v4hi __builtin_arm_wpackwss (v2si, v2si)
35053     v4hi __builtin_arm_wpackwus (v2si, v2si)
35054     long long __builtin_arm_wrord (long long, long long)
35055     long long __builtin_arm_wrordi (long long, int)
35056     v4hi __builtin_arm_wrorh (v4hi, long long)
35057     v4hi __builtin_arm_wrorhi (v4hi, int)
35058     v2si __builtin_arm_wrorw (v2si, long long)
35059     v2si __builtin_arm_wrorwi (v2si, int)
35060     v2si __builtin_arm_wsadb (v2si, v8qi, v8qi)
35061     v2si __builtin_arm_wsadbz (v8qi, v8qi)
35062     v2si __builtin_arm_wsadh (v2si, v4hi, v4hi)
35063     v2si __builtin_arm_wsadhz (v4hi, v4hi)
35064     v4hi __builtin_arm_wshufh (v4hi, int)
35065     long long __builtin_arm_wslld (long long, long long)
35066     long long __builtin_arm_wslldi (long long, int)
35067     v4hi __builtin_arm_wsllh (v4hi, long long)
35068     v4hi __builtin_arm_wsllhi (v4hi, int)
35069     v2si __builtin_arm_wsllw (v2si, long long)
35070     v2si __builtin_arm_wsllwi (v2si, int)
35071     long long __builtin_arm_wsrad (long long, long long)
35072     long long __builtin_arm_wsradi (long long, int)
35073     v4hi __builtin_arm_wsrah (v4hi, long long)
35074     v4hi __builtin_arm_wsrahi (v4hi, int)
35075     v2si __builtin_arm_wsraw (v2si, long long)
35076     v2si __builtin_arm_wsrawi (v2si, int)
35077     long long __builtin_arm_wsrld (long long, long long)
35078     long long __builtin_arm_wsrldi (long long, int)
35079     v4hi __builtin_arm_wsrlh (v4hi, long long)
35080     v4hi __builtin_arm_wsrlhi (v4hi, int)
35081     v2si __builtin_arm_wsrlw (v2si, long long)
35082     v2si __builtin_arm_wsrlwi (v2si, int)
35083     v8qi __builtin_arm_wsubb (v8qi, v8qi)
35084     v8qi __builtin_arm_wsubbss (v8qi, v8qi)
35085     v8qi __builtin_arm_wsubbus (v8qi, v8qi)
35086     v4hi __builtin_arm_wsubh (v4hi, v4hi)
35087     v4hi __builtin_arm_wsubhss (v4hi, v4hi)
35088     v4hi __builtin_arm_wsubhus (v4hi, v4hi)
35089     v2si __builtin_arm_wsubw (v2si, v2si)
35090     v2si __builtin_arm_wsubwss (v2si, v2si)
35091     v2si __builtin_arm_wsubwus (v2si, v2si)
35092     v4hi __builtin_arm_wunpckehsb (v8qi)
35093     v2si __builtin_arm_wunpckehsh (v4hi)
35094     long long __builtin_arm_wunpckehsw (v2si)
35095     v4hi __builtin_arm_wunpckehub (v8qi)
35096     v2si __builtin_arm_wunpckehuh (v4hi)
35097     long long __builtin_arm_wunpckehuw (v2si)
35098     v4hi __builtin_arm_wunpckelsb (v8qi)
35099     v2si __builtin_arm_wunpckelsh (v4hi)
35100     long long __builtin_arm_wunpckelsw (v2si)
35101     v4hi __builtin_arm_wunpckelub (v8qi)
35102     v2si __builtin_arm_wunpckeluh (v4hi)
35103     long long __builtin_arm_wunpckeluw (v2si)
35104     v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
35105     v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
35106     v2si __builtin_arm_wunpckihw (v2si, v2si)
35107     v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
35108     v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
35109     v2si __builtin_arm_wunpckilw (v2si, v2si)
35110     long long __builtin_arm_wxor (long long, long long)
35111     long long __builtin_arm_wzero ()
35112
35113
35114File: 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
35115
351166.58.7 ARM C Language Extensions (ACLE)
35117---------------------------------------
35118
35119GCC implements extensions for C as described in the ARM C Language
35120Extensions (ACLE) specification, which can be found at
35121`http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf'.
35122
35123 As a part of ACLE, GCC implements extensions for Advanced SIMD as
35124described in the ARM C Language Extensions Specification.  The complete
35125list of Advanced SIMD intrinsics can be found at
35126`http://infocenter.arm.com/help/topic/com.arm.doc.ihi0073a/IHI0073A_arm_neon_intrinsics_ref.pdf'.
35127The built-in intrinsics for the Advanced SIMD extension are available
35128when NEON is enabled.
35129
35130 Currently, ARM and AArch64 back ends do not support ACLE 2.0 fully.
35131Both back ends support CRC32 intrinsics from `arm_acle.h'.  The ARM
35132back end's 16-bit floating-point Advanced SIMD intrinsics currently
35133comply to ACLE v1.1.  AArch64's back end does not have support for
3513416-bit floating point Advanced SIMD intrinsics yet.
35135
35136 See *note ARM Options:: and *note AArch64 Options:: for more
35137information on the availability of extensions.
35138
35139
35140File: gcc.info,  Node: ARM Floating Point Status and Control Intrinsics,  Next: AVR Built-in Functions,  Prev: ARM C Language Extensions (ACLE),  Up: Target Builtins
35141
351426.58.8 ARM Floating Point Status and Control Intrinsics
35143-------------------------------------------------------
35144
35145These built-in functions are available for the ARM family of processors
35146with floating-point unit.
35147
35148     unsigned int __builtin_arm_get_fpscr ()
35149     void __builtin_arm_set_fpscr (unsigned int)
35150
35151
35152File: gcc.info,  Node: AVR Built-in Functions,  Next: Blackfin Built-in Functions,  Prev: ARM Floating Point Status and Control Intrinsics,  Up: Target Builtins
35153
351546.58.9 AVR Built-in Functions
35155-----------------------------
35156
35157For each built-in function for AVR, there is an equally named,
35158uppercase built-in macro defined. That way users can easily query if or
35159if not a specific built-in is implemented or not. For example, if
35160`__builtin_avr_nop' is available the macro `__BUILTIN_AVR_NOP' is
35161defined to `1' and undefined otherwise.
35162
35163 The following built-in functions map to the respective machine
35164instruction, i.e. `nop', `sei', `cli', `sleep', `wdr', `swap', `fmul',
35165`fmuls' resp. `fmulsu'. The three `fmul*' built-ins are implemented as
35166library call if no hardware multiplier is available.
35167
35168     void __builtin_avr_nop (void)
35169     void __builtin_avr_sei (void)
35170     void __builtin_avr_cli (void)
35171     void __builtin_avr_sleep (void)
35172     void __builtin_avr_wdr (void)
35173     unsigned char __builtin_avr_swap (unsigned char)
35174     unsigned int __builtin_avr_fmul (unsigned char, unsigned char)
35175     int __builtin_avr_fmuls (char, char)
35176     int __builtin_avr_fmulsu (char, unsigned char)
35177
35178 In order to delay execution for a specific number of cycles, GCC
35179implements
35180     void __builtin_avr_delay_cycles (unsigned long ticks)
35181
35182`ticks' is the number of ticks to delay execution. Note that this
35183built-in does not take into account the effect of interrupts that might
35184increase delay time. `ticks' must be a compile-time integer constant;
35185delays with a variable number of cycles are not supported.
35186
35187     char __builtin_avr_flash_segment (const __memx void*)
35188
35189This built-in takes a byte address to the 24-bit *note address space:
35190AVR Named Address Spaces. `__memx' and returns the number of the flash
35191segment (the 64 KiB chunk) where the address points to.  Counting
35192starts at `0'.  If the address does not point to flash memory, return
35193`-1'.
35194
35195     unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val)
35196
35197Insert bits from BITS into VAL and return the resulting value. The
35198nibbles of MAP determine how the insertion is performed: Let X be the
35199N-th nibble of MAP
35200  1. If X is `0xf', then the N-th bit of VAL is returned unaltered.
35201
35202  2. If X is in the range 0...7, then the N-th result bit is set to the
35203     X-th bit of BITS
35204
35205  3. If X is in the range 8...`0xe', then the N-th result bit is
35206     undefined.
35207
35208One typical use case for this built-in is adjusting input and output
35209values to non-contiguous port layouts. Some examples:
35210
35211     // same as val, bits is unused
35212     __builtin_avr_insert_bits (0xffffffff, bits, val)
35213
35214     // same as bits, val is unused
35215     __builtin_avr_insert_bits (0x76543210, bits, val)
35216
35217     // same as rotating bits by 4
35218     __builtin_avr_insert_bits (0x32107654, bits, 0)
35219
35220     // high nibble of result is the high nibble of val
35221     // low nibble of result is the low nibble of bits
35222     __builtin_avr_insert_bits (0xffff3210, bits, val)
35223
35224     // reverse the bit order of bits
35225     __builtin_avr_insert_bits (0x01234567, bits, 0)
35226
35227
35228File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: AVR Built-in Functions,  Up: Target Builtins
35229
352306.58.10 Blackfin Built-in Functions
35231-----------------------------------
35232
35233Currently, there are two Blackfin-specific built-in functions.  These
35234are used for generating `CSYNC' and `SSYNC' machine insns without using
35235inline assembly; by using these built-in functions the compiler can
35236automatically add workarounds for hardware errata involving these
35237instructions.  These functions are named as follows:
35238
35239     void __builtin_bfin_csync (void)
35240     void __builtin_bfin_ssync (void)
35241
35242
35243File: gcc.info,  Node: FR-V Built-in Functions,  Next: MIPS DSP Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
35244
352456.58.11 FR-V Built-in Functions
35246-------------------------------
35247
35248GCC provides many FR-V-specific built-in functions.  In general, these
35249functions are intended to be compatible with those described by `FR-V
35250Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.
35251The two exceptions are `__MDUNPACKH' and `__MBTOHE', the GCC forms of
35252which pass 128-bit values by pointer rather than by value.
35253
35254 Most of the functions are named after specific FR-V instructions.
35255Such functions are said to be "directly mapped" and are summarized here
35256in tabular form.
35257
35258* Menu:
35259
35260* Argument Types::
35261* Directly-mapped Integer Functions::
35262* Directly-mapped Media Functions::
35263* Raw read/write Functions::
35264* Other Built-in Functions::
35265
35266
35267File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
35268
352696.58.11.1 Argument Types
35270........................
35271
35272The arguments to the built-in functions can be divided into three
35273groups: register numbers, compile-time constants and run-time values.
35274In order to make this classification clear at a glance, the arguments
35275and return values are given the following pseudo types:
35276
35277Pseudo type    Real C type            Constant?   Description
35278`uh'           `unsigned short'       No          an unsigned halfword
35279`uw1'          `unsigned int'         No          an unsigned word
35280`sw1'          `int'                  No          a signed word
35281`uw2'          `unsigned long long'   No          an unsigned doubleword
35282`sw2'          `long long'            No          a signed doubleword
35283`const'        `int'                  Yes         an integer constant
35284`acc'          `int'                  Yes         an ACC register number
35285`iacc'         `int'                  Yes         an IACC register number
35286
35287 These pseudo types are not defined by GCC, they are simply a notational
35288convenience used in this manual.
35289
35290 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at
35291run time.  They correspond to register operands in the underlying FR-V
35292instructions.
35293
35294 `const' arguments represent immediate operands in the underlying FR-V
35295instructions.  They must be compile-time constants.
35296
35297 `acc' arguments are evaluated at compile time and specify the number
35298of an accumulator register.  For example, an `acc' argument of 2
35299selects the ACC2 register.
35300
35301 `iacc' arguments are similar to `acc' arguments but specify the number
35302of an IACC register.  See *note Other Built-in Functions:: for more
35303details.
35304
35305
35306File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
35307
353086.58.11.2 Directly-Mapped Integer Functions
35309...........................................
35310
35311The functions listed below map directly to FR-V I-type instructions.
35312
35313Function prototype               Example usage           Assembly output
35314`sw1 __ADDSS (sw1, sw1)'         `C = __ADDSS (A, B)'    `ADDSS A,B,C'
35315`sw1 __SCAN (sw1, sw1)'          `C = __SCAN (A, B)'     `SCAN A,B,C'
35316`sw1 __SCUTSS (sw1)'             `B = __SCUTSS (A)'      `SCUTSS A,B'
35317`sw1 __SLASS (sw1, sw1)'         `C = __SLASS (A, B)'    `SLASS A,B,C'
35318`void __SMASS (sw1, sw1)'        `__SMASS (A, B)'        `SMASS A,B'
35319`void __SMSSS (sw1, sw1)'        `__SMSSS (A, B)'        `SMSSS A,B'
35320`void __SMU (sw1, sw1)'          `__SMU (A, B)'          `SMU A,B'
35321`sw2 __SMUL (sw1, sw1)'          `C = __SMUL (A, B)'     `SMUL A,B,C'
35322`sw1 __SUBSS (sw1, sw1)'         `C = __SUBSS (A, B)'    `SUBSS A,B,C'
35323`uw2 __UMUL (uw1, uw1)'          `C = __UMUL (A, B)'     `UMUL A,B,C'
35324
35325
35326File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
35327
353286.58.11.3 Directly-Mapped Media Functions
35329.........................................
35330
35331The functions listed below map directly to FR-V M-type instructions.
35332
35333Function prototype               Example usage           Assembly output
35334`uw1 __MABSHS (sw1)'             `B = __MABSHS (A)'      `MABSHS A,B'
35335`void __MADDACCS (acc, acc)'     `__MADDACCS (B, A)'     `MADDACCS A,B'
35336`sw1 __MADDHSS (sw1, sw1)'       `C = __MADDHSS (A, B)'  `MADDHSS A,B,C'
35337`uw1 __MADDHUS (uw1, uw1)'       `C = __MADDHUS (A, B)'  `MADDHUS A,B,C'
35338`uw1 __MAND (uw1, uw1)'          `C = __MAND (A, B)'     `MAND A,B,C'
35339`void __MASACCS (acc, acc)'      `__MASACCS (B, A)'      `MASACCS A,B'
35340`uw1 __MAVEH (uw1, uw1)'         `C = __MAVEH (A, B)'    `MAVEH A,B,C'
35341`uw2 __MBTOH (uw1)'              `B = __MBTOH (A)'       `MBTOH A,B'
35342`void __MBTOHE (uw1 *, uw1)'     `__MBTOHE (&B, A)'      `MBTOHE A,B'
35343`void __MCLRACC (acc)'           `__MCLRACC (A)'         `MCLRACC A'
35344`void __MCLRACCA (void)'         `__MCLRACCA ()'         `MCLRACCA'
35345`uw1 __Mcop1 (uw1, uw1)'         `C = __Mcop1 (A, B)'    `Mcop1 A,B,C'
35346`uw1 __Mcop2 (uw1, uw1)'         `C = __Mcop2 (A, B)'    `Mcop2 A,B,C'
35347`uw1 __MCPLHI (uw2, const)'      `C = __MCPLHI (A, B)'   `MCPLHI A,#B,C'
35348`uw1 __MCPLI (uw2, const)'       `C = __MCPLI (A, B)'    `MCPLI A,#B,C'
35349`void __MCPXIS (acc, sw1, sw1)'  `__MCPXIS (C, A, B)'    `MCPXIS A,B,C'
35350`void __MCPXIU (acc, uw1, uw1)'  `__MCPXIU (C, A, B)'    `MCPXIU A,B,C'
35351`void __MCPXRS (acc, sw1, sw1)'  `__MCPXRS (C, A, B)'    `MCPXRS A,B,C'
35352`void __MCPXRU (acc, uw1, uw1)'  `__MCPXRU (C, A, B)'    `MCPXRU A,B,C'
35353`uw1 __MCUT (acc, uw1)'          `C = __MCUT (A, B)'     `MCUT A,B,C'
35354`uw1 __MCUTSS (acc, sw1)'        `C = __MCUTSS (A, B)'   `MCUTSS A,B,C'
35355`void __MDADDACCS (acc, acc)'    `__MDADDACCS (B, A)'    `MDADDACCS A,B'
35356`void __MDASACCS (acc, acc)'     `__MDASACCS (B, A)'     `MDASACCS A,B'
35357`uw2 __MDCUTSSI (acc, const)'    `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C'
35358`uw2 __MDPACKH (uw2, uw2)'       `C = __MDPACKH (A, B)'  `MDPACKH A,B,C'
35359`uw2 __MDROTLI (uw2, const)'     `C = __MDROTLI (A, B)'  `MDROTLI A,#B,C'
35360`void __MDSUBACCS (acc, acc)'    `__MDSUBACCS (B, A)'    `MDSUBACCS A,B'
35361`void __MDUNPACKH (uw1 *, uw2)'  `__MDUNPACKH (&B, A)'   `MDUNPACKH A,B'
35362`uw2 __MEXPDHD (uw1, const)'     `C = __MEXPDHD (A, B)'  `MEXPDHD A,#B,C'
35363`uw1 __MEXPDHW (uw1, const)'     `C = __MEXPDHW (A, B)'  `MEXPDHW A,#B,C'
35364`uw1 __MHDSETH (uw1, const)'     `C = __MHDSETH (A, B)'  `MHDSETH A,#B,C'
35365`sw1 __MHDSETS (const)'          `B = __MHDSETS (A)'     `MHDSETS #A,B'
35366`uw1 __MHSETHIH (uw1, const)'    `B = __MHSETHIH (B, A)' `MHSETHIH #A,B'
35367`sw1 __MHSETHIS (sw1, const)'    `B = __MHSETHIS (B, A)' `MHSETHIS #A,B'
35368`uw1 __MHSETLOH (uw1, const)'    `B = __MHSETLOH (B, A)' `MHSETLOH #A,B'
35369`sw1 __MHSETLOS (sw1, const)'    `B = __MHSETLOS (B, A)' `MHSETLOS #A,B'
35370`uw1 __MHTOB (uw2)'              `B = __MHTOB (A)'       `MHTOB A,B'
35371`void __MMACHS (acc, sw1, sw1)'  `__MMACHS (C, A, B)'    `MMACHS A,B,C'
35372`void __MMACHU (acc, uw1, uw1)'  `__MMACHU (C, A, B)'    `MMACHU A,B,C'
35373`void __MMRDHS (acc, sw1, sw1)'  `__MMRDHS (C, A, B)'    `MMRDHS A,B,C'
35374`void __MMRDHU (acc, uw1, uw1)'  `__MMRDHU (C, A, B)'    `MMRDHU A,B,C'
35375`void __MMULHS (acc, sw1, sw1)'  `__MMULHS (C, A, B)'    `MMULHS A,B,C'
35376`void __MMULHU (acc, uw1, uw1)'  `__MMULHU (C, A, B)'    `MMULHU A,B,C'
35377`void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)'   `MMULXHS A,B,C'
35378`void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)'   `MMULXHU A,B,C'
35379`uw1 __MNOT (uw1)'               `B = __MNOT (A)'        `MNOT A,B'
35380`uw1 __MOR (uw1, uw1)'           `C = __MOR (A, B)'      `MOR A,B,C'
35381`uw1 __MPACKH (uh, uh)'          `C = __MPACKH (A, B)'   `MPACKH A,B,C'
35382`sw2 __MQADDHSS (sw2, sw2)'      `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C'
35383`uw2 __MQADDHUS (uw2, uw2)'      `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C'
35384`void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)'   `MQCPXIS A,B,C'
35385`void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)'   `MQCPXIU A,B,C'
35386`void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)'   `MQCPXRS A,B,C'
35387`void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)'   `MQCPXRU A,B,C'
35388`sw2 __MQLCLRHS (sw2, sw2)'      `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C'
35389`sw2 __MQLMTHS (sw2, sw2)'       `C = __MQLMTHS (A, B)'  `MQLMTHS A,B,C'
35390`void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)'   `MQMACHS A,B,C'
35391`void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)'   `MQMACHU A,B,C'
35392`void __MQMACXHS (acc, sw2,      `__MQMACXHS (C, A, B)'  `MQMACXHS A,B,C'
35393sw2)'                                                    
35394`void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)'   `MQMULHS A,B,C'
35395`void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)'   `MQMULHU A,B,C'
35396`void __MQMULXHS (acc, sw2,      `__MQMULXHS (C, A, B)'  `MQMULXHS A,B,C'
35397sw2)'                                                    
35398`void __MQMULXHU (acc, uw2,      `__MQMULXHU (C, A, B)'  `MQMULXHU A,B,C'
35399uw2)'                                                    
35400`sw2 __MQSATHS (sw2, sw2)'       `C = __MQSATHS (A, B)'  `MQSATHS A,B,C'
35401`uw2 __MQSLLHI (uw2, int)'       `C = __MQSLLHI (A, B)'  `MQSLLHI A,B,C'
35402`sw2 __MQSRAHI (sw2, int)'       `C = __MQSRAHI (A, B)'  `MQSRAHI A,B,C'
35403`sw2 __MQSUBHSS (sw2, sw2)'      `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C'
35404`uw2 __MQSUBHUS (uw2, uw2)'      `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C'
35405`void __MQXMACHS (acc, sw2,      `__MQXMACHS (C, A, B)'  `MQXMACHS A,B,C'
35406sw2)'                                                    
35407`void __MQXMACXHS (acc, sw2,     `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C'
35408sw2)'                                                    
35409`uw1 __MRDACC (acc)'             `B = __MRDACC (A)'      `MRDACC A,B'
35410`uw1 __MRDACCG (acc)'            `B = __MRDACCG (A)'     `MRDACCG A,B'
35411`uw1 __MROTLI (uw1, const)'      `C = __MROTLI (A, B)'   `MROTLI A,#B,C'
35412`uw1 __MROTRI (uw1, const)'      `C = __MROTRI (A, B)'   `MROTRI A,#B,C'
35413`sw1 __MSATHS (sw1, sw1)'        `C = __MSATHS (A, B)'   `MSATHS A,B,C'
35414`uw1 __MSATHU (uw1, uw1)'        `C = __MSATHU (A, B)'   `MSATHU A,B,C'
35415`uw1 __MSLLHI (uw1, const)'      `C = __MSLLHI (A, B)'   `MSLLHI A,#B,C'
35416`sw1 __MSRAHI (sw1, const)'      `C = __MSRAHI (A, B)'   `MSRAHI A,#B,C'
35417`uw1 __MSRLHI (uw1, const)'      `C = __MSRLHI (A, B)'   `MSRLHI A,#B,C'
35418`void __MSUBACCS (acc, acc)'     `__MSUBACCS (B, A)'     `MSUBACCS A,B'
35419`sw1 __MSUBHSS (sw1, sw1)'       `C = __MSUBHSS (A, B)'  `MSUBHSS A,B,C'
35420`uw1 __MSUBHUS (uw1, uw1)'       `C = __MSUBHUS (A, B)'  `MSUBHUS A,B,C'
35421`void __MTRAP (void)'            `__MTRAP ()'            `MTRAP'
35422`uw2 __MUNPACKH (uw1)'           `B = __MUNPACKH (A)'    `MUNPACKH A,B'
35423`uw1 __MWCUT (uw2, uw1)'         `C = __MWCUT (A, B)'    `MWCUT A,B,C'
35424`void __MWTACC (acc, uw1)'       `__MWTACC (B, A)'       `MWTACC A,B'
35425`void __MWTACCG (acc, uw1)'      `__MWTACCG (B, A)'      `MWTACCG A,B'
35426`uw1 __MXOR (uw1, uw1)'          `C = __MXOR (A, B)'     `MXOR A,B,C'
35427
35428
35429File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
35430
354316.58.11.4 Raw Read/Write Functions
35432..................................
35433
35434This sections describes built-in functions related to read and write
35435instructions to access memory.  These functions generate `membar'
35436instructions to flush the I/O load and stores where appropriate, as
35437described in Fujitsu's manual described above.
35438
35439`unsigned char __builtin_read8 (void *DATA)'
35440
35441`unsigned short __builtin_read16 (void *DATA)'
35442
35443`unsigned long __builtin_read32 (void *DATA)'
35444
35445`unsigned long long __builtin_read64 (void *DATA)'
35446
35447`void __builtin_write8 (void *DATA, unsigned char DATUM)'
35448
35449`void __builtin_write16 (void *DATA, unsigned short DATUM)'
35450
35451`void __builtin_write32 (void *DATA, unsigned long DATUM)'
35452
35453`void __builtin_write64 (void *DATA, unsigned long long DATUM)'
35454
35455
35456File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
35457
354586.58.11.5 Other Built-in Functions
35459..................................
35460
35461This section describes built-in functions that are not named after a
35462specific FR-V instruction.
35463
35464`sw2 __IACCreadll (iacc REG)'
35465     Return the full 64-bit value of IACC0.  The REG argument is
35466     reserved for future expansion and must be 0.
35467
35468`sw1 __IACCreadl (iacc REG)'
35469     Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
35470     Other values of REG are rejected as invalid.
35471
35472`void __IACCsetll (iacc REG, sw2 X)'
35473     Set the full 64-bit value of IACC0 to X.  The REG argument is
35474     reserved for future expansion and must be 0.
35475
35476`void __IACCsetl (iacc REG, sw1 X)'
35477     Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
35478     values of REG are rejected as invalid.
35479
35480`void __data_prefetch0 (const void *X)'
35481     Use the `dcpl' instruction to load the contents of address X into
35482     the data cache.
35483
35484`void __data_prefetch (const void *X)'
35485     Use the `nldub' instruction to load the contents of address X into
35486     the data cache.  The instruction is issued in slot I1.
35487
35488
35489File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: FR-V Built-in Functions,  Up: Target Builtins
35490
354916.58.12 MIPS DSP Built-in Functions
35492-----------------------------------
35493
35494The MIPS DSP Application-Specific Extension (ASE) includes new
35495instructions that are designed to improve the performance of DSP and
35496media applications.  It provides instructions that operate on packed
354978-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
35498
35499 GCC supports MIPS DSP operations using both the generic vector
35500extensions (*note Vector Extensions::) and a collection of
35501MIPS-specific built-in functions.  Both kinds of support are enabled by
35502the `-mdsp' command-line option.
35503
35504 Revision 2 of the ASE was introduced in the second half of 2006.  This
35505revision adds extra instructions to the original ASE, but is otherwise
35506backwards-compatible with it.  You can select revision 2 using the
35507command-line option `-mdspr2'; this option implies `-mdsp'.
35508
35509 The SCOUNT and POS bits of the DSP control register are global.  The
35510WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and
35511POS bits.  During optimization, the compiler does not delete these
35512instructions and it does not delete calls to functions containing these
35513instructions.
35514
35515 At present, GCC only provides support for operations on 32-bit
35516vectors.  The vector type associated with 8-bit integer data is usually
35517called `v4i8', the vector type associated with Q7 is usually called
35518`v4q7', the vector type associated with 16-bit integer data is usually
35519called `v2i16', and the vector type associated with Q15 is usually
35520called `v2q15'.  They can be defined in C as follows:
35521
35522     typedef signed char v4i8 __attribute__ ((vector_size(4)));
35523     typedef signed char v4q7 __attribute__ ((vector_size(4)));
35524     typedef short v2i16 __attribute__ ((vector_size(4)));
35525     typedef short v2q15 __attribute__ ((vector_size(4)));
35526
35527 `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same
35528way as aggregates.  For example:
35529
35530     v4i8 a = {1, 2, 3, 4};
35531     v4i8 b;
35532     b = (v4i8) {5, 6, 7, 8};
35533
35534     v2q15 c = {0x0fcb, 0x3a75};
35535     v2q15 d;
35536     d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
35537
35538 _Note:_ The CPU's endianness determines the order in which values are
35539packed.  On little-endian targets, the first value is the least
35540significant and the last value is the most significant.  The opposite
35541order applies to big-endian targets.  For example, the code above sets
35542the lowest byte of `a' to `1' on little-endian targets and `4' on
35543big-endian targets.
35544
35545 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
35546representation.  As shown in this example, the integer representation
35547of a Q7 value can be obtained by multiplying the fractional value by
35548`0x1.0p7'.  The equivalent for Q15 values is to multiply by `0x1.0p15'.
35549The equivalent for Q31 values is to multiply by `0x1.0p31'.
35550
35551 The table below lists the `v4i8' and `v2q15' operations for which
35552hardware support exists.  `a' and `b' are `v4i8' values, and `c' and
35553`d' are `v2q15' values.
35554
35555C code                               MIPS instruction
35556`a + b'                              `addu.qb'
35557`c + d'                              `addq.ph'
35558`a - b'                              `subu.qb'
35559`c - d'                              `subq.ph'
35560
35561 The table below lists the `v2i16' operation for which hardware support
35562exists for the DSP ASE REV 2.  `e' and `f' are `v2i16' values.
35563
35564C code                               MIPS instruction
35565`e * f'                              `mul.ph'
35566
35567 It is easier to describe the DSP built-in functions if we first define
35568the following types:
35569
35570     typedef int q31;
35571     typedef int i32;
35572     typedef unsigned int ui32;
35573     typedef long long a64;
35574
35575 `q31' and `i32' are actually the same as `int', but we use `q31' to
35576indicate a Q31 fractional value and `i32' to indicate a 32-bit integer
35577value.  Similarly, `a64' is the same as `long long', but we use `a64'
35578to indicate values that are placed in one of the four DSP accumulators
35579(`$ac0', `$ac1', `$ac2' or `$ac3').
35580
35581 Also, some built-in functions prefer or require immediate numbers as
35582parameters, because the corresponding DSP instructions accept both
35583immediate numbers and register operands, or accept immediate numbers
35584only.  The immediate parameters are listed as follows.
35585
35586     imm0_3: 0 to 3.
35587     imm0_7: 0 to 7.
35588     imm0_15: 0 to 15.
35589     imm0_31: 0 to 31.
35590     imm0_63: 0 to 63.
35591     imm0_255: 0 to 255.
35592     imm_n32_31: -32 to 31.
35593     imm_n512_511: -512 to 511.
35594
35595 The following built-in functions map directly to a particular MIPS DSP
35596instruction.  Please refer to the architecture specification for
35597details on what each instruction does.
35598
35599     v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
35600     v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
35601     q31 __builtin_mips_addq_s_w (q31, q31)
35602     v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
35603     v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
35604     v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
35605     v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
35606     q31 __builtin_mips_subq_s_w (q31, q31)
35607     v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
35608     v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
35609     i32 __builtin_mips_addsc (i32, i32)
35610     i32 __builtin_mips_addwc (i32, i32)
35611     i32 __builtin_mips_modsub (i32, i32)
35612     i32 __builtin_mips_raddu_w_qb (v4i8)
35613     v2q15 __builtin_mips_absq_s_ph (v2q15)
35614     q31 __builtin_mips_absq_s_w (q31)
35615     v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
35616     v2q15 __builtin_mips_precrq_ph_w (q31, q31)
35617     v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
35618     v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
35619     q31 __builtin_mips_preceq_w_phl (v2q15)
35620     q31 __builtin_mips_preceq_w_phr (v2q15)
35621     v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
35622     v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
35623     v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
35624     v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
35625     v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
35626     v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
35627     v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
35628     v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
35629     v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
35630     v4i8 __builtin_mips_shll_qb (v4i8, i32)
35631     v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
35632     v2q15 __builtin_mips_shll_ph (v2q15, i32)
35633     v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
35634     v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
35635     q31 __builtin_mips_shll_s_w (q31, imm0_31)
35636     q31 __builtin_mips_shll_s_w (q31, i32)
35637     v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
35638     v4i8 __builtin_mips_shrl_qb (v4i8, i32)
35639     v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
35640     v2q15 __builtin_mips_shra_ph (v2q15, i32)
35641     v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
35642     v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
35643     q31 __builtin_mips_shra_r_w (q31, imm0_31)
35644     q31 __builtin_mips_shra_r_w (q31, i32)
35645     v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
35646     v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
35647     v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
35648     q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
35649     q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
35650     a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
35651     a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
35652     a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
35653     a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
35654     a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
35655     a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
35656     a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
35657     a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
35658     a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
35659     a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
35660     a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
35661     a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
35662     a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
35663     i32 __builtin_mips_bitrev (i32)
35664     i32 __builtin_mips_insv (i32, i32)
35665     v4i8 __builtin_mips_repl_qb (imm0_255)
35666     v4i8 __builtin_mips_repl_qb (i32)
35667     v2q15 __builtin_mips_repl_ph (imm_n512_511)
35668     v2q15 __builtin_mips_repl_ph (i32)
35669     void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
35670     void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
35671     void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
35672     i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
35673     i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
35674     i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
35675     void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
35676     void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
35677     void __builtin_mips_cmp_le_ph (v2q15, v2q15)
35678     v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
35679     v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
35680     v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
35681     i32 __builtin_mips_extr_w (a64, imm0_31)
35682     i32 __builtin_mips_extr_w (a64, i32)
35683     i32 __builtin_mips_extr_r_w (a64, imm0_31)
35684     i32 __builtin_mips_extr_s_h (a64, i32)
35685     i32 __builtin_mips_extr_rs_w (a64, imm0_31)
35686     i32 __builtin_mips_extr_rs_w (a64, i32)
35687     i32 __builtin_mips_extr_s_h (a64, imm0_31)
35688     i32 __builtin_mips_extr_r_w (a64, i32)
35689     i32 __builtin_mips_extp (a64, imm0_31)
35690     i32 __builtin_mips_extp (a64, i32)
35691     i32 __builtin_mips_extpdp (a64, imm0_31)
35692     i32 __builtin_mips_extpdp (a64, i32)
35693     a64 __builtin_mips_shilo (a64, imm_n32_31)
35694     a64 __builtin_mips_shilo (a64, i32)
35695     a64 __builtin_mips_mthlip (a64, i32)
35696     void __builtin_mips_wrdsp (i32, imm0_63)
35697     i32 __builtin_mips_rddsp (imm0_63)
35698     i32 __builtin_mips_lbux (void *, i32)
35699     i32 __builtin_mips_lhx (void *, i32)
35700     i32 __builtin_mips_lwx (void *, i32)
35701     a64 __builtin_mips_ldx (void *, i32) [MIPS64 only]
35702     i32 __builtin_mips_bposge32 (void)
35703     a64 __builtin_mips_madd (a64, i32, i32);
35704     a64 __builtin_mips_maddu (a64, ui32, ui32);
35705     a64 __builtin_mips_msub (a64, i32, i32);
35706     a64 __builtin_mips_msubu (a64, ui32, ui32);
35707     a64 __builtin_mips_mult (i32, i32);
35708     a64 __builtin_mips_multu (ui32, ui32);
35709
35710 The following built-in functions map directly to a particular MIPS DSP
35711REV 2 instruction.  Please refer to the architecture specification for
35712details on what each instruction does.
35713
35714     v4q7 __builtin_mips_absq_s_qb (v4q7);
35715     v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
35716     v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
35717     v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
35718     v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
35719     i32 __builtin_mips_append (i32, i32, imm0_31);
35720     i32 __builtin_mips_balign (i32, i32, imm0_3);
35721     i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
35722     i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
35723     i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
35724     a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
35725     a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
35726     v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
35727     v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
35728     q31 __builtin_mips_mulq_rs_w (q31, q31);
35729     v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
35730     q31 __builtin_mips_mulq_s_w (q31, q31);
35731     a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
35732     v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
35733     v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
35734     v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
35735     i32 __builtin_mips_prepend (i32, i32, imm0_31);
35736     v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
35737     v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
35738     v4i8 __builtin_mips_shra_qb (v4i8, i32);
35739     v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
35740     v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
35741     v2i16 __builtin_mips_shrl_ph (v2i16, i32);
35742     v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
35743     v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
35744     v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
35745     v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
35746     v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
35747     v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
35748     q31 __builtin_mips_addqh_w (q31, q31);
35749     q31 __builtin_mips_addqh_r_w (q31, q31);
35750     v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
35751     v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
35752     q31 __builtin_mips_subqh_w (q31, q31);
35753     q31 __builtin_mips_subqh_r_w (q31, q31);
35754     a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
35755     a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
35756     a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
35757     a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
35758     a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
35759     a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
35760
35761
35762File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
35763
357646.58.13 MIPS Paired-Single Support
35765----------------------------------
35766
35767The MIPS64 architecture includes a number of instructions that operate
35768on pairs of single-precision floating-point values.  Each pair is
35769packed into a 64-bit floating-point register, with one element being
35770designated the "upper half" and the other being designated the "lower
35771half".
35772
35773 GCC supports paired-single operations using both the generic vector
35774extensions (*note Vector Extensions::) and a collection of
35775MIPS-specific built-in functions.  Both kinds of support are enabled by
35776the `-mpaired-single' command-line option.
35777
35778 The vector type associated with paired-single values is usually called
35779`v2sf'.  It can be defined in C as follows:
35780
35781     typedef float v2sf __attribute__ ((vector_size (8)));
35782
35783 `v2sf' values are initialized in the same way as aggregates.  For
35784example:
35785
35786     v2sf a = {1.5, 9.1};
35787     v2sf b;
35788     float e, f;
35789     b = (v2sf) {e, f};
35790
35791 _Note:_ The CPU's endianness determines which value is stored in the
35792upper half of a register and which value is stored in the lower half.
35793On little-endian targets, the first value is the lower one and the
35794second value is the upper one.  The opposite order applies to
35795big-endian targets.  For example, the code above sets the lower half of
35796`a' to `1.5' on little-endian targets and `9.1' on big-endian targets.
35797
35798
35799File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: Other MIPS Built-in Functions,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
35800
358016.58.14 MIPS Loongson Built-in Functions
35802----------------------------------------
35803
35804GCC provides intrinsics to access the SIMD instructions provided by the
35805ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
35806available after inclusion of the `loongson.h' header file, operate on
35807the following 64-bit vector types:
35808
35809   * `uint8x8_t', a vector of eight unsigned 8-bit integers;
35810
35811   * `uint16x4_t', a vector of four unsigned 16-bit integers;
35812
35813   * `uint32x2_t', a vector of two unsigned 32-bit integers;
35814
35815   * `int8x8_t', a vector of eight signed 8-bit integers;
35816
35817   * `int16x4_t', a vector of four signed 16-bit integers;
35818
35819   * `int32x2_t', a vector of two signed 32-bit integers.
35820
35821 The intrinsics provided are listed below; each is named after the
35822machine instruction to which it corresponds, with suffixes added as
35823appropriate to distinguish intrinsics that expand to the same machine
35824instruction yet have different argument types.  Refer to the
35825architecture documentation for a description of the functionality of
35826each instruction.
35827
35828     int16x4_t packsswh (int32x2_t s, int32x2_t t);
35829     int8x8_t packsshb (int16x4_t s, int16x4_t t);
35830     uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
35831     uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
35832     uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
35833     uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
35834     int32x2_t paddw_s (int32x2_t s, int32x2_t t);
35835     int16x4_t paddh_s (int16x4_t s, int16x4_t t);
35836     int8x8_t paddb_s (int8x8_t s, int8x8_t t);
35837     uint64_t paddd_u (uint64_t s, uint64_t t);
35838     int64_t paddd_s (int64_t s, int64_t t);
35839     int16x4_t paddsh (int16x4_t s, int16x4_t t);
35840     int8x8_t paddsb (int8x8_t s, int8x8_t t);
35841     uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
35842     uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
35843     uint64_t pandn_ud (uint64_t s, uint64_t t);
35844     uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
35845     uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
35846     uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
35847     int64_t pandn_sd (int64_t s, int64_t t);
35848     int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
35849     int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
35850     int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
35851     uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
35852     uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
35853     uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
35854     uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
35855     uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
35856     int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
35857     int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
35858     int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
35859     uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
35860     uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
35861     uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
35862     int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
35863     int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
35864     int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
35865     uint16x4_t pextrh_u (uint16x4_t s, int field);
35866     int16x4_t pextrh_s (int16x4_t s, int field);
35867     uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
35868     uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
35869     uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
35870     uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
35871     int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
35872     int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
35873     int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
35874     int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
35875     int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
35876     int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
35877     uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
35878     int16x4_t pminsh (int16x4_t s, int16x4_t t);
35879     uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
35880     uint8x8_t pmovmskb_u (uint8x8_t s);
35881     int8x8_t pmovmskb_s (int8x8_t s);
35882     uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
35883     int16x4_t pmulhh (int16x4_t s, int16x4_t t);
35884     int16x4_t pmullh (int16x4_t s, int16x4_t t);
35885     int64_t pmuluw (uint32x2_t s, uint32x2_t t);
35886     uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
35887     uint16x4_t biadd (uint8x8_t s);
35888     uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
35889     uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
35890     int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
35891     uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
35892     int16x4_t psllh_s (int16x4_t s, uint8_t amount);
35893     uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
35894     int32x2_t psllw_s (int32x2_t s, uint8_t amount);
35895     uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
35896     int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
35897     uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
35898     int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
35899     uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
35900     int16x4_t psrah_s (int16x4_t s, uint8_t amount);
35901     uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
35902     int32x2_t psraw_s (int32x2_t s, uint8_t amount);
35903     uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
35904     uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
35905     uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
35906     int32x2_t psubw_s (int32x2_t s, int32x2_t t);
35907     int16x4_t psubh_s (int16x4_t s, int16x4_t t);
35908     int8x8_t psubb_s (int8x8_t s, int8x8_t t);
35909     uint64_t psubd_u (uint64_t s, uint64_t t);
35910     int64_t psubd_s (int64_t s, int64_t t);
35911     int16x4_t psubsh (int16x4_t s, int16x4_t t);
35912     int8x8_t psubsb (int8x8_t s, int8x8_t t);
35913     uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
35914     uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
35915     uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
35916     uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
35917     uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
35918     int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
35919     int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
35920     int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
35921     uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
35922     uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
35923     uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
35924     int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
35925     int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
35926     int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
35927
35928* Menu:
35929
35930* Paired-Single Arithmetic::
35931* Paired-Single Built-in Functions::
35932* MIPS-3D Built-in Functions::
35933
35934
35935File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
35936
359376.58.14.1 Paired-Single Arithmetic
35938..................................
35939
35940The table below lists the `v2sf' operations for which hardware support
35941exists.  `a', `b' and `c' are `v2sf' values and `x' is an integral
35942value.
35943
35944C code                               MIPS instruction
35945`a + b'                              `add.ps'
35946`a - b'                              `sub.ps'
35947`-a'                                 `neg.ps'
35948`a * b'                              `mul.ps'
35949`a * b + c'                          `madd.ps'
35950`a * b - c'                          `msub.ps'
35951`-(a * b + c)'                       `nmadd.ps'
35952`-(a * b - c)'                       `nmsub.ps'
35953`x ? a : b'                          `movn.ps'/`movz.ps'
35954
35955 Note that the multiply-accumulate instructions can be disabled using
35956the command-line option `-mno-fused-madd'.
35957
35958
35959File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Loongson Built-in Functions
35960
359616.58.14.2 Paired-Single Built-in Functions
35962..........................................
35963
35964The following paired-single functions map directly to a particular MIPS
35965instruction.  Please refer to the architecture specification for
35966details on what each instruction does.
35967
35968`v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
35969     Pair lower lower (`pll.ps').
35970
35971`v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
35972     Pair upper lower (`pul.ps').
35973
35974`v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
35975     Pair lower upper (`plu.ps').
35976
35977`v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
35978     Pair upper upper (`puu.ps').
35979
35980`v2sf __builtin_mips_cvt_ps_s (float, float)'
35981     Convert pair to paired single (`cvt.ps.s').
35982
35983`float __builtin_mips_cvt_s_pl (v2sf)'
35984     Convert pair lower to single (`cvt.s.pl').
35985
35986`float __builtin_mips_cvt_s_pu (v2sf)'
35987     Convert pair upper to single (`cvt.s.pu').
35988
35989`v2sf __builtin_mips_abs_ps (v2sf)'
35990     Absolute value (`abs.ps').
35991
35992`v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
35993     Align variable (`alnv.ps').
35994
35995     _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
35996     otherwise the result is unpredictable.  Please read the
35997     instruction description for details.
35998
35999 The following multi-instruction functions are also available.  In each
36000case, COND can be any of the 16 floating-point conditions: `f', `un',
36001`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
36002`lt', `nge', `le' or `ngt'.
36003
36004`v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
36005`v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
36006     Conditional move based on floating-point comparison (`c.COND.ps',
36007     `movt.ps'/`movf.ps').
36008
36009     The `movt' functions return the value X computed by:
36010
36011          c.COND.ps CC,A,B
36012          mov.ps X,C
36013          movt.ps X,D,CC
36014
36015     The `movf' functions are similar but use `movf.ps' instead of
36016     `movt.ps'.
36017
36018`int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
36019`int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
36020     Comparison of two paired-single values (`c.COND.ps',
36021     `bc1t'/`bc1f').
36022
36023     These functions compare A and B using `c.COND.ps' and return
36024     either the upper or lower half of the result.  For example:
36025
36026          v2sf a, b;
36027          if (__builtin_mips_upper_c_eq_ps (a, b))
36028            upper_halves_are_equal ();
36029          else
36030            upper_halves_are_unequal ();
36031
36032          if (__builtin_mips_lower_c_eq_ps (a, b))
36033            lower_halves_are_equal ();
36034          else
36035            lower_halves_are_unequal ();
36036
36037
36038File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
36039
360406.58.14.3 MIPS-3D Built-in Functions
36041....................................
36042
36043The MIPS-3D Application-Specific Extension (ASE) includes additional
36044paired-single instructions that are designed to improve the performance
36045of 3D graphics operations.  Support for these instructions is controlled
36046by the `-mips3d' command-line option.
36047
36048 The functions listed below map directly to a particular MIPS-3D
36049instruction.  Please refer to the architecture specification for more
36050details on what each instruction does.
36051
36052`v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
36053     Reduction add (`addr.ps').
36054
36055`v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
36056     Reduction multiply (`mulr.ps').
36057
36058`v2sf __builtin_mips_cvt_pw_ps (v2sf)'
36059     Convert paired single to paired word (`cvt.pw.ps').
36060
36061`v2sf __builtin_mips_cvt_ps_pw (v2sf)'
36062     Convert paired word to paired single (`cvt.ps.pw').
36063
36064`float __builtin_mips_recip1_s (float)'
36065`double __builtin_mips_recip1_d (double)'
36066`v2sf __builtin_mips_recip1_ps (v2sf)'
36067     Reduced-precision reciprocal (sequence step 1) (`recip1.FMT').
36068
36069`float __builtin_mips_recip2_s (float, float)'
36070`double __builtin_mips_recip2_d (double, double)'
36071`v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
36072     Reduced-precision reciprocal (sequence step 2) (`recip2.FMT').
36073
36074`float __builtin_mips_rsqrt1_s (float)'
36075`double __builtin_mips_rsqrt1_d (double)'
36076`v2sf __builtin_mips_rsqrt1_ps (v2sf)'
36077     Reduced-precision reciprocal square root (sequence step 1)
36078     (`rsqrt1.FMT').
36079
36080`float __builtin_mips_rsqrt2_s (float, float)'
36081`double __builtin_mips_rsqrt2_d (double, double)'
36082`v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
36083     Reduced-precision reciprocal square root (sequence step 2)
36084     (`rsqrt2.FMT').
36085
36086 The following multi-instruction functions are also available.  In each
36087case, COND can be any of the 16 floating-point conditions: `f', `un',
36088`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
36089`lt', `nge', `le' or `ngt'.
36090
36091`int __builtin_mips_cabs_COND_s (float A, float B)'
36092`int __builtin_mips_cabs_COND_d (double A, double B)'
36093     Absolute comparison of two scalar values (`cabs.COND.FMT',
36094     `bc1t'/`bc1f').
36095
36096     These functions compare A and B using `cabs.COND.s' or
36097     `cabs.COND.d' and return the result as a boolean value.  For
36098     example:
36099
36100          float a, b;
36101          if (__builtin_mips_cabs_eq_s (a, b))
36102            true ();
36103          else
36104            false ();
36105
36106`int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
36107`int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
36108     Absolute comparison of two paired-single values (`cabs.COND.ps',
36109     `bc1t'/`bc1f').
36110
36111     These functions compare A and B using `cabs.COND.ps' and return
36112     either the upper or lower half of the result.  For example:
36113
36114          v2sf a, b;
36115          if (__builtin_mips_upper_cabs_eq_ps (a, b))
36116            upper_halves_are_equal ();
36117          else
36118            upper_halves_are_unequal ();
36119
36120          if (__builtin_mips_lower_cabs_eq_ps (a, b))
36121            lower_halves_are_equal ();
36122          else
36123            lower_halves_are_unequal ();
36124
36125`v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
36126`v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
36127     Conditional move based on absolute comparison (`cabs.COND.ps',
36128     `movt.ps'/`movf.ps').
36129
36130     The `movt' functions return the value X computed by:
36131
36132          cabs.COND.ps CC,A,B
36133          mov.ps X,C
36134          movt.ps X,D,CC
36135
36136     The `movf' functions are similar but use `movf.ps' instead of
36137     `movt.ps'.
36138
36139`int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
36140`int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
36141`int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
36142`int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
36143     Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps',
36144     `bc1any2t'/`bc1any2f').
36145
36146     These functions compare A and B using `c.COND.ps' or
36147     `cabs.COND.ps'.  The `any' forms return true if either result is
36148     true and the `all' forms return true if both results are true.
36149     For example:
36150
36151          v2sf a, b;
36152          if (__builtin_mips_any_c_eq_ps (a, b))
36153            one_is_true ();
36154          else
36155            both_are_false ();
36156
36157          if (__builtin_mips_all_c_eq_ps (a, b))
36158            both_are_true ();
36159          else
36160            one_is_false ();
36161
36162`int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
36163`int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
36164`int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
36165`int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
36166     Comparison of four paired-single values
36167     (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f').
36168
36169     These functions use `c.COND.ps' or `cabs.COND.ps' to compare A
36170     with B and to compare C with D.  The `any' forms return true if
36171     any of the four results are true and the `all' forms return true
36172     if all four results are true.  For example:
36173
36174          v2sf a, b, c, d;
36175          if (__builtin_mips_any_c_eq_4s (a, b, c, d))
36176            some_are_true ();
36177          else
36178            all_are_false ();
36179
36180          if (__builtin_mips_all_c_eq_4s (a, b, c, d))
36181            all_are_true ();
36182          else
36183            some_are_false ();
36184
36185
36186File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: MSP430 Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins
36187
361886.58.15 Other MIPS Built-in Functions
36189-------------------------------------
36190
36191GCC provides other MIPS-specific built-in functions:
36192
36193`void __builtin_mips_cache (int OP, const volatile void *ADDR)'
36194     Insert a `cache' instruction with operands OP and ADDR.  GCC
36195     defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE'
36196     when this function is available.
36197
36198`unsigned int __builtin_mips_get_fcsr (void)'
36199`void __builtin_mips_set_fcsr (unsigned int VALUE)'
36200     Get and set the contents of the floating-point control and status
36201     register (FPU control register 31).  These functions are only
36202     available in hard-float code but can be called in both MIPS16 and
36203     non-MIPS16 contexts.
36204
36205     `__builtin_mips_set_fcsr' can be used to change any bit of the
36206     register except the condition codes, which GCC assumes are
36207     preserved.
36208
36209
36210File: gcc.info,  Node: MSP430 Built-in Functions,  Next: NDS32 Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins
36211
362126.58.16 MSP430 Built-in Functions
36213---------------------------------
36214
36215GCC provides a couple of special builtin functions to aid in the
36216writing of interrupt handlers in C.
36217
36218`__bic_SR_register_on_exit (int MASK)'
36219     This clears the indicated bits in the saved copy of the status
36220     register currently residing on the stack.  This only works inside
36221     interrupt handlers and the changes to the status register will
36222     only take affect once the handler returns.
36223
36224`__bis_SR_register_on_exit (int MASK)'
36225     This sets the indicated bits in the saved copy of the status
36226     register currently residing on the stack.  This only works inside
36227     interrupt handlers and the changes to the status register will
36228     only take affect once the handler returns.
36229
36230`__delay_cycles (long long CYCLES)'
36231     This inserts an instruction sequence that takes exactly CYCLES
36232     cycles (between 0 and about 17E9) to complete.  The inserted
36233     sequence may use jumps, loops, or no-ops, and does not interfere
36234     with any other instructions.  Note that CYCLES must be a
36235     compile-time constant integer - that is, you must pass a number,
36236     not a variable that may be optimized to a constant later.  The
36237     number of cycles delayed by this builtin is exact.
36238
36239
36240File: gcc.info,  Node: NDS32 Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MSP430 Built-in Functions,  Up: Target Builtins
36241
362426.58.17 NDS32 Built-in Functions
36243--------------------------------
36244
36245These built-in functions are available for the NDS32 target:
36246
36247 -- Built-in Function: void __builtin_nds32_isync (int *ADDR)
36248     Insert an ISYNC instruction into the instruction stream where ADDR
36249     is an instruction address for serialization.
36250
36251 -- Built-in Function: void __builtin_nds32_isb (void)
36252     Insert an ISB instruction into the instruction stream.
36253
36254 -- Built-in Function: int __builtin_nds32_mfsr (int SR)
36255     Return the content of a system register which is mapped by SR.
36256
36257 -- Built-in Function: int __builtin_nds32_mfusr (int USR)
36258     Return the content of a user space register which is mapped by USR.
36259
36260 -- Built-in Function: void __builtin_nds32_mtsr (int VALUE, int SR)
36261     Move the VALUE to a system register which is mapped by SR.
36262
36263 -- Built-in Function: void __builtin_nds32_mtusr (int VALUE, int USR)
36264     Move the VALUE to a user space register which is mapped by USR.
36265
36266 -- Built-in Function: void __builtin_nds32_setgie_en (void)
36267     Enable global interrupt.
36268
36269 -- Built-in Function: void __builtin_nds32_setgie_dis (void)
36270     Disable global interrupt.
36271
36272
36273File: gcc.info,  Node: picoChip Built-in Functions,  Next: PowerPC Built-in Functions,  Prev: NDS32 Built-in Functions,  Up: Target Builtins
36274
362756.58.18 picoChip Built-in Functions
36276-----------------------------------
36277
36278GCC provides an interface to selected machine instructions from the
36279picoChip instruction set.
36280
36281`int __builtin_sbc (int VALUE)'
36282     Sign bit count.  Return the number of consecutive bits in VALUE
36283     that have the same value as the sign bit.  The result is the
36284     number of leading sign bits minus one, giving the number of
36285     redundant sign bits in VALUE.
36286
36287`int __builtin_byteswap (int VALUE)'
36288     Byte swap.  Return the result of swapping the upper and lower
36289     bytes of VALUE.
36290
36291`int __builtin_brev (int VALUE)'
36292     Bit reversal.  Return the result of reversing the bits in VALUE.
36293     Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
36294     on.
36295
36296`int __builtin_adds (int X, int Y)'
36297     Saturating addition.  Return the result of adding X and Y, storing
36298     the value 32767 if the result overflows.
36299
36300`int __builtin_subs (int X, int Y)'
36301     Saturating subtraction.  Return the result of subtracting Y from
36302     X, storing the value -32768 if the result overflows.
36303
36304`void __builtin_halt (void)'
36305     Halt.  The processor stops execution.  This built-in is useful for
36306     implementing assertions.
36307
36308
36309
36310File: gcc.info,  Node: PowerPC Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins
36311
363126.58.19 PowerPC Built-in Functions
36313----------------------------------
36314
36315These built-in functions are available for the PowerPC family of
36316processors:
36317     float __builtin_recipdivf (float, float);
36318     float __builtin_rsqrtf (float);
36319     double __builtin_recipdiv (double, double);
36320     double __builtin_rsqrt (double);
36321     uint64_t __builtin_ppc_get_timebase ();
36322     unsigned long __builtin_ppc_mftb ();
36323     double __builtin_unpack_longdouble (long double, int);
36324     long double __builtin_pack_longdouble (double, double);
36325
36326 The `vec_rsqrt', `__builtin_rsqrt', and `__builtin_rsqrtf' functions
36327generate multiple instructions to implement the reciprocal sqrt
36328functionality using reciprocal sqrt estimate instructions.
36329
36330 The `__builtin_recipdiv', and `__builtin_recipdivf' functions generate
36331multiple instructions to implement division using the reciprocal
36332estimate instructions.
36333
36334 The `__builtin_ppc_get_timebase' and `__builtin_ppc_mftb' functions
36335generate instructions to read the Time Base Register.  The
36336`__builtin_ppc_get_timebase' function may generate multiple
36337instructions and always returns the 64 bits of the Time Base Register.
36338The `__builtin_ppc_mftb' function always generates one instruction and
36339returns the Time Base Register value as an unsigned long, throwing away
36340the most significant word on 32-bit environments.
36341
36342 The following built-in functions are available for the PowerPC family
36343of processors, starting with ISA 2.06 or later (`-mcpu=power7' or
36344`-mpopcntd'):
36345     long __builtin_bpermd (long, long);
36346     int __builtin_divwe (int, int);
36347     int __builtin_divweo (int, int);
36348     unsigned int __builtin_divweu (unsigned int, unsigned int);
36349     unsigned int __builtin_divweuo (unsigned int, unsigned int);
36350     long __builtin_divde (long, long);
36351     long __builtin_divdeo (long, long);
36352     unsigned long __builtin_divdeu (unsigned long, unsigned long);
36353     unsigned long __builtin_divdeuo (unsigned long, unsigned long);
36354     unsigned int cdtbcd (unsigned int);
36355     unsigned int cbcdtd (unsigned int);
36356     unsigned int addg6s (unsigned int, unsigned int);
36357
36358 The `__builtin_divde', `__builtin_divdeo', `__builtin_divdeu',
36359`__builtin_divdeou' functions require a 64-bit environment support ISA
363602.06 or later.
36361
36362 The following built-in functions are available for the PowerPC family
36363of processors when hardware decimal floating point (`-mhard-dfp') is
36364available:
36365     _Decimal64 __builtin_dxex (_Decimal64);
36366     _Decimal128 __builtin_dxexq (_Decimal128);
36367     _Decimal64 __builtin_ddedpd (int, _Decimal64);
36368     _Decimal128 __builtin_ddedpdq (int, _Decimal128);
36369     _Decimal64 __builtin_denbcd (int, _Decimal64);
36370     _Decimal128 __builtin_denbcdq (int, _Decimal128);
36371     _Decimal64 __builtin_diex (_Decimal64, _Decimal64);
36372     _Decimal128 _builtin_diexq (_Decimal128, _Decimal128);
36373     _Decimal64 __builtin_dscli (_Decimal64, int);
36374     _Decimal128 __builtin_dscliq (_Decimal128, int);
36375     _Decimal64 __builtin_dscri (_Decimal64, int);
36376     _Decimal128 __builtin_dscriq (_Decimal128, int);
36377     unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
36378     _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
36379
36380 The following built-in functions are available for the PowerPC family
36381of processors when the Vector Scalar (vsx) instruction set is available:
36382     unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int);
36383     vector __int128_t __builtin_pack_vector_int128 (unsigned long long,
36384                                                     unsigned long long);
36385
36386
36387File: 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
36388
363896.58.20 PowerPC AltiVec Built-in Functions
36390------------------------------------------
36391
36392GCC provides an interface for the PowerPC family of processors to access
36393the AltiVec operations described in Motorola's AltiVec Programming
36394Interface Manual.  The interface is made available by including
36395`<altivec.h>' and using `-maltivec' and `-mabi=altivec'.  The interface
36396supports the following vector types.
36397
36398     vector unsigned char
36399     vector signed char
36400     vector bool char
36401
36402     vector unsigned short
36403     vector signed short
36404     vector bool short
36405     vector pixel
36406
36407     vector unsigned int
36408     vector signed int
36409     vector bool int
36410     vector float
36411
36412 If `-mvsx' is used the following additional vector types are
36413implemented.
36414
36415     vector unsigned long
36416     vector signed long
36417     vector double
36418
36419 The long types are only implemented for 64-bit code generation, and
36420the long type is only used in the floating point/integer conversion
36421instructions.
36422
36423 GCC's implementation of the high-level language interface available
36424from C and C++ code differs from Motorola's documentation in several
36425ways.
36426
36427   * A vector constant is a list of constant expressions within curly
36428     braces.
36429
36430   * A vector initializer requires no cast if the vector constant is of
36431     the same type as the variable it is initializing.
36432
36433   * If `signed' or `unsigned' is omitted, the signedness of the vector
36434     type is the default signedness of the base type.  The default
36435     varies depending on the operating system, so a portable program
36436     should always specify the signedness.
36437
36438   * Compiling with `-maltivec' adds keywords `__vector', `vector',
36439     `__pixel', `pixel', `__bool' and `bool'.  When compiling ISO C,
36440     the context-sensitive substitution of the keywords `vector',
36441     `pixel' and `bool' is disabled.  To use them, you must include
36442     `<altivec.h>' instead.
36443
36444   * GCC allows using a `typedef' name as the type specifier for a
36445     vector type.
36446
36447   * For C, overloaded functions are implemented with macros so the
36448     following does not work:
36449
36450            vec_add ((vector signed int){1, 2, 3, 4}, foo);
36451
36452     Since `vec_add' is a macro, the vector constant in the example is
36453     treated as four separate arguments.  Wrap the entire argument in
36454     parentheses for this to work.
36455
36456 _Note:_ Only the `<altivec.h>' interface is supported.  Internally,
36457GCC uses built-in functions to achieve the functionality in the
36458aforementioned header file, but they are not supported and are subject
36459to change without notice.
36460
36461 The following interfaces are supported for the generic and specific
36462AltiVec operations and the AltiVec predicates.  In cases where there is
36463a direct mapping between generic and specific operations, only the
36464generic names are shown here, although the specific operations can also
36465be used.
36466
36467 Arguments that are documented as `const int' require literal integral
36468values within the range required for that operation.
36469
36470     vector signed char vec_abs (vector signed char);
36471     vector signed short vec_abs (vector signed short);
36472     vector signed int vec_abs (vector signed int);
36473     vector float vec_abs (vector float);
36474
36475     vector signed char vec_abss (vector signed char);
36476     vector signed short vec_abss (vector signed short);
36477     vector signed int vec_abss (vector signed int);
36478
36479     vector signed char vec_add (vector bool char, vector signed char);
36480     vector signed char vec_add (vector signed char, vector bool char);
36481     vector signed char vec_add (vector signed char, vector signed char);
36482     vector unsigned char vec_add (vector bool char, vector unsigned char);
36483     vector unsigned char vec_add (vector unsigned char, vector bool char);
36484     vector unsigned char vec_add (vector unsigned char,
36485                                   vector unsigned char);
36486     vector signed short vec_add (vector bool short, vector signed short);
36487     vector signed short vec_add (vector signed short, vector bool short);
36488     vector signed short vec_add (vector signed short, vector signed short);
36489     vector unsigned short vec_add (vector bool short,
36490                                    vector unsigned short);
36491     vector unsigned short vec_add (vector unsigned short,
36492                                    vector bool short);
36493     vector unsigned short vec_add (vector unsigned short,
36494                                    vector unsigned short);
36495     vector signed int vec_add (vector bool int, vector signed int);
36496     vector signed int vec_add (vector signed int, vector bool int);
36497     vector signed int vec_add (vector signed int, vector signed int);
36498     vector unsigned int vec_add (vector bool int, vector unsigned int);
36499     vector unsigned int vec_add (vector unsigned int, vector bool int);
36500     vector unsigned int vec_add (vector unsigned int, vector unsigned int);
36501     vector float vec_add (vector float, vector float);
36502
36503     vector float vec_vaddfp (vector float, vector float);
36504
36505     vector signed int vec_vadduwm (vector bool int, vector signed int);
36506     vector signed int vec_vadduwm (vector signed int, vector bool int);
36507     vector signed int vec_vadduwm (vector signed int, vector signed int);
36508     vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
36509     vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
36510     vector unsigned int vec_vadduwm (vector unsigned int,
36511                                      vector unsigned int);
36512
36513     vector signed short vec_vadduhm (vector bool short,
36514                                      vector signed short);
36515     vector signed short vec_vadduhm (vector signed short,
36516                                      vector bool short);
36517     vector signed short vec_vadduhm (vector signed short,
36518                                      vector signed short);
36519     vector unsigned short vec_vadduhm (vector bool short,
36520                                        vector unsigned short);
36521     vector unsigned short vec_vadduhm (vector unsigned short,
36522                                        vector bool short);
36523     vector unsigned short vec_vadduhm (vector unsigned short,
36524                                        vector unsigned short);
36525
36526     vector signed char vec_vaddubm (vector bool char, vector signed char);
36527     vector signed char vec_vaddubm (vector signed char, vector bool char);
36528     vector signed char vec_vaddubm (vector signed char, vector signed char);
36529     vector unsigned char vec_vaddubm (vector bool char,
36530                                       vector unsigned char);
36531     vector unsigned char vec_vaddubm (vector unsigned char,
36532                                       vector bool char);
36533     vector unsigned char vec_vaddubm (vector unsigned char,
36534                                       vector unsigned char);
36535
36536     vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
36537
36538     vector unsigned char vec_adds (vector bool char, vector unsigned char);
36539     vector unsigned char vec_adds (vector unsigned char, vector bool char);
36540     vector unsigned char vec_adds (vector unsigned char,
36541                                    vector unsigned char);
36542     vector signed char vec_adds (vector bool char, vector signed char);
36543     vector signed char vec_adds (vector signed char, vector bool char);
36544     vector signed char vec_adds (vector signed char, vector signed char);
36545     vector unsigned short vec_adds (vector bool short,
36546                                     vector unsigned short);
36547     vector unsigned short vec_adds (vector unsigned short,
36548                                     vector bool short);
36549     vector unsigned short vec_adds (vector unsigned short,
36550                                     vector unsigned short);
36551     vector signed short vec_adds (vector bool short, vector signed short);
36552     vector signed short vec_adds (vector signed short, vector bool short);
36553     vector signed short vec_adds (vector signed short, vector signed short);
36554     vector unsigned int vec_adds (vector bool int, vector unsigned int);
36555     vector unsigned int vec_adds (vector unsigned int, vector bool int);
36556     vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
36557     vector signed int vec_adds (vector bool int, vector signed int);
36558     vector signed int vec_adds (vector signed int, vector bool int);
36559     vector signed int vec_adds (vector signed int, vector signed int);
36560
36561     vector signed int vec_vaddsws (vector bool int, vector signed int);
36562     vector signed int vec_vaddsws (vector signed int, vector bool int);
36563     vector signed int vec_vaddsws (vector signed int, vector signed int);
36564
36565     vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
36566     vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
36567     vector unsigned int vec_vadduws (vector unsigned int,
36568                                      vector unsigned int);
36569
36570     vector signed short vec_vaddshs (vector bool short,
36571                                      vector signed short);
36572     vector signed short vec_vaddshs (vector signed short,
36573                                      vector bool short);
36574     vector signed short vec_vaddshs (vector signed short,
36575                                      vector signed short);
36576
36577     vector unsigned short vec_vadduhs (vector bool short,
36578                                        vector unsigned short);
36579     vector unsigned short vec_vadduhs (vector unsigned short,
36580                                        vector bool short);
36581     vector unsigned short vec_vadduhs (vector unsigned short,
36582                                        vector unsigned short);
36583
36584     vector signed char vec_vaddsbs (vector bool char, vector signed char);
36585     vector signed char vec_vaddsbs (vector signed char, vector bool char);
36586     vector signed char vec_vaddsbs (vector signed char, vector signed char);
36587
36588     vector unsigned char vec_vaddubs (vector bool char,
36589                                       vector unsigned char);
36590     vector unsigned char vec_vaddubs (vector unsigned char,
36591                                       vector bool char);
36592     vector unsigned char vec_vaddubs (vector unsigned char,
36593                                       vector unsigned char);
36594
36595     vector float vec_and (vector float, vector float);
36596     vector float vec_and (vector float, vector bool int);
36597     vector float vec_and (vector bool int, vector float);
36598     vector bool int vec_and (vector bool int, vector bool int);
36599     vector signed int vec_and (vector bool int, vector signed int);
36600     vector signed int vec_and (vector signed int, vector bool int);
36601     vector signed int vec_and (vector signed int, vector signed int);
36602     vector unsigned int vec_and (vector bool int, vector unsigned int);
36603     vector unsigned int vec_and (vector unsigned int, vector bool int);
36604     vector unsigned int vec_and (vector unsigned int, vector unsigned int);
36605     vector bool short vec_and (vector bool short, vector bool short);
36606     vector signed short vec_and (vector bool short, vector signed short);
36607     vector signed short vec_and (vector signed short, vector bool short);
36608     vector signed short vec_and (vector signed short, vector signed short);
36609     vector unsigned short vec_and (vector bool short,
36610                                    vector unsigned short);
36611     vector unsigned short vec_and (vector unsigned short,
36612                                    vector bool short);
36613     vector unsigned short vec_and (vector unsigned short,
36614                                    vector unsigned short);
36615     vector signed char vec_and (vector bool char, vector signed char);
36616     vector bool char vec_and (vector bool char, vector bool char);
36617     vector signed char vec_and (vector signed char, vector bool char);
36618     vector signed char vec_and (vector signed char, vector signed char);
36619     vector unsigned char vec_and (vector bool char, vector unsigned char);
36620     vector unsigned char vec_and (vector unsigned char, vector bool char);
36621     vector unsigned char vec_and (vector unsigned char,
36622                                   vector unsigned char);
36623
36624     vector float vec_andc (vector float, vector float);
36625     vector float vec_andc (vector float, vector bool int);
36626     vector float vec_andc (vector bool int, vector float);
36627     vector bool int vec_andc (vector bool int, vector bool int);
36628     vector signed int vec_andc (vector bool int, vector signed int);
36629     vector signed int vec_andc (vector signed int, vector bool int);
36630     vector signed int vec_andc (vector signed int, vector signed int);
36631     vector unsigned int vec_andc (vector bool int, vector unsigned int);
36632     vector unsigned int vec_andc (vector unsigned int, vector bool int);
36633     vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
36634     vector bool short vec_andc (vector bool short, vector bool short);
36635     vector signed short vec_andc (vector bool short, vector signed short);
36636     vector signed short vec_andc (vector signed short, vector bool short);
36637     vector signed short vec_andc (vector signed short, vector signed short);
36638     vector unsigned short vec_andc (vector bool short,
36639                                     vector unsigned short);
36640     vector unsigned short vec_andc (vector unsigned short,
36641                                     vector bool short);
36642     vector unsigned short vec_andc (vector unsigned short,
36643                                     vector unsigned short);
36644     vector signed char vec_andc (vector bool char, vector signed char);
36645     vector bool char vec_andc (vector bool char, vector bool char);
36646     vector signed char vec_andc (vector signed char, vector bool char);
36647     vector signed char vec_andc (vector signed char, vector signed char);
36648     vector unsigned char vec_andc (vector bool char, vector unsigned char);
36649     vector unsigned char vec_andc (vector unsigned char, vector bool char);
36650     vector unsigned char vec_andc (vector unsigned char,
36651                                    vector unsigned char);
36652
36653     vector unsigned char vec_avg (vector unsigned char,
36654                                   vector unsigned char);
36655     vector signed char vec_avg (vector signed char, vector signed char);
36656     vector unsigned short vec_avg (vector unsigned short,
36657                                    vector unsigned short);
36658     vector signed short vec_avg (vector signed short, vector signed short);
36659     vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
36660     vector signed int vec_avg (vector signed int, vector signed int);
36661
36662     vector signed int vec_vavgsw (vector signed int, vector signed int);
36663
36664     vector unsigned int vec_vavguw (vector unsigned int,
36665                                     vector unsigned int);
36666
36667     vector signed short vec_vavgsh (vector signed short,
36668                                     vector signed short);
36669
36670     vector unsigned short vec_vavguh (vector unsigned short,
36671                                       vector unsigned short);
36672
36673     vector signed char vec_vavgsb (vector signed char, vector signed char);
36674
36675     vector unsigned char vec_vavgub (vector unsigned char,
36676                                      vector unsigned char);
36677
36678     vector float vec_copysign (vector float);
36679
36680     vector float vec_ceil (vector float);
36681
36682     vector signed int vec_cmpb (vector float, vector float);
36683
36684     vector bool char vec_cmpeq (vector signed char, vector signed char);
36685     vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
36686     vector bool short vec_cmpeq (vector signed short, vector signed short);
36687     vector bool short vec_cmpeq (vector unsigned short,
36688                                  vector unsigned short);
36689     vector bool int vec_cmpeq (vector signed int, vector signed int);
36690     vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
36691     vector bool int vec_cmpeq (vector float, vector float);
36692
36693     vector bool int vec_vcmpeqfp (vector float, vector float);
36694
36695     vector bool int vec_vcmpequw (vector signed int, vector signed int);
36696     vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
36697
36698     vector bool short vec_vcmpequh (vector signed short,
36699                                     vector signed short);
36700     vector bool short vec_vcmpequh (vector unsigned short,
36701                                     vector unsigned short);
36702
36703     vector bool char vec_vcmpequb (vector signed char, vector signed char);
36704     vector bool char vec_vcmpequb (vector unsigned char,
36705                                    vector unsigned char);
36706
36707     vector bool int vec_cmpge (vector float, vector float);
36708
36709     vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
36710     vector bool char vec_cmpgt (vector signed char, vector signed char);
36711     vector bool short vec_cmpgt (vector unsigned short,
36712                                  vector unsigned short);
36713     vector bool short vec_cmpgt (vector signed short, vector signed short);
36714     vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
36715     vector bool int vec_cmpgt (vector signed int, vector signed int);
36716     vector bool int vec_cmpgt (vector float, vector float);
36717
36718     vector bool int vec_vcmpgtfp (vector float, vector float);
36719
36720     vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
36721
36722     vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
36723
36724     vector bool short vec_vcmpgtsh (vector signed short,
36725                                     vector signed short);
36726
36727     vector bool short vec_vcmpgtuh (vector unsigned short,
36728                                     vector unsigned short);
36729
36730     vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
36731
36732     vector bool char vec_vcmpgtub (vector unsigned char,
36733                                    vector unsigned char);
36734
36735     vector bool int vec_cmple (vector float, vector float);
36736
36737     vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
36738     vector bool char vec_cmplt (vector signed char, vector signed char);
36739     vector bool short vec_cmplt (vector unsigned short,
36740                                  vector unsigned short);
36741     vector bool short vec_cmplt (vector signed short, vector signed short);
36742     vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
36743     vector bool int vec_cmplt (vector signed int, vector signed int);
36744     vector bool int vec_cmplt (vector float, vector float);
36745
36746     vector float vec_cpsgn (vector float, vector float);
36747
36748     vector float vec_ctf (vector unsigned int, const int);
36749     vector float vec_ctf (vector signed int, const int);
36750     vector double vec_ctf (vector unsigned long, const int);
36751     vector double vec_ctf (vector signed long, const int);
36752
36753     vector float vec_vcfsx (vector signed int, const int);
36754
36755     vector float vec_vcfux (vector unsigned int, const int);
36756
36757     vector signed int vec_cts (vector float, const int);
36758     vector signed long vec_cts (vector double, const int);
36759
36760     vector unsigned int vec_ctu (vector float, const int);
36761     vector unsigned long vec_ctu (vector double, const int);
36762
36763     void vec_dss (const int);
36764
36765     void vec_dssall (void);
36766
36767     void vec_dst (const vector unsigned char *, int, const int);
36768     void vec_dst (const vector signed char *, int, const int);
36769     void vec_dst (const vector bool char *, int, const int);
36770     void vec_dst (const vector unsigned short *, int, const int);
36771     void vec_dst (const vector signed short *, int, const int);
36772     void vec_dst (const vector bool short *, int, const int);
36773     void vec_dst (const vector pixel *, int, const int);
36774     void vec_dst (const vector unsigned int *, int, const int);
36775     void vec_dst (const vector signed int *, int, const int);
36776     void vec_dst (const vector bool int *, int, const int);
36777     void vec_dst (const vector float *, int, const int);
36778     void vec_dst (const unsigned char *, int, const int);
36779     void vec_dst (const signed char *, int, const int);
36780     void vec_dst (const unsigned short *, int, const int);
36781     void vec_dst (const short *, int, const int);
36782     void vec_dst (const unsigned int *, int, const int);
36783     void vec_dst (const int *, int, const int);
36784     void vec_dst (const unsigned long *, int, const int);
36785     void vec_dst (const long *, int, const int);
36786     void vec_dst (const float *, int, const int);
36787
36788     void vec_dstst (const vector unsigned char *, int, const int);
36789     void vec_dstst (const vector signed char *, int, const int);
36790     void vec_dstst (const vector bool char *, int, const int);
36791     void vec_dstst (const vector unsigned short *, int, const int);
36792     void vec_dstst (const vector signed short *, int, const int);
36793     void vec_dstst (const vector bool short *, int, const int);
36794     void vec_dstst (const vector pixel *, int, const int);
36795     void vec_dstst (const vector unsigned int *, int, const int);
36796     void vec_dstst (const vector signed int *, int, const int);
36797     void vec_dstst (const vector bool int *, int, const int);
36798     void vec_dstst (const vector float *, int, const int);
36799     void vec_dstst (const unsigned char *, int, const int);
36800     void vec_dstst (const signed char *, int, const int);
36801     void vec_dstst (const unsigned short *, int, const int);
36802     void vec_dstst (const short *, int, const int);
36803     void vec_dstst (const unsigned int *, int, const int);
36804     void vec_dstst (const int *, int, const int);
36805     void vec_dstst (const unsigned long *, int, const int);
36806     void vec_dstst (const long *, int, const int);
36807     void vec_dstst (const float *, int, const int);
36808
36809     void vec_dststt (const vector unsigned char *, int, const int);
36810     void vec_dststt (const vector signed char *, int, const int);
36811     void vec_dststt (const vector bool char *, int, const int);
36812     void vec_dststt (const vector unsigned short *, int, const int);
36813     void vec_dststt (const vector signed short *, int, const int);
36814     void vec_dststt (const vector bool short *, int, const int);
36815     void vec_dststt (const vector pixel *, int, const int);
36816     void vec_dststt (const vector unsigned int *, int, const int);
36817     void vec_dststt (const vector signed int *, int, const int);
36818     void vec_dststt (const vector bool int *, int, const int);
36819     void vec_dststt (const vector float *, int, const int);
36820     void vec_dststt (const unsigned char *, int, const int);
36821     void vec_dststt (const signed char *, int, const int);
36822     void vec_dststt (const unsigned short *, int, const int);
36823     void vec_dststt (const short *, int, const int);
36824     void vec_dststt (const unsigned int *, int, const int);
36825     void vec_dststt (const int *, int, const int);
36826     void vec_dststt (const unsigned long *, int, const int);
36827     void vec_dststt (const long *, int, const int);
36828     void vec_dststt (const float *, int, const int);
36829
36830     void vec_dstt (const vector unsigned char *, int, const int);
36831     void vec_dstt (const vector signed char *, int, const int);
36832     void vec_dstt (const vector bool char *, int, const int);
36833     void vec_dstt (const vector unsigned short *, int, const int);
36834     void vec_dstt (const vector signed short *, int, const int);
36835     void vec_dstt (const vector bool short *, int, const int);
36836     void vec_dstt (const vector pixel *, int, const int);
36837     void vec_dstt (const vector unsigned int *, int, const int);
36838     void vec_dstt (const vector signed int *, int, const int);
36839     void vec_dstt (const vector bool int *, int, const int);
36840     void vec_dstt (const vector float *, int, const int);
36841     void vec_dstt (const unsigned char *, int, const int);
36842     void vec_dstt (const signed char *, int, const int);
36843     void vec_dstt (const unsigned short *, int, const int);
36844     void vec_dstt (const short *, int, const int);
36845     void vec_dstt (const unsigned int *, int, const int);
36846     void vec_dstt (const int *, int, const int);
36847     void vec_dstt (const unsigned long *, int, const int);
36848     void vec_dstt (const long *, int, const int);
36849     void vec_dstt (const float *, int, const int);
36850
36851     vector float vec_expte (vector float);
36852
36853     vector float vec_floor (vector float);
36854
36855     vector float vec_ld (int, const vector float *);
36856     vector float vec_ld (int, const float *);
36857     vector bool int vec_ld (int, const vector bool int *);
36858     vector signed int vec_ld (int, const vector signed int *);
36859     vector signed int vec_ld (int, const int *);
36860     vector signed int vec_ld (int, const long *);
36861     vector unsigned int vec_ld (int, const vector unsigned int *);
36862     vector unsigned int vec_ld (int, const unsigned int *);
36863     vector unsigned int vec_ld (int, const unsigned long *);
36864     vector bool short vec_ld (int, const vector bool short *);
36865     vector pixel vec_ld (int, const vector pixel *);
36866     vector signed short vec_ld (int, const vector signed short *);
36867     vector signed short vec_ld (int, const short *);
36868     vector unsigned short vec_ld (int, const vector unsigned short *);
36869     vector unsigned short vec_ld (int, const unsigned short *);
36870     vector bool char vec_ld (int, const vector bool char *);
36871     vector signed char vec_ld (int, const vector signed char *);
36872     vector signed char vec_ld (int, const signed char *);
36873     vector unsigned char vec_ld (int, const vector unsigned char *);
36874     vector unsigned char vec_ld (int, const unsigned char *);
36875
36876     vector signed char vec_lde (int, const signed char *);
36877     vector unsigned char vec_lde (int, const unsigned char *);
36878     vector signed short vec_lde (int, const short *);
36879     vector unsigned short vec_lde (int, const unsigned short *);
36880     vector float vec_lde (int, const float *);
36881     vector signed int vec_lde (int, const int *);
36882     vector unsigned int vec_lde (int, const unsigned int *);
36883     vector signed int vec_lde (int, const long *);
36884     vector unsigned int vec_lde (int, const unsigned long *);
36885
36886     vector float vec_lvewx (int, float *);
36887     vector signed int vec_lvewx (int, int *);
36888     vector unsigned int vec_lvewx (int, unsigned int *);
36889     vector signed int vec_lvewx (int, long *);
36890     vector unsigned int vec_lvewx (int, unsigned long *);
36891
36892     vector signed short vec_lvehx (int, short *);
36893     vector unsigned short vec_lvehx (int, unsigned short *);
36894
36895     vector signed char vec_lvebx (int, char *);
36896     vector unsigned char vec_lvebx (int, unsigned char *);
36897
36898     vector float vec_ldl (int, const vector float *);
36899     vector float vec_ldl (int, const float *);
36900     vector bool int vec_ldl (int, const vector bool int *);
36901     vector signed int vec_ldl (int, const vector signed int *);
36902     vector signed int vec_ldl (int, const int *);
36903     vector signed int vec_ldl (int, const long *);
36904     vector unsigned int vec_ldl (int, const vector unsigned int *);
36905     vector unsigned int vec_ldl (int, const unsigned int *);
36906     vector unsigned int vec_ldl (int, const unsigned long *);
36907     vector bool short vec_ldl (int, const vector bool short *);
36908     vector pixel vec_ldl (int, const vector pixel *);
36909     vector signed short vec_ldl (int, const vector signed short *);
36910     vector signed short vec_ldl (int, const short *);
36911     vector unsigned short vec_ldl (int, const vector unsigned short *);
36912     vector unsigned short vec_ldl (int, const unsigned short *);
36913     vector bool char vec_ldl (int, const vector bool char *);
36914     vector signed char vec_ldl (int, const vector signed char *);
36915     vector signed char vec_ldl (int, const signed char *);
36916     vector unsigned char vec_ldl (int, const vector unsigned char *);
36917     vector unsigned char vec_ldl (int, const unsigned char *);
36918
36919     vector float vec_loge (vector float);
36920
36921     vector unsigned char vec_lvsl (int, const volatile unsigned char *);
36922     vector unsigned char vec_lvsl (int, const volatile signed char *);
36923     vector unsigned char vec_lvsl (int, const volatile unsigned short *);
36924     vector unsigned char vec_lvsl (int, const volatile short *);
36925     vector unsigned char vec_lvsl (int, const volatile unsigned int *);
36926     vector unsigned char vec_lvsl (int, const volatile int *);
36927     vector unsigned char vec_lvsl (int, const volatile unsigned long *);
36928     vector unsigned char vec_lvsl (int, const volatile long *);
36929     vector unsigned char vec_lvsl (int, const volatile float *);
36930
36931     vector unsigned char vec_lvsr (int, const volatile unsigned char *);
36932     vector unsigned char vec_lvsr (int, const volatile signed char *);
36933     vector unsigned char vec_lvsr (int, const volatile unsigned short *);
36934     vector unsigned char vec_lvsr (int, const volatile short *);
36935     vector unsigned char vec_lvsr (int, const volatile unsigned int *);
36936     vector unsigned char vec_lvsr (int, const volatile int *);
36937     vector unsigned char vec_lvsr (int, const volatile unsigned long *);
36938     vector unsigned char vec_lvsr (int, const volatile long *);
36939     vector unsigned char vec_lvsr (int, const volatile float *);
36940
36941     vector float vec_madd (vector float, vector float, vector float);
36942
36943     vector signed short vec_madds (vector signed short,
36944                                    vector signed short,
36945                                    vector signed short);
36946
36947     vector unsigned char vec_max (vector bool char, vector unsigned char);
36948     vector unsigned char vec_max (vector unsigned char, vector bool char);
36949     vector unsigned char vec_max (vector unsigned char,
36950                                   vector unsigned char);
36951     vector signed char vec_max (vector bool char, vector signed char);
36952     vector signed char vec_max (vector signed char, vector bool char);
36953     vector signed char vec_max (vector signed char, vector signed char);
36954     vector unsigned short vec_max (vector bool short,
36955                                    vector unsigned short);
36956     vector unsigned short vec_max (vector unsigned short,
36957                                    vector bool short);
36958     vector unsigned short vec_max (vector unsigned short,
36959                                    vector unsigned short);
36960     vector signed short vec_max (vector bool short, vector signed short);
36961     vector signed short vec_max (vector signed short, vector bool short);
36962     vector signed short vec_max (vector signed short, vector signed short);
36963     vector unsigned int vec_max (vector bool int, vector unsigned int);
36964     vector unsigned int vec_max (vector unsigned int, vector bool int);
36965     vector unsigned int vec_max (vector unsigned int, vector unsigned int);
36966     vector signed int vec_max (vector bool int, vector signed int);
36967     vector signed int vec_max (vector signed int, vector bool int);
36968     vector signed int vec_max (vector signed int, vector signed int);
36969     vector float vec_max (vector float, vector float);
36970
36971     vector float vec_vmaxfp (vector float, vector float);
36972
36973     vector signed int vec_vmaxsw (vector bool int, vector signed int);
36974     vector signed int vec_vmaxsw (vector signed int, vector bool int);
36975     vector signed int vec_vmaxsw (vector signed int, vector signed int);
36976
36977     vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
36978     vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
36979     vector unsigned int vec_vmaxuw (vector unsigned int,
36980                                     vector unsigned int);
36981
36982     vector signed short vec_vmaxsh (vector bool short, vector signed short);
36983     vector signed short vec_vmaxsh (vector signed short, vector bool short);
36984     vector signed short vec_vmaxsh (vector signed short,
36985                                     vector signed short);
36986
36987     vector unsigned short vec_vmaxuh (vector bool short,
36988                                       vector unsigned short);
36989     vector unsigned short vec_vmaxuh (vector unsigned short,
36990                                       vector bool short);
36991     vector unsigned short vec_vmaxuh (vector unsigned short,
36992                                       vector unsigned short);
36993
36994     vector signed char vec_vmaxsb (vector bool char, vector signed char);
36995     vector signed char vec_vmaxsb (vector signed char, vector bool char);
36996     vector signed char vec_vmaxsb (vector signed char, vector signed char);
36997
36998     vector unsigned char vec_vmaxub (vector bool char,
36999                                      vector unsigned char);
37000     vector unsigned char vec_vmaxub (vector unsigned char,
37001                                      vector bool char);
37002     vector unsigned char vec_vmaxub (vector unsigned char,
37003                                      vector unsigned char);
37004
37005     vector bool char vec_mergeh (vector bool char, vector bool char);
37006     vector signed char vec_mergeh (vector signed char, vector signed char);
37007     vector unsigned char vec_mergeh (vector unsigned char,
37008                                      vector unsigned char);
37009     vector bool short vec_mergeh (vector bool short, vector bool short);
37010     vector pixel vec_mergeh (vector pixel, vector pixel);
37011     vector signed short vec_mergeh (vector signed short,
37012                                     vector signed short);
37013     vector unsigned short vec_mergeh (vector unsigned short,
37014                                       vector unsigned short);
37015     vector float vec_mergeh (vector float, vector float);
37016     vector bool int vec_mergeh (vector bool int, vector bool int);
37017     vector signed int vec_mergeh (vector signed int, vector signed int);
37018     vector unsigned int vec_mergeh (vector unsigned int,
37019                                     vector unsigned int);
37020
37021     vector float vec_vmrghw (vector float, vector float);
37022     vector bool int vec_vmrghw (vector bool int, vector bool int);
37023     vector signed int vec_vmrghw (vector signed int, vector signed int);
37024     vector unsigned int vec_vmrghw (vector unsigned int,
37025                                     vector unsigned int);
37026
37027     vector bool short vec_vmrghh (vector bool short, vector bool short);
37028     vector signed short vec_vmrghh (vector signed short,
37029                                     vector signed short);
37030     vector unsigned short vec_vmrghh (vector unsigned short,
37031                                       vector unsigned short);
37032     vector pixel vec_vmrghh (vector pixel, vector pixel);
37033
37034     vector bool char vec_vmrghb (vector bool char, vector bool char);
37035     vector signed char vec_vmrghb (vector signed char, vector signed char);
37036     vector unsigned char vec_vmrghb (vector unsigned char,
37037                                      vector unsigned char);
37038
37039     vector bool char vec_mergel (vector bool char, vector bool char);
37040     vector signed char vec_mergel (vector signed char, vector signed char);
37041     vector unsigned char vec_mergel (vector unsigned char,
37042                                      vector unsigned char);
37043     vector bool short vec_mergel (vector bool short, vector bool short);
37044     vector pixel vec_mergel (vector pixel, vector pixel);
37045     vector signed short vec_mergel (vector signed short,
37046                                     vector signed short);
37047     vector unsigned short vec_mergel (vector unsigned short,
37048                                       vector unsigned short);
37049     vector float vec_mergel (vector float, vector float);
37050     vector bool int vec_mergel (vector bool int, vector bool int);
37051     vector signed int vec_mergel (vector signed int, vector signed int);
37052     vector unsigned int vec_mergel (vector unsigned int,
37053                                     vector unsigned int);
37054
37055     vector float vec_vmrglw (vector float, vector float);
37056     vector signed int vec_vmrglw (vector signed int, vector signed int);
37057     vector unsigned int vec_vmrglw (vector unsigned int,
37058                                     vector unsigned int);
37059     vector bool int vec_vmrglw (vector bool int, vector bool int);
37060
37061     vector bool short vec_vmrglh (vector bool short, vector bool short);
37062     vector signed short vec_vmrglh (vector signed short,
37063                                     vector signed short);
37064     vector unsigned short vec_vmrglh (vector unsigned short,
37065                                       vector unsigned short);
37066     vector pixel vec_vmrglh (vector pixel, vector pixel);
37067
37068     vector bool char vec_vmrglb (vector bool char, vector bool char);
37069     vector signed char vec_vmrglb (vector signed char, vector signed char);
37070     vector unsigned char vec_vmrglb (vector unsigned char,
37071                                      vector unsigned char);
37072
37073     vector unsigned short vec_mfvscr (void);
37074
37075     vector unsigned char vec_min (vector bool char, vector unsigned char);
37076     vector unsigned char vec_min (vector unsigned char, vector bool char);
37077     vector unsigned char vec_min (vector unsigned char,
37078                                   vector unsigned char);
37079     vector signed char vec_min (vector bool char, vector signed char);
37080     vector signed char vec_min (vector signed char, vector bool char);
37081     vector signed char vec_min (vector signed char, vector signed char);
37082     vector unsigned short vec_min (vector bool short,
37083                                    vector unsigned short);
37084     vector unsigned short vec_min (vector unsigned short,
37085                                    vector bool short);
37086     vector unsigned short vec_min (vector unsigned short,
37087                                    vector unsigned short);
37088     vector signed short vec_min (vector bool short, vector signed short);
37089     vector signed short vec_min (vector signed short, vector bool short);
37090     vector signed short vec_min (vector signed short, vector signed short);
37091     vector unsigned int vec_min (vector bool int, vector unsigned int);
37092     vector unsigned int vec_min (vector unsigned int, vector bool int);
37093     vector unsigned int vec_min (vector unsigned int, vector unsigned int);
37094     vector signed int vec_min (vector bool int, vector signed int);
37095     vector signed int vec_min (vector signed int, vector bool int);
37096     vector signed int vec_min (vector signed int, vector signed int);
37097     vector float vec_min (vector float, vector float);
37098
37099     vector float vec_vminfp (vector float, vector float);
37100
37101     vector signed int vec_vminsw (vector bool int, vector signed int);
37102     vector signed int vec_vminsw (vector signed int, vector bool int);
37103     vector signed int vec_vminsw (vector signed int, vector signed int);
37104
37105     vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
37106     vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
37107     vector unsigned int vec_vminuw (vector unsigned int,
37108                                     vector unsigned int);
37109
37110     vector signed short vec_vminsh (vector bool short, vector signed short);
37111     vector signed short vec_vminsh (vector signed short, vector bool short);
37112     vector signed short vec_vminsh (vector signed short,
37113                                     vector signed short);
37114
37115     vector unsigned short vec_vminuh (vector bool short,
37116                                       vector unsigned short);
37117     vector unsigned short vec_vminuh (vector unsigned short,
37118                                       vector bool short);
37119     vector unsigned short vec_vminuh (vector unsigned short,
37120                                       vector unsigned short);
37121
37122     vector signed char vec_vminsb (vector bool char, vector signed char);
37123     vector signed char vec_vminsb (vector signed char, vector bool char);
37124     vector signed char vec_vminsb (vector signed char, vector signed char);
37125
37126     vector unsigned char vec_vminub (vector bool char,
37127                                      vector unsigned char);
37128     vector unsigned char vec_vminub (vector unsigned char,
37129                                      vector bool char);
37130     vector unsigned char vec_vminub (vector unsigned char,
37131                                      vector unsigned char);
37132
37133     vector signed short vec_mladd (vector signed short,
37134                                    vector signed short,
37135                                    vector signed short);
37136     vector signed short vec_mladd (vector signed short,
37137                                    vector unsigned short,
37138                                    vector unsigned short);
37139     vector signed short vec_mladd (vector unsigned short,
37140                                    vector signed short,
37141                                    vector signed short);
37142     vector unsigned short vec_mladd (vector unsigned short,
37143                                      vector unsigned short,
37144                                      vector unsigned short);
37145
37146     vector signed short vec_mradds (vector signed short,
37147                                     vector signed short,
37148                                     vector signed short);
37149
37150     vector unsigned int vec_msum (vector unsigned char,
37151                                   vector unsigned char,
37152                                   vector unsigned int);
37153     vector signed int vec_msum (vector signed char,
37154                                 vector unsigned char,
37155                                 vector signed int);
37156     vector unsigned int vec_msum (vector unsigned short,
37157                                   vector unsigned short,
37158                                   vector unsigned int);
37159     vector signed int vec_msum (vector signed short,
37160                                 vector signed short,
37161                                 vector signed int);
37162
37163     vector signed int vec_vmsumshm (vector signed short,
37164                                     vector signed short,
37165                                     vector signed int);
37166
37167     vector unsigned int vec_vmsumuhm (vector unsigned short,
37168                                       vector unsigned short,
37169                                       vector unsigned int);
37170
37171     vector signed int vec_vmsummbm (vector signed char,
37172                                     vector unsigned char,
37173                                     vector signed int);
37174
37175     vector unsigned int vec_vmsumubm (vector unsigned char,
37176                                       vector unsigned char,
37177                                       vector unsigned int);
37178
37179     vector unsigned int vec_msums (vector unsigned short,
37180                                    vector unsigned short,
37181                                    vector unsigned int);
37182     vector signed int vec_msums (vector signed short,
37183                                  vector signed short,
37184                                  vector signed int);
37185
37186     vector signed int vec_vmsumshs (vector signed short,
37187                                     vector signed short,
37188                                     vector signed int);
37189
37190     vector unsigned int vec_vmsumuhs (vector unsigned short,
37191                                       vector unsigned short,
37192                                       vector unsigned int);
37193
37194     void vec_mtvscr (vector signed int);
37195     void vec_mtvscr (vector unsigned int);
37196     void vec_mtvscr (vector bool int);
37197     void vec_mtvscr (vector signed short);
37198     void vec_mtvscr (vector unsigned short);
37199     void vec_mtvscr (vector bool short);
37200     void vec_mtvscr (vector pixel);
37201     void vec_mtvscr (vector signed char);
37202     void vec_mtvscr (vector unsigned char);
37203     void vec_mtvscr (vector bool char);
37204
37205     vector unsigned short vec_mule (vector unsigned char,
37206                                     vector unsigned char);
37207     vector signed short vec_mule (vector signed char,
37208                                   vector signed char);
37209     vector unsigned int vec_mule (vector unsigned short,
37210                                   vector unsigned short);
37211     vector signed int vec_mule (vector signed short, vector signed short);
37212
37213     vector signed int vec_vmulesh (vector signed short,
37214                                    vector signed short);
37215
37216     vector unsigned int vec_vmuleuh (vector unsigned short,
37217                                      vector unsigned short);
37218
37219     vector signed short vec_vmulesb (vector signed char,
37220                                      vector signed char);
37221
37222     vector unsigned short vec_vmuleub (vector unsigned char,
37223                                       vector unsigned char);
37224
37225     vector unsigned short vec_mulo (vector unsigned char,
37226                                     vector unsigned char);
37227     vector signed short vec_mulo (vector signed char, vector signed char);
37228     vector unsigned int vec_mulo (vector unsigned short,
37229                                   vector unsigned short);
37230     vector signed int vec_mulo (vector signed short, vector signed short);
37231
37232     vector signed int vec_vmulosh (vector signed short,
37233                                    vector signed short);
37234
37235     vector unsigned int vec_vmulouh (vector unsigned short,
37236                                      vector unsigned short);
37237
37238     vector signed short vec_vmulosb (vector signed char,
37239                                      vector signed char);
37240
37241     vector unsigned short vec_vmuloub (vector unsigned char,
37242                                        vector unsigned char);
37243
37244     vector float vec_nmsub (vector float, vector float, vector float);
37245
37246     vector float vec_nor (vector float, vector float);
37247     vector signed int vec_nor (vector signed int, vector signed int);
37248     vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
37249     vector bool int vec_nor (vector bool int, vector bool int);
37250     vector signed short vec_nor (vector signed short, vector signed short);
37251     vector unsigned short vec_nor (vector unsigned short,
37252                                    vector unsigned short);
37253     vector bool short vec_nor (vector bool short, vector bool short);
37254     vector signed char vec_nor (vector signed char, vector signed char);
37255     vector unsigned char vec_nor (vector unsigned char,
37256                                   vector unsigned char);
37257     vector bool char vec_nor (vector bool char, vector bool char);
37258
37259     vector float vec_or (vector float, vector float);
37260     vector float vec_or (vector float, vector bool int);
37261     vector float vec_or (vector bool int, vector float);
37262     vector bool int vec_or (vector bool int, vector bool int);
37263     vector signed int vec_or (vector bool int, vector signed int);
37264     vector signed int vec_or (vector signed int, vector bool int);
37265     vector signed int vec_or (vector signed int, vector signed int);
37266     vector unsigned int vec_or (vector bool int, vector unsigned int);
37267     vector unsigned int vec_or (vector unsigned int, vector bool int);
37268     vector unsigned int vec_or (vector unsigned int, vector unsigned int);
37269     vector bool short vec_or (vector bool short, vector bool short);
37270     vector signed short vec_or (vector bool short, vector signed short);
37271     vector signed short vec_or (vector signed short, vector bool short);
37272     vector signed short vec_or (vector signed short, vector signed short);
37273     vector unsigned short vec_or (vector bool short, vector unsigned short);
37274     vector unsigned short vec_or (vector unsigned short, vector bool short);
37275     vector unsigned short vec_or (vector unsigned short,
37276                                   vector unsigned short);
37277     vector signed char vec_or (vector bool char, vector signed char);
37278     vector bool char vec_or (vector bool char, vector bool char);
37279     vector signed char vec_or (vector signed char, vector bool char);
37280     vector signed char vec_or (vector signed char, vector signed char);
37281     vector unsigned char vec_or (vector bool char, vector unsigned char);
37282     vector unsigned char vec_or (vector unsigned char, vector bool char);
37283     vector unsigned char vec_or (vector unsigned char,
37284                                  vector unsigned char);
37285
37286     vector signed char vec_pack (vector signed short, vector signed short);
37287     vector unsigned char vec_pack (vector unsigned short,
37288                                    vector unsigned short);
37289     vector bool char vec_pack (vector bool short, vector bool short);
37290     vector signed short vec_pack (vector signed int, vector signed int);
37291     vector unsigned short vec_pack (vector unsigned int,
37292                                     vector unsigned int);
37293     vector bool short vec_pack (vector bool int, vector bool int);
37294
37295     vector bool short vec_vpkuwum (vector bool int, vector bool int);
37296     vector signed short vec_vpkuwum (vector signed int, vector signed int);
37297     vector unsigned short vec_vpkuwum (vector unsigned int,
37298                                        vector unsigned int);
37299
37300     vector bool char vec_vpkuhum (vector bool short, vector bool short);
37301     vector signed char vec_vpkuhum (vector signed short,
37302                                     vector signed short);
37303     vector unsigned char vec_vpkuhum (vector unsigned short,
37304                                       vector unsigned short);
37305
37306     vector pixel vec_packpx (vector unsigned int, vector unsigned int);
37307
37308     vector unsigned char vec_packs (vector unsigned short,
37309                                     vector unsigned short);
37310     vector signed char vec_packs (vector signed short, vector signed short);
37311     vector unsigned short vec_packs (vector unsigned int,
37312                                      vector unsigned int);
37313     vector signed short vec_packs (vector signed int, vector signed int);
37314
37315     vector signed short vec_vpkswss (vector signed int, vector signed int);
37316
37317     vector unsigned short vec_vpkuwus (vector unsigned int,
37318                                        vector unsigned int);
37319
37320     vector signed char vec_vpkshss (vector signed short,
37321                                     vector signed short);
37322
37323     vector unsigned char vec_vpkuhus (vector unsigned short,
37324                                       vector unsigned short);
37325
37326     vector unsigned char vec_packsu (vector unsigned short,
37327                                      vector unsigned short);
37328     vector unsigned char vec_packsu (vector signed short,
37329                                      vector signed short);
37330     vector unsigned short vec_packsu (vector unsigned int,
37331                                       vector unsigned int);
37332     vector unsigned short vec_packsu (vector signed int, vector signed int);
37333
37334     vector unsigned short vec_vpkswus (vector signed int,
37335                                        vector signed int);
37336
37337     vector unsigned char vec_vpkshus (vector signed short,
37338                                       vector signed short);
37339
37340     vector float vec_perm (vector float,
37341                            vector float,
37342                            vector unsigned char);
37343     vector signed int vec_perm (vector signed int,
37344                                 vector signed int,
37345                                 vector unsigned char);
37346     vector unsigned int vec_perm (vector unsigned int,
37347                                   vector unsigned int,
37348                                   vector unsigned char);
37349     vector bool int vec_perm (vector bool int,
37350                               vector bool int,
37351                               vector unsigned char);
37352     vector signed short vec_perm (vector signed short,
37353                                   vector signed short,
37354                                   vector unsigned char);
37355     vector unsigned short vec_perm (vector unsigned short,
37356                                     vector unsigned short,
37357                                     vector unsigned char);
37358     vector bool short vec_perm (vector bool short,
37359                                 vector bool short,
37360                                 vector unsigned char);
37361     vector pixel vec_perm (vector pixel,
37362                            vector pixel,
37363                            vector unsigned char);
37364     vector signed char vec_perm (vector signed char,
37365                                  vector signed char,
37366                                  vector unsigned char);
37367     vector unsigned char vec_perm (vector unsigned char,
37368                                    vector unsigned char,
37369                                    vector unsigned char);
37370     vector bool char vec_perm (vector bool char,
37371                                vector bool char,
37372                                vector unsigned char);
37373
37374     vector float vec_re (vector float);
37375
37376     vector signed char vec_rl (vector signed char,
37377                                vector unsigned char);
37378     vector unsigned char vec_rl (vector unsigned char,
37379                                  vector unsigned char);
37380     vector signed short vec_rl (vector signed short, vector unsigned short);
37381     vector unsigned short vec_rl (vector unsigned short,
37382                                   vector unsigned short);
37383     vector signed int vec_rl (vector signed int, vector unsigned int);
37384     vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
37385
37386     vector signed int vec_vrlw (vector signed int, vector unsigned int);
37387     vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
37388
37389     vector signed short vec_vrlh (vector signed short,
37390                                   vector unsigned short);
37391     vector unsigned short vec_vrlh (vector unsigned short,
37392                                     vector unsigned short);
37393
37394     vector signed char vec_vrlb (vector signed char, vector unsigned char);
37395     vector unsigned char vec_vrlb (vector unsigned char,
37396                                    vector unsigned char);
37397
37398     vector float vec_round (vector float);
37399
37400     vector float vec_recip (vector float, vector float);
37401
37402     vector float vec_rsqrt (vector float);
37403
37404     vector float vec_rsqrte (vector float);
37405
37406     vector float vec_sel (vector float, vector float, vector bool int);
37407     vector float vec_sel (vector float, vector float, vector unsigned int);
37408     vector signed int vec_sel (vector signed int,
37409                                vector signed int,
37410                                vector bool int);
37411     vector signed int vec_sel (vector signed int,
37412                                vector signed int,
37413                                vector unsigned int);
37414     vector unsigned int vec_sel (vector unsigned int,
37415                                  vector unsigned int,
37416                                  vector bool int);
37417     vector unsigned int vec_sel (vector unsigned int,
37418                                  vector unsigned int,
37419                                  vector unsigned int);
37420     vector bool int vec_sel (vector bool int,
37421                              vector bool int,
37422                              vector bool int);
37423     vector bool int vec_sel (vector bool int,
37424                              vector bool int,
37425                              vector unsigned int);
37426     vector signed short vec_sel (vector signed short,
37427                                  vector signed short,
37428                                  vector bool short);
37429     vector signed short vec_sel (vector signed short,
37430                                  vector signed short,
37431                                  vector unsigned short);
37432     vector unsigned short vec_sel (vector unsigned short,
37433                                    vector unsigned short,
37434                                    vector bool short);
37435     vector unsigned short vec_sel (vector unsigned short,
37436                                    vector unsigned short,
37437                                    vector unsigned short);
37438     vector bool short vec_sel (vector bool short,
37439                                vector bool short,
37440                                vector bool short);
37441     vector bool short vec_sel (vector bool short,
37442                                vector bool short,
37443                                vector unsigned short);
37444     vector signed char vec_sel (vector signed char,
37445                                 vector signed char,
37446                                 vector bool char);
37447     vector signed char vec_sel (vector signed char,
37448                                 vector signed char,
37449                                 vector unsigned char);
37450     vector unsigned char vec_sel (vector unsigned char,
37451                                   vector unsigned char,
37452                                   vector bool char);
37453     vector unsigned char vec_sel (vector unsigned char,
37454                                   vector unsigned char,
37455                                   vector unsigned char);
37456     vector bool char vec_sel (vector bool char,
37457                               vector bool char,
37458                               vector bool char);
37459     vector bool char vec_sel (vector bool char,
37460                               vector bool char,
37461                               vector unsigned char);
37462
37463     vector signed char vec_sl (vector signed char,
37464                                vector unsigned char);
37465     vector unsigned char vec_sl (vector unsigned char,
37466                                  vector unsigned char);
37467     vector signed short vec_sl (vector signed short, vector unsigned short);
37468     vector unsigned short vec_sl (vector unsigned short,
37469                                   vector unsigned short);
37470     vector signed int vec_sl (vector signed int, vector unsigned int);
37471     vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
37472
37473     vector signed int vec_vslw (vector signed int, vector unsigned int);
37474     vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
37475
37476     vector signed short vec_vslh (vector signed short,
37477                                   vector unsigned short);
37478     vector unsigned short vec_vslh (vector unsigned short,
37479                                     vector unsigned short);
37480
37481     vector signed char vec_vslb (vector signed char, vector unsigned char);
37482     vector unsigned char vec_vslb (vector unsigned char,
37483                                    vector unsigned char);
37484
37485     vector float vec_sld (vector float, vector float, const int);
37486     vector signed int vec_sld (vector signed int,
37487                                vector signed int,
37488                                const int);
37489     vector unsigned int vec_sld (vector unsigned int,
37490                                  vector unsigned int,
37491                                  const int);
37492     vector bool int vec_sld (vector bool int,
37493                              vector bool int,
37494                              const int);
37495     vector signed short vec_sld (vector signed short,
37496                                  vector signed short,
37497                                  const int);
37498     vector unsigned short vec_sld (vector unsigned short,
37499                                    vector unsigned short,
37500                                    const int);
37501     vector bool short vec_sld (vector bool short,
37502                                vector bool short,
37503                                const int);
37504     vector pixel vec_sld (vector pixel,
37505                           vector pixel,
37506                           const int);
37507     vector signed char vec_sld (vector signed char,
37508                                 vector signed char,
37509                                 const int);
37510     vector unsigned char vec_sld (vector unsigned char,
37511                                   vector unsigned char,
37512                                   const int);
37513     vector bool char vec_sld (vector bool char,
37514                               vector bool char,
37515                               const int);
37516
37517     vector signed int vec_sll (vector signed int,
37518                                vector unsigned int);
37519     vector signed int vec_sll (vector signed int,
37520                                vector unsigned short);
37521     vector signed int vec_sll (vector signed int,
37522                                vector unsigned char);
37523     vector unsigned int vec_sll (vector unsigned int,
37524                                  vector unsigned int);
37525     vector unsigned int vec_sll (vector unsigned int,
37526                                  vector unsigned short);
37527     vector unsigned int vec_sll (vector unsigned int,
37528                                  vector unsigned char);
37529     vector bool int vec_sll (vector bool int,
37530                              vector unsigned int);
37531     vector bool int vec_sll (vector bool int,
37532                              vector unsigned short);
37533     vector bool int vec_sll (vector bool int,
37534                              vector unsigned char);
37535     vector signed short vec_sll (vector signed short,
37536                                  vector unsigned int);
37537     vector signed short vec_sll (vector signed short,
37538                                  vector unsigned short);
37539     vector signed short vec_sll (vector signed short,
37540                                  vector unsigned char);
37541     vector unsigned short vec_sll (vector unsigned short,
37542                                    vector unsigned int);
37543     vector unsigned short vec_sll (vector unsigned short,
37544                                    vector unsigned short);
37545     vector unsigned short vec_sll (vector unsigned short,
37546                                    vector unsigned char);
37547     vector bool short vec_sll (vector bool short, vector unsigned int);
37548     vector bool short vec_sll (vector bool short, vector unsigned short);
37549     vector bool short vec_sll (vector bool short, vector unsigned char);
37550     vector pixel vec_sll (vector pixel, vector unsigned int);
37551     vector pixel vec_sll (vector pixel, vector unsigned short);
37552     vector pixel vec_sll (vector pixel, vector unsigned char);
37553     vector signed char vec_sll (vector signed char, vector unsigned int);
37554     vector signed char vec_sll (vector signed char, vector unsigned short);
37555     vector signed char vec_sll (vector signed char, vector unsigned char);
37556     vector unsigned char vec_sll (vector unsigned char,
37557                                   vector unsigned int);
37558     vector unsigned char vec_sll (vector unsigned char,
37559                                   vector unsigned short);
37560     vector unsigned char vec_sll (vector unsigned char,
37561                                   vector unsigned char);
37562     vector bool char vec_sll (vector bool char, vector unsigned int);
37563     vector bool char vec_sll (vector bool char, vector unsigned short);
37564     vector bool char vec_sll (vector bool char, vector unsigned char);
37565
37566     vector float vec_slo (vector float, vector signed char);
37567     vector float vec_slo (vector float, vector unsigned char);
37568     vector signed int vec_slo (vector signed int, vector signed char);
37569     vector signed int vec_slo (vector signed int, vector unsigned char);
37570     vector unsigned int vec_slo (vector unsigned int, vector signed char);
37571     vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
37572     vector signed short vec_slo (vector signed short, vector signed char);
37573     vector signed short vec_slo (vector signed short, vector unsigned char);
37574     vector unsigned short vec_slo (vector unsigned short,
37575                                    vector signed char);
37576     vector unsigned short vec_slo (vector unsigned short,
37577                                    vector unsigned char);
37578     vector pixel vec_slo (vector pixel, vector signed char);
37579     vector pixel vec_slo (vector pixel, vector unsigned char);
37580     vector signed char vec_slo (vector signed char, vector signed char);
37581     vector signed char vec_slo (vector signed char, vector unsigned char);
37582     vector unsigned char vec_slo (vector unsigned char, vector signed char);
37583     vector unsigned char vec_slo (vector unsigned char,
37584                                   vector unsigned char);
37585
37586     vector signed char vec_splat (vector signed char, const int);
37587     vector unsigned char vec_splat (vector unsigned char, const int);
37588     vector bool char vec_splat (vector bool char, const int);
37589     vector signed short vec_splat (vector signed short, const int);
37590     vector unsigned short vec_splat (vector unsigned short, const int);
37591     vector bool short vec_splat (vector bool short, const int);
37592     vector pixel vec_splat (vector pixel, const int);
37593     vector float vec_splat (vector float, const int);
37594     vector signed int vec_splat (vector signed int, const int);
37595     vector unsigned int vec_splat (vector unsigned int, const int);
37596     vector bool int vec_splat (vector bool int, const int);
37597     vector signed long vec_splat (vector signed long, const int);
37598     vector unsigned long vec_splat (vector unsigned long, const int);
37599
37600     vector signed char vec_splats (signed char);
37601     vector unsigned char vec_splats (unsigned char);
37602     vector signed short vec_splats (signed short);
37603     vector unsigned short vec_splats (unsigned short);
37604     vector signed int vec_splats (signed int);
37605     vector unsigned int vec_splats (unsigned int);
37606     vector float vec_splats (float);
37607
37608     vector float vec_vspltw (vector float, const int);
37609     vector signed int vec_vspltw (vector signed int, const int);
37610     vector unsigned int vec_vspltw (vector unsigned int, const int);
37611     vector bool int vec_vspltw (vector bool int, const int);
37612
37613     vector bool short vec_vsplth (vector bool short, const int);
37614     vector signed short vec_vsplth (vector signed short, const int);
37615     vector unsigned short vec_vsplth (vector unsigned short, const int);
37616     vector pixel vec_vsplth (vector pixel, const int);
37617
37618     vector signed char vec_vspltb (vector signed char, const int);
37619     vector unsigned char vec_vspltb (vector unsigned char, const int);
37620     vector bool char vec_vspltb (vector bool char, const int);
37621
37622     vector signed char vec_splat_s8 (const int);
37623
37624     vector signed short vec_splat_s16 (const int);
37625
37626     vector signed int vec_splat_s32 (const int);
37627
37628     vector unsigned char vec_splat_u8 (const int);
37629
37630     vector unsigned short vec_splat_u16 (const int);
37631
37632     vector unsigned int vec_splat_u32 (const int);
37633
37634     vector signed char vec_sr (vector signed char, vector unsigned char);
37635     vector unsigned char vec_sr (vector unsigned char,
37636                                  vector unsigned char);
37637     vector signed short vec_sr (vector signed short,
37638                                 vector unsigned short);
37639     vector unsigned short vec_sr (vector unsigned short,
37640                                   vector unsigned short);
37641     vector signed int vec_sr (vector signed int, vector unsigned int);
37642     vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
37643
37644     vector signed int vec_vsrw (vector signed int, vector unsigned int);
37645     vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
37646
37647     vector signed short vec_vsrh (vector signed short,
37648                                   vector unsigned short);
37649     vector unsigned short vec_vsrh (vector unsigned short,
37650                                     vector unsigned short);
37651
37652     vector signed char vec_vsrb (vector signed char, vector unsigned char);
37653     vector unsigned char vec_vsrb (vector unsigned char,
37654                                    vector unsigned char);
37655
37656     vector signed char vec_sra (vector signed char, vector unsigned char);
37657     vector unsigned char vec_sra (vector unsigned char,
37658                                   vector unsigned char);
37659     vector signed short vec_sra (vector signed short,
37660                                  vector unsigned short);
37661     vector unsigned short vec_sra (vector unsigned short,
37662                                    vector unsigned short);
37663     vector signed int vec_sra (vector signed int, vector unsigned int);
37664     vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
37665
37666     vector signed int vec_vsraw (vector signed int, vector unsigned int);
37667     vector unsigned int vec_vsraw (vector unsigned int,
37668                                    vector unsigned int);
37669
37670     vector signed short vec_vsrah (vector signed short,
37671                                    vector unsigned short);
37672     vector unsigned short vec_vsrah (vector unsigned short,
37673                                      vector unsigned short);
37674
37675     vector signed char vec_vsrab (vector signed char, vector unsigned char);
37676     vector unsigned char vec_vsrab (vector unsigned char,
37677                                     vector unsigned char);
37678
37679     vector signed int vec_srl (vector signed int, vector unsigned int);
37680     vector signed int vec_srl (vector signed int, vector unsigned short);
37681     vector signed int vec_srl (vector signed int, vector unsigned char);
37682     vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
37683     vector unsigned int vec_srl (vector unsigned int,
37684                                  vector unsigned short);
37685     vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
37686     vector bool int vec_srl (vector bool int, vector unsigned int);
37687     vector bool int vec_srl (vector bool int, vector unsigned short);
37688     vector bool int vec_srl (vector bool int, vector unsigned char);
37689     vector signed short vec_srl (vector signed short, vector unsigned int);
37690     vector signed short vec_srl (vector signed short,
37691                                  vector unsigned short);
37692     vector signed short vec_srl (vector signed short, vector unsigned char);
37693     vector unsigned short vec_srl (vector unsigned short,
37694                                    vector unsigned int);
37695     vector unsigned short vec_srl (vector unsigned short,
37696                                    vector unsigned short);
37697     vector unsigned short vec_srl (vector unsigned short,
37698                                    vector unsigned char);
37699     vector bool short vec_srl (vector bool short, vector unsigned int);
37700     vector bool short vec_srl (vector bool short, vector unsigned short);
37701     vector bool short vec_srl (vector bool short, vector unsigned char);
37702     vector pixel vec_srl (vector pixel, vector unsigned int);
37703     vector pixel vec_srl (vector pixel, vector unsigned short);
37704     vector pixel vec_srl (vector pixel, vector unsigned char);
37705     vector signed char vec_srl (vector signed char, vector unsigned int);
37706     vector signed char vec_srl (vector signed char, vector unsigned short);
37707     vector signed char vec_srl (vector signed char, vector unsigned char);
37708     vector unsigned char vec_srl (vector unsigned char,
37709                                   vector unsigned int);
37710     vector unsigned char vec_srl (vector unsigned char,
37711                                   vector unsigned short);
37712     vector unsigned char vec_srl (vector unsigned char,
37713                                   vector unsigned char);
37714     vector bool char vec_srl (vector bool char, vector unsigned int);
37715     vector bool char vec_srl (vector bool char, vector unsigned short);
37716     vector bool char vec_srl (vector bool char, vector unsigned char);
37717
37718     vector float vec_sro (vector float, vector signed char);
37719     vector float vec_sro (vector float, vector unsigned char);
37720     vector signed int vec_sro (vector signed int, vector signed char);
37721     vector signed int vec_sro (vector signed int, vector unsigned char);
37722     vector unsigned int vec_sro (vector unsigned int, vector signed char);
37723     vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
37724     vector signed short vec_sro (vector signed short, vector signed char);
37725     vector signed short vec_sro (vector signed short, vector unsigned char);
37726     vector unsigned short vec_sro (vector unsigned short,
37727                                    vector signed char);
37728     vector unsigned short vec_sro (vector unsigned short,
37729                                    vector unsigned char);
37730     vector pixel vec_sro (vector pixel, vector signed char);
37731     vector pixel vec_sro (vector pixel, vector unsigned char);
37732     vector signed char vec_sro (vector signed char, vector signed char);
37733     vector signed char vec_sro (vector signed char, vector unsigned char);
37734     vector unsigned char vec_sro (vector unsigned char, vector signed char);
37735     vector unsigned char vec_sro (vector unsigned char,
37736                                   vector unsigned char);
37737
37738     void vec_st (vector float, int, vector float *);
37739     void vec_st (vector float, int, float *);
37740     void vec_st (vector signed int, int, vector signed int *);
37741     void vec_st (vector signed int, int, int *);
37742     void vec_st (vector unsigned int, int, vector unsigned int *);
37743     void vec_st (vector unsigned int, int, unsigned int *);
37744     void vec_st (vector bool int, int, vector bool int *);
37745     void vec_st (vector bool int, int, unsigned int *);
37746     void vec_st (vector bool int, int, int *);
37747     void vec_st (vector signed short, int, vector signed short *);
37748     void vec_st (vector signed short, int, short *);
37749     void vec_st (vector unsigned short, int, vector unsigned short *);
37750     void vec_st (vector unsigned short, int, unsigned short *);
37751     void vec_st (vector bool short, int, vector bool short *);
37752     void vec_st (vector bool short, int, unsigned short *);
37753     void vec_st (vector pixel, int, vector pixel *);
37754     void vec_st (vector pixel, int, unsigned short *);
37755     void vec_st (vector pixel, int, short *);
37756     void vec_st (vector bool short, int, short *);
37757     void vec_st (vector signed char, int, vector signed char *);
37758     void vec_st (vector signed char, int, signed char *);
37759     void vec_st (vector unsigned char, int, vector unsigned char *);
37760     void vec_st (vector unsigned char, int, unsigned char *);
37761     void vec_st (vector bool char, int, vector bool char *);
37762     void vec_st (vector bool char, int, unsigned char *);
37763     void vec_st (vector bool char, int, signed char *);
37764
37765     void vec_ste (vector signed char, int, signed char *);
37766     void vec_ste (vector unsigned char, int, unsigned char *);
37767     void vec_ste (vector bool char, int, signed char *);
37768     void vec_ste (vector bool char, int, unsigned char *);
37769     void vec_ste (vector signed short, int, short *);
37770     void vec_ste (vector unsigned short, int, unsigned short *);
37771     void vec_ste (vector bool short, int, short *);
37772     void vec_ste (vector bool short, int, unsigned short *);
37773     void vec_ste (vector pixel, int, short *);
37774     void vec_ste (vector pixel, int, unsigned short *);
37775     void vec_ste (vector float, int, float *);
37776     void vec_ste (vector signed int, int, int *);
37777     void vec_ste (vector unsigned int, int, unsigned int *);
37778     void vec_ste (vector bool int, int, int *);
37779     void vec_ste (vector bool int, int, unsigned int *);
37780
37781     void vec_stvewx (vector float, int, float *);
37782     void vec_stvewx (vector signed int, int, int *);
37783     void vec_stvewx (vector unsigned int, int, unsigned int *);
37784     void vec_stvewx (vector bool int, int, int *);
37785     void vec_stvewx (vector bool int, int, unsigned int *);
37786
37787     void vec_stvehx (vector signed short, int, short *);
37788     void vec_stvehx (vector unsigned short, int, unsigned short *);
37789     void vec_stvehx (vector bool short, int, short *);
37790     void vec_stvehx (vector bool short, int, unsigned short *);
37791     void vec_stvehx (vector pixel, int, short *);
37792     void vec_stvehx (vector pixel, int, unsigned short *);
37793
37794     void vec_stvebx (vector signed char, int, signed char *);
37795     void vec_stvebx (vector unsigned char, int, unsigned char *);
37796     void vec_stvebx (vector bool char, int, signed char *);
37797     void vec_stvebx (vector bool char, int, unsigned char *);
37798
37799     void vec_stl (vector float, int, vector float *);
37800     void vec_stl (vector float, int, float *);
37801     void vec_stl (vector signed int, int, vector signed int *);
37802     void vec_stl (vector signed int, int, int *);
37803     void vec_stl (vector unsigned int, int, vector unsigned int *);
37804     void vec_stl (vector unsigned int, int, unsigned int *);
37805     void vec_stl (vector bool int, int, vector bool int *);
37806     void vec_stl (vector bool int, int, unsigned int *);
37807     void vec_stl (vector bool int, int, int *);
37808     void vec_stl (vector signed short, int, vector signed short *);
37809     void vec_stl (vector signed short, int, short *);
37810     void vec_stl (vector unsigned short, int, vector unsigned short *);
37811     void vec_stl (vector unsigned short, int, unsigned short *);
37812     void vec_stl (vector bool short, int, vector bool short *);
37813     void vec_stl (vector bool short, int, unsigned short *);
37814     void vec_stl (vector bool short, int, short *);
37815     void vec_stl (vector pixel, int, vector pixel *);
37816     void vec_stl (vector pixel, int, unsigned short *);
37817     void vec_stl (vector pixel, int, short *);
37818     void vec_stl (vector signed char, int, vector signed char *);
37819     void vec_stl (vector signed char, int, signed char *);
37820     void vec_stl (vector unsigned char, int, vector unsigned char *);
37821     void vec_stl (vector unsigned char, int, unsigned char *);
37822     void vec_stl (vector bool char, int, vector bool char *);
37823     void vec_stl (vector bool char, int, unsigned char *);
37824     void vec_stl (vector bool char, int, signed char *);
37825
37826     vector signed char vec_sub (vector bool char, vector signed char);
37827     vector signed char vec_sub (vector signed char, vector bool char);
37828     vector signed char vec_sub (vector signed char, vector signed char);
37829     vector unsigned char vec_sub (vector bool char, vector unsigned char);
37830     vector unsigned char vec_sub (vector unsigned char, vector bool char);
37831     vector unsigned char vec_sub (vector unsigned char,
37832                                   vector unsigned char);
37833     vector signed short vec_sub (vector bool short, vector signed short);
37834     vector signed short vec_sub (vector signed short, vector bool short);
37835     vector signed short vec_sub (vector signed short, vector signed short);
37836     vector unsigned short vec_sub (vector bool short,
37837                                    vector unsigned short);
37838     vector unsigned short vec_sub (vector unsigned short,
37839                                    vector bool short);
37840     vector unsigned short vec_sub (vector unsigned short,
37841                                    vector unsigned short);
37842     vector signed int vec_sub (vector bool int, vector signed int);
37843     vector signed int vec_sub (vector signed int, vector bool int);
37844     vector signed int vec_sub (vector signed int, vector signed int);
37845     vector unsigned int vec_sub (vector bool int, vector unsigned int);
37846     vector unsigned int vec_sub (vector unsigned int, vector bool int);
37847     vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
37848     vector float vec_sub (vector float, vector float);
37849
37850     vector float vec_vsubfp (vector float, vector float);
37851
37852     vector signed int vec_vsubuwm (vector bool int, vector signed int);
37853     vector signed int vec_vsubuwm (vector signed int, vector bool int);
37854     vector signed int vec_vsubuwm (vector signed int, vector signed int);
37855     vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
37856     vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
37857     vector unsigned int vec_vsubuwm (vector unsigned int,
37858                                      vector unsigned int);
37859
37860     vector signed short vec_vsubuhm (vector bool short,
37861                                      vector signed short);
37862     vector signed short vec_vsubuhm (vector signed short,
37863                                      vector bool short);
37864     vector signed short vec_vsubuhm (vector signed short,
37865                                      vector signed short);
37866     vector unsigned short vec_vsubuhm (vector bool short,
37867                                        vector unsigned short);
37868     vector unsigned short vec_vsubuhm (vector unsigned short,
37869                                        vector bool short);
37870     vector unsigned short vec_vsubuhm (vector unsigned short,
37871                                        vector unsigned short);
37872
37873     vector signed char vec_vsububm (vector bool char, vector signed char);
37874     vector signed char vec_vsububm (vector signed char, vector bool char);
37875     vector signed char vec_vsububm (vector signed char, vector signed char);
37876     vector unsigned char vec_vsububm (vector bool char,
37877                                       vector unsigned char);
37878     vector unsigned char vec_vsububm (vector unsigned char,
37879                                       vector bool char);
37880     vector unsigned char vec_vsububm (vector unsigned char,
37881                                       vector unsigned char);
37882
37883     vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
37884
37885     vector unsigned char vec_subs (vector bool char, vector unsigned char);
37886     vector unsigned char vec_subs (vector unsigned char, vector bool char);
37887     vector unsigned char vec_subs (vector unsigned char,
37888                                    vector unsigned char);
37889     vector signed char vec_subs (vector bool char, vector signed char);
37890     vector signed char vec_subs (vector signed char, vector bool char);
37891     vector signed char vec_subs (vector signed char, vector signed char);
37892     vector unsigned short vec_subs (vector bool short,
37893                                     vector unsigned short);
37894     vector unsigned short vec_subs (vector unsigned short,
37895                                     vector bool short);
37896     vector unsigned short vec_subs (vector unsigned short,
37897                                     vector unsigned short);
37898     vector signed short vec_subs (vector bool short, vector signed short);
37899     vector signed short vec_subs (vector signed short, vector bool short);
37900     vector signed short vec_subs (vector signed short, vector signed short);
37901     vector unsigned int vec_subs (vector bool int, vector unsigned int);
37902     vector unsigned int vec_subs (vector unsigned int, vector bool int);
37903     vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
37904     vector signed int vec_subs (vector bool int, vector signed int);
37905     vector signed int vec_subs (vector signed int, vector bool int);
37906     vector signed int vec_subs (vector signed int, vector signed int);
37907
37908     vector signed int vec_vsubsws (vector bool int, vector signed int);
37909     vector signed int vec_vsubsws (vector signed int, vector bool int);
37910     vector signed int vec_vsubsws (vector signed int, vector signed int);
37911
37912     vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
37913     vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
37914     vector unsigned int vec_vsubuws (vector unsigned int,
37915                                      vector unsigned int);
37916
37917     vector signed short vec_vsubshs (vector bool short,
37918                                      vector signed short);
37919     vector signed short vec_vsubshs (vector signed short,
37920                                      vector bool short);
37921     vector signed short vec_vsubshs (vector signed short,
37922                                      vector signed short);
37923
37924     vector unsigned short vec_vsubuhs (vector bool short,
37925                                        vector unsigned short);
37926     vector unsigned short vec_vsubuhs (vector unsigned short,
37927                                        vector bool short);
37928     vector unsigned short vec_vsubuhs (vector unsigned short,
37929                                        vector unsigned short);
37930
37931     vector signed char vec_vsubsbs (vector bool char, vector signed char);
37932     vector signed char vec_vsubsbs (vector signed char, vector bool char);
37933     vector signed char vec_vsubsbs (vector signed char, vector signed char);
37934
37935     vector unsigned char vec_vsububs (vector bool char,
37936                                       vector unsigned char);
37937     vector unsigned char vec_vsububs (vector unsigned char,
37938                                       vector bool char);
37939     vector unsigned char vec_vsububs (vector unsigned char,
37940                                       vector unsigned char);
37941
37942     vector unsigned int vec_sum4s (vector unsigned char,
37943                                    vector unsigned int);
37944     vector signed int vec_sum4s (vector signed char, vector signed int);
37945     vector signed int vec_sum4s (vector signed short, vector signed int);
37946
37947     vector signed int vec_vsum4shs (vector signed short, vector signed int);
37948
37949     vector signed int vec_vsum4sbs (vector signed char, vector signed int);
37950
37951     vector unsigned int vec_vsum4ubs (vector unsigned char,
37952                                       vector unsigned int);
37953
37954     vector signed int vec_sum2s (vector signed int, vector signed int);
37955
37956     vector signed int vec_sums (vector signed int, vector signed int);
37957
37958     vector float vec_trunc (vector float);
37959
37960     vector signed short vec_unpackh (vector signed char);
37961     vector bool short vec_unpackh (vector bool char);
37962     vector signed int vec_unpackh (vector signed short);
37963     vector bool int vec_unpackh (vector bool short);
37964     vector unsigned int vec_unpackh (vector pixel);
37965
37966     vector bool int vec_vupkhsh (vector bool short);
37967     vector signed int vec_vupkhsh (vector signed short);
37968
37969     vector unsigned int vec_vupkhpx (vector pixel);
37970
37971     vector bool short vec_vupkhsb (vector bool char);
37972     vector signed short vec_vupkhsb (vector signed char);
37973
37974     vector signed short vec_unpackl (vector signed char);
37975     vector bool short vec_unpackl (vector bool char);
37976     vector unsigned int vec_unpackl (vector pixel);
37977     vector signed int vec_unpackl (vector signed short);
37978     vector bool int vec_unpackl (vector bool short);
37979
37980     vector unsigned int vec_vupklpx (vector pixel);
37981
37982     vector bool int vec_vupklsh (vector bool short);
37983     vector signed int vec_vupklsh (vector signed short);
37984
37985     vector bool short vec_vupklsb (vector bool char);
37986     vector signed short vec_vupklsb (vector signed char);
37987
37988     vector float vec_xor (vector float, vector float);
37989     vector float vec_xor (vector float, vector bool int);
37990     vector float vec_xor (vector bool int, vector float);
37991     vector bool int vec_xor (vector bool int, vector bool int);
37992     vector signed int vec_xor (vector bool int, vector signed int);
37993     vector signed int vec_xor (vector signed int, vector bool int);
37994     vector signed int vec_xor (vector signed int, vector signed int);
37995     vector unsigned int vec_xor (vector bool int, vector unsigned int);
37996     vector unsigned int vec_xor (vector unsigned int, vector bool int);
37997     vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
37998     vector bool short vec_xor (vector bool short, vector bool short);
37999     vector signed short vec_xor (vector bool short, vector signed short);
38000     vector signed short vec_xor (vector signed short, vector bool short);
38001     vector signed short vec_xor (vector signed short, vector signed short);
38002     vector unsigned short vec_xor (vector bool short,
38003                                    vector unsigned short);
38004     vector unsigned short vec_xor (vector unsigned short,
38005                                    vector bool short);
38006     vector unsigned short vec_xor (vector unsigned short,
38007                                    vector unsigned short);
38008     vector signed char vec_xor (vector bool char, vector signed char);
38009     vector bool char vec_xor (vector bool char, vector bool char);
38010     vector signed char vec_xor (vector signed char, vector bool char);
38011     vector signed char vec_xor (vector signed char, vector signed char);
38012     vector unsigned char vec_xor (vector bool char, vector unsigned char);
38013     vector unsigned char vec_xor (vector unsigned char, vector bool char);
38014     vector unsigned char vec_xor (vector unsigned char,
38015                                   vector unsigned char);
38016
38017     int vec_all_eq (vector signed char, vector bool char);
38018     int vec_all_eq (vector signed char, vector signed char);
38019     int vec_all_eq (vector unsigned char, vector bool char);
38020     int vec_all_eq (vector unsigned char, vector unsigned char);
38021     int vec_all_eq (vector bool char, vector bool char);
38022     int vec_all_eq (vector bool char, vector unsigned char);
38023     int vec_all_eq (vector bool char, vector signed char);
38024     int vec_all_eq (vector signed short, vector bool short);
38025     int vec_all_eq (vector signed short, vector signed short);
38026     int vec_all_eq (vector unsigned short, vector bool short);
38027     int vec_all_eq (vector unsigned short, vector unsigned short);
38028     int vec_all_eq (vector bool short, vector bool short);
38029     int vec_all_eq (vector bool short, vector unsigned short);
38030     int vec_all_eq (vector bool short, vector signed short);
38031     int vec_all_eq (vector pixel, vector pixel);
38032     int vec_all_eq (vector signed int, vector bool int);
38033     int vec_all_eq (vector signed int, vector signed int);
38034     int vec_all_eq (vector unsigned int, vector bool int);
38035     int vec_all_eq (vector unsigned int, vector unsigned int);
38036     int vec_all_eq (vector bool int, vector bool int);
38037     int vec_all_eq (vector bool int, vector unsigned int);
38038     int vec_all_eq (vector bool int, vector signed int);
38039     int vec_all_eq (vector float, vector float);
38040
38041     int vec_all_ge (vector bool char, vector unsigned char);
38042     int vec_all_ge (vector unsigned char, vector bool char);
38043     int vec_all_ge (vector unsigned char, vector unsigned char);
38044     int vec_all_ge (vector bool char, vector signed char);
38045     int vec_all_ge (vector signed char, vector bool char);
38046     int vec_all_ge (vector signed char, vector signed char);
38047     int vec_all_ge (vector bool short, vector unsigned short);
38048     int vec_all_ge (vector unsigned short, vector bool short);
38049     int vec_all_ge (vector unsigned short, vector unsigned short);
38050     int vec_all_ge (vector signed short, vector signed short);
38051     int vec_all_ge (vector bool short, vector signed short);
38052     int vec_all_ge (vector signed short, vector bool short);
38053     int vec_all_ge (vector bool int, vector unsigned int);
38054     int vec_all_ge (vector unsigned int, vector bool int);
38055     int vec_all_ge (vector unsigned int, vector unsigned int);
38056     int vec_all_ge (vector bool int, vector signed int);
38057     int vec_all_ge (vector signed int, vector bool int);
38058     int vec_all_ge (vector signed int, vector signed int);
38059     int vec_all_ge (vector float, vector float);
38060
38061     int vec_all_gt (vector bool char, vector unsigned char);
38062     int vec_all_gt (vector unsigned char, vector bool char);
38063     int vec_all_gt (vector unsigned char, vector unsigned char);
38064     int vec_all_gt (vector bool char, vector signed char);
38065     int vec_all_gt (vector signed char, vector bool char);
38066     int vec_all_gt (vector signed char, vector signed char);
38067     int vec_all_gt (vector bool short, vector unsigned short);
38068     int vec_all_gt (vector unsigned short, vector bool short);
38069     int vec_all_gt (vector unsigned short, vector unsigned short);
38070     int vec_all_gt (vector bool short, vector signed short);
38071     int vec_all_gt (vector signed short, vector bool short);
38072     int vec_all_gt (vector signed short, vector signed short);
38073     int vec_all_gt (vector bool int, vector unsigned int);
38074     int vec_all_gt (vector unsigned int, vector bool int);
38075     int vec_all_gt (vector unsigned int, vector unsigned int);
38076     int vec_all_gt (vector bool int, vector signed int);
38077     int vec_all_gt (vector signed int, vector bool int);
38078     int vec_all_gt (vector signed int, vector signed int);
38079     int vec_all_gt (vector float, vector float);
38080
38081     int vec_all_in (vector float, vector float);
38082
38083     int vec_all_le (vector bool char, vector unsigned char);
38084     int vec_all_le (vector unsigned char, vector bool char);
38085     int vec_all_le (vector unsigned char, vector unsigned char);
38086     int vec_all_le (vector bool char, vector signed char);
38087     int vec_all_le (vector signed char, vector bool char);
38088     int vec_all_le (vector signed char, vector signed char);
38089     int vec_all_le (vector bool short, vector unsigned short);
38090     int vec_all_le (vector unsigned short, vector bool short);
38091     int vec_all_le (vector unsigned short, vector unsigned short);
38092     int vec_all_le (vector bool short, vector signed short);
38093     int vec_all_le (vector signed short, vector bool short);
38094     int vec_all_le (vector signed short, vector signed short);
38095     int vec_all_le (vector bool int, vector unsigned int);
38096     int vec_all_le (vector unsigned int, vector bool int);
38097     int vec_all_le (vector unsigned int, vector unsigned int);
38098     int vec_all_le (vector bool int, vector signed int);
38099     int vec_all_le (vector signed int, vector bool int);
38100     int vec_all_le (vector signed int, vector signed int);
38101     int vec_all_le (vector float, vector float);
38102
38103     int vec_all_lt (vector bool char, vector unsigned char);
38104     int vec_all_lt (vector unsigned char, vector bool char);
38105     int vec_all_lt (vector unsigned char, vector unsigned char);
38106     int vec_all_lt (vector bool char, vector signed char);
38107     int vec_all_lt (vector signed char, vector bool char);
38108     int vec_all_lt (vector signed char, vector signed char);
38109     int vec_all_lt (vector bool short, vector unsigned short);
38110     int vec_all_lt (vector unsigned short, vector bool short);
38111     int vec_all_lt (vector unsigned short, vector unsigned short);
38112     int vec_all_lt (vector bool short, vector signed short);
38113     int vec_all_lt (vector signed short, vector bool short);
38114     int vec_all_lt (vector signed short, vector signed short);
38115     int vec_all_lt (vector bool int, vector unsigned int);
38116     int vec_all_lt (vector unsigned int, vector bool int);
38117     int vec_all_lt (vector unsigned int, vector unsigned int);
38118     int vec_all_lt (vector bool int, vector signed int);
38119     int vec_all_lt (vector signed int, vector bool int);
38120     int vec_all_lt (vector signed int, vector signed int);
38121     int vec_all_lt (vector float, vector float);
38122
38123     int vec_all_nan (vector float);
38124
38125     int vec_all_ne (vector signed char, vector bool char);
38126     int vec_all_ne (vector signed char, vector signed char);
38127     int vec_all_ne (vector unsigned char, vector bool char);
38128     int vec_all_ne (vector unsigned char, vector unsigned char);
38129     int vec_all_ne (vector bool char, vector bool char);
38130     int vec_all_ne (vector bool char, vector unsigned char);
38131     int vec_all_ne (vector bool char, vector signed char);
38132     int vec_all_ne (vector signed short, vector bool short);
38133     int vec_all_ne (vector signed short, vector signed short);
38134     int vec_all_ne (vector unsigned short, vector bool short);
38135     int vec_all_ne (vector unsigned short, vector unsigned short);
38136     int vec_all_ne (vector bool short, vector bool short);
38137     int vec_all_ne (vector bool short, vector unsigned short);
38138     int vec_all_ne (vector bool short, vector signed short);
38139     int vec_all_ne (vector pixel, vector pixel);
38140     int vec_all_ne (vector signed int, vector bool int);
38141     int vec_all_ne (vector signed int, vector signed int);
38142     int vec_all_ne (vector unsigned int, vector bool int);
38143     int vec_all_ne (vector unsigned int, vector unsigned int);
38144     int vec_all_ne (vector bool int, vector bool int);
38145     int vec_all_ne (vector bool int, vector unsigned int);
38146     int vec_all_ne (vector bool int, vector signed int);
38147     int vec_all_ne (vector float, vector float);
38148
38149     int vec_all_nge (vector float, vector float);
38150
38151     int vec_all_ngt (vector float, vector float);
38152
38153     int vec_all_nle (vector float, vector float);
38154
38155     int vec_all_nlt (vector float, vector float);
38156
38157     int vec_all_numeric (vector float);
38158
38159     int vec_any_eq (vector signed char, vector bool char);
38160     int vec_any_eq (vector signed char, vector signed char);
38161     int vec_any_eq (vector unsigned char, vector bool char);
38162     int vec_any_eq (vector unsigned char, vector unsigned char);
38163     int vec_any_eq (vector bool char, vector bool char);
38164     int vec_any_eq (vector bool char, vector unsigned char);
38165     int vec_any_eq (vector bool char, vector signed char);
38166     int vec_any_eq (vector signed short, vector bool short);
38167     int vec_any_eq (vector signed short, vector signed short);
38168     int vec_any_eq (vector unsigned short, vector bool short);
38169     int vec_any_eq (vector unsigned short, vector unsigned short);
38170     int vec_any_eq (vector bool short, vector bool short);
38171     int vec_any_eq (vector bool short, vector unsigned short);
38172     int vec_any_eq (vector bool short, vector signed short);
38173     int vec_any_eq (vector pixel, vector pixel);
38174     int vec_any_eq (vector signed int, vector bool int);
38175     int vec_any_eq (vector signed int, vector signed int);
38176     int vec_any_eq (vector unsigned int, vector bool int);
38177     int vec_any_eq (vector unsigned int, vector unsigned int);
38178     int vec_any_eq (vector bool int, vector bool int);
38179     int vec_any_eq (vector bool int, vector unsigned int);
38180     int vec_any_eq (vector bool int, vector signed int);
38181     int vec_any_eq (vector float, vector float);
38182
38183     int vec_any_ge (vector signed char, vector bool char);
38184     int vec_any_ge (vector unsigned char, vector bool char);
38185     int vec_any_ge (vector unsigned char, vector unsigned char);
38186     int vec_any_ge (vector signed char, vector signed char);
38187     int vec_any_ge (vector bool char, vector unsigned char);
38188     int vec_any_ge (vector bool char, vector signed char);
38189     int vec_any_ge (vector unsigned short, vector bool short);
38190     int vec_any_ge (vector unsigned short, vector unsigned short);
38191     int vec_any_ge (vector signed short, vector signed short);
38192     int vec_any_ge (vector signed short, vector bool short);
38193     int vec_any_ge (vector bool short, vector unsigned short);
38194     int vec_any_ge (vector bool short, vector signed short);
38195     int vec_any_ge (vector signed int, vector bool int);
38196     int vec_any_ge (vector unsigned int, vector bool int);
38197     int vec_any_ge (vector unsigned int, vector unsigned int);
38198     int vec_any_ge (vector signed int, vector signed int);
38199     int vec_any_ge (vector bool int, vector unsigned int);
38200     int vec_any_ge (vector bool int, vector signed int);
38201     int vec_any_ge (vector float, vector float);
38202
38203     int vec_any_gt (vector bool char, vector unsigned char);
38204     int vec_any_gt (vector unsigned char, vector bool char);
38205     int vec_any_gt (vector unsigned char, vector unsigned char);
38206     int vec_any_gt (vector bool char, vector signed char);
38207     int vec_any_gt (vector signed char, vector bool char);
38208     int vec_any_gt (vector signed char, vector signed char);
38209     int vec_any_gt (vector bool short, vector unsigned short);
38210     int vec_any_gt (vector unsigned short, vector bool short);
38211     int vec_any_gt (vector unsigned short, vector unsigned short);
38212     int vec_any_gt (vector bool short, vector signed short);
38213     int vec_any_gt (vector signed short, vector bool short);
38214     int vec_any_gt (vector signed short, vector signed short);
38215     int vec_any_gt (vector bool int, vector unsigned int);
38216     int vec_any_gt (vector unsigned int, vector bool int);
38217     int vec_any_gt (vector unsigned int, vector unsigned int);
38218     int vec_any_gt (vector bool int, vector signed int);
38219     int vec_any_gt (vector signed int, vector bool int);
38220     int vec_any_gt (vector signed int, vector signed int);
38221     int vec_any_gt (vector float, vector float);
38222
38223     int vec_any_le (vector bool char, vector unsigned char);
38224     int vec_any_le (vector unsigned char, vector bool char);
38225     int vec_any_le (vector unsigned char, vector unsigned char);
38226     int vec_any_le (vector bool char, vector signed char);
38227     int vec_any_le (vector signed char, vector bool char);
38228     int vec_any_le (vector signed char, vector signed char);
38229     int vec_any_le (vector bool short, vector unsigned short);
38230     int vec_any_le (vector unsigned short, vector bool short);
38231     int vec_any_le (vector unsigned short, vector unsigned short);
38232     int vec_any_le (vector bool short, vector signed short);
38233     int vec_any_le (vector signed short, vector bool short);
38234     int vec_any_le (vector signed short, vector signed short);
38235     int vec_any_le (vector bool int, vector unsigned int);
38236     int vec_any_le (vector unsigned int, vector bool int);
38237     int vec_any_le (vector unsigned int, vector unsigned int);
38238     int vec_any_le (vector bool int, vector signed int);
38239     int vec_any_le (vector signed int, vector bool int);
38240     int vec_any_le (vector signed int, vector signed int);
38241     int vec_any_le (vector float, vector float);
38242
38243     int vec_any_lt (vector bool char, vector unsigned char);
38244     int vec_any_lt (vector unsigned char, vector bool char);
38245     int vec_any_lt (vector unsigned char, vector unsigned char);
38246     int vec_any_lt (vector bool char, vector signed char);
38247     int vec_any_lt (vector signed char, vector bool char);
38248     int vec_any_lt (vector signed char, vector signed char);
38249     int vec_any_lt (vector bool short, vector unsigned short);
38250     int vec_any_lt (vector unsigned short, vector bool short);
38251     int vec_any_lt (vector unsigned short, vector unsigned short);
38252     int vec_any_lt (vector bool short, vector signed short);
38253     int vec_any_lt (vector signed short, vector bool short);
38254     int vec_any_lt (vector signed short, vector signed short);
38255     int vec_any_lt (vector bool int, vector unsigned int);
38256     int vec_any_lt (vector unsigned int, vector bool int);
38257     int vec_any_lt (vector unsigned int, vector unsigned int);
38258     int vec_any_lt (vector bool int, vector signed int);
38259     int vec_any_lt (vector signed int, vector bool int);
38260     int vec_any_lt (vector signed int, vector signed int);
38261     int vec_any_lt (vector float, vector float);
38262
38263     int vec_any_nan (vector float);
38264
38265     int vec_any_ne (vector signed char, vector bool char);
38266     int vec_any_ne (vector signed char, vector signed char);
38267     int vec_any_ne (vector unsigned char, vector bool char);
38268     int vec_any_ne (vector unsigned char, vector unsigned char);
38269     int vec_any_ne (vector bool char, vector bool char);
38270     int vec_any_ne (vector bool char, vector unsigned char);
38271     int vec_any_ne (vector bool char, vector signed char);
38272     int vec_any_ne (vector signed short, vector bool short);
38273     int vec_any_ne (vector signed short, vector signed short);
38274     int vec_any_ne (vector unsigned short, vector bool short);
38275     int vec_any_ne (vector unsigned short, vector unsigned short);
38276     int vec_any_ne (vector bool short, vector bool short);
38277     int vec_any_ne (vector bool short, vector unsigned short);
38278     int vec_any_ne (vector bool short, vector signed short);
38279     int vec_any_ne (vector pixel, vector pixel);
38280     int vec_any_ne (vector signed int, vector bool int);
38281     int vec_any_ne (vector signed int, vector signed int);
38282     int vec_any_ne (vector unsigned int, vector bool int);
38283     int vec_any_ne (vector unsigned int, vector unsigned int);
38284     int vec_any_ne (vector bool int, vector bool int);
38285     int vec_any_ne (vector bool int, vector unsigned int);
38286     int vec_any_ne (vector bool int, vector signed int);
38287     int vec_any_ne (vector float, vector float);
38288
38289     int vec_any_nge (vector float, vector float);
38290
38291     int vec_any_ngt (vector float, vector float);
38292
38293     int vec_any_nle (vector float, vector float);
38294
38295     int vec_any_nlt (vector float, vector float);
38296
38297     int vec_any_numeric (vector float);
38298
38299     int vec_any_out (vector float, vector float);
38300
38301 If the vector/scalar (VSX) instruction set is available, the following
38302additional functions are available:
38303
38304     vector double vec_abs (vector double);
38305     vector double vec_add (vector double, vector double);
38306     vector double vec_and (vector double, vector double);
38307     vector double vec_and (vector double, vector bool long);
38308     vector double vec_and (vector bool long, vector double);
38309     vector long vec_and (vector long, vector long);
38310     vector long vec_and (vector long, vector bool long);
38311     vector long vec_and (vector bool long, vector long);
38312     vector unsigned long vec_and (vector unsigned long, vector unsigned long);
38313     vector unsigned long vec_and (vector unsigned long, vector bool long);
38314     vector unsigned long vec_and (vector bool long, vector unsigned long);
38315     vector double vec_andc (vector double, vector double);
38316     vector double vec_andc (vector double, vector bool long);
38317     vector double vec_andc (vector bool long, vector double);
38318     vector long vec_andc (vector long, vector long);
38319     vector long vec_andc (vector long, vector bool long);
38320     vector long vec_andc (vector bool long, vector long);
38321     vector unsigned long vec_andc (vector unsigned long, vector unsigned long);
38322     vector unsigned long vec_andc (vector unsigned long, vector bool long);
38323     vector unsigned long vec_andc (vector bool long, vector unsigned long);
38324     vector double vec_ceil (vector double);
38325     vector bool long vec_cmpeq (vector double, vector double);
38326     vector bool long vec_cmpge (vector double, vector double);
38327     vector bool long vec_cmpgt (vector double, vector double);
38328     vector bool long vec_cmple (vector double, vector double);
38329     vector bool long vec_cmplt (vector double, vector double);
38330     vector double vec_cpsgn (vector double, vector double);
38331     vector float vec_div (vector float, vector float);
38332     vector double vec_div (vector double, vector double);
38333     vector long vec_div (vector long, vector long);
38334     vector unsigned long vec_div (vector unsigned long, vector unsigned long);
38335     vector double vec_floor (vector double);
38336     vector double vec_ld (int, const vector double *);
38337     vector double vec_ld (int, const double *);
38338     vector double vec_ldl (int, const vector double *);
38339     vector double vec_ldl (int, const double *);
38340     vector unsigned char vec_lvsl (int, const volatile double *);
38341     vector unsigned char vec_lvsr (int, const volatile double *);
38342     vector double vec_madd (vector double, vector double, vector double);
38343     vector double vec_max (vector double, vector double);
38344     vector signed long vec_mergeh (vector signed long, vector signed long);
38345     vector signed long vec_mergeh (vector signed long, vector bool long);
38346     vector signed long vec_mergeh (vector bool long, vector signed long);
38347     vector unsigned long vec_mergeh (vector unsigned long, vector unsigned long);
38348     vector unsigned long vec_mergeh (vector unsigned long, vector bool long);
38349     vector unsigned long vec_mergeh (vector bool long, vector unsigned long);
38350     vector signed long vec_mergel (vector signed long, vector signed long);
38351     vector signed long vec_mergel (vector signed long, vector bool long);
38352     vector signed long vec_mergel (vector bool long, vector signed long);
38353     vector unsigned long vec_mergel (vector unsigned long, vector unsigned long);
38354     vector unsigned long vec_mergel (vector unsigned long, vector bool long);
38355     vector unsigned long vec_mergel (vector bool long, vector unsigned long);
38356     vector double vec_min (vector double, vector double);
38357     vector float vec_msub (vector float, vector float, vector float);
38358     vector double vec_msub (vector double, vector double, vector double);
38359     vector float vec_mul (vector float, vector float);
38360     vector double vec_mul (vector double, vector double);
38361     vector long vec_mul (vector long, vector long);
38362     vector unsigned long vec_mul (vector unsigned long, vector unsigned long);
38363     vector float vec_nearbyint (vector float);
38364     vector double vec_nearbyint (vector double);
38365     vector float vec_nmadd (vector float, vector float, vector float);
38366     vector double vec_nmadd (vector double, vector double, vector double);
38367     vector double vec_nmsub (vector double, vector double, vector double);
38368     vector double vec_nor (vector double, vector double);
38369     vector long vec_nor (vector long, vector long);
38370     vector long vec_nor (vector long, vector bool long);
38371     vector long vec_nor (vector bool long, vector long);
38372     vector unsigned long vec_nor (vector unsigned long, vector unsigned long);
38373     vector unsigned long vec_nor (vector unsigned long, vector bool long);
38374     vector unsigned long vec_nor (vector bool long, vector unsigned long);
38375     vector double vec_or (vector double, vector double);
38376     vector double vec_or (vector double, vector bool long);
38377     vector double vec_or (vector bool long, vector double);
38378     vector long vec_or (vector long, vector long);
38379     vector long vec_or (vector long, vector bool long);
38380     vector long vec_or (vector bool long, vector long);
38381     vector unsigned long vec_or (vector unsigned long, vector unsigned long);
38382     vector unsigned long vec_or (vector unsigned long, vector bool long);
38383     vector unsigned long vec_or (vector bool long, vector unsigned long);
38384     vector double vec_perm (vector double, vector double, vector unsigned char);
38385     vector long vec_perm (vector long, vector long, vector unsigned char);
38386     vector unsigned long vec_perm (vector unsigned long, vector unsigned long,
38387                                    vector unsigned char);
38388     vector double vec_rint (vector double);
38389     vector double vec_recip (vector double, vector double);
38390     vector double vec_rsqrt (vector double);
38391     vector double vec_rsqrte (vector double);
38392     vector double vec_sel (vector double, vector double, vector bool long);
38393     vector double vec_sel (vector double, vector double, vector unsigned long);
38394     vector long vec_sel (vector long, vector long, vector long);
38395     vector long vec_sel (vector long, vector long, vector unsigned long);
38396     vector long vec_sel (vector long, vector long, vector bool long);
38397     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
38398                                   vector long);
38399     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
38400                                   vector unsigned long);
38401     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
38402                                   vector bool long);
38403     vector double vec_splats (double);
38404     vector signed long vec_splats (signed long);
38405     vector unsigned long vec_splats (unsigned long);
38406     vector float vec_sqrt (vector float);
38407     vector double vec_sqrt (vector double);
38408     void vec_st (vector double, int, vector double *);
38409     void vec_st (vector double, int, double *);
38410     vector double vec_sub (vector double, vector double);
38411     vector double vec_trunc (vector double);
38412     vector double vec_xor (vector double, vector double);
38413     vector double vec_xor (vector double, vector bool long);
38414     vector double vec_xor (vector bool long, vector double);
38415     vector long vec_xor (vector long, vector long);
38416     vector long vec_xor (vector long, vector bool long);
38417     vector long vec_xor (vector bool long, vector long);
38418     vector unsigned long vec_xor (vector unsigned long, vector unsigned long);
38419     vector unsigned long vec_xor (vector unsigned long, vector bool long);
38420     vector unsigned long vec_xor (vector bool long, vector unsigned long);
38421     int vec_all_eq (vector double, vector double);
38422     int vec_all_ge (vector double, vector double);
38423     int vec_all_gt (vector double, vector double);
38424     int vec_all_le (vector double, vector double);
38425     int vec_all_lt (vector double, vector double);
38426     int vec_all_nan (vector double);
38427     int vec_all_ne (vector double, vector double);
38428     int vec_all_nge (vector double, vector double);
38429     int vec_all_ngt (vector double, vector double);
38430     int vec_all_nle (vector double, vector double);
38431     int vec_all_nlt (vector double, vector double);
38432     int vec_all_numeric (vector double);
38433     int vec_any_eq (vector double, vector double);
38434     int vec_any_ge (vector double, vector double);
38435     int vec_any_gt (vector double, vector double);
38436     int vec_any_le (vector double, vector double);
38437     int vec_any_lt (vector double, vector double);
38438     int vec_any_nan (vector double);
38439     int vec_any_ne (vector double, vector double);
38440     int vec_any_nge (vector double, vector double);
38441     int vec_any_ngt (vector double, vector double);
38442     int vec_any_nle (vector double, vector double);
38443     int vec_any_nlt (vector double, vector double);
38444     int vec_any_numeric (vector double);
38445
38446     vector double vec_vsx_ld (int, const vector double *);
38447     vector double vec_vsx_ld (int, const double *);
38448     vector float vec_vsx_ld (int, const vector float *);
38449     vector float vec_vsx_ld (int, const float *);
38450     vector bool int vec_vsx_ld (int, const vector bool int *);
38451     vector signed int vec_vsx_ld (int, const vector signed int *);
38452     vector signed int vec_vsx_ld (int, const int *);
38453     vector signed int vec_vsx_ld (int, const long *);
38454     vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
38455     vector unsigned int vec_vsx_ld (int, const unsigned int *);
38456     vector unsigned int vec_vsx_ld (int, const unsigned long *);
38457     vector bool short vec_vsx_ld (int, const vector bool short *);
38458     vector pixel vec_vsx_ld (int, const vector pixel *);
38459     vector signed short vec_vsx_ld (int, const vector signed short *);
38460     vector signed short vec_vsx_ld (int, const short *);
38461     vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
38462     vector unsigned short vec_vsx_ld (int, const unsigned short *);
38463     vector bool char vec_vsx_ld (int, const vector bool char *);
38464     vector signed char vec_vsx_ld (int, const vector signed char *);
38465     vector signed char vec_vsx_ld (int, const signed char *);
38466     vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
38467     vector unsigned char vec_vsx_ld (int, const unsigned char *);
38468
38469     void vec_vsx_st (vector double, int, vector double *);
38470     void vec_vsx_st (vector double, int, double *);
38471     void vec_vsx_st (vector float, int, vector float *);
38472     void vec_vsx_st (vector float, int, float *);
38473     void vec_vsx_st (vector signed int, int, vector signed int *);
38474     void vec_vsx_st (vector signed int, int, int *);
38475     void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
38476     void vec_vsx_st (vector unsigned int, int, unsigned int *);
38477     void vec_vsx_st (vector bool int, int, vector bool int *);
38478     void vec_vsx_st (vector bool int, int, unsigned int *);
38479     void vec_vsx_st (vector bool int, int, int *);
38480     void vec_vsx_st (vector signed short, int, vector signed short *);
38481     void vec_vsx_st (vector signed short, int, short *);
38482     void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
38483     void vec_vsx_st (vector unsigned short, int, unsigned short *);
38484     void vec_vsx_st (vector bool short, int, vector bool short *);
38485     void vec_vsx_st (vector bool short, int, unsigned short *);
38486     void vec_vsx_st (vector pixel, int, vector pixel *);
38487     void vec_vsx_st (vector pixel, int, unsigned short *);
38488     void vec_vsx_st (vector pixel, int, short *);
38489     void vec_vsx_st (vector bool short, int, short *);
38490     void vec_vsx_st (vector signed char, int, vector signed char *);
38491     void vec_vsx_st (vector signed char, int, signed char *);
38492     void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
38493     void vec_vsx_st (vector unsigned char, int, unsigned char *);
38494     void vec_vsx_st (vector bool char, int, vector bool char *);
38495     void vec_vsx_st (vector bool char, int, unsigned char *);
38496     void vec_vsx_st (vector bool char, int, signed char *);
38497
38498     vector double vec_xxpermdi (vector double, vector double, int);
38499     vector float vec_xxpermdi (vector float, vector float, int);
38500     vector long long vec_xxpermdi (vector long long, vector long long, int);
38501     vector unsigned long long vec_xxpermdi (vector unsigned long long,
38502                                             vector unsigned long long, int);
38503     vector int vec_xxpermdi (vector int, vector int, int);
38504     vector unsigned int vec_xxpermdi (vector unsigned int,
38505                                       vector unsigned int, int);
38506     vector short vec_xxpermdi (vector short, vector short, int);
38507     vector unsigned short vec_xxpermdi (vector unsigned short,
38508                                         vector unsigned short, int);
38509     vector signed char vec_xxpermdi (vector signed char, vector signed char, int);
38510     vector unsigned char vec_xxpermdi (vector unsigned char,
38511                                        vector unsigned char, int);
38512
38513     vector double vec_xxsldi (vector double, vector double, int);
38514     vector float vec_xxsldi (vector float, vector float, int);
38515     vector long long vec_xxsldi (vector long long, vector long long, int);
38516     vector unsigned long long vec_xxsldi (vector unsigned long long,
38517                                           vector unsigned long long, int);
38518     vector int vec_xxsldi (vector int, vector int, int);
38519     vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int);
38520     vector short vec_xxsldi (vector short, vector short, int);
38521     vector unsigned short vec_xxsldi (vector unsigned short,
38522                                       vector unsigned short, int);
38523     vector signed char vec_xxsldi (vector signed char, vector signed char, int);
38524     vector unsigned char vec_xxsldi (vector unsigned char,
38525                                      vector unsigned char, int);
38526
38527 Note that the `vec_ld' and `vec_st' built-in functions always generate
38528the AltiVec `LVX' and `STVX' instructions even if the VSX instruction
38529set is available.  The `vec_vsx_ld' and `vec_vsx_st' built-in functions
38530always generate the VSX `LXVD2X', `LXVW4X', `STXVD2X', and `STXVW4X'
38531instructions.
38532
38533 If the ISA 2.07 additions to the vector/scalar (power8-vector)
38534instruction set is available, the following additional functions are
38535available for both 32-bit and 64-bit targets.  For 64-bit targets, you
38536can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG
38537instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of
38538VECTOR UNSIGNED LONG LONG.
38539
38540     vector long long vec_abs (vector long long);
38541
38542     vector long long vec_add (vector long long, vector long long);
38543     vector unsigned long long vec_add (vector unsigned long long,
38544                                        vector unsigned long long);
38545
38546     int vec_all_eq (vector long long, vector long long);
38547     int vec_all_eq (vector unsigned long long, vector unsigned long long);
38548     int vec_all_ge (vector long long, vector long long);
38549     int vec_all_ge (vector unsigned long long, vector unsigned long long);
38550     int vec_all_gt (vector long long, vector long long);
38551     int vec_all_gt (vector unsigned long long, vector unsigned long long);
38552     int vec_all_le (vector long long, vector long long);
38553     int vec_all_le (vector unsigned long long, vector unsigned long long);
38554     int vec_all_lt (vector long long, vector long long);
38555     int vec_all_lt (vector unsigned long long, vector unsigned long long);
38556     int vec_all_ne (vector long long, vector long long);
38557     int vec_all_ne (vector unsigned long long, vector unsigned long long);
38558
38559     int vec_any_eq (vector long long, vector long long);
38560     int vec_any_eq (vector unsigned long long, vector unsigned long long);
38561     int vec_any_ge (vector long long, vector long long);
38562     int vec_any_ge (vector unsigned long long, vector unsigned long long);
38563     int vec_any_gt (vector long long, vector long long);
38564     int vec_any_gt (vector unsigned long long, vector unsigned long long);
38565     int vec_any_le (vector long long, vector long long);
38566     int vec_any_le (vector unsigned long long, vector unsigned long long);
38567     int vec_any_lt (vector long long, vector long long);
38568     int vec_any_lt (vector unsigned long long, vector unsigned long long);
38569     int vec_any_ne (vector long long, vector long long);
38570     int vec_any_ne (vector unsigned long long, vector unsigned long long);
38571
38572     vector long long vec_eqv (vector long long, vector long long);
38573     vector long long vec_eqv (vector bool long long, vector long long);
38574     vector long long vec_eqv (vector long long, vector bool long long);
38575     vector unsigned long long vec_eqv (vector unsigned long long,
38576                                        vector unsigned long long);
38577     vector unsigned long long vec_eqv (vector bool long long,
38578                                        vector unsigned long long);
38579     vector unsigned long long vec_eqv (vector unsigned long long,
38580                                        vector bool long long);
38581     vector int vec_eqv (vector int, vector int);
38582     vector int vec_eqv (vector bool int, vector int);
38583     vector int vec_eqv (vector int, vector bool int);
38584     vector unsigned int vec_eqv (vector unsigned int, vector unsigned int);
38585     vector unsigned int vec_eqv (vector bool unsigned int,
38586                                  vector unsigned int);
38587     vector unsigned int vec_eqv (vector unsigned int,
38588                                  vector bool unsigned int);
38589     vector short vec_eqv (vector short, vector short);
38590     vector short vec_eqv (vector bool short, vector short);
38591     vector short vec_eqv (vector short, vector bool short);
38592     vector unsigned short vec_eqv (vector unsigned short, vector unsigned short);
38593     vector unsigned short vec_eqv (vector bool unsigned short,
38594                                    vector unsigned short);
38595     vector unsigned short vec_eqv (vector unsigned short,
38596                                    vector bool unsigned short);
38597     vector signed char vec_eqv (vector signed char, vector signed char);
38598     vector signed char vec_eqv (vector bool signed char, vector signed char);
38599     vector signed char vec_eqv (vector signed char, vector bool signed char);
38600     vector unsigned char vec_eqv (vector unsigned char, vector unsigned char);
38601     vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char);
38602     vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char);
38603
38604     vector long long vec_max (vector long long, vector long long);
38605     vector unsigned long long vec_max (vector unsigned long long,
38606                                        vector unsigned long long);
38607
38608     vector signed int vec_mergee (vector signed int, vector signed int);
38609     vector unsigned int vec_mergee (vector unsigned int, vector unsigned int);
38610     vector bool int vec_mergee (vector bool int, vector bool int);
38611
38612     vector signed int vec_mergeo (vector signed int, vector signed int);
38613     vector unsigned int vec_mergeo (vector unsigned int, vector unsigned int);
38614     vector bool int vec_mergeo (vector bool int, vector bool int);
38615
38616     vector long long vec_min (vector long long, vector long long);
38617     vector unsigned long long vec_min (vector unsigned long long,
38618                                        vector unsigned long long);
38619
38620     vector long long vec_nand (vector long long, vector long long);
38621     vector long long vec_nand (vector bool long long, vector long long);
38622     vector long long vec_nand (vector long long, vector bool long long);
38623     vector unsigned long long vec_nand (vector unsigned long long,
38624                                         vector unsigned long long);
38625     vector unsigned long long vec_nand (vector bool long long,
38626                                        vector unsigned long long);
38627     vector unsigned long long vec_nand (vector unsigned long long,
38628                                         vector bool long long);
38629     vector int vec_nand (vector int, vector int);
38630     vector int vec_nand (vector bool int, vector int);
38631     vector int vec_nand (vector int, vector bool int);
38632     vector unsigned int vec_nand (vector unsigned int, vector unsigned int);
38633     vector unsigned int vec_nand (vector bool unsigned int,
38634                                   vector unsigned int);
38635     vector unsigned int vec_nand (vector unsigned int,
38636                                   vector bool unsigned int);
38637     vector short vec_nand (vector short, vector short);
38638     vector short vec_nand (vector bool short, vector short);
38639     vector short vec_nand (vector short, vector bool short);
38640     vector unsigned short vec_nand (vector unsigned short, vector unsigned short);
38641     vector unsigned short vec_nand (vector bool unsigned short,
38642                                     vector unsigned short);
38643     vector unsigned short vec_nand (vector unsigned short,
38644                                     vector bool unsigned short);
38645     vector signed char vec_nand (vector signed char, vector signed char);
38646     vector signed char vec_nand (vector bool signed char, vector signed char);
38647     vector signed char vec_nand (vector signed char, vector bool signed char);
38648     vector unsigned char vec_nand (vector unsigned char, vector unsigned char);
38649     vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char);
38650     vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char);
38651
38652     vector long long vec_orc (vector long long, vector long long);
38653     vector long long vec_orc (vector bool long long, vector long long);
38654     vector long long vec_orc (vector long long, vector bool long long);
38655     vector unsigned long long vec_orc (vector unsigned long long,
38656                                        vector unsigned long long);
38657     vector unsigned long long vec_orc (vector bool long long,
38658                                        vector unsigned long long);
38659     vector unsigned long long vec_orc (vector unsigned long long,
38660                                        vector bool long long);
38661     vector int vec_orc (vector int, vector int);
38662     vector int vec_orc (vector bool int, vector int);
38663     vector int vec_orc (vector int, vector bool int);
38664     vector unsigned int vec_orc (vector unsigned int, vector unsigned int);
38665     vector unsigned int vec_orc (vector bool unsigned int,
38666                                  vector unsigned int);
38667     vector unsigned int vec_orc (vector unsigned int,
38668                                  vector bool unsigned int);
38669     vector short vec_orc (vector short, vector short);
38670     vector short vec_orc (vector bool short, vector short);
38671     vector short vec_orc (vector short, vector bool short);
38672     vector unsigned short vec_orc (vector unsigned short, vector unsigned short);
38673     vector unsigned short vec_orc (vector bool unsigned short,
38674                                    vector unsigned short);
38675     vector unsigned short vec_orc (vector unsigned short,
38676                                    vector bool unsigned short);
38677     vector signed char vec_orc (vector signed char, vector signed char);
38678     vector signed char vec_orc (vector bool signed char, vector signed char);
38679     vector signed char vec_orc (vector signed char, vector bool signed char);
38680     vector unsigned char vec_orc (vector unsigned char, vector unsigned char);
38681     vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char);
38682     vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char);
38683
38684     vector int vec_pack (vector long long, vector long long);
38685     vector unsigned int vec_pack (vector unsigned long long,
38686                                   vector unsigned long long);
38687     vector bool int vec_pack (vector bool long long, vector bool long long);
38688
38689     vector int vec_packs (vector long long, vector long long);
38690     vector unsigned int vec_packs (vector unsigned long long,
38691                                    vector unsigned long long);
38692
38693     vector unsigned int vec_packsu (vector long long, vector long long);
38694     vector unsigned int vec_packsu (vector unsigned long long,
38695                                     vector unsigned long long);
38696
38697     vector long long vec_rl (vector long long,
38698                              vector unsigned long long);
38699     vector long long vec_rl (vector unsigned long long,
38700                              vector unsigned long long);
38701
38702     vector long long vec_sl (vector long long, vector unsigned long long);
38703     vector long long vec_sl (vector unsigned long long,
38704                              vector unsigned long long);
38705
38706     vector long long vec_sr (vector long long, vector unsigned long long);
38707     vector unsigned long long char vec_sr (vector unsigned long long,
38708                                            vector unsigned long long);
38709
38710     vector long long vec_sra (vector long long, vector unsigned long long);
38711     vector unsigned long long vec_sra (vector unsigned long long,
38712                                        vector unsigned long long);
38713
38714     vector long long vec_sub (vector long long, vector long long);
38715     vector unsigned long long vec_sub (vector unsigned long long,
38716                                        vector unsigned long long);
38717
38718     vector long long vec_unpackh (vector int);
38719     vector unsigned long long vec_unpackh (vector unsigned int);
38720
38721     vector long long vec_unpackl (vector int);
38722     vector unsigned long long vec_unpackl (vector unsigned int);
38723
38724     vector long long vec_vaddudm (vector long long, vector long long);
38725     vector long long vec_vaddudm (vector bool long long, vector long long);
38726     vector long long vec_vaddudm (vector long long, vector bool long long);
38727     vector unsigned long long vec_vaddudm (vector unsigned long long,
38728                                            vector unsigned long long);
38729     vector unsigned long long vec_vaddudm (vector bool unsigned long long,
38730                                            vector unsigned long long);
38731     vector unsigned long long vec_vaddudm (vector unsigned long long,
38732                                            vector bool unsigned long long);
38733
38734     vector long long vec_vbpermq (vector signed char, vector signed char);
38735     vector long long vec_vbpermq (vector unsigned char, vector unsigned char);
38736
38737     vector long long vec_cntlz (vector long long);
38738     vector unsigned long long vec_cntlz (vector unsigned long long);
38739     vector int vec_cntlz (vector int);
38740     vector unsigned int vec_cntlz (vector int);
38741     vector short vec_cntlz (vector short);
38742     vector unsigned short vec_cntlz (vector unsigned short);
38743     vector signed char vec_cntlz (vector signed char);
38744     vector unsigned char vec_cntlz (vector unsigned char);
38745
38746     vector long long vec_vclz (vector long long);
38747     vector unsigned long long vec_vclz (vector unsigned long long);
38748     vector int vec_vclz (vector int);
38749     vector unsigned int vec_vclz (vector int);
38750     vector short vec_vclz (vector short);
38751     vector unsigned short vec_vclz (vector unsigned short);
38752     vector signed char vec_vclz (vector signed char);
38753     vector unsigned char vec_vclz (vector unsigned char);
38754
38755     vector signed char vec_vclzb (vector signed char);
38756     vector unsigned char vec_vclzb (vector unsigned char);
38757
38758     vector long long vec_vclzd (vector long long);
38759     vector unsigned long long vec_vclzd (vector unsigned long long);
38760
38761     vector short vec_vclzh (vector short);
38762     vector unsigned short vec_vclzh (vector unsigned short);
38763
38764     vector int vec_vclzw (vector int);
38765     vector unsigned int vec_vclzw (vector int);
38766
38767     vector signed char vec_vgbbd (vector signed char);
38768     vector unsigned char vec_vgbbd (vector unsigned char);
38769
38770     vector long long vec_vmaxsd (vector long long, vector long long);
38771
38772     vector unsigned long long vec_vmaxud (vector unsigned long long,
38773                                           unsigned vector long long);
38774
38775     vector long long vec_vminsd (vector long long, vector long long);
38776
38777     vector unsigned long long vec_vminud (vector long long,
38778                                           vector long long);
38779
38780     vector int vec_vpksdss (vector long long, vector long long);
38781     vector unsigned int vec_vpksdss (vector long long, vector long long);
38782
38783     vector unsigned int vec_vpkudus (vector unsigned long long,
38784                                      vector unsigned long long);
38785
38786     vector int vec_vpkudum (vector long long, vector long long);
38787     vector unsigned int vec_vpkudum (vector unsigned long long,
38788                                      vector unsigned long long);
38789     vector bool int vec_vpkudum (vector bool long long, vector bool long long);
38790
38791     vector long long vec_vpopcnt (vector long long);
38792     vector unsigned long long vec_vpopcnt (vector unsigned long long);
38793     vector int vec_vpopcnt (vector int);
38794     vector unsigned int vec_vpopcnt (vector int);
38795     vector short vec_vpopcnt (vector short);
38796     vector unsigned short vec_vpopcnt (vector unsigned short);
38797     vector signed char vec_vpopcnt (vector signed char);
38798     vector unsigned char vec_vpopcnt (vector unsigned char);
38799
38800     vector signed char vec_vpopcntb (vector signed char);
38801     vector unsigned char vec_vpopcntb (vector unsigned char);
38802
38803     vector long long vec_vpopcntd (vector long long);
38804     vector unsigned long long vec_vpopcntd (vector unsigned long long);
38805
38806     vector short vec_vpopcnth (vector short);
38807     vector unsigned short vec_vpopcnth (vector unsigned short);
38808
38809     vector int vec_vpopcntw (vector int);
38810     vector unsigned int vec_vpopcntw (vector int);
38811
38812     vector long long vec_vrld (vector long long, vector unsigned long long);
38813     vector unsigned long long vec_vrld (vector unsigned long long,
38814                                         vector unsigned long long);
38815
38816     vector long long vec_vsld (vector long long, vector unsigned long long);
38817     vector long long vec_vsld (vector unsigned long long,
38818                                vector unsigned long long);
38819
38820     vector long long vec_vsrad (vector long long, vector unsigned long long);
38821     vector unsigned long long vec_vsrad (vector unsigned long long,
38822                                          vector unsigned long long);
38823
38824     vector long long vec_vsrd (vector long long, vector unsigned long long);
38825     vector unsigned long long char vec_vsrd (vector unsigned long long,
38826                                              vector unsigned long long);
38827
38828     vector long long vec_vsubudm (vector long long, vector long long);
38829     vector long long vec_vsubudm (vector bool long long, vector long long);
38830     vector long long vec_vsubudm (vector long long, vector bool long long);
38831     vector unsigned long long vec_vsubudm (vector unsigned long long,
38832                                            vector unsigned long long);
38833     vector unsigned long long vec_vsubudm (vector bool long long,
38834                                            vector unsigned long long);
38835     vector unsigned long long vec_vsubudm (vector unsigned long long,
38836                                            vector bool long long);
38837
38838     vector long long vec_vupkhsw (vector int);
38839     vector unsigned long long vec_vupkhsw (vector unsigned int);
38840
38841     vector long long vec_vupklsw (vector int);
38842     vector unsigned long long vec_vupklsw (vector int);
38843
38844 If the ISA 2.07 additions to the vector/scalar (power8-vector)
38845instruction set is available, the following additional functions are
38846available for 64-bit targets.  New vector types (VECTOR __INT128_T and
38847VECTOR __UINT128_T) are available to hold the __INT128_T and
38848__UINT128_T types to use these builtins.
38849
38850 The normal vector extract, and set operations work on VECTOR
38851__INT128_T and VECTOR __UINT128_T types, but the index value must be 0.
38852
38853     vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t);
38854     vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t);
38855
38856     vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t);
38857     vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t);
38858
38859     vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t,
38860                                     vector __int128_t);
38861     vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t,
38862                                      vector __uint128_t);
38863
38864     vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t,
38865                                     vector __int128_t);
38866     vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t,
38867                                      vector __uint128_t);
38868
38869     vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t,
38870                                     vector __int128_t);
38871     vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t,
38872                                      vector __uint128_t);
38873
38874     vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t,
38875                                     vector __int128_t);
38876     vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t,
38877                                      vector __uint128_t);
38878
38879     vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t);
38880     vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t);
38881
38882     __int128_t vec_vsubuqm (__int128_t, __int128_t);
38883     __uint128_t vec_vsubuqm (__uint128_t, __uint128_t);
38884
38885     vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t);
38886     int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t);
38887     int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t);
38888     int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t);
38889     int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t);
38890     vector __int128_t bcdsub (vector __int128_t, vector__int128_t);
38891     int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t);
38892     int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t);
38893     int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t);
38894     int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t);
38895
38896 If the cryptographic instructions are enabled (`-mcrypto' or
38897`-mcpu=power8'), the following builtins are enabled.
38898
38899     vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long);
38900
38901     vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long,
38902                                                         vector unsigned long long);
38903
38904     vector unsigned long long __builtin_crypto_vcipherlast
38905                                          (vector unsigned long long,
38906                                           vector unsigned long long);
38907
38908     vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
38909                                                          vector unsigned long long);
38910
38911     vector unsigned long long __builtin_crypto_vncipherlast
38912                                          (vector unsigned long long,
38913                                           vector unsigned long long);
38914
38915     vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
38916                                                     vector unsigned char,
38917                                                     vector unsigned char);
38918
38919     vector unsigned short __builtin_crypto_vpermxor (vector unsigned short,
38920                                                      vector unsigned short,
38921                                                      vector unsigned short);
38922
38923     vector unsigned int __builtin_crypto_vpermxor (vector unsigned int,
38924                                                    vector unsigned int,
38925                                                    vector unsigned int);
38926
38927     vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long,
38928                                                          vector unsigned long long,
38929                                                          vector unsigned long long);
38930
38931     vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char,
38932                                                    vector unsigned char);
38933
38934     vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short,
38935                                                     vector unsigned short);
38936
38937     vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int,
38938                                                   vector unsigned int);
38939
38940     vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long,
38941                                                         vector unsigned long long);
38942
38943     vector unsigned long long __builtin_crypto_vshasigmad
38944                                    (vector unsigned long long, int, int);
38945
38946     vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int,
38947                                                      int, int);
38948
38949 The second argument to the __BUILTIN_CRYPTO_VSHASIGMAD and
38950__BUILTIN_CRYPTO_VSHASIGMAW builtin functions must be a constant
38951integer that is 0 or 1.  The third argument to these builtin functions
38952must be a constant integer in the range of 0 to 15.
38953
38954
38955File: gcc.info,  Node: PowerPC Hardware Transactional Memory Built-in Functions,  Next: RX Built-in Functions,  Prev: PowerPC AltiVec/VSX Built-in Functions,  Up: Target Builtins
38956
389576.58.21 PowerPC Hardware Transactional Memory Built-in Functions
38958----------------------------------------------------------------
38959
38960GCC provides two interfaces for accessing the Hardware Transactional
38961Memory (HTM) instructions available on some of the PowerPC family of
38962processors (eg, POWER8).  The two interfaces come in a low level
38963interface, consisting of built-in functions specific to PowerPC and a
38964higher level interface consisting of inline functions that are common
38965between PowerPC and S/390.
38966
389676.58.21.1 PowerPC HTM Low Level Built-in Functions
38968..................................................
38969
38970The following low level built-in functions are available with `-mhtm'
38971or `-mcpu=CPU' where CPU is `power8' or later.  They all generate the
38972machine instruction that is part of the name.
38973
38974 The HTM builtins (with the exception of `__builtin_tbegin') return the
38975full 4-bit condition register value set by their associated hardware
38976instruction.  The header file `htmintrin.h' defines some macros that can
38977be used to decipher the return value.  The `__builtin_tbegin' builtin
38978returns a simple true or false value depending on whether a transaction
38979was successfully started or not.  The arguments of the builtins match
38980exactly the type and order of the associated hardware instruction's
38981operands, except for the `__builtin_tcheck' builtin, which does not
38982take any input arguments.  Refer to the ISA manual for a description of
38983each instruction's operands.
38984
38985     unsigned int __builtin_tbegin (unsigned int)
38986     unsigned int __builtin_tend (unsigned int)
38987
38988     unsigned int __builtin_tabort (unsigned int)
38989     unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int)
38990     unsigned int __builtin_tabortdci (unsigned int, unsigned int, int)
38991     unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
38992     unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)
38993
38994     unsigned int __builtin_tcheck (void)
38995     unsigned int __builtin_treclaim (unsigned int)
38996     unsigned int __builtin_trechkpt (void)
38997     unsigned int __builtin_tsr (unsigned int)
38998
38999 In addition to the above HTM built-ins, we have added built-ins for
39000some common extended mnemonics of the HTM instructions:
39001
39002     unsigned int __builtin_tendall (void)
39003     unsigned int __builtin_tresume (void)
39004     unsigned int __builtin_tsuspend (void)
39005
39006 Note that the semantics of the above HTM builtins are required to mimic
39007the locking semantics used for critical sections.  Builtins that are
39008used to create a new transaction or restart a suspended transaction
39009must have lock acquisition like semantics while those builtins that end
39010or suspend a transaction must have lock release like semantics.
39011Specifically, this must mimic lock semantics as specified by C++11, for
39012example: Lock acquisition is as-if an execution of
39013__atomic_exchange_n(&globallock,1,__ATOMIC_ACQUIRE) that returns 0, and
39014lock release is as-if an execution of
39015__atomic_store(&globallock,0,__ATOMIC_RELEASE), with globallock being an
39016implicit implementation-defined lock used for all transactions.  The HTM
39017instructions associated with with the builtins inherently provide the
39018correct acquisition and release hardware barriers required.  However,
39019the compiler must also be prohibited from moving loads and stores across
39020the builtins in a way that would violate their semantics.  This has been
39021accomplished by adding memory barriers to the associated HTM
39022instructions (which is a conservative approach to provide acquire and
39023release semantics).  Earlier versions of the compiler did not treat the
39024HTM instructions as memory barriers.  A `__TM_FENCE__' macro has been
39025added, which can be used to determine whether the current compiler
39026treats HTM instructions as memory barriers or not.  This allows the
39027user to explicitly add memory barriers to their code when using an
39028older version of the compiler.
39029
39030 The following set of built-in functions are available to gain access
39031to the HTM specific special purpose registers.
39032
39033     unsigned long __builtin_get_texasr (void)
39034     unsigned long __builtin_get_texasru (void)
39035     unsigned long __builtin_get_tfhar (void)
39036     unsigned long __builtin_get_tfiar (void)
39037
39038     void __builtin_set_texasr (unsigned long);
39039     void __builtin_set_texasru (unsigned long);
39040     void __builtin_set_tfhar (unsigned long);
39041     void __builtin_set_tfiar (unsigned long);
39042
39043 Example usage of these low level built-in functions may look like:
39044
39045     #include <htmintrin.h>
39046
39047     int num_retries = 10;
39048
39049     while (1)
39050       {
39051         if (__builtin_tbegin (0))
39052           {
39053             /* Transaction State Initiated.  */
39054             if (is_locked (lock))
39055               __builtin_tabort (0);
39056             ... transaction code...
39057             __builtin_tend (0);
39058             break;
39059           }
39060         else
39061           {
39062             /* Transaction State Failed.  Use locks if the transaction
39063                failure is "persistent" or we've tried too many times.  */
39064             if (num_retries-- <= 0
39065                 || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
39066               {
39067                 acquire_lock (lock);
39068                 ... non transactional fallback path...
39069                 release_lock (lock);
39070                 break;
39071               }
39072           }
39073       }
39074
39075 One final built-in function has been added that returns the value of
39076the 2-bit Transaction State field of the Machine Status Register (MSR)
39077as stored in `CR0'.
39078
39079     unsigned long __builtin_ttest (void)
39080
39081 This built-in can be used to determine the current transaction state
39082using the following code example:
39083
39084     #include <htmintrin.h>
39085
39086     unsigned char tx_state = _HTM_STATE (__builtin_ttest ());
39087
39088     if (tx_state == _HTM_TRANSACTIONAL)
39089       {
39090         /* Code to use in transactional state.  */
39091       }
39092     else if (tx_state == _HTM_NONTRANSACTIONAL)
39093       {
39094         /* Code to use in non-transactional state.  */
39095       }
39096     else if (tx_state == _HTM_SUSPENDED)
39097       {
39098         /* Code to use in transaction suspended state.  */
39099       }
39100
391016.58.21.2 PowerPC HTM High Level Inline Functions
39102.................................................
39103
39104The following high level HTM interface is made available by including
39105`<htmxlintrin.h>' and using `-mhtm' or `-mcpu=CPU' where CPU is
39106`power8' or later.  This interface is common between PowerPC and S/390,
39107allowing users to write one HTM source implementation that can be
39108compiled and executed on either system.
39109
39110     long __TM_simple_begin (void)
39111     long __TM_begin (void* const TM_buff)
39112     long __TM_end (void)
39113     void __TM_abort (void)
39114     void __TM_named_abort (unsigned char const code)
39115     void __TM_resume (void)
39116     void __TM_suspend (void)
39117
39118     long __TM_is_user_abort (void* const TM_buff)
39119     long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code)
39120     long __TM_is_illegal (void* const TM_buff)
39121     long __TM_is_footprint_exceeded (void* const TM_buff)
39122     long __TM_nesting_depth (void* const TM_buff)
39123     long __TM_is_nested_too_deep(void* const TM_buff)
39124     long __TM_is_conflict(void* const TM_buff)
39125     long __TM_is_failure_persistent(void* const TM_buff)
39126     long __TM_failure_address(void* const TM_buff)
39127     long long __TM_failure_code(void* const TM_buff)
39128
39129 Using these common set of HTM inline functions, we can create a more
39130portable version of the HTM example in the previous section that will
39131work on either PowerPC or S/390:
39132
39133     #include <htmxlintrin.h>
39134
39135     int num_retries = 10;
39136     TM_buff_type TM_buff;
39137
39138     while (1)
39139       {
39140         if (__TM_begin (TM_buff) == _HTM_TBEGIN_STARTED)
39141           {
39142             /* Transaction State Initiated.  */
39143             if (is_locked (lock))
39144               __TM_abort ();
39145             ... transaction code...
39146             __TM_end ();
39147             break;
39148           }
39149         else
39150           {
39151             /* Transaction State Failed.  Use locks if the transaction
39152                failure is "persistent" or we've tried too many times.  */
39153             if (num_retries-- <= 0
39154                 || __TM_is_failure_persistent (TM_buff))
39155               {
39156                 acquire_lock (lock);
39157                 ... non transactional fallback path...
39158                 release_lock (lock);
39159                 break;
39160               }
39161           }
39162       }
39163
39164
39165File: gcc.info,  Node: RX Built-in Functions,  Next: S/390 System z Built-in Functions,  Prev: PowerPC Hardware Transactional Memory Built-in Functions,  Up: Target Builtins
39166
391676.58.22 RX Built-in Functions
39168-----------------------------
39169
39170GCC supports some of the RX instructions which cannot be expressed in
39171the C programming language via the use of built-in functions.  The
39172following functions are supported:
39173
39174 -- Built-in Function: void __builtin_rx_brk (void)
39175     Generates the `brk' machine instruction.
39176
39177 -- Built-in Function: void __builtin_rx_clrpsw (int)
39178     Generates the `clrpsw' machine instruction to clear the specified
39179     bit in the processor status word.
39180
39181 -- Built-in Function: void __builtin_rx_int (int)
39182     Generates the `int' machine instruction to generate an interrupt
39183     with the specified value.
39184
39185 -- Built-in Function: void __builtin_rx_machi (int, int)
39186     Generates the `machi' machine instruction to add the result of
39187     multiplying the top 16 bits of the two arguments into the
39188     accumulator.
39189
39190 -- Built-in Function: void __builtin_rx_maclo (int, int)
39191     Generates the `maclo' machine instruction to add the result of
39192     multiplying the bottom 16 bits of the two arguments into the
39193     accumulator.
39194
39195 -- Built-in Function: void __builtin_rx_mulhi (int, int)
39196     Generates the `mulhi' machine instruction to place the result of
39197     multiplying the top 16 bits of the two arguments into the
39198     accumulator.
39199
39200 -- Built-in Function: void __builtin_rx_mullo (int, int)
39201     Generates the `mullo' machine instruction to place the result of
39202     multiplying the bottom 16 bits of the two arguments into the
39203     accumulator.
39204
39205 -- Built-in Function: int __builtin_rx_mvfachi (void)
39206     Generates the `mvfachi' machine instruction to read the top 32
39207     bits of the accumulator.
39208
39209 -- Built-in Function: int __builtin_rx_mvfacmi (void)
39210     Generates the `mvfacmi' machine instruction to read the middle 32
39211     bits of the accumulator.
39212
39213 -- Built-in Function: int __builtin_rx_mvfc (int)
39214     Generates the `mvfc' machine instruction which reads the control
39215     register specified in its argument and returns its value.
39216
39217 -- Built-in Function: void __builtin_rx_mvtachi (int)
39218     Generates the `mvtachi' machine instruction to set the top 32 bits
39219     of the accumulator.
39220
39221 -- Built-in Function: void __builtin_rx_mvtaclo (int)
39222     Generates the `mvtaclo' machine instruction to set the bottom 32
39223     bits of the accumulator.
39224
39225 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val)
39226     Generates the `mvtc' machine instruction which sets control
39227     register number `reg' to `val'.
39228
39229 -- Built-in Function: void __builtin_rx_mvtipl (int)
39230     Generates the `mvtipl' machine instruction set the interrupt
39231     priority level.
39232
39233 -- Built-in Function: void __builtin_rx_racw (int)
39234     Generates the `racw' machine instruction to round the accumulator
39235     according to the specified mode.
39236
39237 -- Built-in Function: int __builtin_rx_revw (int)
39238     Generates the `revw' machine instruction which swaps the bytes in
39239     the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
39240     and also bits 16-23 occupy bits 24-31 and vice versa.
39241
39242 -- Built-in Function: void __builtin_rx_rmpa (void)
39243     Generates the `rmpa' machine instruction which initiates a
39244     repeated multiply and accumulate sequence.
39245
39246 -- Built-in Function: void __builtin_rx_round (float)
39247     Generates the `round' machine instruction which returns the
39248     floating-point argument rounded according to the current rounding
39249     mode set in the floating-point status word register.
39250
39251 -- Built-in Function: int __builtin_rx_sat (int)
39252     Generates the `sat' machine instruction which returns the
39253     saturated value of the argument.
39254
39255 -- Built-in Function: void __builtin_rx_setpsw (int)
39256     Generates the `setpsw' machine instruction to set the specified
39257     bit in the processor status word.
39258
39259 -- Built-in Function: void __builtin_rx_wait (void)
39260     Generates the `wait' machine instruction.
39261
39262
39263File: gcc.info,  Node: S/390 System z Built-in Functions,  Next: SH Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
39264
392656.58.23 S/390 System z Built-in Functions
39266-----------------------------------------
39267
39268 -- Built-in Function: int __builtin_tbegin (void*)
39269     Generates the `tbegin' machine instruction starting a
39270     non-constraint hardware transaction.  If the parameter is non-NULL
39271     the memory area is used to store the transaction diagnostic buffer
39272     and will be passed as first operand to `tbegin'.  This buffer can
39273     be defined using the `struct __htm_tdb' C struct defined in
39274     `htmintrin.h' and must reside on a double-word boundary.  The
39275     second tbegin operand is set to `0xff0c'. This enables
39276     save/restore of all GPRs and disables aborts for FPR and AR
39277     manipulations inside the transaction body.  The condition code set
39278     by the tbegin instruction is returned as integer value.  The tbegin
39279     instruction by definition overwrites the content of all FPRs.  The
39280     compiler will generate code which saves and restores the FPRs.  For
39281     soft-float code it is recommended to used the `*_nofloat' variant.
39282     In order to prevent a TDB from being written it is required to
39283     pass an constant zero value as parameter.  Passing the zero value
39284     through a variable is not sufficient.  Although modifications of
39285     access registers inside the transaction will not trigger an
39286     transaction abort it is not supported to actually modify them.
39287     Access registers do not get saved when entering a transaction.
39288     They will have undefined state when reaching the abort code.
39289
39290 Macros for the possible return codes of tbegin are defined in the
39291`htmintrin.h' header file:
39292
39293`_HTM_TBEGIN_STARTED'
39294     `tbegin' has been executed as part of normal processing.  The
39295     transaction body is supposed to be executed.
39296
39297`_HTM_TBEGIN_INDETERMINATE'
39298     The transaction was aborted due to an indeterminate condition which
39299     might be persistent.
39300
39301`_HTM_TBEGIN_TRANSIENT'
39302     The transaction aborted due to a transient failure.  The
39303     transaction should be re-executed in that case.
39304
39305`_HTM_TBEGIN_PERSISTENT'
39306     The transaction aborted due to a persistent failure.  Re-execution
39307     under same circumstances will not be productive.
39308
39309 -- Macro: _HTM_FIRST_USER_ABORT_CODE
39310     The `_HTM_FIRST_USER_ABORT_CODE' defined in `htmintrin.h'
39311     specifies the first abort code which can be used for
39312     `__builtin_tabort'.  Values below this threshold are reserved for
39313     machine use.
39314
39315 -- Data type: struct __htm_tdb
39316     The `struct __htm_tdb' defined in `htmintrin.h' describes the
39317     structure of the transaction diagnostic block as specified in the
39318     Principles of Operation manual chapter 5-91.
39319
39320 -- Built-in Function: int __builtin_tbegin_nofloat (void*)
39321     Same as `__builtin_tbegin' but without FPR saves and restores.
39322     Using this variant in code making use of FPRs will leave the FPRs
39323     in undefined state when entering the transaction abort handler
39324     code.
39325
39326 -- Built-in Function: int __builtin_tbegin_retry (void*, int)
39327     In addition to `__builtin_tbegin' a loop for transient failures is
39328     generated.  If tbegin returns a condition code of 2 the transaction
39329     will be retried as often as specified in the second argument.  The
39330     perform processor assist instruction is used to tell the CPU about
39331     the number of fails so far.
39332
39333 -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int)
39334     Same as `__builtin_tbegin_retry' but without FPR saves and
39335     restores.  Using this variant in code making use of FPRs will leave
39336     the FPRs in undefined state when entering the transaction abort
39337     handler code.
39338
39339 -- Built-in Function: void __builtin_tbeginc (void)
39340     Generates the `tbeginc' machine instruction starting a constraint
39341     hardware transaction.  The second operand is set to `0xff08'.
39342
39343 -- Built-in Function: int __builtin_tend (void)
39344     Generates the `tend' machine instruction finishing a transaction
39345     and making the changes visible to other threads.  The condition
39346     code generated by tend is returned as integer value.
39347
39348 -- Built-in Function: void __builtin_tabort (int)
39349     Generates the `tabort' machine instruction with the specified
39350     abort code.  Abort codes from 0 through 255 are reserved and will
39351     result in an error message.
39352
39353 -- Built-in Function: void __builtin_tx_assist (int)
39354     Generates the `ppa rX,rY,1' machine instruction.  Where the
39355     integer parameter is loaded into rX and a value of zero is loaded
39356     into rY.  The integer parameter specifies the number of times the
39357     transaction repeatedly aborted.
39358
39359 -- Built-in Function: int __builtin_tx_nesting_depth (void)
39360     Generates the `etnd' machine instruction.  The current nesting
39361     depth is returned as integer value.  For a nesting depth of 0 the
39362     code is not executed as part of an transaction.
39363
39364 -- Built-in Function: void __builtin_non_tx_store (uint64_t *,
39365          uint64_t)
39366     Generates the `ntstg' machine instruction.  The second argument is
39367     written to the first arguments location.  The store operation will
39368     not be rolled-back in case of an transaction abort.
39369
39370
39371File: gcc.info,  Node: SH Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: S/390 System z Built-in Functions,  Up: Target Builtins
39372
393736.58.24 SH Built-in Functions
39374-----------------------------
39375
39376The following built-in functions are supported on the SH1, SH2, SH3 and
39377SH4 families of processors:
39378
39379 -- Built-in Function: void __builtin_set_thread_pointer (void *PTR)
39380     Sets the `GBR' register to the specified value PTR.  This is
39381     usually used by system code that manages threads and execution
39382     contexts.  The compiler normally does not generate code that
39383     modifies the contents of `GBR' and thus the value is preserved
39384     across function calls.  Changing the `GBR' value in user code must
39385     be done with caution, since the compiler might use `GBR' in order
39386     to access thread local variables.
39387
39388
39389 -- Built-in Function: void * __builtin_thread_pointer (void)
39390     Returns the value that is currently set in the `GBR' register.
39391     Memory loads and stores that use the thread pointer as a base
39392     address are turned into `GBR' based displacement loads and stores,
39393     if possible.  For example:
39394          struct my_tcb
39395          {
39396             int a, b, c, d, e;
39397          };
39398
39399          int get_tcb_value (void)
39400          {
39401            // Generate `mov.l @(8,gbr),r0' instruction
39402            return ((my_tcb*)__builtin_thread_pointer ())->c;
39403          }
39404
39405 -- Built-in Function: unsigned int __builtin_sh_get_fpscr (void)
39406     Returns the value that is currently set in the `FPSCR' register.
39407
39408 -- Built-in Function: void __builtin_sh_set_fpscr (unsigned int VAL)
39409     Sets the `FPSCR' register to the specified value VAL, while
39410     preserving the current values of the FR, SZ and PR bits.
39411
39412
39413File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: SPU Built-in Functions,  Prev: SH Built-in Functions,  Up: Target Builtins
39414
394156.58.25 SPARC VIS Built-in Functions
39416------------------------------------
39417
39418GCC supports SIMD operations on the SPARC using both the generic vector
39419extensions (*note Vector Extensions::) as well as built-in functions for
39420the SPARC Visual Instruction Set (VIS).  When you use the `-mvis'
39421switch, the VIS extension is exposed as the following built-in
39422functions:
39423
39424     typedef int v1si __attribute__ ((vector_size (4)));
39425     typedef int v2si __attribute__ ((vector_size (8)));
39426     typedef short v4hi __attribute__ ((vector_size (8)));
39427     typedef short v2hi __attribute__ ((vector_size (4)));
39428     typedef unsigned char v8qi __attribute__ ((vector_size (8)));
39429     typedef unsigned char v4qi __attribute__ ((vector_size (4)));
39430
39431     void __builtin_vis_write_gsr (int64_t);
39432     int64_t __builtin_vis_read_gsr (void);
39433
39434     void * __builtin_vis_alignaddr (void *, long);
39435     void * __builtin_vis_alignaddrl (void *, long);
39436     int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
39437     v2si __builtin_vis_faligndatav2si (v2si, v2si);
39438     v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
39439     v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
39440
39441     v4hi __builtin_vis_fexpand (v4qi);
39442
39443     v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
39444     v4hi __builtin_vis_fmul8x16au (v4qi, v2hi);
39445     v4hi __builtin_vis_fmul8x16al (v4qi, v2hi);
39446     v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
39447     v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
39448     v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
39449     v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
39450
39451     v4qi __builtin_vis_fpack16 (v4hi);
39452     v8qi __builtin_vis_fpack32 (v2si, v8qi);
39453     v2hi __builtin_vis_fpackfix (v2si);
39454     v8qi __builtin_vis_fpmerge (v4qi, v4qi);
39455
39456     int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
39457
39458     long __builtin_vis_edge8 (void *, void *);
39459     long __builtin_vis_edge8l (void *, void *);
39460     long __builtin_vis_edge16 (void *, void *);
39461     long __builtin_vis_edge16l (void *, void *);
39462     long __builtin_vis_edge32 (void *, void *);
39463     long __builtin_vis_edge32l (void *, void *);
39464
39465     long __builtin_vis_fcmple16 (v4hi, v4hi);
39466     long __builtin_vis_fcmple32 (v2si, v2si);
39467     long __builtin_vis_fcmpne16 (v4hi, v4hi);
39468     long __builtin_vis_fcmpne32 (v2si, v2si);
39469     long __builtin_vis_fcmpgt16 (v4hi, v4hi);
39470     long __builtin_vis_fcmpgt32 (v2si, v2si);
39471     long __builtin_vis_fcmpeq16 (v4hi, v4hi);
39472     long __builtin_vis_fcmpeq32 (v2si, v2si);
39473
39474     v4hi __builtin_vis_fpadd16 (v4hi, v4hi);
39475     v2hi __builtin_vis_fpadd16s (v2hi, v2hi);
39476     v2si __builtin_vis_fpadd32 (v2si, v2si);
39477     v1si __builtin_vis_fpadd32s (v1si, v1si);
39478     v4hi __builtin_vis_fpsub16 (v4hi, v4hi);
39479     v2hi __builtin_vis_fpsub16s (v2hi, v2hi);
39480     v2si __builtin_vis_fpsub32 (v2si, v2si);
39481     v1si __builtin_vis_fpsub32s (v1si, v1si);
39482
39483     long __builtin_vis_array8 (long, long);
39484     long __builtin_vis_array16 (long, long);
39485     long __builtin_vis_array32 (long, long);
39486
39487 When you use the `-mvis2' switch, the VIS version 2.0 built-in
39488functions also become available:
39489
39490     long __builtin_vis_bmask (long, long);
39491     int64_t __builtin_vis_bshuffledi (int64_t, int64_t);
39492     v2si __builtin_vis_bshufflev2si (v2si, v2si);
39493     v4hi __builtin_vis_bshufflev2si (v4hi, v4hi);
39494     v8qi __builtin_vis_bshufflev2si (v8qi, v8qi);
39495
39496     long __builtin_vis_edge8n (void *, void *);
39497     long __builtin_vis_edge8ln (void *, void *);
39498     long __builtin_vis_edge16n (void *, void *);
39499     long __builtin_vis_edge16ln (void *, void *);
39500     long __builtin_vis_edge32n (void *, void *);
39501     long __builtin_vis_edge32ln (void *, void *);
39502
39503 When you use the `-mvis3' switch, the VIS version 3.0 built-in
39504functions also become available:
39505
39506     void __builtin_vis_cmask8 (long);
39507     void __builtin_vis_cmask16 (long);
39508     void __builtin_vis_cmask32 (long);
39509
39510     v4hi __builtin_vis_fchksm16 (v4hi, v4hi);
39511
39512     v4hi __builtin_vis_fsll16 (v4hi, v4hi);
39513     v4hi __builtin_vis_fslas16 (v4hi, v4hi);
39514     v4hi __builtin_vis_fsrl16 (v4hi, v4hi);
39515     v4hi __builtin_vis_fsra16 (v4hi, v4hi);
39516     v2si __builtin_vis_fsll16 (v2si, v2si);
39517     v2si __builtin_vis_fslas16 (v2si, v2si);
39518     v2si __builtin_vis_fsrl16 (v2si, v2si);
39519     v2si __builtin_vis_fsra16 (v2si, v2si);
39520
39521     long __builtin_vis_pdistn (v8qi, v8qi);
39522
39523     v4hi __builtin_vis_fmean16 (v4hi, v4hi);
39524
39525     int64_t __builtin_vis_fpadd64 (int64_t, int64_t);
39526     int64_t __builtin_vis_fpsub64 (int64_t, int64_t);
39527
39528     v4hi __builtin_vis_fpadds16 (v4hi, v4hi);
39529     v2hi __builtin_vis_fpadds16s (v2hi, v2hi);
39530     v4hi __builtin_vis_fpsubs16 (v4hi, v4hi);
39531     v2hi __builtin_vis_fpsubs16s (v2hi, v2hi);
39532     v2si __builtin_vis_fpadds32 (v2si, v2si);
39533     v1si __builtin_vis_fpadds32s (v1si, v1si);
39534     v2si __builtin_vis_fpsubs32 (v2si, v2si);
39535     v1si __builtin_vis_fpsubs32s (v1si, v1si);
39536
39537     long __builtin_vis_fucmple8 (v8qi, v8qi);
39538     long __builtin_vis_fucmpne8 (v8qi, v8qi);
39539     long __builtin_vis_fucmpgt8 (v8qi, v8qi);
39540     long __builtin_vis_fucmpeq8 (v8qi, v8qi);
39541
39542     float __builtin_vis_fhadds (float, float);
39543     double __builtin_vis_fhaddd (double, double);
39544     float __builtin_vis_fhsubs (float, float);
39545     double __builtin_vis_fhsubd (double, double);
39546     float __builtin_vis_fnhadds (float, float);
39547     double __builtin_vis_fnhaddd (double, double);
39548
39549     int64_t __builtin_vis_umulxhi (int64_t, int64_t);
39550     int64_t __builtin_vis_xmulx (int64_t, int64_t);
39551     int64_t __builtin_vis_xmulxhi (int64_t, int64_t);
39552
39553
39554File: gcc.info,  Node: SPU Built-in Functions,  Next: TI C6X Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
39555
395566.58.26 SPU Built-in Functions
39557------------------------------
39558
39559GCC provides extensions for the SPU processor as described in the
39560Sony/Toshiba/IBM SPU Language Extensions Specification, which can be
39561found at `http://cell.scei.co.jp/' or
39562`http://www.ibm.com/developerworks/power/cell/'.  GCC's implementation
39563differs in several ways.
39564
39565   * The optional extension of specifying vector constants in
39566     parentheses is not supported.
39567
39568   * A vector initializer requires no cast if the vector constant is of
39569     the same type as the variable it is initializing.
39570
39571   * If `signed' or `unsigned' is omitted, the signedness of the vector
39572     type is the default signedness of the base type.  The default
39573     varies depending on the operating system, so a portable program
39574     should always specify the signedness.
39575
39576   * By default, the keyword `__vector' is added. The macro `vector' is
39577     defined in `<spu_intrinsics.h>' and can be undefined.
39578
39579   * GCC allows using a `typedef' name as the type specifier for a
39580     vector type.
39581
39582   * For C, overloaded functions are implemented with macros so the
39583     following does not work:
39584
39585            spu_add ((vector signed int){1, 2, 3, 4}, foo);
39586
39587     Since `spu_add' is a macro, the vector constant in the example is
39588     treated as four separate arguments.  Wrap the entire argument in
39589     parentheses for this to work.
39590
39591   * The extended version of `__builtin_expect' is not supported.
39592
39593
39594 _Note:_ Only the interface described in the aforementioned
39595specification is supported. Internally, GCC uses built-in functions to
39596implement the required functionality, but these are not supported and
39597are subject to change without notice.
39598
39599
39600File: gcc.info,  Node: TI C6X Built-in Functions,  Next: TILE-Gx Built-in Functions,  Prev: SPU Built-in Functions,  Up: Target Builtins
39601
396026.58.27 TI C6X Built-in Functions
39603---------------------------------
39604
39605GCC provides intrinsics to access certain instructions of the TI C6X
39606processors.  These intrinsics, listed below, are available after
39607inclusion of the `c6x_intrinsics.h' header file.  They map directly to
39608C6X instructions.
39609
39610
39611     int _sadd (int, int)
39612     int _ssub (int, int)
39613     int _sadd2 (int, int)
39614     int _ssub2 (int, int)
39615     long long _mpy2 (int, int)
39616     long long _smpy2 (int, int)
39617     int _add4 (int, int)
39618     int _sub4 (int, int)
39619     int _saddu4 (int, int)
39620
39621     int _smpy (int, int)
39622     int _smpyh (int, int)
39623     int _smpyhl (int, int)
39624     int _smpylh (int, int)
39625
39626     int _sshl (int, int)
39627     int _subc (int, int)
39628
39629     int _avg2 (int, int)
39630     int _avgu4 (int, int)
39631
39632     int _clrr (int, int)
39633     int _extr (int, int)
39634     int _extru (int, int)
39635     int _abs (int)
39636     int _abs2 (int)
39637
39638
39639File: gcc.info,  Node: TILE-Gx Built-in Functions,  Next: TILEPro Built-in Functions,  Prev: TI C6X Built-in Functions,  Up: Target Builtins
39640
396416.58.28 TILE-Gx Built-in Functions
39642----------------------------------
39643
39644GCC provides intrinsics to access every instruction of the TILE-Gx
39645processor.  The intrinsics are of the form:
39646
39647
39648     unsigned long long __insn_OP (...)
39649
39650 Where OP is the name of the instruction.  Refer to the ISA manual for
39651the complete list of instructions.
39652
39653 GCC also provides intrinsics to directly access the network registers.
39654The intrinsics are:
39655
39656
39657     unsigned long long __tile_idn0_receive (void)
39658     unsigned long long __tile_idn1_receive (void)
39659     unsigned long long __tile_udn0_receive (void)
39660     unsigned long long __tile_udn1_receive (void)
39661     unsigned long long __tile_udn2_receive (void)
39662     unsigned long long __tile_udn3_receive (void)
39663     void __tile_idn_send (unsigned long long)
39664     void __tile_udn_send (unsigned long long)
39665
39666 The intrinsic `void __tile_network_barrier (void)' is used to
39667guarantee that no network operations before it are reordered with those
39668after it.
39669
39670
39671File: gcc.info,  Node: TILEPro Built-in Functions,  Next: x86 Built-in Functions,  Prev: TILE-Gx Built-in Functions,  Up: Target Builtins
39672
396736.58.29 TILEPro Built-in Functions
39674----------------------------------
39675
39676GCC provides intrinsics to access every instruction of the TILEPro
39677processor.  The intrinsics are of the form:
39678
39679
39680     unsigned __insn_OP (...)
39681
39682where OP is the name of the instruction.  Refer to the ISA manual for
39683the complete list of instructions.
39684
39685 GCC also provides intrinsics to directly access the network registers.
39686The intrinsics are:
39687
39688
39689     unsigned __tile_idn0_receive (void)
39690     unsigned __tile_idn1_receive (void)
39691     unsigned __tile_sn_receive (void)
39692     unsigned __tile_udn0_receive (void)
39693     unsigned __tile_udn1_receive (void)
39694     unsigned __tile_udn2_receive (void)
39695     unsigned __tile_udn3_receive (void)
39696     void __tile_idn_send (unsigned)
39697     void __tile_sn_send (unsigned)
39698     void __tile_udn_send (unsigned)
39699
39700 The intrinsic `void __tile_network_barrier (void)' is used to
39701guarantee that no network operations before it are reordered with those
39702after it.
39703
39704
39705File: gcc.info,  Node: x86 Built-in Functions,  Next: x86 transactional memory intrinsics,  Prev: TILEPro Built-in Functions,  Up: Target Builtins
39706
397076.58.30 x86 Built-in Functions
39708------------------------------
39709
39710These built-in functions are available for the x86-32 and x86-64 family
39711of computers, depending on the command-line switches used.
39712
39713 If you specify command-line switches such as `-msse', the compiler
39714could use the extended instruction sets even if the built-ins are not
39715used explicitly in the program.  For this reason, applications that
39716perform run-time CPU detection must compile separate files for each
39717supported architecture, using the appropriate flags.  In particular,
39718the file containing the CPU detection code should be compiled without
39719these options.
39720
39721 The following machine modes are available for use with MMX built-in
39722functions (*note Vector Extensions::): `V2SI' for a vector of two
3972332-bit integers, `V4HI' for a vector of four 16-bit integers, and
39724`V8QI' for a vector of eight 8-bit integers.  Some of the built-in
39725functions operate on MMX registers as a whole 64-bit entity, these use
39726`V1DI' as their mode.
39727
39728 If 3DNow! extensions are enabled, `V2SF' is used as a mode for a vector
39729of two 32-bit floating-point values.
39730
39731 If SSE extensions are enabled, `V4SF' is used for a vector of four
3973232-bit floating-point values.  Some instructions use a vector of four
3973332-bit integers, these use `V4SI'.  Finally, some instructions operate
39734on an entire vector register, interpreting it as a 128-bit integer,
39735these use mode `TI'.
39736
39737 In 64-bit mode, the x86-64 family of processors uses additional
39738built-in functions for efficient use of `TF' (`__float128') 128-bit
39739floating point and `TC' 128-bit complex floating-point values.
39740
39741 The following floating-point built-in functions are available in 64-bit
39742mode.  All of them implement the function that is part of the name.
39743
39744     __float128 __builtin_fabsq (__float128)
39745     __float128 __builtin_copysignq (__float128, __float128)
39746
39747 The following built-in function is always available.
39748
39749`void __builtin_ia32_pause (void)'
39750     Generates the `pause' machine instruction with a compiler memory
39751     barrier.
39752
39753 The following floating-point built-in functions are made available in
39754the 64-bit mode.
39755
39756`__float128 __builtin_infq (void)'
39757     Similar to `__builtin_inf', except the return type is `__float128'.  
39758
39759`__float128 __builtin_huge_valq (void)'
39760     Similar to `__builtin_huge_val', except the return type is
39761     `__float128'.  
39762
39763 The following built-in functions are always available and can be used
39764to check the target platform type.
39765
39766 -- Built-in Function: void __builtin_cpu_init (void)
39767     This function runs the CPU detection code to check the type of CPU
39768     and the features supported.  This built-in function needs to be
39769     invoked along with the built-in functions to check CPU type and
39770     features, `__builtin_cpu_is' and `__builtin_cpu_supports', only
39771     when used in a function that is executed before any constructors
39772     are called.  The CPU detection code is automatically executed in a
39773     very high priority constructor.
39774
39775     For example, this function has to be used in `ifunc' resolvers that
39776     check for CPU type using the built-in functions `__builtin_cpu_is'
39777     and `__builtin_cpu_supports', or in constructors on targets that
39778     don't support constructor priority.
39779
39780          static void (*resolve_memcpy (void)) (void)
39781          {
39782            // ifunc resolvers fire before constructors, explicitly call the init
39783            // function.
39784            __builtin_cpu_init ();
39785            if (__builtin_cpu_supports ("ssse3"))
39786              return ssse3_memcpy; // super fast memcpy with ssse3 instructions.
39787            else
39788              return default_memcpy;
39789          }
39790
39791          void *memcpy (void *, const void *, size_t)
39792               __attribute__ ((ifunc ("resolve_memcpy")));
39793
39794
39795 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
39796     This function returns a positive integer if the run-time CPU is of
39797     type CPUNAME and returns `0' otherwise. The following CPU names
39798     can be detected:
39799
39800    `intel'
39801          Intel CPU.
39802
39803    `atom'
39804          Intel Atom CPU.
39805
39806    `core2'
39807          Intel Core 2 CPU.
39808
39809    `corei7'
39810          Intel Core i7 CPU.
39811
39812    `nehalem'
39813          Intel Core i7 Nehalem CPU.
39814
39815    `westmere'
39816          Intel Core i7 Westmere CPU.
39817
39818    `sandybridge'
39819          Intel Core i7 Sandy Bridge CPU.
39820
39821    `amd'
39822          AMD CPU.
39823
39824    `amdfam10h'
39825          AMD Family 10h CPU.
39826
39827    `barcelona'
39828          AMD Family 10h Barcelona CPU.
39829
39830    `shanghai'
39831          AMD Family 10h Shanghai CPU.
39832
39833    `istanbul'
39834          AMD Family 10h Istanbul CPU.
39835
39836    `btver1'
39837          AMD Family 14h CPU.
39838
39839    `amdfam15h'
39840          AMD Family 15h CPU.
39841
39842    `bdver1'
39843          AMD Family 15h Bulldozer version 1.
39844
39845    `bdver2'
39846          AMD Family 15h Bulldozer version 2.
39847
39848    `bdver3'
39849          AMD Family 15h Bulldozer version 3.
39850
39851    `bdver4'
39852          AMD Family 15h Bulldozer version 4.
39853
39854    `btver2'
39855          AMD Family 16h CPU.
39856
39857     Here is an example:
39858          if (__builtin_cpu_is ("corei7"))
39859            {
39860               do_corei7 (); // Core i7 specific implementation.
39861            }
39862          else
39863            {
39864               do_generic (); // Generic implementation.
39865            }
39866
39867 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
39868     This function returns a positive integer if the run-time CPU
39869     supports FEATURE and returns `0' otherwise. The following features
39870     can be detected:
39871
39872    `cmov'
39873          CMOV instruction.
39874
39875    `mmx'
39876          MMX instructions.
39877
39878    `popcnt'
39879          POPCNT instruction.
39880
39881    `sse'
39882          SSE instructions.
39883
39884    `sse2'
39885          SSE2 instructions.
39886
39887    `sse3'
39888          SSE3 instructions.
39889
39890    `ssse3'
39891          SSSE3 instructions.
39892
39893    `sse4.1'
39894          SSE4.1 instructions.
39895
39896    `sse4.2'
39897          SSE4.2 instructions.
39898
39899    `avx'
39900          AVX instructions.
39901
39902    `avx2'
39903          AVX2 instructions.
39904
39905    `avx512f'
39906          AVX512F instructions.
39907
39908     Here is an example:
39909          if (__builtin_cpu_supports ("popcnt"))
39910            {
39911               asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc");
39912            }
39913          else
39914            {
39915               count = generic_countbits (n); //generic implementation.
39916            }
39917
39918 The following built-in functions are made available by `-mmmx'.  All
39919of them generate the machine instruction that is part of the name.
39920
39921     v8qi __builtin_ia32_paddb (v8qi, v8qi)
39922     v4hi __builtin_ia32_paddw (v4hi, v4hi)
39923     v2si __builtin_ia32_paddd (v2si, v2si)
39924     v8qi __builtin_ia32_psubb (v8qi, v8qi)
39925     v4hi __builtin_ia32_psubw (v4hi, v4hi)
39926     v2si __builtin_ia32_psubd (v2si, v2si)
39927     v8qi __builtin_ia32_paddsb (v8qi, v8qi)
39928     v4hi __builtin_ia32_paddsw (v4hi, v4hi)
39929     v8qi __builtin_ia32_psubsb (v8qi, v8qi)
39930     v4hi __builtin_ia32_psubsw (v4hi, v4hi)
39931     v8qi __builtin_ia32_paddusb (v8qi, v8qi)
39932     v4hi __builtin_ia32_paddusw (v4hi, v4hi)
39933     v8qi __builtin_ia32_psubusb (v8qi, v8qi)
39934     v4hi __builtin_ia32_psubusw (v4hi, v4hi)
39935     v4hi __builtin_ia32_pmullw (v4hi, v4hi)
39936     v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
39937     di __builtin_ia32_pand (di, di)
39938     di __builtin_ia32_pandn (di,di)
39939     di __builtin_ia32_por (di, di)
39940     di __builtin_ia32_pxor (di, di)
39941     v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
39942     v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
39943     v2si __builtin_ia32_pcmpeqd (v2si, v2si)
39944     v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
39945     v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
39946     v2si __builtin_ia32_pcmpgtd (v2si, v2si)
39947     v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
39948     v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
39949     v2si __builtin_ia32_punpckhdq (v2si, v2si)
39950     v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
39951     v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
39952     v2si __builtin_ia32_punpckldq (v2si, v2si)
39953     v8qi __builtin_ia32_packsswb (v4hi, v4hi)
39954     v4hi __builtin_ia32_packssdw (v2si, v2si)
39955     v8qi __builtin_ia32_packuswb (v4hi, v4hi)
39956
39957     v4hi __builtin_ia32_psllw (v4hi, v4hi)
39958     v2si __builtin_ia32_pslld (v2si, v2si)
39959     v1di __builtin_ia32_psllq (v1di, v1di)
39960     v4hi __builtin_ia32_psrlw (v4hi, v4hi)
39961     v2si __builtin_ia32_psrld (v2si, v2si)
39962     v1di __builtin_ia32_psrlq (v1di, v1di)
39963     v4hi __builtin_ia32_psraw (v4hi, v4hi)
39964     v2si __builtin_ia32_psrad (v2si, v2si)
39965     v4hi __builtin_ia32_psllwi (v4hi, int)
39966     v2si __builtin_ia32_pslldi (v2si, int)
39967     v1di __builtin_ia32_psllqi (v1di, int)
39968     v4hi __builtin_ia32_psrlwi (v4hi, int)
39969     v2si __builtin_ia32_psrldi (v2si, int)
39970     v1di __builtin_ia32_psrlqi (v1di, int)
39971     v4hi __builtin_ia32_psrawi (v4hi, int)
39972     v2si __builtin_ia32_psradi (v2si, int)
39973
39974 The following built-in functions are made available either with
39975`-msse', or with a combination of `-m3dnow' and `-march=athlon'.  All
39976of them generate the machine instruction that is part of the name.
39977
39978     v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
39979     v8qi __builtin_ia32_pavgb (v8qi, v8qi)
39980     v4hi __builtin_ia32_pavgw (v4hi, v4hi)
39981     v1di __builtin_ia32_psadbw (v8qi, v8qi)
39982     v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
39983     v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
39984     v8qi __builtin_ia32_pminub (v8qi, v8qi)
39985     v4hi __builtin_ia32_pminsw (v4hi, v4hi)
39986     int __builtin_ia32_pmovmskb (v8qi)
39987     void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
39988     void __builtin_ia32_movntq (di *, di)
39989     void __builtin_ia32_sfence (void)
39990
39991 The following built-in functions are available when `-msse' is used.
39992All of them generate the machine instruction that is part of the name.
39993
39994     int __builtin_ia32_comieq (v4sf, v4sf)
39995     int __builtin_ia32_comineq (v4sf, v4sf)
39996     int __builtin_ia32_comilt (v4sf, v4sf)
39997     int __builtin_ia32_comile (v4sf, v4sf)
39998     int __builtin_ia32_comigt (v4sf, v4sf)
39999     int __builtin_ia32_comige (v4sf, v4sf)
40000     int __builtin_ia32_ucomieq (v4sf, v4sf)
40001     int __builtin_ia32_ucomineq (v4sf, v4sf)
40002     int __builtin_ia32_ucomilt (v4sf, v4sf)
40003     int __builtin_ia32_ucomile (v4sf, v4sf)
40004     int __builtin_ia32_ucomigt (v4sf, v4sf)
40005     int __builtin_ia32_ucomige (v4sf, v4sf)
40006     v4sf __builtin_ia32_addps (v4sf, v4sf)
40007     v4sf __builtin_ia32_subps (v4sf, v4sf)
40008     v4sf __builtin_ia32_mulps (v4sf, v4sf)
40009     v4sf __builtin_ia32_divps (v4sf, v4sf)
40010     v4sf __builtin_ia32_addss (v4sf, v4sf)
40011     v4sf __builtin_ia32_subss (v4sf, v4sf)
40012     v4sf __builtin_ia32_mulss (v4sf, v4sf)
40013     v4sf __builtin_ia32_divss (v4sf, v4sf)
40014     v4sf __builtin_ia32_cmpeqps (v4sf, v4sf)
40015     v4sf __builtin_ia32_cmpltps (v4sf, v4sf)
40016     v4sf __builtin_ia32_cmpleps (v4sf, v4sf)
40017     v4sf __builtin_ia32_cmpgtps (v4sf, v4sf)
40018     v4sf __builtin_ia32_cmpgeps (v4sf, v4sf)
40019     v4sf __builtin_ia32_cmpunordps (v4sf, v4sf)
40020     v4sf __builtin_ia32_cmpneqps (v4sf, v4sf)
40021     v4sf __builtin_ia32_cmpnltps (v4sf, v4sf)
40022     v4sf __builtin_ia32_cmpnleps (v4sf, v4sf)
40023     v4sf __builtin_ia32_cmpngtps (v4sf, v4sf)
40024     v4sf __builtin_ia32_cmpngeps (v4sf, v4sf)
40025     v4sf __builtin_ia32_cmpordps (v4sf, v4sf)
40026     v4sf __builtin_ia32_cmpeqss (v4sf, v4sf)
40027     v4sf __builtin_ia32_cmpltss (v4sf, v4sf)
40028     v4sf __builtin_ia32_cmpless (v4sf, v4sf)
40029     v4sf __builtin_ia32_cmpunordss (v4sf, v4sf)
40030     v4sf __builtin_ia32_cmpneqss (v4sf, v4sf)
40031     v4sf __builtin_ia32_cmpnltss (v4sf, v4sf)
40032     v4sf __builtin_ia32_cmpnless (v4sf, v4sf)
40033     v4sf __builtin_ia32_cmpordss (v4sf, v4sf)
40034     v4sf __builtin_ia32_maxps (v4sf, v4sf)
40035     v4sf __builtin_ia32_maxss (v4sf, v4sf)
40036     v4sf __builtin_ia32_minps (v4sf, v4sf)
40037     v4sf __builtin_ia32_minss (v4sf, v4sf)
40038     v4sf __builtin_ia32_andps (v4sf, v4sf)
40039     v4sf __builtin_ia32_andnps (v4sf, v4sf)
40040     v4sf __builtin_ia32_orps (v4sf, v4sf)
40041     v4sf __builtin_ia32_xorps (v4sf, v4sf)
40042     v4sf __builtin_ia32_movss (v4sf, v4sf)
40043     v4sf __builtin_ia32_movhlps (v4sf, v4sf)
40044     v4sf __builtin_ia32_movlhps (v4sf, v4sf)
40045     v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
40046     v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
40047     v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
40048     v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
40049     v2si __builtin_ia32_cvtps2pi (v4sf)
40050     int __builtin_ia32_cvtss2si (v4sf)
40051     v2si __builtin_ia32_cvttps2pi (v4sf)
40052     int __builtin_ia32_cvttss2si (v4sf)
40053     v4sf __builtin_ia32_rcpps (v4sf)
40054     v4sf __builtin_ia32_rsqrtps (v4sf)
40055     v4sf __builtin_ia32_sqrtps (v4sf)
40056     v4sf __builtin_ia32_rcpss (v4sf)
40057     v4sf __builtin_ia32_rsqrtss (v4sf)
40058     v4sf __builtin_ia32_sqrtss (v4sf)
40059     v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
40060     void __builtin_ia32_movntps (float *, v4sf)
40061     int __builtin_ia32_movmskps (v4sf)
40062
40063 The following built-in functions are available when `-msse' is used.
40064
40065`v4sf __builtin_ia32_loadups (float *)'
40066     Generates the `movups' machine instruction as a load from memory.
40067
40068`void __builtin_ia32_storeups (float *, v4sf)'
40069     Generates the `movups' machine instruction as a store to memory.
40070
40071`v4sf __builtin_ia32_loadss (float *)'
40072     Generates the `movss' machine instruction as a load from memory.
40073
40074`v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
40075     Generates the `movhps' machine instruction as a load from memory.
40076
40077`v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
40078     Generates the `movlps' machine instruction as a load from memory
40079
40080`void __builtin_ia32_storehps (v2sf *, v4sf)'
40081     Generates the `movhps' machine instruction as a store to memory.
40082
40083`void __builtin_ia32_storelps (v2sf *, v4sf)'
40084     Generates the `movlps' machine instruction as a store to memory.
40085
40086 The following built-in functions are available when `-msse2' is used.
40087All of them generate the machine instruction that is part of the name.
40088
40089     int __builtin_ia32_comisdeq (v2df, v2df)
40090     int __builtin_ia32_comisdlt (v2df, v2df)
40091     int __builtin_ia32_comisdle (v2df, v2df)
40092     int __builtin_ia32_comisdgt (v2df, v2df)
40093     int __builtin_ia32_comisdge (v2df, v2df)
40094     int __builtin_ia32_comisdneq (v2df, v2df)
40095     int __builtin_ia32_ucomisdeq (v2df, v2df)
40096     int __builtin_ia32_ucomisdlt (v2df, v2df)
40097     int __builtin_ia32_ucomisdle (v2df, v2df)
40098     int __builtin_ia32_ucomisdgt (v2df, v2df)
40099     int __builtin_ia32_ucomisdge (v2df, v2df)
40100     int __builtin_ia32_ucomisdneq (v2df, v2df)
40101     v2df __builtin_ia32_cmpeqpd (v2df, v2df)
40102     v2df __builtin_ia32_cmpltpd (v2df, v2df)
40103     v2df __builtin_ia32_cmplepd (v2df, v2df)
40104     v2df __builtin_ia32_cmpgtpd (v2df, v2df)
40105     v2df __builtin_ia32_cmpgepd (v2df, v2df)
40106     v2df __builtin_ia32_cmpunordpd (v2df, v2df)
40107     v2df __builtin_ia32_cmpneqpd (v2df, v2df)
40108     v2df __builtin_ia32_cmpnltpd (v2df, v2df)
40109     v2df __builtin_ia32_cmpnlepd (v2df, v2df)
40110     v2df __builtin_ia32_cmpngtpd (v2df, v2df)
40111     v2df __builtin_ia32_cmpngepd (v2df, v2df)
40112     v2df __builtin_ia32_cmpordpd (v2df, v2df)
40113     v2df __builtin_ia32_cmpeqsd (v2df, v2df)
40114     v2df __builtin_ia32_cmpltsd (v2df, v2df)
40115     v2df __builtin_ia32_cmplesd (v2df, v2df)
40116     v2df __builtin_ia32_cmpunordsd (v2df, v2df)
40117     v2df __builtin_ia32_cmpneqsd (v2df, v2df)
40118     v2df __builtin_ia32_cmpnltsd (v2df, v2df)
40119     v2df __builtin_ia32_cmpnlesd (v2df, v2df)
40120     v2df __builtin_ia32_cmpordsd (v2df, v2df)
40121     v2di __builtin_ia32_paddq (v2di, v2di)
40122     v2di __builtin_ia32_psubq (v2di, v2di)
40123     v2df __builtin_ia32_addpd (v2df, v2df)
40124     v2df __builtin_ia32_subpd (v2df, v2df)
40125     v2df __builtin_ia32_mulpd (v2df, v2df)
40126     v2df __builtin_ia32_divpd (v2df, v2df)
40127     v2df __builtin_ia32_addsd (v2df, v2df)
40128     v2df __builtin_ia32_subsd (v2df, v2df)
40129     v2df __builtin_ia32_mulsd (v2df, v2df)
40130     v2df __builtin_ia32_divsd (v2df, v2df)
40131     v2df __builtin_ia32_minpd (v2df, v2df)
40132     v2df __builtin_ia32_maxpd (v2df, v2df)
40133     v2df __builtin_ia32_minsd (v2df, v2df)
40134     v2df __builtin_ia32_maxsd (v2df, v2df)
40135     v2df __builtin_ia32_andpd (v2df, v2df)
40136     v2df __builtin_ia32_andnpd (v2df, v2df)
40137     v2df __builtin_ia32_orpd (v2df, v2df)
40138     v2df __builtin_ia32_xorpd (v2df, v2df)
40139     v2df __builtin_ia32_movsd (v2df, v2df)
40140     v2df __builtin_ia32_unpckhpd (v2df, v2df)
40141     v2df __builtin_ia32_unpcklpd (v2df, v2df)
40142     v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
40143     v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
40144     v4si __builtin_ia32_paddd128 (v4si, v4si)
40145     v2di __builtin_ia32_paddq128 (v2di, v2di)
40146     v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
40147     v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
40148     v4si __builtin_ia32_psubd128 (v4si, v4si)
40149     v2di __builtin_ia32_psubq128 (v2di, v2di)
40150     v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
40151     v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
40152     v2di __builtin_ia32_pand128 (v2di, v2di)
40153     v2di __builtin_ia32_pandn128 (v2di, v2di)
40154     v2di __builtin_ia32_por128 (v2di, v2di)
40155     v2di __builtin_ia32_pxor128 (v2di, v2di)
40156     v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
40157     v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
40158     v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
40159     v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
40160     v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
40161     v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
40162     v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
40163     v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
40164     v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
40165     v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
40166     v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
40167     v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
40168     v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
40169     v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
40170     v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
40171     v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
40172     v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
40173     v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
40174     v4si __builtin_ia32_punpckldq128 (v4si, v4si)
40175     v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
40176     v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
40177     v8hi __builtin_ia32_packssdw128 (v4si, v4si)
40178     v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
40179     v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
40180     void __builtin_ia32_maskmovdqu (v16qi, v16qi)
40181     v2df __builtin_ia32_loadupd (double *)
40182     void __builtin_ia32_storeupd (double *, v2df)
40183     v2df __builtin_ia32_loadhpd (v2df, double const *)
40184     v2df __builtin_ia32_loadlpd (v2df, double const *)
40185     int __builtin_ia32_movmskpd (v2df)
40186     int __builtin_ia32_pmovmskb128 (v16qi)
40187     void __builtin_ia32_movnti (int *, int)
40188     void __builtin_ia32_movnti64 (long long int *, long long int)
40189     void __builtin_ia32_movntpd (double *, v2df)
40190     void __builtin_ia32_movntdq (v2df *, v2df)
40191     v4si __builtin_ia32_pshufd (v4si, int)
40192     v8hi __builtin_ia32_pshuflw (v8hi, int)
40193     v8hi __builtin_ia32_pshufhw (v8hi, int)
40194     v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
40195     v2df __builtin_ia32_sqrtpd (v2df)
40196     v2df __builtin_ia32_sqrtsd (v2df)
40197     v2df __builtin_ia32_shufpd (v2df, v2df, int)
40198     v2df __builtin_ia32_cvtdq2pd (v4si)
40199     v4sf __builtin_ia32_cvtdq2ps (v4si)
40200     v4si __builtin_ia32_cvtpd2dq (v2df)
40201     v2si __builtin_ia32_cvtpd2pi (v2df)
40202     v4sf __builtin_ia32_cvtpd2ps (v2df)
40203     v4si __builtin_ia32_cvttpd2dq (v2df)
40204     v2si __builtin_ia32_cvttpd2pi (v2df)
40205     v2df __builtin_ia32_cvtpi2pd (v2si)
40206     int __builtin_ia32_cvtsd2si (v2df)
40207     int __builtin_ia32_cvttsd2si (v2df)
40208     long long __builtin_ia32_cvtsd2si64 (v2df)
40209     long long __builtin_ia32_cvttsd2si64 (v2df)
40210     v4si __builtin_ia32_cvtps2dq (v4sf)
40211     v2df __builtin_ia32_cvtps2pd (v4sf)
40212     v4si __builtin_ia32_cvttps2dq (v4sf)
40213     v2df __builtin_ia32_cvtsi2sd (v2df, int)
40214     v2df __builtin_ia32_cvtsi642sd (v2df, long long)
40215     v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
40216     v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
40217     void __builtin_ia32_clflush (const void *)
40218     void __builtin_ia32_lfence (void)
40219     void __builtin_ia32_mfence (void)
40220     v16qi __builtin_ia32_loaddqu (const char *)
40221     void __builtin_ia32_storedqu (char *, v16qi)
40222     v1di __builtin_ia32_pmuludq (v2si, v2si)
40223     v2di __builtin_ia32_pmuludq128 (v4si, v4si)
40224     v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
40225     v4si __builtin_ia32_pslld128 (v4si, v4si)
40226     v2di __builtin_ia32_psllq128 (v2di, v2di)
40227     v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
40228     v4si __builtin_ia32_psrld128 (v4si, v4si)
40229     v2di __builtin_ia32_psrlq128 (v2di, v2di)
40230     v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
40231     v4si __builtin_ia32_psrad128 (v4si, v4si)
40232     v2di __builtin_ia32_pslldqi128 (v2di, int)
40233     v8hi __builtin_ia32_psllwi128 (v8hi, int)
40234     v4si __builtin_ia32_pslldi128 (v4si, int)
40235     v2di __builtin_ia32_psllqi128 (v2di, int)
40236     v2di __builtin_ia32_psrldqi128 (v2di, int)
40237     v8hi __builtin_ia32_psrlwi128 (v8hi, int)
40238     v4si __builtin_ia32_psrldi128 (v4si, int)
40239     v2di __builtin_ia32_psrlqi128 (v2di, int)
40240     v8hi __builtin_ia32_psrawi128 (v8hi, int)
40241     v4si __builtin_ia32_psradi128 (v4si, int)
40242     v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
40243     v2di __builtin_ia32_movq128 (v2di)
40244
40245 The following built-in functions are available when `-msse3' is used.
40246All of them generate the machine instruction that is part of the name.
40247
40248     v2df __builtin_ia32_addsubpd (v2df, v2df)
40249     v4sf __builtin_ia32_addsubps (v4sf, v4sf)
40250     v2df __builtin_ia32_haddpd (v2df, v2df)
40251     v4sf __builtin_ia32_haddps (v4sf, v4sf)
40252     v2df __builtin_ia32_hsubpd (v2df, v2df)
40253     v4sf __builtin_ia32_hsubps (v4sf, v4sf)
40254     v16qi __builtin_ia32_lddqu (char const *)
40255     void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
40256     v4sf __builtin_ia32_movshdup (v4sf)
40257     v4sf __builtin_ia32_movsldup (v4sf)
40258     void __builtin_ia32_mwait (unsigned int, unsigned int)
40259
40260 The following built-in functions are available when `-mssse3' is used.
40261All of them generate the machine instruction that is part of the name.
40262
40263     v2si __builtin_ia32_phaddd (v2si, v2si)
40264     v4hi __builtin_ia32_phaddw (v4hi, v4hi)
40265     v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
40266     v2si __builtin_ia32_phsubd (v2si, v2si)
40267     v4hi __builtin_ia32_phsubw (v4hi, v4hi)
40268     v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
40269     v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
40270     v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
40271     v8qi __builtin_ia32_pshufb (v8qi, v8qi)
40272     v8qi __builtin_ia32_psignb (v8qi, v8qi)
40273     v2si __builtin_ia32_psignd (v2si, v2si)
40274     v4hi __builtin_ia32_psignw (v4hi, v4hi)
40275     v1di __builtin_ia32_palignr (v1di, v1di, int)
40276     v8qi __builtin_ia32_pabsb (v8qi)
40277     v2si __builtin_ia32_pabsd (v2si)
40278     v4hi __builtin_ia32_pabsw (v4hi)
40279
40280 The following built-in functions are available when `-mssse3' is used.
40281All of them generate the machine instruction that is part of the name.
40282
40283     v4si __builtin_ia32_phaddd128 (v4si, v4si)
40284     v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
40285     v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
40286     v4si __builtin_ia32_phsubd128 (v4si, v4si)
40287     v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
40288     v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
40289     v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
40290     v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
40291     v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
40292     v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
40293     v4si __builtin_ia32_psignd128 (v4si, v4si)
40294     v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
40295     v2di __builtin_ia32_palignr128 (v2di, v2di, int)
40296     v16qi __builtin_ia32_pabsb128 (v16qi)
40297     v4si __builtin_ia32_pabsd128 (v4si)
40298     v8hi __builtin_ia32_pabsw128 (v8hi)
40299
40300 The following built-in functions are available when `-msse4.1' is
40301used.  All of them generate the machine instruction that is part of the
40302name.
40303
40304     v2df __builtin_ia32_blendpd (v2df, v2df, const int)
40305     v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
40306     v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
40307     v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
40308     v2df __builtin_ia32_dppd (v2df, v2df, const int)
40309     v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
40310     v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
40311     v2di __builtin_ia32_movntdqa (v2di *);
40312     v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
40313     v8hi __builtin_ia32_packusdw128 (v4si, v4si)
40314     v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
40315     v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
40316     v2di __builtin_ia32_pcmpeqq (v2di, v2di)
40317     v8hi __builtin_ia32_phminposuw128 (v8hi)
40318     v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
40319     v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
40320     v4si __builtin_ia32_pmaxud128 (v4si, v4si)
40321     v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
40322     v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
40323     v4si __builtin_ia32_pminsd128 (v4si, v4si)
40324     v4si __builtin_ia32_pminud128 (v4si, v4si)
40325     v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
40326     v4si __builtin_ia32_pmovsxbd128 (v16qi)
40327     v2di __builtin_ia32_pmovsxbq128 (v16qi)
40328     v8hi __builtin_ia32_pmovsxbw128 (v16qi)
40329     v2di __builtin_ia32_pmovsxdq128 (v4si)
40330     v4si __builtin_ia32_pmovsxwd128 (v8hi)
40331     v2di __builtin_ia32_pmovsxwq128 (v8hi)
40332     v4si __builtin_ia32_pmovzxbd128 (v16qi)
40333     v2di __builtin_ia32_pmovzxbq128 (v16qi)
40334     v8hi __builtin_ia32_pmovzxbw128 (v16qi)
40335     v2di __builtin_ia32_pmovzxdq128 (v4si)
40336     v4si __builtin_ia32_pmovzxwd128 (v8hi)
40337     v2di __builtin_ia32_pmovzxwq128 (v8hi)
40338     v2di __builtin_ia32_pmuldq128 (v4si, v4si)
40339     v4si __builtin_ia32_pmulld128 (v4si, v4si)
40340     int __builtin_ia32_ptestc128 (v2di, v2di)
40341     int __builtin_ia32_ptestnzc128 (v2di, v2di)
40342     int __builtin_ia32_ptestz128 (v2di, v2di)
40343     v2df __builtin_ia32_roundpd (v2df, const int)
40344     v4sf __builtin_ia32_roundps (v4sf, const int)
40345     v2df __builtin_ia32_roundsd (v2df, v2df, const int)
40346     v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
40347
40348 The following built-in functions are available when `-msse4.1' is used.
40349
40350`v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
40351     Generates the `insertps' machine instruction.
40352
40353`int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
40354     Generates the `pextrb' machine instruction.
40355
40356`v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
40357     Generates the `pinsrb' machine instruction.
40358
40359`v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
40360     Generates the `pinsrd' machine instruction.
40361
40362`v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
40363     Generates the `pinsrq' machine instruction in 64bit mode.
40364
40365 The following built-in functions are changed to generate new SSE4.1
40366instructions when `-msse4.1' is used.
40367
40368`float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
40369     Generates the `extractps' machine instruction.
40370
40371`int __builtin_ia32_vec_ext_v4si (v4si, const int)'
40372     Generates the `pextrd' machine instruction.
40373
40374`long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
40375     Generates the `pextrq' machine instruction in 64bit mode.
40376
40377 The following built-in functions are available when `-msse4.2' is
40378used.  All of them generate the machine instruction that is part of the
40379name.
40380
40381     v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
40382     int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
40383     int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
40384     int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
40385     int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
40386     int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
40387     int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
40388     v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
40389     int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
40390     int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
40391     int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
40392     int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
40393     int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
40394     int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
40395     v2di __builtin_ia32_pcmpgtq (v2di, v2di)
40396
40397 The following built-in functions are available when `-msse4.2' is used.
40398
40399`unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
40400     Generates the `crc32b' machine instruction.
40401
40402`unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
40403     Generates the `crc32w' machine instruction.
40404
40405`unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
40406     Generates the `crc32l' machine instruction.
40407
40408`unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
40409     Generates the `crc32q' machine instruction.
40410
40411 The following built-in functions are changed to generate new SSE4.2
40412instructions when `-msse4.2' is used.
40413
40414`int __builtin_popcount (unsigned int)'
40415     Generates the `popcntl' machine instruction.
40416
40417`int __builtin_popcountl (unsigned long)'
40418     Generates the `popcntl' or `popcntq' machine instruction,
40419     depending on the size of `unsigned long'.
40420
40421`int __builtin_popcountll (unsigned long long)'
40422     Generates the `popcntq' machine instruction.
40423
40424 The following built-in functions are available when `-mavx' is used.
40425All of them generate the machine instruction that is part of the name.
40426
40427     v4df __builtin_ia32_addpd256 (v4df,v4df)
40428     v8sf __builtin_ia32_addps256 (v8sf,v8sf)
40429     v4df __builtin_ia32_addsubpd256 (v4df,v4df)
40430     v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
40431     v4df __builtin_ia32_andnpd256 (v4df,v4df)
40432     v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
40433     v4df __builtin_ia32_andpd256 (v4df,v4df)
40434     v8sf __builtin_ia32_andps256 (v8sf,v8sf)
40435     v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
40436     v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
40437     v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
40438     v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
40439     v2df __builtin_ia32_cmppd (v2df,v2df,int)
40440     v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
40441     v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
40442     v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
40443     v2df __builtin_ia32_cmpsd (v2df,v2df,int)
40444     v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
40445     v4df __builtin_ia32_cvtdq2pd256 (v4si)
40446     v8sf __builtin_ia32_cvtdq2ps256 (v8si)
40447     v4si __builtin_ia32_cvtpd2dq256 (v4df)
40448     v4sf __builtin_ia32_cvtpd2ps256 (v4df)
40449     v8si __builtin_ia32_cvtps2dq256 (v8sf)
40450     v4df __builtin_ia32_cvtps2pd256 (v4sf)
40451     v4si __builtin_ia32_cvttpd2dq256 (v4df)
40452     v8si __builtin_ia32_cvttps2dq256 (v8sf)
40453     v4df __builtin_ia32_divpd256 (v4df,v4df)
40454     v8sf __builtin_ia32_divps256 (v8sf,v8sf)
40455     v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
40456     v4df __builtin_ia32_haddpd256 (v4df,v4df)
40457     v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
40458     v4df __builtin_ia32_hsubpd256 (v4df,v4df)
40459     v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
40460     v32qi __builtin_ia32_lddqu256 (pcchar)
40461     v32qi __builtin_ia32_loaddqu256 (pcchar)
40462     v4df __builtin_ia32_loadupd256 (pcdouble)
40463     v8sf __builtin_ia32_loadups256 (pcfloat)
40464     v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
40465     v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
40466     v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
40467     v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
40468     void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
40469     void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
40470     void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
40471     void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
40472     v4df __builtin_ia32_maxpd256 (v4df,v4df)
40473     v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
40474     v4df __builtin_ia32_minpd256 (v4df,v4df)
40475     v8sf __builtin_ia32_minps256 (v8sf,v8sf)
40476     v4df __builtin_ia32_movddup256 (v4df)
40477     int __builtin_ia32_movmskpd256 (v4df)
40478     int __builtin_ia32_movmskps256 (v8sf)
40479     v8sf __builtin_ia32_movshdup256 (v8sf)
40480     v8sf __builtin_ia32_movsldup256 (v8sf)
40481     v4df __builtin_ia32_mulpd256 (v4df,v4df)
40482     v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
40483     v4df __builtin_ia32_orpd256 (v4df,v4df)
40484     v8sf __builtin_ia32_orps256 (v8sf,v8sf)
40485     v2df __builtin_ia32_pd_pd256 (v4df)
40486     v4df __builtin_ia32_pd256_pd (v2df)
40487     v4sf __builtin_ia32_ps_ps256 (v8sf)
40488     v8sf __builtin_ia32_ps256_ps (v4sf)
40489     int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
40490     int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
40491     int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
40492     v8sf __builtin_ia32_rcpps256 (v8sf)
40493     v4df __builtin_ia32_roundpd256 (v4df,int)
40494     v8sf __builtin_ia32_roundps256 (v8sf,int)
40495     v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
40496     v8sf __builtin_ia32_rsqrtps256 (v8sf)
40497     v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
40498     v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
40499     v4si __builtin_ia32_si_si256 (v8si)
40500     v8si __builtin_ia32_si256_si (v4si)
40501     v4df __builtin_ia32_sqrtpd256 (v4df)
40502     v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
40503     v8sf __builtin_ia32_sqrtps256 (v8sf)
40504     void __builtin_ia32_storedqu256 (pchar,v32qi)
40505     void __builtin_ia32_storeupd256 (pdouble,v4df)
40506     void __builtin_ia32_storeups256 (pfloat,v8sf)
40507     v4df __builtin_ia32_subpd256 (v4df,v4df)
40508     v8sf __builtin_ia32_subps256 (v8sf,v8sf)
40509     v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
40510     v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
40511     v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
40512     v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
40513     v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
40514     v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
40515     v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
40516     v4sf __builtin_ia32_vbroadcastss (pcfloat)
40517     v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
40518     v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
40519     v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
40520     v4si __builtin_ia32_vextractf128_si256 (v8si,int)
40521     v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
40522     v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
40523     v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
40524     v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
40525     v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
40526     v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
40527     v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
40528     v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
40529     v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
40530     v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
40531     v2df __builtin_ia32_vpermilpd (v2df,int)
40532     v4df __builtin_ia32_vpermilpd256 (v4df,int)
40533     v4sf __builtin_ia32_vpermilps (v4sf,int)
40534     v8sf __builtin_ia32_vpermilps256 (v8sf,int)
40535     v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
40536     v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
40537     v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
40538     v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
40539     int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
40540     int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
40541     int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
40542     int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
40543     int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
40544     int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
40545     int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
40546     int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
40547     int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
40548     int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
40549     int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
40550     int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
40551     void __builtin_ia32_vzeroall (void)
40552     void __builtin_ia32_vzeroupper (void)
40553     v4df __builtin_ia32_xorpd256 (v4df,v4df)
40554     v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
40555
40556 The following built-in functions are available when `-mavx2' is used.
40557All of them generate the machine instruction that is part of the name.
40558
40559     v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int)
40560     v32qi __builtin_ia32_pabsb256 (v32qi)
40561     v16hi __builtin_ia32_pabsw256 (v16hi)
40562     v8si __builtin_ia32_pabsd256 (v8si)
40563     v16hi __builtin_ia32_packssdw256 (v8si,v8si)
40564     v32qi __builtin_ia32_packsswb256 (v16hi,v16hi)
40565     v16hi __builtin_ia32_packusdw256 (v8si,v8si)
40566     v32qi __builtin_ia32_packuswb256 (v16hi,v16hi)
40567     v32qi __builtin_ia32_paddb256 (v32qi,v32qi)
40568     v16hi __builtin_ia32_paddw256 (v16hi,v16hi)
40569     v8si __builtin_ia32_paddd256 (v8si,v8si)
40570     v4di __builtin_ia32_paddq256 (v4di,v4di)
40571     v32qi __builtin_ia32_paddsb256 (v32qi,v32qi)
40572     v16hi __builtin_ia32_paddsw256 (v16hi,v16hi)
40573     v32qi __builtin_ia32_paddusb256 (v32qi,v32qi)
40574     v16hi __builtin_ia32_paddusw256 (v16hi,v16hi)
40575     v4di __builtin_ia32_palignr256 (v4di,v4di,int)
40576     v4di __builtin_ia32_andsi256 (v4di,v4di)
40577     v4di __builtin_ia32_andnotsi256 (v4di,v4di)
40578     v32qi __builtin_ia32_pavgb256 (v32qi,v32qi)
40579     v16hi __builtin_ia32_pavgw256 (v16hi,v16hi)
40580     v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi)
40581     v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int)
40582     v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi)
40583     v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi)
40584     v8si __builtin_ia32_pcmpeqd256 (c8si,v8si)
40585     v4di __builtin_ia32_pcmpeqq256 (v4di,v4di)
40586     v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi)
40587     v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi)
40588     v8si __builtin_ia32_pcmpgtd256 (v8si,v8si)
40589     v4di __builtin_ia32_pcmpgtq256 (v4di,v4di)
40590     v16hi __builtin_ia32_phaddw256 (v16hi,v16hi)
40591     v8si __builtin_ia32_phaddd256 (v8si,v8si)
40592     v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi)
40593     v16hi __builtin_ia32_phsubw256 (v16hi,v16hi)
40594     v8si __builtin_ia32_phsubd256 (v8si,v8si)
40595     v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi)
40596     v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi)
40597     v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi)
40598     v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi)
40599     v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi)
40600     v8si __builtin_ia32_pmaxsd256 (v8si,v8si)
40601     v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi)
40602     v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi)
40603     v8si __builtin_ia32_pmaxud256 (v8si,v8si)
40604     v32qi __builtin_ia32_pminsb256 (v32qi,v32qi)
40605     v16hi __builtin_ia32_pminsw256 (v16hi,v16hi)
40606     v8si __builtin_ia32_pminsd256 (v8si,v8si)
40607     v32qi __builtin_ia32_pminub256 (v32qi,v32qi)
40608     v16hi __builtin_ia32_pminuw256 (v16hi,v16hi)
40609     v8si __builtin_ia32_pminud256 (v8si,v8si)
40610     int __builtin_ia32_pmovmskb256 (v32qi)
40611     v16hi __builtin_ia32_pmovsxbw256 (v16qi)
40612     v8si __builtin_ia32_pmovsxbd256 (v16qi)
40613     v4di __builtin_ia32_pmovsxbq256 (v16qi)
40614     v8si __builtin_ia32_pmovsxwd256 (v8hi)
40615     v4di __builtin_ia32_pmovsxwq256 (v8hi)
40616     v4di __builtin_ia32_pmovsxdq256 (v4si)
40617     v16hi __builtin_ia32_pmovzxbw256 (v16qi)
40618     v8si __builtin_ia32_pmovzxbd256 (v16qi)
40619     v4di __builtin_ia32_pmovzxbq256 (v16qi)
40620     v8si __builtin_ia32_pmovzxwd256 (v8hi)
40621     v4di __builtin_ia32_pmovzxwq256 (v8hi)
40622     v4di __builtin_ia32_pmovzxdq256 (v4si)
40623     v4di __builtin_ia32_pmuldq256 (v8si,v8si)
40624     v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi)
40625     v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi)
40626     v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi)
40627     v16hi __builtin_ia32_pmullw256 (v16hi,v16hi)
40628     v8si __builtin_ia32_pmulld256 (v8si,v8si)
40629     v4di __builtin_ia32_pmuludq256 (v8si,v8si)
40630     v4di __builtin_ia32_por256 (v4di,v4di)
40631     v16hi __builtin_ia32_psadbw256 (v32qi,v32qi)
40632     v32qi __builtin_ia32_pshufb256 (v32qi,v32qi)
40633     v8si __builtin_ia32_pshufd256 (v8si,int)
40634     v16hi __builtin_ia32_pshufhw256 (v16hi,int)
40635     v16hi __builtin_ia32_pshuflw256 (v16hi,int)
40636     v32qi __builtin_ia32_psignb256 (v32qi,v32qi)
40637     v16hi __builtin_ia32_psignw256 (v16hi,v16hi)
40638     v8si __builtin_ia32_psignd256 (v8si,v8si)
40639     v4di __builtin_ia32_pslldqi256 (v4di,int)
40640     v16hi __builtin_ia32_psllwi256 (16hi,int)
40641     v16hi __builtin_ia32_psllw256(v16hi,v8hi)
40642     v8si __builtin_ia32_pslldi256 (v8si,int)
40643     v8si __builtin_ia32_pslld256(v8si,v4si)
40644     v4di __builtin_ia32_psllqi256 (v4di,int)
40645     v4di __builtin_ia32_psllq256(v4di,v2di)
40646     v16hi __builtin_ia32_psrawi256 (v16hi,int)
40647     v16hi __builtin_ia32_psraw256 (v16hi,v8hi)
40648     v8si __builtin_ia32_psradi256 (v8si,int)
40649     v8si __builtin_ia32_psrad256 (v8si,v4si)
40650     v4di __builtin_ia32_psrldqi256 (v4di, int)
40651     v16hi __builtin_ia32_psrlwi256 (v16hi,int)
40652     v16hi __builtin_ia32_psrlw256 (v16hi,v8hi)
40653     v8si __builtin_ia32_psrldi256 (v8si,int)
40654     v8si __builtin_ia32_psrld256 (v8si,v4si)
40655     v4di __builtin_ia32_psrlqi256 (v4di,int)
40656     v4di __builtin_ia32_psrlq256(v4di,v2di)
40657     v32qi __builtin_ia32_psubb256 (v32qi,v32qi)
40658     v32hi __builtin_ia32_psubw256 (v16hi,v16hi)
40659     v8si __builtin_ia32_psubd256 (v8si,v8si)
40660     v4di __builtin_ia32_psubq256 (v4di,v4di)
40661     v32qi __builtin_ia32_psubsb256 (v32qi,v32qi)
40662     v16hi __builtin_ia32_psubsw256 (v16hi,v16hi)
40663     v32qi __builtin_ia32_psubusb256 (v32qi,v32qi)
40664     v16hi __builtin_ia32_psubusw256 (v16hi,v16hi)
40665     v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi)
40666     v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi)
40667     v8si __builtin_ia32_punpckhdq256 (v8si,v8si)
40668     v4di __builtin_ia32_punpckhqdq256 (v4di,v4di)
40669     v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi)
40670     v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi)
40671     v8si __builtin_ia32_punpckldq256 (v8si,v8si)
40672     v4di __builtin_ia32_punpcklqdq256 (v4di,v4di)
40673     v4di __builtin_ia32_pxor256 (v4di,v4di)
40674     v4di __builtin_ia32_movntdqa256 (pv4di)
40675     v4sf __builtin_ia32_vbroadcastss_ps (v4sf)
40676     v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf)
40677     v4df __builtin_ia32_vbroadcastsd_pd256 (v2df)
40678     v4di __builtin_ia32_vbroadcastsi256 (v2di)
40679     v4si __builtin_ia32_pblendd128 (v4si,v4si)
40680     v8si __builtin_ia32_pblendd256 (v8si,v8si)
40681     v32qi __builtin_ia32_pbroadcastb256 (v16qi)
40682     v16hi __builtin_ia32_pbroadcastw256 (v8hi)
40683     v8si __builtin_ia32_pbroadcastd256 (v4si)
40684     v4di __builtin_ia32_pbroadcastq256 (v2di)
40685     v16qi __builtin_ia32_pbroadcastb128 (v16qi)
40686     v8hi __builtin_ia32_pbroadcastw128 (v8hi)
40687     v4si __builtin_ia32_pbroadcastd128 (v4si)
40688     v2di __builtin_ia32_pbroadcastq128 (v2di)
40689     v8si __builtin_ia32_permvarsi256 (v8si,v8si)
40690     v4df __builtin_ia32_permdf256 (v4df,int)
40691     v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf)
40692     v4di __builtin_ia32_permdi256 (v4di,int)
40693     v4di __builtin_ia32_permti256 (v4di,v4di,int)
40694     v4di __builtin_ia32_extract128i256 (v4di,int)
40695     v4di __builtin_ia32_insert128i256 (v4di,v2di,int)
40696     v8si __builtin_ia32_maskloadd256 (pcv8si,v8si)
40697     v4di __builtin_ia32_maskloadq256 (pcv4di,v4di)
40698     v4si __builtin_ia32_maskloadd (pcv4si,v4si)
40699     v2di __builtin_ia32_maskloadq (pcv2di,v2di)
40700     void __builtin_ia32_maskstored256 (pv8si,v8si,v8si)
40701     void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di)
40702     void __builtin_ia32_maskstored (pv4si,v4si,v4si)
40703     void __builtin_ia32_maskstoreq (pv2di,v2di,v2di)
40704     v8si __builtin_ia32_psllv8si (v8si,v8si)
40705     v4si __builtin_ia32_psllv4si (v4si,v4si)
40706     v4di __builtin_ia32_psllv4di (v4di,v4di)
40707     v2di __builtin_ia32_psllv2di (v2di,v2di)
40708     v8si __builtin_ia32_psrav8si (v8si,v8si)
40709     v4si __builtin_ia32_psrav4si (v4si,v4si)
40710     v8si __builtin_ia32_psrlv8si (v8si,v8si)
40711     v4si __builtin_ia32_psrlv4si (v4si,v4si)
40712     v4di __builtin_ia32_psrlv4di (v4di,v4di)
40713     v2di __builtin_ia32_psrlv2di (v2di,v2di)
40714     v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int)
40715     v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int)
40716     v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int)
40717     v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int)
40718     v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int)
40719     v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int)
40720     v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int)
40721     v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int)
40722     v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int)
40723     v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int)
40724     v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int)
40725     v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int)
40726     v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int)
40727     v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int)
40728     v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int)
40729     v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int)
40730
40731 The following built-in functions are available when `-maes' is used.
40732All of them generate the machine instruction that is part of the name.
40733
40734     v2di __builtin_ia32_aesenc128 (v2di, v2di)
40735     v2di __builtin_ia32_aesenclast128 (v2di, v2di)
40736     v2di __builtin_ia32_aesdec128 (v2di, v2di)
40737     v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
40738     v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
40739     v2di __builtin_ia32_aesimc128 (v2di)
40740
40741 The following built-in function is available when `-mpclmul' is used.
40742
40743`v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
40744     Generates the `pclmulqdq' machine instruction.
40745
40746 The following built-in function is available when `-mfsgsbase' is
40747used.  All of them generate the machine instruction that is part of the
40748name.
40749
40750     unsigned int __builtin_ia32_rdfsbase32 (void)
40751     unsigned long long __builtin_ia32_rdfsbase64 (void)
40752     unsigned int __builtin_ia32_rdgsbase32 (void)
40753     unsigned long long __builtin_ia32_rdgsbase64 (void)
40754     void _writefsbase_u32 (unsigned int)
40755     void _writefsbase_u64 (unsigned long long)
40756     void _writegsbase_u32 (unsigned int)
40757     void _writegsbase_u64 (unsigned long long)
40758
40759 The following built-in function is available when `-mrdrnd' is used.
40760All of them generate the machine instruction that is part of the name.
40761
40762     unsigned int __builtin_ia32_rdrand16_step (unsigned short *)
40763     unsigned int __builtin_ia32_rdrand32_step (unsigned int *)
40764     unsigned int __builtin_ia32_rdrand64_step (unsigned long long *)
40765
40766 The following built-in functions are available when `-msse4a' is used.
40767All of them generate the machine instruction that is part of the name.
40768
40769     void __builtin_ia32_movntsd (double *, v2df)
40770     void __builtin_ia32_movntss (float *, v4sf)
40771     v2di __builtin_ia32_extrq  (v2di, v16qi)
40772     v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
40773     v2di __builtin_ia32_insertq (v2di, v2di)
40774     v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
40775
40776 The following built-in functions are available when `-mxop' is used.
40777     v2df __builtin_ia32_vfrczpd (v2df)
40778     v4sf __builtin_ia32_vfrczps (v4sf)
40779     v2df __builtin_ia32_vfrczsd (v2df)
40780     v4sf __builtin_ia32_vfrczss (v4sf)
40781     v4df __builtin_ia32_vfrczpd256 (v4df)
40782     v8sf __builtin_ia32_vfrczps256 (v8sf)
40783     v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
40784     v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di)
40785     v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si)
40786     v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi)
40787     v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi)
40788     v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df)
40789     v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf)
40790     v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di)
40791     v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si)
40792     v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi)
40793     v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi)
40794     v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df)
40795     v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf)
40796     v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi)
40797     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
40798     v4si __builtin_ia32_vpcomeqd (v4si, v4si)
40799     v2di __builtin_ia32_vpcomeqq (v2di, v2di)
40800     v16qi __builtin_ia32_vpcomequb (v16qi, v16qi)
40801     v4si __builtin_ia32_vpcomequd (v4si, v4si)
40802     v2di __builtin_ia32_vpcomequq (v2di, v2di)
40803     v8hi __builtin_ia32_vpcomequw (v8hi, v8hi)
40804     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
40805     v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi)
40806     v4si __builtin_ia32_vpcomfalsed (v4si, v4si)
40807     v2di __builtin_ia32_vpcomfalseq (v2di, v2di)
40808     v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi)
40809     v4si __builtin_ia32_vpcomfalseud (v4si, v4si)
40810     v2di __builtin_ia32_vpcomfalseuq (v2di, v2di)
40811     v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi)
40812     v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi)
40813     v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi)
40814     v4si __builtin_ia32_vpcomged (v4si, v4si)
40815     v2di __builtin_ia32_vpcomgeq (v2di, v2di)
40816     v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi)
40817     v4si __builtin_ia32_vpcomgeud (v4si, v4si)
40818     v2di __builtin_ia32_vpcomgeuq (v2di, v2di)
40819     v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi)
40820     v8hi __builtin_ia32_vpcomgew (v8hi, v8hi)
40821     v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi)
40822     v4si __builtin_ia32_vpcomgtd (v4si, v4si)
40823     v2di __builtin_ia32_vpcomgtq (v2di, v2di)
40824     v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi)
40825     v4si __builtin_ia32_vpcomgtud (v4si, v4si)
40826     v2di __builtin_ia32_vpcomgtuq (v2di, v2di)
40827     v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi)
40828     v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi)
40829     v16qi __builtin_ia32_vpcomleb (v16qi, v16qi)
40830     v4si __builtin_ia32_vpcomled (v4si, v4si)
40831     v2di __builtin_ia32_vpcomleq (v2di, v2di)
40832     v16qi __builtin_ia32_vpcomleub (v16qi, v16qi)
40833     v4si __builtin_ia32_vpcomleud (v4si, v4si)
40834     v2di __builtin_ia32_vpcomleuq (v2di, v2di)
40835     v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi)
40836     v8hi __builtin_ia32_vpcomlew (v8hi, v8hi)
40837     v16qi __builtin_ia32_vpcomltb (v16qi, v16qi)
40838     v4si __builtin_ia32_vpcomltd (v4si, v4si)
40839     v2di __builtin_ia32_vpcomltq (v2di, v2di)
40840     v16qi __builtin_ia32_vpcomltub (v16qi, v16qi)
40841     v4si __builtin_ia32_vpcomltud (v4si, v4si)
40842     v2di __builtin_ia32_vpcomltuq (v2di, v2di)
40843     v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi)
40844     v8hi __builtin_ia32_vpcomltw (v8hi, v8hi)
40845     v16qi __builtin_ia32_vpcomneb (v16qi, v16qi)
40846     v4si __builtin_ia32_vpcomned (v4si, v4si)
40847     v2di __builtin_ia32_vpcomneq (v2di, v2di)
40848     v16qi __builtin_ia32_vpcomneub (v16qi, v16qi)
40849     v4si __builtin_ia32_vpcomneud (v4si, v4si)
40850     v2di __builtin_ia32_vpcomneuq (v2di, v2di)
40851     v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi)
40852     v8hi __builtin_ia32_vpcomnew (v8hi, v8hi)
40853     v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi)
40854     v4si __builtin_ia32_vpcomtrued (v4si, v4si)
40855     v2di __builtin_ia32_vpcomtrueq (v2di, v2di)
40856     v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi)
40857     v4si __builtin_ia32_vpcomtrueud (v4si, v4si)
40858     v2di __builtin_ia32_vpcomtrueuq (v2di, v2di)
40859     v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi)
40860     v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi)
40861     v4si __builtin_ia32_vphaddbd (v16qi)
40862     v2di __builtin_ia32_vphaddbq (v16qi)
40863     v8hi __builtin_ia32_vphaddbw (v16qi)
40864     v2di __builtin_ia32_vphadddq (v4si)
40865     v4si __builtin_ia32_vphaddubd (v16qi)
40866     v2di __builtin_ia32_vphaddubq (v16qi)
40867     v8hi __builtin_ia32_vphaddubw (v16qi)
40868     v2di __builtin_ia32_vphaddudq (v4si)
40869     v4si __builtin_ia32_vphadduwd (v8hi)
40870     v2di __builtin_ia32_vphadduwq (v8hi)
40871     v4si __builtin_ia32_vphaddwd (v8hi)
40872     v2di __builtin_ia32_vphaddwq (v8hi)
40873     v8hi __builtin_ia32_vphsubbw (v16qi)
40874     v2di __builtin_ia32_vphsubdq (v4si)
40875     v4si __builtin_ia32_vphsubwd (v8hi)
40876     v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si)
40877     v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di)
40878     v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di)
40879     v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si)
40880     v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di)
40881     v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di)
40882     v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si)
40883     v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi)
40884     v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si)
40885     v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi)
40886     v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si)
40887     v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si)
40888     v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi)
40889     v16qi __builtin_ia32_vprotb (v16qi, v16qi)
40890     v4si __builtin_ia32_vprotd (v4si, v4si)
40891     v2di __builtin_ia32_vprotq (v2di, v2di)
40892     v8hi __builtin_ia32_vprotw (v8hi, v8hi)
40893     v16qi __builtin_ia32_vpshab (v16qi, v16qi)
40894     v4si __builtin_ia32_vpshad (v4si, v4si)
40895     v2di __builtin_ia32_vpshaq (v2di, v2di)
40896     v8hi __builtin_ia32_vpshaw (v8hi, v8hi)
40897     v16qi __builtin_ia32_vpshlb (v16qi, v16qi)
40898     v4si __builtin_ia32_vpshld (v4si, v4si)
40899     v2di __builtin_ia32_vpshlq (v2di, v2di)
40900     v8hi __builtin_ia32_vpshlw (v8hi, v8hi)
40901
40902 The following built-in functions are available when `-mfma4' is used.
40903All of them generate the machine instruction that is part of the name.
40904
40905     v2df __builtin_ia32_vfmaddpd (v2df, v2df, v2df)
40906     v4sf __builtin_ia32_vfmaddps (v4sf, v4sf, v4sf)
40907     v2df __builtin_ia32_vfmaddsd (v2df, v2df, v2df)
40908     v4sf __builtin_ia32_vfmaddss (v4sf, v4sf, v4sf)
40909     v2df __builtin_ia32_vfmsubpd (v2df, v2df, v2df)
40910     v4sf __builtin_ia32_vfmsubps (v4sf, v4sf, v4sf)
40911     v2df __builtin_ia32_vfmsubsd (v2df, v2df, v2df)
40912     v4sf __builtin_ia32_vfmsubss (v4sf, v4sf, v4sf)
40913     v2df __builtin_ia32_vfnmaddpd (v2df, v2df, v2df)
40914     v4sf __builtin_ia32_vfnmaddps (v4sf, v4sf, v4sf)
40915     v2df __builtin_ia32_vfnmaddsd (v2df, v2df, v2df)
40916     v4sf __builtin_ia32_vfnmaddss (v4sf, v4sf, v4sf)
40917     v2df __builtin_ia32_vfnmsubpd (v2df, v2df, v2df)
40918     v4sf __builtin_ia32_vfnmsubps (v4sf, v4sf, v4sf)
40919     v2df __builtin_ia32_vfnmsubsd (v2df, v2df, v2df)
40920     v4sf __builtin_ia32_vfnmsubss (v4sf, v4sf, v4sf)
40921     v2df __builtin_ia32_vfmaddsubpd  (v2df, v2df, v2df)
40922     v4sf __builtin_ia32_vfmaddsubps  (v4sf, v4sf, v4sf)
40923     v2df __builtin_ia32_vfmsubaddpd  (v2df, v2df, v2df)
40924     v4sf __builtin_ia32_vfmsubaddps  (v4sf, v4sf, v4sf)
40925     v4df __builtin_ia32_vfmaddpd256 (v4df, v4df, v4df)
40926     v8sf __builtin_ia32_vfmaddps256 (v8sf, v8sf, v8sf)
40927     v4df __builtin_ia32_vfmsubpd256 (v4df, v4df, v4df)
40928     v8sf __builtin_ia32_vfmsubps256 (v8sf, v8sf, v8sf)
40929     v4df __builtin_ia32_vfnmaddpd256 (v4df, v4df, v4df)
40930     v8sf __builtin_ia32_vfnmaddps256 (v8sf, v8sf, v8sf)
40931     v4df __builtin_ia32_vfnmsubpd256 (v4df, v4df, v4df)
40932     v8sf __builtin_ia32_vfnmsubps256 (v8sf, v8sf, v8sf)
40933     v4df __builtin_ia32_vfmaddsubpd256 (v4df, v4df, v4df)
40934     v8sf __builtin_ia32_vfmaddsubps256 (v8sf, v8sf, v8sf)
40935     v4df __builtin_ia32_vfmsubaddpd256 (v4df, v4df, v4df)
40936     v8sf __builtin_ia32_vfmsubaddps256 (v8sf, v8sf, v8sf)
40937
40938 The following built-in functions are available when `-mlwp' is used.
40939
40940     void __builtin_ia32_llwpcb16 (void *);
40941     void __builtin_ia32_llwpcb32 (void *);
40942     void __builtin_ia32_llwpcb64 (void *);
40943     void * __builtin_ia32_llwpcb16 (void);
40944     void * __builtin_ia32_llwpcb32 (void);
40945     void * __builtin_ia32_llwpcb64 (void);
40946     void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short)
40947     void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int)
40948     void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int)
40949     unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short)
40950     unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int)
40951     unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int)
40952
40953 The following built-in functions are available when `-mbmi' is used.
40954All of them generate the machine instruction that is part of the name.
40955     unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
40956     unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
40957
40958 The following built-in functions are available when `-mbmi2' is used.
40959All of them generate the machine instruction that is part of the name.
40960     unsigned int _bzhi_u32 (unsigned int, unsigned int)
40961     unsigned int _pdep_u32 (unsigned int, unsigned int)
40962     unsigned int _pext_u32 (unsigned int, unsigned int)
40963     unsigned long long _bzhi_u64 (unsigned long long, unsigned long long)
40964     unsigned long long _pdep_u64 (unsigned long long, unsigned long long)
40965     unsigned long long _pext_u64 (unsigned long long, unsigned long long)
40966
40967 The following built-in functions are available when `-mlzcnt' is used.
40968All of them generate the machine instruction that is part of the name.
40969     unsigned short __builtin_ia32_lzcnt_16(unsigned short);
40970     unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
40971     unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
40972
40973 The following built-in functions are available when `-mfxsr' is used.
40974All of them generate the machine instruction that is part of the name.
40975     void __builtin_ia32_fxsave (void *)
40976     void __builtin_ia32_fxrstor (void *)
40977     void __builtin_ia32_fxsave64 (void *)
40978     void __builtin_ia32_fxrstor64 (void *)
40979
40980 The following built-in functions are available when `-mxsave' is used.
40981All of them generate the machine instruction that is part of the name.
40982     void __builtin_ia32_xsave (void *, long long)
40983     void __builtin_ia32_xrstor (void *, long long)
40984     void __builtin_ia32_xsave64 (void *, long long)
40985     void __builtin_ia32_xrstor64 (void *, long long)
40986
40987 The following built-in functions are available when `-mxsaveopt' is
40988used.  All of them generate the machine instruction that is part of the
40989name.
40990     void __builtin_ia32_xsaveopt (void *, long long)
40991     void __builtin_ia32_xsaveopt64 (void *, long long)
40992
40993 The following built-in functions are available when `-mtbm' is used.
40994Both of them generate the immediate form of the bextr machine
40995instruction.
40996     unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int);
40997     unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long);
40998
40999 The following built-in functions are available when `-m3dnow' is used.
41000All of them generate the machine instruction that is part of the name.
41001
41002     void __builtin_ia32_femms (void)
41003     v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
41004     v2si __builtin_ia32_pf2id (v2sf)
41005     v2sf __builtin_ia32_pfacc (v2sf, v2sf)
41006     v2sf __builtin_ia32_pfadd (v2sf, v2sf)
41007     v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
41008     v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
41009     v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
41010     v2sf __builtin_ia32_pfmax (v2sf, v2sf)
41011     v2sf __builtin_ia32_pfmin (v2sf, v2sf)
41012     v2sf __builtin_ia32_pfmul (v2sf, v2sf)
41013     v2sf __builtin_ia32_pfrcp (v2sf)
41014     v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
41015     v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
41016     v2sf __builtin_ia32_pfrsqrt (v2sf)
41017     v2sf __builtin_ia32_pfsub (v2sf, v2sf)
41018     v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
41019     v2sf __builtin_ia32_pi2fd (v2si)
41020     v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
41021
41022 The following built-in functions are available when both `-m3dnow' and
41023`-march=athlon' are used.  All of them generate the machine instruction
41024that is part of the name.
41025
41026     v2si __builtin_ia32_pf2iw (v2sf)
41027     v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
41028     v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
41029     v2sf __builtin_ia32_pi2fw (v2si)
41030     v2sf __builtin_ia32_pswapdsf (v2sf)
41031     v2si __builtin_ia32_pswapdsi (v2si)
41032
41033 The following built-in functions are available when `-mrtm' is used
41034They are used for restricted transactional memory. These are the
41035internal low level functions. Normally the functions in *note x86
41036transactional memory intrinsics:: should be used instead.
41037
41038     int __builtin_ia32_xbegin ()
41039     void __builtin_ia32_xend ()
41040     void __builtin_ia32_xabort (status)
41041     int __builtin_ia32_xtest ()
41042
41043 The following built-in functions are available when `-mmwaitx' is used.
41044All of them generate the machine instruction that is part of the name.
41045     void __builtin_ia32_monitorx (void *, unsigned int, unsigned int)
41046     void __builtin_ia32_mwaitx (unsigned int, unsigned int, unsigned int)
41047
41048
41049File: gcc.info,  Node: x86 transactional memory intrinsics,  Prev: x86 Built-in Functions,  Up: Target Builtins
41050
410516.58.31 x86 Transactional Memory Intrinsics
41052-------------------------------------------
41053
41054These hardware transactional memory intrinsics for x86 allow you to use
41055memory transactions with RTM (Restricted Transactional Memory).  This
41056support is enabled with the `-mrtm' option.  For using HLE (Hardware
41057Lock Elision) see *note x86 specific memory model extensions for
41058transactional memory:: instead.
41059
41060 A memory transaction commits all changes to memory in an atomic way,
41061as visible to other threads. If the transaction fails it is rolled back
41062and all side effects discarded.
41063
41064 Generally there is no guarantee that a memory transaction ever succeeds
41065and suitable fallback code always needs to be supplied.
41066
41067 -- RTM Function: unsigned _xbegin ()
41068     Start a RTM (Restricted Transactional Memory) transaction.
41069     Returns `_XBEGIN_STARTED' when the transaction started
41070     successfully (note this is not 0, so the constant has to be
41071     explicitly tested).
41072
41073     If the transaction aborts, all side-effects are undone and an
41074     abort code encoded as a bit mask is returned.  The following
41075     macros are defined:
41076
41077    `_XABORT_EXPLICIT'
41078          Transaction was explicitly aborted with `_xabort'.  The
41079          parameter passed to `_xabort' is available with
41080          `_XABORT_CODE(status)'.
41081
41082    `_XABORT_RETRY'
41083          Transaction retry is possible.
41084
41085    `_XABORT_CONFLICT'
41086          Transaction abort due to a memory conflict with another
41087          thread.
41088
41089    `_XABORT_CAPACITY'
41090          Transaction abort due to the transaction using too much
41091          memory.
41092
41093    `_XABORT_DEBUG'
41094          Transaction abort due to a debug trap.
41095
41096    `_XABORT_NESTED'
41097          Transaction abort in an inner nested transaction.
41098
41099     There is no guarantee any transaction ever succeeds, so there
41100     always needs to be a valid fallback path.
41101
41102 -- RTM Function: void _xend ()
41103     Commit the current transaction. When no transaction is active this
41104     faults.  All memory side-effects of the transaction become visible
41105     to other threads in an atomic manner.
41106
41107 -- RTM Function: int _xtest ()
41108     Return a nonzero value if a transaction is currently active,
41109     otherwise 0.
41110
41111 -- RTM Function: void _xabort (status)
41112     Abort the current transaction. When no transaction is active this
41113     is a no-op.  The STATUS is an 8-bit constant; its value is encoded
41114     in the return value from `_xbegin'.
41115
41116 Here is an example showing handling for `_XABORT_RETRY' and a fallback
41117path for other failures:
41118
41119     #include <immintrin.h>
41120
41121     int n_tries, max_tries;
41122     unsigned status = _XABORT_EXPLICIT;
41123     ...
41124
41125     for (n_tries = 0; n_tries < max_tries; n_tries++)
41126       {
41127         status = _xbegin ();
41128         if (status == _XBEGIN_STARTED || !(status & _XABORT_RETRY))
41129           break;
41130       }
41131     if (status == _XBEGIN_STARTED)
41132       {
41133         ... transaction code...
41134         _xend ();
41135       }
41136     else
41137       {
41138         ... non-transactional fallback path...
41139       }
41140
41141Note that, in most cases, the transactional and non-transactional code
41142must synchronize together to ensure consistency.
41143
41144
41145File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
41146
411476.59 Format Checks Specific to Particular Target Machines
41148=========================================================
41149
41150For some target machines, GCC supports additional options to the format
41151attribute (*note Declaring Attributes of Functions: Function
41152Attributes.).
41153
41154* Menu:
41155
41156* Solaris Format Checks::
41157* Darwin Format Checks::
41158
41159
41160File: gcc.info,  Node: Solaris Format Checks,  Next: Darwin Format Checks,  Up: Target Format Checks
41161
411626.59.1 Solaris Format Checks
41163----------------------------
41164
41165Solaris targets support the `cmn_err' (or `__cmn_err__') format check.
41166`cmn_err' accepts a subset of the standard `printf' conversions, and
41167the two-argument `%b' conversion for displaying bit-fields.  See the
41168Solaris man page for `cmn_err' for more information.
41169
41170
41171File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks
41172
411736.59.2 Darwin Format Checks
41174---------------------------
41175
41176Darwin targets support the `CFString' (or `__CFString__') in the format
41177attribute context.  Declarations made with such attribution are parsed
41178for correct syntax and format argument types.  However, parsing of the
41179format string itself is currently undefined and is not carried out by
41180this version of the compiler.
41181
41182 Additionally, `CFStringRefs' (defined by the `CoreFoundation' headers)
41183may also be used as format arguments.  Note that the relevant headers
41184are only likely to be available on Darwin (OSX) installations.  On such
41185installations, the XCode and system documentation provide descriptions
41186of `CFString', `CFStringRefs' and associated functions.
41187
41188
41189File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
41190
411916.60 Pragmas Accepted by GCC
41192============================
41193
41194GCC supports several types of pragmas, primarily in order to compile
41195code originally written for other compilers.  Note that in general we
41196do not recommend the use of pragmas; *Note Function Attributes::, for
41197further explanation.
41198
41199* Menu:
41200
41201* ARM Pragmas::
41202* M32C Pragmas::
41203* MeP Pragmas::
41204* RS/6000 and PowerPC Pragmas::
41205* Darwin Pragmas::
41206* Solaris Pragmas::
41207* Symbol-Renaming Pragmas::
41208* Structure-Packing Pragmas::
41209* Weak Pragmas::
41210* Diagnostic Pragmas::
41211* Visibility Pragmas::
41212* Push/Pop Macro Pragmas::
41213* Function Specific Option Pragmas::
41214* Loop-Specific Pragmas::
41215
41216
41217File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Up: Pragmas
41218
412196.60.1 ARM Pragmas
41220------------------
41221
41222The ARM target defines pragmas for controlling the default addition of
41223`long_call' and `short_call' attributes to functions.  *Note Function
41224Attributes::, for information about the effects of these attributes.
41225
41226`long_calls'
41227     Set all subsequent functions to have the `long_call' attribute.
41228
41229`no_long_calls'
41230     Set all subsequent functions to have the `short_call' attribute.
41231
41232`long_calls_off'
41233     Do not affect the `long_call' or `short_call' attributes of
41234     subsequent functions.
41235
41236
41237File: gcc.info,  Node: M32C Pragmas,  Next: MeP Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
41238
412396.60.2 M32C Pragmas
41240-------------------
41241
41242`GCC memregs NUMBER'
41243     Overrides the command-line option `-memregs=' for the current
41244     file.  Use with care!  This pragma must be before any function in
41245     the file, and mixing different memregs values in different objects
41246     may make them incompatible.  This pragma is useful when a
41247     performance-critical function uses a memreg for temporary values,
41248     as it may allow you to reduce the number of memregs used.
41249
41250`ADDRESS NAME ADDRESS'
41251     For any declared symbols matching NAME, this does three things to
41252     that symbol: it forces the symbol to be located at the given
41253     address (a number), it forces the symbol to be volatile, and it
41254     changes the symbol's scope to be static.  This pragma exists for
41255     compatibility with other compilers, but note that the common
41256     `1234H' numeric syntax is not supported (use `0x1234' instead).
41257     Example:
41258
41259          #pragma ADDRESS port3 0x103
41260          char port3;
41261
41262
41263
41264File: gcc.info,  Node: MeP Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
41265
412666.60.3 MeP Pragmas
41267------------------
41268
41269`custom io_volatile (on|off)'
41270     Overrides the command-line option `-mio-volatile' for the current
41271     file.  Note that for compatibility with future GCC releases, this
41272     option should only be used once before any `io' variables in each
41273     file.
41274
41275`GCC coprocessor available REGISTERS'
41276     Specifies which coprocessor registers are available to the register
41277     allocator.  REGISTERS may be a single register, register range
41278     separated by ellipses, or comma-separated list of those.  Example:
41279
41280          #pragma GCC coprocessor available $c0...$c10, $c28
41281
41282`GCC coprocessor call_saved REGISTERS'
41283     Specifies which coprocessor registers are to be saved and restored
41284     by any function using them.  REGISTERS may be a single register,
41285     register range separated by ellipses, or comma-separated list of
41286     those.  Example:
41287
41288          #pragma GCC coprocessor call_saved $c4...$c6, $c31
41289
41290`GCC coprocessor subclass '(A|B|C|D)' = REGISTERS'
41291     Creates and defines a register class.  These register classes can
41292     be used by inline `asm' constructs.  REGISTERS may be a single
41293     register, register range separated by ellipses, or comma-separated
41294     list of those.  Example:
41295
41296          #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
41297
41298          asm ("cpfoo %0" : "=B" (x));
41299
41300`GCC disinterrupt NAME , NAME ...'
41301     For the named functions, the compiler adds code to disable
41302     interrupts for the duration of those functions.  If any functions
41303     so named are not encountered in the source, a warning is emitted
41304     that the pragma is not used.  Examples:
41305
41306          #pragma disinterrupt foo
41307          #pragma disinterrupt bar, grill
41308          int foo () { ... }
41309
41310`GCC call NAME , NAME ...'
41311     For the named functions, the compiler always uses a
41312     register-indirect call model when calling the named functions.
41313     Examples:
41314
41315          extern int foo ();
41316          #pragma call foo
41317
41318
41319
41320File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: MeP Pragmas,  Up: Pragmas
41321
413226.60.4 RS/6000 and PowerPC Pragmas
41323----------------------------------
41324
41325The RS/6000 and PowerPC targets define one pragma for controlling
41326whether or not the `longcall' attribute is added to function
41327declarations by default.  This pragma overrides the `-mlongcall'
41328option, but not the `longcall' and `shortcall' attributes.  *Note
41329RS/6000 and PowerPC Options::, for more information about when long
41330calls are and are not necessary.
41331
41332`longcall (1)'
41333     Apply the `longcall' attribute to all subsequent function
41334     declarations.
41335
41336`longcall (0)'
41337     Do not apply the `longcall' attribute to subsequent function
41338     declarations.
41339
41340
41341File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
41342
413436.60.5 Darwin Pragmas
41344---------------------
41345
41346The following pragmas are available for all architectures running the
41347Darwin operating system.  These are useful for compatibility with other
41348Mac OS compilers.
41349
41350`mark TOKENS...'
41351     This pragma is accepted, but has no effect.
41352
41353`options align=ALIGNMENT'
41354     This pragma sets the alignment of fields in structures.  The
41355     values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or
41356     `power', to emulate PowerPC alignment.  Uses of this pragma nest
41357     properly; to restore the previous setting, use `reset' for the
41358     ALIGNMENT.
41359
41360`segment TOKENS...'
41361     This pragma is accepted, but has no effect.
41362
41363`unused (VAR [, VAR]...)'
41364     This pragma declares variables to be possibly unused.  GCC does not
41365     produce warnings for the listed variables.  The effect is similar
41366     to that of the `unused' attribute, except that this pragma may
41367     appear anywhere within the variables' scopes.
41368
41369
41370File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
41371
413726.60.6 Solaris Pragmas
41373----------------------
41374
41375The Solaris target supports `#pragma redefine_extname' (*note
41376Symbol-Renaming Pragmas::).  It also supports additional `#pragma'
41377directives for compatibility with the system compiler.
41378
41379`align ALIGNMENT (VARIABLE [, VARIABLE]...)'
41380     Increase the minimum alignment of each VARIABLE to ALIGNMENT.
41381     This is the same as GCC's `aligned' attribute *note Variable
41382     Attributes::).  Macro expansion occurs on the arguments to this
41383     pragma when compiling C and Objective-C.  It does not currently
41384     occur when compiling C++, but this is a bug which may be fixed in
41385     a future release.
41386
41387`fini (FUNCTION [, FUNCTION]...)'
41388     This pragma causes each listed FUNCTION to be called after main,
41389     or during shared module unloading, by adding a call to the `.fini'
41390     section.
41391
41392`init (FUNCTION [, FUNCTION]...)'
41393     This pragma causes each listed FUNCTION to be called during
41394     initialization (before `main') or during shared module loading, by
41395     adding a call to the `.init' section.
41396
41397
41398
41399File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Packing Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
41400
414016.60.7 Symbol-Renaming Pragmas
41402------------------------------
41403
41404GCC supports a `#pragma' directive that changes the name used in
41405assembly for a given declaration. While this pragma is supported on all
41406platforms, it is intended primarily to provide compatibility with the
41407Solaris system headers. This effect can also be achieved using the asm
41408labels extension (*note Asm Labels::).
41409
41410`redefine_extname OLDNAME NEWNAME'
41411     This pragma gives the C function OLDNAME the assembly symbol
41412     NEWNAME.  The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' is
41413     defined if this pragma is available (currently on all platforms).
41414
41415 This pragma and the asm labels extension interact in a complicated
41416manner.  Here are some corner cases you may want to be aware of:
41417
41418  1. This pragma silently applies only to declarations with external
41419     linkage.  Asm labels do not have this restriction.
41420
41421  2. In C++, this pragma silently applies only to declarations with "C"
41422     linkage.  Again, asm labels do not have this restriction.
41423
41424  3. If either of the ways of changing the assembly name of a
41425     declaration are applied to a declaration whose assembly name has
41426     already been determined (either by a previous use of one of these
41427     features, or because the compiler needed the assembly name in
41428     order to generate code), and the new name is different, a warning
41429     issues and the name does not change.
41430
41431  4. The OLDNAME used by `#pragma redefine_extname' is always the
41432     C-language name.
41433
41434
41435File: gcc.info,  Node: Structure-Packing Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
41436
414376.60.8 Structure-Packing Pragmas
41438--------------------------------
41439
41440For compatibility with Microsoft Windows compilers, GCC supports a set
41441of `#pragma' directives that change the maximum alignment of members of
41442structures (other than zero-width bit-fields), unions, and classes
41443subsequently defined. The N value below always is required to be a
41444small power of two and specifies the new alignment in bytes.
41445
41446  1. `#pragma pack(N)' simply sets the new alignment.
41447
41448  2. `#pragma pack()' sets the alignment to the one that was in effect
41449     when compilation started (see also command-line option
41450     `-fpack-struct[=N]' *note Code Gen Options::).
41451
41452  3. `#pragma pack(push[,N])' pushes the current alignment setting on
41453     an internal stack and then optionally sets the new alignment.
41454
41455  4. `#pragma pack(pop)' restores the alignment setting to the one
41456     saved at the top of the internal stack (and removes that stack
41457     entry).  Note that `#pragma pack([N])' does not influence this
41458     internal stack; thus it is possible to have `#pragma pack(push)'
41459     followed by multiple `#pragma pack(N)' instances and finalized by
41460     a single `#pragma pack(pop)'.
41461
41462 Some targets, e.g. x86 and PowerPC, support the `ms_struct' `#pragma'
41463which lays out a structure as the documented `__attribute__
41464((ms_struct))'.
41465  1. `#pragma ms_struct on' turns on the layout for structures declared.
41466
41467  2. `#pragma ms_struct off' turns off the layout for structures
41468     declared.
41469
41470  3. `#pragma ms_struct reset' goes back to the default layout.
41471
41472
41473File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Packing Pragmas,  Up: Pragmas
41474
414756.60.9 Weak Pragmas
41476-------------------
41477
41478For compatibility with SVR4, GCC supports a set of `#pragma' directives
41479for declaring symbols to be weak, and defining weak aliases.
41480
41481`#pragma weak SYMBOL'
41482     This pragma declares SYMBOL to be weak, as if the declaration had
41483     the attribute of the same name.  The pragma may appear before or
41484     after the declaration of SYMBOL.  It is not an error for SYMBOL to
41485     never be defined at all.
41486
41487`#pragma weak SYMBOL1 = SYMBOL2'
41488     This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
41489     an error if SYMBOL2 is not defined in the current translation unit.
41490
41491
41492File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
41493
414946.60.10 Diagnostic Pragmas
41495--------------------------
41496
41497GCC allows the user to selectively enable or disable certain types of
41498diagnostics, and change the kind of the diagnostic.  For example, a
41499project's policy might require that all sources compile with `-Werror'
41500but certain files might have exceptions allowing specific types of
41501warnings.  Or, a project might selectively enable diagnostics and treat
41502them as errors depending on which preprocessor macros are defined.
41503
41504`#pragma GCC diagnostic KIND OPTION'
41505     Modifies the disposition of a diagnostic.  Note that not all
41506     diagnostics are modifiable; at the moment only warnings (normally
41507     controlled by `-W...') can be controlled, and not all of them.
41508     Use `-fdiagnostics-show-option' to determine which diagnostics are
41509     controllable and which option controls them.
41510
41511     KIND is `error' to treat this diagnostic as an error, `warning' to
41512     treat it like a warning (even if `-Werror' is in effect), or
41513     `ignored' if the diagnostic is to be ignored.  OPTION is a double
41514     quoted string that matches the command-line option.
41515
41516          #pragma GCC diagnostic warning "-Wformat"
41517          #pragma GCC diagnostic error "-Wformat"
41518          #pragma GCC diagnostic ignored "-Wformat"
41519
41520     Note that these pragmas override any command-line options.  GCC
41521     keeps track of the location of each pragma, and issues diagnostics
41522     according to the state as of that point in the source file.  Thus,
41523     pragmas occurring after a line do not affect diagnostics caused by
41524     that line.
41525
41526`#pragma GCC diagnostic push'
41527`#pragma GCC diagnostic pop'
41528     Causes GCC to remember the state of the diagnostics as of each
41529     `push', and restore to that point at each `pop'.  If a `pop' has
41530     no matching `push', the command-line options are restored.
41531
41532          #pragma GCC diagnostic error "-Wuninitialized"
41533            foo(a);                       /* error is given for this one */
41534          #pragma GCC diagnostic push
41535          #pragma GCC diagnostic ignored "-Wuninitialized"
41536            foo(b);                       /* no diagnostic for this one */
41537          #pragma GCC diagnostic pop
41538            foo(c);                       /* error is given for this one */
41539          #pragma GCC diagnostic pop
41540            foo(d);                       /* depends on command-line options */
41541
41542
41543 GCC also offers a simple mechanism for printing messages during
41544compilation.
41545
41546`#pragma message STRING'
41547     Prints STRING as a compiler message on compilation.  The message
41548     is informational only, and is neither a compilation warning nor an
41549     error.
41550
41551          #pragma message "Compiling " __FILE__ "..."
41552
41553     STRING may be parenthesized, and is printed with location
41554     information.  For example,
41555
41556          #define DO_PRAGMA(x) _Pragma (#x)
41557          #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
41558
41559          TODO(Remember to fix this)
41560
41561     prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to
41562     fix this'.
41563
41564
41565
41566File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
41567
415686.60.11 Visibility Pragmas
41569--------------------------
41570
41571`#pragma GCC visibility push(VISIBILITY)'
41572`#pragma GCC visibility pop'
41573     This pragma allows the user to set the visibility for multiple
41574     declarations without having to give each a visibility attribute
41575     (*note Function Attributes::).
41576
41577     In C++, `#pragma GCC visibility' affects only namespace-scope
41578     declarations.  Class members and template specializations are not
41579     affected; if you want to override the visibility for a particular
41580     member or instantiation, you must use an attribute.
41581
41582
41583
41584File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas
41585
415866.60.12 Push/Pop Macro Pragmas
41587------------------------------
41588
41589For compatibility with Microsoft Windows compilers, GCC supports
41590`#pragma push_macro("MACRO_NAME")' and `#pragma
41591pop_macro("MACRO_NAME")'.
41592
41593`#pragma push_macro("MACRO_NAME")'
41594     This pragma saves the value of the macro named as MACRO_NAME to
41595     the top of the stack for this macro.
41596
41597`#pragma pop_macro("MACRO_NAME")'
41598     This pragma sets the value of the macro named as MACRO_NAME to the
41599     value on top of the stack for this macro. If the stack for
41600     MACRO_NAME is empty, the value of the macro remains unchanged.
41601
41602 For example:
41603
41604     #define X  1
41605     #pragma push_macro("X")
41606     #undef X
41607     #define X -1
41608     #pragma pop_macro("X")
41609     int x [X];
41610
41611In this example, the definition of X as 1 is saved by `#pragma
41612push_macro' and restored by `#pragma pop_macro'.
41613
41614
41615File: gcc.info,  Node: Function Specific Option Pragmas,  Next: Loop-Specific Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
41616
416176.60.13 Function Specific Option Pragmas
41618----------------------------------------
41619
41620`#pragma GCC target ("STRING"...)'
41621     This pragma allows you to set target specific options for functions
41622     defined later in the source file.  One or more strings can be
41623     specified.  Each function that is defined after this point is as
41624     if `attribute((target("STRING")))' was specified for that
41625     function.  The parenthesis around the options is optional.  *Note
41626     Function Attributes::, for more information about the `target'
41627     attribute and the attribute syntax.
41628
41629     The `#pragma GCC target' pragma is presently implemented for x86,
41630     PowerPC, and Nios II targets only.
41631
41632`#pragma GCC optimize ("STRING"...)'
41633     This pragma allows you to set global optimization options for
41634     functions defined later in the source file.  One or more strings
41635     can be specified.  Each function that is defined after this point
41636     is as if `attribute((optimize("STRING")))' was specified for that
41637     function.  The parenthesis around the options is optional.  *Note
41638     Function Attributes::, for more information about the `optimize'
41639     attribute and the attribute syntax.
41640
41641`#pragma GCC push_options'
41642`#pragma GCC pop_options'
41643     These pragmas maintain a stack of the current target and
41644     optimization options.  It is intended for include files where you
41645     temporarily want to switch to using a different `#pragma GCC
41646     target' or `#pragma GCC optimize' and then to pop back to the
41647     previous options.
41648
41649`#pragma GCC reset_options'
41650     This pragma clears the current `#pragma GCC target' and `#pragma
41651     GCC optimize' to use the default switches as specified on the
41652     command line.
41653
41654
41655File: gcc.info,  Node: Loop-Specific Pragmas,  Prev: Function Specific Option Pragmas,  Up: Pragmas
41656
416576.60.14 Loop-Specific Pragmas
41658-----------------------------
41659
41660`#pragma GCC ivdep'
41661
41662 With this pragma, the programmer asserts that there are no loop-carried
41663dependencies which would prevent consecutive iterations of the
41664following loop from executing concurrently with SIMD (single
41665instruction multiple data) instructions.
41666
41667 For example, the compiler can only unconditionally vectorize the
41668following loop with the pragma:
41669
41670     void foo (int n, int *a, int *b, int *c)
41671     {
41672       int i, j;
41673     #pragma GCC ivdep
41674       for (i = 0; i < n; ++i)
41675         a[i] = b[i] + c[i];
41676     }
41677
41678In this example, using the `restrict' qualifier had the same effect. In
41679the following example, that would not be possible. Assume k < -m or k
41680>= m. Only with the pragma, the compiler knows that it can
41681unconditionally vectorize the following loop:
41682
41683     void ignore_vec_dep (int *a, int k, int c, int m)
41684     {
41685     #pragma GCC ivdep
41686       for (int i = 0; i < m; i++)
41687         a[i] = a[i + k] * c;
41688     }
41689
41690
41691File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
41692
416936.61 Unnamed Structure and Union Fields
41694=======================================
41695
41696As permitted by ISO C11 and for compatibility with other compilers, GCC
41697allows you to define a structure or union that contains, as fields,
41698structures and unions without names.  For example:
41699
41700     struct {
41701       int a;
41702       union {
41703         int b;
41704         float c;
41705       };
41706       int d;
41707     } foo;
41708
41709In this example, you are able to access members of the unnamed union
41710with code like `foo.b'.  Note that only unnamed structs and unions are
41711allowed, you may not have, for example, an unnamed `int'.
41712
41713 You must never create such structures that cause ambiguous field
41714definitions.  For example, in this structure:
41715
41716     struct {
41717       int a;
41718       struct {
41719         int a;
41720       };
41721     } foo;
41722
41723it is ambiguous which `a' is being referred to with `foo.a'.  The
41724compiler gives errors for such constructs.
41725
41726 Unless `-fms-extensions' is used, the unnamed field must be a
41727structure or union definition without a tag (for example, `struct { int
41728a; };').  If `-fms-extensions' is used, the field may also be a
41729definition with a tag such as `struct foo { int a; };', a reference to
41730a previously defined structure or union such as `struct foo;', or a
41731reference to a `typedef' name for a previously defined structure or
41732union type.
41733
41734 The option `-fplan9-extensions' enables `-fms-extensions' as well as
41735two other extensions.  First, a pointer to a structure is automatically
41736converted to a pointer to an anonymous field for assignments and
41737function calls.  For example:
41738
41739     struct s1 { int a; };
41740     struct s2 { struct s1; };
41741     extern void f1 (struct s1 *);
41742     void f2 (struct s2 *p) { f1 (p); }
41743
41744In the call to `f1' inside `f2', the pointer `p' is converted into a
41745pointer to the anonymous field.
41746
41747 Second, when the type of an anonymous field is a `typedef' for a
41748`struct' or `union', code may refer to the field using the name of the
41749`typedef'.
41750
41751     typedef struct { int a; } s1;
41752     struct s2 { s1; };
41753     s1 f1 (struct s2 *p) { return p->s1; }
41754
41755 These usages are only permitted when they are not ambiguous.
41756
41757
41758File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
41759
417606.62 Thread-Local Storage
41761=========================
41762
41763Thread-local storage (TLS) is a mechanism by which variables are
41764allocated such that there is one instance of the variable per extant
41765thread.  The runtime model GCC uses to implement this originates in the
41766IA-64 processor-specific ABI, but has since been migrated to other
41767processors as well.  It requires significant support from the linker
41768(`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and
41769`libpthread.so'), so it is not available everywhere.
41770
41771 At the user level, the extension is visible with a new storage class
41772keyword: `__thread'.  For example:
41773
41774     __thread int i;
41775     extern __thread struct state s;
41776     static __thread char *p;
41777
41778 The `__thread' specifier may be used alone, with the `extern' or
41779`static' specifiers, but with no other storage class specifier.  When
41780used with `extern' or `static', `__thread' must appear immediately
41781after the other storage class specifier.
41782
41783 The `__thread' specifier may be applied to any global, file-scoped
41784static, function-scoped static, or static data member of a class.  It
41785may not be applied to block-scoped automatic or non-static data member.
41786
41787 When the address-of operator is applied to a thread-local variable, it
41788is evaluated at run time and returns the address of the current thread's
41789instance of that variable.  An address so obtained may be used by any
41790thread.  When a thread terminates, any pointers to thread-local
41791variables in that thread become invalid.
41792
41793 No static initialization may refer to the address of a thread-local
41794variable.
41795
41796 In C++, if an initializer is present for a thread-local variable, it
41797must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
41798standard.
41799
41800 See ELF Handling For Thread-Local Storage
41801(http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of
41802the four thread-local storage addressing models, and how the runtime is
41803expected to function.
41804
41805* Menu:
41806
41807* C99 Thread-Local Edits::
41808* C++98 Thread-Local Edits::
41809
41810
41811File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
41812
418136.62.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
41814-------------------------------------------------------
41815
41816The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
41817document the exact semantics of the language extension.
41818
41819   * `5.1.2  Execution environments'
41820
41821     Add new text after paragraph 1
41822
41823          Within either execution environment, a "thread" is a flow of
41824          control within a program.  It is implementation defined
41825          whether or not there may be more than one thread associated
41826          with a program.  It is implementation defined how threads
41827          beyond the first are created, the name and type of the
41828          function called at thread startup, and how threads may be
41829          terminated.  However, objects with thread storage duration
41830          shall be initialized before thread startup.
41831
41832   * `6.2.4  Storage durations of objects'
41833
41834     Add new text before paragraph 3
41835
41836          An object whose identifier is declared with the storage-class
41837          specifier `__thread' has "thread storage duration".  Its
41838          lifetime is the entire execution of the thread, and its
41839          stored value is initialized only once, prior to thread
41840          startup.
41841
41842   * `6.4.1  Keywords'
41843
41844     Add `__thread'.
41845
41846   * `6.7.1  Storage-class specifiers'
41847
41848     Add `__thread' to the list of storage class specifiers in
41849     paragraph 1.
41850
41851     Change paragraph 2 to
41852
41853          With the exception of `__thread', at most one storage-class
41854          specifier may be given [...].  The `__thread' specifier may
41855          be used alone, or immediately following `extern' or `static'.
41856
41857     Add new text after paragraph 6
41858
41859          The declaration of an identifier for a variable that has
41860          block scope that specifies `__thread' shall also specify
41861          either `extern' or `static'.
41862
41863          The `__thread' specifier shall be used only with variables.
41864
41865
41866File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
41867
418686.62.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
41869--------------------------------------------------------
41870
41871The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
41872that document the exact semantics of the language extension.
41873
41874   * [intro.execution]
41875
41876     New text after paragraph 4
41877
41878          A "thread" is a flow of control within the abstract machine.
41879          It is implementation defined whether or not there may be more
41880          than one thread.
41881
41882     New text after paragraph 7
41883
41884          It is unspecified whether additional action must be taken to
41885          ensure when and whether side effects are visible to other
41886          threads.
41887
41888   * [lex.key]
41889
41890     Add `__thread'.
41891
41892   * [basic.start.main]
41893
41894     Add after paragraph 5
41895
41896          The thread that begins execution at the `main' function is
41897          called the "main thread".  It is implementation defined how
41898          functions beginning threads other than the main thread are
41899          designated or typed.  A function so designated, as well as
41900          the `main' function, is called a "thread startup function".
41901          It is implementation defined what happens if a thread startup
41902          function returns.  It is implementation defined what happens
41903          to other threads when any thread calls `exit'.
41904
41905   * [basic.start.init]
41906
41907     Add after paragraph 4
41908
41909          The storage for an object of thread storage duration shall be
41910          statically initialized before the first statement of the
41911          thread startup function.  An object of thread storage
41912          duration shall not require dynamic initialization.
41913
41914   * [basic.start.term]
41915
41916     Add after paragraph 3
41917
41918          The type of an object with thread storage duration shall not
41919          have a non-trivial destructor, nor shall it be an array type
41920          whose elements (directly or indirectly) have non-trivial
41921          destructors.
41922
41923   * [basic.stc]
41924
41925     Add "thread storage duration" to the list in paragraph 1.
41926
41927     Change paragraph 2
41928
41929          Thread, static, and automatic storage durations are
41930          associated with objects introduced by declarations [...].
41931
41932     Add `__thread' to the list of specifiers in paragraph 3.
41933
41934   * [basic.stc.thread]
41935
41936     New section before [basic.stc.static]
41937
41938          The keyword `__thread' applied to a non-local object gives the
41939          object thread storage duration.
41940
41941          A local variable or class data member declared both `static'
41942          and `__thread' gives the variable or member thread storage
41943          duration.
41944
41945   * [basic.stc.static]
41946
41947     Change paragraph 1
41948
41949          All objects that have neither thread storage duration, dynamic
41950          storage duration nor are local [...].
41951
41952   * [dcl.stc]
41953
41954     Add `__thread' to the list in paragraph 1.
41955
41956     Change paragraph 1
41957
41958          With the exception of `__thread', at most one
41959          STORAGE-CLASS-SPECIFIER shall appear in a given
41960          DECL-SPECIFIER-SEQ.  The `__thread' specifier may be used
41961          alone, or immediately following the `extern' or `static'
41962          specifiers.  [...]
41963
41964     Add after paragraph 5
41965
41966          The `__thread' specifier can be applied only to the names of
41967          objects and to anonymous unions.
41968
41969   * [class.mem]
41970
41971     Add after paragraph 6
41972
41973          Non-`static' members shall not be `__thread'.
41974
41975
41976File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
41977
419786.63 Binary Constants using the `0b' Prefix
41979===========================================
41980
41981Integer constants can be written as binary constants, consisting of a
41982sequence of `0' and `1' digits, prefixed by `0b' or `0B'.  This is
41983particularly useful in environments that operate a lot on the bit level
41984(like microcontrollers).
41985
41986 The following statements are identical:
41987
41988     i =       42;
41989     i =     0x2a;
41990     i =      052;
41991     i = 0b101010;
41992
41993 The type of these constants follows the same rules as for octal or
41994hexadecimal integer constants, so suffixes like `L' or `UL' can be
41995applied.
41996
41997
41998File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
41999
420007 Extensions to the C++ Language
42001********************************
42002
42003The GNU compiler provides these extensions to the C++ language (and you
42004can also use most of the C language extensions in your C++ programs).
42005If you want to write code that checks whether these features are
42006available, you can test for the GNU compiler the same way as for C
42007programs: check for a predefined macro `__GNUC__'.  You can also use
42008`__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
42009(cpp)Common Predefined Macros.).
42010
42011* Menu:
42012
42013* C++ Volatiles::       What constitutes an access to a volatile object.
42014* Restricted Pointers:: C99 restricted pointers and references.
42015* Vague Linkage::       Where G++ puts inlines, vtables and such.
42016* C++ Interface::       You can use a single C++ header file for both
42017                        declarations and definitions.
42018* Template Instantiation:: Methods for ensuring that exactly one copy of
42019                        each needed template instantiation is emitted.
42020* Bound member functions:: You can extract a function pointer to the
42021                        method denoted by a `->*' or `.*' expression.
42022* C++ Attributes::      Variable, function, and type attributes for C++ only.
42023* Function Multiversioning::   Declaring multiple function versions.
42024* Namespace Association:: Strong using-directives for namespace association.
42025* Type Traits::         Compiler support for type traits
42026* Java Exceptions::     Tweaking exception handling to work with Java.
42027* Deprecated Features:: Things will disappear from G++.
42028* Backwards Compatibility:: Compatibilities with earlier definitions of C++.
42029
42030
42031File: gcc.info,  Node: C++ Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
42032
420337.1 When is a Volatile C++ Object Accessed?
42034===========================================
42035
42036The C++ standard differs from the C standard in its treatment of
42037volatile objects.  It fails to specify what constitutes a volatile
42038access, except to say that C++ should behave in a similar manner to C
42039with respect to volatiles, where possible.  However, the different
42040lvalueness of expressions between C and C++ complicate the behavior.
42041G++ behaves the same as GCC for volatile access, *Note Volatiles: C
42042Extensions, for a description of GCC's behavior.
42043
42044 The C and C++ language specifications differ when an object is
42045accessed in a void context:
42046
42047     volatile int *src = SOMEVALUE;
42048     *src;
42049
42050 The C++ standard specifies that such expressions do not undergo lvalue
42051to rvalue conversion, and that the type of the dereferenced object may
42052be incomplete.  The C++ standard does not specify explicitly that it is
42053lvalue to rvalue conversion that is responsible for causing an access.
42054There is reason to believe that it is, because otherwise certain simple
42055expressions become undefined.  However, because it would surprise most
42056programmers, G++ treats dereferencing a pointer to volatile object of
42057complete type as GCC would do for an equivalent type in C.  When the
42058object has incomplete type, G++ issues a warning; if you wish to force
42059an error, you must force a conversion to rvalue with, for instance, a
42060static cast.
42061
42062 When using a reference to volatile, G++ does not treat equivalent
42063expressions as accesses to volatiles, but instead issues a warning that
42064no volatile is accessed.  The rationale for this is that otherwise it
42065becomes difficult to determine where volatile access occur, and not
42066possible to ignore the return value from functions returning volatile
42067references.  Again, if you wish to force a read, cast the reference to
42068an rvalue.
42069
42070 G++ implements the same behavior as GCC does when assigning to a
42071volatile object--there is no reread of the assigned-to object, the
42072assigned rvalue is reused.  Note that in C++ assignment expressions are
42073lvalues, and if used as an lvalue, the volatile object is referred to.
42074For instance, VREF refers to VOBJ, as expected, in the following
42075example:
42076
42077     volatile int vobj;
42078     volatile int &vref = vobj = SOMETHING;
42079
42080
42081File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: C++ Volatiles,  Up: C++ Extensions
42082
420837.2 Restricting Pointer Aliasing
42084================================
42085
42086As with the C front end, G++ understands the C99 feature of restricted
42087pointers, specified with the `__restrict__', or `__restrict' type
42088qualifier.  Because you cannot compile C++ by specifying the `-std=c99'
42089language flag, `restrict' is not a keyword in C++.
42090
42091 In addition to allowing restricted pointers, you can specify restricted
42092references, which indicate that the reference is not aliased in the
42093local context.
42094
42095     void fn (int *__restrict__ rptr, int &__restrict__ rref)
42096     {
42097       /* ... */
42098     }
42099
42100In the body of `fn', RPTR points to an unaliased integer and RREF
42101refers to a (different) unaliased integer.
42102
42103 You may also specify whether a member function's THIS pointer is
42104unaliased by using `__restrict__' as a member function qualifier.
42105
42106     void T::fn () __restrict__
42107     {
42108       /* ... */
42109     }
42110
42111Within the body of `T::fn', THIS has the effective definition `T
42112*__restrict__ const this'.  Notice that the interpretation of a
42113`__restrict__' member function qualifier is different to that of
42114`const' or `volatile' qualifier, in that it is applied to the pointer
42115rather than the object.  This is consistent with other compilers that
42116implement restricted pointers.
42117
42118 As with all outermost parameter qualifiers, `__restrict__' is ignored
42119in function definition matching.  This means you only need to specify
42120`__restrict__' in a function definition, rather than in a function
42121prototype as well.
42122
42123
42124File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
42125
421267.3 Vague Linkage
42127=================
42128
42129There are several constructs in C++ that require space in the object
42130file but are not clearly tied to a single translation unit.  We say that
42131these constructs have "vague linkage".  Typically such constructs are
42132emitted wherever they are needed, though sometimes we can be more
42133clever.
42134
42135Inline Functions
42136     Inline functions are typically defined in a header file which can
42137     be included in many different compilations.  Hopefully they can
42138     usually be inlined, but sometimes an out-of-line copy is
42139     necessary, if the address of the function is taken or if inlining
42140     fails.  In general, we emit an out-of-line copy in all translation
42141     units where one is needed.  As an exception, we only emit inline
42142     virtual functions with the vtable, since it always requires a copy.
42143
42144     Local static variables and string constants used in an inline
42145     function are also considered to have vague linkage, since they
42146     must be shared between all inlined and out-of-line instances of
42147     the function.
42148
42149VTables
42150     C++ virtual functions are implemented in most compilers using a
42151     lookup table, known as a vtable.  The vtable contains pointers to
42152     the virtual functions provided by a class, and each object of the
42153     class contains a pointer to its vtable (or vtables, in some
42154     multiple-inheritance situations).  If the class declares any
42155     non-inline, non-pure virtual functions, the first one is chosen as
42156     the "key method" for the class, and the vtable is only emitted in
42157     the translation unit where the key method is defined.
42158
42159     _Note:_ If the chosen key method is later defined as inline, the
42160     vtable is still emitted in every translation unit that defines it.
42161     Make sure that any inline virtuals are declared inline in the class
42162     body, even if they are not defined there.
42163
42164`type_info' objects
42165     C++ requires information about types to be written out in order to
42166     implement `dynamic_cast', `typeid' and exception handling.  For
42167     polymorphic classes (classes with virtual functions), the
42168     `type_info' object is written out along with the vtable so that
42169     `dynamic_cast' can determine the dynamic type of a class object at
42170     run time.  For all other types, we write out the `type_info'
42171     object when it is used: when applying `typeid' to an expression,
42172     throwing an object, or referring to a type in a catch clause or
42173     exception specification.
42174
42175Template Instantiations
42176     Most everything in this section also applies to template
42177     instantiations, but there are other options as well.  *Note
42178     Where's the Template?: Template Instantiation.
42179
42180
42181 When used with GNU ld version 2.8 or later on an ELF system such as
42182GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
42183these constructs will be discarded at link time.  This is known as
42184COMDAT support.
42185
42186 On targets that don't support COMDAT, but do support weak symbols, GCC
42187uses them.  This way one copy overrides all the others, but the unused
42188copies still take up space in the executable.
42189
42190 For targets that do not support either COMDAT or weak symbols, most
42191entities with vague linkage are emitted as local symbols to avoid
42192duplicate definition errors from the linker.  This does not happen for
42193local statics in inlines, however, as having multiple copies almost
42194certainly breaks things.
42195
42196 *Note Declarations and Definitions in One Header: C++ Interface, for
42197another way to control placement of these constructs.
42198
42199
42200File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
42201
422027.4 C++ Interface and Implementation Pragmas
42203============================================
42204
42205`#pragma interface' and `#pragma implementation' provide the user with
42206a way of explicitly directing the compiler to emit entities with vague
42207linkage (and debugging information) in a particular translation unit.
42208
42209 _Note:_ These `#pragma's have been superceded as of GCC 2.7.2 by
42210COMDAT support and the "key method" heuristic mentioned in *note Vague
42211Linkage::.  Using them can actually cause your program to grow due to
42212unnecessary out-of-line copies of inline functions.
42213
42214`#pragma interface'
42215`#pragma interface "SUBDIR/OBJECTS.h"'
42216     Use this directive in _header files_ that define object classes,
42217     to save space in most of the object files that use those classes.
42218     Normally, local copies of certain information (backup copies of
42219     inline member functions, debugging information, and the internal
42220     tables that implement virtual functions) must be kept in each
42221     object file that includes class definitions.  You can use this
42222     pragma to avoid such duplication.  When a header file containing
42223     `#pragma interface' is included in a compilation, this auxiliary
42224     information is not generated (unless the main input source file
42225     itself uses `#pragma implementation').  Instead, the object files
42226     contain references to be resolved at link time.
42227
42228     The second form of this directive is useful for the case where you
42229     have multiple headers with the same name in different directories.
42230     If you use this form, you must specify the same string to `#pragma
42231     implementation'.
42232
42233`#pragma implementation'
42234`#pragma implementation "OBJECTS.h"'
42235     Use this pragma in a _main input file_, when you want full output
42236     from included header files to be generated (and made globally
42237     visible).  The included header file, in turn, should use `#pragma
42238     interface'.  Backup copies of inline member functions, debugging
42239     information, and the internal tables used to implement virtual
42240     functions are all generated in implementation files.
42241
42242     If you use `#pragma implementation' with no argument, it applies to
42243     an include file with the same basename(1) as your source file.
42244     For example, in `allclass.cc', giving just `#pragma implementation'
42245     by itself is equivalent to `#pragma implementation "allclass.h"'.
42246
42247     Use the string argument if you want a single implementation file to
42248     include code from multiple header files.  (You must also use
42249     `#include' to include the header file; `#pragma implementation'
42250     only specifies how to use the file--it doesn't actually include
42251     it.)
42252
42253     There is no way to split up the contents of a single header file
42254     into multiple implementation files.
42255
42256 `#pragma implementation' and `#pragma interface' also have an effect
42257on function inlining.
42258
42259 If you define a class in a header file marked with `#pragma
42260interface', the effect on an inline function defined in that class is
42261similar to an explicit `extern' declaration--the compiler emits no code
42262at all to define an independent version of the function.  Its
42263definition is used only for inlining with its callers.
42264
42265 Conversely, when you include the same header file in a main source file
42266that declares it as `#pragma implementation', the compiler emits code
42267for the function itself; this defines a version of the function that
42268can be found via pointers (or by callers compiled without inlining).
42269If all calls to the function can be inlined, you can avoid emitting the
42270function by compiling with `-fno-implement-inlines'.  If any calls are
42271not inlined, you will get linker errors.
42272
42273 ---------- Footnotes ----------
42274
42275 (1) A file's "basename" is the name stripped of all leading path
42276information and of trailing suffixes, such as `.h' or `.C' or `.cc'.
42277
42278
42279File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
42280
422817.5 Where's the Template?
42282=========================
42283
42284C++ templates are the first language feature to require more
42285intelligence from the environment than one usually finds on a UNIX
42286system.  Somehow the compiler and linker have to make sure that each
42287template instance occurs exactly once in the executable if it is needed,
42288and not at all otherwise.  There are two basic approaches to this
42289problem, which are referred to as the Borland model and the Cfront
42290model.
42291
42292Borland model
42293     Borland C++ solved the template instantiation problem by adding
42294     the code equivalent of common blocks to their linker; the compiler
42295     emits template instances in each translation unit that uses them,
42296     and the linker collapses them together.  The advantage of this
42297     model is that the linker only has to consider the object files
42298     themselves; there is no external complexity to worry about.  This
42299     disadvantage is that compilation time is increased because the
42300     template code is being compiled repeatedly.  Code written for this
42301     model tends to include definitions of all templates in the header
42302     file, since they must be seen to be instantiated.
42303
42304Cfront model
42305     The AT&T C++ translator, Cfront, solved the template instantiation
42306     problem by creating the notion of a template repository, an
42307     automatically maintained place where template instances are
42308     stored.  A more modern version of the repository works as follows:
42309     As individual object files are built, the compiler places any
42310     template definitions and instantiations encountered in the
42311     repository.  At link time, the link wrapper adds in the objects in
42312     the repository and compiles any needed instances that were not
42313     previously emitted.  The advantages of this model are more optimal
42314     compilation speed and the ability to use the system linker; to
42315     implement the Borland model a compiler vendor also needs to
42316     replace the linker.  The disadvantages are vastly increased
42317     complexity, and thus potential for error; for some code this can be
42318     just as transparent, but in practice it can been very difficult to
42319     build multiple programs in one directory and one program in
42320     multiple directories.  Code written for this model tends to
42321     separate definitions of non-inline member templates into a
42322     separate file, which should be compiled separately.
42323
42324 When used with GNU ld version 2.8 or later on an ELF system such as
42325GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
42326Borland model.  On other systems, G++ implements neither automatic
42327model.
42328
42329 You have the following options for dealing with template
42330instantiations:
42331
42332  1. Compile your template-using code with `-frepo'.  The compiler
42333     generates files with the extension `.rpo' listing all of the
42334     template instantiations used in the corresponding object files that
42335     could be instantiated there; the link wrapper, `collect2', then
42336     updates the `.rpo' files to tell the compiler where to place those
42337     instantiations and rebuild any affected object files.  The
42338     link-time overhead is negligible after the first pass, as the
42339     compiler continues to place the instantiations in the same files.
42340
42341     This is your best option for application code written for the
42342     Borland model, as it just works.  Code written for the Cfront model
42343     needs to be modified so that the template definitions are
42344     available at one or more points of instantiation; usually this is
42345     as simple as adding `#include <tmethods.cc>' to the end of each
42346     template header.
42347
42348     For library code, if you want the library to provide all of the
42349     template instantiations it needs, just try to link all of its
42350     object files together; the link will fail, but cause the
42351     instantiations to be generated as a side effect.  Be warned,
42352     however, that this may cause conflicts if multiple libraries try
42353     to provide the same instantiations.  For greater control, use
42354     explicit instantiation as described in the next option.
42355
42356  2. Compile your code with `-fno-implicit-templates' to disable the
42357     implicit generation of template instances, and explicitly
42358     instantiate all the ones you use.  This approach requires more
42359     knowledge of exactly which instances you need than do the others,
42360     but it's less mysterious and allows greater control.  You can
42361     scatter the explicit instantiations throughout your program,
42362     perhaps putting them in the translation units where the instances
42363     are used or the translation units that define the templates
42364     themselves; you can put all of the explicit instantiations you
42365     need into one big file; or you can create small files like
42366
42367          #include "Foo.h"
42368          #include "Foo.cc"
42369
42370          template class Foo<int>;
42371          template ostream& operator <<
42372                          (ostream&, const Foo<int>&);
42373
42374     for each of the instances you need, and create a template
42375     instantiation library from those.
42376
42377     If you are using Cfront-model code, you can probably get away with
42378     not using `-fno-implicit-templates' when compiling files that don't
42379     `#include' the member template definitions.
42380
42381     If you use one big file to do the instantiations, you may want to
42382     compile it without `-fno-implicit-templates' so you get all of the
42383     instances required by your explicit instantiations (but not by any
42384     other files) without having to specify them as well.
42385
42386     The ISO C++ 2011 standard allows forward declaration of explicit
42387     instantiations (with `extern'). G++ supports explicit instantiation
42388     declarations in C++98 mode and has extended the template
42389     instantiation syntax to support instantiation of the compiler
42390     support data for a template class (i.e. the vtable) without
42391     instantiating any of its members (with `inline'), and
42392     instantiation of only the static data members of a template class,
42393     without the support data or member functions (with `static'):
42394
42395          extern template int max (int, int);
42396          inline template class Foo<int>;
42397          static template class Foo<int>;
42398
42399  3. Do nothing.  Pretend G++ does implement automatic instantiation
42400     management.  Code written for the Borland model works fine, but
42401     each translation unit contains instances of each of the templates
42402     it uses.  In a large program, this can lead to an unacceptable
42403     amount of code duplication.
42404
42405
42406File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
42407
424087.6 Extracting the Function Pointer from a Bound Pointer to Member Function
42409===========================================================================
42410
42411In C++, pointer to member functions (PMFs) are implemented using a wide
42412pointer of sorts to handle all the possible call mechanisms; the PMF
42413needs to store information about how to adjust the `this' pointer, and
42414if the function pointed to is virtual, where to find the vtable, and
42415where in the vtable to look for the member function.  If you are using
42416PMFs in an inner loop, you should really reconsider that decision.  If
42417that is not an option, you can extract the pointer to the function that
42418would be called for a given object/PMF pair and call it directly inside
42419the inner loop, to save a bit of time.
42420
42421 Note that you still pay the penalty for the call through a function
42422pointer; on most modern architectures, such a call defeats the branch
42423prediction features of the CPU.  This is also true of normal virtual
42424function calls.
42425
42426 The syntax for this extension is
42427
42428     extern A a;
42429     extern int (A::*fp)();
42430     typedef int (*fptr)(A *);
42431
42432     fptr p = (fptr)(a.*fp);
42433
42434 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no
42435object is needed to obtain the address of the function.  They can be
42436converted to function pointers directly:
42437
42438     fptr p1 = (fptr)(&A::foo);
42439
42440 You must specify `-Wno-pmf-conversions' to use this extension.
42441
42442
42443File: gcc.info,  Node: C++ Attributes,  Next: Function Multiversioning,  Prev: Bound member functions,  Up: C++ Extensions
42444
424457.7 C++-Specific Variable, Function, and Type Attributes
42446========================================================
42447
42448Some attributes only make sense for C++ programs.
42449
42450`abi_tag ("TAG", ...)'
42451     The `abi_tag' attribute can be applied to a function, variable, or
42452     class declaration.  It modifies the mangled name of the entity to
42453     incorporate the tag name, in order to distinguish the function or
42454     class from an earlier version with a different ABI; perhaps the
42455     class has changed size, or the function has a different return
42456     type that is not encoded in the mangled name.
42457
42458     The attribute can also be applied to an inline namespace, but does
42459     not affect the mangled name of the namespace; in this case it is
42460     only used for `-Wabi-tag' warnings and automatic tagging of
42461     functions and variables.  Tagging inline namespaces is generally
42462     preferable to tagging individual declarations, but the latter is
42463     sometimes necessary, such as when only certain members of a class
42464     need to be tagged.
42465
42466     The argument can be a list of strings of arbitrary length.  The
42467     strings are sorted on output, so the order of the list is
42468     unimportant.
42469
42470     A redeclaration of an entity must not add new ABI tags, since
42471     doing so would change the mangled name.
42472
42473     The ABI tags apply to a name, so all instantiations and
42474     specializations of a template have the same tags.  The attribute
42475     will be ignored if applied to an explicit specialization or
42476     instantiation.
42477
42478     The `-Wabi-tag' flag enables a warning about a class which does
42479     not have all the ABI tags used by its subobjects and virtual
42480     functions; for users with code that needs to coexist with an
42481     earlier ABI, using this option can help to find all affected types
42482     that need to be tagged.
42483
42484     When a type involving an ABI tag is used as the type of a variable
42485     or return type of a function where that tag is not already present
42486     in the signature of the function, the tag is automatically applied
42487     to the variable or function.  `-Wabi-tag' also warns about this
42488     situation; this warning can be avoided by explicitly tagging the
42489     variable or function or moving it into a tagged inline namespace.
42490
42491`init_priority (PRIORITY)'
42492     In Standard C++, objects defined at namespace scope are guaranteed
42493     to be initialized in an order in strict accordance with that of
42494     their definitions _in a given translation unit_.  No guarantee is
42495     made for initializations across translation units.  However, GNU
42496     C++ allows users to control the order of initialization of objects
42497     defined at namespace scope with the `init_priority' attribute by
42498     specifying a relative PRIORITY, a constant integral expression
42499     currently bounded between 101 and 65535 inclusive.  Lower numbers
42500     indicate a higher priority.
42501
42502     In the following example, `A' would normally be created before
42503     `B', but the `init_priority' attribute reverses that order:
42504
42505          Some_Class  A  __attribute__ ((init_priority (2000)));
42506          Some_Class  B  __attribute__ ((init_priority (543)));
42507
42508     Note that the particular values of PRIORITY do not matter; only
42509     their relative ordering.
42510
42511`java_interface'
42512     This type attribute informs C++ that the class is a Java
42513     interface.  It may only be applied to classes declared within an
42514     `extern "Java"' block.  Calls to methods declared in this
42515     interface are dispatched using GCJ's interface table mechanism,
42516     instead of regular virtual table dispatch.
42517
42518`warn_unused'
42519     For C++ types with non-trivial constructors and/or destructors it
42520     is impossible for the compiler to determine whether a variable of
42521     this type is truly unused if it is not referenced. This type
42522     attribute informs the compiler that variables of this type should
42523     be warned about if they appear to be unused, just like variables
42524     of fundamental types.
42525
42526     This attribute is appropriate for types which just represent a
42527     value, such as `std::string'; it is not appropriate for types which
42528     control a resource, such as `std::mutex'.
42529
42530     This attribute is also accepted in C, but it is unnecessary
42531     because C does not have constructors or destructors.
42532
42533
42534 See also *note Namespace Association::.
42535
42536
42537File: gcc.info,  Node: Function Multiversioning,  Next: Namespace Association,  Prev: C++ Attributes,  Up: C++ Extensions
42538
425397.8 Function Multiversioning
42540============================
42541
42542With the GNU C++ front end, for x86 targets, you may specify multiple
42543versions of a function, where each function is specialized for a
42544specific target feature.  At runtime, the appropriate version of the
42545function is automatically executed depending on the characteristics of
42546the execution platform.  Here is an example.
42547
42548     __attribute__ ((target ("default")))
42549     int foo ()
42550     {
42551       // The default version of foo.
42552       return 0;
42553     }
42554
42555     __attribute__ ((target ("sse4.2")))
42556     int foo ()
42557     {
42558       // foo version for SSE4.2
42559       return 1;
42560     }
42561
42562     __attribute__ ((target ("arch=atom")))
42563     int foo ()
42564     {
42565       // foo version for the Intel ATOM processor
42566       return 2;
42567     }
42568
42569     __attribute__ ((target ("arch=amdfam10")))
42570     int foo ()
42571     {
42572       // foo version for the AMD Family 0x10 processors.
42573       return 3;
42574     }
42575
42576     int main ()
42577     {
42578       int (*p)() = &foo;
42579       assert ((*p) () == foo ());
42580       return 0;
42581     }
42582
42583 In the above example, four versions of function foo are created. The
42584first version of foo with the target attribute "default" is the default
42585version.  This version gets executed when no other target specific
42586version qualifies for execution on a particular platform. A new version
42587of foo is created by using the same function signature but with a
42588different target string.  Function foo is called or a pointer to it is
42589taken just like a regular function.  GCC takes care of doing the
42590dispatching to call the right version at runtime.  Refer to the GCC
42591wiki on Function Multiversioning
42592(http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details.
42593
42594
42595File: gcc.info,  Node: Namespace Association,  Next: Type Traits,  Prev: Function Multiversioning,  Up: C++ Extensions
42596
425977.9 Namespace Association
42598=========================
42599
42600*Caution:* The semantics of this extension are equivalent to C++ 2011
42601inline namespaces.  Users should use inline namespaces instead as this
42602extension will be removed in future versions of G++.
42603
42604 A using-directive with `__attribute ((strong))' is stronger than a
42605normal using-directive in two ways:
42606
42607   * Templates from the used namespace can be specialized and explicitly
42608     instantiated as though they were members of the using namespace.
42609
42610   * The using namespace is considered an associated namespace of all
42611     templates in the used namespace for purposes of argument-dependent
42612     name lookup.
42613
42614 The used namespace must be nested within the using namespace so that
42615normal unqualified lookup works properly.
42616
42617 This is useful for composing a namespace transparently from
42618implementation namespaces.  For example:
42619
42620     namespace std {
42621       namespace debug {
42622         template <class T> struct A { };
42623       }
42624       using namespace debug __attribute ((__strong__));
42625       template <> struct A<int> { };   // OK to specialize
42626
42627       template <class T> void f (A<T>);
42628     }
42629
42630     int main()
42631     {
42632       f (std::A<float>());             // lookup finds std::f
42633       f (std::A<int>());
42634     }
42635
42636
42637File: gcc.info,  Node: Type Traits,  Next: Java Exceptions,  Prev: Namespace Association,  Up: C++ Extensions
42638
426397.10 Type Traits
42640================
42641
42642The C++ front end implements syntactic extensions that allow
42643compile-time determination of various characteristics of a type (or of a
42644pair of types).
42645
42646`__has_nothrow_assign (type)'
42647     If `type' is const qualified or is a reference type then the trait
42648     is false.  Otherwise if `__has_trivial_assign (type)' is true then
42649     the trait is true, else if `type' is a cv class or union type with
42650     copy assignment operators that are known not to throw an exception
42651     then the trait is true, else it is false.  Requires: `type' shall
42652     be a complete type, (possibly cv-qualified) `void', or an array of
42653     unknown bound.
42654
42655`__has_nothrow_copy (type)'
42656     If `__has_trivial_copy (type)' is true then the trait is true,
42657     else if `type' is a cv class or union type with copy constructors
42658     that are known not to throw an exception then the trait is true,
42659     else it is false.  Requires: `type' shall be a complete type,
42660     (possibly cv-qualified) `void', or an array of unknown bound.
42661
42662`__has_nothrow_constructor (type)'
42663     If `__has_trivial_constructor (type)' is true then the trait is
42664     true, else if `type' is a cv class or union type (or array
42665     thereof) with a default constructor that is known not to throw an
42666     exception then the trait is true, else it is false.  Requires:
42667     `type' shall be a complete type, (possibly cv-qualified) `void',
42668     or an array of unknown bound.
42669
42670`__has_trivial_assign (type)'
42671     If `type' is const qualified or is a reference type then the trait
42672     is false.  Otherwise if `__is_pod (type)' is true then the trait is
42673     true, else if `type' is a cv class or union type with a trivial
42674     copy assignment ([class.copy]) then the trait is true, else it is
42675     false.  Requires: `type' shall be a complete type, (possibly
42676     cv-qualified) `void', or an array of unknown bound.
42677
42678`__has_trivial_copy (type)'
42679     If `__is_pod (type)' is true or `type' is a reference type then
42680     the trait is true, else if `type' is a cv class or union type with
42681     a trivial copy constructor ([class.copy]) then the trait is true,
42682     else it is false.  Requires: `type' shall be a complete type,
42683     (possibly cv-qualified) `void', or an array of unknown bound.
42684
42685`__has_trivial_constructor (type)'
42686     If `__is_pod (type)' is true then the trait is true, else if
42687     `type' is a cv class or union type (or array thereof) with a
42688     trivial default constructor ([class.ctor]) then the trait is true,
42689     else it is false.  Requires: `type' shall be a complete type,
42690     (possibly cv-qualified) `void', or an array of unknown bound.
42691
42692`__has_trivial_destructor (type)'
42693     If `__is_pod (type)' is true or `type' is a reference type then
42694     the trait is true, else if `type' is a cv class or union type (or
42695     array thereof) with a trivial destructor ([class.dtor]) then the
42696     trait is true, else it is false.  Requires: `type' shall be a
42697     complete type, (possibly cv-qualified) `void', or an array of
42698     unknown bound.
42699
42700`__has_virtual_destructor (type)'
42701     If `type' is a class type with a virtual destructor ([class.dtor])
42702     then the trait is true, else it is false.  Requires: `type' shall
42703     be a complete type, (possibly cv-qualified) `void', or an array of
42704     unknown bound.
42705
42706`__is_abstract (type)'
42707     If `type' is an abstract class ([class.abstract]) then the trait
42708     is true, else it is false.  Requires: `type' shall be a complete
42709     type, (possibly cv-qualified) `void', or an array of unknown bound.
42710
42711`__is_base_of (base_type, derived_type)'
42712     If `base_type' is a base class of `derived_type' ([class.derived])
42713     then the trait is true, otherwise it is false.  Top-level cv
42714     qualifications of `base_type' and `derived_type' are ignored.  For
42715     the purposes of this trait, a class type is considered is own
42716     base.  Requires: if `__is_class (base_type)' and `__is_class
42717     (derived_type)' are true and `base_type' and `derived_type' are
42718     not the same type (disregarding cv-qualifiers), `derived_type'
42719     shall be a complete type.  Diagnostic is produced if this
42720     requirement is not met.
42721
42722`__is_class (type)'
42723     If `type' is a cv class type, and not a union type
42724     ([basic.compound]) the trait is true, else it is false.
42725
42726`__is_empty (type)'
42727     If `__is_class (type)' is false then the trait is false.
42728     Otherwise `type' is considered empty if and only if: `type' has no
42729     non-static data members, or all non-static data members, if any,
42730     are bit-fields of length 0, and `type' has no virtual members, and
42731     `type' has no virtual base classes, and `type' has no base classes
42732     `base_type' for which `__is_empty (base_type)' is false.
42733     Requires: `type' shall be a complete type, (possibly cv-qualified)
42734     `void', or an array of unknown bound.
42735
42736`__is_enum (type)'
42737     If `type' is a cv enumeration type ([basic.compound]) the trait is
42738     true, else it is false.
42739
42740`__is_literal_type (type)'
42741     If `type' is a literal type ([basic.types]) the trait is true,
42742     else it is false.  Requires: `type' shall be a complete type,
42743     (possibly cv-qualified) `void', or an array of unknown bound.
42744
42745`__is_pod (type)'
42746     If `type' is a cv POD type ([basic.types]) then the trait is true,
42747     else it is false.  Requires: `type' shall be a complete type,
42748     (possibly cv-qualified) `void', or an array of unknown bound.
42749
42750`__is_polymorphic (type)'
42751     If `type' is a polymorphic class ([class.virtual]) then the trait
42752     is true, else it is false.  Requires: `type' shall be a complete
42753     type, (possibly cv-qualified) `void', or an array of unknown bound.
42754
42755`__is_standard_layout (type)'
42756     If `type' is a standard-layout type ([basic.types]) the trait is
42757     true, else it is false.  Requires: `type' shall be a complete
42758     type, (possibly cv-qualified) `void', or an array of unknown bound.
42759
42760`__is_trivial (type)'
42761     If `type' is a trivial type ([basic.types]) the trait is true,
42762     else it is false.  Requires: `type' shall be a complete type,
42763     (possibly cv-qualified) `void', or an array of unknown bound.
42764
42765`__is_union (type)'
42766     If `type' is a cv union type ([basic.compound]) the trait is true,
42767     else it is false.
42768
42769`__underlying_type (type)'
42770     The underlying type of `type'.  Requires: `type' shall be an
42771     enumeration type ([dcl.enum]).
42772
42773
42774
42775File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
42776
427777.11 Java Exceptions
42778====================
42779
42780The Java language uses a slightly different exception handling model
42781from C++.  Normally, GNU C++ automatically detects when you are writing
42782C++ code that uses Java exceptions, and handle them appropriately.
42783However, if C++ code only needs to execute destructors when Java
42784exceptions are thrown through it, GCC guesses incorrectly.  Sample
42785problematic code is:
42786
42787       struct S { ~S(); };
42788       extern void bar();    // is written in Java, and may throw exceptions
42789       void foo()
42790       {
42791         S s;
42792         bar();
42793       }
42794
42795The usual effect of an incorrect guess is a link failure, complaining of
42796a missing routine called `__gxx_personality_v0'.
42797
42798 You can inform the compiler that Java exceptions are to be used in a
42799translation unit, irrespective of what it might think, by writing
42800`#pragma GCC java_exceptions' at the head of the file.  This `#pragma'
42801must appear before any functions that throw or catch exceptions, or run
42802destructors when exceptions are thrown through them.
42803
42804 You cannot mix Java and C++ exceptions in the same translation unit.
42805It is believed to be safe to throw a C++ exception from one file through
42806another file compiled for the Java exception model, or vice versa, but
42807there may be bugs in this area.
42808
42809
42810File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions
42811
428127.12 Deprecated Features
42813========================
42814
42815In the past, the GNU C++ compiler was extended to experiment with new
42816features, at a time when the C++ language was still evolving.  Now that
42817the C++ standard is complete, some of those features are superseded by
42818superior alternatives.  Using the old features might cause a warning in
42819some cases that the feature will be dropped in the future.  In other
42820cases, the feature might be gone already.
42821
42822 While the list below is not exhaustive, it documents some of the
42823options that are now deprecated:
42824
42825`-fexternal-templates'
42826`-falt-external-templates'
42827     These are two of the many ways for G++ to implement template
42828     instantiation.  *Note Template Instantiation::.  The C++ standard
42829     clearly defines how template definitions have to be organized
42830     across implementation units.  G++ has an implicit instantiation
42831     mechanism that should work just fine for standard-conforming code.
42832
42833`-fstrict-prototype'
42834`-fno-strict-prototype'
42835     Previously it was possible to use an empty prototype parameter
42836     list to indicate an unspecified number of parameters (like C),
42837     rather than no parameters, as C++ demands.  This feature has been
42838     removed, except where it is required for backwards compatibility.
42839     *Note Backwards Compatibility::.
42840
42841 G++ allows a virtual function returning `void *' to be overridden by
42842one returning a different pointer type.  This extension to the
42843covariant return type rules is now deprecated and will be removed from a
42844future version.
42845
42846 The G++ minimum and maximum operators (`<?' and `>?') and their
42847compound forms (`<?=') and `>?=') have been deprecated and are now
42848removed from G++.  Code using these operators should be modified to use
42849`std::min' and `std::max' instead.
42850
42851 The named return value extension has been deprecated, and is now
42852removed from G++.
42853
42854 The use of initializer lists with new expressions has been deprecated,
42855and is now removed from G++.
42856
42857 Floating and complex non-type template parameters have been deprecated,
42858and are now removed from G++.
42859
42860 The implicit typename extension has been deprecated and is now removed
42861from G++.
42862
42863 The use of default arguments in function pointers, function typedefs
42864and other places where they are not permitted by the standard is
42865deprecated and will be removed from a future version of G++.
42866
42867 G++ allows floating-point literals to appear in integral constant
42868expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is
42869deprecated and will be removed from a future version.
42870
42871 G++ allows static data members of const floating-point type to be
42872declared with an initializer in a class definition. The standard only
42873allows initializers for static members of const integral types and const
42874enumeration types so this extension has been deprecated and will be
42875removed from a future version.
42876
42877
42878File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
42879
428807.13 Backwards Compatibility
42881============================
42882
42883Now that there is a definitive ISO standard C++, G++ has a specification
42884to adhere to.  The C++ language evolved over time, and features that
42885used to be acceptable in previous drafts of the standard, such as the
42886ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
42887to allow compilation of C++ written to such drafts, G++ contains some
42888backwards compatibilities.  _All such backwards compatibility features
42889are liable to disappear in future versions of G++._ They should be
42890considered deprecated.   *Note Deprecated Features::.
42891
42892`For scope'
42893     If a variable is declared at for scope, it used to remain in scope
42894     until the end of the scope that contained the for statement
42895     (rather than just within the for scope).  G++ retains this, but
42896     issues a warning, if such a variable is accessed outside the for
42897     scope.
42898
42899`Implicit C language'
42900     Old C system header files did not contain an `extern "C" {...}'
42901     scope to set the language.  On such systems, all header files are
42902     implicitly scoped inside a C language scope.  Also, an empty
42903     prototype `()' is treated as an unspecified number of arguments,
42904     rather than no arguments, as C++ demands.
42905
42906
42907File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
42908
429098 GNU Objective-C Features
42910**************************
42911
42912This document is meant to describe some of the GNU Objective-C
42913features.  It is not intended to teach you Objective-C.  There are
42914several resources on the Internet that present the language.
42915
42916* Menu:
42917
42918* GNU Objective-C runtime API::
42919* Executing code before main::
42920* Type encoding::
42921* Garbage Collection::
42922* Constant string objects::
42923* compatibility_alias::
42924* Exceptions::
42925* Synchronization::
42926* Fast enumeration::
42927* Messaging with the GNU Objective-C runtime::
42928
42929
42930File: gcc.info,  Node: GNU Objective-C runtime API,  Next: Executing code before main,  Up: Objective-C
42931
429328.1 GNU Objective-C Runtime API
42933===============================
42934
42935This section is specific for the GNU Objective-C runtime.  If you are
42936using a different runtime, you can skip it.
42937
42938 The GNU Objective-C runtime provides an API that allows you to
42939interact with the Objective-C runtime system, querying the live runtime
42940structures and even manipulating them.  This allows you for example to
42941inspect and navigate classes, methods and protocols; to define new
42942classes or new methods, and even to modify existing classes or
42943protocols.
42944
42945 If you are using a "Foundation" library such as GNUstep-Base, this
42946library will provide you with a rich set of functionality to do most of
42947the inspection tasks, and you probably will only need direct access to
42948the GNU Objective-C runtime API to define new classes or methods.
42949
42950* Menu:
42951
42952* Modern GNU Objective-C runtime API::
42953* Traditional GNU Objective-C runtime API::
42954
42955
42956File: gcc.info,  Node: Modern GNU Objective-C runtime API,  Next: Traditional GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
42957
429588.1.1 Modern GNU Objective-C Runtime API
42959----------------------------------------
42960
42961The GNU Objective-C runtime provides an API which is similar to the one
42962provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime.  The
42963API is documented in the public header files of the GNU Objective-C
42964runtime:
42965
42966   * `objc/objc.h': this is the basic Objective-C header file, defining
42967     the basic Objective-C types such as `id', `Class' and `BOOL'.  You
42968     have to include this header to do almost anything with Objective-C.
42969
42970   * `objc/runtime.h': this header declares most of the public runtime
42971     API functions allowing you to inspect and manipulate the
42972     Objective-C runtime data structures.  These functions are fairly
42973     standardized across Objective-C runtimes and are almost identical
42974     to the Apple/NeXT Objective-C runtime ones.  It does not declare
42975     functions in some specialized areas (constructing and forwarding
42976     message invocations, threading) which are in the other headers
42977     below.  You have to include `objc/objc.h' and `objc/runtime.h' to
42978     use any of the functions, such as `class_getName()', declared in
42979     `objc/runtime.h'.
42980
42981   * `objc/message.h': this header declares public functions used to
42982     construct, deconstruct and forward message invocations.  Because
42983     messaging is done in quite a different way on different runtimes,
42984     functions in this header are specific to the GNU Objective-C
42985     runtime implementation.
42986
42987   * `objc/objc-exception.h': this header declares some public
42988     functions related to Objective-C exceptions.  For example
42989     functions in this header allow you to throw an Objective-C
42990     exception from plain C/C++ code.
42991
42992   * `objc/objc-sync.h': this header declares some public functions
42993     related to the Objective-C `@synchronized()' syntax, allowing you
42994     to emulate an Objective-C `@synchronized()' block in plain C/C++
42995     code.
42996
42997   * `objc/thr.h': this header declares a public runtime API threading
42998     layer that is only provided by the GNU Objective-C runtime.  It
42999     declares functions such as `objc_mutex_lock()', which provide a
43000     platform-independent set of threading functions.
43001
43002
43003 The header files contain detailed documentation for each function in
43004the GNU Objective-C runtime API.
43005
43006
43007File: gcc.info,  Node: Traditional GNU Objective-C runtime API,  Prev: Modern GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
43008
430098.1.2 Traditional GNU Objective-C Runtime API
43010---------------------------------------------
43011
43012The GNU Objective-C runtime used to provide a different API, which we
43013call the "traditional" GNU Objective-C runtime API.  Functions
43014belonging to this API are easy to recognize because they use a
43015different naming convention, such as `class_get_super_class()'
43016(traditional API) instead of `class_getSuperclass()' (modern API).
43017Software using this API includes the file `objc/objc-api.h' where it is
43018declared.
43019
43020 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer
43021available.
43022
43023
43024File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C
43025
430268.2 `+load': Executing Code before `main'
43027=========================================
43028
43029This section is specific for the GNU Objective-C runtime.  If you are
43030using a different runtime, you can skip it.
43031
43032 The GNU Objective-C runtime provides a way that allows you to execute
43033code before the execution of the program enters the `main' function.
43034The code is executed on a per-class and a per-category basis, through a
43035special class method `+load'.
43036
43037 This facility is very useful if you want to initialize global variables
43038which can be accessed by the program directly, without sending a message
43039to the class first.  The usual way to initialize global variables, in
43040the `+initialize' method, might not be useful because `+initialize' is
43041only called when the first message is sent to a class object, which in
43042some cases could be too late.
43043
43044 Suppose for example you have a `FileStream' class that declares
43045`Stdin', `Stdout' and `Stderr' as global variables, like below:
43046
43047
43048     FileStream *Stdin = nil;
43049     FileStream *Stdout = nil;
43050     FileStream *Stderr = nil;
43051
43052     @implementation FileStream
43053
43054     + (void)initialize
43055     {
43056         Stdin = [[FileStream new] initWithFd:0];
43057         Stdout = [[FileStream new] initWithFd:1];
43058         Stderr = [[FileStream new] initWithFd:2];
43059     }
43060
43061     /* Other methods here */
43062     @end
43063
43064 In this example, the initialization of `Stdin', `Stdout' and `Stderr'
43065in `+initialize' occurs too late.  The programmer can send a message to
43066one of these objects before the variables are actually initialized,
43067thus sending messages to the `nil' object.  The `+initialize' method
43068which actually initializes the global variables is not invoked until
43069the first message is sent to the class object.  The solution would
43070require these variables to be initialized just before entering `main'.
43071
43072 The correct solution of the above problem is to use the `+load' method
43073instead of `+initialize':
43074
43075
43076     @implementation FileStream
43077
43078     + (void)load
43079     {
43080         Stdin = [[FileStream new] initWithFd:0];
43081         Stdout = [[FileStream new] initWithFd:1];
43082         Stderr = [[FileStream new] initWithFd:2];
43083     }
43084
43085     /* Other methods here */
43086     @end
43087
43088 The `+load' is a method that is not overridden by categories.  If a
43089class and a category of it both implement `+load', both methods are
43090invoked.  This allows some additional initializations to be performed in
43091a category.
43092
43093 This mechanism is not intended to be a replacement for `+initialize'.
43094You should be aware of its limitations when you decide to use it
43095instead of `+initialize'.
43096
43097* Menu:
43098
43099* What you can and what you cannot do in +load::
43100
43101
43102File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main
43103
431048.2.1 What You Can and Cannot Do in `+load'
43105-------------------------------------------
43106
43107`+load' is to be used only as a last resort.  Because it is executed
43108very early, most of the Objective-C runtime machinery will not be ready
43109when `+load' is executed; hence `+load' works best for executing C code
43110that is independent on the Objective-C runtime.
43111
43112 The `+load' implementation in the GNU runtime guarantees you the
43113following things:
43114
43115   * you can write whatever C code you like;
43116
43117   * you can allocate and send messages to objects whose class is
43118     implemented in the same file;
43119
43120   * the `+load' implementation of all super classes of a class are
43121     executed before the `+load' of that class is executed;
43122
43123   * the `+load' implementation of a class is executed before the
43124     `+load' implementation of any category.
43125
43126
43127 In particular, the following things, even if they can work in a
43128particular case, are not guaranteed:
43129
43130   * allocation of or sending messages to arbitrary objects;
43131
43132   * allocation of or sending messages to objects whose classes have a
43133     category implemented in the same file;
43134
43135   * sending messages to Objective-C constant strings (`@"this is a
43136     constant string"');
43137
43138
43139 You should make no assumptions about receiving `+load' in sibling
43140classes when you write `+load' of a class.  The order in which sibling
43141classes receive `+load' is not guaranteed.
43142
43143 The order in which `+load' and `+initialize' are called could be
43144problematic if this matters.  If you don't allocate objects inside
43145`+load', it is guaranteed that `+load' is called before `+initialize'.
43146If you create an object inside `+load' the `+initialize' method of
43147object's class is invoked even if `+load' was not invoked.  Note if you
43148explicitly call `+load' on a class, `+initialize' will be called first.
43149To avoid possible problems try to implement only one of these methods.
43150
43151 The `+load' method is also invoked when a bundle is dynamically loaded
43152into your running program.  This happens automatically without any
43153intervening operation from you.  When you write bundles and you need to
43154write `+load' you can safely create and send messages to objects whose
43155classes already exist in the running program.  The same restrictions as
43156above apply to classes defined in bundle.
43157
43158
43159File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
43160
431618.3 Type Encoding
43162=================
43163
43164This is an advanced section.  Type encodings are used extensively by
43165the compiler and by the runtime, but you generally do not need to know
43166about them to use Objective-C.
43167
43168 The Objective-C compiler generates type encodings for all the types.
43169These type encodings are used at runtime to find out information about
43170selectors and methods and about objects and classes.
43171
43172 The types are encoded in the following way:
43173
43174`_Bool'            `B'
43175`char'             `c'
43176`unsigned char'    `C'
43177`short'            `s'
43178`unsigned short'   `S'
43179`int'              `i'
43180`unsigned int'     `I'
43181`long'             `l'
43182`unsigned long'    `L'
43183`long long'        `q'
43184`unsigned long     `Q'
43185long'              
43186`float'            `f'
43187`double'           `d'
43188`long double'      `D'
43189`void'             `v'
43190`id'               `@'
43191`Class'            `#'
43192`SEL'              `:'
43193`char*'            `*'
43194`enum'             an `enum' is encoded exactly as the integer type that
43195                   the compiler uses for it, which depends on the
43196                   enumeration values.  Often the compiler users
43197                   `unsigned int', which is then encoded as `I'.
43198unknown type       `?'
43199Complex types      `j' followed by the inner type.  For example
43200                   `_Complex double' is encoded as "jd".
43201bit-fields         `b' followed by the starting position of the
43202                   bit-field, the type of the bit-field and the size of
43203                   the bit-field (the bit-fields encoding was changed
43204                   from the NeXT's compiler encoding, see below)
43205
43206 The encoding of bit-fields has changed to allow bit-fields to be
43207properly handled by the runtime functions that compute sizes and
43208alignments of types that contain bit-fields.  The previous encoding
43209contained only the size of the bit-field.  Using only this information
43210it is not possible to reliably compute the size occupied by the
43211bit-field.  This is very important in the presence of the Boehm's
43212garbage collector because the objects are allocated using the typed
43213memory facility available in this collector.  The typed memory
43214allocation requires information about where the pointers are located
43215inside the object.
43216
43217 The position in the bit-field is the position, counting in bits, of the
43218bit closest to the beginning of the structure.
43219
43220 The non-atomic types are encoded as follows:
43221
43222pointers       `^' followed by the pointed type.
43223arrays         `[' followed by the number of elements in the array
43224               followed by the type of the elements followed by `]'
43225structures     `{' followed by the name of the structure (or `?' if the
43226               structure is unnamed), the `=' sign, the type of the
43227               members and by `}'
43228unions         `(' followed by the name of the structure (or `?' if the
43229               union is unnamed), the `=' sign, the type of the members
43230               followed by `)'
43231vectors        `![' followed by the vector_size (the number of bytes
43232               composing the vector) followed by a comma, followed by
43233               the alignment (in bytes) of the vector, followed by the
43234               type of the elements followed by `]'
43235
43236 Here are some types and their encodings, as they are generated by the
43237compiler on an i386 machine:
43238
43239
43240Objective-C type   Compiler encoding
43241     int a[10];    `[10i]'
43242     struct {      `{?=i[3f]b128i3b131i2c}'
43243       int i;      
43244       float f[3]; 
43245       int a:3;    
43246       int b:2;    
43247       char c;     
43248     }             
43249     int a __attribute__ ((vector_size (16)));`![16,16i]' (alignment would depend on the machine)
43250
43251
43252 In addition to the types the compiler also encodes the type
43253specifiers.  The table below describes the encoding of the current
43254Objective-C type specifiers:
43255
43256
43257Specifier          Encoding
43258`const'            `r'
43259`in'               `n'
43260`inout'            `N'
43261`out'              `o'
43262`bycopy'           `O'
43263`byref'            `R'
43264`oneway'           `V'
43265
43266
43267 The type specifiers are encoded just before the type.  Unlike types
43268however, the type specifiers are only encoded when they appear in method
43269argument types.
43270
43271 Note how `const' interacts with pointers:
43272
43273
43274Objective-C type   Compiler encoding
43275     const int     `ri'
43276     const int*    `^ri'
43277     int *const    `r^i'
43278
43279
43280 `const int*' is a pointer to a `const int', and so is encoded as
43281`^ri'.  `int* const', instead, is a `const' pointer to an `int', and so
43282is encoded as `r^i'.
43283
43284 Finally, there is a complication when encoding `const char *' versus
43285`char * const'.  Because `char *' is encoded as `*' and not as `^c',
43286there is no way to express the fact that `r' applies to the pointer or
43287to the pointee.
43288
43289 Hence, it is assumed as a convention that `r*' means `const char *'
43290(since it is what is most often meant), and there is no way to encode
43291`char *const'.  `char *const' would simply be encoded as `*', and the
43292`const' is lost.
43293
43294* Menu:
43295
43296* Legacy type encoding::
43297* @encode::
43298* Method signatures::
43299
43300
43301File: gcc.info,  Node: Legacy type encoding,  Next: @encode,  Up: Type encoding
43302
433038.3.1 Legacy Type Encoding
43304--------------------------
43305
43306Unfortunately, historically GCC used to have a number of bugs in its
43307encoding code.  The NeXT runtime expects GCC to emit type encodings in
43308this historical format (compatible with GCC-3.3), so when using the
43309NeXT runtime, GCC will introduce on purpose a number of incorrect
43310encodings:
43311
43312   * the read-only qualifier of the pointee gets emitted before the '^'.
43313     The read-only qualifier of the pointer itself gets ignored, unless
43314     it is a typedef.  Also, the 'r' is only emitted for the outermost
43315     type.
43316
43317   * 32-bit longs are encoded as 'l' or 'L', but not always.  For
43318     typedefs, the compiler uses 'i' or 'I' instead if encoding a
43319     struct field or a pointer.
43320
43321   * `enum's are always encoded as 'i' (int) even if they are actually
43322     unsigned or long.
43323
43324
43325 In addition to that, the NeXT runtime uses a different encoding for
43326bitfields.  It encodes them as `b' followed by the size, without a bit
43327offset or the underlying field type.
43328
43329
43330File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding
43331
433328.3.2 `@encode'
43333---------------
43334
43335GNU Objective-C supports the `@encode' syntax that allows you to create
43336a type encoding from a C/Objective-C type.  For example, `@encode(int)'
43337is compiled by the compiler into `"i"'.
43338
43339 `@encode' does not support type qualifiers other than `const'.  For
43340example, `@encode(const char*)' is valid and is compiled into `"r*"',
43341while `@encode(bycopy char *)' is invalid and will cause a compilation
43342error.
43343
43344
43345File: gcc.info,  Node: Method signatures,  Prev: @encode,  Up: Type encoding
43346
433478.3.3 Method Signatures
43348-----------------------
43349
43350This section documents the encoding of method types, which is rarely
43351needed to use Objective-C.  You should skip it at a first reading; the
43352runtime provides functions that will work on methods and can walk
43353through the list of parameters and interpret them for you.  These
43354functions are part of the public "API" and are the preferred way to
43355interact with method signatures from user code.
43356
43357 But if you need to debug a problem with method signatures and need to
43358know how they are implemented (i.e., the "ABI"), read on.
43359
43360 Methods have their "signature" encoded and made available to the
43361runtime.  The "signature" encodes all the information required to
43362dynamically build invocations of the method at runtime: return type and
43363arguments.
43364
43365 The "signature" is a null-terminated string, composed of the following:
43366
43367   * The return type, including type qualifiers.  For example, a method
43368     returning `int' would have `i' here.
43369
43370   * The total size (in bytes) required to pass all the parameters.
43371     This includes the two hidden parameters (the object `self' and the
43372     method selector `_cmd').
43373
43374   * Each argument, with the type encoding, followed by the offset (in
43375     bytes) of the argument in the list of parameters.
43376
43377
43378 For example, a method with no arguments and returning `int' would have
43379the signature `i8@0:4' if the size of a pointer is 4.  The signature is
43380interpreted as follows: the `i' is the return type (an `int'), the `8'
43381is the total size of the parameters in bytes (two pointers each of size
433824), the `@0' is the first parameter (an object at byte offset `0') and
43383`:4' is the second parameter (a `SEL' at byte offset `4').
43384
43385 You can easily find more examples by running the "strings" program on
43386an Objective-C object file compiled by GCC.  You'll see a lot of
43387strings that look very much like `i8@0:4'.  They are signatures of
43388Objective-C methods.
43389
43390
43391File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
43392
433938.4 Garbage Collection
43394======================
43395
43396This section is specific for the GNU Objective-C runtime.  If you are
43397using a different runtime, you can skip it.
43398
43399 Support for garbage collection with the GNU runtime has been added by
43400using a powerful conservative garbage collector, known as the
43401Boehm-Demers-Weiser conservative garbage collector.
43402
43403 To enable the support for it you have to configure the compiler using
43404an additional argument, `--enable-objc-gc'.  This will build the
43405boehm-gc library, and build an additional runtime library which has
43406several enhancements to support the garbage collector.  The new library
43407has a new name, `libobjc_gc.a' to not conflict with the
43408non-garbage-collected library.
43409
43410 When the garbage collector is used, the objects are allocated using the
43411so-called typed memory allocation mechanism available in the
43412Boehm-Demers-Weiser collector.  This mode requires precise information
43413on where pointers are located inside objects.  This information is
43414computed once per class, immediately after the class has been
43415initialized.
43416
43417 There is a new runtime function `class_ivar_set_gcinvisible()' which
43418can be used to declare a so-called "weak pointer" reference.  Such a
43419pointer is basically hidden for the garbage collector; this can be
43420useful in certain situations, especially when you want to keep track of
43421the allocated objects, yet allow them to be collected.  This kind of
43422pointers can only be members of objects, you cannot declare a global
43423pointer as a weak reference.  Every type which is a pointer type can be
43424declared a weak pointer, including `id', `Class' and `SEL'.
43425
43426 Here is an example of how to use this feature.  Suppose you want to
43427implement a class whose instances hold a weak pointer reference; the
43428following class does this:
43429
43430
43431     @interface WeakPointer : Object
43432     {
43433         const void* weakPointer;
43434     }
43435
43436     - initWithPointer:(const void*)p;
43437     - (const void*)weakPointer;
43438     @end
43439
43440
43441     @implementation WeakPointer
43442
43443     + (void)initialize
43444     {
43445       if (self == objc_lookUpClass ("WeakPointer"))
43446         class_ivar_set_gcinvisible (self, "weakPointer", YES);
43447     }
43448
43449     - initWithPointer:(const void*)p
43450     {
43451       weakPointer = p;
43452       return self;
43453     }
43454
43455     - (const void*)weakPointer
43456     {
43457       return weakPointer;
43458     }
43459
43460     @end
43461
43462 Weak pointers are supported through a new type character specifier
43463represented by the `!' character.  The `class_ivar_set_gcinvisible()'
43464function adds or removes this specifier to the string type description
43465of the instance variable named as argument.
43466
43467
43468File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
43469
434708.5 Constant String Objects
43471===========================
43472
43473GNU Objective-C provides constant string objects that are generated
43474directly by the compiler.  You declare a constant string object by
43475prefixing a C constant string with the character `@':
43476
43477       id myString = @"this is a constant string object";
43478
43479 The constant string objects are by default instances of the
43480`NXConstantString' class which is provided by the GNU Objective-C
43481runtime.  To get the definition of this class you must include the
43482`objc/NXConstStr.h' header file.
43483
43484 User defined libraries may want to implement their own constant string
43485class.  To be able to support them, the GNU Objective-C compiler
43486provides a new command line options
43487`-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
43488to a strict structure, the same as `NXConstantString''s structure:
43489
43490
43491     @interface MyConstantStringClass
43492     {
43493       Class isa;
43494       char *c_string;
43495       unsigned int len;
43496     }
43497     @end
43498
43499 `NXConstantString' inherits from `Object'; user class libraries may
43500choose to inherit the customized constant string class from a different
43501class than `Object'.  There is no requirement in the methods the
43502constant string class has to implement, but the final ivar layout of
43503the class must be the compatible with the given structure.
43504
43505 When the compiler creates the statically allocated constant string
43506object, the `c_string' field will be filled by the compiler with the
43507string; the `length' field will be filled by the compiler with the
43508string length; the `isa' pointer will be filled with `NULL' by the
43509compiler, and it will later be fixed up automatically at runtime by the
43510GNU Objective-C runtime library to point to the class which was set by
43511the `-fconstant-string-class' option when the object file is loaded (if
43512you wonder how it works behind the scenes, the name of the class to
43513use, and the list of static objects to fixup, are stored by the
43514compiler in the object file in a place where the GNU runtime library
43515will find them at runtime).
43516
43517 As a result, when a file is compiled with the
43518`-fconstant-string-class' option, all the constant string objects will
43519be instances of the class specified as argument to this option.  It is
43520possible to have multiple compilation units referring to different
43521constant string classes, neither the compiler nor the linker impose any
43522restrictions in doing this.
43523
43524
43525File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C
43526
435278.6 `compatibility_alias'
43528=========================
43529
43530The keyword `@compatibility_alias' allows you to define a class name as
43531equivalent to another class name.  For example:
43532
43533     @compatibility_alias WOApplication GSWApplication;
43534
43535 tells the compiler that each time it encounters `WOApplication' as a
43536class name, it should replace it with `GSWApplication' (that is,
43537`WOApplication' is just an alias for `GSWApplication').
43538
43539 There are some constraints on how this can be used--
43540
43541   * `WOApplication' (the alias) must not be an existing class;
43542
43543   * `GSWApplication' (the real class) must be an existing class.
43544
43545
43546
43547File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C
43548
435498.7 Exceptions
43550==============
43551
43552GNU Objective-C provides exception support built into the language, as
43553in the following example:
43554
43555       @try {
43556         ...
43557            @throw expr;
43558         ...
43559       }
43560       @catch (AnObjCClass *exc) {
43561         ...
43562           @throw expr;
43563         ...
43564           @throw;
43565         ...
43566       }
43567       @catch (AnotherClass *exc) {
43568         ...
43569       }
43570       @catch (id allOthers) {
43571         ...
43572       }
43573       @finally {
43574         ...
43575           @throw expr;
43576         ...
43577       }
43578
43579 The `@throw' statement may appear anywhere in an Objective-C or
43580Objective-C++ program; when used inside of a `@catch' block, the
43581`@throw' may appear without an argument (as shown above), in which case
43582the object caught by the `@catch' will be rethrown.
43583
43584 Note that only (pointers to) Objective-C objects may be thrown and
43585caught using this scheme.  When an object is thrown, it will be caught
43586by the nearest `@catch' clause capable of handling objects of that
43587type, analogously to how `catch' blocks work in C++ and Java.  A
43588`@catch(id ...)' clause (as shown above) may also be provided to catch
43589any and all Objective-C exceptions not caught by previous `@catch'
43590clauses (if any).
43591
43592 The `@finally' clause, if present, will be executed upon exit from the
43593immediately preceding `@try ... @catch' section.  This will happen
43594regardless of whether any exceptions are thrown, caught or rethrown
43595inside the `@try ... @catch' section, analogously to the behavior of
43596the `finally' clause in Java.
43597
43598 There are several caveats to using the new exception mechanism:
43599
43600   * The `-fobjc-exceptions' command line option must be used when
43601     compiling Objective-C files that use exceptions.
43602
43603   * With the GNU runtime, exceptions are always implemented as "native"
43604     exceptions and it is recommended that the `-fexceptions' and
43605     `-shared-libgcc' options are used when linking.
43606
43607   * With the NeXT runtime, although currently designed to be binary
43608     compatible with `NS_HANDLER'-style idioms provided by the
43609     `NSException' class, the new exceptions can only be used on Mac OS
43610     X 10.3 (Panther) and later systems, due to additional functionality
43611     needed in the NeXT Objective-C runtime.
43612
43613   * As mentioned above, the new exceptions do not support handling
43614     types other than Objective-C objects.   Furthermore, when used from
43615     Objective-C++, the Objective-C exception model does not
43616     interoperate with C++ exceptions at this time.  This means you
43617     cannot `@throw' an exception from Objective-C and `catch' it in
43618     C++, or vice versa (i.e., `throw ... @catch').
43619
43620
43621File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C
43622
436238.8 Synchronization
43624===================
43625
43626GNU Objective-C provides support for synchronized blocks:
43627
43628       @synchronized (ObjCClass *guard) {
43629         ...
43630       }
43631
43632 Upon entering the `@synchronized' block, a thread of execution shall
43633first check whether a lock has been placed on the corresponding `guard'
43634object by another thread.  If it has, the current thread shall wait
43635until the other thread relinquishes its lock.  Once `guard' becomes
43636available, the current thread will place its own lock on it, execute
43637the code contained in the `@synchronized' block, and finally relinquish
43638the lock (thereby making `guard' available to other threads).
43639
43640 Unlike Java, Objective-C does not allow for entire methods to be
43641marked `@synchronized'.  Note that throwing exceptions out of
43642`@synchronized' blocks is allowed, and will cause the guarding object
43643to be unlocked properly.
43644
43645 Because of the interactions between synchronization and exception
43646handling, you can only use `@synchronized' when compiling with
43647exceptions enabled, that is with the command line option
43648`-fobjc-exceptions'.
43649
43650
43651File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C
43652
436538.9 Fast Enumeration
43654====================
43655
43656* Menu:
43657
43658* Using fast enumeration::
43659* c99-like fast enumeration syntax::
43660* Fast enumeration details::
43661* Fast enumeration protocol::
43662
43663
43664File: gcc.info,  Node: Using fast enumeration,  Next: c99-like fast enumeration syntax,  Up: Fast enumeration
43665
436668.9.1 Using Fast Enumeration
43667----------------------------
43668
43669GNU Objective-C provides support for the fast enumeration syntax:
43670
43671       id array = ...;
43672       id object;
43673
43674       for (object in array)
43675       {
43676         /* Do something with 'object' */
43677       }
43678
43679 `array' needs to be an Objective-C object (usually a collection
43680object, for example an array, a dictionary or a set) which implements
43681the "Fast Enumeration Protocol" (see below).  If you are using a
43682Foundation library such as GNUstep Base or Apple Cocoa Foundation, all
43683collection objects in the library implement this protocol and can be
43684used in this way.
43685
43686 The code above would iterate over all objects in `array'.  For each of
43687them, it assigns it to `object', then executes the `Do something with
43688'object'' statements.
43689
43690 Here is a fully worked-out example using a Foundation library (which
43691provides the implementation of `NSArray', `NSString' and `NSLog'):
43692
43693       NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
43694       NSString *object;
43695
43696       for (object in array)
43697         NSLog (@"Iterating over %@", object);
43698
43699
43700File: gcc.info,  Node: c99-like fast enumeration syntax,  Next: Fast enumeration details,  Prev: Using fast enumeration,  Up: Fast enumeration
43701
437028.9.2 C99-Like Fast Enumeration Syntax
43703--------------------------------------
43704
43705A c99-like declaration syntax is also allowed:
43706
43707       id array = ...;
43708
43709       for (id object in array)
43710       {
43711         /* Do something with 'object'  */
43712       }
43713
43714 this is completely equivalent to:
43715
43716       id array = ...;
43717
43718       {
43719         id object;
43720         for (object in array)
43721         {
43722           /* Do something with 'object'  */
43723         }
43724       }
43725
43726 but can save some typing.
43727
43728 Note that the option `-std=c99' is not required to allow this syntax
43729in Objective-C.
43730
43731
43732File: gcc.info,  Node: Fast enumeration details,  Next: Fast enumeration protocol,  Prev: c99-like fast enumeration syntax,  Up: Fast enumeration
43733
437348.9.3 Fast Enumeration Details
43735------------------------------
43736
43737Here is a more technical description with the gory details.  Consider
43738the code
43739
43740       for (OBJECT EXPRESSION in COLLECTION EXPRESSION)
43741       {
43742         STATEMENTS
43743       }
43744
43745 here is what happens when you run it:
43746
43747   * `COLLECTION EXPRESSION' is evaluated exactly once and the result
43748     is used as the collection object to iterate over.  This means it
43749     is safe to write code such as `for (object in [NSDictionary
43750     keyEnumerator]) ...'.
43751
43752   * the iteration is implemented by the compiler by repeatedly getting
43753     batches of objects from the collection object using the fast
43754     enumeration protocol (see below), then iterating over all objects
43755     in the batch.  This is faster than a normal enumeration where
43756     objects are retrieved one by one (hence the name "fast
43757     enumeration").
43758
43759   * if there are no objects in the collection, then `OBJECT
43760     EXPRESSION' is set to `nil' and the loop immediately terminates.
43761
43762   * if there are objects in the collection, then for each object in the
43763     collection (in the order they are returned) `OBJECT EXPRESSION' is
43764     set to the object, then `STATEMENTS' are executed.
43765
43766   * `STATEMENTS' can contain `break' and `continue' commands, which
43767     will abort the iteration or skip to the next loop iteration as
43768     expected.
43769
43770   * when the iteration ends because there are no more objects to
43771     iterate over, `OBJECT EXPRESSION' is set to `nil'.  This allows
43772     you to determine whether the iteration finished because a `break'
43773     command was used (in which case `OBJECT EXPRESSION' will remain
43774     set to the last object that was iterated over) or because it
43775     iterated over all the objects (in which case `OBJECT EXPRESSION'
43776     will be set to `nil').
43777
43778   * `STATEMENTS' must not make any changes to the collection object;
43779     if they do, it is a hard error and the fast enumeration terminates
43780     by invoking `objc_enumerationMutation', a runtime function that
43781     normally aborts the program but which can be customized by
43782     Foundation libraries via `objc_set_mutation_handler' to do
43783     something different, such as raising an exception.
43784
43785
43786
43787File: gcc.info,  Node: Fast enumeration protocol,  Prev: Fast enumeration details,  Up: Fast enumeration
43788
437898.9.4 Fast Enumeration Protocol
43790-------------------------------
43791
43792If you want your own collection object to be usable with fast
43793enumeration, you need to have it implement the method
43794
43795     - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state
43796                                           objects: (id *)objects
43797                                             count: (unsigned long)len;
43798
43799 where `NSFastEnumerationState' must be defined in your code as follows:
43800
43801     typedef struct
43802     {
43803       unsigned long state;
43804       id            *itemsPtr;
43805       unsigned long *mutationsPtr;
43806       unsigned long extra[5];
43807     } NSFastEnumerationState;
43808
43809 If no `NSFastEnumerationState' is defined in your code, the compiler
43810will automatically replace `NSFastEnumerationState *' with `struct
43811__objcFastEnumerationState *', where that type is silently defined by
43812the compiler in an identical way.  This can be confusing and we
43813recommend that you define `NSFastEnumerationState' (as shown above)
43814instead.
43815
43816 The method is called repeatedly during a fast enumeration to retrieve
43817batches of objects.  Each invocation of the method should retrieve the
43818next batch of objects.
43819
43820 The return value of the method is the number of objects in the current
43821batch; this should not exceed `len', which is the maximum size of a
43822batch as requested by the caller.  The batch itself is returned in the
43823`itemsPtr' field of the `NSFastEnumerationState' struct.
43824
43825 To help with returning the objects, the `objects' array is a C array
43826preallocated by the caller (on the stack) of size `len'.  In many cases
43827you can put the objects you want to return in that `objects' array,
43828then do `itemsPtr = objects'.  But you don't have to; if your
43829collection already has the objects to return in some form of C array,
43830it could return them from there instead.
43831
43832 The `state' and `extra' fields of the `NSFastEnumerationState'
43833structure allows your collection object to keep track of the state of
43834the enumeration.  In a simple array implementation, `state' may keep
43835track of the index of the last object that was returned, and `extra'
43836may be unused.
43837
43838 The `mutationsPtr' field of the `NSFastEnumerationState' is used to
43839keep track of mutations.  It should point to a number; before working
43840on each object, the fast enumeration loop will check that this number
43841has not changed.  If it has, a mutation has happened and the fast
43842enumeration will abort.  So, `mutationsPtr' could be set to point to
43843some sort of version number of your collection, which is increased by
43844one every time there is a change (for example when an object is added
43845or removed).  Or, if you are content with less strict mutation checks,
43846it could point to the number of objects in your collection or some
43847other value that can be checked to perform an approximate check that
43848the collection has not been mutated.
43849
43850 Finally, note how we declared the `len' argument and the return value
43851to be of type `unsigned long'.  They could also be declared to be of
43852type `unsigned int' and everything would still work.
43853
43854
43855File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C
43856
438578.10 Messaging with the GNU Objective-C Runtime
43858===============================================
43859
43860This section is specific for the GNU Objective-C runtime.  If you are
43861using a different runtime, you can skip it.
43862
43863 The implementation of messaging in the GNU Objective-C runtime is
43864designed to be portable, and so is based on standard C.
43865
43866 Sending a message in the GNU Objective-C runtime is composed of two
43867separate steps.  First, there is a call to the lookup function,
43868`objc_msg_lookup ()' (or, in the case of messages to super,
43869`objc_msg_lookup_super ()').  This runtime function takes as argument
43870the receiver and the selector of the method to be called; it returns
43871the `IMP', that is a pointer to the function implementing the method.
43872The second step of method invocation consists of casting this pointer
43873function to the appropriate function pointer type, and calling the
43874function pointed to it with the right arguments.
43875
43876 For example, when the compiler encounters a method invocation such as
43877`[object init]', it compiles it into a call to `objc_msg_lookup
43878(object, @selector(init))' followed by a cast of the returned value to
43879the appropriate function pointer type, and then it calls it.
43880
43881* Menu:
43882
43883* Dynamically registering methods::
43884* Forwarding hook::
43885
43886
43887File: gcc.info,  Node: Dynamically registering methods,  Next: Forwarding hook,  Up: Messaging with the GNU Objective-C runtime
43888
438898.10.1 Dynamically Registering Methods
43890--------------------------------------
43891
43892If `objc_msg_lookup()' does not find a suitable method implementation,
43893because the receiver does not implement the required method, it tries
43894to see if the class can dynamically register the method.
43895
43896 To do so, the runtime checks if the class of the receiver implements
43897the method
43898
43899     + (BOOL) resolveInstanceMethod: (SEL)selector;
43900
43901 in the case of an instance method, or
43902
43903     + (BOOL) resolveClassMethod: (SEL)selector;
43904
43905 in the case of a class method.  If the class implements it, the
43906runtime invokes it, passing as argument the selector of the original
43907method, and if it returns `YES', the runtime tries the lookup again,
43908which could now succeed if a matching method was added dynamically by
43909`+resolveInstanceMethod:' or `+resolveClassMethod:'.
43910
43911 This allows classes to dynamically register methods (by adding them to
43912the class using `class_addMethod') when they are first called.  To do
43913so, a class should implement `+resolveInstanceMethod:' (or, depending
43914on the case, `+resolveClassMethod:') and have it recognize the
43915selectors of methods that can be registered dynamically at runtime,
43916register them, and return `YES'.  It should return `NO' for methods
43917that it does not dynamically registered at runtime.
43918
43919 If `+resolveInstanceMethod:' (or `+resolveClassMethod:') is not
43920implemented or returns `NO', the runtime then tries the forwarding hook.
43921
43922 Support for `+resolveInstanceMethod:' and `resolveClassMethod:' was
43923added to the GNU Objective-C runtime in GCC version 4.6.
43924
43925
43926File: gcc.info,  Node: Forwarding hook,  Prev: Dynamically registering methods,  Up: Messaging with the GNU Objective-C runtime
43927
439288.10.2 Forwarding Hook
43929----------------------
43930
43931The GNU Objective-C runtime provides a hook, called
43932`__objc_msg_forward2', which is called by `objc_msg_lookup()' when it
43933can't find a method implementation in the runtime tables and after
43934calling `+resolveInstanceMethod:' and `+resolveClassMethod:' has been
43935attempted and did not succeed in dynamically registering the method.
43936
43937 To configure the hook, you set the global variable
43938`__objc_msg_forward2' to a function with the same argument and return
43939types of `objc_msg_lookup()'.  When `objc_msg_lookup()' can not find a
43940method implementation, it invokes the hook function you provided to get
43941a method implementation to return.  So, in practice
43942`__objc_msg_forward2' allows you to extend `objc_msg_lookup()' by
43943adding some custom code that is called to do a further lookup when no
43944standard method implementation can be found using the normal lookup.
43945
43946 This hook is generally reserved for "Foundation" libraries such as
43947GNUstep Base, which use it to implement their high-level method
43948forwarding API, typically based around the `forwardInvocation:' method.
43949So, unless you are implementing your own "Foundation" library, you
43950should not set this hook.
43951
43952 In a typical forwarding implementation, the `__objc_msg_forward2' hook
43953function determines the argument and return type of the method that is
43954being looked up, and then creates a function that takes these arguments
43955and has that return type, and returns it to the caller.  Creating this
43956function is non-trivial and is typically performed using a dedicated
43957library such as `libffi'.
43958
43959 The forwarding method implementation thus created is returned by
43960`objc_msg_lookup()' and is executed as if it was a normal method
43961implementation.  When the forwarding method implementation is called,
43962it is usually expected to pack all arguments into some sort of object
43963(typically, an `NSInvocation' in a "Foundation" library), and hand it
43964over to the programmer (`forwardInvocation:') who is then allowed to
43965manipulate the method invocation using a high-level API provided by the
43966"Foundation" library.  For example, the programmer may want to examine
43967the method invocation arguments and name and potentially change them
43968before forwarding the method invocation to one or more local objects
43969(`performInvocation:') or even to remote objects (by using Distributed
43970Objects or some other mechanism).  When all this completes, the return
43971value is passed back and must be returned correctly to the original
43972caller.
43973
43974 Note that the GNU Objective-C runtime currently provides no support
43975for method forwarding or method invocations other than the
43976`__objc_msg_forward2' hook.
43977
43978 If the forwarding hook does not exist or returns `NULL', the runtime
43979currently attempts forwarding using an older, deprecated API, and if
43980that fails, it aborts the program.  In future versions of the GNU
43981Objective-C runtime, the runtime will immediately abort.
43982
43983
43984File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
43985
439869 Binary Compatibility
43987**********************
43988
43989Binary compatibility encompasses several related concepts:
43990
43991"application binary interface (ABI)"
43992     The set of runtime conventions followed by all of the tools that
43993     deal with binary representations of a program, including
43994     compilers, assemblers, linkers, and language runtime support.
43995     Some ABIs are formal with a written specification, possibly
43996     designed by multiple interested parties.  Others are simply the
43997     way things are actually done by a particular set of tools.
43998
43999"ABI conformance"
44000     A compiler conforms to an ABI if it generates code that follows
44001     all of the specifications enumerated by that ABI.  A library
44002     conforms to an ABI if it is implemented according to that ABI.  An
44003     application conforms to an ABI if it is built using tools that
44004     conform to that ABI and does not contain source code that
44005     specifically changes behavior specified by the ABI.
44006
44007"calling conventions"
44008     Calling conventions are a subset of an ABI that specify of how
44009     arguments are passed and function results are returned.
44010
44011"interoperability"
44012     Different sets of tools are interoperable if they generate files
44013     that can be used in the same program.  The set of tools includes
44014     compilers, assemblers, linkers, libraries, header files, startup
44015     files, and debuggers.  Binaries produced by different sets of
44016     tools are not interoperable unless they implement the same ABI.
44017     This applies to different versions of the same tools as well as
44018     tools from different vendors.
44019
44020"intercallability"
44021     Whether a function in a binary built by one set of tools can call a
44022     function in a binary built by a different set of tools is a subset
44023     of interoperability.
44024
44025"implementation-defined features"
44026     Language standards include lists of implementation-defined
44027     features whose behavior can vary from one implementation to
44028     another.  Some of these features are normally covered by a
44029     platform's ABI and others are not.  The features that are not
44030     covered by an ABI generally affect how a program behaves, but not
44031     intercallability.
44032
44033"compatibility"
44034     Conformance to the same ABI and the same behavior of
44035     implementation-defined features are both relevant for
44036     compatibility.
44037
44038 The application binary interface implemented by a C or C++ compiler
44039affects code generation and runtime support for:
44040
44041   * size and alignment of data types
44042
44043   * layout of structured types
44044
44045   * calling conventions
44046
44047   * register usage conventions
44048
44049   * interfaces for runtime arithmetic support
44050
44051   * object file formats
44052
44053 In addition, the application binary interface implemented by a C++
44054compiler affects code generation and runtime support for:
44055   * name mangling
44056
44057   * exception handling
44058
44059   * invoking constructors and destructors
44060
44061   * layout, alignment, and padding of classes
44062
44063   * layout and alignment of virtual tables
44064
44065 Some GCC compilation options cause the compiler to generate code that
44066does not conform to the platform's default ABI.  Other options cause
44067different program behavior for implementation-defined features that are
44068not covered by an ABI.  These options are provided for consistency with
44069other compilers that do not follow the platform's default ABI or the
44070usual behavior of implementation-defined features for the platform.  Be
44071very careful about using such options.
44072
44073 Most platforms have a well-defined ABI that covers C code, but ABIs
44074that cover C++ functionality are not yet common.
44075
44076 Starting with GCC 3.2, GCC binary conventions for C++ are based on a
44077written, vendor-neutral C++ ABI that was designed to be specific to
4407864-bit Itanium but also includes generic specifications that apply to
44079any platform.  This C++ ABI is also implemented by other compiler
44080vendors on some platforms, notably GNU/Linux and BSD systems.  We have
44081tried hard to provide a stable ABI that will be compatible with future
44082GCC releases, but it is possible that we will encounter problems that
44083make this difficult.  Such problems could include different
44084interpretations of the C++ ABI by different vendors, bugs in the ABI, or
44085bugs in the implementation of the ABI in different compilers.  GCC's
44086`-Wabi' switch warns when G++ generates code that is probably not
44087compatible with the C++ ABI.
44088
44089 The C++ library used with a C++ compiler includes the Standard C++
44090Library, with functionality defined in the C++ Standard, plus language
44091runtime support.  The runtime support is included in a C++ ABI, but
44092there is no formal ABI for the Standard C++ Library.  Two
44093implementations of that library are interoperable if one follows the
44094de-facto ABI of the other and if they are both built with the same
44095compiler, or with compilers that conform to the same ABI for C++
44096compiler and runtime support.
44097
44098 When G++ and another C++ compiler conform to the same C++ ABI, but the
44099implementations of the Standard C++ Library that they normally use do
44100not follow the same ABI for the Standard C++ Library, object files
44101built with those compilers can be used in the same program only if they
44102use the same C++ library.  This requires specifying the location of the
44103C++ library header files when invoking the compiler whose usual library
44104is not being used.  The location of GCC's C++ header files depends on
44105how the GCC build was configured, but can be seen by using the G++ `-v'
44106option.  With default configuration options for G++ 3.3 the compile
44107line for a different C++ compiler needs to include
44108
44109         -IGCC_INSTALL_DIRECTORY/include/c++/3.3
44110
44111 Similarly, compiling code with G++ that must use a C++ library other
44112than the GNU C++ library requires specifying the location of the header
44113files for that other library.
44114
44115 The most straightforward way to link a program to use a particular C++
44116library is to use a C++ driver that specifies that C++ library by
44117default.  The `g++' driver, for example, tells the linker where to find
44118GCC's C++ library (`libstdc++') plus the other libraries and startup
44119files it needs, in the proper order.
44120
44121 If a program must use a different C++ library and it's not possible to
44122do the final link using a C++ driver that uses that library by default,
44123it is necessary to tell `g++' the location and name of that library.
44124It might also be necessary to specify different startup files and other
44125runtime support libraries, and to suppress the use of GCC's support
44126libraries with one or more of the options `-nostdlib', `-nostartfiles',
44127and `-nodefaultlibs'.
44128
44129
44130File: gcc.info,  Node: Gcov,  Next: Gcov-tool,  Prev: Compatibility,  Up: Top
44131
4413210 `gcov'--a Test Coverage Program
44133**********************************
44134
44135`gcov' is a tool you can use in conjunction with GCC to test code
44136coverage in your programs.
44137
44138* Menu:
44139
44140* Gcov Intro::                  Introduction to gcov.
44141* Invoking Gcov::               How to use gcov.
44142* Gcov and Optimization::       Using gcov with GCC optimization.
44143* Gcov Data Files::             The files used by gcov.
44144* Cross-profiling::             Data file relocation.
44145
44146
44147File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
44148
4414910.1 Introduction to `gcov'
44150===========================
44151
44152`gcov' is a test coverage program.  Use it in concert with GCC to
44153analyze your programs to help create more efficient, faster running
44154code and to discover untested parts of your program.  You can use
44155`gcov' as a profiling tool to help discover where your optimization
44156efforts will best affect your code.  You can also use `gcov' along with
44157the other profiling tool, `gprof', to assess which parts of your code
44158use the greatest amount of computing time.
44159
44160 Profiling tools help you analyze your code's performance.  Using a
44161profiler such as `gcov' or `gprof', you can find out some basic
44162performance statistics, such as:
44163
44164   * how often each line of code executes
44165
44166   * what lines of code are actually executed
44167
44168   * how much computing time each section of code uses
44169
44170 Once you know these things about how your code works when compiled, you
44171can look at each module to see which modules should be optimized.
44172`gcov' helps you determine where to work on optimization.
44173
44174 Software developers also use coverage testing in concert with
44175testsuites, to make sure software is actually good enough for a release.
44176Testsuites can verify that a program works as expected; a coverage
44177program tests to see how much of the program is exercised by the
44178testsuite.  Developers can then determine what kinds of test cases need
44179to be added to the testsuites to create both better testing and a better
44180final product.
44181
44182 You should compile your code without optimization if you plan to use
44183`gcov' because the optimization, by combining some lines of code into
44184one function, may not give you as much information as you need to look
44185for `hot spots' where the code is using a great deal of computer time.
44186Likewise, because `gcov' accumulates statistics by line (at the lowest
44187resolution), it works best with a programming style that places only
44188one statement on each line.  If you use complicated macros that expand
44189to loops or to other control structures, the statistics are less
44190helpful--they only report on the line where the macro call appears.  If
44191your complex macros behave like functions, you can replace them with
44192inline functions to solve this problem.
44193
44194 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how
44195many times each line of a source file `SOURCEFILE.c' has executed.  You
44196can use these logfiles along with `gprof' to aid in fine-tuning the
44197performance of your programs.  `gprof' gives timing information you can
44198use along with the information you get from `gcov'.
44199
44200 `gcov' works only on code compiled with GCC.  It is not compatible
44201with any other profiling or test coverage mechanism.
44202
44203
44204File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
44205
4420610.2 Invoking `gcov'
44207====================
44208
44209     gcov [OPTIONS] FILES
44210
44211 `gcov' accepts the following options:
44212
44213`-h'
44214`--help'
44215     Display help about using `gcov' (on the standard output), and exit
44216     without doing any further processing.
44217
44218`-v'
44219`--version'
44220     Display the `gcov' version number (on the standard output), and
44221     exit without doing any further processing.
44222
44223`-a'
44224`--all-blocks'
44225     Write individual execution counts for every basic block.  Normally
44226     gcov outputs execution counts only for the main blocks of a line.
44227     With this option you can determine if blocks within a single line
44228     are not being executed.
44229
44230`-b'
44231`--branch-probabilities'
44232     Write branch frequencies to the output file, and write branch
44233     summary info to the standard output.  This option allows you to
44234     see how often each branch in your program was taken.
44235     Unconditional branches will not be shown, unless the `-u' option
44236     is given.
44237
44238`-c'
44239`--branch-counts'
44240     Write branch frequencies as the number of branches taken, rather
44241     than the percentage of branches taken.
44242
44243`-n'
44244`--no-output'
44245     Do not create the `gcov' output file.
44246
44247`-l'
44248`--long-file-names'
44249     Create long file names for included source files.  For example, if
44250     the header file `x.h' contains code, and was included in the file
44251     `a.c', then running `gcov' on the file `a.c' will produce an
44252     output file called `a.c##x.h.gcov' instead of `x.h.gcov'.  This
44253     can be useful if `x.h' is included in multiple source files and
44254     you want to see the individual contributions.  If you use the `-p'
44255     option, both the including and included file names will be
44256     complete path names.
44257
44258`-p'
44259`--preserve-paths'
44260     Preserve complete path information in the names of generated
44261     `.gcov' files.  Without this option, just the filename component is
44262     used.  With this option, all directories are used, with `/'
44263     characters translated to `#' characters, `.' directory components
44264     removed and unremoveable `..' components renamed to `^'.  This is
44265     useful if sourcefiles are in several different directories.
44266
44267`-r'
44268`--relative-only'
44269     Only output information about source files with a relative pathname
44270     (after source prefix elision).  Absolute paths are usually system
44271     header files and coverage of any inline functions therein is
44272     normally uninteresting.
44273
44274`-f'
44275`--function-summaries'
44276     Output summaries for each function in addition to the file level
44277     summary.
44278
44279`-o DIRECTORY|FILE'
44280`--object-directory DIRECTORY'
44281`--object-file FILE'
44282     Specify either the directory containing the gcov data files, or the
44283     object path name.  The `.gcno', and `.gcda' data files are
44284     searched for using this option.  If a directory is specified, the
44285     data files are in that directory and named after the input file
44286     name, without its extension.  If a file is specified here, the
44287     data files are named after that file, without its extension.
44288
44289`-s DIRECTORY'
44290`--source-prefix DIRECTORY'
44291     A prefix for source file names to remove when generating the output
44292     coverage files.  This option is useful when building in a separate
44293     directory, and the pathname to the source directory is not wanted
44294     when determining the output file names.  Note that this prefix
44295     detection is applied before determining whether the source file is
44296     absolute.
44297
44298`-u'
44299`--unconditional-branches'
44300     When branch probabilities are given, include those of
44301     unconditional branches.  Unconditional branches are normally not
44302     interesting.
44303
44304`-d'
44305`--display-progress'
44306     Display the progress on the standard output.
44307
44308`-i'
44309`--intermediate-format'
44310     Output gcov file in an easy-to-parse intermediate text format that
44311     can be used by `lcov' or other tools. The output is a single
44312     `.gcov' file per `.gcda' file. No source code is required.
44313
44314     The format of the intermediate `.gcov' file is plain text with one
44315     entry per line
44316
44317          file:SOURCE_FILE_NAME
44318          function:LINE_NUMBER,EXECUTION_COUNT,FUNCTION_NAME
44319          lcount:LINE NUMBER,EXECUTION_COUNT
44320          branch:LINE_NUMBER,BRANCH_COVERAGE_TYPE
44321
44322          Where the BRANCH_COVERAGE_TYPE is
44323             notexec (Branch not executed)
44324             taken (Branch executed and taken)
44325             nottaken (Branch executed, but not taken)
44326
44327          There can be multiple FILE entries in an intermediate gcov
44328          file. All entries following a FILE pertain to that source file
44329          until the next FILE entry.
44330
44331     Here is a sample when `-i' is used in conjunction with `-b' option:
44332
44333          file:array.cc
44334          function:11,1,_Z3sumRKSt6vectorIPiSaIS0_EE
44335          function:22,1,main
44336          lcount:11,1
44337          lcount:12,1
44338          lcount:14,1
44339          branch:14,taken
44340          lcount:26,1
44341          branch:28,nottaken
44342
44343`-m'
44344`--demangled-names'
44345     Display demangled function names in output. The default is to show
44346     mangled function names.
44347
44348
44349 `gcov' should be run with the current directory the same as that when
44350you invoked the compiler.  Otherwise it will not be able to locate the
44351source files.  `gcov' produces files called `MANGLEDNAME.gcov' in the
44352current directory.  These contain the coverage information of the
44353source file they correspond to.  One `.gcov' file is produced for each
44354source (or header) file containing code, which was compiled to produce
44355the data files.  The MANGLEDNAME part of the output file name is
44356usually simply the source file name, but can be something more
44357complicated if the `-l' or `-p' options are given.  Refer to those
44358options for details.
44359
44360 If you invoke `gcov' with multiple input files, the contributions from
44361each input file are summed.  Typically you would invoke it with the
44362same list of files as the final link of your executable.
44363
44364 The `.gcov' files contain the `:' separated fields along with program
44365source code.  The format is
44366
44367     EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
44368
44369 Additional block information may succeed each line, when requested by
44370command line option.  The EXECUTION_COUNT is `-' for lines containing
44371no code.  Unexecuted lines are marked `#####' or `====', depending on
44372whether they are reachable by non-exceptional paths or only exceptional
44373paths such as C++ exception handlers, respectively.
44374
44375 Some lines of information at the start have LINE_NUMBER of zero.
44376These preamble lines are of the form
44377
44378     -:0:TAG:VALUE
44379
44380 The ordering and number of these preamble lines will be augmented as
44381`gcov' development progresses -- do not rely on them remaining
44382unchanged.  Use TAG to locate a particular preamble line.
44383
44384 The additional block information is of the form
44385
44386     TAG INFORMATION
44387
44388 The INFORMATION is human readable, but designed to be simple enough
44389for machine parsing too.
44390
44391 When printing percentages, 0% and 100% are only printed when the values
44392are _exactly_ 0% and 100% respectively.  Other values which would
44393conventionally be rounded to 0% or 100% are instead printed as the
44394nearest non-boundary value.
44395
44396 When using `gcov', you must first compile your program with two
44397special GCC options: `-fprofile-arcs -ftest-coverage'.  This tells the
44398compiler to generate additional information needed by gcov (basically a
44399flow graph of the program) and also includes additional code in the
44400object files for generating the extra profiling information needed by
44401gcov.  These additional files are placed in the directory where the
44402object file is located.
44403
44404 Running the program will cause profile output to be generated.  For
44405each source file compiled with `-fprofile-arcs', an accompanying
44406`.gcda' file will be placed in the object file directory.
44407
44408 Running `gcov' with your program's source file names as arguments will
44409now produce a listing of the code along with frequency of execution for
44410each line.  For example, if your program is called `tmp.c', this is
44411what you see when you use the basic `gcov' facility:
44412
44413     $ gcc -fprofile-arcs -ftest-coverage tmp.c
44414     $ a.out
44415     $ gcov tmp.c
44416     90.00% of 10 source lines executed in file tmp.c
44417     Creating tmp.c.gcov.
44418
44419 The file `tmp.c.gcov' contains output from `gcov'.  Here is a sample:
44420
44421             -:    0:Source:tmp.c
44422             -:    0:Graph:tmp.gcno
44423             -:    0:Data:tmp.gcda
44424             -:    0:Runs:1
44425             -:    0:Programs:1
44426             -:    1:#include <stdio.h>
44427             -:    2:
44428             -:    3:int main (void)
44429             1:    4:{
44430             1:    5:  int i, total;
44431             -:    6:
44432             1:    7:  total = 0;
44433             -:    8:
44434            11:    9:  for (i = 0; i < 10; i++)
44435            10:   10:    total += i;
44436             -:   11:
44437             1:   12:  if (total != 45)
44438         #####:   13:    printf ("Failure\n");
44439             -:   14:  else
44440             1:   15:    printf ("Success\n");
44441             1:   16:  return 0;
44442             -:   17:}
44443
44444 When you use the `-a' option, you will get individual block counts,
44445and the output looks like this:
44446
44447             -:    0:Source:tmp.c
44448             -:    0:Graph:tmp.gcno
44449             -:    0:Data:tmp.gcda
44450             -:    0:Runs:1
44451             -:    0:Programs:1
44452             -:    1:#include <stdio.h>
44453             -:    2:
44454             -:    3:int main (void)
44455             1:    4:{
44456             1:    4-block  0
44457             1:    5:  int i, total;
44458             -:    6:
44459             1:    7:  total = 0;
44460             -:    8:
44461            11:    9:  for (i = 0; i < 10; i++)
44462            11:    9-block  0
44463            10:   10:    total += i;
44464            10:   10-block  0
44465             -:   11:
44466             1:   12:  if (total != 45)
44467             1:   12-block  0
44468         #####:   13:    printf ("Failure\n");
44469         $$$$$:   13-block  0
44470             -:   14:  else
44471             1:   15:    printf ("Success\n");
44472             1:   15-block  0
44473             1:   16:  return 0;
44474             1:   16-block  0
44475             -:   17:}
44476
44477 In this mode, each basic block is only shown on one line - the last
44478line of the block.  A multi-line block will only contribute to the
44479execution count of that last line, and other lines will not be shown to
44480contain code, unless previous blocks end on those lines.  The total
44481execution count of a line is shown and subsequent lines show the
44482execution counts for individual blocks that end on that line.  After
44483each block, the branch and call counts of the block will be shown, if
44484the `-b' option is given.
44485
44486 Because of the way GCC instruments calls, a call count can be shown
44487after a line with no individual blocks.  As you can see, line 13
44488contains a basic block that was not executed.
44489
44490 When you use the `-b' option, your output looks like this:
44491
44492     $ gcov -b tmp.c
44493     90.00% of 10 source lines executed in file tmp.c
44494     80.00% of 5 branches executed in file tmp.c
44495     80.00% of 5 branches taken at least once in file tmp.c
44496     50.00% of 2 calls executed in file tmp.c
44497     Creating tmp.c.gcov.
44498
44499 Here is a sample of a resulting `tmp.c.gcov' file:
44500
44501             -:    0:Source:tmp.c
44502             -:    0:Graph:tmp.gcno
44503             -:    0:Data:tmp.gcda
44504             -:    0:Runs:1
44505             -:    0:Programs:1
44506             -:    1:#include <stdio.h>
44507             -:    2:
44508             -:    3:int main (void)
44509     function main called 1 returned 1 blocks executed 75%
44510             1:    4:{
44511             1:    5:  int i, total;
44512             -:    6:
44513             1:    7:  total = 0;
44514             -:    8:
44515            11:    9:  for (i = 0; i < 10; i++)
44516     branch  0 taken 91% (fallthrough)
44517     branch  1 taken 9%
44518            10:   10:    total += i;
44519             -:   11:
44520             1:   12:  if (total != 45)
44521     branch  0 taken 0% (fallthrough)
44522     branch  1 taken 100%
44523         #####:   13:    printf ("Failure\n");
44524     call    0 never executed
44525             -:   14:  else
44526             1:   15:    printf ("Success\n");
44527     call    0 called 1 returned 100%
44528             1:   16:  return 0;
44529             -:   17:}
44530
44531 For each function, a line is printed showing how many times the
44532function is called, how many times it returns and what percentage of the
44533function's blocks were executed.
44534
44535 For each basic block, a line is printed after the last line of the
44536basic block describing the branch or call that ends the basic block.
44537There can be multiple branches and calls listed for a single source
44538line if there are multiple basic blocks that end on that line.  In this
44539case, the branches and calls are each given a number.  There is no
44540simple way to map these branches and calls back to source constructs.
44541In general, though, the lowest numbered branch or call will correspond
44542to the leftmost construct on the source line.
44543
44544 For a branch, if it was executed at least once, then a percentage
44545indicating the number of times the branch was taken divided by the
44546number of times the branch was executed will be printed.  Otherwise, the
44547message "never executed" is printed.
44548
44549 For a call, if it was executed at least once, then a percentage
44550indicating the number of times the call returned divided by the number
44551of times the call was executed will be printed.  This will usually be
44552100%, but may be less for functions that call `exit' or `longjmp', and
44553thus may not return every time they are called.
44554
44555 The execution counts are cumulative.  If the example program were
44556executed again without removing the `.gcda' file, the count for the
44557number of times each line in the source was executed would be added to
44558the results of the previous run(s).  This is potentially useful in
44559several ways.  For example, it could be used to accumulate data over a
44560number of program runs as part of a test verification suite, or to
44561provide more accurate long-term information over a large number of
44562program runs.
44563
44564 The data in the `.gcda' files is saved immediately before the program
44565exits.  For each source file compiled with `-fprofile-arcs', the
44566profiling code first attempts to read in an existing `.gcda' file; if
44567the file doesn't match the executable (differing number of basic block
44568counts) it will ignore the contents of the file.  It then adds in the
44569new execution counts and finally writes the data to the file.
44570
44571
44572File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
44573
4457410.3 Using `gcov' with GCC Optimization
44575=======================================
44576
44577If you plan to use `gcov' to help optimize your code, you must first
44578compile your program with two special GCC options: `-fprofile-arcs
44579-ftest-coverage'.  Aside from that, you can use any other GCC options;
44580but if you want to prove that every single line in your program was
44581executed, you should not compile with optimization at the same time.
44582On some machines the optimizer can eliminate some simple code lines by
44583combining them with other lines.  For example, code like this:
44584
44585     if (a != b)
44586       c = 1;
44587     else
44588       c = 0;
44589
44590can be compiled into one instruction on some machines.  In this case,
44591there is no way for `gcov' to calculate separate execution counts for
44592each line because there isn't separate code for each line.  Hence the
44593`gcov' output looks like this if you compiled the program with
44594optimization:
44595
44596           100:   12:if (a != b)
44597           100:   13:  c = 1;
44598           100:   14:else
44599           100:   15:  c = 0;
44600
44601 The output shows that this block of code, combined by optimization,
44602executed 100 times.  In one sense this result is correct, because there
44603was only one instruction representing all four of these lines.  However,
44604the output does not indicate how many times the result was 0 and how
44605many times the result was 1.
44606
44607 Inlineable functions can create unexpected line counts.  Line counts
44608are shown for the source code of the inlineable function, but what is
44609shown depends on where the function is inlined, or if it is not inlined
44610at all.
44611
44612 If the function is not inlined, the compiler must emit an out of line
44613copy of the function, in any object file that needs it.  If `fileA.o'
44614and `fileB.o' both contain out of line bodies of a particular
44615inlineable function, they will also both contain coverage counts for
44616that function.  When `fileA.o' and `fileB.o' are linked together, the
44617linker will, on many systems, select one of those out of line bodies
44618for all calls to that function, and remove or ignore the other.
44619Unfortunately, it will not remove the coverage counters for the unused
44620function body.  Hence when instrumented, all but one use of that
44621function will show zero counts.
44622
44623 If the function is inlined in several places, the block structure in
44624each location might not be the same.  For instance, a condition might
44625now be calculable at compile time in some instances.  Because the
44626coverage of all the uses of the inline function will be shown for the
44627same source lines, the line counts themselves might seem inconsistent.
44628
44629 Long-running applications can use the `_gcov_reset' and `_gcov_dump'
44630facilities to restrict profile collection to the program region of
44631interest. Calling `_gcov_reset(void)' will clear all profile counters
44632to zero, and calling `_gcov_dump(void)' will cause the profile
44633information collected at that point to be dumped to `.gcda' output
44634files.
44635
44636
44637File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
44638
4463910.4 Brief Description of `gcov' Data Files
44640===========================================
44641
44642`gcov' uses two files for profiling.  The names of these files are
44643derived from the original _object_ file by substituting the file suffix
44644with either `.gcno', or `.gcda'.  The files contain coverage and
44645profile data stored in a platform-independent format.  The `.gcno'
44646files are placed in the same directory as the object file.  By default,
44647the `.gcda' files are also stored in the same directory as the object
44648file, but the GCC `-fprofile-dir' option may be used to store the
44649`.gcda' files in a separate directory.
44650
44651 The `.gcno' notes file is generated when the source file is compiled
44652with the GCC `-ftest-coverage' option.  It contains information to
44653reconstruct the basic block graphs and assign source line numbers to
44654blocks.
44655
44656 The `.gcda' count data file is generated when a program containing
44657object files built with the GCC `-fprofile-arcs' option is executed.  A
44658separate `.gcda' file is created for each object file compiled with
44659this option.  It contains arc transition counts, value profile counts,
44660and some summary information.
44661
44662 The full details of the file format is specified in `gcov-io.h', and
44663functions provided in that header file should be used to access the
44664coverage files.
44665
44666
44667File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
44668
4466910.5 Data File Relocation to Support Cross-Profiling
44670====================================================
44671
44672Running the program will cause profile output to be generated.  For each
44673source file compiled with `-fprofile-arcs', an accompanying `.gcda'
44674file will be placed in the object file directory. That implicitly
44675requires running the program on the same system as it was built or
44676having the same absolute directory structure on the target system. The
44677program will try to create the needed directory structure, if it is not
44678already present.
44679
44680 To support cross-profiling, a program compiled with `-fprofile-arcs'
44681can relocate the data files based on two environment variables:
44682
44683   * GCOV_PREFIX contains the prefix to add to the absolute paths in
44684     the object file. Prefix can be absolute, or relative.  The default
44685     is no prefix.
44686
44687   * GCOV_PREFIX_STRIP indicates the how many initial directory names
44688     to strip off the hardwired absolute paths. Default value is 0.
44689
44690     _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
44691     undefined,  then a relative path is made out of the hardwired
44692     absolute paths.
44693
44694 For example, if the object file `/user/build/foo.o' was built with
44695`-fprofile-arcs', the final executable will try to create the data file
44696`/user/build/foo.gcda' when running on the target system.  This will
44697fail if the corresponding directory does not exist and it is unable to
44698create it.  This can be overcome by, for example, setting the
44699environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'.
44700Such a setting will name the data file `/target/run/build/foo.gcda'.
44701
44702 You must move the data files to the expected directory tree in order to
44703use them for profile directed optimizations (`--use-profile'), or to
44704use the `gcov' tool.
44705
44706
44707File: gcc.info,  Node: Gcov-tool,  Next: Trouble,  Prev: Gcov,  Up: Top
44708
4470911 `gcov-tool'--an Offline Gcda Profile Processing Tool
44710*******************************************************
44711
44712`gcov-tool' is a tool you can use in conjunction with GCC to manipulate
44713or process gcda profile files offline.
44714
44715* Menu:
44716
44717* Gcov-tool Intro::             Introduction to gcov-tool.
44718* Invoking Gcov-tool::          How to use gcov-tool.
44719
44720
44721File: gcc.info,  Node: Gcov-tool Intro,  Next: Invoking Gcov-tool,  Up: Gcov-tool
44722
4472311.1 Introduction to `gcov-tool'
44724================================
44725
44726`gcov-tool' is an offline tool to process gcc's gcda profile files.
44727
44728 Current gcov-tool supports the following functionalities:
44729
44730   * merge two sets of profiles with weights.
44731
44732   * read one set of profile and rewrite profile contents. One can
44733     scale or normalize the count values.
44734
44735 Examples of the use cases for this tool are:
44736   * Collect the profiles for different set of inputs, and use this
44737     tool to merge them. One can specify the weight to factor in the
44738     relative importance of each input.
44739
44740   * Rewrite the profile after removing a subset of the gcda files,
44741     while maintaining the consistency of the summary and the histogram.
44742
44743   * It can also be used to debug or libgcov code as the tools shares
44744     the majority code as the runtime library.
44745
44746 Note that for the merging operation, this profile generated offline may
44747contain slight different values from the online merged profile. Here are
44748a list of typical differences:
44749
44750   * histogram difference: This offline tool recomputes the histogram
44751     after merging the counters. The resulting histogram, therefore, is
44752     precise. The online merging does not have this capability - the
44753     histogram is merged from two histograms and the result is an
44754     approximation.
44755
44756   * summary checksum difference: Summary checksum uses a CRC32
44757     operation. The value depends on the link list order of gcov-info
44758     objects. This order is different in gcov-tool from that in the
44759     online merge. It's expected to have different summary checksums.
44760     It does not really matter as the compiler does not use this
44761     checksum anywhere.
44762
44763   * value profile counter values difference: Some counter values for
44764     value profile are runtime dependent, like heap addresses. It's
44765     normal to see some difference in these kind of counters.
44766
44767
44768File: gcc.info,  Node: Invoking Gcov-tool,  Prev: Gcov-tool Intro,  Up: Gcov-tool
44769
4477011.2 Invoking `gcov-tool'
44771=========================
44772
44773     gcov-tool [GLOBAL-OPTIONS] SUB_COMMAND [SUB_COMMAND-OPTIONS] PROFILE_DIR
44774
44775 `gcov-tool' accepts the following options:
44776
44777`-h'
44778`--help'
44779     Display help about using `gcov-tool' (on the standard output), and
44780     exit without doing any further processing.
44781
44782`-v'
44783`--version'
44784     Display the `gcov-tool' version number (on the standard output),
44785     and exit without doing any further processing.
44786
44787`merge'
44788     Merge two profile directories.
44789
44790    `-v'
44791    `--verbose'
44792          Set the verbose mode.
44793
44794    `-o DIRECTORY'
44795    `--output DIRECTORY'
44796          Set the output profile directory. Default output directory
44797          name is MERGED_PROFILE.
44798
44799    `-w W1,W2'
44800    `--weight W1,W2'
44801          Set the merge weights of the DIRECTORY1 and DIRECTORY2,
44802          respectively. The default weights are 1 for both.
44803
44804`rewrite'
44805     Read the specified profile directory and rewrite to a new
44806     directory.
44807
44808    `-v'
44809    `--verbose'
44810          Set the verbose mode.
44811
44812    `-o DIRECTORY'
44813    `--output DIRECTORY'
44814          Set the output profile directory. Default output name is
44815          REWRITE_PROFILE.
44816
44817    `-s FLOAT_OR_SIMPLE-FRAC_VALUE'
44818    `--scale FLOAT_OR_SIMPLE-FRAC_VALUE'
44819          Scale the profile counters. The specified value can be in
44820          floating point value, or simple fraction value form, such 1,
44821          2, 2/3, and 5/3.
44822
44823    `-n LONG_LONG_VALUE'
44824    `--normalize <long_long_value>'
44825          Normalize the profile. The specified value is the max counter
44826          value in the new profile.
44827
44828`overlap'
44829     Computer the overlap score between the two specified profile
44830     directories.  The overlap score is computed based on the arc
44831     profiles. It is defined as the sum of min (p1_counter[i] /
44832     p1_sum_all, p2_counter[i] / p2_sum_all), for all arc counter i,
44833     where p1_counter[i] and p2_counter[i] are two matched counters and
44834     p1_sum_all and p2_sum_all are the sum of counter values in profile
44835     1 and profile 2, respectively.
44836
44837    `-v'
44838    `--verbose'
44839          Set the verbose mode.
44840
44841    `-h'
44842    `--hotonly'
44843          Only print info for hot objects/functions.
44844
44845    `-f'
44846    `--function'
44847          Print function level overlap score.
44848
44849    `-F'
44850    `--fullname'
44851          Print full gcda filename.
44852
44853    `-o'
44854    `--object'
44855          Print object level overlap score.
44856
44857    `-t FLOAT'
44858    `--hot_threshold <float>'
44859          Set the threshold for hot counter value.
44860
44861
44862
44863File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov-tool,  Up: Top
44864
4486512 Known Causes of Trouble with GCC
44866***********************************
44867
44868This section describes known problems that affect users of GCC.  Most
44869of these are not GCC bugs per se--if they were, we would fix them.  But
44870the result for a user may be like the result of a bug.
44871
44872 Some of these problems are due to bugs in other software, some are
44873missing features that are too much work to add, and some are places
44874where people's opinions differ as to what is best.
44875
44876* Menu:
44877
44878* Actual Bugs::         Bugs we will fix later.
44879* Interoperation::      Problems using GCC with other compilers,
44880                        and with certain linkers, assemblers and debuggers.
44881* Incompatibilities::   GCC is incompatible with traditional C.
44882* Fixed Headers::       GCC uses corrected versions of system header files.
44883                        This is necessary, but doesn't always work smoothly.
44884* Standard Libraries::  GCC uses the system C library, which might not be
44885                        compliant with the ISO C standard.
44886* Disappointments::     Regrettable things we can't change, but not quite bugs.
44887* C++ Misunderstandings:: Common misunderstandings with GNU C++.
44888* Non-bugs::            Things we think are right, but some others disagree.
44889* Warnings and Errors:: Which problems in your code get warnings,
44890                        and which get errors.
44891
44892
44893File: gcc.info,  Node: Actual Bugs,  Next: Interoperation,  Up: Trouble
44894
4489512.1 Actual Bugs We Haven't Fixed Yet
44896=====================================
44897
44898   * The `fixincludes' script interacts badly with automounters; if the
44899     directory of system header files is automounted, it tends to be
44900     unmounted while `fixincludes' is running.  This would seem to be a
44901     bug in the automounter.  We don't know any good way to work around
44902     it.
44903
44904
44905File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Actual Bugs,  Up: Trouble
44906
4490712.2 Interoperation
44908===================
44909
44910This section lists various difficulties encountered in using GCC
44911together with other compilers or with the assemblers, linkers,
44912libraries and debuggers on certain systems.
44913
44914   * On many platforms, GCC supports a different ABI for C++ than do
44915     other compilers, so the object files compiled by GCC cannot be
44916     used with object files generated by another C++ compiler.
44917
44918     An area where the difference is most apparent is name mangling.
44919     The use of different name mangling is intentional, to protect you
44920     from more subtle problems.  Compilers differ as to many internal
44921     details of C++ implementation, including: how class instances are
44922     laid out, how multiple inheritance is implemented, and how virtual
44923     function calls are handled.  If the name encoding were made the
44924     same, your programs would link against libraries provided from
44925     other compilers--but the programs would then crash when run.
44926     Incompatible libraries are then detected at link time, rather than
44927     at run time.
44928
44929   * On some BSD systems, including some versions of Ultrix, use of
44930     profiling causes static variable destructors (currently used only
44931     in C++) not to be run.
44932
44933   * On a SPARC, GCC aligns all values of type `double' on an 8-byte
44934     boundary, and it expects every `double' to be so aligned.  The Sun
44935     compiler usually gives `double' values 8-byte alignment, with one
44936     exception: function arguments of type `double' may not be aligned.
44937
44938     As a result, if a function compiled with Sun CC takes the address
44939     of an argument of type `double' and passes this pointer of type
44940     `double *' to a function compiled with GCC, dereferencing the
44941     pointer may cause a fatal signal.
44942
44943     One way to solve this problem is to compile your entire program
44944     with GCC.  Another solution is to modify the function that is
44945     compiled with Sun CC to copy the argument into a local variable;
44946     local variables are always properly aligned.  A third solution is
44947     to modify the function that uses the pointer to dereference it via
44948     the following function `access_double' instead of directly with
44949     `*':
44950
44951          inline double
44952          access_double (double *unaligned_ptr)
44953          {
44954            union d2i { double d; int i[2]; };
44955
44956            union d2i *p = (union d2i *) unaligned_ptr;
44957            union d2i u;
44958
44959            u.i[0] = p->i[0];
44960            u.i[1] = p->i[1];
44961
44962            return u.d;
44963          }
44964
44965     Storing into the pointer can be done likewise with the same union.
44966
44967   * On Solaris, the `malloc' function in the `libmalloc.a' library may
44968     allocate memory that is only 4 byte aligned.  Since GCC on the
44969     SPARC assumes that doubles are 8 byte aligned, this may result in a
44970     fatal signal if doubles are stored in memory allocated by the
44971     `libmalloc.a' library.
44972
44973     The solution is to not use the `libmalloc.a' library.  Use instead
44974     `malloc' and related functions from `libc.a'; they do not have
44975     this problem.
44976
44977   * On the HP PA machine, ADB sometimes fails to work on functions
44978     compiled with GCC.  Specifically, it fails to work on functions
44979     that use `alloca' or variable-size arrays.  This is because GCC
44980     doesn't generate HP-UX unwind descriptors for such functions.  It
44981     may even be impossible to generate them.
44982
44983   * Debugging (`-g') is not supported on the HP PA machine, unless you
44984     use the preliminary GNU tools.
44985
44986   * Taking the address of a label may generate errors from the HP-UX
44987     PA assembler.  GAS for the PA does not have this problem.
44988
44989   * Using floating point parameters for indirect calls to static
44990     functions will not work when using the HP assembler.  There simply
44991     is no way for GCC to specify what registers hold arguments for
44992     static functions when using the HP assembler.  GAS for the PA does
44993     not have this problem.
44994
44995   * In extremely rare cases involving some very large functions you may
44996     receive errors from the HP linker complaining about an out of
44997     bounds unconditional branch offset.  This used to occur more often
44998     in previous versions of GCC, but is now exceptionally rare.  If
44999     you should run into it, you can work around by making your
45000     function smaller.
45001
45002   * GCC compiled code sometimes emits warnings from the HP-UX
45003     assembler of the form:
45004
45005          (warning) Use of GR3 when
45006            frame >= 8192 may cause conflict.
45007
45008     These warnings are harmless and can be safely ignored.
45009
45010   * In extremely rare cases involving some very large functions you may
45011     receive errors from the AIX Assembler complaining about a
45012     displacement that is too large.  If you should run into it, you
45013     can work around by making your function smaller.
45014
45015   * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker
45016     semantics which merges global symbols between libraries and
45017     applications, especially necessary for C++ streams functionality.
45018     This is not the default behavior of AIX shared libraries and
45019     dynamic linking.  `libstdc++.a' is built on AIX with
45020     "runtime-linking" enabled so that symbol merging can occur.  To
45021     utilize this feature, the application linked with `libstdc++.a'
45022     must include the `-Wl,-brtl' flag on the link line.  G++ cannot
45023     impose this because this option may interfere with the semantics
45024     of the user program and users may not always use `g++' to link his
45025     or her application.  Applications are not required to use the
45026     `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a'
45027     library which is not dependent on the symbol merging semantics
45028     will continue to function correctly.
45029
45030   * An application can interpose its own definition of functions for
45031     functions invoked by `libstdc++.a' with "runtime-linking" enabled
45032     on AIX.  To accomplish this the application must be linked with
45033     "runtime-linking" option and the functions explicitly must be
45034     exported by the application (`-Wl,-brtl,-bE:exportfile').
45035
45036   * AIX on the RS/6000 provides support (NLS) for environments outside
45037     of the United States.  Compilers and assemblers use NLS to support
45038     locale-specific representations of various objects including
45039     floating-point numbers (`.' vs `,' for separating decimal
45040     fractions).  There have been problems reported where the library
45041     linked with GCC does not produce the same floating-point formats
45042     that the assembler accepts.  If you have this problem, set the
45043     `LANG' environment variable to `C' or `En_US'.
45044
45045   * Even if you specify `-fdollars-in-identifiers', you cannot
45046     successfully use `$' in identifiers on the RS/6000 due to a
45047     restriction in the IBM assembler.  GAS supports these identifiers.
45048
45049
45050
45051File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
45052
4505312.3 Incompatibilities of GCC
45054=============================
45055
45056There are several noteworthy incompatibilities between GNU C and K&R
45057(non-ISO) versions of C.
45058
45059   * GCC normally makes string constants read-only.  If several
45060     identical-looking string constants are used, GCC stores only one
45061     copy of the string.
45062
45063     One consequence is that you cannot call `mktemp' with a string
45064     constant argument.  The function `mktemp' always alters the string
45065     its argument points to.
45066
45067     Another consequence is that `sscanf' does not work on some very
45068     old systems when passed a string constant as its format control
45069     string or input.  This is because `sscanf' incorrectly tries to
45070     write into the string constant.  Likewise `fscanf' and `scanf'.
45071
45072     The solution to these problems is to change the program to use
45073     `char'-array variables with initialization strings for these
45074     purposes instead of string constants.
45075
45076   * `-2147483648' is positive.
45077
45078     This is because 2147483648 cannot fit in the type `int', so
45079     (following the ISO C rules) its data type is `unsigned long int'.
45080     Negating this value yields 2147483648 again.
45081
45082   * GCC does not substitute macro arguments when they appear inside of
45083     string constants.  For example, the following macro in GCC
45084
45085          #define foo(a) "a"
45086
45087     will produce output `"a"' regardless of what the argument A is.
45088
45089   * When you use `setjmp' and `longjmp', the only automatic variables
45090     guaranteed to remain valid are those declared `volatile'.  This is
45091     a consequence of automatic register allocation.  Consider this
45092     function:
45093
45094          jmp_buf j;
45095
45096          foo ()
45097          {
45098            int a, b;
45099
45100            a = fun1 ();
45101            if (setjmp (j))
45102              return a;
45103
45104            a = fun2 ();
45105            /* `longjmp (j)' may occur in `fun3'. */
45106            return a + fun3 ();
45107          }
45108
45109     Here `a' may or may not be restored to its first value when the
45110     `longjmp' occurs.  If `a' is allocated in a register, then its
45111     first value is restored; otherwise, it keeps the last value stored
45112     in it.
45113
45114     If you use the `-W' option with the `-O' option, you will get a
45115     warning when GCC thinks such a problem might be possible.
45116
45117   * Programs that use preprocessing directives in the middle of macro
45118     arguments do not work with GCC.  For example, a program like this
45119     will not work:
45120
45121          foobar (
45122          #define luser
45123                  hack)
45124
45125     ISO C does not permit such a construct.
45126
45127   * K&R compilers allow comments to cross over an inclusion boundary
45128     (i.e. started in an include file and ended in the including file).
45129
45130   * Declarations of external variables and functions within a block
45131     apply only to the block containing the declaration.  In other
45132     words, they have the same scope as any other declaration in the
45133     same place.
45134
45135     In some other C compilers, an `extern' declaration affects all the
45136     rest of the file even if it happens within a block.
45137
45138   * In traditional C, you can combine `long', etc., with a typedef
45139     name, as shown here:
45140
45141          typedef int foo;
45142          typedef long foo bar;
45143
45144     In ISO C, this is not allowed: `long' and other type modifiers
45145     require an explicit `int'.
45146
45147   * PCC allows typedef names to be used as function parameters.
45148
45149   * Traditional C allows the following erroneous pair of declarations
45150     to appear together in a given scope:
45151
45152          typedef int foo;
45153          typedef foo foo;
45154
45155   * GCC treats all characters of identifiers as significant.
45156     According to K&R-1 (2.2), "No more than the first eight characters
45157     are significant, although more may be used.".  Also according to
45158     K&R-1 (2.2), "An identifier is a sequence of letters and digits;
45159     the first character must be a letter.  The underscore _ counts as
45160     a letter.", but GCC also allows dollar signs in identifiers.
45161
45162   * PCC allows whitespace in the middle of compound assignment
45163     operators such as `+='.  GCC, following the ISO standard, does not
45164     allow this.
45165
45166   * GCC complains about unterminated character constants inside of
45167     preprocessing conditionals that fail.  Some programs have English
45168     comments enclosed in conditionals that are guaranteed to fail; if
45169     these comments contain apostrophes, GCC will probably report an
45170     error.  For example, this code would produce an error:
45171
45172          #if 0
45173          You can't expect this to work.
45174          #endif
45175
45176     The best solution to such a problem is to put the text into an
45177     actual C comment delimited by `/*...*/'.
45178
45179   * Many user programs contain the declaration `long time ();'.  In the
45180     past, the system header files on many systems did not actually
45181     declare `time', so it did not matter what type your program
45182     declared it to return.  But in systems with ISO C headers, `time'
45183     is declared to return `time_t', and if that is not the same as
45184     `long', then `long time ();' is erroneous.
45185
45186     The solution is to change your program to use appropriate system
45187     headers (`<time.h>' on systems with ISO C headers) and not to
45188     declare `time' if the system header files declare it, or failing
45189     that to use `time_t' as the return type of `time'.
45190
45191   * When compiling functions that return `float', PCC converts it to a
45192     double.  GCC actually returns a `float'.  If you are concerned
45193     with PCC compatibility, you should declare your functions to return
45194     `double'; you might as well say what you mean.
45195
45196   * When compiling functions that return structures or unions, GCC
45197     output code normally uses a method different from that used on most
45198     versions of Unix.  As a result, code compiled with GCC cannot call
45199     a structure-returning function compiled with PCC, and vice versa.
45200
45201     The method used by GCC is as follows: a structure or union which is
45202     1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
45203     union with any other size is stored into an address supplied by
45204     the caller (usually in a special, fixed register, but on some
45205     machines it is passed on the stack).  The target hook
45206     `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
45207
45208     By contrast, PCC on most target machines returns structures and
45209     unions of any size by copying the data into an area of static
45210     storage, and then returning the address of that storage as if it
45211     were a pointer value.  The caller must copy the data from that
45212     memory area to the place where the value is wanted.  GCC does not
45213     use this method because it is slower and nonreentrant.
45214
45215     On some newer machines, PCC uses a reentrant convention for all
45216     structure and union returning.  GCC on most of these machines uses
45217     a compatible convention when returning structures and unions in
45218     memory, but still returns small structures and unions in registers.
45219
45220     You can tell GCC to use a compatible convention for all structure
45221     and union returning with the option `-fpcc-struct-return'.
45222
45223   * GCC complains about program fragments such as `0x74ae-0x4000'
45224     which appear to be two hexadecimal constants separated by the minus
45225     operator.  Actually, this string is a single "preprocessing token".
45226     Each such token must correspond to one token in C.  Since this
45227     does not, GCC prints an error message.  Although it may appear
45228     obvious that what is meant is an operator and two values, the ISO
45229     C standard specifically requires that this be treated as erroneous.
45230
45231     A "preprocessing token" is a "preprocessing number" if it begins
45232     with a digit and is followed by letters, underscores, digits,
45233     periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-'
45234     character sequences.  (In strict C90 mode, the sequences `p+',
45235     `p-', `P+' and `P-' cannot appear in preprocessing numbers.)
45236
45237     To make the above program fragment valid, place whitespace in
45238     front of the minus sign.  This whitespace will end the
45239     preprocessing number.
45240
45241
45242File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
45243
4524412.4 Fixed Header Files
45245=======================
45246
45247GCC needs to install corrected versions of some system header files.
45248This is because most target systems have some header files that won't
45249work with GCC unless they are changed.  Some have bugs, some are
45250incompatible with ISO C, and some depend on special features of other
45251compilers.
45252
45253 Installing GCC automatically creates and installs the fixed header
45254files, by running a program called `fixincludes'.  Normally, you don't
45255need to pay attention to this.  But there are cases where it doesn't do
45256the right thing automatically.
45257
45258   * If you update the system's header files, such as by installing a
45259     new system version, the fixed header files of GCC are not
45260     automatically updated.  They can be updated using the `mkheaders'
45261     script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
45262
45263   * On some systems, header file directories contain machine-specific
45264     symbolic links in certain places.  This makes it possible to share
45265     most of the header files among hosts running the same version of
45266     the system on different machine models.
45267
45268     The programs that fix the header files do not understand this
45269     special way of using symbolic links; therefore, the directory of
45270     fixed header files is good only for the machine model used to
45271     build it.
45272
45273     It is possible to make separate sets of fixed header files for the
45274     different machine models, and arrange a structure of symbolic
45275     links so as to use the proper set, but you'll have to do this by
45276     hand.
45277
45278
45279File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
45280
4528112.5 Standard Libraries
45282=======================
45283
45284GCC by itself attempts to be a conforming freestanding implementation.
45285*Note Language Standards Supported by GCC: Standards, for details of
45286what this means.  Beyond the library facilities required of such an
45287implementation, the rest of the C library is supplied by the vendor of
45288the operating system.  If that C library doesn't conform to the C
45289standards, then your programs might get warnings (especially when using
45290`-Wall') that you don't expect.
45291
45292 For example, the `sprintf' function on SunOS 4.1.3 returns `char *'
45293while the C standard says that `sprintf' returns an `int'.  The
45294`fixincludes' program could make the prototype for this function match
45295the Standard, but that would be wrong, since the function will still
45296return `char *'.
45297
45298 If you need a Standard compliant library, then you need to find one, as
45299GCC does not provide one.  The GNU C library (called `glibc') provides
45300ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
45301HURD-based GNU systems; no recent version of it supports other systems,
45302though some very old versions did.  Version 2.2 of the GNU C library
45303includes nearly complete C99 support.  You could also ask your
45304operating system vendor if newer libraries are available.
45305
45306
45307File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
45308
4530912.6 Disappointments and Misunderstandings
45310==========================================
45311
45312These problems are perhaps regrettable, but we don't know any practical
45313way around them.
45314
45315   * Certain local variables aren't recognized by debuggers when you
45316     compile with optimization.
45317
45318     This occurs because sometimes GCC optimizes the variable out of
45319     existence.  There is no way to tell the debugger how to compute the
45320     value such a variable "would have had", and it is not clear that
45321     would be desirable anyway.  So GCC simply does not mention the
45322     eliminated variable when it writes debugging information.
45323
45324     You have to expect a certain amount of disagreement between the
45325     executable and your source code, when you use optimization.
45326
45327   * Users often think it is a bug when GCC reports an error for code
45328     like this:
45329
45330          int foo (struct mumble *);
45331
45332          struct mumble { ... };
45333
45334          int foo (struct mumble *x)
45335          { ... }
45336
45337     This code really is erroneous, because the scope of `struct
45338     mumble' in the prototype is limited to the argument list
45339     containing it.  It does not refer to the `struct mumble' defined
45340     with file scope immediately below--they are two unrelated types
45341     with similar names in different scopes.
45342
45343     But in the definition of `foo', the file-scope type is used
45344     because that is available to be inherited.  Thus, the definition
45345     and the prototype do not match, and you get an error.
45346
45347     This behavior may seem silly, but it's what the ISO standard
45348     specifies.  It is easy enough for you to make your code work by
45349     moving the definition of `struct mumble' above the prototype.
45350     It's not worth being incompatible with ISO C just to avoid an
45351     error for the example shown above.
45352
45353   * Accesses to bit-fields even in volatile objects works by accessing
45354     larger objects, such as a byte or a word.  You cannot rely on what
45355     size of object is accessed in order to read or write the
45356     bit-field; it may even vary for a given bit-field according to the
45357     precise usage.
45358
45359     If you care about controlling the amount of memory that is
45360     accessed, use volatile but do not use bit-fields.
45361
45362   * GCC comes with shell scripts to fix certain known problems in
45363     system header files.  They install corrected copies of various
45364     header files in a special directory where only GCC will normally
45365     look for them.  The scripts adapt to various systems by searching
45366     all the system header files for the problem cases that we know
45367     about.
45368
45369     If new system header files are installed, nothing automatically
45370     arranges to update the corrected header files.  They can be
45371     updated using the `mkheaders' script installed in
45372     `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
45373
45374   * On 68000 and x86 systems, for instance, you can get paradoxical
45375     results if you test the precise values of floating point numbers.
45376     For example, you can find that a floating point value which is not
45377     a NaN is not equal to itself.  This results from the fact that the
45378     floating point registers hold a few more bits of precision than
45379     fit in a `double' in memory.  Compiled code moves values between
45380     memory and floating point registers at its convenience, and moving
45381     them into memory truncates them.
45382
45383     You can partially avoid this problem by using the `-ffloat-store'
45384     option (*note Optimize Options::).
45385
45386   * On AIX and other platforms without weak symbol support, templates
45387     need to be instantiated explicitly and symbols for static members
45388     of templates will not be generated.
45389
45390   * On AIX, GCC scans object files and library archives for static
45391     constructors and destructors when linking an application before the
45392     linker prunes unreferenced symbols.  This is necessary to prevent
45393     the AIX linker from mistakenly assuming that static constructor or
45394     destructor are unused and removing them before the scanning can
45395     occur.  All static constructors and destructors found will be
45396     referenced even though the modules in which they occur may not be
45397     used by the program.  This may lead to both increased executable
45398     size and unexpected symbol references.
45399
45400
45401File: gcc.info,  Node: C++ Misunderstandings,  Next: Non-bugs,  Prev: Disappointments,  Up: Trouble
45402
4540312.7 Common Misunderstandings with GNU C++
45404==========================================
45405
45406C++ is a complex language and an evolving one, and its standard
45407definition (the ISO C++ standard) was only recently completed.  As a
45408result, your C++ compiler may occasionally surprise you, even when its
45409behavior is correct.  This section discusses some areas that frequently
45410give rise to questions of this sort.
45411
45412* Menu:
45413
45414* Static Definitions::  Static member declarations are not definitions
45415* Name lookup::         Name lookup, templates, and accessing members of base classes
45416* Temporaries::         Temporaries may vanish before you expect
45417* Copy Assignment::     Copy Assignment operators copy virtual bases twice
45418
45419
45420File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
45421
4542212.7.1 Declare _and_ Define Static Members
45423------------------------------------------
45424
45425When a class has static data members, it is not enough to _declare_ the
45426static member; you must also _define_ it.  For example:
45427
45428     class Foo
45429     {
45430       ...
45431       void method();
45432       static int bar;
45433     };
45434
45435 This declaration only establishes that the class `Foo' has an `int'
45436named `Foo::bar', and a member function named `Foo::method'.  But you
45437still need to define _both_ `method' and `bar' elsewhere.  According to
45438the ISO standard, you must supply an initializer in one (and only one)
45439source file, such as:
45440
45441     int Foo::bar = 0;
45442
45443 Other C++ compilers may not correctly implement the standard behavior.
45444As a result, when you switch to `g++' from one of these compilers, you
45445may discover that a program that appeared to work correctly in fact
45446does not conform to the standard: `g++' reports as undefined symbols
45447any static data members that lack definitions.
45448
45449
45450File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
45451
4545212.7.2 Name Lookup, Templates, and Accessing Members of Base Classes
45453--------------------------------------------------------------------
45454
45455The C++ standard prescribes that all names that are not dependent on
45456template parameters are bound to their present definitions when parsing
45457a template function or class.(1)  Only names that are dependent are
45458looked up at the point of instantiation.  For example, consider
45459
45460       void foo(double);
45461
45462       struct A {
45463         template <typename T>
45464         void f () {
45465           foo (1);        // 1
45466           int i = N;      // 2
45467           T t;
45468           t.bar();        // 3
45469           foo (t);        // 4
45470         }
45471
45472         static const int N;
45473       };
45474
45475 Here, the names `foo' and `N' appear in a context that does not depend
45476on the type of `T'.  The compiler will thus require that they are
45477defined in the context of use in the template, not only before the
45478point of instantiation, and will here use `::foo(double)' and `A::N',
45479respectively.  In particular, it will convert the integer value to a
45480`double' when passing it to `::foo(double)'.
45481
45482 Conversely, `bar' and the call to `foo' in the fourth marked line are
45483used in contexts that do depend on the type of `T', so they are only
45484looked up at the point of instantiation, and you can provide
45485declarations for them after declaring the template, but before
45486instantiating it.  In particular, if you instantiate `A::f<int>', the
45487last line will call an overloaded `::foo(int)' if one was provided,
45488even if after the declaration of `struct A'.
45489
45490 This distinction between lookup of dependent and non-dependent names is
45491called two-stage (or dependent) name lookup.  G++ implements it since
45492version 3.4.
45493
45494 Two-stage name lookup sometimes leads to situations with behavior
45495different from non-template codes.  The most common is probably this:
45496
45497       template <typename T> struct Base {
45498         int i;
45499       };
45500
45501       template <typename T> struct Derived : public Base<T> {
45502         int get_i() { return i; }
45503       };
45504
45505 In `get_i()', `i' is not used in a dependent context, so the compiler
45506will look for a name declared at the enclosing namespace scope (which
45507is the global scope here).  It will not look into the base class, since
45508that is dependent and you may declare specializations of `Base' even
45509after declaring `Derived', so the compiler can't really know what `i'
45510would refer to.  If there is no global variable `i', then you will get
45511an error message.
45512
45513 In order to make it clear that you want the member of the base class,
45514you need to defer lookup until instantiation time, at which the base
45515class is known.  For this, you need to access `i' in a dependent
45516context, by either using `this->i' (remember that `this' is of type
45517`Derived<T>*', so is obviously dependent), or using `Base<T>::i'.
45518Alternatively, `Base<T>::i' might be brought into scope by a
45519`using'-declaration.
45520
45521 Another, similar example involves calling member functions of a base
45522class:
45523
45524       template <typename T> struct Base {
45525           int f();
45526       };
45527
45528       template <typename T> struct Derived : Base<T> {
45529           int g() { return f(); };
45530       };
45531
45532 Again, the call to `f()' is not dependent on template arguments (there
45533are no arguments that depend on the type `T', and it is also not
45534otherwise specified that the call should be in a dependent context).
45535Thus a global declaration of such a function must be available, since
45536the one in the base class is not visible until instantiation time.  The
45537compiler will consequently produce the following error message:
45538
45539       x.cc: In member function `int Derived<T>::g()':
45540       x.cc:6: error: there are no arguments to `f' that depend on a template
45541          parameter, so a declaration of `f' must be available
45542       x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
45543          allowing the use of an undeclared name is deprecated)
45544
45545 To make the code valid either use `this->f()', or `Base<T>::f()'.
45546Using the `-fpermissive' flag will also let the compiler accept the
45547code, by marking all function calls for which no declaration is visible
45548at the time of definition of the template for later lookup at
45549instantiation time, as if it were a dependent call.  We do not
45550recommend using `-fpermissive' to work around invalid code, and it will
45551also only catch cases where functions in base classes are called, not
45552where variables in base classes are used (as in the example above).
45553
45554 Note that some compilers (including G++ versions prior to 3.4) get
45555these examples wrong and accept above code without an error.  Those
45556compilers do not implement two-stage name lookup correctly.
45557
45558 ---------- Footnotes ----------
45559
45560 (1) The C++ standard just uses the term "dependent" for names that
45561depend on the type or value of template parameters.  This shorter term
45562will also be used in the rest of this section.
45563
45564
45565File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
45566
4556712.7.3 Temporaries May Vanish Before You Expect
45568-----------------------------------------------
45569
45570It is dangerous to use pointers or references to _portions_ of a
45571temporary object.  The compiler may very well delete the object before
45572you expect it to, leaving a pointer to garbage.  The most common place
45573where this problem crops up is in classes like string classes,
45574especially ones that define a conversion function to type `char *' or
45575`const char *'--which is one reason why the standard `string' class
45576requires you to call the `c_str' member function.  However, any class
45577that returns a pointer to some internal structure is potentially
45578subject to this problem.
45579
45580 For example, a program may use a function `strfunc' that returns
45581`string' objects, and another function `charfunc' that operates on
45582pointers to `char':
45583
45584     string strfunc ();
45585     void charfunc (const char *);
45586
45587     void
45588     f ()
45589     {
45590       const char *p = strfunc().c_str();
45591       ...
45592       charfunc (p);
45593       ...
45594       charfunc (p);
45595     }
45596
45597In this situation, it may seem reasonable to save a pointer to the C
45598string returned by the `c_str' member function and use that rather than
45599call `c_str' repeatedly.  However, the temporary string created by the
45600call to `strfunc' is destroyed after `p' is initialized, at which point
45601`p' is left pointing to freed memory.
45602
45603 Code like this may run successfully under some other compilers,
45604particularly obsolete cfront-based compilers that delete temporaries
45605along with normal local variables.  However, the GNU C++ behavior is
45606standard-conforming, so if your program depends on late destruction of
45607temporaries it is not portable.
45608
45609 The safe way to write such code is to give the temporary a name, which
45610forces it to remain until the end of the scope of the name.  For
45611example:
45612
45613     const string& tmp = strfunc ();
45614     charfunc (tmp.c_str ());
45615
45616
45617File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
45618
4561912.7.4 Implicit Copy-Assignment for Virtual Bases
45620-------------------------------------------------
45621
45622When a base class is virtual, only one subobject of the base class
45623belongs to each full object.  Also, the constructors and destructors are
45624invoked only once, and called from the most-derived class.  However,
45625such objects behave unspecified when being assigned.  For example:
45626
45627     struct Base{
45628       char *name;
45629       Base(char *n) : name(strdup(n)){}
45630       Base& operator= (const Base& other){
45631        free (name);
45632        name = strdup (other.name);
45633       }
45634     };
45635
45636     struct A:virtual Base{
45637       int val;
45638       A():Base("A"){}
45639     };
45640
45641     struct B:virtual Base{
45642       int bval;
45643       B():Base("B"){}
45644     };
45645
45646     struct Derived:public A, public B{
45647       Derived():Base("Derived"){}
45648     };
45649
45650     void func(Derived &d1, Derived &d2)
45651     {
45652       d1 = d2;
45653     }
45654
45655 The C++ standard specifies that `Base::Base' is only called once when
45656constructing or copy-constructing a Derived object.  It is unspecified
45657whether `Base::operator=' is called more than once when the implicit
45658copy-assignment for Derived objects is invoked (as it is inside `func'
45659in the example).
45660
45661 G++ implements the "intuitive" algorithm for copy-assignment: assign
45662all direct bases, then assign all members.  In that algorithm, the
45663virtual base subobject can be encountered more than once.  In the
45664example, copying proceeds in the following order: `val', `name' (via
45665`strdup'), `bval', and `name' again.
45666
45667 If application code relies on copy-assignment, a user-defined
45668copy-assignment operator removes any uncertainties.  With such an
45669operator, the application can define whether and how the virtual base
45670subobject is assigned.
45671
45672
45673File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: C++ Misunderstandings,  Up: Trouble
45674
4567512.8 Certain Changes We Don't Want to Make
45676==========================================
45677
45678This section lists changes that people frequently request, but which we
45679do not make because we think GCC is better without them.
45680
45681   * Checking the number and type of arguments to a function which has
45682     an old-fashioned definition and no prototype.
45683
45684     Such a feature would work only occasionally--only for calls that
45685     appear in the same file as the called function, following the
45686     definition.  The only way to check all calls reliably is to add a
45687     prototype for the function.  But adding a prototype eliminates the
45688     motivation for this feature.  So the feature is not worthwhile.
45689
45690   * Warning about using an expression whose type is signed as a shift
45691     count.
45692
45693     Shift count operands are probably signed more often than unsigned.
45694     Warning about this would cause far more annoyance than good.
45695
45696   * Warning about assigning a signed value to an unsigned variable.
45697
45698     Such assignments must be very common; warning about them would
45699     cause more annoyance than good.
45700
45701   * Warning when a non-void function value is ignored.
45702
45703     C contains many standard functions that return a value that most
45704     programs choose to ignore.  One obvious example is `printf'.
45705     Warning about this practice only leads the defensive programmer to
45706     clutter programs with dozens of casts to `void'.  Such casts are
45707     required so frequently that they become visual noise.  Writing
45708     those casts becomes so automatic that they no longer convey useful
45709     information about the intentions of the programmer.  For functions
45710     where the return value should never be ignored, use the
45711     `warn_unused_result' function attribute (*note Function
45712     Attributes::).
45713
45714   * Making `-fshort-enums' the default.
45715
45716     This would cause storage layout to be incompatible with most other
45717     C compilers.  And it doesn't seem very important, given that you
45718     can get the same result in other ways.  The case where it matters
45719     most is when the enumeration-valued object is inside a structure,
45720     and in that case you can specify a field width explicitly.
45721
45722   * Making bit-fields unsigned by default on particular machines where
45723     "the ABI standard" says to do so.
45724
45725     The ISO C standard leaves it up to the implementation whether a
45726     bit-field declared plain `int' is signed or not.  This in effect
45727     creates two alternative dialects of C.
45728
45729     The GNU C compiler supports both dialects; you can specify the
45730     signed dialect with `-fsigned-bitfields' and the unsigned dialect
45731     with `-funsigned-bitfields'.  However, this leaves open the
45732     question of which dialect to use by default.
45733
45734     Currently, the preferred dialect makes plain bit-fields signed,
45735     because this is simplest.  Since `int' is the same as `signed int'
45736     in every other context, it is cleanest for them to be the same in
45737     bit-fields as well.
45738
45739     Some computer manufacturers have published Application Binary
45740     Interface standards which specify that plain bit-fields should be
45741     unsigned.  It is a mistake, however, to say anything about this
45742     issue in an ABI.  This is because the handling of plain bit-fields
45743     distinguishes two dialects of C.  Both dialects are meaningful on
45744     every type of machine.  Whether a particular object file was
45745     compiled using signed bit-fields or unsigned is of no concern to
45746     other object files, even if they access the same bit-fields in the
45747     same data structures.
45748
45749     A given program is written in one or the other of these two
45750     dialects.  The program stands a chance to work on most any machine
45751     if it is compiled with the proper dialect.  It is unlikely to work
45752     at all if compiled with the wrong dialect.
45753
45754     Many users appreciate the GNU C compiler because it provides an
45755     environment that is uniform across machines.  These users would be
45756     inconvenienced if the compiler treated plain bit-fields
45757     differently on certain machines.
45758
45759     Occasionally users write programs intended only for a particular
45760     machine type.  On these occasions, the users would benefit if the
45761     GNU C compiler were to support by default the same dialect as the
45762     other compilers on that machine.  But such applications are rare.
45763     And users writing a program to run on more than one type of
45764     machine cannot possibly benefit from this kind of compatibility.
45765
45766     This is why GCC does and will treat plain bit-fields in the same
45767     fashion on all types of machines (by default).
45768
45769     There are some arguments for making bit-fields unsigned by default
45770     on all machines.  If, for example, this becomes a universal de
45771     facto standard, it would make sense for GCC to go along with it.
45772     This is something to be considered in the future.
45773
45774     (Of course, users strongly concerned about portability should
45775     indicate explicitly in each bit-field whether it is signed or not.
45776     In this way, they write programs which have the same meaning in
45777     both C dialects.)
45778
45779   * Undefining `__STDC__' when `-ansi' is not used.
45780
45781     Currently, GCC defines `__STDC__' unconditionally.  This provides
45782     good results in practice.
45783
45784     Programmers normally use conditionals on `__STDC__' to ask whether
45785     it is safe to use certain features of ISO C, such as function
45786     prototypes or ISO token concatenation.  Since plain `gcc' supports
45787     all the features of ISO C, the correct answer to these questions is
45788     "yes".
45789
45790     Some users try to use `__STDC__' to check for the availability of
45791     certain library facilities.  This is actually incorrect usage in
45792     an ISO C program, because the ISO C standard says that a conforming
45793     freestanding implementation should define `__STDC__' even though it
45794     does not have the library facilities.  `gcc -ansi -pedantic' is a
45795     conforming freestanding implementation, and it is therefore
45796     required to define `__STDC__', even though it does not come with
45797     an ISO C library.
45798
45799     Sometimes people say that defining `__STDC__' in a compiler that
45800     does not completely conform to the ISO C standard somehow violates
45801     the standard.  This is illogical.  The standard is a standard for
45802     compilers that claim to support ISO C, such as `gcc -ansi'--not
45803     for other compilers such as plain `gcc'.  Whatever the ISO C
45804     standard says is relevant to the design of plain `gcc' without
45805     `-ansi' only for pragmatic reasons, not as a requirement.
45806
45807     GCC normally defines `__STDC__' to be 1, and in addition defines
45808     `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std'
45809     option for strict conformance to some version of ISO C.  On some
45810     hosts, system include files use a different convention, where
45811     `__STDC__' is normally 0, but is 1 if the user specifies strict
45812     conformance to the C Standard.  GCC follows the host convention
45813     when processing system include files, but when processing user
45814     files it follows the usual GNU C convention.
45815
45816   * Undefining `__STDC__' in C++.
45817
45818     Programs written to compile with C++-to-C translators get the
45819     value of `__STDC__' that goes with the C compiler that is
45820     subsequently used.  These programs must test `__STDC__' to
45821     determine what kind of C preprocessor that compiler uses: whether
45822     they should concatenate tokens in the ISO C fashion or in the
45823     traditional fashion.
45824
45825     These programs work properly with GNU C++ if `__STDC__' is defined.
45826     They would not work otherwise.
45827
45828     In addition, many header files are written to provide prototypes
45829     in ISO C but not in traditional C.  Many of these header files can
45830     work without change in C++ provided `__STDC__' is defined.  If
45831     `__STDC__' is not defined, they will all fail, and will all need
45832     to be changed to test explicitly for C++ as well.
45833
45834   * Deleting "empty" loops.
45835
45836     Historically, GCC has not deleted "empty" loops under the
45837     assumption that the most likely reason you would put one in a
45838     program is to have a delay, so deleting them will not make real
45839     programs run any faster.
45840
45841     However, the rationale here is that optimization of a nonempty loop
45842     cannot produce an empty one. This held for carefully written C
45843     compiled with less powerful optimizers but is not always the case
45844     for carefully written C++ or with more powerful optimizers.  Thus
45845     GCC will remove operations from loops whenever it can determine
45846     those operations are not externally visible (apart from the time
45847     taken to execute them, of course).  In case the loop can be proved
45848     to be finite, GCC will also remove the loop itself.
45849
45850     Be aware of this when performing timing tests, for instance the
45851     following loop can be completely removed, provided
45852     `some_expression' can provably not change any global state.
45853
45854          {
45855             int sum = 0;
45856             int ix;
45857
45858             for (ix = 0; ix != 10000; ix++)
45859                sum += some_expression;
45860          }
45861
45862     Even though `sum' is accumulated in the loop, no use is made of
45863     that summation, so the accumulation can be removed.
45864
45865   * Making side effects happen in the same order as in some other
45866     compiler.
45867
45868     It is never safe to depend on the order of evaluation of side
45869     effects.  For example, a function call like this may very well
45870     behave differently from one compiler to another:
45871
45872          void func (int, int);
45873
45874          int i = 2;
45875          func (i++, i++);
45876
45877     There is no guarantee (in either the C or the C++ standard language
45878     definitions) that the increments will be evaluated in any
45879     particular order.  Either increment might happen first.  `func'
45880     might get the arguments `2, 3', or it might get `3, 2', or even
45881     `2, 2'.
45882
45883   * Making certain warnings into errors by default.
45884
45885     Some ISO C testsuites report failure when the compiler does not
45886     produce an error message for a certain program.
45887
45888     ISO C requires a "diagnostic" message for certain kinds of invalid
45889     programs, but a warning is defined by GCC to count as a
45890     diagnostic.  If GCC produces a warning but not an error, that is
45891     correct ISO C support.  If testsuites call this "failure", they
45892     should be run with the GCC option `-pedantic-errors', which will
45893     turn these warnings into errors.
45894
45895
45896
45897File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
45898
4589912.9 Warning Messages and Error Messages
45900========================================
45901
45902The GNU compiler can produce two kinds of diagnostics: errors and
45903warnings.  Each kind has a different purpose:
45904
45905     "Errors" report problems that make it impossible to compile your
45906     program.  GCC reports errors with the source file name and line
45907     number where the problem is apparent.
45908
45909     "Warnings" report other unusual conditions in your code that _may_
45910     indicate a problem, although compilation can (and does) proceed.
45911     Warning messages also report the source file name and line number,
45912     but include the text `warning:' to distinguish them from error
45913     messages.
45914
45915 Warnings may indicate danger points where you should check to make sure
45916that your program really does what you intend; or the use of obsolete
45917features; or the use of nonstandard features of GNU C or C++.  Many
45918warnings are issued only if you ask for them, with one of the `-W'
45919options (for instance, `-Wall' requests a variety of useful warnings).
45920
45921 GCC always tries to compile your program if possible; it never
45922gratuitously rejects a program whose meaning is clear merely because
45923(for instance) it fails to conform to a standard.  In some cases,
45924however, the C and C++ standards specify that certain extensions are
45925forbidden, and a diagnostic _must_ be issued by a conforming compiler.
45926The `-pedantic' option tells GCC to issue warnings in such cases;
45927`-pedantic-errors' says to make them errors instead.  This does not
45928mean that _all_ non-ISO constructs get warnings or errors.
45929
45930 *Note Options to Request or Suppress Warnings: Warning Options, for
45931more detail on these and related command-line options.
45932
45933
45934File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
45935
4593613 Reporting Bugs
45937*****************
45938
45939Your bug reports play an essential role in making GCC reliable.
45940
45941 When you encounter a problem, the first thing to do is to see if it is
45942already known.  *Note Trouble::.  If it isn't known, then you should
45943report the problem.
45944
45945* Menu:
45946
45947* Criteria:  Bug Criteria.   Have you really found a bug?
45948* Reporting: Bug Reporting.  How to report a bug effectively.
45949
45950
45951File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
45952
4595313.1 Have You Found a Bug?
45954==========================
45955
45956If you are not sure whether you have found a bug, here are some
45957guidelines:
45958
45959   * If the compiler gets a fatal signal, for any input whatever, that
45960     is a compiler bug.  Reliable compilers never crash.
45961
45962   * If the compiler produces invalid assembly code, for any input
45963     whatever (except an `asm' statement), that is a compiler bug,
45964     unless the compiler reports errors (not just warnings) which would
45965     ordinarily prevent the assembler from being run.
45966
45967   * If the compiler produces valid assembly code that does not
45968     correctly execute the input source code, that is a compiler bug.
45969
45970     However, you must double-check to make sure, because you may have a
45971     program whose behavior is undefined, which happened by chance to
45972     give the desired results with another C or C++ compiler.
45973
45974     For example, in many nonoptimizing compilers, you can write `x;'
45975     at the end of a function instead of `return x;', with the same
45976     results.  But the value of the function is undefined if `return'
45977     is omitted; it is not a bug when GCC produces different results.
45978
45979     Problems often result from expressions with two increment
45980     operators, as in `f (*p++, *p++)'.  Your previous compiler might
45981     have interpreted that expression the way you intended; GCC might
45982     interpret it another way.  Neither compiler is wrong.  The bug is
45983     in your code.
45984
45985     After you have localized the error to a single source line, it
45986     should be easy to check for these things.  If your program is
45987     correct and well defined, you have found a compiler bug.
45988
45989   * If the compiler produces an error message for valid input, that is
45990     a compiler bug.
45991
45992   * If the compiler does not produce an error message for invalid
45993     input, that is a compiler bug.  However, you should note that your
45994     idea of "invalid input" might be someone else's idea of "an
45995     extension" or "support for traditional practice".
45996
45997   * If you are an experienced user of one of the languages GCC
45998     supports, your suggestions for improvement of GCC are welcome in
45999     any case.
46000
46001
46002File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
46003
4600413.2 How and Where to Report Bugs
46005=================================
46006
46007Bugs should be reported to the bug database at
46008`http://gcc.gnu.org/bugs.html'.
46009
46010
46011File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
46012
4601314 How To Get Help with GCC
46014***************************
46015
46016If you need help installing, using or changing GCC, there are two ways
46017to find it:
46018
46019   * Send a message to a suitable network mailing list.  First try
46020     <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
46021     that brings no response, try <gcc@gcc.gnu.org>.  For help changing
46022     GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
46023     GCC, please report it following the instructions at *note Bug
46024     Reporting::.
46025
46026   * Look in the service directory for someone who might help you for a
46027     fee.  The service directory is found at
46028     `http://www.fsf.org/resources/service'.
46029
46030 For further information, see `http://gcc.gnu.org/faq.html#support'.
46031
46032
46033File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
46034
4603515 Contributing to GCC Development
46036**********************************
46037
46038If you would like to help pretest GCC releases to assure they work well,
46039current development sources are available by SVN (see
46040`http://gcc.gnu.org/svn.html').  Source and binary snapshots are also
46041available for FTP; see `http://gcc.gnu.org/snapshots.html'.
46042
46043 If you would like to work on improvements to GCC, please read the
46044advice at these URLs:
46045
46046     `http://gcc.gnu.org/contribute.html'
46047     `http://gcc.gnu.org/contributewhy.html'
46048
46049for information on how to make useful contributions and avoid
46050duplication of effort.  Suggested projects are listed at
46051`http://gcc.gnu.org/projects/'.
46052
46053
46054File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
46055
46056Funding Free Software
46057*********************
46058
46059If you want to have more free software a few years from now, it makes
46060sense for you to help encourage people to contribute funds for its
46061development.  The most effective approach known is to encourage
46062commercial redistributors to donate.
46063
46064 Users of free software systems can boost the pace of development by
46065encouraging for-a-fee distributors to donate part of their selling price
46066to free software developers--the Free Software Foundation, and others.
46067
46068 The way to convince distributors to do this is to demand it and expect
46069it from them.  So when you compare distributors, judge them partly by
46070how much they give to free software development.  Show distributors
46071they must compete to be the one who gives the most.
46072
46073 To make this approach work, you must insist on numbers that you can
46074compare, such as, "We will donate ten dollars to the Frobnitz project
46075for each disk sold."  Don't be satisfied with a vague promise, such as
46076"A portion of the profits are donated," since it doesn't give a basis
46077for comparison.
46078
46079 Even a precise fraction "of the profits from this disk" is not very
46080meaningful, since creative accounting and unrelated business decisions
46081can greatly alter what fraction of the sales price counts as profit.
46082If the price you pay is $50, ten percent of the profit is probably less
46083than a dollar; it might be a few cents, or nothing at all.
46084
46085 Some redistributors do development work themselves.  This is useful
46086too; but to keep everyone honest, you need to inquire how much they do,
46087and what kind.  Some kinds of development make much more long-term
46088difference than others.  For example, maintaining a separate version of
46089a program contributes very little; maintaining the standard version of a
46090program for the whole community contributes much.  Easy new ports
46091contribute little, since someone else would surely do them; difficult
46092ports such as adding a new CPU to the GNU Compiler Collection
46093contribute more; major new features or packages contribute the most.
46094
46095 By establishing the idea that supporting further development is "the
46096proper thing to do" when distributing free software for a fee, we can
46097assure a steady flow of resources into making more free software.
46098
46099     Copyright (C) 1994 Free Software Foundation, Inc.
46100     Verbatim copying and redistribution of this section is permitted
46101     without royalty; alteration is not permitted.
46102
46103
46104File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
46105
46106The GNU Project and GNU/Linux
46107*****************************
46108
46109The GNU Project was launched in 1984 to develop a complete Unix-like
46110operating system which is free software: the GNU system.  (GNU is a
46111recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
46112Variants of the GNU operating system, which use the kernel Linux, are
46113now widely used; though these systems are often referred to as "Linux",
46114they are more accurately called GNU/Linux systems.
46115
46116 For more information, see:
46117     `http://www.gnu.org/'
46118     `http://www.gnu.org/gnu/linux-and-gnu.html'
46119
46120
46121File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
46122
46123GNU General Public License
46124**************************
46125
46126                        Version 3, 29 June 2007
46127
46128     Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
46129
46130     Everyone is permitted to copy and distribute verbatim copies of this
46131     license document, but changing it is not allowed.
46132
46133Preamble
46134========
46135
46136The GNU General Public License is a free, copyleft license for software
46137and other kinds of works.
46138
46139 The licenses for most software and other practical works are designed
46140to take away your freedom to share and change the works.  By contrast,
46141the GNU General Public License is intended to guarantee your freedom to
46142share and change all versions of a program-to make sure it remains free
46143software for all its users.  We, the Free Software Foundation, use the
46144GNU General Public License for most of our software; it applies also to
46145any other work released this way by its authors.  You can apply it to
46146your programs, too.
46147
46148 When we speak of free software, we are referring to freedom, not
46149price.  Our General Public Licenses are designed to make sure that you
46150have the freedom to distribute copies of free software (and charge for
46151them if you wish), that you receive source code or can get it if you
46152want it, that you can change the software or use pieces of it in new
46153free programs, and that you know you can do these things.
46154
46155 To protect your rights, we need to prevent others from denying you
46156these rights or asking you to surrender the rights.  Therefore, you
46157have certain responsibilities if you distribute copies of the software,
46158or if you modify it: responsibilities to respect the freedom of others.
46159
46160 For example, if you distribute copies of such a program, whether
46161gratis or for a fee, you must pass on to the recipients the same
46162freedoms that you received.  You must make sure that they, too, receive
46163or can get the source code.  And you must show them these terms so they
46164know their rights.
46165
46166 Developers that use the GNU GPL protect your rights with two steps:
46167(1) assert copyright on the software, and (2) offer you this License
46168giving you legal permission to copy, distribute and/or modify it.
46169
46170 For the developers' and authors' protection, the GPL clearly explains
46171that there is no warranty for this free software.  For both users' and
46172authors' sake, the GPL requires that modified versions be marked as
46173changed, so that their problems will not be attributed erroneously to
46174authors of previous versions.
46175
46176 Some devices are designed to deny users access to install or run
46177modified versions of the software inside them, although the
46178manufacturer can do so.  This is fundamentally incompatible with the
46179aim of protecting users' freedom to change the software.  The
46180systematic pattern of such abuse occurs in the area of products for
46181individuals to use, which is precisely where it is most unacceptable.
46182Therefore, we have designed this version of the GPL to prohibit the
46183practice for those products.  If such problems arise substantially in
46184other domains, we stand ready to extend this provision to those domains
46185in future versions of the GPL, as needed to protect the freedom of
46186users.
46187
46188 Finally, every program is threatened constantly by software patents.
46189States should not allow patents to restrict development and use of
46190software on general-purpose computers, but in those that do, we wish to
46191avoid the special danger that patents applied to a free program could
46192make it effectively proprietary.  To prevent this, the GPL assures that
46193patents cannot be used to render the program non-free.
46194
46195 The precise terms and conditions for copying, distribution and
46196modification follow.
46197
46198TERMS AND CONDITIONS
46199====================
46200
46201  0. Definitions.
46202
46203     "This License" refers to version 3 of the GNU General Public
46204     License.
46205
46206     "Copyright" also means copyright-like laws that apply to other
46207     kinds of works, such as semiconductor masks.
46208
46209     "The Program" refers to any copyrightable work licensed under this
46210     License.  Each licensee is addressed as "you".  "Licensees" and
46211     "recipients" may be individuals or organizations.
46212
46213     To "modify" a work means to copy from or adapt all or part of the
46214     work in a fashion requiring copyright permission, other than the
46215     making of an exact copy.  The resulting work is called a "modified
46216     version" of the earlier work or a work "based on" the earlier work.
46217
46218     A "covered work" means either the unmodified Program or a work
46219     based on the Program.
46220
46221     To "propagate" a work means to do anything with it that, without
46222     permission, would make you directly or secondarily liable for
46223     infringement under applicable copyright law, except executing it
46224     on a computer or modifying a private copy.  Propagation includes
46225     copying, distribution (with or without modification), making
46226     available to the public, and in some countries other activities as
46227     well.
46228
46229     To "convey" a work means any kind of propagation that enables other
46230     parties to make or receive copies.  Mere interaction with a user
46231     through a computer network, with no transfer of a copy, is not
46232     conveying.
46233
46234     An interactive user interface displays "Appropriate Legal Notices"
46235     to the extent that it includes a convenient and prominently visible
46236     feature that (1) displays an appropriate copyright notice, and (2)
46237     tells the user that there is no warranty for the work (except to
46238     the extent that warranties are provided), that licensees may
46239     convey the work under this License, and how to view a copy of this
46240     License.  If the interface presents a list of user commands or
46241     options, such as a menu, a prominent item in the list meets this
46242     criterion.
46243
46244  1. Source Code.
46245
46246     The "source code" for a work means the preferred form of the work
46247     for making modifications to it.  "Object code" means any
46248     non-source form of a work.
46249
46250     A "Standard Interface" means an interface that either is an
46251     official standard defined by a recognized standards body, or, in
46252     the case of interfaces specified for a particular programming
46253     language, one that is widely used among developers working in that
46254     language.
46255
46256     The "System Libraries" of an executable work include anything,
46257     other than the work as a whole, that (a) is included in the normal
46258     form of packaging a Major Component, but which is not part of that
46259     Major Component, and (b) serves only to enable use of the work
46260     with that Major Component, or to implement a Standard Interface
46261     for which an implementation is available to the public in source
46262     code form.  A "Major Component", in this context, means a major
46263     essential component (kernel, window system, and so on) of the
46264     specific operating system (if any) on which the executable work
46265     runs, or a compiler used to produce the work, or an object code
46266     interpreter used to run it.
46267
46268     The "Corresponding Source" for a work in object code form means all
46269     the source code needed to generate, install, and (for an executable
46270     work) run the object code and to modify the work, including
46271     scripts to control those activities.  However, it does not include
46272     the work's System Libraries, or general-purpose tools or generally
46273     available free programs which are used unmodified in performing
46274     those activities but which are not part of the work.  For example,
46275     Corresponding Source includes interface definition files
46276     associated with source files for the work, and the source code for
46277     shared libraries and dynamically linked subprograms that the work
46278     is specifically designed to require, such as by intimate data
46279     communication or control flow between those subprograms and other
46280     parts of the work.
46281
46282     The Corresponding Source need not include anything that users can
46283     regenerate automatically from other parts of the Corresponding
46284     Source.
46285
46286     The Corresponding Source for a work in source code form is that
46287     same work.
46288
46289  2. Basic Permissions.
46290
46291     All rights granted under this License are granted for the term of
46292     copyright on the Program, and are irrevocable provided the stated
46293     conditions are met.  This License explicitly affirms your unlimited
46294     permission to run the unmodified Program.  The output from running
46295     a covered work is covered by this License only if the output,
46296     given its content, constitutes a covered work.  This License
46297     acknowledges your rights of fair use or other equivalent, as
46298     provided by copyright law.
46299
46300     You may make, run and propagate covered works that you do not
46301     convey, without conditions so long as your license otherwise
46302     remains in force.  You may convey covered works to others for the
46303     sole purpose of having them make modifications exclusively for
46304     you, or provide you with facilities for running those works,
46305     provided that you comply with the terms of this License in
46306     conveying all material for which you do not control copyright.
46307     Those thus making or running the covered works for you must do so
46308     exclusively on your behalf, under your direction and control, on
46309     terms that prohibit them from making any copies of your
46310     copyrighted material outside their relationship with you.
46311
46312     Conveying under any other circumstances is permitted solely under
46313     the conditions stated below.  Sublicensing is not allowed; section
46314     10 makes it unnecessary.
46315
46316  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
46317
46318     No covered work shall be deemed part of an effective technological
46319     measure under any applicable law fulfilling obligations under
46320     article 11 of the WIPO copyright treaty adopted on 20 December
46321     1996, or similar laws prohibiting or restricting circumvention of
46322     such measures.
46323
46324     When you convey a covered work, you waive any legal power to forbid
46325     circumvention of technological measures to the extent such
46326     circumvention is effected by exercising rights under this License
46327     with respect to the covered work, and you disclaim any intention
46328     to limit operation or modification of the work as a means of
46329     enforcing, against the work's users, your or third parties' legal
46330     rights to forbid circumvention of technological measures.
46331
46332  4. Conveying Verbatim Copies.
46333
46334     You may convey verbatim copies of the Program's source code as you
46335     receive it, in any medium, provided that you conspicuously and
46336     appropriately publish on each copy an appropriate copyright notice;
46337     keep intact all notices stating that this License and any
46338     non-permissive terms added in accord with section 7 apply to the
46339     code; keep intact all notices of the absence of any warranty; and
46340     give all recipients a copy of this License along with the Program.
46341
46342     You may charge any price or no price for each copy that you convey,
46343     and you may offer support or warranty protection for a fee.
46344
46345  5. Conveying Modified Source Versions.
46346
46347     You may convey a work based on the Program, or the modifications to
46348     produce it from the Program, in the form of source code under the
46349     terms of section 4, provided that you also meet all of these
46350     conditions:
46351
46352       a. The work must carry prominent notices stating that you
46353          modified it, and giving a relevant date.
46354
46355       b. The work must carry prominent notices stating that it is
46356          released under this License and any conditions added under
46357          section 7.  This requirement modifies the requirement in
46358          section 4 to "keep intact all notices".
46359
46360       c. You must license the entire work, as a whole, under this
46361          License to anyone who comes into possession of a copy.  This
46362          License will therefore apply, along with any applicable
46363          section 7 additional terms, to the whole of the work, and all
46364          its parts, regardless of how they are packaged.  This License
46365          gives no permission to license the work in any other way, but
46366          it does not invalidate such permission if you have separately
46367          received it.
46368
46369       d. If the work has interactive user interfaces, each must display
46370          Appropriate Legal Notices; however, if the Program has
46371          interactive interfaces that do not display Appropriate Legal
46372          Notices, your work need not make them do so.
46373
46374     A compilation of a covered work with other separate and independent
46375     works, which are not by their nature extensions of the covered
46376     work, and which are not combined with it such as to form a larger
46377     program, in or on a volume of a storage or distribution medium, is
46378     called an "aggregate" if the compilation and its resulting
46379     copyright are not used to limit the access or legal rights of the
46380     compilation's users beyond what the individual works permit.
46381     Inclusion of a covered work in an aggregate does not cause this
46382     License to apply to the other parts of the aggregate.
46383
46384  6. Conveying Non-Source Forms.
46385
46386     You may convey a covered work in object code form under the terms
46387     of sections 4 and 5, provided that you also convey the
46388     machine-readable Corresponding Source under the terms of this
46389     License, in one of these ways:
46390
46391       a. Convey the object code in, or embodied in, a physical product
46392          (including a physical distribution medium), accompanied by the
46393          Corresponding Source fixed on a durable physical medium
46394          customarily used for software interchange.
46395
46396       b. Convey the object code in, or embodied in, a physical product
46397          (including a physical distribution medium), accompanied by a
46398          written offer, valid for at least three years and valid for
46399          as long as you offer spare parts or customer support for that
46400          product model, to give anyone who possesses the object code
46401          either (1) a copy of the Corresponding Source for all the
46402          software in the product that is covered by this License, on a
46403          durable physical medium customarily used for software
46404          interchange, for a price no more than your reasonable cost of
46405          physically performing this conveying of source, or (2) access
46406          to copy the Corresponding Source from a network server at no
46407          charge.
46408
46409       c. Convey individual copies of the object code with a copy of
46410          the written offer to provide the Corresponding Source.  This
46411          alternative is allowed only occasionally and noncommercially,
46412          and only if you received the object code with such an offer,
46413          in accord with subsection 6b.
46414
46415       d. Convey the object code by offering access from a designated
46416          place (gratis or for a charge), and offer equivalent access
46417          to the Corresponding Source in the same way through the same
46418          place at no further charge.  You need not require recipients
46419          to copy the Corresponding Source along with the object code.
46420          If the place to copy the object code is a network server, the
46421          Corresponding Source may be on a different server (operated
46422          by you or a third party) that supports equivalent copying
46423          facilities, provided you maintain clear directions next to
46424          the object code saying where to find the Corresponding Source.
46425          Regardless of what server hosts the Corresponding Source, you
46426          remain obligated to ensure that it is available for as long
46427          as needed to satisfy these requirements.
46428
46429       e. Convey the object code using peer-to-peer transmission,
46430          provided you inform other peers where the object code and
46431          Corresponding Source of the work are being offered to the
46432          general public at no charge under subsection 6d.
46433
46434
46435     A separable portion of the object code, whose source code is
46436     excluded from the Corresponding Source as a System Library, need
46437     not be included in conveying the object code work.
46438
46439     A "User Product" is either (1) a "consumer product", which means
46440     any tangible personal property which is normally used for personal,
46441     family, or household purposes, or (2) anything designed or sold for
46442     incorporation into a dwelling.  In determining whether a product
46443     is a consumer product, doubtful cases shall be resolved in favor of
46444     coverage.  For a particular product received by a particular user,
46445     "normally used" refers to a typical or common use of that class of
46446     product, regardless of the status of the particular user or of the
46447     way in which the particular user actually uses, or expects or is
46448     expected to use, the product.  A product is a consumer product
46449     regardless of whether the product has substantial commercial,
46450     industrial or non-consumer uses, unless such uses represent the
46451     only significant mode of use of the product.
46452
46453     "Installation Information" for a User Product means any methods,
46454     procedures, authorization keys, or other information required to
46455     install and execute modified versions of a covered work in that
46456     User Product from a modified version of its Corresponding Source.
46457     The information must suffice to ensure that the continued
46458     functioning of the modified object code is in no case prevented or
46459     interfered with solely because modification has been made.
46460
46461     If you convey an object code work under this section in, or with,
46462     or specifically for use in, a User Product, and the conveying
46463     occurs as part of a transaction in which the right of possession
46464     and use of the User Product is transferred to the recipient in
46465     perpetuity or for a fixed term (regardless of how the transaction
46466     is characterized), the Corresponding Source conveyed under this
46467     section must be accompanied by the Installation Information.  But
46468     this requirement does not apply if neither you nor any third party
46469     retains the ability to install modified object code on the User
46470     Product (for example, the work has been installed in ROM).
46471
46472     The requirement to provide Installation Information does not
46473     include a requirement to continue to provide support service,
46474     warranty, or updates for a work that has been modified or
46475     installed by the recipient, or for the User Product in which it
46476     has been modified or installed.  Access to a network may be denied
46477     when the modification itself materially and adversely affects the
46478     operation of the network or violates the rules and protocols for
46479     communication across the network.
46480
46481     Corresponding Source conveyed, and Installation Information
46482     provided, in accord with this section must be in a format that is
46483     publicly documented (and with an implementation available to the
46484     public in source code form), and must require no special password
46485     or key for unpacking, reading or copying.
46486
46487  7. Additional Terms.
46488
46489     "Additional permissions" are terms that supplement the terms of
46490     this License by making exceptions from one or more of its
46491     conditions.  Additional permissions that are applicable to the
46492     entire Program shall be treated as though they were included in
46493     this License, to the extent that they are valid under applicable
46494     law.  If additional permissions apply only to part of the Program,
46495     that part may be used separately under those permissions, but the
46496     entire Program remains governed by this License without regard to
46497     the additional permissions.
46498
46499     When you convey a copy of a covered work, you may at your option
46500     remove any additional permissions from that copy, or from any part
46501     of it.  (Additional permissions may be written to require their own
46502     removal in certain cases when you modify the work.)  You may place
46503     additional permissions on material, added by you to a covered work,
46504     for which you have or can give appropriate copyright permission.
46505
46506     Notwithstanding any other provision of this License, for material
46507     you add to a covered work, you may (if authorized by the copyright
46508     holders of that material) supplement the terms of this License
46509     with terms:
46510
46511       a. Disclaiming warranty or limiting liability differently from
46512          the terms of sections 15 and 16 of this License; or
46513
46514       b. Requiring preservation of specified reasonable legal notices
46515          or author attributions in that material or in the Appropriate
46516          Legal Notices displayed by works containing it; or
46517
46518       c. Prohibiting misrepresentation of the origin of that material,
46519          or requiring that modified versions of such material be
46520          marked in reasonable ways as different from the original
46521          version; or
46522
46523       d. Limiting the use for publicity purposes of names of licensors
46524          or authors of the material; or
46525
46526       e. Declining to grant rights under trademark law for use of some
46527          trade names, trademarks, or service marks; or
46528
46529       f. Requiring indemnification of licensors and authors of that
46530          material by anyone who conveys the material (or modified
46531          versions of it) with contractual assumptions of liability to
46532          the recipient, for any liability that these contractual
46533          assumptions directly impose on those licensors and authors.
46534
46535     All other non-permissive additional terms are considered "further
46536     restrictions" within the meaning of section 10.  If the Program as
46537     you received it, or any part of it, contains a notice stating that
46538     it is governed by this License along with a term that is a further
46539     restriction, you may remove that term.  If a license document
46540     contains a further restriction but permits relicensing or
46541     conveying under this License, you may add to a covered work
46542     material governed by the terms of that license document, provided
46543     that the further restriction does not survive such relicensing or
46544     conveying.
46545
46546     If you add terms to a covered work in accord with this section, you
46547     must place, in the relevant source files, a statement of the
46548     additional terms that apply to those files, or a notice indicating
46549     where to find the applicable terms.
46550
46551     Additional terms, permissive or non-permissive, may be stated in
46552     the form of a separately written license, or stated as exceptions;
46553     the above requirements apply either way.
46554
46555  8. Termination.
46556
46557     You may not propagate or modify a covered work except as expressly
46558     provided under this License.  Any attempt otherwise to propagate or
46559     modify it is void, and will automatically terminate your rights
46560     under this License (including any patent licenses granted under
46561     the third paragraph of section 11).
46562
46563     However, if you cease all violation of this License, then your
46564     license from a particular copyright holder is reinstated (a)
46565     provisionally, unless and until the copyright holder explicitly
46566     and finally terminates your license, and (b) permanently, if the
46567     copyright holder fails to notify you of the violation by some
46568     reasonable means prior to 60 days after the cessation.
46569
46570     Moreover, your license from a particular copyright holder is
46571     reinstated permanently if the copyright holder notifies you of the
46572     violation by some reasonable means, this is the first time you have
46573     received notice of violation of this License (for any work) from
46574     that copyright holder, and you cure the violation prior to 30 days
46575     after your receipt of the notice.
46576
46577     Termination of your rights under this section does not terminate
46578     the licenses of parties who have received copies or rights from
46579     you under this License.  If your rights have been terminated and
46580     not permanently reinstated, you do not qualify to receive new
46581     licenses for the same material under section 10.
46582
46583  9. Acceptance Not Required for Having Copies.
46584
46585     You are not required to accept this License in order to receive or
46586     run a copy of the Program.  Ancillary propagation of a covered work
46587     occurring solely as a consequence of using peer-to-peer
46588     transmission to receive a copy likewise does not require
46589     acceptance.  However, nothing other than this License grants you
46590     permission to propagate or modify any covered work.  These actions
46591     infringe copyright if you do not accept this License.  Therefore,
46592     by modifying or propagating a covered work, you indicate your
46593     acceptance of this License to do so.
46594
46595 10. Automatic Licensing of Downstream Recipients.
46596
46597     Each time you convey a covered work, the recipient automatically
46598     receives a license from the original licensors, to run, modify and
46599     propagate that work, subject to this License.  You are not
46600     responsible for enforcing compliance by third parties with this
46601     License.
46602
46603     An "entity transaction" is a transaction transferring control of an
46604     organization, or substantially all assets of one, or subdividing an
46605     organization, or merging organizations.  If propagation of a
46606     covered work results from an entity transaction, each party to that
46607     transaction who receives a copy of the work also receives whatever
46608     licenses to the work the party's predecessor in interest had or
46609     could give under the previous paragraph, plus a right to
46610     possession of the Corresponding Source of the work from the
46611     predecessor in interest, if the predecessor has it or can get it
46612     with reasonable efforts.
46613
46614     You may not impose any further restrictions on the exercise of the
46615     rights granted or affirmed under this License.  For example, you
46616     may not impose a license fee, royalty, or other charge for
46617     exercise of rights granted under this License, and you may not
46618     initiate litigation (including a cross-claim or counterclaim in a
46619     lawsuit) alleging that any patent claim is infringed by making,
46620     using, selling, offering for sale, or importing the Program or any
46621     portion of it.
46622
46623 11. Patents.
46624
46625     A "contributor" is a copyright holder who authorizes use under this
46626     License of the Program or a work on which the Program is based.
46627     The work thus licensed is called the contributor's "contributor
46628     version".
46629
46630     A contributor's "essential patent claims" are all patent claims
46631     owned or controlled by the contributor, whether already acquired or
46632     hereafter acquired, that would be infringed by some manner,
46633     permitted by this License, of making, using, or selling its
46634     contributor version, but do not include claims that would be
46635     infringed only as a consequence of further modification of the
46636     contributor version.  For purposes of this definition, "control"
46637     includes the right to grant patent sublicenses in a manner
46638     consistent with the requirements of this License.
46639
46640     Each contributor grants you a non-exclusive, worldwide,
46641     royalty-free patent license under the contributor's essential
46642     patent claims, to make, use, sell, offer for sale, import and
46643     otherwise run, modify and propagate the contents of its
46644     contributor version.
46645
46646     In the following three paragraphs, a "patent license" is any
46647     express agreement or commitment, however denominated, not to
46648     enforce a patent (such as an express permission to practice a
46649     patent or covenant not to sue for patent infringement).  To
46650     "grant" such a patent license to a party means to make such an
46651     agreement or commitment not to enforce a patent against the party.
46652
46653     If you convey a covered work, knowingly relying on a patent
46654     license, and the Corresponding Source of the work is not available
46655     for anyone to copy, free of charge and under the terms of this
46656     License, through a publicly available network server or other
46657     readily accessible means, then you must either (1) cause the
46658     Corresponding Source to be so available, or (2) arrange to deprive
46659     yourself of the benefit of the patent license for this particular
46660     work, or (3) arrange, in a manner consistent with the requirements
46661     of this License, to extend the patent license to downstream
46662     recipients.  "Knowingly relying" means you have actual knowledge
46663     that, but for the patent license, your conveying the covered work
46664     in a country, or your recipient's use of the covered work in a
46665     country, would infringe one or more identifiable patents in that
46666     country that you have reason to believe are valid.
46667
46668     If, pursuant to or in connection with a single transaction or
46669     arrangement, you convey, or propagate by procuring conveyance of, a
46670     covered work, and grant a patent license to some of the parties
46671     receiving the covered work authorizing them to use, propagate,
46672     modify or convey a specific copy of the covered work, then the
46673     patent license you grant is automatically extended to all
46674     recipients of the covered work and works based on it.
46675
46676     A patent license is "discriminatory" if it does not include within
46677     the scope of its coverage, prohibits the exercise of, or is
46678     conditioned on the non-exercise of one or more of the rights that
46679     are specifically granted under this License.  You may not convey a
46680     covered work if you are a party to an arrangement with a third
46681     party that is in the business of distributing software, under
46682     which you make payment to the third party based on the extent of
46683     your activity of conveying the work, and under which the third
46684     party grants, to any of the parties who would receive the covered
46685     work from you, a discriminatory patent license (a) in connection
46686     with copies of the covered work conveyed by you (or copies made
46687     from those copies), or (b) primarily for and in connection with
46688     specific products or compilations that contain the covered work,
46689     unless you entered into that arrangement, or that patent license
46690     was granted, prior to 28 March 2007.
46691
46692     Nothing in this License shall be construed as excluding or limiting
46693     any implied license or other defenses to infringement that may
46694     otherwise be available to you under applicable patent law.
46695
46696 12. No Surrender of Others' Freedom.
46697
46698     If conditions are imposed on you (whether by court order,
46699     agreement or otherwise) that contradict the conditions of this
46700     License, they do not excuse you from the conditions of this
46701     License.  If you cannot convey a covered work so as to satisfy
46702     simultaneously your obligations under this License and any other
46703     pertinent obligations, then as a consequence you may not convey it
46704     at all.  For example, if you agree to terms that obligate you to
46705     collect a royalty for further conveying from those to whom you
46706     convey the Program, the only way you could satisfy both those
46707     terms and this License would be to refrain entirely from conveying
46708     the Program.
46709
46710 13. Use with the GNU Affero General Public License.
46711
46712     Notwithstanding any other provision of this License, you have
46713     permission to link or combine any covered work with a work licensed
46714     under version 3 of the GNU Affero General Public License into a
46715     single combined work, and to convey the resulting work.  The terms
46716     of this License will continue to apply to the part which is the
46717     covered work, but the special requirements of the GNU Affero
46718     General Public License, section 13, concerning interaction through
46719     a network will apply to the combination as such.
46720
46721 14. Revised Versions of this License.
46722
46723     The Free Software Foundation may publish revised and/or new
46724     versions of the GNU General Public License from time to time.
46725     Such new versions will be similar in spirit to the present
46726     version, but may differ in detail to address new problems or
46727     concerns.
46728
46729     Each version is given a distinguishing version number.  If the
46730     Program specifies that a certain numbered version of the GNU
46731     General Public License "or any later version" applies to it, you
46732     have the option of following the terms and conditions either of
46733     that numbered version or of any later version published by the
46734     Free Software Foundation.  If the Program does not specify a
46735     version number of the GNU General Public License, you may choose
46736     any version ever published by the Free Software Foundation.
46737
46738     If the Program specifies that a proxy can decide which future
46739     versions of the GNU General Public License can be used, that
46740     proxy's public statement of acceptance of a version permanently
46741     authorizes you to choose that version for the Program.
46742
46743     Later license versions may give you additional or different
46744     permissions.  However, no additional obligations are imposed on any
46745     author or copyright holder as a result of your choosing to follow a
46746     later version.
46747
46748 15. Disclaimer of Warranty.
46749
46750     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
46751     APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
46752     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
46753     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
46754     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
46755     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
46756     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
46757     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
46758     NECESSARY SERVICING, REPAIR OR CORRECTION.
46759
46760 16. Limitation of Liability.
46761
46762     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
46763     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
46764     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
46765     FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
46766     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
46767     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
46768     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
46769     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
46770     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
46771     THE POSSIBILITY OF SUCH DAMAGES.
46772
46773 17. Interpretation of Sections 15 and 16.
46774
46775     If the disclaimer of warranty and limitation of liability provided
46776     above cannot be given local legal effect according to their terms,
46777     reviewing courts shall apply local law that most closely
46778     approximates an absolute waiver of all civil liability in
46779     connection with the Program, unless a warranty or assumption of
46780     liability accompanies a copy of the Program in return for a fee.
46781
46782
46783END OF TERMS AND CONDITIONS
46784===========================
46785
46786How to Apply These Terms to Your New Programs
46787=============================================
46788
46789If you develop a new program, and you want it to be of the greatest
46790possible use to the public, the best way to achieve this is to make it
46791free software which everyone can redistribute and change under these
46792terms.
46793
46794 To do so, attach the following notices to the program.  It is safest
46795to attach them to the start of each source file to most effectively
46796state the exclusion of warranty; and each file should have at least the
46797"copyright" line and a pointer to where the full notice is found.
46798
46799     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
46800     Copyright (C) YEAR NAME OF AUTHOR
46801
46802     This program is free software: you can redistribute it and/or modify
46803     it under the terms of the GNU General Public License as published by
46804     the Free Software Foundation, either version 3 of the License, or (at
46805     your option) any later version.
46806
46807     This program is distributed in the hope that it will be useful, but
46808     WITHOUT ANY WARRANTY; without even the implied warranty of
46809     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
46810     General Public License for more details.
46811
46812     You should have received a copy of the GNU General Public License
46813     along with this program.  If not, see `http://www.gnu.org/licenses/'.
46814
46815 Also add information on how to contact you by electronic and paper
46816mail.
46817
46818 If the program does terminal interaction, make it output a short
46819notice like this when it starts in an interactive mode:
46820
46821     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
46822     This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
46823     This is free software, and you are welcome to redistribute it
46824     under certain conditions; type `show c' for details.
46825
46826 The hypothetical commands `show w' and `show c' should show the
46827appropriate parts of the General Public License.  Of course, your
46828program's commands might be different; for a GUI interface, you would
46829use an "about box".
46830
46831 You should also get your employer (if you work as a programmer) or
46832school, if any, to sign a "copyright disclaimer" for the program, if
46833necessary.  For more information on this, and how to apply and follow
46834the GNU GPL, see `http://www.gnu.org/licenses/'.
46835
46836 The GNU General Public License does not permit incorporating your
46837program into proprietary programs.  If your program is a subroutine
46838library, you may consider it more useful to permit linking proprietary
46839applications with the library.  If this is what you want to do, use the
46840GNU Lesser General Public License instead of this License.  But first,
46841please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
46842
46843
46844File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
46845
46846GNU Free Documentation License
46847******************************
46848
46849                     Version 1.3, 3 November 2008
46850
46851     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
46852     `http://fsf.org/'
46853
46854     Everyone is permitted to copy and distribute verbatim copies
46855     of this license document, but changing it is not allowed.
46856
46857  0. PREAMBLE
46858
46859     The purpose of this License is to make a manual, textbook, or other
46860     functional and useful document "free" in the sense of freedom: to
46861     assure everyone the effective freedom to copy and redistribute it,
46862     with or without modifying it, either commercially or
46863     noncommercially.  Secondarily, this License preserves for the
46864     author and publisher a way to get credit for their work, while not
46865     being considered responsible for modifications made by others.
46866
46867     This License is a kind of "copyleft", which means that derivative
46868     works of the document must themselves be free in the same sense.
46869     It complements the GNU General Public License, which is a copyleft
46870     license designed for free software.
46871
46872     We have designed this License in order to use it for manuals for
46873     free software, because free software needs free documentation: a
46874     free program should come with manuals providing the same freedoms
46875     that the software does.  But this License is not limited to
46876     software manuals; it can be used for any textual work, regardless
46877     of subject matter or whether it is published as a printed book.
46878     We recommend this License principally for works whose purpose is
46879     instruction or reference.
46880
46881  1. APPLICABILITY AND DEFINITIONS
46882
46883     This License applies to any manual or other work, in any medium,
46884     that contains a notice placed by the copyright holder saying it
46885     can be distributed under the terms of this License.  Such a notice
46886     grants a world-wide, royalty-free license, unlimited in duration,
46887     to use that work under the conditions stated herein.  The
46888     "Document", below, refers to any such manual or work.  Any member
46889     of the public is a licensee, and is addressed as "you".  You
46890     accept the license if you copy, modify or distribute the work in a
46891     way requiring permission under copyright law.
46892
46893     A "Modified Version" of the Document means any work containing the
46894     Document or a portion of it, either copied verbatim, or with
46895     modifications and/or translated into another language.
46896
46897     A "Secondary Section" is a named appendix or a front-matter section
46898     of the Document that deals exclusively with the relationship of the
46899     publishers or authors of the Document to the Document's overall
46900     subject (or to related matters) and contains nothing that could
46901     fall directly within that overall subject.  (Thus, if the Document
46902     is in part a textbook of mathematics, a Secondary Section may not
46903     explain any mathematics.)  The relationship could be a matter of
46904     historical connection with the subject or with related matters, or
46905     of legal, commercial, philosophical, ethical or political position
46906     regarding them.
46907
46908     The "Invariant Sections" are certain Secondary Sections whose
46909     titles are designated, as being those of Invariant Sections, in
46910     the notice that says that the Document is released under this
46911     License.  If a section does not fit the above definition of
46912     Secondary then it is not allowed to be designated as Invariant.
46913     The Document may contain zero Invariant Sections.  If the Document
46914     does not identify any Invariant Sections then there are none.
46915
46916     The "Cover Texts" are certain short passages of text that are
46917     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
46918     that says that the Document is released under this License.  A
46919     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
46920     be at most 25 words.
46921
46922     A "Transparent" copy of the Document means a machine-readable copy,
46923     represented in a format whose specification is available to the
46924     general public, that is suitable for revising the document
46925     straightforwardly with generic text editors or (for images
46926     composed of pixels) generic paint programs or (for drawings) some
46927     widely available drawing editor, and that is suitable for input to
46928     text formatters or for automatic translation to a variety of
46929     formats suitable for input to text formatters.  A copy made in an
46930     otherwise Transparent file format whose markup, or absence of
46931     markup, has been arranged to thwart or discourage subsequent
46932     modification by readers is not Transparent.  An image format is
46933     not Transparent if used for any substantial amount of text.  A
46934     copy that is not "Transparent" is called "Opaque".
46935
46936     Examples of suitable formats for Transparent copies include plain
46937     ASCII without markup, Texinfo input format, LaTeX input format,
46938     SGML or XML using a publicly available DTD, and
46939     standard-conforming simple HTML, PostScript or PDF designed for
46940     human modification.  Examples of transparent image formats include
46941     PNG, XCF and JPG.  Opaque formats include proprietary formats that
46942     can be read and edited only by proprietary word processors, SGML or
46943     XML for which the DTD and/or processing tools are not generally
46944     available, and the machine-generated HTML, PostScript or PDF
46945     produced by some word processors for output purposes only.
46946
46947     The "Title Page" means, for a printed book, the title page itself,
46948     plus such following pages as are needed to hold, legibly, the
46949     material this License requires to appear in the title page.  For
46950     works in formats which do not have any title page as such, "Title
46951     Page" means the text near the most prominent appearance of the
46952     work's title, preceding the beginning of the body of the text.
46953
46954     The "publisher" means any person or entity that distributes copies
46955     of the Document to the public.
46956
46957     A section "Entitled XYZ" means a named subunit of the Document
46958     whose title either is precisely XYZ or contains XYZ in parentheses
46959     following text that translates XYZ in another language.  (Here XYZ
46960     stands for a specific section name mentioned below, such as
46961     "Acknowledgements", "Dedications", "Endorsements", or "History".)
46962     To "Preserve the Title" of such a section when you modify the
46963     Document means that it remains a section "Entitled XYZ" according
46964     to this definition.
46965
46966     The Document may include Warranty Disclaimers next to the notice
46967     which states that this License applies to the Document.  These
46968     Warranty Disclaimers are considered to be included by reference in
46969     this License, but only as regards disclaiming warranties: any other
46970     implication that these Warranty Disclaimers may have is void and
46971     has no effect on the meaning of this License.
46972
46973  2. VERBATIM COPYING
46974
46975     You may copy and distribute the Document in any medium, either
46976     commercially or noncommercially, provided that this License, the
46977     copyright notices, and the license notice saying this License
46978     applies to the Document are reproduced in all copies, and that you
46979     add no other conditions whatsoever to those of this License.  You
46980     may not use technical measures to obstruct or control the reading
46981     or further copying of the copies you make or distribute.  However,
46982     you may accept compensation in exchange for copies.  If you
46983     distribute a large enough number of copies you must also follow
46984     the conditions in section 3.
46985
46986     You may also lend copies, under the same conditions stated above,
46987     and you may publicly display copies.
46988
46989  3. COPYING IN QUANTITY
46990
46991     If you publish printed copies (or copies in media that commonly
46992     have printed covers) of the Document, numbering more than 100, and
46993     the Document's license notice requires Cover Texts, you must
46994     enclose the copies in covers that carry, clearly and legibly, all
46995     these Cover Texts: Front-Cover Texts on the front cover, and
46996     Back-Cover Texts on the back cover.  Both covers must also clearly
46997     and legibly identify you as the publisher of these copies.  The
46998     front cover must present the full title with all words of the
46999     title equally prominent and visible.  You may add other material
47000     on the covers in addition.  Copying with changes limited to the
47001     covers, as long as they preserve the title of the Document and
47002     satisfy these conditions, can be treated as verbatim copying in
47003     other respects.
47004
47005     If the required texts for either cover are too voluminous to fit
47006     legibly, you should put the first ones listed (as many as fit
47007     reasonably) on the actual cover, and continue the rest onto
47008     adjacent pages.
47009
47010     If you publish or distribute Opaque copies of the Document
47011     numbering more than 100, you must either include a
47012     machine-readable Transparent copy along with each Opaque copy, or
47013     state in or with each Opaque copy a computer-network location from
47014     which the general network-using public has access to download
47015     using public-standard network protocols a complete Transparent
47016     copy of the Document, free of added material.  If you use the
47017     latter option, you must take reasonably prudent steps, when you
47018     begin distribution of Opaque copies in quantity, to ensure that
47019     this Transparent copy will remain thus accessible at the stated
47020     location until at least one year after the last time you
47021     distribute an Opaque copy (directly or through your agents or
47022     retailers) of that edition to the public.
47023
47024     It is requested, but not required, that you contact the authors of
47025     the Document well before redistributing any large number of
47026     copies, to give them a chance to provide you with an updated
47027     version of the Document.
47028
47029  4. MODIFICATIONS
47030
47031     You may copy and distribute a Modified Version of the Document
47032     under the conditions of sections 2 and 3 above, provided that you
47033     release the Modified Version under precisely this License, with
47034     the Modified Version filling the role of the Document, thus
47035     licensing distribution and modification of the Modified Version to
47036     whoever possesses a copy of it.  In addition, you must do these
47037     things in the Modified Version:
47038
47039       A. Use in the Title Page (and on the covers, if any) a title
47040          distinct from that of the Document, and from those of
47041          previous versions (which should, if there were any, be listed
47042          in the History section of the Document).  You may use the
47043          same title as a previous version if the original publisher of
47044          that version gives permission.
47045
47046       B. List on the Title Page, as authors, one or more persons or
47047          entities responsible for authorship of the modifications in
47048          the Modified Version, together with at least five of the
47049          principal authors of the Document (all of its principal
47050          authors, if it has fewer than five), unless they release you
47051          from this requirement.
47052
47053       C. State on the Title page the name of the publisher of the
47054          Modified Version, as the publisher.
47055
47056       D. Preserve all the copyright notices of the Document.
47057
47058       E. Add an appropriate copyright notice for your modifications
47059          adjacent to the other copyright notices.
47060
47061       F. Include, immediately after the copyright notices, a license
47062          notice giving the public permission to use the Modified
47063          Version under the terms of this License, in the form shown in
47064          the Addendum below.
47065
47066       G. Preserve in that license notice the full lists of Invariant
47067          Sections and required Cover Texts given in the Document's
47068          license notice.
47069
47070       H. Include an unaltered copy of this License.
47071
47072       I. Preserve the section Entitled "History", Preserve its Title,
47073          and add to it an item stating at least the title, year, new
47074          authors, and publisher of the Modified Version as given on
47075          the Title Page.  If there is no section Entitled "History" in
47076          the Document, create one stating the title, year, authors,
47077          and publisher of the Document as given on its Title Page,
47078          then add an item describing the Modified Version as stated in
47079          the previous sentence.
47080
47081       J. Preserve the network location, if any, given in the Document
47082          for public access to a Transparent copy of the Document, and
47083          likewise the network locations given in the Document for
47084          previous versions it was based on.  These may be placed in
47085          the "History" section.  You may omit a network location for a
47086          work that was published at least four years before the
47087          Document itself, or if the original publisher of the version
47088          it refers to gives permission.
47089
47090       K. For any section Entitled "Acknowledgements" or "Dedications",
47091          Preserve the Title of the section, and preserve in the
47092          section all the substance and tone of each of the contributor
47093          acknowledgements and/or dedications given therein.
47094
47095       L. Preserve all the Invariant Sections of the Document,
47096          unaltered in their text and in their titles.  Section numbers
47097          or the equivalent are not considered part of the section
47098          titles.
47099
47100       M. Delete any section Entitled "Endorsements".  Such a section
47101          may not be included in the Modified Version.
47102
47103       N. Do not retitle any existing section to be Entitled
47104          "Endorsements" or to conflict in title with any Invariant
47105          Section.
47106
47107       O. Preserve any Warranty Disclaimers.
47108
47109     If the Modified Version includes new front-matter sections or
47110     appendices that qualify as Secondary Sections and contain no
47111     material copied from the Document, you may at your option
47112     designate some or all of these sections as invariant.  To do this,
47113     add their titles to the list of Invariant Sections in the Modified
47114     Version's license notice.  These titles must be distinct from any
47115     other section titles.
47116
47117     You may add a section Entitled "Endorsements", provided it contains
47118     nothing but endorsements of your Modified Version by various
47119     parties--for example, statements of peer review or that the text
47120     has been approved by an organization as the authoritative
47121     definition of a standard.
47122
47123     You may add a passage of up to five words as a Front-Cover Text,
47124     and a passage of up to 25 words as a Back-Cover Text, to the end
47125     of the list of Cover Texts in the Modified Version.  Only one
47126     passage of Front-Cover Text and one of Back-Cover Text may be
47127     added by (or through arrangements made by) any one entity.  If the
47128     Document already includes a cover text for the same cover,
47129     previously added by you or by arrangement made by the same entity
47130     you are acting on behalf of, you may not add another; but you may
47131     replace the old one, on explicit permission from the previous
47132     publisher that added the old one.
47133
47134     The author(s) and publisher(s) of the Document do not by this
47135     License give permission to use their names for publicity for or to
47136     assert or imply endorsement of any Modified Version.
47137
47138  5. COMBINING DOCUMENTS
47139
47140     You may combine the Document with other documents released under
47141     this License, under the terms defined in section 4 above for
47142     modified versions, provided that you include in the combination
47143     all of the Invariant Sections of all of the original documents,
47144     unmodified, and list them all as Invariant Sections of your
47145     combined work in its license notice, and that you preserve all
47146     their Warranty Disclaimers.
47147
47148     The combined work need only contain one copy of this License, and
47149     multiple identical Invariant Sections may be replaced with a single
47150     copy.  If there are multiple Invariant Sections with the same name
47151     but different contents, make the title of each such section unique
47152     by adding at the end of it, in parentheses, the name of the
47153     original author or publisher of that section if known, or else a
47154     unique number.  Make the same adjustment to the section titles in
47155     the list of Invariant Sections in the license notice of the
47156     combined work.
47157
47158     In the combination, you must combine any sections Entitled
47159     "History" in the various original documents, forming one section
47160     Entitled "History"; likewise combine any sections Entitled
47161     "Acknowledgements", and any sections Entitled "Dedications".  You
47162     must delete all sections Entitled "Endorsements."
47163
47164  6. COLLECTIONS OF DOCUMENTS
47165
47166     You may make a collection consisting of the Document and other
47167     documents released under this License, and replace the individual
47168     copies of this License in the various documents with a single copy
47169     that is included in the collection, provided that you follow the
47170     rules of this License for verbatim copying of each of the
47171     documents in all other respects.
47172
47173     You may extract a single document from such a collection, and
47174     distribute it individually under this License, provided you insert
47175     a copy of this License into the extracted document, and follow
47176     this License in all other respects regarding verbatim copying of
47177     that document.
47178
47179  7. AGGREGATION WITH INDEPENDENT WORKS
47180
47181     A compilation of the Document or its derivatives with other
47182     separate and independent documents or works, in or on a volume of
47183     a storage or distribution medium, is called an "aggregate" if the
47184     copyright resulting from the compilation is not used to limit the
47185     legal rights of the compilation's users beyond what the individual
47186     works permit.  When the Document is included in an aggregate, this
47187     License does not apply to the other works in the aggregate which
47188     are not themselves derivative works of the Document.
47189
47190     If the Cover Text requirement of section 3 is applicable to these
47191     copies of the Document, then if the Document is less than one half
47192     of the entire aggregate, the Document's Cover Texts may be placed
47193     on covers that bracket the Document within the aggregate, or the
47194     electronic equivalent of covers if the Document is in electronic
47195     form.  Otherwise they must appear on printed covers that bracket
47196     the whole aggregate.
47197
47198  8. TRANSLATION
47199
47200     Translation is considered a kind of modification, so you may
47201     distribute translations of the Document under the terms of section
47202     4.  Replacing Invariant Sections with translations requires special
47203     permission from their copyright holders, but you may include
47204     translations of some or all Invariant Sections in addition to the
47205     original versions of these Invariant Sections.  You may include a
47206     translation of this License, and all the license notices in the
47207     Document, and any Warranty Disclaimers, provided that you also
47208     include the original English version of this License and the
47209     original versions of those notices and disclaimers.  In case of a
47210     disagreement between the translation and the original version of
47211     this License or a notice or disclaimer, the original version will
47212     prevail.
47213
47214     If a section in the Document is Entitled "Acknowledgements",
47215     "Dedications", or "History", the requirement (section 4) to
47216     Preserve its Title (section 1) will typically require changing the
47217     actual title.
47218
47219  9. TERMINATION
47220
47221     You may not copy, modify, sublicense, or distribute the Document
47222     except as expressly provided under this License.  Any attempt
47223     otherwise to copy, modify, sublicense, or distribute it is void,
47224     and will automatically terminate your rights under this License.
47225
47226     However, if you cease all violation of this License, then your
47227     license from a particular copyright holder is reinstated (a)
47228     provisionally, unless and until the copyright holder explicitly
47229     and finally terminates your license, and (b) permanently, if the
47230     copyright holder fails to notify you of the violation by some
47231     reasonable means prior to 60 days after the cessation.
47232
47233     Moreover, your license from a particular copyright holder is
47234     reinstated permanently if the copyright holder notifies you of the
47235     violation by some reasonable means, this is the first time you have
47236     received notice of violation of this License (for any work) from
47237     that copyright holder, and you cure the violation prior to 30 days
47238     after your receipt of the notice.
47239
47240     Termination of your rights under this section does not terminate
47241     the licenses of parties who have received copies or rights from
47242     you under this License.  If your rights have been terminated and
47243     not permanently reinstated, receipt of a copy of some or all of
47244     the same material does not give you any rights to use it.
47245
47246 10. FUTURE REVISIONS OF THIS LICENSE
47247
47248     The Free Software Foundation may publish new, revised versions of
47249     the GNU Free Documentation License from time to time.  Such new
47250     versions will be similar in spirit to the present version, but may
47251     differ in detail to address new problems or concerns.  See
47252     `http://www.gnu.org/copyleft/'.
47253
47254     Each version of the License is given a distinguishing version
47255     number.  If the Document specifies that a particular numbered
47256     version of this License "or any later version" applies to it, you
47257     have the option of following the terms and conditions either of
47258     that specified version or of any later version that has been
47259     published (not as a draft) by the Free Software Foundation.  If
47260     the Document does not specify a version number of this License,
47261     you may choose any version ever published (not as a draft) by the
47262     Free Software Foundation.  If the Document specifies that a proxy
47263     can decide which future versions of this License can be used, that
47264     proxy's public statement of acceptance of a version permanently
47265     authorizes you to choose that version for the Document.
47266
47267 11. RELICENSING
47268
47269     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
47270     World Wide Web server that publishes copyrightable works and also
47271     provides prominent facilities for anybody to edit those works.  A
47272     public wiki that anybody can edit is an example of such a server.
47273     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
47274     site means any set of copyrightable works thus published on the MMC
47275     site.
47276
47277     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
47278     license published by Creative Commons Corporation, a not-for-profit
47279     corporation with a principal place of business in San Francisco,
47280     California, as well as future copyleft versions of that license
47281     published by that same organization.
47282
47283     "Incorporate" means to publish or republish a Document, in whole or
47284     in part, as part of another Document.
47285
47286     An MMC is "eligible for relicensing" if it is licensed under this
47287     License, and if all works that were first published under this
47288     License somewhere other than this MMC, and subsequently
47289     incorporated in whole or in part into the MMC, (1) had no cover
47290     texts or invariant sections, and (2) were thus incorporated prior
47291     to November 1, 2008.
47292
47293     The operator of an MMC Site may republish an MMC contained in the
47294     site under CC-BY-SA on the same site at any time before August 1,
47295     2009, provided the MMC is eligible for relicensing.
47296
47297
47298ADDENDUM: How to use this License for your documents
47299====================================================
47300
47301To use this License in a document you have written, include a copy of
47302the License in the document and put the following copyright and license
47303notices just after the title page:
47304
47305       Copyright (C)  YEAR  YOUR NAME.
47306       Permission is granted to copy, distribute and/or modify this document
47307       under the terms of the GNU Free Documentation License, Version 1.3
47308       or any later version published by the Free Software Foundation;
47309       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
47310       Texts.  A copy of the license is included in the section entitled ``GNU
47311       Free Documentation License''.
47312
47313 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
47314replace the "with...Texts." line with this:
47315
47316         with the Invariant Sections being LIST THEIR TITLES, with
47317         the Front-Cover Texts being LIST, and with the Back-Cover Texts
47318         being LIST.
47319
47320 If you have Invariant Sections without Cover Texts, or some other
47321combination of the three, merge those two alternatives to suit the
47322situation.
47323
47324 If your document contains nontrivial examples of program code, we
47325recommend releasing these examples in parallel under your choice of
47326free software license, such as the GNU General Public License, to
47327permit their use in free software.
47328
47329
47330File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
47331
47332Contributors to GCC
47333*******************
47334
47335The GCC project would like to thank its many contributors.  Without
47336them the project would not have been nearly as successful as it has
47337been.  Any omissions in this list are accidental.  Feel free to contact
47338<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
47339some of your contributions are not listed.  Please keep this list in
47340alphabetical order.
47341
47342   * Analog Devices helped implement the support for complex data types
47343     and iterators.
47344
47345   * John David Anglin for threading-related fixes and improvements to
47346     libstdc++-v3, and the HP-UX port.
47347
47348   * James van Artsdalen wrote the code that makes efficient use of the
47349     Intel 80387 register stack.
47350
47351   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
47352     Series port.
47353
47354   * Alasdair Baird for various bug fixes.
47355
47356   * Giovanni Bajo for analyzing lots of complicated C++ problem
47357     reports.
47358
47359   * Peter Barada for his work to improve code generation for new
47360     ColdFire cores.
47361
47362   * Gerald Baumgartner added the signature extension to the C++ front
47363     end.
47364
47365   * Godmar Back for his Java improvements and encouragement.
47366
47367   * Scott Bambrough for help porting the Java compiler.
47368
47369   * Wolfgang Bangerth for processing tons of bug reports.
47370
47371   * Jon Beniston for his Microsoft Windows port of Java and port to
47372     Lattice Mico32.
47373
47374   * Daniel Berlin for better DWARF2 support, faster/better
47375     optimizations, improved alias analysis, plus migrating GCC to
47376     Bugzilla.
47377
47378   * Geoff Berry for his Java object serialization work and various
47379     patches.
47380
47381   * David Binderman tests weekly snapshots of GCC trunk against Fedora
47382     Rawhide for several architectures.
47383
47384   * Laurynas Biveinis for memory management work and DJGPP port fixes.
47385
47386   * Uros Bizjak for the implementation of x87 math built-in functions
47387     and for various middle end and i386 back end improvements and bug
47388     fixes.
47389
47390   * Eric Blake for helping to make GCJ and libgcj conform to the
47391     specifications.
47392
47393   * Janne Blomqvist for contributions to GNU Fortran.
47394
47395   * Segher Boessenkool for various fixes.
47396
47397   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
47398     other Java work.
47399
47400   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
47401     miscellaneous clean-ups.
47402
47403   * Steven Bosscher for integrating the GNU Fortran front end into GCC
47404     and for contributing to the tree-ssa branch.
47405
47406   * Eric Botcazou for fixing middle- and backend bugs left and right.
47407
47408   * Per Bothner for his direction via the steering committee and
47409     various improvements to the infrastructure for supporting new
47410     languages.  Chill front end implementation.  Initial
47411     implementations of cpplib, fix-header, config.guess, libio, and
47412     past C++ library (libg++) maintainer.  Dreaming up, designing and
47413     implementing much of GCJ.
47414
47415   * Devon Bowen helped port GCC to the Tahoe.
47416
47417   * Don Bowman for mips-vxworks contributions.
47418
47419   * Dave Brolley for work on cpplib and Chill.
47420
47421   * Paul Brook for work on the ARM architecture and maintaining GNU
47422     Fortran.
47423
47424   * Robert Brown implemented the support for Encore 32000 systems.
47425
47426   * Christian Bruel for improvements to local store elimination.
47427
47428   * Herman A.J. ten Brugge for various fixes.
47429
47430   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
47431     FAQ.
47432
47433   * Joe Buck for his direction via the steering committee from its
47434     creation to 2013.
47435
47436   * Craig Burley for leadership of the G77 Fortran effort.
47437
47438   * Stephan Buys for contributing Doxygen notes for libstdc++.
47439
47440   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
47441     to the C++ strings, streambufs and formatted I/O, hard detective
47442     work on the frustrating localization issues, and keeping up with
47443     the problem reports.
47444
47445   * John Carr for his alias work, SPARC hacking, infrastructure
47446     improvements, previous contributions to the steering committee,
47447     loop optimizations, etc.
47448
47449   * Stephane Carrez for 68HC11 and 68HC12 ports.
47450
47451   * Steve Chamberlain for support for the Renesas SH and H8 processors
47452     and the PicoJava processor, and for GCJ config fixes.
47453
47454   * Glenn Chambers for help with the GCJ FAQ.
47455
47456   * John-Marc Chandonia for various libgcj patches.
47457
47458   * Denis Chertykov for contributing and maintaining the AVR port, the
47459     first GCC port for an 8-bit architecture.
47460
47461   * Scott Christley for his Objective-C contributions.
47462
47463   * Eric Christopher for his Java porting help and clean-ups.
47464
47465   * Branko Cibej for more warning contributions.
47466
47467   * The GNU Classpath project for all of their merged runtime code.
47468
47469   * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work,
47470     `--help', and other random hacking.
47471
47472   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
47473
47474   * R. Kelley Cook for making GCC buildable from a read-only directory
47475     as well as other miscellaneous build process and documentation
47476     clean-ups.
47477
47478   * Ralf Corsepius for SH testing and minor bug fixing.
47479
47480   * Stan Cox for care and feeding of the x86 port and lots of behind
47481     the scenes hacking.
47482
47483   * Alex Crain provided changes for the 3b1.
47484
47485   * Ian Dall for major improvements to the NS32k port.
47486
47487   * Paul Dale for his work to add uClinux platform support to the m68k
47488     backend.
47489
47490   * Dario Dariol contributed the four varieties of sample programs
47491     that print a copy of their source.
47492
47493   * Russell Davidson for fstream and stringstream fixes in libstdc++.
47494
47495   * Bud Davis for work on the G77 and GNU Fortran compilers.
47496
47497   * Mo DeJong for GCJ and libgcj bug fixes.
47498
47499   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
47500     various bug fixes, and the M32C, MeP, MSP430, and RL78 ports.
47501
47502   * Arnaud Desitter for helping to debug GNU Fortran.
47503
47504   * Gabriel Dos Reis for contributions to G++, contributions and
47505     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
47506     including `valarray<>', `complex<>', maintaining the numerics
47507     library (including that pesky `<limits>' :-) and keeping
47508     up-to-date anything to do with numbers.
47509
47510   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
47511     ISO C99 support, CFG dumping support, etc., plus support of the
47512     C++ runtime libraries including for all kinds of C interface
47513     issues, contributing and maintaining `complex<>', sanity checking
47514     and disbursement, configuration architecture, libio maintenance,
47515     and early math work.
47516
47517   * Franc,ois Dumont for his work on libstdc++-v3, especially
47518     maintaining and improving `debug-mode' and associative and
47519     unordered containers.
47520
47521   * Zdenek Dvorak for a new loop unroller and various fixes.
47522
47523   * Michael Eager for his work on the Xilinx MicroBlaze port.
47524
47525   * Richard Earnshaw for his ongoing work with the ARM.
47526
47527   * David Edelsohn for his direction via the steering committee,
47528     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
47529     loop changes, doing the entire AIX port of libstdc++ with his bare
47530     hands, and for ensuring GCC properly keeps working on AIX.
47531
47532   * Kevin Ediger for the floating point formatting of num_put::do_put
47533     in libstdc++.
47534
47535   * Phil Edwards for libstdc++ work including configuration hackery,
47536     documentation maintainer, chief breaker of the web pages, the
47537     occasional iostream bug fix, and work on shared library symbol
47538     versioning.
47539
47540   * Paul Eggert for random hacking all over GCC.
47541
47542   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
47543     configuration support for locales and fstream-related fixes.
47544
47545   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
47546     iostreams.
47547
47548   * Christian Ehrhardt for dealing with bug reports.
47549
47550   * Ben Elliston for his work to move the Objective-C runtime into its
47551     own subdirectory and for his work on autoconf.
47552
47553   * Revital Eres for work on the PowerPC 750CL port.
47554
47555   * Marc Espie for OpenBSD support.
47556
47557   * Doug Evans for much of the global optimization framework, arc,
47558     m32r, and SPARC work.
47559
47560   * Christopher Faylor for his work on the Cygwin port and for caring
47561     and feeding the gcc.gnu.org box and saving its users tons of spam.
47562
47563   * Fred Fish for BeOS support and Ada fixes.
47564
47565   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
47566
47567   * Peter Gerwinski for various bug fixes and the Pascal front end.
47568
47569   * Kaveh R. Ghazi for his direction via the steering committee,
47570     amazing work to make `-W -Wall -W* -Werror' useful, and testing
47571     GCC on a plethora of platforms.  Kaveh extends his gratitude to
47572     the CAIP Center at Rutgers University for providing him with
47573     computing resources to work on Free Software from the late 1980s
47574     to 2010.
47575
47576   * John Gilmore for a donation to the FSF earmarked improving GNU
47577     Java.
47578
47579   * Judy Goldberg for c++ contributions.
47580
47581   * Torbjorn Granlund for various fixes and the c-torture testsuite,
47582     multiply- and divide-by-constant optimization, improved long long
47583     support, improved leaf function register allocation, and his
47584     direction via the steering committee.
47585
47586   * Jonny Grant for improvements to `collect2's' `--help'
47587     documentation.
47588
47589   * Anthony Green for his `-Os' contributions, the moxie port, and
47590     Java front end work.
47591
47592   * Stu Grossman for gdb hacking, allowing GCJ developers to debug
47593     Java code.
47594
47595   * Michael K. Gschwind contributed the port to the PDP-11.
47596
47597   * Richard Biener for his ongoing middle-end contributions and bug
47598     fixes and for release management.
47599
47600   * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
47601     the support for Dwarf symbolic debugging information, and much of
47602     the support for System V Release 4.  He has also worked heavily on
47603     the Intel 386 and 860 support.
47604
47605   * Sumanth Gundapaneni for contributing the CR16 port.
47606
47607   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
47608     GCSE.
47609
47610   * Bruno Haible for improvements in the runtime overhead for EH, new
47611     warnings and assorted bug fixes.
47612
47613   * Andrew Haley for his amazing Java compiler and library efforts.
47614
47615   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
47616     series 300.
47617
47618   * Michael Hayes for various thankless work he's done trying to get
47619     the c30/c40 ports functional.  Lots of loop and unroll
47620     improvements and fixes.
47621
47622   * Dara Hazeghi for wading through myriads of target-specific bug
47623     reports.
47624
47625   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
47626
47627   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
47628     work, loop opts, and generally fixing lots of old problems we've
47629     ignored for years, flow rewrite and lots of further stuff,
47630     including reviewing tons of patches.
47631
47632   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
47633     various fixes.
47634
47635   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
47636     contributed the support for the Sony NEWS machine.
47637
47638   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
47639     various fixes.
47640
47641   * Katherine Holcomb for work on GNU Fortran.
47642
47643   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
47644     of testing and bug fixing, particularly of GCC configury code.
47645
47646   * Steve Holmgren for MachTen patches.
47647
47648   * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
47649
47650   * Jan Hubicka for his x86 port improvements.
47651
47652   * Falk Hueffner for working on C and optimization bug reports.
47653
47654   * Bernardo Innocenti for his m68k work, including merging of
47655     ColdFire improvements and uClinux support.
47656
47657   * Christian Iseli for various bug fixes.
47658
47659   * Kamil Iskra for general m68k hacking.
47660
47661   * Lee Iverson for random fixes and MIPS testing.
47662
47663   * Balaji V. Iyer for Cilk+ development and merging.
47664
47665   * Andreas Jaeger for testing and benchmarking of GCC and various bug
47666     fixes.
47667
47668   * Martin Jambor for his work on inter-procedural optimizations, the
47669     switch conversion pass, and scalar replacement of aggregates.
47670
47671   * Jakub Jelinek for his SPARC work and sibling call optimizations as
47672     well as lots of bug fixes and test cases, and for improving the
47673     Java build system.
47674
47675   * Janis Johnson for ia64 testing and fixes, her quality improvement
47676     sidetracks, and web page maintenance.
47677
47678   * Kean Johnston for SCO OpenServer support and various fixes.
47679
47680   * Tim Josling for the sample language treelang based originally on
47681     Richard Kenner's "toy" language.
47682
47683   * Nicolai Josuttis for additional libstdc++ documentation.
47684
47685   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
47686     target.
47687
47688   * Steven G. Kargl for work on GNU Fortran.
47689
47690   * David Kashtan of SRI adapted GCC to VMS.
47691
47692   * Ryszard Kabatek for many, many libstdc++ bug fixes and
47693     optimizations of strings, especially member functions, and for
47694     auto_ptr fixes.
47695
47696   * Geoffrey Keating for his ongoing work to make the PPC work for
47697     GNU/Linux and his automatic regression tester.
47698
47699   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
47700     work in just about every part of libstdc++.
47701
47702   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
47703     MIL-STD-1750A.
47704
47705   * Richard Kenner of the New York University Ultracomputer Research
47706     Laboratory wrote the machine descriptions for the AMD 29000, the
47707     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
47708     support for instruction attributes.  He also made changes to
47709     better support RISC processors including changes to common
47710     subexpression elimination, strength reduction, function calling
47711     sequence handling, and condition code support, in addition to
47712     generalizing the code for frame pointer elimination and delay slot
47713     scheduling.  Richard Kenner was also the head maintainer of GCC
47714     for several years.
47715
47716   * Mumit Khan for various contributions to the Cygwin and Mingw32
47717     ports and maintaining binary releases for Microsoft Windows hosts,
47718     and for massive libstdc++ porting work to Cygwin/Mingw32.
47719
47720   * Robin Kirkham for cpu32 support.
47721
47722   * Mark Klein for PA improvements.
47723
47724   * Thomas Koenig for various bug fixes.
47725
47726   * Bruce Korb for the new and improved fixincludes code.
47727
47728   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
47729     effort.
47730
47731   * Maxim Kuvyrkov for contributions to the instruction scheduler, the
47732     Android and m68k/Coldfire ports, and optimizations.
47733
47734   * Charles LaBrec contributed the support for the Integrated Solutions
47735     68020 system.
47736
47737   * Asher Langton and Mike Kumbera for contributing Cray pointer
47738     support to GNU Fortran, and for other GNU Fortran improvements.
47739
47740   * Jeff Law for his direction via the steering committee,
47741     coordinating the entire egcs project and GCC 2.95, rolling out
47742     snapshots and releases, handling merges from GCC2, reviewing tons
47743     of patches that might have fallen through the cracks else, and
47744     random but extensive hacking.
47745
47746   * Walter Lee for work on the TILE-Gx and TILEPro ports.
47747
47748   * Marc Lehmann for his direction via the steering committee and
47749     helping with analysis and improvements of x86 performance.
47750
47751   * Victor Leikehman for work on GNU Fortran.
47752
47753   * Ted Lemon wrote parts of the RTL reader and printer.
47754
47755   * Kriang Lerdsuwanakij for C++ improvements including template as
47756     template parameter support, and many C++ fixes.
47757
47758   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
47759     and random work on the Java front end.
47760
47761   * Alain Lichnewsky ported GCC to the MIPS CPU.
47762
47763   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
47764     and patches.
47765
47766   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
47767
47768   * Chen Liqin for various S+core related fixes/improvement, and for
47769     maintaining the S+core port.
47770
47771   * Weiwen Liu for testing and various bug fixes.
47772
47773   * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other
47774     diagnostics fixes and improvements.
47775
47776   * Dave Love for his ongoing work with the Fortran front end and
47777     runtime libraries.
47778
47779   * Martin von Lo"wis for internal consistency checking infrastructure,
47780     various C++ improvements including namespace support, and tons of
47781     assistance with libstdc++/compiler merges.
47782
47783   * H.J. Lu for his previous contributions to the steering committee,
47784     many x86 bug reports, prototype patches, and keeping the GNU/Linux
47785     ports working.
47786
47787   * Greg McGary for random fixes and (someday) bounded pointers.
47788
47789   * Andrew MacLeod for his ongoing work in building a real EH system,
47790     various code generation improvements, work on the global
47791     optimizer, etc.
47792
47793   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
47794     hacking improvements to compile-time performance, overall
47795     knowledge and direction in the area of instruction scheduling, and
47796     design and implementation of the automaton based instruction
47797     scheduler.
47798
47799   * Bob Manson for his behind the scenes work on dejagnu.
47800
47801   * John Marino for contributing the DragonFly BSD port.
47802
47803   * Philip Martin for lots of libstdc++ string and vector iterator
47804     fixes and improvements, and string clean up and testsuites.
47805
47806   * Michael Matz for his work on dominance tree discovery, the x86-64
47807     port, link-time optimization framework and general optimization
47808     improvements.
47809
47810   * All of the Mauve project contributors, for Java test code.
47811
47812   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
47813
47814   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
47815
47816   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
47817     powerpc, haifa, ECOFF debug support, and other assorted hacking.
47818
47819   * Jason Merrill for his direction via the steering committee and
47820     leading the G++ effort.
47821
47822   * Martin Michlmayr for testing GCC on several architectures using the
47823     entire Debian archive.
47824
47825   * David Miller for his direction via the steering committee, lots of
47826     SPARC work, improvements in jump.c and interfacing with the Linux
47827     kernel developers.
47828
47829   * Gary Miller ported GCC to Charles River Data Systems machines.
47830
47831   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
47832     the entire libstdc++ testsuite namespace-compatible.
47833
47834   * Mark Mitchell for his direction via the steering committee,
47835     mountains of C++ work, load/store hoisting out of loops, alias
47836     analysis improvements, ISO C `restrict' support, and serving as
47837     release manager from 2000 to 2011.
47838
47839   * Alan Modra for various GNU/Linux bits and testing.
47840
47841   * Toon Moene for his direction via the steering committee, Fortran
47842     maintenance, and his ongoing work to make us make Fortran run fast.
47843
47844   * Jason Molenda for major help in the care and feeding of all the
47845     services on the gcc.gnu.org (formerly egcs.cygnus.com)
47846     machine--mail, web services, ftp services, etc etc.  Doing all
47847     this work on scrap paper and the backs of envelopes would have
47848     been... difficult.
47849
47850   * Catherine Moore for fixing various ugly problems we have sent her
47851     way, including the haifa bug which was killing the Alpha & PowerPC
47852     Linux kernels.
47853
47854   * Mike Moreton for his various Java patches.
47855
47856   * David Mosberger-Tang for various Alpha improvements, and for the
47857     initial IA-64 port.
47858
47859   * Stephen Moshier contributed the floating point emulator that
47860     assists in cross-compilation and permits support for floating
47861     point numbers wider than 64 bits and for ISO C99 support.
47862
47863   * Bill Moyer for his behind the scenes work on various issues.
47864
47865   * Philippe De Muyter for his work on the m68k port.
47866
47867   * Joseph S. Myers for his work on the PDP-11 port, format checking
47868     and ISO C99 support, and continuous emphasis on (and contributions
47869     to) documentation.
47870
47871   * Nathan Myers for his work on libstdc++-v3: architecture and
47872     authorship through the first three snapshots, including
47873     implementation of locale infrastructure, string, shadow C headers,
47874     and the initial project documentation (DESIGN, CHECKLIST, and so
47875     forth).  Later, more work on MT-safe string and shadow headers.
47876
47877   * Felix Natter for documentation on porting libstdc++.
47878
47879   * Nathanael Nerode for cleaning up the configuration/build process.
47880
47881   * NeXT, Inc. donated the front end that supports the Objective-C
47882     language.
47883
47884   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
47885     the search engine setup, various documentation fixes and other
47886     small fixes.
47887
47888   * Geoff Noer for his work on getting cygwin native builds working.
47889
47890   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
47891     tracking web pages, GIMPLE tuples, and assorted fixes.
47892
47893   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
47894     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
47895     related infrastructure improvements.
47896
47897   * Alexandre Oliva for various build infrastructure improvements,
47898     scripts and amazing testing work, including keeping libtool issues
47899     sane and happy.
47900
47901   * Stefan Olsson for work on mt_alloc.
47902
47903   * Melissa O'Neill for various NeXT fixes.
47904
47905   * Rainer Orth for random MIPS work, including improvements to GCC's
47906     o32 ABI support, improvements to dejagnu's MIPS support, Java
47907     configuration clean-ups and porting work, and maintaining the
47908     IRIX, Solaris 2, and Tru64 UNIX ports.
47909
47910   * Hartmut Penner for work on the s390 port.
47911
47912   * Paul Petersen wrote the machine description for the Alliant FX/8.
47913
47914   * Alexandre Petit-Bianco for implementing much of the Java compiler
47915     and continued Java maintainership.
47916
47917   * Matthias Pfaller for major improvements to the NS32k port.
47918
47919   * Gerald Pfeifer for his direction via the steering committee,
47920     pointing out lots of problems we need to solve, maintenance of the
47921     web pages, and taking care of documentation maintenance in general.
47922
47923   * Andrew Pinski for processing bug reports by the dozen.
47924
47925   * Ovidiu Predescu for his work on the Objective-C front end and
47926     runtime libraries.
47927
47928   * Jerry Quinn for major performance improvements in C++ formatted
47929     I/O.
47930
47931   * Ken Raeburn for various improvements to checker, MIPS ports and
47932     various cleanups in the compiler.
47933
47934   * Rolf W. Rasmussen for hacking on AWT.
47935
47936   * David Reese of Sun Microsystems contributed to the Solaris on
47937     PowerPC port.
47938
47939   * Volker Reichelt for keeping up with the problem reports.
47940
47941   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
47942     hacking and developing and maintaining the Epiphany port.
47943
47944   * Loren J. Rittle for improvements to libstdc++-v3 including the
47945     FreeBSD port, threading fixes, thread-related configury changes,
47946     critical threading documentation, and solutions to really tricky
47947     I/O problems, as well as keeping GCC properly working on FreeBSD
47948     and continuous testing.
47949
47950   * Craig Rodrigues for processing tons of bug reports.
47951
47952   * Ola Ro"nnerup for work on mt_alloc.
47953
47954   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
47955
47956   * David Ronis inspired and encouraged Craig to rewrite the G77
47957     documentation in texinfo format by contributing a first pass at a
47958     translation of the old `g77-0.5.16/f/DOC' file.
47959
47960   * Ken Rose for fixes to GCC's delay slot filling code.
47961
47962   * Ira Rosen for her contributions to the auto-vectorizer.
47963
47964   * Paul Rubin wrote most of the preprocessor.
47965
47966   * Pe'tur Runo'lfsson for major performance improvements in C++
47967     formatted I/O and large file support in C++ filebuf.
47968
47969   * Chip Salzenberg for libstdc++ patches and improvements to locales,
47970     traits, Makefiles, libio, libtool hackery, and "long long" support.
47971
47972   * Juha Sarlin for improvements to the H8 code generator.
47973
47974   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
47975     300.
47976
47977   * Roger Sayle for improvements to constant folding and GCC's RTL
47978     optimizers as well as for fixing numerous bugs.
47979
47980   * Bradley Schatz for his work on the GCJ FAQ.
47981
47982   * Peter Schauer wrote the code to allow debugging to work on the
47983     Alpha.
47984
47985   * William Schelter did most of the work on the Intel 80386 support.
47986
47987   * Tobias Schlu"ter for work on GNU Fortran.
47988
47989   * Bernd Schmidt for various code generation improvements and major
47990     work in the reload pass, serving as release manager for GCC
47991     2.95.3, and work on the Blackfin and C6X ports.
47992
47993   * Peter Schmid for constant testing of libstdc++--especially
47994     application testing, going above and beyond what was requested for
47995     the release criteria--and libstdc++ header file tweaks.
47996
47997   * Jason Schroeder for jcf-dump patches.
47998
47999   * Andreas Schwab for his work on the m68k port.
48000
48001   * Lars Segerlund for work on GNU Fortran.
48002
48003   * Dodji Seketeli for numerous C++ bug fixes and debug info
48004     improvements.
48005
48006   * Tim Shen for major work on `<regex>'.
48007
48008   * Joel Sherrill for his direction via the steering committee, RTEMS
48009     contributions and RTEMS testing.
48010
48011   * Nathan Sidwell for many C++ fixes/improvements.
48012
48013   * Jeffrey Siegal for helping RMS with the original design of GCC,
48014     some code which handles the parse tree and RTL data structures,
48015     constant folding and help with the original VAX & m68k ports.
48016
48017   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
48018     from the LWG (thereby keeping GCC in line with updates from the
48019     ISO).
48020
48021   * Franz Sirl for his ongoing work with making the PPC port stable
48022     for GNU/Linux.
48023
48024   * Andrey Slepuhin for assorted AIX hacking.
48025
48026   * Trevor Smigiel for contributing the SPU port.
48027
48028   * Christopher Smith did the port for Convex machines.
48029
48030   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
48031     Retired from GCC maintainership August 2010, having mentored two
48032     new maintainers into the role.
48033
48034   * Randy Smith finished the Sun FPA support.
48035
48036   * Ed Smith-Rowland for his continuous work on libstdc++-v3, special
48037     functions, `<random>', and various improvements to C++11 features.
48038
48039   * Scott Snyder for queue, iterator, istream, and string fixes and
48040     libstdc++ testsuite entries.  Also for providing the patch to G77
48041     to add rudimentary support for `INTEGER*1', `INTEGER*2', and
48042     `LOGICAL*1'.
48043
48044   * Zdenek Sojka for running automated regression testing of GCC and
48045     reporting numerous bugs.
48046
48047   * Jayant Sonar for contributing the CR16 port.
48048
48049   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
48050
48051   * Richard Stallman, for writing the original GCC and launching the
48052     GNU project.
48053
48054   * Jan Stein of the Chalmers Computer Society provided support for
48055     Genix, as well as part of the 32000 machine description.
48056
48057   * Nigel Stephens for various mips16 related fixes/improvements.
48058
48059   * Jonathan Stone wrote the machine description for the Pyramid
48060     computer.
48061
48062   * Graham Stott for various infrastructure improvements.
48063
48064   * John Stracke for his Java HTTP protocol fixes.
48065
48066   * Mike Stump for his Elxsi port, G++ contributions over the years
48067     and more recently his vxworks contributions
48068
48069   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
48070
48071   * Shigeya Suzuki for this fixes for the bsdi platforms.
48072
48073   * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
48074     support, general configury hacking, fixincludes, etc.
48075
48076   * Holger Teutsch provided the support for the Clipper CPU.
48077
48078   * Gary Thomas for his ongoing work to make the PPC work for
48079     GNU/Linux.
48080
48081   * Philipp Thomas for random bug fixes throughout the compiler
48082
48083   * Jason Thorpe for thread support in libstdc++ on NetBSD.
48084
48085   * Kresten Krab Thorup wrote the run time support for the Objective-C
48086     language and the fantastic Java bytecode interpreter.
48087
48088   * Michael Tiemann for random bug fixes, the first instruction
48089     scheduler, initial C++ support, function integration, NS32k, SPARC
48090     and M88k machine description work, delay slot scheduling.
48091
48092   * Andreas Tobler for his work porting libgcj to Darwin.
48093
48094   * Teemu Torma for thread safe exception handling support.
48095
48096   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
48097     definitions, and of the VAX machine description.
48098
48099   * Daniel Towner and Hariharan Sandanagobalane contributed and
48100     maintain the picoChip port.
48101
48102   * Tom Tromey for internationalization support and for his many Java
48103     contributions and libgcj maintainership.
48104
48105   * Lassi Tuura for improvements to config.guess to determine HP
48106     processor types.
48107
48108   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
48109
48110   * Andy Vaught for the design and initial implementation of the GNU
48111     Fortran front end.
48112
48113   * Brent Verner for work with the libstdc++ cshadow files and their
48114     associated configure steps.
48115
48116   * Todd Vierling for contributions for NetBSD ports.
48117
48118   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
48119     guidance.
48120
48121   * Dean Wakerley for converting the install documentation from HTML
48122     to texinfo in time for GCC 3.0.
48123
48124   * Krister Walfridsson for random bug fixes.
48125
48126   * Feng Wang for contributions to GNU Fortran.
48127
48128   * Stephen M. Webb for time and effort on making libstdc++ shadow
48129     files work with the tricky Solaris 8+ headers, and for pushing the
48130     build-time header tree. Also, for starting and driving the
48131     `<regex>' effort.
48132
48133   * John Wehle for various improvements for the x86 code generator,
48134     related infrastructure improvements to help x86 code generation,
48135     value range propagation and other work, WE32k port.
48136
48137   * Ulrich Weigand for work on the s390 port.
48138
48139   * Zack Weinberg for major work on cpplib and various other bug fixes.
48140
48141   * Matt Welsh for help with Linux Threads support in GCJ.
48142
48143   * Urban Widmark for help fixing java.io.
48144
48145   * Mark Wielaard for new Java library code and his work integrating
48146     with Classpath.
48147
48148   * Dale Wiles helped port GCC to the Tahoe.
48149
48150   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
48151
48152   * Jim Wilson for his direction via the steering committee, tackling
48153     hard problems in various places that nobody else wanted to work
48154     on, strength reduction and other loop optimizations.
48155
48156   * Paul Woegerer and Tal Agmon for the CRX port.
48157
48158   * Carlo Wood for various fixes.
48159
48160   * Tom Wood for work on the m88k port.
48161
48162   * Chung-Ju Wu for his work on the Andes NDS32 port.
48163
48164   * Canqun Yang for work on GNU Fortran.
48165
48166   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
48167     description for the Tron architecture (specifically, the Gmicro).
48168
48169   * Kevin Zachmann helped port GCC to the Tahoe.
48170
48171   * Ayal Zaks for Swing Modulo Scheduling (SMS).
48172
48173   * Xiaoqiang Zhang for work on GNU Fortran.
48174
48175   * Gilles Zunino for help porting Java to Irix.
48176
48177
48178 The following people are recognized for their contributions to GNAT,
48179the Ada front end of GCC:
48180   * Bernard Banner
48181
48182   * Romain Berrendonner
48183
48184   * Geert Bosch
48185
48186   * Emmanuel Briot
48187
48188   * Joel Brobecker
48189
48190   * Ben Brosgol
48191
48192   * Vincent Celier
48193
48194   * Arnaud Charlet
48195
48196   * Chien Chieng
48197
48198   * Cyrille Comar
48199
48200   * Cyrille Crozes
48201
48202   * Robert Dewar
48203
48204   * Gary Dismukes
48205
48206   * Robert Duff
48207
48208   * Ed Falis
48209
48210   * Ramon Fernandez
48211
48212   * Sam Figueroa
48213
48214   * Vasiliy Fofanov
48215
48216   * Michael Friess
48217
48218   * Franco Gasperoni
48219
48220   * Ted Giering
48221
48222   * Matthew Gingell
48223
48224   * Laurent Guerby
48225
48226   * Jerome Guitton
48227
48228   * Olivier Hainque
48229
48230   * Jerome Hugues
48231
48232   * Hristian Kirtchev
48233
48234   * Jerome Lambourg
48235
48236   * Bruno Leclerc
48237
48238   * Albert Lee
48239
48240   * Sean McNeil
48241
48242   * Javier Miranda
48243
48244   * Laurent Nana
48245
48246   * Pascal Obry
48247
48248   * Dong-Ik Oh
48249
48250   * Laurent Pautet
48251
48252   * Brett Porter
48253
48254   * Thomas Quinot
48255
48256   * Nicolas Roche
48257
48258   * Pat Rogers
48259
48260   * Jose Ruiz
48261
48262   * Douglas Rupp
48263
48264   * Sergey Rybin
48265
48266   * Gail Schenker
48267
48268   * Ed Schonberg
48269
48270   * Nicolas Setton
48271
48272   * Samuel Tardieu
48273
48274
48275 The following people are recognized for their contributions of new
48276features, bug reports, testing and integration of classpath/libgcj for
48277GCC version 4.1:
48278   * Lillian Angel for `JTree' implementation and lots Free Swing
48279     additions and bug fixes.
48280
48281   * Wolfgang Baer for `GapContent' bug fixes.
48282
48283   * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
48284     event fixes, lots of Free Swing work including `JTable' editing.
48285
48286   * Stuart Ballard for RMI constant fixes.
48287
48288   * Goffredo Baroncelli for `HTTPURLConnection' fixes.
48289
48290   * Gary Benson for `MessageFormat' fixes.
48291
48292   * Daniel Bonniot for `Serialization' fixes.
48293
48294   * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
48295     and `DOM xml:id' support.
48296
48297   * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
48298
48299   * Archie Cobbs for build fixes, VM interface updates,
48300     `URLClassLoader' updates.
48301
48302   * Kelley Cook for build fixes.
48303
48304   * Martin Cordova for Suggestions for better `SocketTimeoutException'.
48305
48306   * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite
48307     and improvements.
48308
48309   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
48310     2D support. Lots of imageio framework additions, lots of AWT and
48311     Free Swing bug fixes.
48312
48313   * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
48314     fixes, better `Proxy' support, bug fixes and IKVM integration.
48315
48316   * Santiago Gala for `AccessControlContext' fixes.
48317
48318   * Nicolas Geoffray for `VMClassLoader' and `AccessController'
48319     improvements.
48320
48321   * David Gilbert for `basic' and `metal' icon and plaf support and
48322     lots of documenting, Lots of Free Swing and metal theme additions.
48323     `MetalIconFactory' implementation.
48324
48325   * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
48326
48327   * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
48328     build speedups.
48329
48330   * Kim Ho for `JFileChooser' implementation.
48331
48332   * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
48333     updates, `Serialization' fixes, `Properties' XML support and
48334     generic branch work, VMIntegration guide update.
48335
48336   * Bastiaan Huisman for `TimeZone' bug fixing.
48337
48338   * Andreas Jaeger for mprec updates.
48339
48340   * Paul Jenner for better `-Werror' support.
48341
48342   * Ito Kazumitsu for `NetworkInterface' implementation and updates.
48343
48344   * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
48345     bug fixes all over. Lots of Free Swing work including styled text.
48346
48347   * Simon Kitching for `String' cleanups and optimization suggestions.
48348
48349   * Michael Koch for configuration fixes, `Locale' updates, bug and
48350     build fixes.
48351
48352   * Guilhem Lavaux for configuration, thread and channel fixes and
48353     Kaffe integration. JCL native `Pointer' updates. Logger bug fixes.
48354
48355   * David Lichteblau for JCL support library global/local reference
48356     cleanups.
48357
48358   * Aaron Luchko for JDWP updates and documentation fixes.
48359
48360   * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
48361     features.
48362
48363   * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
48364     fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
48365     and implementing the Qt4 peers.
48366
48367   * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
48368     `SystemLogger' and `FileHandler' rotate implementations, NIO
48369     `FileChannel.map' support, security and policy updates.
48370
48371   * Bryce McKinlay for RMI work.
48372
48373   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
48374     testing and documenting.
48375
48376   * Kalle Olavi Niemitalo for build fixes.
48377
48378   * Rainer Orth for build fixes.
48379
48380   * Andrew Overholt for `File' locking fixes.
48381
48382   * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
48383
48384   * Olga Rodimina for `MenuSelectionManager' implementation.
48385
48386   * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
48387
48388   * Julian Scheid for documentation updates and gjdoc support.
48389
48390   * Christian Schlichtherle for zip fixes and cleanups.
48391
48392   * Robert Schuster for documentation updates and beans fixes,
48393     `TreeNode' enumerations and `ActionCommand' and various fixes, XML
48394     and URL, AWT and Free Swing bug fixes.
48395
48396   * Keith Seitz for lots of JDWP work.
48397
48398   * Christian Thalinger for 64-bit cleanups, Configuration and VM
48399     interface fixes and `CACAO' integration, `fdlibm' updates.
48400
48401   * Gael Thomas for `VMClassLoader' boot packages support suggestions.
48402
48403   * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
48404     support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
48405
48406   * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
48407     integration. `Qt4' build infrastructure, `SHA1PRNG' and
48408     `GdkPixbugDecoder' updates.
48409
48410   * Tom Tromey for Eclipse integration, generics work, lots of bug
48411     fixes and gcj integration including coordinating The Big Merge.
48412
48413   * Mark Wielaard for bug fixes, packaging and release management,
48414     `Clipboard' implementation, system call interrupts and network
48415     timeouts and `GdkPixpufDecoder' fixes.
48416
48417
48418 In addition to the above, all of which also contributed time and
48419energy in testing GCC, we would like to thank the following for their
48420contributions to testing:
48421
48422   * Michael Abd-El-Malek
48423
48424   * Thomas Arend
48425
48426   * Bonzo Armstrong
48427
48428   * Steven Ashe
48429
48430   * Chris Baldwin
48431
48432   * David Billinghurst
48433
48434   * Jim Blandy
48435
48436   * Stephane Bortzmeyer
48437
48438   * Horst von Brand
48439
48440   * Frank Braun
48441
48442   * Rodney Brown
48443
48444   * Sidney Cadot
48445
48446   * Bradford Castalia
48447
48448   * Robert Clark
48449
48450   * Jonathan Corbet
48451
48452   * Ralph Doncaster
48453
48454   * Richard Emberson
48455
48456   * Levente Farkas
48457
48458   * Graham Fawcett
48459
48460   * Mark Fernyhough
48461
48462   * Robert A. French
48463
48464   * Jo"rgen Freyh
48465
48466   * Mark K. Gardner
48467
48468   * Charles-Antoine Gauthier
48469
48470   * Yung Shing Gene
48471
48472   * David Gilbert
48473
48474   * Simon Gornall
48475
48476   * Fred Gray
48477
48478   * John Griffin
48479
48480   * Patrik Hagglund
48481
48482   * Phil Hargett
48483
48484   * Amancio Hasty
48485
48486   * Takafumi Hayashi
48487
48488   * Bryan W. Headley
48489
48490   * Kevin B. Hendricks
48491
48492   * Joep Jansen
48493
48494   * Christian Joensson
48495
48496   * Michel Kern
48497
48498   * David Kidd
48499
48500   * Tobias Kuipers
48501
48502   * Anand Krishnaswamy
48503
48504   * A. O. V. Le Blanc
48505
48506   * llewelly
48507
48508   * Damon Love
48509
48510   * Brad Lucier
48511
48512   * Matthias Klose
48513
48514   * Martin Knoblauch
48515
48516   * Rick Lutowski
48517
48518   * Jesse Macnish
48519
48520   * Stefan Morrell
48521
48522   * Anon A. Mous
48523
48524   * Matthias Mueller
48525
48526   * Pekka Nikander
48527
48528   * Rick Niles
48529
48530   * Jon Olson
48531
48532   * Magnus Persson
48533
48534   * Chris Pollard
48535
48536   * Richard Polton
48537
48538   * Derk Reefman
48539
48540   * David Rees
48541
48542   * Paul Reilly
48543
48544   * Tom Reilly
48545
48546   * Torsten Rueger
48547
48548   * Danny Sadinoff
48549
48550   * Marc Schifer
48551
48552   * Erik Schnetter
48553
48554   * Wayne K. Schroll
48555
48556   * David Schuler
48557
48558   * Vin Shelton
48559
48560   * Tim Souder
48561
48562   * Adam Sulmicki
48563
48564   * Bill Thorson
48565
48566   * George Talbot
48567
48568   * Pedro A. M. Vazquez
48569
48570   * Gregory Warnes
48571
48572   * Ian Watson
48573
48574   * David E. Young
48575
48576   * And many others
48577
48578 And finally we'd like to thank everyone who uses the compiler, provides
48579feedback and generally reminds us why we're doing this work in the first
48580place.
48581
48582
48583File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
48584
48585Option Index
48586************
48587
48588GCC's command line options are indexed here without any initial `-' or
48589`--'.  Where an option has both positive and negative forms (such as
48590`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
48591indexed under the most appropriate form; it may sometimes be useful to
48592look up both forms.
48593
48594[index]
48595* Menu:
48596
48597* ###:                                   Overall Options.    (line  209)
48598* -fipa-cp-alignment:                    Optimize Options.   (line  991)
48599* -Wabi-tag:                             C++ Dialect Options.
48600                                                             (line  531)
48601* A:                                     Preprocessor Options.
48602                                                             (line  596)
48603* all_load:                              Darwin Options.     (line  110)
48604* allowable_client:                      Darwin Options.     (line  196)
48605* ansi <1>:                              Non-bugs.           (line  107)
48606* ansi <2>:                              Other Builtins.     (line   22)
48607* ansi <3>:                              Preprocessor Options.
48608                                                             (line  338)
48609* ansi <4>:                              C Dialect Options.  (line   11)
48610* ansi:                                  Standards.          (line   16)
48611* arch_errors_fatal:                     Darwin Options.     (line  114)
48612* aux-info:                              C Dialect Options.  (line  176)
48613* B:                                     Directory Options.  (line   46)
48614* Bdynamic:                              VxWorks Options.    (line   22)
48615* bind_at_load:                          Darwin Options.     (line  118)
48616* Bstatic:                               VxWorks Options.    (line   22)
48617* bundle:                                Darwin Options.     (line  123)
48618* bundle_loader:                         Darwin Options.     (line  127)
48619* c:                                     Link Options.       (line   20)
48620* C:                                     Preprocessor Options.
48621                                                             (line  654)
48622* c:                                     Overall Options.    (line  164)
48623* client_name:                           Darwin Options.     (line  196)
48624* compatibility_version:                 Darwin Options.     (line  196)
48625* coverage:                              Debugging Options.  (line  724)
48626* current_version:                       Darwin Options.     (line  196)
48627* D:                                     Preprocessor Options.
48628                                                             (line   46)
48629* d:                                     Debugging Options.  (line  856)
48630* dA:                                    Debugging Options.  (line 1061)
48631* da:                                    Debugging Options.  (line 1058)
48632* dD <1>:                                Preprocessor Options.
48633                                                             (line  628)
48634* dD:                                    Debugging Options.  (line 1065)
48635* dead_strip:                            Darwin Options.     (line  196)
48636* dependency-file:                       Darwin Options.     (line  196)
48637* dH:                                    Debugging Options.  (line 1069)
48638* dI:                                    Preprocessor Options.
48639                                                             (line  637)
48640* dM:                                    Preprocessor Options.
48641                                                             (line  612)
48642* dN:                                    Preprocessor Options.
48643                                                             (line  634)
48644* dP:                                    Debugging Options.  (line 1077)
48645* dp:                                    Debugging Options.  (line 1072)
48646* dU:                                    Preprocessor Options.
48647                                                             (line  641)
48648* dumpmachine:                           Debugging Options.  (line 1679)
48649* dumpspecs:                             Debugging Options.  (line 1687)
48650* dumpversion:                           Debugging Options.  (line 1683)
48651* dx:                                    Debugging Options.  (line 1081)
48652* dylib_file:                            Darwin Options.     (line  196)
48653* dylinker_install_name:                 Darwin Options.     (line  196)
48654* dynamic:                               Darwin Options.     (line  196)
48655* dynamiclib:                            Darwin Options.     (line  131)
48656* E <1>:                                 Link Options.       (line   20)
48657* E:                                     Overall Options.    (line  185)
48658* EB <1>:                                MIPS Options.       (line    7)
48659* EB:                                    ARC Options.        (line  350)
48660* EL <1>:                                MIPS Options.       (line   10)
48661* EL:                                    ARC Options.        (line  357)
48662* exported_symbols_list:                 Darwin Options.     (line  196)
48663* F:                                     Darwin Options.     (line   31)
48664* fabi-compat-version:                   C++ Dialect Options.
48665                                                             (line   62)
48666* fabi-version:                          C++ Dialect Options.
48667                                                             (line   20)
48668* fada-spec-parent:                      Overall Options.    (line  369)
48669* faggressive-loop-optimizations:        Optimize Options.   (line  506)
48670* falign-functions:                      Optimize Options.   (line 1566)
48671* falign-jumps:                          Optimize Options.   (line 1615)
48672* falign-labels:                         Optimize Options.   (line 1584)
48673* falign-loops:                          Optimize Options.   (line 1602)
48674* fallow-parameterless-variadic-functions: C Dialect Options.
48675                                                             (line  192)
48676* fasan-shadow-offset:                   Debugging Options.  (line  349)
48677* fassociative-math:                     Optimize Options.   (line 2125)
48678* fasynchronous-unwind-tables:           Code Gen Options.   (line  146)
48679* fauto-inc-dec:                         Optimize Options.   (line  530)
48680* fauto-profile:                         Optimize Options.   (line 2006)
48681* fbounds-check:                         Code Gen Options.   (line   15)
48682* fbranch-probabilities:                 Optimize Options.   (line 2252)
48683* fbranch-target-load-optimize:          Optimize Options.   (line 2375)
48684* fbranch-target-load-optimize2:         Optimize Options.   (line 2381)
48685* fbtr-bb-exclusive:                     Optimize Options.   (line 2385)
48686* fcall-saved:                           Code Gen Options.   (line  358)
48687* fcall-used:                            Code Gen Options.   (line  344)
48688* fcaller-saves:                         Optimize Options.   (line  880)
48689* fcheck-data-deps:                      Optimize Options.   (line 1201)
48690* fcheck-new:                            C++ Dialect Options.
48691                                                             (line   77)
48692* fcheck-pointer-bounds:                 Debugging Options.  (line  388)
48693* fchkp-check-incomplete-type:           Debugging Options.  (line  428)
48694* fchkp-check-read:                      Debugging Options.  (line  478)
48695* fchkp-check-write:                     Debugging Options.  (line  482)
48696* fchkp-first-field-has-own-bounds:      Debugging Options.  (line  439)
48697* fchkp-instrument-calls:                Debugging Options.  (line  490)
48698* fchkp-instrument-marked-only:          Debugging Options.  (line  494)
48699* fchkp-narrow-bounds:                   Debugging Options.  (line  432)
48700* fchkp-narrow-to-innermost-array:       Debugging Options.  (line  445)
48701* fchkp-optimize:                        Debugging Options.  (line  450)
48702* fchkp-store-bounds:                    Debugging Options.  (line  486)
48703* fchkp-treat-zero-dynamic-size-as-infinite: Debugging Options.
48704                                                             (line  471)
48705* fchkp-use-fast-string-functions:       Debugging Options.  (line  454)
48706* fchkp-use-nochk-string-functions:      Debugging Options.  (line  458)
48707* fchkp-use-static-bounds:               Debugging Options.  (line  462)
48708* fchkp-use-static-const-bounds:         Debugging Options.  (line  466)
48709* fchkp-use-wrappers:                    Debugging Options.  (line  499)
48710* fcilkplus:                             C Dialect Options.  (line  288)
48711* fcombine-stack-adjustments:            Optimize Options.   (line  892)
48712* fcommon:                               Variable Attributes.
48713                                                             (line  106)
48714* fcompare-debug:                        Debugging Options.  (line  512)
48715* fcompare-debug-second:                 Debugging Options.  (line  538)
48716* fcompare-elim:                         Optimize Options.   (line 1941)
48717* fcond-mismatch:                        C Dialect Options.  (line  352)
48718* fconserve-stack:                       Optimize Options.   (line  907)
48719* fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
48720                                                             (line   30)
48721* fconstexpr-depth:                      C++ Dialect Options.
48722                                                             (line   87)
48723* fcprop-registers:                      Optimize Options.   (line 1953)
48724* fcrossjumping:                         Optimize Options.   (line  523)
48725* fcse-follow-jumps:                     Optimize Options.   (line  442)
48726* fcse-skip-blocks:                      Optimize Options.   (line  451)
48727* fcx-fortran-rules:                     Optimize Options.   (line 2238)
48728* fcx-limited-range:                     Optimize Options.   (line 2226)
48729* fdata-sections:                        Optimize Options.   (line 2356)
48730* fdbg-cnt:                              Debugging Options.  (line  777)
48731* fdbg-cnt-list:                         Debugging Options.  (line  774)
48732* fdce:                                  Optimize Options.   (line  536)
48733* fdebug-cpp:                            Preprocessor Options.
48734                                                             (line  525)
48735* fdebug-prefix-map:                     Debugging Options.  (line  632)
48736* fdebug-types-section:                  Debugging Options.  (line   79)
48737* fdeclone-ctor-dtor:                    Optimize Options.   (line  559)
48738* fdeduce-init-list:                     C++ Dialect Options.
48739                                                             (line   93)
48740* fdelayed-branch:                       Optimize Options.   (line  710)
48741* fdelete-dead-exceptions:               Code Gen Options.   (line  131)
48742* fdelete-null-pointer-checks:           Optimize Options.   (line  570)
48743* fdevirtualize:                         Optimize Options.   (line  588)
48744* fdevirtualize-at-ltrans:               Optimize Options.   (line  605)
48745* fdevirtualize-speculatively:           Optimize Options.   (line  595)
48746* fdiagnostics-color:                    Language Independent Options.
48747                                                             (line   35)
48748* fdiagnostics-show-caret:               Language Independent Options.
48749                                                             (line   94)
48750* fdiagnostics-show-location:            Language Independent Options.
48751                                                             (line   20)
48752* fdiagnostics-show-option:              Language Independent Options.
48753                                                             (line   88)
48754* fdirectives-only:                      Preprocessor Options.
48755                                                             (line  473)
48756* fdisable-:                             Debugging Options.  (line  787)
48757* fdollars-in-identifiers <1>:           Interoperation.     (line  141)
48758* fdollars-in-identifiers:               Preprocessor Options.
48759                                                             (line  495)
48760* fdse:                                  Optimize Options.   (line  540)
48761* fdump-ada-spec:                        Overall Options.    (line  363)
48762* fdump-class-hierarchy:                 Debugging Options.  (line 1116)
48763* fdump-final-insns:                     Debugging Options.  (line  506)
48764* fdump-go-spec:                         Overall Options.    (line  373)
48765* fdump-ipa:                             Debugging Options.  (line 1124)
48766* fdump-noaddr:                          Debugging Options.  (line 1085)
48767* fdump-passes:                          Debugging Options.  (line 1142)
48768* fdump-rtl-alignments:                  Debugging Options.  (line  877)
48769* fdump-rtl-all:                         Debugging Options.  (line 1058)
48770* fdump-rtl-asmcons:                     Debugging Options.  (line  880)
48771* fdump-rtl-auto_inc_dec:                Debugging Options.  (line  884)
48772* fdump-rtl-barriers:                    Debugging Options.  (line  888)
48773* fdump-rtl-bbpart:                      Debugging Options.  (line  891)
48774* fdump-rtl-bbro:                        Debugging Options.  (line  894)
48775* fdump-rtl-btl2:                        Debugging Options.  (line  898)
48776* fdump-rtl-bypass:                      Debugging Options.  (line  902)
48777* fdump-rtl-ce1:                         Debugging Options.  (line  913)
48778* fdump-rtl-ce2:                         Debugging Options.  (line  913)
48779* fdump-rtl-ce3:                         Debugging Options.  (line  913)
48780* fdump-rtl-combine:                     Debugging Options.  (line  905)
48781* fdump-rtl-compgotos:                   Debugging Options.  (line  908)
48782* fdump-rtl-cprop_hardreg:               Debugging Options.  (line  917)
48783* fdump-rtl-csa:                         Debugging Options.  (line  920)
48784* fdump-rtl-cse1:                        Debugging Options.  (line  924)
48785* fdump-rtl-cse2:                        Debugging Options.  (line  924)
48786* fdump-rtl-dbr:                         Debugging Options.  (line  931)
48787* fdump-rtl-dce:                         Debugging Options.  (line  928)
48788* fdump-rtl-dce1:                        Debugging Options.  (line  935)
48789* fdump-rtl-dce2:                        Debugging Options.  (line  935)
48790* fdump-rtl-dfinish:                     Debugging Options.  (line 1054)
48791* fdump-rtl-dfinit:                      Debugging Options.  (line 1054)
48792* fdump-rtl-eh:                          Debugging Options.  (line  939)
48793* fdump-rtl-eh_ranges:                   Debugging Options.  (line  942)
48794* fdump-rtl-expand:                      Debugging Options.  (line  945)
48795* fdump-rtl-fwprop1:                     Debugging Options.  (line  949)
48796* fdump-rtl-fwprop2:                     Debugging Options.  (line  949)
48797* fdump-rtl-gcse1:                       Debugging Options.  (line  954)
48798* fdump-rtl-gcse2:                       Debugging Options.  (line  954)
48799* fdump-rtl-init-regs:                   Debugging Options.  (line  958)
48800* fdump-rtl-initvals:                    Debugging Options.  (line  961)
48801* fdump-rtl-into_cfglayout:              Debugging Options.  (line  964)
48802* fdump-rtl-ira:                         Debugging Options.  (line  967)
48803* fdump-rtl-jump:                        Debugging Options.  (line  970)
48804* fdump-rtl-loop2:                       Debugging Options.  (line  973)
48805* fdump-rtl-mach:                        Debugging Options.  (line  977)
48806* fdump-rtl-mode_sw:                     Debugging Options.  (line  981)
48807* fdump-rtl-outof_cfglayout:             Debugging Options.  (line  987)
48808* fdump-rtl-PASS:                        Debugging Options.  (line  856)
48809* fdump-rtl-peephole2:                   Debugging Options.  (line  990)
48810* fdump-rtl-postreload:                  Debugging Options.  (line  993)
48811* fdump-rtl-pro_and_epilogue:            Debugging Options.  (line  996)
48812* fdump-rtl-ree:                         Debugging Options.  (line 1004)
48813* fdump-rtl-regclass:                    Debugging Options.  (line 1054)
48814* fdump-rtl-rnreg:                       Debugging Options.  (line  984)
48815* fdump-rtl-sched1:                      Debugging Options.  (line 1000)
48816* fdump-rtl-sched2:                      Debugging Options.  (line 1000)
48817* fdump-rtl-seqabstr:                    Debugging Options.  (line 1007)
48818* fdump-rtl-shorten:                     Debugging Options.  (line 1010)
48819* fdump-rtl-sibling:                     Debugging Options.  (line 1013)
48820* fdump-rtl-sms:                         Debugging Options.  (line 1024)
48821* fdump-rtl-split1:                      Debugging Options.  (line 1020)
48822* fdump-rtl-split2:                      Debugging Options.  (line 1020)
48823* fdump-rtl-split3:                      Debugging Options.  (line 1020)
48824* fdump-rtl-split4:                      Debugging Options.  (line 1020)
48825* fdump-rtl-split5:                      Debugging Options.  (line 1020)
48826* fdump-rtl-stack:                       Debugging Options.  (line 1028)
48827* fdump-rtl-subreg1:                     Debugging Options.  (line 1034)
48828* fdump-rtl-subreg2:                     Debugging Options.  (line 1034)
48829* fdump-rtl-subregs_of_mode_finish:      Debugging Options.  (line 1054)
48830* fdump-rtl-subregs_of_mode_init:        Debugging Options.  (line 1054)
48831* fdump-rtl-unshare:                     Debugging Options.  (line 1038)
48832* fdump-rtl-vartrack:                    Debugging Options.  (line 1041)
48833* fdump-rtl-vregs:                       Debugging Options.  (line 1044)
48834* fdump-rtl-web:                         Debugging Options.  (line 1047)
48835* fdump-statistics:                      Debugging Options.  (line 1146)
48836* fdump-translation-unit:                Debugging Options.  (line 1107)
48837* fdump-tree:                            Debugging Options.  (line 1158)
48838* fdump-tree-alias:                      Debugging Options.  (line 1297)
48839* fdump-tree-all:                        Debugging Options.  (line 1382)
48840* fdump-tree-ccp:                        Debugging Options.  (line 1301)
48841* fdump-tree-cfg:                        Debugging Options.  (line 1285)
48842* fdump-tree-ch:                         Debugging Options.  (line 1289)
48843* fdump-tree-copyprop:                   Debugging Options.  (line 1317)
48844* fdump-tree-copyrename:                 Debugging Options.  (line 1358)
48845* fdump-tree-dce:                        Debugging Options.  (line 1325)
48846* fdump-tree-dom:                        Debugging Options.  (line 1338)
48847* fdump-tree-dse:                        Debugging Options.  (line 1343)
48848* fdump-tree-forwprop:                   Debugging Options.  (line 1353)
48849* fdump-tree-fre:                        Debugging Options.  (line 1313)
48850* fdump-tree-gimple:                     Debugging Options.  (line 1280)
48851* fdump-tree-nrv:                        Debugging Options.  (line 1363)
48852* fdump-tree-optimized:                  Debugging Options.  (line 1277)
48853* fdump-tree-original:                   Debugging Options.  (line 1274)
48854* fdump-tree-phiopt:                     Debugging Options.  (line 1348)
48855* fdump-tree-pre:                        Debugging Options.  (line 1309)
48856* fdump-tree-sink:                       Debugging Options.  (line 1334)
48857* fdump-tree-slp:                        Debugging Options.  (line 1373)
48858* fdump-tree-sra:                        Debugging Options.  (line 1329)
48859* fdump-tree-ssa:                        Debugging Options.  (line 1293)
48860* fdump-tree-store_copyprop:             Debugging Options.  (line 1321)
48861* fdump-tree-storeccp:                   Debugging Options.  (line 1305)
48862* fdump-tree-vect:                       Debugging Options.  (line 1368)
48863* fdump-tree-vrp:                        Debugging Options.  (line 1378)
48864* fdump-unnumbered:                      Debugging Options.  (line 1095)
48865* fdump-unnumbered-links:                Debugging Options.  (line 1101)
48866* fdwarf2-cfi-asm:                       Debugging Options.  (line  636)
48867* fearly-inlining:                       Optimize Options.   (line  292)
48868* feliminate-dwarf2-dups:                Debugging Options.  (line  551)
48869* feliminate-unused-debug-symbols:       Debugging Options.  (line   67)
48870* feliminate-unused-debug-types:         Debugging Options.  (line 1691)
48871* femit-class-debug-always:              Debugging Options.  (line   71)
48872* femit-struct-debug-baseonly:           Debugging Options.  (line  556)
48873* femit-struct-debug-detailed:           Debugging Options.  (line  583)
48874* femit-struct-debug-reduced:            Debugging Options.  (line  569)
48875* fenable-:                              Debugging Options.  (line  787)
48876* fexceptions:                           Code Gen Options.   (line  108)
48877* fexcess-precision:                     Optimize Options.   (line 2053)
48878* fexec-charset:                         Preprocessor Options.
48879                                                             (line  553)
48880* fexpensive-optimizations:              Optimize Options.   (line  612)
48881* fext-numeric-literals:                 C++ Dialect Options.
48882                                                             (line  612)
48883* fextended-identifiers:                 Preprocessor Options.
48884                                                             (line  498)
48885* fextern-tls-init:                      C++ Dialect Options.
48886                                                             (line  143)
48887* ffast-math:                            Optimize Options.   (line 2076)
48888* ffat-lto-objects:                      Optimize Options.   (line 1922)
48889* ffinite-math-only:                     Optimize Options.   (line 2150)
48890* ffix-and-continue:                     Darwin Options.     (line  104)
48891* ffixed:                                Code Gen Options.   (line  332)
48892* ffloat-store <1>:                      Disappointments.    (line   77)
48893* ffloat-store:                          Optimize Options.   (line 2039)
48894* ffor-scope:                            C++ Dialect Options.
48895                                                             (line  164)
48896* fforward-propagate:                    Optimize Options.   (line  195)
48897* ffp-contract:                          Optimize Options.   (line  204)
48898* ffreestanding <1>:                     Function Attributes.
48899                                                             (line  464)
48900* ffreestanding <2>:                     Warning Options.    (line  270)
48901* ffreestanding <3>:                     C Dialect Options.  (line  254)
48902* ffreestanding:                         Standards.          (line   92)
48903* ffriend-injection:                     C++ Dialect Options.
48904                                                             (line  114)
48905* ffunction-sections:                    Optimize Options.   (line 2356)
48906* fgcse:                                 Optimize Options.   (line  465)
48907* fgcse-after-reload:                    Optimize Options.   (line  501)
48908* fgcse-las:                             Optimize Options.   (line  494)
48909* fgcse-lm:                              Optimize Options.   (line  476)
48910* fgcse-sm:                              Optimize Options.   (line  485)
48911* fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
48912                                                             (line   39)
48913* fgnu-tm:                               C Dialect Options.  (line  298)
48914* fgnu89-inline:                         C Dialect Options.  (line  159)
48915* fgraphite-identity:                    Optimize Options.   (line 1174)
48916* fhoist-adjacent-loads:                 Optimize Options.   (line  940)
48917* fhosted:                               C Dialect Options.  (line  247)
48918* fif-conversion:                        Optimize Options.   (line  544)
48919* fif-conversion2:                       Optimize Options.   (line  553)
48920* filelist:                              Darwin Options.     (line  196)
48921* findirect-data:                        Darwin Options.     (line  104)
48922* findirect-inlining:                    Optimize Options.   (line  265)
48923* finhibit-size-directive:               Code Gen Options.   (line  252)
48924* finline-functions:                     Optimize Options.   (line  273)
48925* finline-functions-called-once:         Optimize Options.   (line  284)
48926* finline-limit:                         Optimize Options.   (line  309)
48927* finline-small-functions:               Optimize Options.   (line  256)
48928* finput-charset:                        Preprocessor Options.
48929                                                             (line  566)
48930* finstrument-functions <1>:             Function Attributes.
48931                                                             (line 1073)
48932* finstrument-functions:                 Code Gen Options.   (line  388)
48933* finstrument-functions-exclude-file-list: Code Gen Options. (line  424)
48934* finstrument-functions-exclude-function-list: Code Gen Options.
48935                                                             (line  444)
48936* fipa-cp:                               Optimize Options.   (line  973)
48937* fipa-cp-clone:                         Optimize Options.   (line  981)
48938* fipa-icf:                              Optimize Options.   (line  998)
48939* fipa-profile:                          Optimize Options.   (line  965)
48940* fipa-pta:                              Optimize Options.   (line  959)
48941* fipa-pure-const:                       Optimize Options.   (line  951)
48942* fipa-ra:                               Optimize Options.   (line  898)
48943* fipa-reference:                        Optimize Options.   (line  955)
48944* fipa-sra:                              Optimize Options.   (line  302)
48945* fira-algorithm:                        Optimize Options.   (line  640)
48946* fira-hoist-pressure:                   Optimize Options.   (line  670)
48947* fira-loop-pressure:                    Optimize Options.   (line  677)
48948* fira-region:                           Optimize Options.   (line  648)
48949* fira-verbose:                          Optimize Options.   (line  697)
48950* fisolate-erroneous-paths-attribute:    Optimize Options.   (line 1019)
48951* fisolate-erroneous-paths-dereference:  Optimize Options.   (line 1012)
48952* fivar-visibility:                      Objective-C and Objective-C++ Dialect Options.
48953                                                             (line  162)
48954* fivopts:                               Optimize Options.   (line 1277)
48955* fkeep-inline-functions <1>:            Inline.             (line   51)
48956* fkeep-inline-functions:                Optimize Options.   (line  341)
48957* fkeep-static-consts:                   Optimize Options.   (line  348)
48958* flat_namespace:                        Darwin Options.     (line  196)
48959* flax-vector-conversions:               C Dialect Options.  (line  357)
48960* fleading-underscore:                   Code Gen Options.   (line  527)
48961* flive-range-shrinkage:                 Optimize Options.   (line  635)
48962* flocal-ivars:                          Objective-C and Objective-C++ Dialect Options.
48963                                                             (line  153)
48964* floop-block:                           Optimize Options.   (line 1145)
48965* floop-interchange:                     Optimize Options.   (line 1100)
48966* floop-nest-optimize:                   Optimize Options.   (line 1182)
48967* floop-parallelize-all:                 Optimize Options.   (line 1195)
48968* floop-strip-mine:                      Optimize Options.   (line 1124)
48969* floop-unroll-and-jam:                  Optimize Options.   (line 1188)
48970* flra-remat:                            Optimize Options.   (line  703)
48971* flto:                                  Optimize Options.   (line 1669)
48972* flto-compression-level:                Optimize Options.   (line 1884)
48973* flto-odr-type-merging:                 Optimize Options.   (line 1879)
48974* flto-partition:                        Optimize Options.   (line 1865)
48975* flto-report:                           Optimize Options.   (line 1892)
48976* flto-report-wpa:                       Optimize Options.   (line 1900)
48977* fmax-errors:                           Warning Options.    (line   18)
48978* fmem-report:                           Debugging Options.  (line  660)
48979* fmem-report-wpa:                       Debugging Options.  (line  664)
48980* fmerge-all-constants:                  Optimize Options.   (line  367)
48981* fmerge-constants:                      Optimize Options.   (line  357)
48982* fmerge-debug-strings:                  Debugging Options.  (line  625)
48983* fmessage-length:                       Language Independent Options.
48984                                                             (line   14)
48985* fmodulo-sched:                         Optimize Options.   (line  378)
48986* fmodulo-sched-allow-regmoves:          Optimize Options.   (line  383)
48987* fmove-loop-invariants:                 Optimize Options.   (line 2346)
48988* fms-extensions <1>:                    Unnamed Fields.     (line   36)
48989* fms-extensions <2>:                    C++ Dialect Options.
48990                                                             (line  198)
48991* fms-extensions:                        C Dialect Options.  (line  313)
48992* fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
48993                                                             (line   43)
48994* fno-access-control:                    C++ Dialect Options.
48995                                                             (line   73)
48996* fno-asm:                               C Dialect Options.  (line  199)
48997* fno-branch-count-reg:                  Optimize Options.   (line  390)
48998* fno-builtin <1>:                       Other Builtins.     (line   14)
48999* fno-builtin <2>:                       Function Attributes.
49000                                                             (line  464)
49001* fno-builtin <3>:                       Warning Options.    (line  270)
49002* fno-builtin:                           C Dialect Options.  (line  213)
49003* fno-canonical-system-headers:          Preprocessor Options.
49004                                                             (line  502)
49005* fno-check-pointer-bounds:              Debugging Options.  (line  388)
49006* fno-chkp-check-incomplete-type:        Debugging Options.  (line  428)
49007* fno-chkp-check-read:                   Debugging Options.  (line  478)
49008* fno-chkp-check-write:                  Debugging Options.  (line  482)
49009* fno-chkp-first-field-has-own-bounds:   Debugging Options.  (line  439)
49010* fno-chkp-instrument-calls:             Debugging Options.  (line  490)
49011* fno-chkp-instrument-marked-only:       Debugging Options.  (line  494)
49012* fno-chkp-narrow-bounds:                Debugging Options.  (line  432)
49013* fno-chkp-narrow-to-innermost-array:    Debugging Options.  (line  445)
49014* fno-chkp-optimize:                     Debugging Options.  (line  450)
49015* fno-chkp-store-bounds:                 Debugging Options.  (line  486)
49016* fno-chkp-treat-zero-dynamic-size-as-infinite: Debugging Options.
49017                                                             (line  471)
49018* fno-chkp-use-fast-string-functions:    Debugging Options.  (line  454)
49019* fno-chkp-use-nochk-string-functions:   Debugging Options.  (line  458)
49020* fno-chkp-use-static-bounds:            Debugging Options.  (line  462)
49021* fno-chkp-use-static-const-bounds:      Debugging Options.  (line  466)
49022* fno-chkp-use-wrappers:                 Debugging Options.  (line  499)
49023* fno-common <1>:                        Variable Attributes.
49024                                                             (line  106)
49025* fno-common:                            Code Gen Options.   (line  229)
49026* fno-compare-debug:                     Debugging Options.  (line  512)
49027* fno-debug-types-section:               Debugging Options.  (line   79)
49028* fno-default-inline:                    Inline.             (line   71)
49029* fno-defer-pop:                         Optimize Options.   (line  187)
49030* fno-diagnostics-show-caret:            Language Independent Options.
49031                                                             (line   94)
49032* fno-diagnostics-show-option:           Language Independent Options.
49033                                                             (line   88)
49034* fno-dwarf2-cfi-asm:                    Debugging Options.  (line  636)
49035* fno-elide-constructors:                C++ Dialect Options.
49036                                                             (line  126)
49037* fno-eliminate-unused-debug-types:      Debugging Options.  (line 1691)
49038* fno-enforce-eh-specs:                  C++ Dialect Options.
49039                                                             (line  132)
49040* fno-ext-numeric-literals:              C++ Dialect Options.
49041                                                             (line  612)
49042* fno-extern-tls-init:                   C++ Dialect Options.
49043                                                             (line  143)
49044* fno-for-scope:                         C++ Dialect Options.
49045                                                             (line  164)
49046* fno-function-cse:                      Optimize Options.   (line  402)
49047* fno-gnu-keywords:                      C++ Dialect Options.
49048                                                             (line  176)
49049* fno-gnu-unique:                        Code Gen Options.   (line  152)
49050* fno-guess-branch-probability:          Optimize Options.   (line 1436)
49051* fno-ident:                             Code Gen Options.   (line  249)
49052* fno-implement-inlines <1>:             C++ Interface.      (line   66)
49053* fno-implement-inlines:                 C++ Dialect Options.
49054                                                             (line  193)
49055* fno-implicit-inline-templates:         C++ Dialect Options.
49056                                                             (line  187)
49057* fno-implicit-templates <1>:            Template Instantiation.
49058                                                             (line   78)
49059* fno-implicit-templates:                C++ Dialect Options.
49060                                                             (line  181)
49061* fno-inline:                            Optimize Options.   (line  248)
49062* fno-ira-share-save-slots:              Optimize Options.   (line  685)
49063* fno-ira-share-spill-slots:             Optimize Options.   (line  691)
49064* fno-jump-tables:                       Code Gen Options.   (line  324)
49065* fno-keep-inline-dllexport:             Optimize Options.   (line  335)
49066* fno-lifetime-dse:                      Optimize Options.   (line  626)
49067* fno-local-ivars:                       Objective-C and Objective-C++ Dialect Options.
49068                                                             (line  153)
49069* fno-math-errno:                        Optimize Options.   (line 2090)
49070* fno-merge-debug-strings:               Debugging Options.  (line  625)
49071* fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
49072                                                             (line   49)
49073* fno-nonansi-builtins:                  C++ Dialect Options.
49074                                                             (line  203)
49075* fno-operator-names:                    C++ Dialect Options.
49076                                                             (line  219)
49077* fno-optional-diags:                    C++ Dialect Options.
49078                                                             (line  223)
49079* fno-peephole:                          Optimize Options.   (line 1427)
49080* fno-peephole2:                         Optimize Options.   (line 1427)
49081* fno-pretty-templates:                  C++ Dialect Options.
49082                                                             (line  233)
49083* fno-rtti:                              C++ Dialect Options.
49084                                                             (line  250)
49085* fno-sanitize-recover:                  Debugging Options.  (line  354)
49086* fno-sanitize=all:                      Debugging Options.  (line  344)
49087* fno-sched-interblock:                  Optimize Options.   (line  736)
49088* fno-sched-spec:                        Optimize Options.   (line  741)
49089* fno-set-stack-executable:              x86 Windows Options.
49090                                                             (line   46)
49091* fno-show-column:                       Preprocessor Options.
49092                                                             (line  591)
49093* fno-signed-bitfields:                  C Dialect Options.  (line  390)
49094* fno-signed-zeros:                      Optimize Options.   (line 2162)
49095* fno-stack-limit:                       Code Gen Options.   (line  495)
49096* fno-threadsafe-statics:                C++ Dialect Options.
49097                                                             (line  297)
49098* fno-toplevel-reorder:                  Optimize Options.   (line 1635)
49099* fno-trapping-math:                     Optimize Options.   (line 2172)
49100* fno-unsigned-bitfields:                C Dialect Options.  (line  390)
49101* fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
49102                                                             (line  310)
49103* fno-var-tracking-assignments:          Debugging Options.  (line 1597)
49104* fno-var-tracking-assignments-toggle:   Debugging Options.  (line 1608)
49105* fno-weak:                              C++ Dialect Options.
49106                                                             (line  424)
49107* fno-working-directory:                 Preprocessor Options.
49108                                                             (line  576)
49109* fno-writable-relocated-rdata:          x86 Windows Options.
49110                                                             (line   53)
49111* fno-zero-initialized-in-bss:           Optimize Options.   (line  413)
49112* fnon-call-exceptions:                  Code Gen Options.   (line  122)
49113* fnothrow-opt:                          C++ Dialect Options.
49114                                                             (line  208)
49115* fobjc-abi-version:                     Objective-C and Objective-C++ Dialect Options.
49116                                                             (line   56)
49117* fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
49118                                                             (line   67)
49119* fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
49120                                                             (line   92)
49121* fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
49122                                                             (line   96)
49123* fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
49124                                                             (line  105)
49125* fobjc-nilcheck:                        Objective-C and Objective-C++ Dialect Options.
49126                                                             (line  111)
49127* fobjc-std:                             Objective-C and Objective-C++ Dialect Options.
49128                                                             (line  120)
49129* fomit-frame-pointer:                   Optimize Options.   (line  215)
49130* fopenacc:                              C Dialect Options.  (line  264)
49131* fopenmp:                               C Dialect Options.  (line  276)
49132* fopenmp-simd:                          C Dialect Options.  (line  284)
49133* fopt-info:                             Debugging Options.  (line 1388)
49134* foptimize-sibling-calls:               Optimize Options.   (line  236)
49135* foptimize-strlen:                      Optimize Options.   (line  241)
49136* force_cpusubtype_ALL:                  Darwin Options.     (line  135)
49137* force_flat_namespace:                  Darwin Options.     (line  196)
49138* fpack-struct:                          Code Gen Options.   (line  375)
49139* fpartial-inlining:                     Optimize Options.   (line 1402)
49140* fpcc-struct-return <1>:                Incompatibilities.  (line  170)
49141* fpcc-struct-return:                    Code Gen Options.   (line  165)
49142* fpch-deps:                             Preprocessor Options.
49143                                                             (line  294)
49144* fpch-preprocess:                       Preprocessor Options.
49145                                                             (line  302)
49146* fpeel-loops:                           Optimize Options.   (line 2338)
49147* fpermissive:                           C++ Dialect Options.
49148                                                             (line  228)
49149* fPIC:                                  Code Gen Options.   (line  301)
49150* fpic:                                  Code Gen Options.   (line  280)
49151* fPIE:                                  Code Gen Options.   (line  314)
49152* fpie:                                  Code Gen Options.   (line  314)
49153* fplan9-extensions <1>:                 Unnamed Fields.     (line   44)
49154* fplan9-extensions:                     C Dialect Options.  (line  331)
49155* fplugin:                               Overall Options.    (line  351)
49156* fplugin-arg:                           Overall Options.    (line  359)
49157* fpost-ipa-mem-report:                  Debugging Options.  (line  670)
49158* fpre-ipa-mem-report:                   Debugging Options.  (line  668)
49159* fpredictive-commoning:                 Optimize Options.   (line 1409)
49160* fprefetch-loop-arrays:                 Optimize Options.   (line 1416)
49161* fpreprocessed:                         Preprocessor Options.
49162                                                             (line  506)
49163* fprofile-arcs <1>:                     Other Builtins.     (line  264)
49164* fprofile-arcs:                         Debugging Options.  (line  709)
49165* fprofile-correction:                   Optimize Options.   (line 1960)
49166* fprofile-dir:                          Optimize Options.   (line 1967)
49167* fprofile-generate:                     Optimize Options.   (line 1977)
49168* fprofile-reorder-functions:            Optimize Options.   (line 2280)
49169* fprofile-report:                       Debugging Options.  (line  674)
49170* fprofile-use:                          Optimize Options.   (line 1990)
49171* fprofile-values:                       Optimize Options.   (line 2271)
49172* fpu:                                   RX Options.         (line   17)
49173* frandom-seed:                          Debugging Options.  (line 1487)
49174* freciprocal-math:                      Optimize Options.   (line 2141)
49175* frecord-gcc-switches:                  Code Gen Options.   (line  268)
49176* free:                                  Optimize Options.   (line  618)
49177* freg-struct-return:                    Code Gen Options.   (line  183)
49178* frename-registers:                     Optimize Options.   (line 2297)
49179* freorder-blocks:                       Optimize Options.   (line 1453)
49180* freorder-blocks-and-partition:         Optimize Options.   (line 1459)
49181* freorder-functions:                    Optimize Options.   (line 1472)
49182* freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
49183                                                             (line  131)
49184* frepo <1>:                             Template Instantiation.
49185                                                             (line   54)
49186* frepo:                                 C++ Dialect Options.
49187                                                             (line  245)
49188* freport-bug:                           Debugging Options.  (line 1091)
49189* frerun-cse-after-loop:                 Optimize Options.   (line  459)
49190* freschedule-modulo-scheduled-loops:    Optimize Options.   (line  835)
49191* frounding-math:                        Optimize Options.   (line 2187)
49192* fsanitize-recover:                     Debugging Options.  (line  354)
49193* fsanitize-undefined-trap-on-error:     Debugging Options.  (line  381)
49194* fsanitize=address:                     Debugging Options.  (line  199)
49195* fsanitize=alignment:                   Debugging Options.  (line  288)
49196* fsanitize=bool:                        Debugging Options.  (line  324)
49197* fsanitize=bounds:                      Debugging Options.  (line  282)
49198* fsanitize=enum:                        Debugging Options.  (line  328)
49199* fsanitize=float-cast-overflow:         Debugging Options.  (line  305)
49200* fsanitize=float-divide-by-zero:        Debugging Options.  (line  299)
49201* fsanitize=integer-divide-by-zero:      Debugging Options.  (line  245)
49202* fsanitize=kernel-address:              Debugging Options.  (line  211)
49203* fsanitize=leak:                        Debugging Options.  (line  224)
49204* fsanitize=nonnull-attribute:           Debugging Options.  (line  313)
49205* fsanitize=null:                        Debugging Options.  (line  259)
49206* fsanitize=object-size:                 Debugging Options.  (line  294)
49207* fsanitize=return:                      Debugging Options.  (line  267)
49208* fsanitize=returns-nonnull-attribute:   Debugging Options.  (line  319)
49209* fsanitize=shift:                       Debugging Options.  (line  239)
49210* fsanitize=signed-integer-overflow:     Debugging Options.  (line  273)
49211* fsanitize=thread:                      Debugging Options.  (line  215)
49212* fsanitize=undefined:                   Debugging Options.  (line  234)
49213* fsanitize=unreachable:                 Debugging Options.  (line  249)
49214* fsanitize=vla-bound:                   Debugging Options.  (line  255)
49215* fsanitize=vptr:                        Debugging Options.  (line  333)
49216* fsched-critical-path-heuristic:        Optimize Options.   (line  801)
49217* fsched-dep-count-heuristic:            Optimize Options.   (line  828)
49218* fsched-group-heuristic:                Optimize Options.   (line  795)
49219* fsched-last-insn-heuristic:            Optimize Options.   (line  821)
49220* fsched-pressure:                       Optimize Options.   (line  746)
49221* fsched-rank-heuristic:                 Optimize Options.   (line  814)
49222* fsched-spec-insn-heuristic:            Optimize Options.   (line  807)
49223* fsched-spec-load:                      Optimize Options.   (line  755)
49224* fsched-spec-load-dangerous:            Optimize Options.   (line  760)
49225* fsched-stalled-insns:                  Optimize Options.   (line  766)
49226* fsched-stalled-insns-dep:              Optimize Options.   (line  776)
49227* fsched-verbose:                        Debugging Options.  (line 1501)
49228* fsched2-use-superblocks:               Optimize Options.   (line  785)
49229* fschedule-fusion:                      Optimize Options.   (line 2307)
49230* fschedule-insns:                       Optimize Options.   (line  717)
49231* fschedule-insns2:                      Optimize Options.   (line  727)
49232* fsection-anchors:                      Optimize Options.   (line 2414)
49233* fsel-sched-pipelining:                 Optimize Options.   (line  848)
49234* fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  853)
49235* fselective-scheduling:                 Optimize Options.   (line  840)
49236* fselective-scheduling2:                Optimize Options.   (line  844)
49237* fsemantic-interposition:               Optimize Options.   (line  858)
49238* fshort-double:                         Code Gen Options.   (line  211)
49239* fshort-enums <1>:                      Non-bugs.           (line   42)
49240* fshort-enums <2>:                      Type Attributes.    (line  114)
49241* fshort-enums <3>:                      Structures unions enumerations and bit-fields implementation.
49242                                                             (line   48)
49243* fshort-enums:                          Code Gen Options.   (line  201)
49244* fshort-wchar:                          Code Gen Options.   (line  219)
49245* fshrink-wrap:                          Optimize Options.   (line  875)
49246* fsignaling-nans:                       Optimize Options.   (line 2207)
49247* fsigned-bitfields <1>:                 Non-bugs.           (line   57)
49248* fsigned-bitfields:                     C Dialect Options.  (line  390)
49249* fsigned-char <1>:                      Characters implementation.
49250                                                             (line   31)
49251* fsigned-char:                          C Dialect Options.  (line  380)
49252* fsimd-cost-model:                      Optimize Options.   (line 1367)
49253* fsingle-precision-constant:            Optimize Options.   (line 2222)
49254* fsized-deallocation:                   C++ Dialect Options.
49255                                                             (line  260)
49256* fsplit-ivs-in-unroller:                Optimize Options.   (line 1383)
49257* fsplit-stack <1>:                      Function Attributes.
49258                                                             (line 1078)
49259* fsplit-stack:                          Code Gen Options.   (line  509)
49260* fsplit-wide-types:                     Optimize Options.   (line  434)
49261* fssa-phiopt:                           Optimize Options.   (line 1042)
49262* fstack-check:                          Code Gen Options.   (line  456)
49263* fstack-limit-register:                 Code Gen Options.   (line  495)
49264* fstack-limit-symbol:                   Code Gen Options.   (line  495)
49265* fstack-protector:                      Optimize Options.   (line 2389)
49266* fstack-protector-all:                  Optimize Options.   (line 2398)
49267* fstack-protector-explicit:             Optimize Options.   (line 2406)
49268* fstack-protector-strong:               Optimize Options.   (line 2401)
49269* fstack-usage:                          Debugging Options.  (line  678)
49270* fstack_reuse:                          Code Gen Options.   (line   21)
49271* fstats:                                C++ Dialect Options.
49272                                                             (line  270)
49273* fstdarg-opt:                           Optimize Options.   (line 2410)
49274* fstrict-aliasing:                      Optimize Options.   (line 1485)
49275* fstrict-enums:                         C++ Dialect Options.
49276                                                             (line  275)
49277* fstrict-overflow:                      Optimize Options.   (line 1531)
49278* fstrict-volatile-bitfields:            Code Gen Options.   (line  614)
49279* fsync-libcalls:                        Code Gen Options.   (line  647)
49280* fsyntax-only:                          Warning Options.    (line   14)
49281* ftabstop:                              Preprocessor Options.
49282                                                             (line  519)
49283* ftemplate-backtrace-limit:             C++ Dialect Options.
49284                                                             (line  284)
49285* ftemplate-depth:                       C++ Dialect Options.
49286                                                             (line  288)
49287* ftest-coverage:                        Debugging Options.  (line  765)
49288* fthread-jumps:                         Optimize Options.   (line  425)
49289* ftime-report:                          Debugging Options.  (line  656)
49290* ftls-model:                            Code Gen Options.   (line  538)
49291* ftracer:                               Optimize Options.   (line 2315)
49292* ftrack-macro-expansion:                Preprocessor Options.
49293                                                             (line  535)
49294* ftrapv:                                Code Gen Options.   (line   96)
49295* ftree-bit-ccp:                         Optimize Options.   (line 1031)
49296* ftree-builtin-call-dce:                Optimize Options.   (line 1063)
49297* ftree-ccp:                             Optimize Options.   (line 1037)
49298* ftree-ch:                              Optimize Options.   (line 1083)
49299* ftree-coalesce-inlined-vars:           Optimize Options.   (line 1308)
49300* ftree-coalesce-vars:                   Optimize Options.   (line 1317)
49301* ftree-copy-prop:                       Optimize Options.   (line  946)
49302* ftree-copyrename:                      Optimize Options.   (line 1301)
49303* ftree-dce:                             Optimize Options.   (line 1059)
49304* ftree-dominator-opts:                  Optimize Options.   (line 1069)
49305* ftree-dse:                             Optimize Options.   (line 1076)
49306* ftree-forwprop:                        Optimize Options.   (line  925)
49307* ftree-fre:                             Optimize Options.   (line  929)
49308* ftree-loop-distribute-patterns:        Optimize Options.   (line 1242)
49309* ftree-loop-distribution:               Optimize Options.   (line 1225)
49310* ftree-loop-if-convert:                 Optimize Options.   (line 1205)
49311* ftree-loop-if-convert-stores:          Optimize Options.   (line 1212)
49312* ftree-loop-im:                         Optimize Options.   (line 1262)
49313* ftree-loop-ivcanon:                    Optimize Options.   (line 1271)
49314* ftree-loop-linear:                     Optimize Options.   (line 1094)
49315* ftree-loop-optimize:                   Optimize Options.   (line 1090)
49316* ftree-loop-vectorize:                  Optimize Options.   (line 1345)
49317* ftree-parallelize-loops:               Optimize Options.   (line 1282)
49318* ftree-partial-pre:                     Optimize Options.   (line  921)
49319* ftree-phiprop:                         Optimize Options.   (line  936)
49320* ftree-pre:                             Optimize Options.   (line  917)
49321* ftree-pta:                             Optimize Options.   (line 1291)
49322* ftree-reassoc:                         Optimize Options.   (line  913)
49323* ftree-sink:                            Optimize Options.   (line 1027)
49324* ftree-slp-vectorize:                   Optimize Options.   (line 1349)
49325* ftree-slsr:                            Optimize Options.   (line 1334)
49326* ftree-sra:                             Optimize Options.   (line 1295)
49327* ftree-switch-conversion:               Optimize Options.   (line 1046)
49328* ftree-tail-merge:                      Optimize Options.   (line 1051)
49329* ftree-ter:                             Optimize Options.   (line 1326)
49330* ftree-vectorize:                       Optimize Options.   (line 1340)
49331* ftree-vrp:                             Optimize Options.   (line 1374)
49332* funit-at-a-time:                       Optimize Options.   (line 1628)
49333* funroll-all-loops:                     Optimize Options.   (line 2332)
49334* funroll-loops:                         Optimize Options.   (line 2322)
49335* funsafe-loop-optimizations:            Optimize Options.   (line  515)
49336* funsafe-math-optimizations:            Optimize Options.   (line 2108)
49337* funsigned-bitfields <1>:               Non-bugs.           (line   57)
49338* funsigned-bitfields <2>:               Structures unions enumerations and bit-fields implementation.
49339                                                             (line   17)
49340* funsigned-bitfields:                   C Dialect Options.  (line  390)
49341* funsigned-char <1>:                    Characters implementation.
49342                                                             (line   31)
49343* funsigned-char:                        C Dialect Options.  (line  362)
49344* funswitch-loops:                       Optimize Options.   (line 2350)
49345* funwind-tables:                        Code Gen Options.   (line  139)
49346* fuse-cxa-atexit:                       C++ Dialect Options.
49347                                                             (line  303)
49348* fuse-ld=bfd:                           Link Options.       (line   25)
49349* fuse-ld=gold:                          Link Options.       (line   28)
49350* fuse-linker-plugin:                    Optimize Options.   (line 1904)
49351* fvar-tracking:                         Debugging Options.  (line 1587)
49352* fvar-tracking-assignments:             Debugging Options.  (line 1597)
49353* fvar-tracking-assignments-toggle:      Debugging Options.  (line 1608)
49354* fvariable-expansion-in-unroller:       Optimize Options.   (line 1397)
49355* fvect-cost-model:                      Optimize Options.   (line 1353)
49356* fverbose-asm:                          Code Gen Options.   (line  259)
49357* fvisibility:                           Code Gen Options.   (line  549)
49358* fvisibility-inlines-hidden:            C++ Dialect Options.
49359                                                             (line  315)
49360* fvisibility-ms-compat:                 C++ Dialect Options.
49361                                                             (line  343)
49362* fvpt:                                  Optimize Options.   (line 2287)
49363* fvtable-verify:                        C++ Dialect Options.
49364                                                             (line  372)
49365* fvtv-counts:                           C++ Dialect Options.
49366                                                             (line  407)
49367* fvtv-debug:                            C++ Dialect Options.
49368                                                             (line  394)
49369* fweb:                                  Optimize Options.   (line 1647)
49370* fwhole-program:                        Optimize Options.   (line 1658)
49371* fwide-exec-charset:                    Preprocessor Options.
49372                                                             (line  558)
49373* fworking-directory:                    Preprocessor Options.
49374                                                             (line  576)
49375* fwrapv:                                Code Gen Options.   (line  100)
49376* fzero-link:                            Objective-C and Objective-C++ Dialect Options.
49377                                                             (line  141)
49378* G <1>:                                 System V Options.   (line   10)
49379* G <2>:                                 RS/6000 and PowerPC Options.
49380                                                             (line  770)
49381* G <3>:                                 Nios II Options.    (line    9)
49382* G <4>:                                 MIPS Options.       (line  440)
49383* G:                                     M32R/D Options.     (line   57)
49384* g:                                     Debugging Options.  (line   10)
49385* gcoff:                                 Debugging Options.  (line   94)
49386* gdwarf-VERSION:                        Debugging Options.  (line  112)
49387* gen-decls:                             Objective-C and Objective-C++ Dialect Options.
49388                                                             (line  167)
49389* gfull:                                 Darwin Options.     (line   69)
49390* ggdb:                                  Debugging Options.  (line   45)
49391* ggnu-pubnames:                         Debugging Options.  (line   54)
49392* gno-record-gcc-switches:               Debugging Options.  (line  133)
49393* gno-strict-dwarf:                      Debugging Options.  (line  143)
49394* gpubnames:                             Debugging Options.  (line   51)
49395* grecord-gcc-switches:                  Debugging Options.  (line  124)
49396* gsplit-dwarf:                          Debugging Options.  (line   38)
49397* gstabs:                                Debugging Options.  (line   59)
49398* gstabs+:                               Debugging Options.  (line   88)
49399* gstrict-dwarf:                         Debugging Options.  (line  137)
49400* gtoggle:                               Debugging Options.  (line  191)
49401* gused:                                 Darwin Options.     (line   64)
49402* gvms:                                  Debugging Options.  (line  158)
49403* gxcoff:                                Debugging Options.  (line   99)
49404* gxcoff+:                               Debugging Options.  (line  104)
49405* gz:                                    Debugging Options.  (line  147)
49406* H:                                     Preprocessor Options.
49407                                                             (line  709)
49408* headerpad_max_install_names:           Darwin Options.     (line  196)
49409* help <1>:                              Preprocessor Options.
49410                                                             (line  701)
49411* help:                                  Overall Options.    (line  221)
49412* I <1>:                                 Directory Options.  (line   10)
49413* I:                                     Preprocessor Options.
49414                                                             (line   77)
49415* I- <1>:                                Directory Options.  (line  118)
49416* I-:                                    Preprocessor Options.
49417                                                             (line  387)
49418* idirafter:                             Preprocessor Options.
49419                                                             (line  429)
49420* iframework:                            Darwin Options.     (line   57)
49421* imacros:                               Preprocessor Options.
49422                                                             (line  420)
49423* image_base:                            Darwin Options.     (line  196)
49424* imultilib:                             Preprocessor Options.
49425                                                             (line  454)
49426* include:                               Preprocessor Options.
49427                                                             (line  409)
49428* init:                                  Darwin Options.     (line  196)
49429* install_name:                          Darwin Options.     (line  196)
49430* iplugindir=:                           Directory Options.  (line   31)
49431* iprefix:                               Preprocessor Options.
49432                                                             (line  436)
49433* iquote <1>:                            Directory Options.  (line   36)
49434* iquote:                                Preprocessor Options.
49435                                                             (line  466)
49436* isysroot:                              Preprocessor Options.
49437                                                             (line  448)
49438* isystem:                               Preprocessor Options.
49439                                                             (line  458)
49440* iwithprefix:                           Preprocessor Options.
49441                                                             (line  442)
49442* iwithprefixbefore:                     Preprocessor Options.
49443                                                             (line  442)
49444* keep_private_externs:                  Darwin Options.     (line  196)
49445* L:                                     Directory Options.  (line   42)
49446* l:                                     Link Options.       (line   32)
49447* lobjc:                                 Link Options.       (line   59)
49448* m:                                     RS/6000 and PowerPC Options.
49449                                                             (line  611)
49450* M:                                     Preprocessor Options.
49451                                                             (line  185)
49452* m1:                                    SH Options.         (line    9)
49453* m10:                                   PDP-11 Options.     (line   29)
49454* m128bit-long-double:                   x86 Options.        (line  396)
49455* m16:                                   x86 Options.        (line  965)
49456* m16-bit <1>:                           NDS32 Options.      (line   39)
49457* m16-bit:                               CRIS Options.       (line   64)
49458* m1reg-:                                Adapteva Epiphany Options.
49459                                                             (line  132)
49460* m2:                                    SH Options.         (line   12)
49461* m210:                                  MCore Options.      (line   43)
49462* m2a:                                   SH Options.         (line   30)
49463* m2a-nofpu:                             SH Options.         (line   18)
49464* m2a-single:                            SH Options.         (line   26)
49465* m2a-single-only:                       SH Options.         (line   22)
49466* m3:                                    SH Options.         (line   34)
49467* m31:                                   S/390 and zSeries Options.
49468                                                             (line   87)
49469* m32 <1>:                               x86 Options.        (line  965)
49470* m32 <2>:                               TILEPro Options.    (line   13)
49471* m32 <3>:                               TILE-Gx Options.    (line   23)
49472* m32 <4>:                               SPARC Options.      (line  257)
49473* m32 <5>:                               RS/6000 and PowerPC Options.
49474                                                             (line  303)
49475* m32:                                   Nvidia PTX Options. (line   10)
49476* m32-bit:                               CRIS Options.       (line   64)
49477* m32bit-doubles <1>:                    RX Options.         (line   10)
49478* m32bit-doubles:                        RL78 Options.       (line   22)
49479* m32r:                                  M32R/D Options.     (line   15)
49480* m32r2:                                 M32R/D Options.     (line    9)
49481* m32rx:                                 M32R/D Options.     (line   12)
49482* m340:                                  MCore Options.      (line   43)
49483* m3dnow:                                x86 Options.        (line  609)
49484* m3e:                                   SH Options.         (line   37)
49485* m4:                                    SH Options.         (line   51)
49486* m4-100:                                SH Options.         (line   54)
49487* m4-100-nofpu:                          SH Options.         (line   57)
49488* m4-100-single:                         SH Options.         (line   61)
49489* m4-100-single-only:                    SH Options.         (line   65)
49490* m4-200:                                SH Options.         (line   69)
49491* m4-200-nofpu:                          SH Options.         (line   72)
49492* m4-200-single:                         SH Options.         (line   76)
49493* m4-200-single-only:                    SH Options.         (line   80)
49494* m4-300:                                SH Options.         (line   84)
49495* m4-300-nofpu:                          SH Options.         (line   87)
49496* m4-300-single:                         SH Options.         (line   91)
49497* m4-300-single-only:                    SH Options.         (line   95)
49498* m4-340:                                SH Options.         (line   99)
49499* m4-500:                                SH Options.         (line  102)
49500* m4-nofpu:                              SH Options.         (line   40)
49501* m4-single:                             SH Options.         (line   47)
49502* m4-single-only:                        SH Options.         (line   43)
49503* m40:                                   PDP-11 Options.     (line   23)
49504* m45:                                   PDP-11 Options.     (line   26)
49505* m4a:                                   SH Options.         (line  118)
49506* m4a-nofpu:                             SH Options.         (line  106)
49507* m4a-single:                            SH Options.         (line  114)
49508* m4a-single-only:                       SH Options.         (line  110)
49509* m4al:                                  SH Options.         (line  121)
49510* m4byte-functions:                      MCore Options.      (line   27)
49511* m5-32media:                            SH Options.         (line  126)
49512* m5-32media-nofpu:                      SH Options.         (line  129)
49513* m5-64media:                            SH Options.         (line  133)
49514* m5-64media-nofpu:                      SH Options.         (line  136)
49515* m5-compact:                            SH Options.         (line  140)
49516* m5-compact-nofpu:                      SH Options.         (line  143)
49517* m5200:                                 M680x0 Options.     (line  147)
49518* m5206e:                                M680x0 Options.     (line  156)
49519* m528x:                                 M680x0 Options.     (line  160)
49520* m5307:                                 M680x0 Options.     (line  164)
49521* m5407:                                 M680x0 Options.     (line  168)
49522* m64 <1>:                               x86 Options.        (line  965)
49523* m64 <2>:                               TILE-Gx Options.    (line   23)
49524* m64 <3>:                               SPARC Options.      (line  257)
49525* m64 <4>:                               S/390 and zSeries Options.
49526                                                             (line   87)
49527* m64 <5>:                               RS/6000 and PowerPC Options.
49528                                                             (line  303)
49529* m64:                                   Nvidia PTX Options. (line   10)
49530* m64bit-doubles <1>:                    RX Options.         (line   10)
49531* m64bit-doubles:                        RL78 Options.       (line   22)
49532* m68000:                                M680x0 Options.     (line   95)
49533* m68010:                                M680x0 Options.     (line  103)
49534* m68020:                                M680x0 Options.     (line  109)
49535* m68020-40:                             M680x0 Options.     (line  178)
49536* m68020-60:                             M680x0 Options.     (line  187)
49537* m68030:                                M680x0 Options.     (line  114)
49538* m68040:                                M680x0 Options.     (line  119)
49539* m68060:                                M680x0 Options.     (line  128)
49540* m68881:                                M680x0 Options.     (line  197)
49541* m8-bit:                                CRIS Options.       (line   64)
49542* m8bit-idiv:                            x86 Options.        (line  940)
49543* m8byte-align:                          V850 Options.       (line  170)
49544* m96bit-long-double:                    x86 Options.        (line  396)
49545* mA6:                                   ARC Options.        (line   19)
49546* mA7:                                   ARC Options.        (line   26)
49547* mabi <1>:                              x86 Options.        (line  795)
49548* mabi <2>:                              RS/6000 and PowerPC Options.
49549                                                             (line  638)
49550* mabi <3>:                              ARM Options.        (line    9)
49551* mabi:                                  AArch64 Options.    (line    9)
49552* mabi=32:                               MIPS Options.       (line  157)
49553* mabi=64:                               MIPS Options.       (line  157)
49554* mabi=eabi:                             MIPS Options.       (line  157)
49555* mabi=elfv1:                            RS/6000 and PowerPC Options.
49556                                                             (line  659)
49557* mabi=elfv2:                            RS/6000 and PowerPC Options.
49558                                                             (line  665)
49559* mabi=gnu:                              MMIX Options.       (line   20)
49560* mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
49561                                                             (line  651)
49562* mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
49563                                                             (line  655)
49564* mabi=mmixware:                         MMIX Options.       (line   20)
49565* mabi=n32:                              MIPS Options.       (line  157)
49566* mabi=no-spe:                           RS/6000 and PowerPC Options.
49567                                                             (line  648)
49568* mabi=o64:                              MIPS Options.       (line  157)
49569* mabi=spe:                              RS/6000 and PowerPC Options.
49570                                                             (line  643)
49571* mabicalls:                             MIPS Options.       (line  194)
49572* mabm:                                  x86 Options.        (line  611)
49573* mabort-on-noreturn:                    ARM Options.        (line  191)
49574* mabs=2008:                             MIPS Options.       (line  302)
49575* mabs=legacy:                           MIPS Options.       (line  302)
49576* mabsdiff:                              MeP Options.        (line    7)
49577* mabshi:                                PDP-11 Options.     (line   55)
49578* mac0:                                  PDP-11 Options.     (line   16)
49579* macc-4:                                FRV Options.        (line  113)
49580* macc-8:                                FRV Options.        (line  116)
49581* maccumulate-args:                      AVR Options.        (line  147)
49582* maccumulate-outgoing-args <1>:         x86 Options.        (line  818)
49583* maccumulate-outgoing-args:             SH Options.         (line  400)
49584* maddress-mode=long:                    x86 Options.        (line 1012)
49585* maddress-mode=short:                   x86 Options.        (line 1017)
49586* maddress-space-conversion:             SPU Options.        (line   63)
49587* mads:                                  RS/6000 and PowerPC Options.
49588                                                             (line  693)
49589* maes:                                  x86 Options.        (line  597)
49590* maix-struct-return:                    RS/6000 and PowerPC Options.
49591                                                             (line  631)
49592* maix32:                                RS/6000 and PowerPC Options.
49593                                                             (line  341)
49594* maix64:                                RS/6000 and PowerPC Options.
49595                                                             (line  341)
49596* malign-300:                            H8/300 Options.     (line   41)
49597* malign-call:                           ARC Options.        (line  194)
49598* malign-data:                           x86 Options.        (line  435)
49599* malign-double:                         x86 Options.        (line  380)
49600* malign-int:                            M680x0 Options.     (line  267)
49601* malign-labels:                         FRV Options.        (line  104)
49602* malign-loops:                          M32R/D Options.     (line   73)
49603* malign-natural:                        RS/6000 and PowerPC Options.
49604                                                             (line  380)
49605* malign-power:                          RS/6000 and PowerPC Options.
49606                                                             (line  380)
49607* mall-opts:                             MeP Options.        (line   11)
49608* malloc-cc:                             FRV Options.        (line   25)
49609* maltivec:                              RS/6000 and PowerPC Options.
49610                                                             (line  136)
49611* maltivec=be:                           RS/6000 and PowerPC Options.
49612                                                             (line  152)
49613* maltivec=le:                           RS/6000 and PowerPC Options.
49614                                                             (line  162)
49615* mam33:                                 MN10300 Options.    (line   17)
49616* mam33-2:                               MN10300 Options.    (line   24)
49617* mam34:                                 MN10300 Options.    (line   27)
49618* mandroid:                              GNU/Linux Options.  (line   21)
49619* mannotate-align:                       ARC Options.        (line  135)
49620* mapcs:                                 ARM Options.        (line   21)
49621* mapcs-frame:                           ARM Options.        (line   13)
49622* mapp-regs <1>:                         V850 Options.       (line  181)
49623* mapp-regs:                             SPARC Options.      (line   10)
49624* mARC600:                               ARC Options.        (line   19)
49625* mARC601:                               ARC Options.        (line   23)
49626* mARC700:                               ARC Options.        (line   26)
49627* march <1>:                             x86 Options.        (line    9)
49628* march <2>:                             S/390 and zSeries Options.
49629                                                             (line  116)
49630* march <3>:                             NDS32 Options.      (line   52)
49631* march <4>:                             MIPS Options.       (line   14)
49632* march <5>:                             M680x0 Options.     (line   12)
49633* march <6>:                             HPPA Options.       (line    9)
49634* march <7>:                             CRIS Options.       (line   10)
49635* march <8>:                             C6X Options.        (line    7)
49636* march <9>:                             ARM Options.        (line   65)
49637* march:                                 AArch64 Options.    (line   79)
49638* marclinux:                             ARC Options.        (line  142)
49639* marclinux_prof:                        ARC Options.        (line  148)
49640* margonaut:                             ARC Options.        (line  346)
49641* marm:                                  ARM Options.        (line  261)
49642* mas100-syntax:                         RX Options.         (line   76)
49643* masm-hex:                              MSP430 Options.     (line    9)
49644* masm-syntax-unified:                   ARM Options.        (line  350)
49645* masm=DIALECT:                          x86 Options.        (line  334)
49646* matomic-model=MODEL:                   SH Options.         (line  214)
49647* matomic-updates:                       SPU Options.        (line   78)
49648* mauto-modify-reg:                      ARC Options.        (line  197)
49649* mauto-pic:                             IA-64 Options.      (line   50)
49650* maverage:                              MeP Options.        (line   16)
49651* mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
49652                                                             (line  450)
49653* mavx:                                  x86 Options.        (line  590)
49654* mavx256-split-unaligned-load:          x86 Options.        (line  948)
49655* mavx256-split-unaligned-store:         x86 Options.        (line  948)
49656* max-vect-align:                        Adapteva Epiphany Options.
49657                                                             (line  120)
49658* mb:                                    SH Options.         (line  147)
49659* mbackchain:                            S/390 and zSeries Options.
49660                                                             (line   35)
49661* mbarrel-shift-enabled:                 LM32 Options.       (line    9)
49662* mbarrel-shifter:                       ARC Options.        (line   10)
49663* mbarrel_shifter:                       ARC Options.        (line  363)
49664* mbase-addresses:                       MMIX Options.       (line   54)
49665* mbased=:                               MeP Options.        (line   20)
49666* mbbit-peephole:                        ARC Options.        (line  200)
49667* mbcopy:                                PDP-11 Options.     (line   36)
49668* mbcopy-builtin:                        PDP-11 Options.     (line   32)
49669* mbig:                                  RS/6000 and PowerPC Options.
49670                                                             (line  530)
49671* mbig-endian <1>:                       TILE-Gx Options.    (line   29)
49672* mbig-endian <2>:                       RS/6000 and PowerPC Options.
49673                                                             (line  530)
49674* mbig-endian <3>:                       NDS32 Options.      (line    9)
49675* mbig-endian <4>:                       MicroBlaze Options. (line   57)
49676* mbig-endian <5>:                       MCore Options.      (line   39)
49677* mbig-endian <6>:                       IA-64 Options.      (line    9)
49678* mbig-endian <7>:                       C6X Options.        (line   13)
49679* mbig-endian <8>:                       ARM Options.        (line   61)
49680* mbig-endian <9>:                       ARC Options.        (line  349)
49681* mbig-endian:                           AArch64 Options.    (line   20)
49682* mbig-endian-data:                      RX Options.         (line   42)
49683* mbig-switch:                           V850 Options.       (line  176)
49684* mbigtable:                             SH Options.         (line  162)
49685* mbionic:                               GNU/Linux Options.  (line   17)
49686* mbit-align:                            RS/6000 and PowerPC Options.
49687                                                             (line  482)
49688* mbit-ops:                              CR16 Options.       (line   25)
49689* mbitfield:                             M680x0 Options.     (line  235)
49690* mbitops <1>:                           SH Options.         (line  166)
49691* mbitops:                               MeP Options.        (line   26)
49692* mblock-move-inline-limit:              RS/6000 and PowerPC Options.
49693                                                             (line  764)
49694* mbmi:                                  x86 Options.        (line  612)
49695* mbranch-cheap:                         PDP-11 Options.     (line   65)
49696* mbranch-cost <1>:                      MIPS Options.       (line  757)
49697* mbranch-cost <2>:                      AVR Options.        (line  162)
49698* mbranch-cost:                          Adapteva Epiphany Options.
49699                                                             (line   18)
49700* mbranch-cost=NUM:                      SH Options.         (line  466)
49701* mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
49702* mbranch-expensive:                     PDP-11 Options.     (line   61)
49703* mbranch-hints:                         SPU Options.        (line   27)
49704* mbranch-likely:                        MIPS Options.       (line  764)
49705* mbranch-predict:                       MMIX Options.       (line   49)
49706* mbss-plt:                              RS/6000 and PowerPC Options.
49707                                                             (line  189)
49708* mbuild-constants:                      DEC Alpha Options.  (line  141)
49709* mbwx:                                  DEC Alpha Options.  (line  163)
49710* mbypass-cache:                         Nios II Options.    (line   72)
49711* mc68000:                               M680x0 Options.     (line   95)
49712* mc68020:                               M680x0 Options.     (line  109)
49713* mc=:                                   MeP Options.        (line   31)
49714* mcache-block-size:                     NDS32 Options.      (line   48)
49715* mcache-size:                           SPU Options.        (line   70)
49716* mcache-volatile:                       Nios II Options.    (line   78)
49717* mcall-eabi:                            RS/6000 and PowerPC Options.
49718                                                             (line  605)
49719* mcall-freebsd:                         RS/6000 and PowerPC Options.
49720                                                             (line  619)
49721* mcall-linux:                           RS/6000 and PowerPC Options.
49722                                                             (line  615)
49723* mcall-netbsd:                          RS/6000 and PowerPC Options.
49724                                                             (line  623)
49725* mcall-prologues:                       AVR Options.        (line  167)
49726* mcall-sysv:                            RS/6000 and PowerPC Options.
49727                                                             (line  597)
49728* mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
49729                                                             (line  605)
49730* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
49731                                                             (line  608)
49732* mcallee-super-interworking:            ARM Options.        (line  279)
49733* mcaller-super-interworking:            ARM Options.        (line  286)
49734* mcallgraph-data:                       MCore Options.      (line   31)
49735* mcase-vector-pcrel:                    ARC Options.        (line  208)
49736* mcbcond:                               SPARC Options.      (line  224)
49737* mcbranch-force-delay-slot:             SH Options.         (line  481)
49738* mcc-init:                              CRIS Options.       (line   41)
49739* mcfv4e:                                M680x0 Options.     (line  172)
49740* mcheck-zero-division:                  MIPS Options.       (line  551)
49741* mcix:                                  DEC Alpha Options.  (line  163)
49742* mcld:                                  x86 Options.        (line  668)
49743* mclear-hwcap:                          Solaris 2 Options.  (line    9)
49744* mclfushopt:                            x86 Options.        (line  599)
49745* mclip:                                 MeP Options.        (line   35)
49746* mcmodel <1>:                           SPARC Options.      (line  262)
49747* mcmodel:                               NDS32 Options.      (line   55)
49748* mcmodel=kernel:                        x86 Options.        (line  996)
49749* mcmodel=large <1>:                     x86 Options.        (line 1008)
49750* mcmodel=large <2>:                     TILE-Gx Options.    (line   14)
49751* mcmodel=large <3>:                     RS/6000 and PowerPC Options.
49752                                                             (line  130)
49753* mcmodel=large:                         AArch64 Options.    (line   44)
49754* mcmodel=medium <1>:                    x86 Options.        (line 1001)
49755* mcmodel=medium:                        RS/6000 and PowerPC Options.
49756                                                             (line  126)
49757* mcmodel=small <1>:                     x86 Options.        (line  990)
49758* mcmodel=small <2>:                     TILE-Gx Options.    (line    9)
49759* mcmodel=small <3>:                     RS/6000 and PowerPC Options.
49760                                                             (line  122)
49761* mcmodel=small:                         AArch64 Options.    (line   38)
49762* mcmodel=tiny:                          AArch64 Options.    (line   31)
49763* mcmov:                                 NDS32 Options.      (line   21)
49764* mcmove:                                Adapteva Epiphany Options.
49765                                                             (line   23)
49766* mcmpb:                                 RS/6000 and PowerPC Options.
49767                                                             (line   27)
49768* mcode-readable:                        MIPS Options.       (line  511)
49769* mcompact-casesi:                       ARC Options.        (line  212)
49770* mcompat-align-parm:                    RS/6000 and PowerPC Options.
49771                                                             (line  944)
49772* mcond-exec:                            FRV Options.        (line  152)
49773* mcond-move:                            FRV Options.        (line  128)
49774* mconfig=:                              MeP Options.        (line   39)
49775* mconsole:                              x86 Windows Options.
49776                                                             (line    9)
49777* mconst-align:                          CRIS Options.       (line   55)
49778* mconst16:                              Xtensa Options.     (line   10)
49779* mconstant-gp:                          IA-64 Options.      (line   46)
49780* mcop:                                  MeP Options.        (line   48)
49781* mcop32:                                MeP Options.        (line   53)
49782* mcop64:                                MeP Options.        (line   56)
49783* mcorea:                                Blackfin Options.   (line  157)
49784* mcoreb:                                Blackfin Options.   (line  164)
49785* mcpu <1>:                              x86 Options.        (line  282)
49786* mcpu <2>:                              Visium Options.     (line   33)
49787* mcpu <3>:                              TILEPro Options.    (line    9)
49788* mcpu <4>:                              TILE-Gx Options.    (line   18)
49789* mcpu <5>:                              SPARC Options.      (line  102)
49790* mcpu <6>:                              RX Options.         (line   30)
49791* mcpu <7>:                              RS/6000 and PowerPC Options.
49792                                                             (line   69)
49793* mcpu <8>:                              picoChip Options.   (line    9)
49794* mcpu <9>:                              M680x0 Options.     (line   28)
49795* mcpu <10>:                             FRV Options.        (line  212)
49796* mcpu <11>:                             DEC Alpha Options.  (line  215)
49797* mcpu <12>:                             CRIS Options.       (line   10)
49798* mcpu <13>:                             ARM Options.        (line  130)
49799* mcpu <14>:                             ARC Options.        (line   14)
49800* mcpu:                                  AArch64 Options.    (line  112)
49801* mcpu32:                                M680x0 Options.     (line  138)
49802* mcpu= <1>:                             MSP430 Options.     (line   34)
49803* mcpu= <2>:                             MicroBlaze Options. (line   20)
49804* mcpu= <3>:                             M32C Options.       (line    7)
49805* mcpu=:                                 Blackfin Options.   (line    7)
49806* mcr16c:                                CR16 Options.       (line   14)
49807* mcr16cplus:                            CR16 Options.       (line   14)
49808* mcrc32:                                x86 Options.        (line  715)
49809* mcrypto:                               RS/6000 and PowerPC Options.
49810                                                             (line  224)
49811* mcsync-anomaly:                        Blackfin Options.   (line   60)
49812* mctor-dtor:                            NDS32 Options.      (line   71)
49813* mcustom-fpu-cfg:                       Nios II Options.    (line  220)
49814* mcustom-INSN:                          Nios II Options.    (line   99)
49815* mcx16:                                 x86 Options.        (line  692)
49816* MD:                                    Preprocessor Options.
49817                                                             (line  274)
49818* mdalign:                               SH Options.         (line  153)
49819* mdata-align:                           CRIS Options.       (line   55)
49820* mdata-model:                           CR16 Options.       (line   28)
49821* mdc:                                   MeP Options.        (line   62)
49822* mdebug <1>:                            Visium Options.     (line    7)
49823* mdebug <2>:                            S/390 and zSeries Options.
49824                                                             (line  112)
49825* mdebug:                                M32R/D Options.     (line   69)
49826* mdebug-main=PREFIX:                    VMS Options.        (line   13)
49827* mdec-asm:                              PDP-11 Options.     (line   72)
49828* mdirect-move:                          RS/6000 and PowerPC Options.
49829                                                             (line  230)
49830* mdisable-callt:                        V850 Options.       (line   92)
49831* mdisable-fpregs:                       HPPA Options.       (line   27)
49832* mdisable-indexing:                     HPPA Options.       (line   33)
49833* mdiv <1>:                              MeP Options.        (line   65)
49834* mdiv <2>:                              MCore Options.      (line   15)
49835* mdiv:                                  M680x0 Options.     (line  209)
49836* mdiv=STRATEGY:                         SH Options.         (line  308)
49837* mdivide-breaks:                        MIPS Options.       (line  557)
49838* mdivide-enabled:                       LM32 Options.       (line   12)
49839* mdivide-traps:                         MIPS Options.       (line  557)
49840* mdivsi3_libfunc=NAME:                  SH Options.         (line  406)
49841* mdll:                                  x86 Windows Options.
49842                                                             (line   16)
49843* mdlmzb:                                RS/6000 and PowerPC Options.
49844                                                             (line  475)
49845* mdmx:                                  MIPS Options.       (line  378)
49846* mdouble:                               FRV Options.        (line   38)
49847* mdouble-float <1>:                     RS/6000 and PowerPC Options.
49848                                                             (line  398)
49849* mdouble-float:                         MIPS Options.       (line  290)
49850* mdpfp:                                 ARC Options.        (line   30)
49851* mdpfp-compact:                         ARC Options.        (line   31)
49852* mdpfp-fast:                            ARC Options.        (line   35)
49853* mdpfp_compact:                         ARC Options.        (line  366)
49854* mdpfp_fast:                            ARC Options.        (line  369)
49855* mdsp:                                  MIPS Options.       (line  355)
49856* mdsp-packa:                            ARC Options.        (line   89)
49857* mdsp_packa:                            ARC Options.        (line  372)
49858* mdspr2:                                MIPS Options.       (line  361)
49859* mdual-nops:                            SPU Options.        (line   90)
49860* mdump-tune-features:                   x86 Options.        (line  649)
49861* mdvbf:                                 ARC Options.        (line   93)
49862* mdwarf2-asm:                           IA-64 Options.      (line   94)
49863* mdword:                                FRV Options.        (line   32)
49864* mdynamic-no-pic:                       RS/6000 and PowerPC Options.
49865                                                             (line  535)
49866* mEA:                                   ARC Options.        (line  375)
49867* mea:                                   ARC Options.        (line   43)
49868* mea32:                                 SPU Options.        (line   55)
49869* mea64:                                 SPU Options.        (line   55)
49870* meabi:                                 RS/6000 and PowerPC Options.
49871                                                             (line  712)
49872* mearly-cbranchsi:                      ARC Options.        (line  231)
49873* mearly-stop-bits:                      IA-64 Options.      (line  100)
49874* meb <1>:                               Score Options.      (line    9)
49875* meb <2>:                               Nios II Options.    (line   67)
49876* meb <3>:                               Moxie Options.      (line    7)
49877* meb:                                   MeP Options.        (line   68)
49878* mel <1>:                               Score Options.      (line   12)
49879* mel <2>:                               Nios II Options.    (line   67)
49880* mel <3>:                               Moxie Options.      (line   11)
49881* mel:                                   MeP Options.        (line   71)
49882* melf <1>:                              MMIX Options.       (line   44)
49883* melf:                                  CRIS Options.       (line   87)
49884* memb:                                  RS/6000 and PowerPC Options.
49885                                                             (line  707)
49886* membedded-data:                        MIPS Options.       (line  498)
49887* memregs=:                              M32C Options.       (line   21)
49888* mep:                                   V850 Options.       (line   16)
49889* mepilogue-cfi:                         ARC Options.        (line  157)
49890* mepsilon:                              MMIX Options.       (line   15)
49891* merror-reloc:                          SPU Options.        (line   10)
49892* mesa:                                  S/390 and zSeries Options.
49893                                                             (line   95)
49894* metrax100:                             CRIS Options.       (line   26)
49895* metrax4:                               CRIS Options.       (line   26)
49896* meva:                                  MIPS Options.       (line  405)
49897* mexpand-adddi:                         ARC Options.        (line  234)
49898* mexplicit-relocs <1>:                  MIPS Options.       (line  542)
49899* mexplicit-relocs:                      DEC Alpha Options.  (line  176)
49900* mexr:                                  H8/300 Options.     (line   28)
49901* mextern-sdata:                         MIPS Options.       (line  460)
49902* MF:                                    Preprocessor Options.
49903                                                             (line  220)
49904* mf16c:                                 x86 Options.        (line  602)
49905* mfast-fp:                              Blackfin Options.   (line  133)
49906* mfast-indirect-calls:                  HPPA Options.       (line   45)
49907* mfast-sw-div:                          Nios II Options.    (line   84)
49908* mfaster-structs:                       SPARC Options.      (line   92)
49909* mfdpic:                                FRV Options.        (line   56)
49910* mfentry:                               x86 Options.        (line  907)
49911* mfix:                                  DEC Alpha Options.  (line  163)
49912* mfix-24k:                              MIPS Options.       (line  617)
49913* mfix-and-continue:                     Darwin Options.     (line  104)
49914* mfix-at697f:                           SPARC Options.      (line  244)
49915* mfix-cortex-a53-835769:                AArch64 Options.    (line   67)
49916* mfix-cortex-a53-843419:                AArch64 Options.    (line   74)
49917* mfix-cortex-m3-ldrd:                   ARM Options.        (line  319)
49918* mfix-r10000:                           MIPS Options.       (line  644)
49919* mfix-r4000:                            MIPS Options.       (line  623)
49920* mfix-r4400:                            MIPS Options.       (line  637)
49921* mfix-rm7000:                           MIPS Options.       (line  655)
49922* mfix-sb1:                              MIPS Options.       (line  681)
49923* mfix-ut699:                            SPARC Options.      (line  249)
49924* mfix-vr4120:                           MIPS Options.       (line  660)
49925* mfix-vr4130:                           MIPS Options.       (line  674)
49926* mfixed-cc:                             FRV Options.        (line   28)
49927* mfixed-range <1>:                      SPU Options.        (line   47)
49928* mfixed-range <2>:                      SH Options.         (line  413)
49929* mfixed-range <3>:                      IA-64 Options.      (line  105)
49930* mfixed-range:                          HPPA Options.       (line   52)
49931* mflat:                                 SPARC Options.      (line   22)
49932* mflip-mips16:                          MIPS Options.       (line  128)
49933* mfloat-abi:                            ARM Options.        (line   41)
49934* mfloat-gprs:                           RS/6000 and PowerPC Options.
49935                                                             (line  286)
49936* mfloat-ieee:                           DEC Alpha Options.  (line  171)
49937* mfloat-vax:                            DEC Alpha Options.  (line  171)
49938* mfloat32:                              PDP-11 Options.     (line   52)
49939* mfloat64:                              PDP-11 Options.     (line   48)
49940* mflush-func:                           MIPS Options.       (line  748)
49941* mflush-func=NAME:                      M32R/D Options.     (line   93)
49942* mflush-trap=NUMBER:                    M32R/D Options.     (line   86)
49943* mfma:                                  x86 Options.        (line  603)
49944* mfmaf:                                 SPARC Options.      (line  238)
49945* mfmovd:                                SH Options.         (line  169)
49946* mforce-no-pic:                         Xtensa Options.     (line   41)
49947* mfp-exceptions:                        MIPS Options.       (line  775)
49948* mfp-mode:                              Adapteva Epiphany Options.
49949                                                             (line   72)
49950* mfp-reg:                               DEC Alpha Options.  (line   25)
49951* mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
49952* mfp-trap-mode:                         DEC Alpha Options.  (line   63)
49953* mfp16-format:                          ARM Options.        (line  171)
49954* mfp32:                                 MIPS Options.       (line  260)
49955* mfp64:                                 MIPS Options.       (line  263)
49956* mfpmath <1>:                           x86 Options.        (line  285)
49957* mfpmath:                               Optimize Options.   (line 2068)
49958* mfpr-32:                               FRV Options.        (line   13)
49959* mfpr-64:                               FRV Options.        (line   16)
49960* mfprnd:                                RS/6000 and PowerPC Options.
49961                                                             (line   27)
49962* mfpu <1>:                              Visium Options.     (line   19)
49963* mfpu <2>:                              SPARC Options.      (line   35)
49964* mfpu <3>:                              RS/6000 and PowerPC Options.
49965                                                             (line  406)
49966* mfpu <4>:                              PDP-11 Options.     (line    9)
49967* mfpu:                                  ARM Options.        (line  150)
49968* mfpxx:                                 MIPS Options.       (line  266)
49969* mfriz:                                 RS/6000 and PowerPC Options.
49970                                                             (line  915)
49971* mfsca:                                 SH Options.         (line  497)
49972* mfsgsbase:                             x86 Options.        (line  600)
49973* mfsrra:                                SH Options.         (line  506)
49974* mfull-regs:                            NDS32 Options.      (line   18)
49975* mfull-toc:                             RS/6000 and PowerPC Options.
49976                                                             (line  314)
49977* mfused-madd <1>:                       Xtensa Options.     (line   19)
49978* mfused-madd <2>:                       SH Options.         (line  488)
49979* mfused-madd <3>:                       S/390 and zSeries Options.
49980                                                             (line  137)
49981* mfused-madd <4>:                       RS/6000 and PowerPC Options.
49982                                                             (line  459)
49983* mfused-madd <5>:                       MIPS Options.       (line  599)
49984* mfused-madd:                           IA-64 Options.      (line   88)
49985* mfxsr:                                 x86 Options.        (line  615)
49986* mg:                                    VAX Options.        (line   17)
49987* MG:                                    Preprocessor Options.
49988                                                             (line  229)
49989* mgas:                                  HPPA Options.       (line   68)
49990* mgcc-abi:                              V850 Options.       (line  148)
49991* mgen-cell-microcode:                   RS/6000 and PowerPC Options.
49992                                                             (line  177)
49993* mgeneral-regs-only:                    AArch64 Options.    (line   24)
49994* mgettrcost=NUMBER:                     SH Options.         (line  430)
49995* mghs:                                  V850 Options.       (line  127)
49996* mglibc:                                GNU/Linux Options.  (line    9)
49997* mgnu:                                  VAX Options.        (line   13)
49998* mgnu-as:                               IA-64 Options.      (line   18)
49999* mgnu-ld <1>:                           IA-64 Options.      (line   23)
50000* mgnu-ld:                               HPPA Options.       (line  104)
50001* mgotplt:                               CRIS Options.       (line   81)
50002* mgp32:                                 MIPS Options.       (line  254)
50003* mgp64:                                 MIPS Options.       (line  257)
50004* mgpopt <1>:                            Nios II Options.    (line   17)
50005* mgpopt:                                MIPS Options.       (line  483)
50006* mgpr-32:                               FRV Options.        (line    7)
50007* mgpr-64:                               FRV Options.        (line   10)
50008* mgprel-ro:                             FRV Options.        (line   79)
50009* mh:                                    H8/300 Options.     (line   14)
50010* mhal:                                  Nios II Options.    (line  266)
50011* mhalf-reg-file:                        Adapteva Epiphany Options.
50012                                                             (line    9)
50013* mhard-dfp <1>:                         S/390 and zSeries Options.
50014                                                             (line   20)
50015* mhard-dfp:                             RS/6000 and PowerPC Options.
50016                                                             (line   27)
50017* mhard-float <1>:                       Visium Options.     (line   19)
50018* mhard-float <2>:                       V850 Options.       (line  113)
50019* mhard-float <3>:                       SPARC Options.      (line   35)
50020* mhard-float <4>:                       S/390 and zSeries Options.
50021                                                             (line   11)
50022* mhard-float <5>:                       RS/6000 and PowerPC Options.
50023                                                             (line  392)
50024* mhard-float <6>:                       MIPS Options.       (line  269)
50025* mhard-float <7>:                       MicroBlaze Options. (line   10)
50026* mhard-float <8>:                       M680x0 Options.     (line  197)
50027* mhard-float:                           FRV Options.        (line   19)
50028* mhard-quad-float:                      SPARC Options.      (line   56)
50029* mhardlit:                              MCore Options.      (line   10)
50030* mhint-max-distance:                    SPU Options.        (line  102)
50031* mhint-max-nops:                        SPU Options.        (line   96)
50032* mhotpatch:                             S/390 and zSeries Options.
50033                                                             (line  173)
50034* mhp-ld:                                HPPA Options.       (line  116)
50035* mhw-div:                               Nios II Options.    (line   93)
50036* mhw-mul:                               Nios II Options.    (line   93)
50037* mhw-mulx:                              Nios II Options.    (line   93)
50038* mhwmult=:                              MSP430 Options.     (line   55)
50039* micplb:                                Blackfin Options.   (line  178)
50040* mid-shared-library:                    Blackfin Options.   (line   81)
50041* mieee <1>:                             SH Options.         (line  186)
50042* mieee:                                 DEC Alpha Options.  (line   39)
50043* mieee-conformant:                      DEC Alpha Options.  (line  134)
50044* mieee-fp:                              x86 Options.        (line  342)
50045* mieee-with-inexact:                    DEC Alpha Options.  (line   52)
50046* milp32:                                IA-64 Options.      (line  121)
50047* mimadd:                                MIPS Options.       (line  592)
50048* mimpure-text:                          Solaris 2 Options.  (line   16)
50049* mincoming-stack-boundary:              x86 Options.        (line  556)
50050* mindexed-addressing:                   SH Options.         (line  420)
50051* mindexed-loads:                        ARC Options.        (line  238)
50052* minline-all-stringops:                 x86 Options.        (line  839)
50053* minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
50054* minline-float-divide-min-latency:      IA-64 Options.      (line   54)
50055* minline-ic_invalidate:                 SH Options.         (line  195)
50056* minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
50057* minline-int-divide-min-latency:        IA-64 Options.      (line   65)
50058* minline-plt <1>:                       FRV Options.        (line   64)
50059* minline-plt:                           Blackfin Options.   (line  138)
50060* minline-sqrt-max-throughput:           IA-64 Options.      (line   80)
50061* minline-sqrt-min-latency:              IA-64 Options.      (line   76)
50062* minline-stringops-dynamically:         x86 Options.        (line  846)
50063* minrt:                                 MSP430 Options.     (line   77)
50064* minsert-sched-nops:                    RS/6000 and PowerPC Options.
50065                                                             (line  575)
50066* mint-register:                         RX Options.         (line  100)
50067* mint16:                                PDP-11 Options.     (line   40)
50068* mint32 <1>:                            PDP-11 Options.     (line   44)
50069* mint32 <2>:                            H8/300 Options.     (line   38)
50070* mint32:                                CR16 Options.       (line   22)
50071* mint8:                                 AVR Options.        (line  171)
50072* minterlink-compressed:                 MIPS Options.       (line  136)
50073* minterlink-mips16:                     MIPS Options.       (line  148)
50074* minvalid-symbols:                      SH Options.         (line  456)
50075* mio-volatile:                          MeP Options.        (line   74)
50076* mips1:                                 MIPS Options.       (line   80)
50077* mips16:                                MIPS Options.       (line  120)
50078* mips2:                                 MIPS Options.       (line   83)
50079* mips3:                                 MIPS Options.       (line   86)
50080* mips32:                                MIPS Options.       (line   92)
50081* mips32r3:                              MIPS Options.       (line   95)
50082* mips32r5:                              MIPS Options.       (line   98)
50083* mips32r6:                              MIPS Options.       (line  101)
50084* mips3d:                                MIPS Options.       (line  384)
50085* mips4:                                 MIPS Options.       (line   89)
50086* mips64:                                MIPS Options.       (line  104)
50087* mips64r2:                              MIPS Options.       (line  107)
50088* mips64r3:                              MIPS Options.       (line  110)
50089* mips64r5:                              MIPS Options.       (line  113)
50090* mips64r6:                              MIPS Options.       (line  116)
50091* misel:                                 RS/6000 and PowerPC Options.
50092                                                             (line  195)
50093* misize <1>:                            SH Options.         (line  207)
50094* misize:                                ARC Options.        (line  132)
50095* misr-vector-size:                      NDS32 Options.      (line   45)
50096* missue-rate=NUMBER:                    M32R/D Options.     (line   79)
50097* mivc2:                                 MeP Options.        (line   59)
50098* mjump-in-delay:                        HPPA Options.       (line   23)
50099* mkernel:                               Darwin Options.     (line   82)
50100* mknuthdiv:                             MMIX Options.       (line   33)
50101* ml <1>:                                SH Options.         (line  150)
50102* ml:                                    MeP Options.        (line   78)
50103* mlarge:                                MSP430 Options.     (line   44)
50104* mlarge-data:                           DEC Alpha Options.  (line  187)
50105* mlarge-data-threshold:                 x86 Options.        (line  442)
50106* mlarge-mem:                            SPU Options.        (line   35)
50107* mlarge-text:                           DEC Alpha Options.  (line  205)
50108* mleadz:                                MeP Options.        (line   81)
50109* mleaf-id-shared-library:               Blackfin Options.   (line   92)
50110* mlibfuncs:                             MMIX Options.       (line   10)
50111* mlibrary-pic:                          FRV Options.        (line  110)
50112* mlinked-fp:                            FRV Options.        (line   94)
50113* mlinker-opt:                           HPPA Options.       (line   78)
50114* mlinux:                                CRIS Options.       (line   91)
50115* mlittle:                               RS/6000 and PowerPC Options.
50116                                                             (line  524)
50117* mlittle-endian <1>:                    TILE-Gx Options.    (line   29)
50118* mlittle-endian <2>:                    RS/6000 and PowerPC Options.
50119                                                             (line  524)
50120* mlittle-endian <3>:                    NDS32 Options.      (line   12)
50121* mlittle-endian <4>:                    MicroBlaze Options. (line   60)
50122* mlittle-endian <5>:                    MCore Options.      (line   39)
50123* mlittle-endian <6>:                    IA-64 Options.      (line   13)
50124* mlittle-endian <7>:                    C6X Options.        (line   16)
50125* mlittle-endian <8>:                    ARM Options.        (line   57)
50126* mlittle-endian <9>:                    ARC Options.        (line  356)
50127* mlittle-endian:                        AArch64 Options.    (line   27)
50128* mlittle-endian-data:                   RX Options.         (line   42)
50129* mliw:                                  MN10300 Options.    (line   54)
50130* mllsc:                                 MIPS Options.       (line  341)
50131* mlocal-sdata:                          MIPS Options.       (line  448)
50132* mlock:                                 ARC Options.        (line   97)
50133* mlong-calls <1>:                       V850 Options.       (line   10)
50134* mlong-calls <2>:                       MIPS Options.       (line  578)
50135* mlong-calls <3>:                       FRV Options.        (line   99)
50136* mlong-calls <4>:                       Blackfin Options.   (line  121)
50137* mlong-calls <5>:                       ARM Options.        (line  196)
50138* mlong-calls <6>:                       ARC Options.        (line  163)
50139* mlong-calls:                           Adapteva Epiphany Options.
50140                                                             (line   55)
50141* mlong-double-128 <1>:                  x86 Options.        (line  422)
50142* mlong-double-128:                      S/390 and zSeries Options.
50143                                                             (line   29)
50144* mlong-double-64 <1>:                   x86 Options.        (line  422)
50145* mlong-double-64:                       S/390 and zSeries Options.
50146                                                             (line   29)
50147* mlong-double-80:                       x86 Options.        (line  422)
50148* mlong-jumps:                           V850 Options.       (line  108)
50149* mlong-load-store:                      HPPA Options.       (line   59)
50150* mlong32:                               MIPS Options.       (line  423)
50151* mlong64:                               MIPS Options.       (line  418)
50152* mlongcall:                             RS/6000 and PowerPC Options.
50153                                                             (line  784)
50154* mlongcalls:                            Xtensa Options.     (line   72)
50155* mloop:                                 V850 Options.       (line  121)
50156* mlow-64k:                              Blackfin Options.   (line   70)
50157* mlp64:                                 IA-64 Options.      (line  121)
50158* mlra:                                  ARC Options.        (line  243)
50159* mlra-priority-compact:                 ARC Options.        (line  251)
50160* mlra-priority-noncompact:              ARC Options.        (line  254)
50161* mlra-priority-none:                    ARC Options.        (line  248)
50162* mlwp:                                  x86 Options.        (line  608)
50163* mlzcnt:                                x86 Options.        (line  614)
50164* mm:                                    MeP Options.        (line   84)
50165* MM:                                    Preprocessor Options.
50166                                                             (line  210)
50167* mmac <1>:                              Score Options.      (line   21)
50168* mmac:                                  CR16 Options.       (line    9)
50169* mmac-24:                               ARC Options.        (line  106)
50170* mmac-d16:                              ARC Options.        (line  102)
50171* mmac_24:                               ARC Options.        (line  378)
50172* mmac_d16:                              ARC Options.        (line  381)
50173* mmad:                                  MIPS Options.       (line  587)
50174* mmainkernel:                           Nvidia PTX Options. (line   13)
50175* mmalloc64:                             VMS Options.        (line   17)
50176* mmax:                                  DEC Alpha Options.  (line  163)
50177* mmax-constant-size:                    RX Options.         (line   82)
50178* mmax-stack-frame:                      CRIS Options.       (line   22)
50179* mmcount-ra-address:                    MIPS Options.       (line  823)
50180* mmcu <1>:                              MIPS Options.       (line  401)
50181* mmcu:                                  AVR Options.        (line    9)
50182* mmcu=:                                 MSP430 Options.     (line   14)
50183* MMD:                                   Preprocessor Options.
50184                                                             (line  290)
50185* mmedia:                                FRV Options.        (line   44)
50186* mmedium-calls:                         ARC Options.        (line  167)
50187* mmemcpy <1>:                           MIPS Options.       (line  572)
50188* mmemcpy:                               MicroBlaze Options. (line   13)
50189* mmemcpy-strategy=STRATEGY:             x86 Options.        (line  868)
50190* mmemory-latency:                       DEC Alpha Options.  (line  268)
50191* mmemory-model:                         SPARC Options.      (line  290)
50192* mmemset-strategy=STRATEGY:             x86 Options.        (line  880)
50193* mmfcrf:                                RS/6000 and PowerPC Options.
50194                                                             (line   27)
50195* mmfpgpr:                               RS/6000 and PowerPC Options.
50196                                                             (line   27)
50197* mmicromips:                            MIPS Options.       (line  389)
50198* mminimal-toc:                          RS/6000 and PowerPC Options.
50199                                                             (line  314)
50200* mminmax:                               MeP Options.        (line   87)
50201* mmixed-code:                           ARC Options.        (line  266)
50202* mmmx:                                  x86 Options.        (line  581)
50203* mmodel=large:                          M32R/D Options.     (line   33)
50204* mmodel=medium:                         M32R/D Options.     (line   27)
50205* mmodel=small:                          M32R/D Options.     (line   18)
50206* mmovbe:                                x86 Options.        (line  711)
50207* mmpx:                                  x86 Options.        (line  622)
50208* mmt:                                   MIPS Options.       (line  397)
50209* mmul:                                  RL78 Options.       (line   13)
50210* mmul-bug-workaround:                   CRIS Options.       (line   31)
50211* mmul.x:                                Moxie Options.      (line   14)
50212* mmul32x16:                             ARC Options.        (line   51)
50213* mmul64:                                ARC Options.        (line   54)
50214* mmuladd:                               FRV Options.        (line   50)
50215* mmulhw:                                RS/6000 and PowerPC Options.
50216                                                             (line  468)
50217* mmult:                                 MeP Options.        (line   90)
50218* mmult-bug:                             MN10300 Options.    (line    9)
50219* mmultcost:                             ARC Options.        (line  330)
50220* mmulti-cond-exec:                      FRV Options.        (line  176)
50221* mmulticore:                            Blackfin Options.   (line  142)
50222* mmultiple:                             RS/6000 and PowerPC Options.
50223                                                             (line  418)
50224* mmvcle:                                S/390 and zSeries Options.
50225                                                             (line  105)
50226* mmvme:                                 RS/6000 and PowerPC Options.
50227                                                             (line  688)
50228* mmwaitx:                               x86 Options.        (line  623)
50229* mn:                                    H8/300 Options.     (line   20)
50230* mn-flash:                              AVR Options.        (line  177)
50231* mnan=2008:                             MIPS Options.       (line  322)
50232* mnan=legacy:                           MIPS Options.       (line  322)
50233* mneon-for-64bits:                      ARM Options.        (line  339)
50234* mnested-cond-exec:                     FRV Options.        (line  189)
50235* mnhwloop:                              Score Options.      (line   15)
50236* mno-16-bit:                            NDS32 Options.      (line   42)
50237* mno-4byte-functions:                   MCore Options.      (line   27)
50238* mno-8byte-align:                       V850 Options.       (line  170)
50239* mno-abicalls:                          MIPS Options.       (line  194)
50240* mno-abshi:                             PDP-11 Options.     (line   58)
50241* mno-ac0:                               PDP-11 Options.     (line   20)
50242* mno-address-space-conversion:          SPU Options.        (line   63)
50243* mno-align-double:                      x86 Options.        (line  380)
50244* mno-align-int:                         M680x0 Options.     (line  267)
50245* mno-align-loops:                       M32R/D Options.     (line   76)
50246* mno-align-stringops:                   x86 Options.        (line  834)
50247* mno-altivec:                           RS/6000 and PowerPC Options.
50248                                                             (line  136)
50249* mno-am33:                              MN10300 Options.    (line   20)
50250* mno-app-regs <1>:                      V850 Options.       (line  185)
50251* mno-app-regs:                          SPARC Options.      (line   10)
50252* mno-as100-syntax:                      RX Options.         (line   76)
50253* mno-atomic-updates:                    SPU Options.        (line   78)
50254* mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
50255                                                             (line  450)
50256* mno-backchain:                         S/390 and zSeries Options.
50257                                                             (line   35)
50258* mno-base-addresses:                    MMIX Options.       (line   54)
50259* mno-bit-align:                         RS/6000 and PowerPC Options.
50260                                                             (line  482)
50261* mno-bitfield:                          M680x0 Options.     (line  231)
50262* mno-branch-likely:                     MIPS Options.       (line  764)
50263* mno-branch-predict:                    MMIX Options.       (line   49)
50264* mno-brcc:                              ARC Options.        (line  203)
50265* mno-bwx:                               DEC Alpha Options.  (line  163)
50266* mno-bypass-cache:                      Nios II Options.    (line   72)
50267* mno-cache-volatile:                    Nios II Options.    (line   78)
50268* mno-callgraph-data:                    MCore Options.      (line   31)
50269* mno-cbcond:                            SPARC Options.      (line  224)
50270* mno-check-zero-division:               MIPS Options.       (line  551)
50271* mno-cix:                               DEC Alpha Options.  (line  163)
50272* mno-clearbss:                          MicroBlaze Options. (line   16)
50273* mno-cmov:                              NDS32 Options.      (line   24)
50274* mno-cmpb:                              RS/6000 and PowerPC Options.
50275                                                             (line   27)
50276* mno-cond-exec <1>:                     FRV Options.        (line  158)
50277* mno-cond-exec:                         ARC Options.        (line  215)
50278* mno-cond-move:                         FRV Options.        (line  134)
50279* mno-const-align:                       CRIS Options.       (line   55)
50280* mno-const16:                           Xtensa Options.     (line   10)
50281* mno-crt0 <1>:                          Moxie Options.      (line   18)
50282* mno-crt0:                              MN10300 Options.    (line   43)
50283* mno-crypto:                            RS/6000 and PowerPC Options.
50284                                                             (line  224)
50285* mno-csync-anomaly:                     Blackfin Options.   (line   66)
50286* mno-custom-INSN:                       Nios II Options.    (line   99)
50287* mno-data-align:                        CRIS Options.       (line   55)
50288* mno-debug:                             S/390 and zSeries Options.
50289                                                             (line  112)
50290* mno-default:                           x86 Options.        (line  664)
50291* mno-direct-move:                       RS/6000 and PowerPC Options.
50292                                                             (line  230)
50293* mno-disable-callt:                     V850 Options.       (line   92)
50294* mno-div <1>:                           MCore Options.      (line   15)
50295* mno-div:                               M680x0 Options.     (line  209)
50296* mno-dlmzb:                             RS/6000 and PowerPC Options.
50297                                                             (line  475)
50298* mno-double:                            FRV Options.        (line   41)
50299* mno-dpfp-lrsr:                         ARC Options.        (line   39)
50300* mno-dsp:                               MIPS Options.       (line  355)
50301* mno-dspr2:                             MIPS Options.       (line  361)
50302* mno-dwarf2-asm:                        IA-64 Options.      (line   94)
50303* mno-dword:                             FRV Options.        (line   35)
50304* mno-eabi:                              RS/6000 and PowerPC Options.
50305                                                             (line  712)
50306* mno-early-stop-bits:                   IA-64 Options.      (line  100)
50307* mno-eflags:                            FRV Options.        (line  125)
50308* mno-embedded-data:                     MIPS Options.       (line  498)
50309* mno-ep:                                V850 Options.       (line   16)
50310* mno-epilogue-cfi:                      ARC Options.        (line  160)
50311* mno-epsilon:                           MMIX Options.       (line   15)
50312* mno-eva:                               MIPS Options.       (line  405)
50313* mno-explicit-relocs <1>:               MIPS Options.       (line  542)
50314* mno-explicit-relocs:                   DEC Alpha Options.  (line  176)
50315* mno-exr:                               H8/300 Options.     (line   33)
50316* mno-extern-sdata:                      MIPS Options.       (line  460)
50317* mno-fancy-math-387:                    x86 Options.        (line  370)
50318* mno-fast-sw-div:                       Nios II Options.    (line   84)
50319* mno-faster-structs:                    SPARC Options.      (line   92)
50320* mno-fix:                               DEC Alpha Options.  (line  163)
50321* mno-fix-24k:                           MIPS Options.       (line  617)
50322* mno-fix-cortex-a53-835769:             AArch64 Options.    (line   67)
50323* mno-fix-cortex-a53-843419:             AArch64 Options.    (line   74)
50324* mno-fix-r10000:                        MIPS Options.       (line  644)
50325* mno-fix-r4000:                         MIPS Options.       (line  623)
50326* mno-fix-r4400:                         MIPS Options.       (line  637)
50327* mno-flat:                              SPARC Options.      (line   22)
50328* mno-float:                             MIPS Options.       (line  276)
50329* mno-float32:                           PDP-11 Options.     (line   48)
50330* mno-float64:                           PDP-11 Options.     (line   52)
50331* mno-flush-func:                        M32R/D Options.     (line   98)
50332* mno-flush-trap:                        M32R/D Options.     (line   90)
50333* mno-fmaf:                              SPARC Options.      (line  238)
50334* mno-fp-in-toc:                         RS/6000 and PowerPC Options.
50335                                                             (line  314)
50336* mno-fp-regs:                           DEC Alpha Options.  (line   25)
50337* mno-fp-ret-in-387:                     x86 Options.        (line  360)
50338* mno-fprnd:                             RS/6000 and PowerPC Options.
50339                                                             (line   27)
50340* mno-fpu <1>:                           Visium Options.     (line   24)
50341* mno-fpu:                               SPARC Options.      (line   40)
50342* mno-fsca:                              SH Options.         (line  497)
50343* mno-fsrra:                             SH Options.         (line  506)
50344* mno-fused-madd <1>:                    Xtensa Options.     (line   19)
50345* mno-fused-madd <2>:                    SH Options.         (line  488)
50346* mno-fused-madd <3>:                    S/390 and zSeries Options.
50347                                                             (line  137)
50348* mno-fused-madd <4>:                    RS/6000 and PowerPC Options.
50349                                                             (line  459)
50350* mno-fused-madd <5>:                    MIPS Options.       (line  599)
50351* mno-fused-madd:                        IA-64 Options.      (line   88)
50352* mno-gnu-as:                            IA-64 Options.      (line   18)
50353* mno-gnu-ld:                            IA-64 Options.      (line   23)
50354* mno-gotplt:                            CRIS Options.       (line   81)
50355* mno-gpopt <1>:                         Nios II Options.    (line   17)
50356* mno-gpopt:                             MIPS Options.       (line  483)
50357* mno-hard-dfp <1>:                      S/390 and zSeries Options.
50358                                                             (line   20)
50359* mno-hard-dfp:                          RS/6000 and PowerPC Options.
50360                                                             (line   27)
50361* mno-hardlit:                           MCore Options.      (line   10)
50362* mno-hw-div:                            Nios II Options.    (line   93)
50363* mno-hw-mul:                            Nios II Options.    (line   93)
50364* mno-hw-mulx:                           Nios II Options.    (line   93)
50365* mno-id-shared-library:                 Blackfin Options.   (line   88)
50366* mno-ieee:                              SH Options.         (line  186)
50367* mno-ieee-fp:                           x86 Options.        (line  342)
50368* mno-imadd:                             MIPS Options.       (line  592)
50369* mno-inline-float-divide:               IA-64 Options.      (line   62)
50370* mno-inline-int-divide:                 IA-64 Options.      (line   73)
50371* mno-inline-sqrt:                       IA-64 Options.      (line   84)
50372* mno-int16:                             PDP-11 Options.     (line   44)
50373* mno-int32:                             PDP-11 Options.     (line   40)
50374* mno-interlink-compressed:              MIPS Options.       (line  136)
50375* mno-interlink-mips16:                  MIPS Options.       (line  148)
50376* mno-interrupts:                        AVR Options.        (line  180)
50377* mno-isel:                              RS/6000 and PowerPC Options.
50378                                                             (line  195)
50379* mno-knuthdiv:                          MMIX Options.       (line   33)
50380* mno-leaf-id-shared-library:            Blackfin Options.   (line   98)
50381* mno-libfuncs:                          MMIX Options.       (line   10)
50382* mno-llsc:                              MIPS Options.       (line  341)
50383* mno-local-sdata:                       MIPS Options.       (line  448)
50384* mno-long-calls <1>:                    V850 Options.       (line   10)
50385* mno-long-calls <2>:                    MIPS Options.       (line  578)
50386* mno-long-calls <3>:                    HPPA Options.       (line  129)
50387* mno-long-calls <4>:                    Blackfin Options.   (line  121)
50388* mno-long-calls:                        ARM Options.        (line  196)
50389* mno-long-jumps:                        V850 Options.       (line  108)
50390* mno-longcall:                          RS/6000 and PowerPC Options.
50391                                                             (line  784)
50392* mno-longcalls:                         Xtensa Options.     (line   72)
50393* mno-low-64k:                           Blackfin Options.   (line   74)
50394* mno-lsim <1>:                          MCore Options.      (line   46)
50395* mno-lsim:                              FR30 Options.       (line   14)
50396* mno-mad:                               MIPS Options.       (line  587)
50397* mno-max:                               DEC Alpha Options.  (line  163)
50398* mno-mcount-ra-address:                 MIPS Options.       (line  823)
50399* mno-mcu:                               MIPS Options.       (line  401)
50400* mno-mdmx:                              MIPS Options.       (line  378)
50401* mno-media:                             FRV Options.        (line   47)
50402* mno-memcpy:                            MIPS Options.       (line  572)
50403* mno-mfcrf:                             RS/6000 and PowerPC Options.
50404                                                             (line   27)
50405* mno-mfpgpr:                            RS/6000 and PowerPC Options.
50406                                                             (line   27)
50407* mno-millicode:                         ARC Options.        (line  257)
50408* mno-mips16:                            MIPS Options.       (line  120)
50409* mno-mips3d:                            MIPS Options.       (line  384)
50410* mno-mmicromips:                        MIPS Options.       (line  389)
50411* mno-mpy:                               ARC Options.        (line   48)
50412* mno-mt:                                MIPS Options.       (line  397)
50413* mno-mul-bug-workaround:                CRIS Options.       (line   31)
50414* mno-muladd:                            FRV Options.        (line   53)
50415* mno-mulhw:                             RS/6000 and PowerPC Options.
50416                                                             (line  468)
50417* mno-mult-bug:                          MN10300 Options.    (line   13)
50418* mno-multi-cond-exec:                   FRV Options.        (line  183)
50419* mno-multiple:                          RS/6000 and PowerPC Options.
50420                                                             (line  418)
50421* mno-mvcle:                             S/390 and zSeries Options.
50422                                                             (line  105)
50423* mno-nested-cond-exec:                  FRV Options.        (line  195)
50424* mno-odd-spreg:                         MIPS Options.       (line  295)
50425* mno-omit-leaf-frame-pointer:           AArch64 Options.    (line   54)
50426* mno-optimize-membar:                   FRV Options.        (line  205)
50427* mno-opts:                              MeP Options.        (line   93)
50428* mno-pack:                              FRV Options.        (line  122)
50429* mno-packed-stack:                      S/390 and zSeries Options.
50430                                                             (line   54)
50431* mno-paired:                            RS/6000 and PowerPC Options.
50432                                                             (line  209)
50433* mno-paired-single:                     MIPS Options.       (line  372)
50434* mno-perf-ext:                          NDS32 Options.      (line   30)
50435* mno-pic:                               IA-64 Options.      (line   26)
50436* mno-pid:                               RX Options.         (line  117)
50437* mno-plt:                               MIPS Options.       (line  221)
50438* mno-popc:                              SPARC Options.      (line  231)
50439* mno-popcntb:                           RS/6000 and PowerPC Options.
50440                                                             (line   27)
50441* mno-popcntd:                           RS/6000 and PowerPC Options.
50442                                                             (line   27)
50443* mno-postinc:                           Adapteva Epiphany Options.
50444                                                             (line  110)
50445* mno-postmodify:                        Adapteva Epiphany Options.
50446                                                             (line  110)
50447* mno-power8-fusion:                     RS/6000 and PowerPC Options.
50448                                                             (line  236)
50449* mno-power8-vector:                     RS/6000 and PowerPC Options.
50450                                                             (line  242)
50451* mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
50452                                                             (line   27)
50453* mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
50454                                                             (line   27)
50455* mno-powerpc64:                         RS/6000 and PowerPC Options.
50456                                                             (line   27)
50457* mno-prolog-function:                   V850 Options.       (line   23)
50458* mno-prologue-epilogue:                 CRIS Options.       (line   71)
50459* mno-prototype:                         RS/6000 and PowerPC Options.
50460                                                             (line  672)
50461* mno-push-args:                         x86 Options.        (line  811)
50462* mno-quad-memory:                       RS/6000 and PowerPC Options.
50463                                                             (line  249)
50464* mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
50465                                                             (line  255)
50466* mno-red-zone:                          x86 Options.        (line  982)
50467* mno-register-names:                    IA-64 Options.      (line   37)
50468* mno-regnames:                          RS/6000 and PowerPC Options.
50469                                                             (line  778)
50470* mno-relax:                             V850 Options.       (line  103)
50471* mno-relax-immediate:                   MCore Options.      (line   19)
50472* mno-relocatable:                       RS/6000 and PowerPC Options.
50473                                                             (line  498)
50474* mno-relocatable-lib:                   RS/6000 and PowerPC Options.
50475                                                             (line  509)
50476* mno-renesas:                           SH Options.         (line  176)
50477* mno-round-nearest:                     Adapteva Epiphany Options.
50478                                                             (line   51)
50479* mno-rtd:                               M680x0 Options.     (line  262)
50480* mno-scc:                               FRV Options.        (line  146)
50481* mno-sched-ar-data-spec:                IA-64 Options.      (line  134)
50482* mno-sched-ar-in-data-spec:             IA-64 Options.      (line  155)
50483* mno-sched-br-data-spec:                IA-64 Options.      (line  128)
50484* mno-sched-br-in-data-spec:             IA-64 Options.      (line  148)
50485* mno-sched-control-spec:                IA-64 Options.      (line  140)
50486* mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  182)
50487* mno-sched-in-control-spec:             IA-64 Options.      (line  162)
50488* mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  175)
50489* mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  168)
50490* mno-sched-prolog:                      ARM Options.        (line   32)
50491* mno-sdata <1>:                         RS/6000 and PowerPC Options.
50492                                                             (line  759)
50493* mno-sdata <2>:                         IA-64 Options.      (line   42)
50494* mno-sdata:                             ARC Options.        (line  175)
50495* mno-sep-data:                          Blackfin Options.   (line  116)
50496* mno-serialize-volatile:                Xtensa Options.     (line   35)
50497* mno-short:                             M680x0 Options.     (line  226)
50498* mno-side-effects:                      CRIS Options.       (line   46)
50499* mno-sim:                               RX Options.         (line   71)
50500* mno-single-exit:                       MMIX Options.       (line   66)
50501* mno-slow-bytes:                        MCore Options.      (line   35)
50502* mno-small-exec:                        S/390 and zSeries Options.
50503                                                             (line   80)
50504* mno-smartmips:                         MIPS Options.       (line  368)
50505* mno-soft-cmpsf:                        Adapteva Epiphany Options.
50506                                                             (line   29)
50507* mno-soft-float:                        DEC Alpha Options.  (line   10)
50508* mno-space-regs:                        HPPA Options.       (line   38)
50509* mno-spe:                               RS/6000 and PowerPC Options.
50510                                                             (line  204)
50511* mno-specld-anomaly:                    Blackfin Options.   (line   56)
50512* mno-split-addresses:                   MIPS Options.       (line  536)
50513* mno-stack-align:                       CRIS Options.       (line   55)
50514* mno-stack-bias:                        SPARC Options.      (line  314)
50515* mno-strict-align <1>:                  RS/6000 and PowerPC Options.
50516                                                             (line  493)
50517* mno-strict-align:                      M680x0 Options.     (line  287)
50518* mno-string:                            RS/6000 and PowerPC Options.
50519                                                             (line  429)
50520* mno-sum-in-toc:                        RS/6000 and PowerPC Options.
50521                                                             (line  314)
50522* mno-sym32:                             MIPS Options.       (line  433)
50523* mno-target-align:                      Xtensa Options.     (line   59)
50524* mno-text-section-literals:             Xtensa Options.     (line   47)
50525* mno-tls-markers:                       RS/6000 and PowerPC Options.
50526                                                             (line  817)
50527* mno-toc:                               RS/6000 and PowerPC Options.
50528                                                             (line  518)
50529* mno-toplevel-symbols:                  MMIX Options.       (line   40)
50530* mno-tpf-trace:                         S/390 and zSeries Options.
50531                                                             (line  131)
50532* mno-unaligned-access:                  ARM Options.        (line  326)
50533* mno-unaligned-doubles:                 SPARC Options.      (line   74)
50534* mno-uninit-const-in-rodata:            MIPS Options.       (line  506)
50535* mno-update:                            RS/6000 and PowerPC Options.
50536                                                             (line  440)
50537* mno-upper-regs:                        RS/6000 and PowerPC Options.
50538                                                             (line  277)
50539* mno-upper-regs-df:                     RS/6000 and PowerPC Options.
50540                                                             (line  261)
50541* mno-upper-regs-sf:                     RS/6000 and PowerPC Options.
50542                                                             (line  269)
50543* mno-user-mode:                         SPARC Options.      (line   86)
50544* mno-usermode:                          SH Options.         (line  297)
50545* mno-v3push:                            NDS32 Options.      (line   36)
50546* mno-v8plus:                            SPARC Options.      (line  195)
50547* mno-vect-double:                       Adapteva Epiphany Options.
50548                                                             (line  116)
50549* mno-virt:                              MIPS Options.       (line  409)
50550* mno-vis:                               SPARC Options.      (line  202)
50551* mno-vis2:                              SPARC Options.      (line  208)
50552* mno-vis3:                              SPARC Options.      (line  216)
50553* mno-vliw-branch:                       FRV Options.        (line  170)
50554* mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
50555* mno-volatile-cache:                    ARC Options.        (line  189)
50556* mno-vrsave:                            RS/6000 and PowerPC Options.
50557                                                             (line  174)
50558* mno-vsx:                               RS/6000 and PowerPC Options.
50559                                                             (line  218)
50560* mno-warn-multiple-fast-interrupts:     RX Options.         (line  143)
50561* mno-wide-bitfields:                    MCore Options.      (line   23)
50562* mno-xgot <1>:                          MIPS Options.       (line  231)
50563* mno-xgot:                              M680x0 Options.     (line  319)
50564* mno-xl-compat:                         RS/6000 and PowerPC Options.
50565                                                             (line  349)
50566* mno-xpa:                               MIPS Options.       (line  414)
50567* mno-zdcbranch:                         SH Options.         (line  473)
50568* mno-zero-extend:                       MMIX Options.       (line   27)
50569* mnobitfield:                           M680x0 Options.     (line  231)
50570* mnoliw:                                MN10300 Options.    (line   59)
50571* mnomacsave:                            SH Options.         (line  181)
50572* mnop-fun-dllimport:                    x86 Windows Options.
50573                                                             (line   22)
50574* mnop-mcount:                           x86 Options.        (line  920)
50575* mnops:                                 Adapteva Epiphany Options.
50576                                                             (line   26)
50577* mnorm:                                 ARC Options.        (line   58)
50578* mnosetlb:                              MN10300 Options.    (line   69)
50579* mnosplit-lohi:                         Adapteva Epiphany Options.
50580                                                             (line  110)
50581* modd-spreg:                            MIPS Options.       (line  295)
50582* momit-leaf-frame-pointer <1>:          x86 Options.        (line  884)
50583* momit-leaf-frame-pointer <2>:          Blackfin Options.   (line   44)
50584* momit-leaf-frame-pointer:              AArch64 Options.    (line   54)
50585* mone-byte-bool:                        Darwin Options.     (line   90)
50586* moptimize-membar:                      FRV Options.        (line  201)
50587* MP:                                    Preprocessor Options.
50588                                                             (line  239)
50589* mpa-risc-1-0:                          HPPA Options.       (line   19)
50590* mpa-risc-1-1:                          HPPA Options.       (line   19)
50591* mpa-risc-2-0:                          HPPA Options.       (line   19)
50592* mpack:                                 FRV Options.        (line  119)
50593* mpacked-stack:                         S/390 and zSeries Options.
50594                                                             (line   54)
50595* mpadstruct:                            SH Options.         (line  210)
50596* mpaired:                               RS/6000 and PowerPC Options.
50597                                                             (line  209)
50598* mpaired-single:                        MIPS Options.       (line  372)
50599* mpc32:                                 x86 Options.        (line  505)
50600* mpc64:                                 x86 Options.        (line  505)
50601* mpc80:                                 x86 Options.        (line  505)
50602* mpclmul:                               x86 Options.        (line  598)
50603* mpcrel:                                M680x0 Options.     (line  279)
50604* mpdebug:                               CRIS Options.       (line   35)
50605* mpe:                                   RS/6000 and PowerPC Options.
50606                                                             (line  369)
50607* mpe-aligned-commons:                   x86 Windows Options.
50608                                                             (line   59)
50609* mperf-ext:                             NDS32 Options.      (line   27)
50610* mpic-data-is-text-relative:            ARM Options.        (line  233)
50611* mpic-register:                         ARM Options.        (line  226)
50612* mpid:                                  RX Options.         (line  117)
50613* mplt:                                  MIPS Options.       (line  221)
50614* mpointer-size=SIZE:                    VMS Options.        (line   20)
50615* mpointers-to-nested-functions:         RS/6000 and PowerPC Options.
50616                                                             (line  923)
50617* mpoke-function-name:                   ARM Options.        (line  239)
50618* mpopc:                                 SPARC Options.      (line  231)
50619* mpopcnt:                               x86 Options.        (line  610)
50620* mpopcntb:                              RS/6000 and PowerPC Options.
50621                                                             (line   27)
50622* mpopcntd:                              RS/6000 and PowerPC Options.
50623                                                             (line   27)
50624* mportable-runtime:                     HPPA Options.       (line   64)
50625* mpower8-fusion:                        RS/6000 and PowerPC Options.
50626                                                             (line  236)
50627* mpower8-vector:                        RS/6000 and PowerPC Options.
50628                                                             (line  242)
50629* mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
50630                                                             (line   27)
50631* mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
50632                                                             (line   27)
50633* mpowerpc64:                            RS/6000 and PowerPC Options.
50634                                                             (line   27)
50635* mprefer-avx128:                        x86 Options.        (line  688)
50636* mprefer-short-insn-regs:               Adapteva Epiphany Options.
50637                                                             (line   13)
50638* mprefergot:                            SH Options.         (line  291)
50639* mpreferred-stack-boundary:             x86 Options.        (line  535)
50640* mprefetchwt1:                          x86 Options.        (line  606)
50641* mpretend-cmove:                        SH Options.         (line  515)
50642* mprint-tune-info:                      ARM Options.        (line  363)
50643* mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
50644                                                             (line  547)
50645* mprolog-function:                      V850 Options.       (line   23)
50646* mprologue-epilogue:                    CRIS Options.       (line   71)
50647* mprototype:                            RS/6000 and PowerPC Options.
50648                                                             (line  672)
50649* mpt-fixed:                             SH Options.         (line  434)
50650* mpush-args:                            x86 Options.        (line  811)
50651* MQ:                                    Preprocessor Options.
50652                                                             (line  265)
50653* mq-class:                              ARC Options.        (line  271)
50654* mquad-memory:                          RS/6000 and PowerPC Options.
50655                                                             (line  249)
50656* mquad-memory-atomic:                   RS/6000 and PowerPC Options.
50657                                                             (line  255)
50658* mr10k-cache-barrier:                   MIPS Options.       (line  686)
50659* mRcq:                                  ARC Options.        (line  275)
50660* mRcw:                                  ARC Options.        (line  279)
50661* mrdrnd:                                x86 Options.        (line  601)
50662* mrecip <1>:                            x86 Options.        (line  721)
50663* mrecip:                                RS/6000 and PowerPC Options.
50664                                                             (line  829)
50665* mrecip-precision:                      RS/6000 and PowerPC Options.
50666                                                             (line  887)
50667* mrecip=opt <1>:                        x86 Options.        (line  743)
50668* mrecip=opt:                            RS/6000 and PowerPC Options.
50669                                                             (line  842)
50670* mrecord-mcount:                        x86 Options.        (line  914)
50671* mreduced-regs:                         NDS32 Options.      (line   15)
50672* mregister-names:                       IA-64 Options.      (line   37)
50673* mregnames:                             RS/6000 and PowerPC Options.
50674                                                             (line  778)
50675* mregparm:                              x86 Options.        (line  472)
50676* mrelax <1>:                            V850 Options.       (line  103)
50677* mrelax <2>:                            SH Options.         (line  158)
50678* mrelax <3>:                            RX Options.         (line   95)
50679* mrelax <4>:                            NDS32 Options.      (line   74)
50680* mrelax <5>:                            MSP430 Options.     (line   50)
50681* mrelax <6>:                            MN10300 Options.    (line   46)
50682* mrelax <7>:                            H8/300 Options.     (line    9)
50683* mrelax:                                AVR Options.        (line  184)
50684* mrelax-immediate:                      MCore Options.      (line   19)
50685* mrelax-pic-calls:                      MIPS Options.       (line  810)
50686* mrelocatable:                          RS/6000 and PowerPC Options.
50687                                                             (line  498)
50688* mrelocatable-lib:                      RS/6000 and PowerPC Options.
50689                                                             (line  509)
50690* mrenesas:                              SH Options.         (line  173)
50691* mrepeat:                               MeP Options.        (line   96)
50692* mrestrict-it:                          ARM Options.        (line  357)
50693* mreturn-pointer-on-d0:                 MN10300 Options.    (line   36)
50694* mrh850-abi:                            V850 Options.       (line  127)
50695* mrmw:                                  AVR Options.        (line  198)
50696* mrtd <1>:                              Function Attributes.
50697                                                             (line  217)
50698* mrtd <2>:                              x86 Options.        (line  448)
50699* mrtd:                                  M680x0 Options.     (line  240)
50700* mrtm:                                  x86 Options.        (line  620)
50701* mrtp:                                  VxWorks Options.    (line   11)
50702* mrtsc:                                 ARC Options.        (line  110)
50703* ms <1>:                                MeP Options.        (line  100)
50704* ms:                                    H8/300 Options.     (line   17)
50705* ms2600:                                H8/300 Options.     (line   24)
50706* msafe-dma:                             SPU Options.        (line   17)
50707* msafe-hints:                           SPU Options.        (line  107)
50708* msahf:                                 x86 Options.        (line  701)
50709* msatur:                                MeP Options.        (line  105)
50710* msave-acc-in-interrupts:               RX Options.         (line  109)
50711* msave-toc-indirect:                    RS/6000 and PowerPC Options.
50712                                                             (line  935)
50713* mscc:                                  FRV Options.        (line  140)
50714* msched-ar-data-spec:                   IA-64 Options.      (line  134)
50715* msched-ar-in-data-spec:                IA-64 Options.      (line  155)
50716* msched-br-data-spec:                   IA-64 Options.      (line  128)
50717* msched-br-in-data-spec:                IA-64 Options.      (line  148)
50718* msched-control-spec:                   IA-64 Options.      (line  140)
50719* msched-costly-dep:                     RS/6000 and PowerPC Options.
50720                                                             (line  554)
50721* msched-count-spec-in-critical-path:    IA-64 Options.      (line  182)
50722* msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  198)
50723* msched-in-control-spec:                IA-64 Options.      (line  162)
50724* msched-max-memory-insns:               IA-64 Options.      (line  207)
50725* msched-max-memory-insns-hard-limit:    IA-64 Options.      (line  213)
50726* msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  175)
50727* msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  168)
50728* msched-spec-ldc:                       IA-64 Options.      (line  187)
50729* msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  194)
50730* mschedule:                             HPPA Options.       (line   71)
50731* mscore5:                               Score Options.      (line   25)
50732* mscore5u:                              Score Options.      (line   28)
50733* mscore7:                               Score Options.      (line   31)
50734* mscore7d:                              Score Options.      (line   34)
50735* msda:                                  V850 Options.       (line   40)
50736* msdata <1>:                            RS/6000 and PowerPC Options.
50737                                                             (line  746)
50738* msdata:                                IA-64 Options.      (line   42)
50739* msdata=all:                            C6X Options.        (line   30)
50740* msdata=data:                           RS/6000 and PowerPC Options.
50741                                                             (line  751)
50742* msdata=default <1>:                    RS/6000 and PowerPC Options.
50743                                                             (line  746)
50744* msdata=default:                        C6X Options.        (line   22)
50745* msdata=eabi:                           RS/6000 and PowerPC Options.
50746                                                             (line  726)
50747* msdata=none <1>:                       RS/6000 and PowerPC Options.
50748                                                             (line  759)
50749* msdata=none <2>:                       M32R/D Options.     (line   40)
50750* msdata=none:                           C6X Options.        (line   35)
50751* msdata=sdata:                          M32R/D Options.     (line   49)
50752* msdata=sysv:                           RS/6000 and PowerPC Options.
50753                                                             (line  737)
50754* msdata=use:                            M32R/D Options.     (line   53)
50755* msdram <1>:                            MeP Options.        (line  110)
50756* msdram:                                Blackfin Options.   (line  172)
50757* msecure-plt:                           RS/6000 and PowerPC Options.
50758                                                             (line  184)
50759* msel-sched-dont-check-control-spec:    IA-64 Options.      (line  203)
50760* msep-data:                             Blackfin Options.   (line  110)
50761* mserialize-volatile:                   Xtensa Options.     (line   35)
50762* msetlb:                                MN10300 Options.    (line   64)
50763* msha:                                  x86 Options.        (line  596)
50764* mshared-library-id:                    Blackfin Options.   (line  103)
50765* mshort:                                M680x0 Options.     (line  220)
50766* msign-extend-enabled:                  LM32 Options.       (line   18)
50767* msim <1>:                              Xstormy16 Options.  (line    9)
50768* msim <2>:                              Visium Options.     (line   13)
50769* msim <3>:                              RX Options.         (line   71)
50770* msim <4>:                              RS/6000 and PowerPC Options.
50771                                                             (line  682)
50772* msim <5>:                              RL78 Options.       (line    7)
50773* msim <6>:                              MSP430 Options.     (line   39)
50774* msim <7>:                              MeP Options.        (line  114)
50775* msim <8>:                              M32C Options.       (line   13)
50776* msim <9>:                              CR16 Options.       (line   18)
50777* msim <10>:                             C6X Options.        (line   19)
50778* msim:                                  Blackfin Options.   (line   37)
50779* msimd:                                 ARC Options.        (line   71)
50780* msimnovec:                             MeP Options.        (line  117)
50781* msimple-fpu:                           RS/6000 and PowerPC Options.
50782                                                             (line  402)
50783* msingle-exit:                          MMIX Options.       (line   66)
50784* msingle-float <1>:                     RS/6000 and PowerPC Options.
50785                                                             (line  398)
50786* msingle-float:                         MIPS Options.       (line  286)
50787* msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
50788                                                             (line  541)
50789* msingle-pic-base:                      ARM Options.        (line  220)
50790* msio:                                  HPPA Options.       (line   98)
50791* msize-level:                           ARC Options.        (line  283)
50792* mskip-rax-setup:                       x86 Options.        (line  927)
50793* mslow-bytes:                           MCore Options.      (line   35)
50794* mslow-flash-data:                      ARM Options.        (line  344)
50795* msmall:                                MSP430 Options.     (line   47)
50796* msmall-data:                           DEC Alpha Options.  (line  187)
50797* msmall-data-limit:                     RX Options.         (line   47)
50798* msmall-divides:                        MicroBlaze Options. (line   39)
50799* msmall-exec:                           S/390 and zSeries Options.
50800                                                             (line   80)
50801* msmall-mem:                            SPU Options.        (line   35)
50802* msmall-model:                          FR30 Options.       (line    9)
50803* msmall-text:                           DEC Alpha Options.  (line  205)
50804* msmall16:                              Adapteva Epiphany Options.
50805                                                             (line   67)
50806* msmallc:                               Nios II Options.    (line  272)
50807* msmartmips:                            MIPS Options.       (line  368)
50808* msoft-float <1>:                       x86 Options.        (line  347)
50809* msoft-float <2>:                       Visium Options.     (line   24)
50810* msoft-float <3>:                       V850 Options.       (line  113)
50811* msoft-float <4>:                       SPARC Options.      (line   40)
50812* msoft-float <5>:                       S/390 and zSeries Options.
50813                                                             (line   11)
50814* msoft-float <6>:                       RS/6000 and PowerPC Options.
50815                                                             (line  392)
50816* msoft-float <7>:                       PDP-11 Options.     (line   13)
50817* msoft-float <8>:                       MIPS Options.       (line  272)
50818* msoft-float <9>:                       MicroBlaze Options. (line    7)
50819* msoft-float <10>:                      M680x0 Options.     (line  203)
50820* msoft-float <11>:                      HPPA Options.       (line   84)
50821* msoft-float <12>:                      FRV Options.        (line   22)
50822* msoft-float <13>:                      DEC Alpha Options.  (line   10)
50823* msoft-float:                           ARC Options.        (line   75)
50824* msoft-quad-float:                      SPARC Options.      (line   60)
50825* msp8:                                  AVR Options.        (line  202)
50826* mspace:                                V850 Options.       (line   30)
50827* mspe:                                  RS/6000 and PowerPC Options.
50828                                                             (line  204)
50829* mspecld-anomaly:                       Blackfin Options.   (line   51)
50830* mspfp:                                 ARC Options.        (line   62)
50831* mspfp-compact:                         ARC Options.        (line   63)
50832* mspfp-fast:                            ARC Options.        (line   67)
50833* mspfp_compact:                         ARC Options.        (line  384)
50834* mspfp_fast:                            ARC Options.        (line  387)
50835* msplit-addresses:                      MIPS Options.       (line  536)
50836* msplit-vecmove-early:                  Adapteva Epiphany Options.
50837                                                             (line  127)
50838* msse:                                  x86 Options.        (line  582)
50839* msse2avx:                              x86 Options.        (line  902)
50840* msseregparm:                           x86 Options.        (line  483)
50841* mstack-align:                          CRIS Options.       (line   55)
50842* mstack-bias:                           SPARC Options.      (line  314)
50843* mstack-check-l1:                       Blackfin Options.   (line   77)
50844* mstack-guard:                          S/390 and zSeries Options.
50845                                                             (line  156)
50846* mstack-increment:                      MCore Options.      (line   50)
50847* mstack-offset:                         Adapteva Epiphany Options.
50848                                                             (line   37)
50849* mstack-protector-guard=GUARD:          x86 Options.        (line  951)
50850* mstack-size:                           S/390 and zSeries Options.
50851                                                             (line  156)
50852* mstackrealign:                         x86 Options.        (line  526)
50853* mstdmain:                              SPU Options.        (line   40)
50854* mstrict-align <1>:                     RS/6000 and PowerPC Options.
50855                                                             (line  493)
50856* mstrict-align <2>:                     M680x0 Options.     (line  287)
50857* mstrict-align:                         AArch64 Options.    (line   49)
50858* mstrict-X:                             AVR Options.        (line  215)
50859* mstring:                               RS/6000 and PowerPC Options.
50860                                                             (line  429)
50861* mstringop-strategy=ALG:                x86 Options.        (line  850)
50862* mstructure-size-boundary:              ARM Options.        (line  177)
50863* msv-mode:                              Visium Options.     (line   52)
50864* msvr4-struct-return:                   RS/6000 and PowerPC Options.
50865                                                             (line  634)
50866* mswap:                                 ARC Options.        (line   82)
50867* mswape:                                ARC Options.        (line  115)
50868* msym32:                                MIPS Options.       (line  433)
50869* msynci:                                MIPS Options.       (line  796)
50870* msys-crt0:                             Nios II Options.    (line  276)
50871* msys-lib:                              Nios II Options.    (line  280)
50872* MT:                                    Preprocessor Options.
50873                                                             (line  251)
50874* mtarget-align:                         Xtensa Options.     (line   59)
50875* mtas:                                  SH Options.         (line  282)
50876* mtbm:                                  x86 Options.        (line  621)
50877* mtda:                                  V850 Options.       (line   34)
50878* mtelephony:                            ARC Options.        (line  120)
50879* mtext-section-literals:                Xtensa Options.     (line   47)
50880* mtf:                                   MeP Options.        (line  121)
50881* mthread:                               x86 Windows Options.
50882                                                             (line   26)
50883* mthreads:                              x86 Options.        (line  826)
50884* mthumb:                                ARM Options.        (line  261)
50885* mthumb-interwork:                      ARM Options.        (line   24)
50886* mtiny-stack:                           AVR Options.        (line  229)
50887* mtiny=:                                MeP Options.        (line  125)
50888* mtls:                                  FRV Options.        (line   75)
50889* mTLS:                                  FRV Options.        (line   72)
50890* mtls-dialect <1>:                      x86 Options.        (line  804)
50891* mtls-dialect:                          ARM Options.        (line  302)
50892* mtls-dialect=desc:                     AArch64 Options.    (line   58)
50893* mtls-dialect=traditional:              AArch64 Options.    (line   62)
50894* mtls-direct-seg-refs:                  x86 Options.        (line  892)
50895* mtls-markers:                          RS/6000 and PowerPC Options.
50896                                                             (line  817)
50897* mtls-size:                             IA-64 Options.      (line  112)
50898* mtoc:                                  RS/6000 and PowerPC Options.
50899                                                             (line  518)
50900* mtomcat-stats:                         FRV Options.        (line  209)
50901* mtoplevel-symbols:                     MMIX Options.       (line   40)
50902* mtp:                                   ARM Options.        (line  294)
50903* mtpcs-frame:                           ARM Options.        (line  267)
50904* mtpcs-leaf-frame:                      ARM Options.        (line  273)
50905* mtpf-trace:                            S/390 and zSeries Options.
50906                                                             (line  131)
50907* mtrap-precision:                       DEC Alpha Options.  (line  109)
50908* mtune <1>:                             x86 Options.        (line  227)
50909* mtune <2>:                             Visium Options.     (line   47)
50910* mtune <3>:                             SPARC Options.      (line  181)
50911* mtune <4>:                             S/390 and zSeries Options.
50912                                                             (line  124)
50913* mtune <5>:                             RS/6000 and PowerPC Options.
50914                                                             (line  114)
50915* mtune <6>:                             MN10300 Options.    (line   30)
50916* mtune <7>:                             MIPS Options.       (line   65)
50917* mtune <8>:                             M680x0 Options.     (line   70)
50918* mtune <9>:                             IA-64 Options.      (line  116)
50919* mtune <10>:                            DEC Alpha Options.  (line  259)
50920* mtune <11>:                            CRIS Options.       (line   16)
50921* mtune <12>:                            ARM Options.        (line   87)
50922* mtune <13>:                            ARC Options.        (line  305)
50923* mtune:                                 AArch64 Options.    (line   96)
50924* mtune-ctrl=FEATURE-LIST:               x86 Options.        (line  654)
50925* mucb-mcount:                           ARC Options.        (line  180)
50926* muclibc:                               GNU/Linux Options.  (line   13)
50927* muls:                                  Score Options.      (line   18)
50928* multcost:                              ARC Options.        (line  395)
50929* multcost=NUMBER:                       SH Options.         (line  305)
50930* multi_module:                          Darwin Options.     (line  196)
50931* multilib-library-pic:                  FRV Options.        (line   89)
50932* multiply-enabled:                      LM32 Options.       (line   15)
50933* multiply_defined:                      Darwin Options.     (line  196)
50934* multiply_defined_unused:               Darwin Options.     (line  196)
50935* munalign-prob-threshold:               ARC Options.        (line  334)
50936* munaligned-access:                     ARM Options.        (line  326)
50937* munaligned-doubles:                    SPARC Options.      (line   74)
50938* municode:                              x86 Windows Options.
50939                                                             (line   30)
50940* muninit-const-in-rodata:               MIPS Options.       (line  506)
50941* munix:                                 VAX Options.        (line    9)
50942* munix-asm:                             PDP-11 Options.     (line   68)
50943* munsafe-dma:                           SPU Options.        (line   17)
50944* mupdate:                               RS/6000 and PowerPC Options.
50945                                                             (line  440)
50946* mupper-regs:                           RS/6000 and PowerPC Options.
50947                                                             (line  277)
50948* mupper-regs-df:                        RS/6000 and PowerPC Options.
50949                                                             (line  261)
50950* mupper-regs-sf:                        RS/6000 and PowerPC Options.
50951                                                             (line  269)
50952* muser-enabled:                         LM32 Options.       (line   21)
50953* muser-mode <1>:                        Visium Options.     (line   57)
50954* muser-mode:                            SPARC Options.      (line   86)
50955* musermode:                             SH Options.         (line  297)
50956* mv3push:                               NDS32 Options.      (line   33)
50957* mv850:                                 V850 Options.       (line   49)
50958* mv850e:                                V850 Options.       (line   79)
50959* mv850e1:                               V850 Options.       (line   70)
50960* mv850e2:                               V850 Options.       (line   66)
50961* mv850e2v3:                             V850 Options.       (line   61)
50962* mv850e2v4:                             V850 Options.       (line   57)
50963* mv850e3v5:                             V850 Options.       (line   52)
50964* mv850es:                               V850 Options.       (line   75)
50965* mv8plus:                               SPARC Options.      (line  195)
50966* mveclibabi <1>:                        x86 Options.        (line  772)
50967* mveclibabi:                            RS/6000 and PowerPC Options.
50968                                                             (line  896)
50969* mvect8-ret-in-mem:                     x86 Options.        (line  493)
50970* mvirt:                                 MIPS Options.       (line  409)
50971* mvis:                                  SPARC Options.      (line  202)
50972* mvis2:                                 SPARC Options.      (line  208)
50973* mvis3:                                 SPARC Options.      (line  216)
50974* mvliw-branch:                          FRV Options.        (line  164)
50975* mvms-return-codes:                     VMS Options.        (line    9)
50976* mvolatile-asm-stop:                    IA-64 Options.      (line   32)
50977* mvolatile-cache:                       ARC Options.        (line  185)
50978* mvr4130-align:                         MIPS Options.       (line  785)
50979* mvrsave:                               RS/6000 and PowerPC Options.
50980                                                             (line  174)
50981* mvsx:                                  RS/6000 and PowerPC Options.
50982                                                             (line  218)
50983* mvxworks:                              RS/6000 and PowerPC Options.
50984                                                             (line  703)
50985* mvzeroupper:                           x86 Options.        (line  682)
50986* mwarn-cell-microcode:                  RS/6000 and PowerPC Options.
50987                                                             (line  180)
50988* mwarn-dynamicstack:                    S/390 and zSeries Options.
50989                                                             (line  150)
50990* mwarn-framesize:                       S/390 and zSeries Options.
50991                                                             (line  142)
50992* mwarn-multiple-fast-interrupts:        RX Options.         (line  143)
50993* mwarn-reloc:                           SPU Options.        (line   10)
50994* mwide-bitfields:                       MCore Options.      (line   23)
50995* mwin32:                                x86 Windows Options.
50996                                                             (line   35)
50997* mwindows:                              x86 Windows Options.
50998                                                             (line   41)
50999* mword-relocations:                     ARM Options.        (line  313)
51000* mx32:                                  x86 Options.        (line  965)
51001* mxgot <1>:                             MIPS Options.       (line  231)
51002* mxgot:                                 M680x0 Options.     (line  319)
51003* mxilinx-fpu:                           RS/6000 and PowerPC Options.
51004                                                             (line  413)
51005* mxl-barrel-shift:                      MicroBlaze Options. (line   33)
51006* mxl-compat:                            RS/6000 and PowerPC Options.
51007                                                             (line  349)
51008* mxl-float-convert:                     MicroBlaze Options. (line   51)
51009* mxl-float-sqrt:                        MicroBlaze Options. (line   54)
51010* mxl-gp-opt:                            MicroBlaze Options. (line   45)
51011* mxl-multiply-high:                     MicroBlaze Options. (line   48)
51012* mxl-pattern-compare:                   MicroBlaze Options. (line   36)
51013* mxl-reorder:                           MicroBlaze Options. (line   63)
51014* mxl-soft-div:                          MicroBlaze Options. (line   30)
51015* mxl-soft-mul:                          MicroBlaze Options. (line   27)
51016* mxl-stack-check:                       MicroBlaze Options. (line   42)
51017* mxop:                                  x86 Options.        (line  607)
51018* mxpa:                                  MIPS Options.       (line  414)
51019* mxsave:                                x86 Options.        (line  616)
51020* mxsavec:                               x86 Options.        (line  618)
51021* mxsaveopt:                             x86 Options.        (line  617)
51022* mxsaves:                               x86 Options.        (line  619)
51023* mxy:                                   ARC Options.        (line  125)
51024* myellowknife:                          RS/6000 and PowerPC Options.
51025                                                             (line  698)
51026* mzarch:                                S/390 and zSeries Options.
51027                                                             (line   95)
51028* mzda:                                  V850 Options.       (line   45)
51029* mzdcbranch:                            SH Options.         (line  473)
51030* mzero-extend:                          MMIX Options.       (line   27)
51031* no-canonical-prefixes:                 Overall Options.    (line  334)
51032* no-integrated-cpp:                     Preprocessor Options.
51033                                                             (line   34)
51034* no-sysroot-suffix:                     Directory Options.  (line  111)
51035* no_dead_strip_inits_and_terms:         Darwin Options.     (line  196)
51036* noall_load:                            Darwin Options.     (line  196)
51037* nocpp:                                 MIPS Options.       (line  611)
51038* nodefaultlibs:                         Link Options.       (line   68)
51039* nodevicelib:                           AVR Options.        (line  232)
51040* nofixprebinding:                       Darwin Options.     (line  196)
51041* nofpu:                                 RX Options.         (line   17)
51042* nolibdld:                              HPPA Options.       (line  181)
51043* nomultidefs:                           Darwin Options.     (line  196)
51044* non-static:                            VxWorks Options.    (line   16)
51045* noprebind:                             Darwin Options.     (line  196)
51046* noseglinkedit:                         Darwin Options.     (line  196)
51047* nostartfiles:                          Link Options.       (line   63)
51048* nostdinc:                              Preprocessor Options.
51049                                                             (line  399)
51050* nostdinc++ <1>:                        Preprocessor Options.
51051                                                             (line  404)
51052* nostdinc++:                            C++ Dialect Options.
51053                                                             (line  431)
51054* nostdlib:                              Link Options.       (line   80)
51055* o:                                     Preprocessor Options.
51056                                                             (line   87)
51057* O:                                     Optimize Options.   (line   39)
51058* o:                                     Overall Options.    (line  192)
51059* O0:                                    Optimize Options.   (line  145)
51060* O1:                                    Optimize Options.   (line   39)
51061* O2:                                    Optimize Options.   (line   91)
51062* O3:                                    Optimize Options.   (line  136)
51063* Ofast:                                 Optimize Options.   (line  159)
51064* Og:                                    Optimize Options.   (line  166)
51065* Os:                                    Optimize Options.   (line  149)
51066* P:                                     Preprocessor Options.
51067                                                             (line  648)
51068* p:                                     Debugging Options.  (line  640)
51069* pagezero_size:                         Darwin Options.     (line  196)
51070* param:                                 Optimize Options.   (line 2438)
51071* pass-exit-codes:                       Overall Options.    (line  150)
51072* pedantic <1>:                          Warnings and Errors.
51073                                                             (line   25)
51074* pedantic <2>:                          Alternate Keywords. (line   30)
51075* pedantic <3>:                          C Extensions.       (line    6)
51076* pedantic <4>:                          Preprocessor Options.
51077                                                             (line  175)
51078* pedantic <5>:                          Warning Options.    (line   82)
51079* pedantic:                              Standards.          (line   16)
51080* pedantic-errors <1>:                   Warnings and Errors.
51081                                                             (line   25)
51082* pedantic-errors <2>:                   Non-bugs.           (line  216)
51083* pedantic-errors <3>:                   Preprocessor Options.
51084                                                             (line  180)
51085* pedantic-errors <4>:                   Warning Options.    (line  124)
51086* pedantic-errors:                       Standards.          (line   16)
51087* pg:                                    Debugging Options.  (line  646)
51088* pie:                                   Link Options.       (line  105)
51089* pipe:                                  Overall Options.    (line  215)
51090* prebind:                               Darwin Options.     (line  196)
51091* prebind_all_twolevel_modules:          Darwin Options.     (line  196)
51092* print-file-name:                       Debugging Options.  (line 1612)
51093* print-libgcc-file-name:                Debugging Options.  (line 1646)
51094* print-multi-directory:                 Debugging Options.  (line 1618)
51095* print-multi-lib:                       Debugging Options.  (line 1623)
51096* print-multi-os-directory:              Debugging Options.  (line 1630)
51097* print-multiarch:                       Debugging Options.  (line 1639)
51098* print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
51099                                                             (line  217)
51100* print-prog-name:                       Debugging Options.  (line 1643)
51101* print-search-dirs:                     Debugging Options.  (line 1654)
51102* print-sysroot:                         Debugging Options.  (line 1667)
51103* print-sysroot-headers-suffix:          Debugging Options.  (line 1674)
51104* private_bundle:                        Darwin Options.     (line  196)
51105* pthread <1>:                           Solaris 2 Options.  (line   38)
51106* pthread:                               RS/6000 and PowerPC Options.
51107                                                             (line  824)
51108* pthreads:                              Solaris 2 Options.  (line   32)
51109* Q:                                     Debugging Options.  (line  652)
51110* Qn:                                    System V Options.   (line   18)
51111* Qy:                                    System V Options.   (line   14)
51112* rdynamic:                              Link Options.       (line  111)
51113* read_only_relocs:                      Darwin Options.     (line  196)
51114* remap:                                 Preprocessor Options.
51115                                                             (line  696)
51116* s:                                     Link Options.       (line  118)
51117* S <1>:                                 Link Options.       (line   20)
51118* S:                                     Overall Options.    (line  175)
51119* save-temps:                            Debugging Options.  (line 1519)
51120* save-temps=obj:                        Debugging Options.  (line 1545)
51121* sectalign:                             Darwin Options.     (line  196)
51122* sectcreate:                            Darwin Options.     (line  196)
51123* sectobjectsymbols:                     Darwin Options.     (line  196)
51124* sectorder:                             Darwin Options.     (line  196)
51125* seg1addr:                              Darwin Options.     (line  196)
51126* seg_addr_table:                        Darwin Options.     (line  196)
51127* seg_addr_table_filename:               Darwin Options.     (line  196)
51128* segaddr:                               Darwin Options.     (line  196)
51129* seglinkedit:                           Darwin Options.     (line  196)
51130* segprot:                               Darwin Options.     (line  196)
51131* segs_read_only_addr:                   Darwin Options.     (line  196)
51132* segs_read_write_addr:                  Darwin Options.     (line  196)
51133* shared:                                Link Options.       (line  127)
51134* shared-libgcc:                         Link Options.       (line  135)
51135* short-calls:                           Adapteva Epiphany Options.
51136                                                             (line   61)
51137* sim:                                   CRIS Options.       (line   95)
51138* sim2:                                  CRIS Options.       (line  101)
51139* single_module:                         Darwin Options.     (line  196)
51140* specs:                                 Directory Options.  (line   88)
51141* static <1>:                            HPPA Options.       (line  185)
51142* static <2>:                            Darwin Options.     (line  196)
51143* static:                                Link Options.       (line  122)
51144* static-libasan:                        Link Options.       (line  170)
51145* static-libgcc:                         Link Options.       (line  135)
51146* static-liblsan:                        Link Options.       (line  188)
51147* static-libmpx:                         Link Options.       (line  206)
51148* static-libmpxwrappers:                 Link Options.       (line  215)
51149* static-libstdc++:                      Link Options.       (line  225)
51150* static-libtsan:                        Link Options.       (line  179)
51151* static-libubsan:                       Link Options.       (line  197)
51152* std <1>:                               Non-bugs.           (line  107)
51153* std <2>:                               Other Builtins.     (line   22)
51154* std <3>:                               C Dialect Options.  (line   47)
51155* std:                                   Standards.          (line   16)
51156* std=:                                  Preprocessor Options.
51157                                                             (line  338)
51158* sub_library:                           Darwin Options.     (line  196)
51159* sub_umbrella:                          Darwin Options.     (line  196)
51160* symbolic:                              Link Options.       (line  236)
51161* sysroot:                               Directory Options.  (line   96)
51162* T:                                     Link Options.       (line  242)
51163* target-help <1>:                       Preprocessor Options.
51164                                                             (line  701)
51165* target-help:                           Overall Options.    (line  230)
51166* threads:                               HPPA Options.       (line  198)
51167* time:                                  Debugging Options.  (line 1560)
51168* tno-android-cc:                        GNU/Linux Options.  (line   31)
51169* tno-android-ld:                        GNU/Linux Options.  (line   35)
51170* traditional <1>:                       Incompatibilities.  (line    6)
51171* traditional:                           C Dialect Options.  (line  346)
51172* traditional-cpp <1>:                   Preprocessor Options.
51173                                                             (line  679)
51174* traditional-cpp:                       C Dialect Options.  (line  346)
51175* trigraphs <1>:                         Preprocessor Options.
51176                                                             (line  683)
51177* trigraphs:                             C Dialect Options.  (line  341)
51178* twolevel_namespace:                    Darwin Options.     (line  196)
51179* u:                                     Link Options.       (line  274)
51180* U:                                     Preprocessor Options.
51181                                                             (line   69)
51182* umbrella:                              Darwin Options.     (line  196)
51183* undef:                                 Preprocessor Options.
51184                                                             (line   73)
51185* undefined:                             Darwin Options.     (line  196)
51186* unexported_symbols_list:               Darwin Options.     (line  196)
51187* v <1>:                                 Preprocessor Options.
51188                                                             (line  705)
51189* v:                                     Overall Options.    (line  203)
51190* version <1>:                           Preprocessor Options.
51191                                                             (line  718)
51192* version:                               Overall Options.    (line  338)
51193* W:                                     Incompatibilities.  (line   64)
51194* w:                                     Preprocessor Options.
51195                                                             (line  171)
51196* W:                                     Warning Options.    (line  183)
51197* w:                                     Warning Options.    (line   25)
51198* Wa:                                    Assembler Options.  (line    9)
51199* Wabi:                                  C++ Dialect Options.
51200                                                             (line  439)
51201* Wabi-tag:                              C++ Dialect Options.
51202                                                             (line  531)
51203* Waddr-space-convert:                   AVR Options.        (line  235)
51204* Waddress:                              Warning Options.    (line 1353)
51205* Waggregate-return:                     Warning Options.    (line 1386)
51206* Waggressive-loop-optimizations:        Warning Options.    (line 1391)
51207* Wall <1>:                              Standard Libraries. (line    6)
51208* Wall <2>:                              Preprocessor Options.
51209                                                             (line   93)
51210* Wall:                                  Warning Options.    (line  133)
51211* Warray-bounds:                         Warning Options.    (line  895)
51212* Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
51213                                                             (line  171)
51214* Wattributes:                           Warning Options.    (line 1396)
51215* Wbad-function-cast:                    Warning Options.    (line 1160)
51216* Wbool-compare:                         Warning Options.    (line  911)
51217* Wbuiltin-macro-redefined:              Warning Options.    (line 1402)
51218* Wc++-compat:                           Warning Options.    (line 1182)
51219* Wc++11-compat:                         Warning Options.    (line 1187)
51220* Wc++14-compat:                         Warning Options.    (line 1193)
51221* Wc90-c99-compat:                       Warning Options.    (line 1165)
51222* Wc99-c11-compat:                       Warning Options.    (line 1173)
51223* Wcast-align:                           Warning Options.    (line 1213)
51224* Wcast-qual:                            Warning Options.    (line 1197)
51225* Wchar-subscripts:                      Warning Options.    (line  222)
51226* Wclobbered:                            Warning Options.    (line 1233)
51227* Wcomment <1>:                          Preprocessor Options.
51228                                                             (line  101)
51229* Wcomment:                              Warning Options.    (line  227)
51230* Wcomments:                             Preprocessor Options.
51231                                                             (line  101)
51232* Wconditionally-supported:              Warning Options.    (line 1237)
51233* Wconversion:                           Warning Options.    (line 1240)
51234* Wconversion-null:                      Warning Options.    (line 1258)
51235* Wctor-dtor-privacy:                    C++ Dialect Options.
51236                                                             (line  536)
51237* Wdate-time:                            Warning Options.    (line 1266)
51238* Wdeclaration-after-statement:          Warning Options.    (line 1071)
51239* Wdelete-incomplete:                    Warning Options.    (line 1271)
51240* Wdelete-non-virtual-dtor:              C++ Dialect Options.
51241                                                             (line  543)
51242* Wdeprecated:                           Warning Options.    (line 1525)
51243* Wdeprecated-declarations:              Warning Options.    (line 1529)
51244* Wdisabled-optimization:                Warning Options.    (line 1693)
51245* Wdiscarded-array-qualifiers:           Warning Options.    (line  926)
51246* Wdiscarded-qualifiers:                 Warning Options.    (line  920)
51247* Wdiv-by-zero:                          Warning Options.    (line  944)
51248* Wdouble-promotion:                     Warning Options.    (line  251)
51249* weak_reference_mismatches:             Darwin Options.     (line  196)
51250* Weffc++:                               C++ Dialect Options.
51251                                                             (line  623)
51252* Wempty-body:                           Warning Options.    (line 1278)
51253* Wendif-labels <1>:                     Preprocessor Options.
51254                                                             (line  148)
51255* Wendif-labels:                         Warning Options.    (line 1080)
51256* Wenum-compare:                         Warning Options.    (line 1282)
51257* Werror <1>:                            Preprocessor Options.
51258                                                             (line  161)
51259* Werror:                                Warning Options.    (line   28)
51260* Werror=:                               Warning Options.    (line   31)
51261* Wextra:                                Warning Options.    (line  183)
51262* Wfatal-errors:                         Warning Options.    (line   48)
51263* Wfloat-conversion:                     Warning Options.    (line 1312)
51264* Wfloat-equal:                          Warning Options.    (line  970)
51265* Wformat <1>:                           Function Attributes.
51266                                                             (line  424)
51267* Wformat:                               Warning Options.    (line  270)
51268* Wformat-contains-nul:                  Warning Options.    (line  307)
51269* Wformat-extra-args:                    Warning Options.    (line  311)
51270* Wformat-nonliteral <1>:                Function Attributes.
51271                                                             (line  490)
51272* Wformat-nonliteral:                    Warning Options.    (line  335)
51273* Wformat-security:                      Warning Options.    (line  340)
51274* Wformat-signedness:                    Warning Options.    (line  352)
51275* Wformat-y2k:                           Warning Options.    (line  357)
51276* Wformat-zero-length:                   Warning Options.    (line  325)
51277* Wformat=:                              Warning Options.    (line  270)
51278* Wformat=1:                             Warning Options.    (line  297)
51279* Wformat=2:                             Warning Options.    (line  330)
51280* Wframe-larger-than:                    Warning Options.    (line 1099)
51281* Wfree-nonheap-object:                  Warning Options.    (line 1108)
51282* whatsloaded:                           Darwin Options.     (line  196)
51283* whyload:                               Darwin Options.     (line  196)
51284* Wignored-qualifiers:                   Warning Options.    (line  397)
51285* Wimplicit:                             Warning Options.    (line  393)
51286* Wimplicit-function-declaration:        Warning Options.    (line  387)
51287* Wimplicit-int:                         Warning Options.    (line  383)
51288* Wincompatible-pointer-types:           Warning Options.    (line  932)
51289* Winherited-variadic-ctor:              Warning Options.    (line 1605)
51290* Winit-self:                            Warning Options.    (line  368)
51291* Winline <1>:                           Inline.             (line   63)
51292* Winline:                               Warning Options.    (line 1610)
51293* Wint-conversion:                       Warning Options.    (line  938)
51294* Wint-to-pointer-cast:                  Warning Options.    (line 1635)
51295* Winvalid-offsetof:                     Warning Options.    (line 1623)
51296* Winvalid-pch:                          Warning Options.    (line 1644)
51297* Wjump-misses-init:                     Warning Options.    (line 1288)
51298* Wl:                                    Link Options.       (line  266)
51299* Wlarger-than-LEN:                      Warning Options.    (line 1096)
51300* Wlarger-than=LEN:                      Warning Options.    (line 1096)
51301* Wliteral-suffix:                       C++ Dialect Options.
51302                                                             (line  550)
51303* Wlogical-not-parentheses:              Warning Options.    (line 1371)
51304* Wlogical-op:                           Warning Options.    (line 1366)
51305* Wlong-long:                            Warning Options.    (line 1648)
51306* Wmain:                                 Warning Options.    (line  408)
51307* Wmaybe-uninitialized:                  Warning Options.    (line  686)
51308* Wmemset-transposed-args:               Warning Options.    (line 1342)
51309* Wmissing-braces:                       Warning Options.    (line  415)
51310* Wmissing-declarations:                 Warning Options.    (line 1441)
51311* Wmissing-field-initializers:           Warning Options.    (line 1451)
51312* Wmissing-format-attribute:             Warning Options.    (line  850)
51313* Wmissing-include-dirs:                 Warning Options.    (line  426)
51314* Wmissing-parameter-type:               Warning Options.    (line 1423)
51315* Wmissing-prototypes:                   Warning Options.    (line 1431)
51316* Wmultichar:                            Warning Options.    (line 1475)
51317* Wnarrowing:                            C++ Dialect Options.
51318                                                             (line  571)
51319* Wnested-externs:                       Warning Options.    (line 1602)
51320* Wno-abi:                               C++ Dialect Options.
51321                                                             (line  439)
51322* Wno-address:                           Warning Options.    (line 1353)
51323* Wno-aggregate-return:                  Warning Options.    (line 1386)
51324* Wno-aggressive-loop-optimizations:     Warning Options.    (line 1391)
51325* Wno-all:                               Warning Options.    (line  133)
51326* Wno-array-bounds:                      Warning Options.    (line  895)
51327* Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
51328                                                             (line  171)
51329* Wno-attributes:                        Warning Options.    (line 1396)
51330* Wno-bad-function-cast:                 Warning Options.    (line 1160)
51331* Wno-bool-compare:                      Warning Options.    (line  911)
51332* Wno-builtin-macro-redefined:           Warning Options.    (line 1402)
51333* Wno-c90-c99-compat:                    Warning Options.    (line 1165)
51334* Wno-c99-c11-compat:                    Warning Options.    (line 1173)
51335* Wno-cast-align:                        Warning Options.    (line 1213)
51336* Wno-cast-qual:                         Warning Options.    (line 1197)
51337* Wno-char-subscripts:                   Warning Options.    (line  222)
51338* Wno-clobbered:                         Warning Options.    (line 1233)
51339* Wno-comment:                           Warning Options.    (line  227)
51340* Wno-conditionally-supported:           Warning Options.    (line 1237)
51341* Wno-conversion:                        Warning Options.    (line 1240)
51342* Wno-conversion-null:                   Warning Options.    (line 1258)
51343* Wno-coverage-mismatch:                 Warning Options.    (line  232)
51344* Wno-ctor-dtor-privacy:                 C++ Dialect Options.
51345                                                             (line  536)
51346* Wno-date-time:                         Warning Options.    (line 1266)
51347* Wno-declaration-after-statement:       Warning Options.    (line 1071)
51348* Wno-delete-incomplete:                 Warning Options.    (line 1271)
51349* Wno-delete-non-virtual-dtor:           C++ Dialect Options.
51350                                                             (line  543)
51351* Wno-deprecated:                        Warning Options.    (line 1525)
51352* Wno-deprecated-declarations:           Warning Options.    (line 1529)
51353* Wno-disabled-optimization:             Warning Options.    (line 1693)
51354* Wno-discarded-array-qualifiers:        Warning Options.    (line  926)
51355* Wno-discarded-qualifiers:              Warning Options.    (line  920)
51356* Wno-div-by-zero:                       Warning Options.    (line  944)
51357* Wno-double-promotion:                  Warning Options.    (line  251)
51358* Wno-effc++:                            C++ Dialect Options.
51359                                                             (line  623)
51360* Wno-empty-body:                        Warning Options.    (line 1278)
51361* Wno-endif-labels:                      Warning Options.    (line 1080)
51362* Wno-enum-compare:                      Warning Options.    (line 1282)
51363* Wno-error:                             Warning Options.    (line   28)
51364* Wno-error=:                            Warning Options.    (line   31)
51365* Wno-extra:                             Warning Options.    (line  183)
51366* Wno-fatal-errors:                      Warning Options.    (line   48)
51367* Wno-float-conversion:                  Warning Options.    (line 1312)
51368* Wno-float-equal:                       Warning Options.    (line  970)
51369* Wno-format:                            Warning Options.    (line  270)
51370* Wno-format-contains-nul:               Warning Options.    (line  307)
51371* Wno-format-extra-args:                 Warning Options.    (line  311)
51372* Wno-format-nonliteral:                 Warning Options.    (line  335)
51373* Wno-format-security:                   Warning Options.    (line  340)
51374* Wno-format-signedness:                 Warning Options.    (line  352)
51375* Wno-format-y2k:                        Warning Options.    (line  357)
51376* Wno-format-zero-length:                Warning Options.    (line  325)
51377* Wno-free-nonheap-object:               Warning Options.    (line 1108)
51378* Wno-ignored-qualifiers:                Warning Options.    (line  397)
51379* Wno-implicit:                          Warning Options.    (line  393)
51380* Wno-implicit-function-declaration:     Warning Options.    (line  387)
51381* Wno-implicit-int:                      Warning Options.    (line  383)
51382* Wno-incompatible-pointer-types:        Warning Options.    (line  932)
51383* Wno-inherited-variadic-ctor:           Warning Options.    (line 1605)
51384* Wno-init-self:                         Warning Options.    (line  368)
51385* Wno-inline:                            Warning Options.    (line 1610)
51386* Wno-int-conversion:                    Warning Options.    (line  938)
51387* Wno-int-to-pointer-cast:               Warning Options.    (line 1635)
51388* Wno-invalid-offsetof:                  Warning Options.    (line 1623)
51389* Wno-invalid-pch:                       Warning Options.    (line 1644)
51390* Wno-jump-misses-init:                  Warning Options.    (line 1288)
51391* Wno-literal-suffix:                    C++ Dialect Options.
51392                                                             (line  550)
51393* Wno-logical-not-parentheses:           Warning Options.    (line 1371)
51394* Wno-logical-op:                        Warning Options.    (line 1366)
51395* Wno-long-long:                         Warning Options.    (line 1648)
51396* Wno-main:                              Warning Options.    (line  408)
51397* Wno-maybe-uninitialized:               Warning Options.    (line  686)
51398* Wno-memset-transposed-args:            Warning Options.    (line 1342)
51399* Wno-missing-braces:                    Warning Options.    (line  415)
51400* Wno-missing-declarations:              Warning Options.    (line 1441)
51401* Wno-missing-field-initializers:        Warning Options.    (line 1451)
51402* Wno-missing-format-attribute:          Warning Options.    (line  850)
51403* Wno-missing-include-dirs:              Warning Options.    (line  426)
51404* Wno-missing-parameter-type:            Warning Options.    (line 1423)
51405* Wno-missing-prototypes:                Warning Options.    (line 1431)
51406* Wno-multichar:                         Warning Options.    (line 1475)
51407* Wno-narrowing:                         C++ Dialect Options.
51408                                                             (line  571)
51409* Wno-nested-externs:                    Warning Options.    (line 1602)
51410* Wno-noexcept:                          C++ Dialect Options.
51411                                                             (line  584)
51412* Wno-non-template-friend:               C++ Dialect Options.
51413                                                             (line  660)
51414* Wno-non-virtual-dtor:                  C++ Dialect Options.
51415                                                             (line  590)
51416* Wno-nonnull:                           Warning Options.    (line  361)
51417* Wno-normalized:                        Warning Options.    (line 1481)
51418* Wno-odr:                               Warning Options.    (line 1538)
51419* Wno-old-style-cast:                    C++ Dialect Options.
51420                                                             (line  676)
51421* Wno-old-style-declaration:             Warning Options.    (line 1413)
51422* Wno-old-style-definition:              Warning Options.    (line 1419)
51423* Wno-overflow:                          Warning Options.    (line 1535)
51424* Wno-overlength-strings:                Warning Options.    (line 1713)
51425* Wno-overloaded-virtual:                C++ Dialect Options.
51426                                                             (line  682)
51427* Wno-override-init:                     Warning Options.    (line 1548)
51428* Wno-packed:                            Warning Options.    (line 1556)
51429* Wno-packed-bitfield-compat:            Warning Options.    (line 1573)
51430* Wno-padded:                            Warning Options.    (line 1590)
51431* Wno-parentheses:                       Warning Options.    (line  429)
51432* Wno-pedantic-ms-format:                Warning Options.    (line 1140)
51433* Wno-pmf-conversions <1>:               Bound member functions.
51434                                                             (line   35)
51435* Wno-pmf-conversions:                   C++ Dialect Options.
51436                                                             (line  701)
51437* Wno-pointer-arith:                     Warning Options.    (line 1146)
51438* Wno-pointer-sign:                      Warning Options.    (line 1702)
51439* Wno-pointer-to-int-cast:               Warning Options.    (line 1640)
51440* Wno-pragmas:                           Warning Options.    (line  736)
51441* Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
51442                                                             (line  175)
51443* Wno-redundant-decls:                   Warning Options.    (line 1597)
51444* Wno-reorder:                           C++ Dialect Options.
51445                                                             (line  598)
51446* Wno-return-local-addr:                 Warning Options.    (line  524)
51447* Wno-return-type:                       Warning Options.    (line  528)
51448* Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
51449                                                             (line  185)
51450* Wno-sequence-point:                    Warning Options.    (line  478)
51451* Wno-shadow:                            Warning Options.    (line 1084)
51452* Wno-shadow-ivar:                       Warning Options.    (line 1092)
51453* Wno-shift-count-negative:              Warning Options.    (line  543)
51454* Wno-shift-count-overflow:              Warning Options.    (line  547)
51455* Wno-sign-compare:                      Warning Options.    (line 1299)
51456* Wno-sign-conversion:                   Warning Options.    (line 1306)
51457* Wno-sign-promo:                        C++ Dialect Options.
51458                                                             (line  705)
51459* Wno-sized-deallocation:                Warning Options.    (line 1318)
51460* Wno-sizeof-array-argument:             Warning Options.    (line 1337)
51461* Wno-sizeof-pointer-memaccess:          Warning Options.    (line 1329)
51462* Wno-stack-protector:                   Warning Options.    (line 1708)
51463* Wno-strict-aliasing:                   Warning Options.    (line  741)
51464* Wno-strict-null-sentinel:              C++ Dialect Options.
51465                                                             (line  652)
51466* Wno-strict-overflow:                   Warning Options.    (line  781)
51467* Wno-strict-prototypes:                 Warning Options.    (line 1407)
51468* Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
51469                                                             (line  197)
51470* Wno-suggest-attribute=:                Warning Options.    (line  831)
51471* Wno-suggest-attribute=const:           Warning Options.    (line  837)
51472* Wno-suggest-attribute=format:          Warning Options.    (line  850)
51473* Wno-suggest-attribute=noreturn:        Warning Options.    (line  837)
51474* Wno-suggest-attribute=pure:            Warning Options.    (line  837)
51475* Wno-suggest-final-methods:             Warning Options.    (line  880)
51476* Wno-suggest-final-types:               Warning Options.    (line  871)
51477* Wno-switch:                            Warning Options.    (line  551)
51478* Wno-switch-bool:                       Warning Options.    (line  571)
51479* Wno-switch-default:                    Warning Options.    (line  559)
51480* Wno-switch-enum:                       Warning Options.    (line  562)
51481* Wno-sync-nand:                         Warning Options.    (line  581)
51482* Wno-system-headers:                    Warning Options.    (line  949)
51483* Wno-traditional:                       Warning Options.    (line  985)
51484* Wno-traditional-conversion:            Warning Options.    (line 1063)
51485* Wno-trampolines:                       Warning Options.    (line  960)
51486* Wno-trigraphs:                         Warning Options.    (line  586)
51487* Wno-type-limits:                       Warning Options.    (line 1153)
51488* Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
51489                                                             (line  205)
51490* Wno-undef:                             Warning Options.    (line 1077)
51491* Wno-uninitialized:                     Warning Options.    (line  663)
51492* Wno-unknown-pragmas:                   Warning Options.    (line  729)
51493* Wno-unsafe-loop-optimizations:         Warning Options.    (line 1134)
51494* Wno-unused:                            Warning Options.    (line  656)
51495* Wno-unused-but-set-parameter:          Warning Options.    (line  591)
51496* Wno-unused-but-set-variable:           Warning Options.    (line  600)
51497* Wno-unused-function:                   Warning Options.    (line  610)
51498* Wno-unused-label:                      Warning Options.    (line  615)
51499* Wno-unused-parameter:                  Warning Options.    (line  626)
51500* Wno-unused-result:                     Warning Options.    (line  633)
51501* Wno-unused-value:                      Warning Options.    (line  646)
51502* Wno-unused-variable:                   Warning Options.    (line  638)
51503* Wno-useless-cast:                      Warning Options.    (line 1275)
51504* Wno-varargs:                           Warning Options.    (line 1659)
51505* Wno-variadic-macros:                   Warning Options.    (line 1653)
51506* Wno-vector-operation-performance:      Warning Options.    (line 1664)
51507* Wno-virtual-move-assign:               Warning Options.    (line 1674)
51508* Wno-vla:                               Warning Options.    (line 1683)
51509* Wno-volatile-register-var:             Warning Options.    (line 1687)
51510* Wno-write-strings:                     Warning Options.    (line 1219)
51511* Wno-zero-as-null-pointer-constant:     Warning Options.    (line 1262)
51512* Wnoexcept:                             C++ Dialect Options.
51513                                                             (line  584)
51514* Wnon-template-friend:                  C++ Dialect Options.
51515                                                             (line  660)
51516* Wnon-virtual-dtor:                     C++ Dialect Options.
51517                                                             (line  590)
51518* Wnonnull:                              Warning Options.    (line  361)
51519* Wnormalized:                           Warning Options.    (line 1481)
51520* Wnormalized=:                          Warning Options.    (line 1481)
51521* Wodr:                                  Warning Options.    (line 1538)
51522* Wold-style-cast:                       C++ Dialect Options.
51523                                                             (line  676)
51524* Wold-style-declaration:                Warning Options.    (line 1413)
51525* Wold-style-definition:                 Warning Options.    (line 1419)
51526* Wopenm-simd:                           Warning Options.    (line 1543)
51527* Woverflow:                             Warning Options.    (line 1535)
51528* Woverlength-strings:                   Warning Options.    (line 1713)
51529* Woverloaded-virtual:                   C++ Dialect Options.
51530                                                             (line  682)
51531* Woverride-init:                        Warning Options.    (line 1548)
51532* Wp:                                    Preprocessor Options.
51533                                                             (line   14)
51534* Wpacked:                               Warning Options.    (line 1556)
51535* Wpacked-bitfield-compat:               Warning Options.    (line 1573)
51536* Wpadded:                               Warning Options.    (line 1590)
51537* Wparentheses:                          Warning Options.    (line  429)
51538* Wpedantic:                             Warning Options.    (line   82)
51539* Wpedantic-ms-format:                   Warning Options.    (line 1140)
51540* Wpmf-conversions:                      C++ Dialect Options.
51541                                                             (line  701)
51542* Wpointer-arith <1>:                    Pointer Arith.      (line   13)
51543* Wpointer-arith:                        Warning Options.    (line 1146)
51544* Wpointer-sign:                         Warning Options.    (line 1702)
51545* Wpointer-to-int-cast:                  Warning Options.    (line 1640)
51546* Wpragmas:                              Warning Options.    (line  736)
51547* Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
51548                                                             (line  175)
51549* wrapper:                               Overall Options.    (line  341)
51550* Wredundant-decls:                      Warning Options.    (line 1597)
51551* Wreorder:                              C++ Dialect Options.
51552                                                             (line  598)
51553* Wreturn-local-addr:                    Warning Options.    (line  524)
51554* Wreturn-type:                          Warning Options.    (line  528)
51555* Wselector:                             Objective-C and Objective-C++ Dialect Options.
51556                                                             (line  185)
51557* Wsequence-point:                       Warning Options.    (line  478)
51558* Wshadow:                               Warning Options.    (line 1084)
51559* Wshadow-ivar:                          Warning Options.    (line 1092)
51560* Wshift-count-negative:                 Warning Options.    (line  543)
51561* Wshift-count-overflow:                 Warning Options.    (line  547)
51562* Wsign-compare:                         Warning Options.    (line 1299)
51563* Wsign-conversion:                      Warning Options.    (line 1306)
51564* Wsign-promo:                           C++ Dialect Options.
51565                                                             (line  705)
51566* Wsized-deallocation:                   Warning Options.    (line 1318)
51567* Wsizeof-array-argument:                Warning Options.    (line 1337)
51568* Wsizeof-pointer-memaccess:             Warning Options.    (line 1329)
51569* Wstack-protector:                      Warning Options.    (line 1708)
51570* Wstack-usage:                          Warning Options.    (line 1112)
51571* Wstrict-aliasing:                      Warning Options.    (line  741)
51572* Wstrict-aliasing=n:                    Warning Options.    (line  749)
51573* Wstrict-null-sentinel:                 C++ Dialect Options.
51574                                                             (line  652)
51575* Wstrict-overflow:                      Warning Options.    (line  781)
51576* Wstrict-prototypes:                    Warning Options.    (line 1407)
51577* Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
51578                                                             (line  197)
51579* Wsuggest-attribute=:                   Warning Options.    (line  831)
51580* Wsuggest-attribute=const:              Warning Options.    (line  837)
51581* Wsuggest-attribute=format:             Warning Options.    (line  850)
51582* Wsuggest-attribute=noreturn:           Warning Options.    (line  837)
51583* Wsuggest-attribute=pure:               Warning Options.    (line  837)
51584* Wsuggest-final-methods:                Warning Options.    (line  880)
51585* Wsuggest-final-types:                  Warning Options.    (line  871)
51586* Wswitch:                               Warning Options.    (line  551)
51587* Wswitch-bool:                          Warning Options.    (line  571)
51588* Wswitch-default:                       Warning Options.    (line  559)
51589* Wswitch-enum:                          Warning Options.    (line  562)
51590* Wsync-nand:                            Warning Options.    (line  581)
51591* Wsystem-headers <1>:                   Preprocessor Options.
51592                                                             (line  165)
51593* Wsystem-headers:                       Warning Options.    (line  949)
51594* Wtraditional <1>:                      Preprocessor Options.
51595                                                             (line  118)
51596* Wtraditional:                          Warning Options.    (line  985)
51597* Wtraditional-conversion:               Warning Options.    (line 1063)
51598* Wtrampolines:                          Warning Options.    (line  960)
51599* Wtrigraphs <1>:                        Preprocessor Options.
51600                                                             (line  106)
51601* Wtrigraphs:                            Warning Options.    (line  586)
51602* Wtype-limits:                          Warning Options.    (line 1153)
51603* Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
51604                                                             (line  205)
51605* Wundef <1>:                            Preprocessor Options.
51606                                                             (line  124)
51607* Wundef:                                Warning Options.    (line 1077)
51608* Wuninitialized:                        Warning Options.    (line  663)
51609* Wunknown-pragmas:                      Warning Options.    (line  729)
51610* Wunsafe-loop-optimizations:            Warning Options.    (line 1134)
51611* Wunsuffixed-float-constants:           Warning Options.    (line 1728)
51612* Wunused:                               Warning Options.    (line  656)
51613* Wunused-but-set-parameter:             Warning Options.    (line  591)
51614* Wunused-but-set-variable:              Warning Options.    (line  600)
51615* Wunused-function:                      Warning Options.    (line  610)
51616* Wunused-label:                         Warning Options.    (line  615)
51617* Wunused-local-typedefs:                Warning Options.    (line  622)
51618* Wunused-macros:                        Preprocessor Options.
51619                                                             (line  129)
51620* Wunused-parameter:                     Warning Options.    (line  626)
51621* Wunused-result:                        Warning Options.    (line  633)
51622* Wunused-value:                         Warning Options.    (line  646)
51623* Wunused-variable:                      Warning Options.    (line  638)
51624* Wuseless-cast:                         Warning Options.    (line 1275)
51625* Wvarargs:                              Warning Options.    (line 1659)
51626* Wvariadic-macros:                      Warning Options.    (line 1653)
51627* Wvector-operation-performance:         Warning Options.    (line 1664)
51628* Wvirtual-move-assign:                  Warning Options.    (line 1674)
51629* Wvla:                                  Warning Options.    (line 1683)
51630* Wvolatile-register-var:                Warning Options.    (line 1687)
51631* Wwrite-strings:                        Warning Options.    (line 1219)
51632* Wzero-as-null-pointer-constant:        Warning Options.    (line 1262)
51633* x <1>:                                 Preprocessor Options.
51634                                                             (line  322)
51635* x:                                     Overall Options.    (line  126)
51636* Xassembler:                            Assembler Options.  (line   13)
51637* Xbind-lazy:                            VxWorks Options.    (line   26)
51638* Xbind-now:                             VxWorks Options.    (line   30)
51639* Xlinker:                               Link Options.       (line  248)
51640* Xpreprocessor:                         Preprocessor Options.
51641                                                             (line   25)
51642* Ym:                                    System V Options.   (line   26)
51643* YP:                                    System V Options.   (line   22)
51644* z:                                     Link Options.       (line  279)
51645
51646
51647File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
51648
51649Keyword Index
51650*************
51651
51652[index]
51653* Menu:
51654
51655* ! in constraint:                       Multi-Alternative.  (line   33)
51656* # in constraint:                       Modifiers.          (line   68)
51657* #pragma:                               Pragmas.            (line    6)
51658* #pragma implementation:                C++ Interface.      (line   36)
51659* #pragma implementation, implied:       C++ Interface.      (line   43)
51660* #pragma interface:                     C++ Interface.      (line   17)
51661* #pragma, reason for not using:         Function Attributes.
51662                                                             (line 2049)
51663* $:                                     Dollar Signs.       (line    6)
51664* $ in constraint:                       Multi-Alternative.  (line   42)
51665* % in constraint:                       Modifiers.          (line   52)
51666* %include:                              Spec Files.         (line   27)
51667* %include_noerr:                        Spec Files.         (line   31)
51668* %rename:                               Spec Files.         (line   35)
51669* & in constraint:                       Modifiers.          (line   25)
51670* ':                                     Incompatibilities.  (line  116)
51671* * in constraint:                       Modifiers.          (line   73)
51672* *__builtin_assume_aligned:             Other Builtins.     (line  346)
51673* + in constraint:                       Modifiers.          (line   12)
51674* -lgcc, use with -nodefaultlibs:        Link Options.       (line   91)
51675* -lgcc, use with -nostdlib:             Link Options.       (line   91)
51676* -march feature modifiers:              AArch64 Options.    (line  133)
51677* -mcpu feature modifiers:               AArch64 Options.    (line  133)
51678* -nodefaultlibs and unresolved references: Link Options.    (line   91)
51679* -nostdlib and unresolved references:   Link Options.       (line   91)
51680* .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
51681                                                             (line  770)
51682* //:                                    C++ Comments.       (line    6)
51683* 0 in constraint:                       Simple Constraints. (line  127)
51684* < in constraint:                       Simple Constraints. (line   48)
51685* = in constraint:                       Modifiers.          (line    8)
51686* > in constraint:                       Simple Constraints. (line   61)
51687* ? in constraint:                       Multi-Alternative.  (line   27)
51688* ?: extensions:                         Conditionals.       (line    6)
51689* ?: side effect:                        Conditionals.       (line   20)
51690* ^ in constraint:                       Multi-Alternative.  (line   38)
51691* _ in variables in macros:              Typeof.             (line   46)
51692* __atomic_add_fetch:                    __atomic Builtins.  (line  169)
51693* __atomic_always_lock_free:             __atomic Builtins.  (line  247)
51694* __atomic_and_fetch:                    __atomic Builtins.  (line  173)
51695* __atomic_clear:                        __atomic Builtins.  (line  221)
51696* __atomic_compare_exchange:             __atomic Builtins.  (line  161)
51697* __atomic_compare_exchange_n:           __atomic Builtins.  (line  138)
51698* __atomic_exchange:                     __atomic Builtins.  (line  130)
51699* __atomic_exchange_n:                   __atomic Builtins.  (line  119)
51700* __atomic_fetch_add:                    __atomic Builtins.  (line  189)
51701* __atomic_fetch_and:                    __atomic Builtins.  (line  193)
51702* __atomic_fetch_nand:                   __atomic Builtins.  (line  199)
51703* __atomic_fetch_or:                     __atomic Builtins.  (line  197)
51704* __atomic_fetch_sub:                    __atomic Builtins.  (line  191)
51705* __atomic_fetch_xor:                    __atomic Builtins.  (line  195)
51706* __atomic_is_lock_free:                 __atomic Builtins.  (line  261)
51707* __atomic_load:                         __atomic Builtins.  (line   98)
51708* __atomic_load_n:                       __atomic Builtins.  (line   89)
51709* __atomic_nand_fetch:                   __atomic Builtins.  (line  179)
51710* __atomic_or_fetch:                     __atomic Builtins.  (line  177)
51711* __atomic_signal_fence:                 __atomic Builtins.  (line  239)
51712* __atomic_store:                        __atomic Builtins.  (line  113)
51713* __atomic_store_n:                      __atomic Builtins.  (line  104)
51714* __atomic_sub_fetch:                    __atomic Builtins.  (line  171)
51715* __atomic_test_and_set:                 __atomic Builtins.  (line  210)
51716* __atomic_thread_fence:                 __atomic Builtins.  (line  232)
51717* __atomic_xor_fetch:                    __atomic Builtins.  (line  175)
51718* __builtin___bnd_chk_ptr_bounds:        Pointer Bounds Checker builtins.
51719                                                             (line    6)
51720* __builtin___bnd_chk_ptr_lbounds:       Pointer Bounds Checker builtins.
51721                                                             (line    6)
51722* __builtin___bnd_chk_ptr_ubounds:       Pointer Bounds Checker builtins.
51723                                                             (line    6)
51724* __builtin___bnd_copy_ptr_bounds:       Pointer Bounds Checker builtins.
51725                                                             (line    6)
51726* __builtin___bnd_get_ptr_lbound:        Pointer Bounds Checker builtins.
51727                                                             (line    6)
51728* __builtin___bnd_get_ptr_ubound:        Pointer Bounds Checker builtins.
51729                                                             (line    6)
51730* __builtin___bnd_init_ptr_bounds:       Pointer Bounds Checker builtins.
51731                                                             (line    6)
51732* __builtin___bnd_narrow_ptr_bounds:     Pointer Bounds Checker builtins.
51733                                                             (line    6)
51734* __builtin___bnd_null_ptr_bounds:       Pointer Bounds Checker builtins.
51735                                                             (line    6)
51736* __builtin___bnd_set_ptr_bounds:        Pointer Bounds Checker builtins.
51737                                                             (line    6)
51738* __builtin___bnd_store_ptr_bounds:      Pointer Bounds Checker builtins.
51739                                                             (line    6)
51740* __builtin___clear_cache:               Other Builtins.     (line  381)
51741* __builtin___fprintf_chk:               Object Size Checking.
51742                                                             (line    6)
51743* __builtin___memcpy_chk:                Object Size Checking.
51744                                                             (line    6)
51745* __builtin___memmove_chk:               Object Size Checking.
51746                                                             (line    6)
51747* __builtin___mempcpy_chk:               Object Size Checking.
51748                                                             (line    6)
51749* __builtin___memset_chk:                Object Size Checking.
51750                                                             (line    6)
51751* __builtin___printf_chk:                Object Size Checking.
51752                                                             (line    6)
51753* __builtin___snprintf_chk:              Object Size Checking.
51754                                                             (line    6)
51755* __builtin___sprintf_chk:               Object Size Checking.
51756                                                             (line    6)
51757* __builtin___stpcpy_chk:                Object Size Checking.
51758                                                             (line    6)
51759* __builtin___strcat_chk:                Object Size Checking.
51760                                                             (line    6)
51761* __builtin___strcpy_chk:                Object Size Checking.
51762                                                             (line    6)
51763* __builtin___strncat_chk:               Object Size Checking.
51764                                                             (line    6)
51765* __builtin___strncpy_chk:               Object Size Checking.
51766                                                             (line    6)
51767* __builtin___vfprintf_chk:              Object Size Checking.
51768                                                             (line    6)
51769* __builtin___vprintf_chk:               Object Size Checking.
51770                                                             (line    6)
51771* __builtin___vsnprintf_chk:             Object Size Checking.
51772                                                             (line    6)
51773* __builtin___vsprintf_chk:              Object Size Checking.
51774                                                             (line    6)
51775* __builtin_add_overflow:                Integer Overflow Builtins.
51776                                                             (line   11)
51777* __builtin_apply:                       Constructing Calls. (line   31)
51778* __builtin_apply_args:                  Constructing Calls. (line   20)
51779* __builtin_arc_aligned:                 ARC Built-in Functions.
51780                                                             (line   20)
51781* __builtin_arc_brk:                     ARC Built-in Functions.
51782                                                             (line   29)
51783* __builtin_arc_core_read:               ARC Built-in Functions.
51784                                                             (line   34)
51785* __builtin_arc_core_write:              ARC Built-in Functions.
51786                                                             (line   41)
51787* __builtin_arc_divaw:                   ARC Built-in Functions.
51788                                                             (line   47)
51789* __builtin_arc_flag:                    ARC Built-in Functions.
51790                                                             (line   54)
51791* __builtin_arc_lr:                      ARC Built-in Functions.
51792                                                             (line   58)
51793* __builtin_arc_mul64:                   ARC Built-in Functions.
51794                                                             (line   65)
51795* __builtin_arc_mulu64:                  ARC Built-in Functions.
51796                                                             (line   70)
51797* __builtin_arc_nop:                     ARC Built-in Functions.
51798                                                             (line   74)
51799* __builtin_arc_norm:                    ARC Built-in Functions.
51800                                                             (line   78)
51801* __builtin_arc_normw:                   ARC Built-in Functions.
51802                                                             (line   85)
51803* __builtin_arc_rtie:                    ARC Built-in Functions.
51804                                                             (line   92)
51805* __builtin_arc_sleep:                   ARC Built-in Functions.
51806                                                             (line   96)
51807* __builtin_arc_sr:                      ARC Built-in Functions.
51808                                                             (line  101)
51809* __builtin_arc_swap:                    ARC Built-in Functions.
51810                                                             (line  107)
51811* __builtin_arc_swi:                     ARC Built-in Functions.
51812                                                             (line  113)
51813* __builtin_arc_sync:                    ARC Built-in Functions.
51814                                                             (line  117)
51815* __builtin_arc_trap_s:                  ARC Built-in Functions.
51816                                                             (line  121)
51817* __builtin_arc_unimp_s:                 ARC Built-in Functions.
51818                                                             (line  125)
51819* __builtin_bswap16:                     Other Builtins.     (line  612)
51820* __builtin_bswap32:                     Other Builtins.     (line  616)
51821* __builtin_bswap64:                     Other Builtins.     (line  620)
51822* __builtin_call_with_static_chain:      Other Builtins.     (line    6)
51823* __builtin_choose_expr:                 Other Builtins.     (line  168)
51824* __builtin_clrsb:                       Other Builtins.     (line  542)
51825* __builtin_clrsbl:                      Other Builtins.     (line  564)
51826* __builtin_clrsbll:                     Other Builtins.     (line  587)
51827* __builtin_clz:                         Other Builtins.     (line  534)
51828* __builtin_clzl:                        Other Builtins.     (line  556)
51829* __builtin_clzll:                       Other Builtins.     (line  579)
51830* __builtin_complex:                     Other Builtins.     (line  208)
51831* __builtin_constant_p:                  Other Builtins.     (line  218)
51832* __builtin_cpu_init:                    x86 Built-in Functions.
51833                                                             (line   63)
51834* __builtin_cpu_is:                      x86 Built-in Functions.
51835                                                             (line   92)
51836* __builtin_cpu_supports:                x86 Built-in Functions.
51837                                                             (line  164)
51838* __builtin_ctz:                         Other Builtins.     (line  538)
51839* __builtin_ctzl:                        Other Builtins.     (line  560)
51840* __builtin_ctzll:                       Other Builtins.     (line  583)
51841* __builtin_expect:                      Other Builtins.     (line  264)
51842* __builtin_extract_return_addr:         Return Address.     (line   36)
51843* __builtin_ffs:                         Other Builtins.     (line  530)
51844* __builtin_ffsl:                        Other Builtins.     (line  553)
51845* __builtin_ffsll:                       Other Builtins.     (line  575)
51846* __builtin_FILE:                        Other Builtins.     (line  374)
51847* __builtin_fpclassify:                  Other Builtins.     (line    6)
51848* __builtin_frame_address:               Return Address.     (line   49)
51849* __builtin_frob_return_address:         Return Address.     (line   45)
51850* __builtin_FUNCTION:                    Other Builtins.     (line  369)
51851* __builtin_huge_val:                    Other Builtins.     (line  432)
51852* __builtin_huge_valf:                   Other Builtins.     (line  437)
51853* __builtin_huge_vall:                   Other Builtins.     (line  440)
51854* __builtin_huge_valq:                   x86 Built-in Functions.
51855                                                             (line   57)
51856* __builtin_inf:                         Other Builtins.     (line  455)
51857* __builtin_infd128:                     Other Builtins.     (line  465)
51858* __builtin_infd32:                      Other Builtins.     (line  459)
51859* __builtin_infd64:                      Other Builtins.     (line  462)
51860* __builtin_inff:                        Other Builtins.     (line  469)
51861* __builtin_infl:                        Other Builtins.     (line  474)
51862* __builtin_infq:                        x86 Built-in Functions.
51863                                                             (line   53)
51864* __builtin_isfinite:                    Other Builtins.     (line    6)
51865* __builtin_isgreater:                   Other Builtins.     (line    6)
51866* __builtin_isgreaterequal:              Other Builtins.     (line    6)
51867* __builtin_isinf_sign:                  Other Builtins.     (line    6)
51868* __builtin_isless:                      Other Builtins.     (line    6)
51869* __builtin_islessequal:                 Other Builtins.     (line    6)
51870* __builtin_islessgreater:               Other Builtins.     (line    6)
51871* __builtin_isnormal:                    Other Builtins.     (line    6)
51872* __builtin_isunordered:                 Other Builtins.     (line    6)
51873* __builtin_LINE:                        Other Builtins.     (line  363)
51874* __builtin_mul_overflow:                Integer Overflow Builtins.
51875                                                             (line   63)
51876* __builtin_nan:                         Other Builtins.     (line  486)
51877* __builtin_nand128:                     Other Builtins.     (line  508)
51878* __builtin_nand32:                      Other Builtins.     (line  502)
51879* __builtin_nand64:                      Other Builtins.     (line  505)
51880* __builtin_nanf:                        Other Builtins.     (line  512)
51881* __builtin_nanl:                        Other Builtins.     (line  515)
51882* __builtin_nans:                        Other Builtins.     (line  519)
51883* __builtin_nansf:                       Other Builtins.     (line  523)
51884* __builtin_nansl:                       Other Builtins.     (line  526)
51885* __builtin_nds32_isb:                   NDS32 Built-in Functions.
51886                                                             (line   13)
51887* __builtin_nds32_isync:                 NDS32 Built-in Functions.
51888                                                             (line    9)
51889* __builtin_nds32_mfsr:                  NDS32 Built-in Functions.
51890                                                             (line   16)
51891* __builtin_nds32_mfusr:                 NDS32 Built-in Functions.
51892                                                             (line   19)
51893* __builtin_nds32_mtsr:                  NDS32 Built-in Functions.
51894                                                             (line   22)
51895* __builtin_nds32_mtusr:                 NDS32 Built-in Functions.
51896                                                             (line   25)
51897* __builtin_nds32_setgie_dis:            NDS32 Built-in Functions.
51898                                                             (line   31)
51899* __builtin_nds32_setgie_en:             NDS32 Built-in Functions.
51900                                                             (line   28)
51901* __builtin_non_tx_store:                S/390 System z Built-in Functions.
51902                                                             (line  104)
51903* __builtin_object_size:                 Object Size Checking.
51904                                                             (line    6)
51905* __builtin_offsetof:                    Offsetof.           (line    6)
51906* __builtin_parity:                      Other Builtins.     (line  550)
51907* __builtin_parityl:                     Other Builtins.     (line  571)
51908* __builtin_parityll:                    Other Builtins.     (line  595)
51909* __builtin_popcount:                    Other Builtins.     (line  547)
51910* __builtin_popcountl:                   Other Builtins.     (line  567)
51911* __builtin_popcountll:                  Other Builtins.     (line  591)
51912* __builtin_powi:                        Other Builtins.     (line    6)
51913* __builtin_powif:                       Other Builtins.     (line    6)
51914* __builtin_powil:                       Other Builtins.     (line    6)
51915* __builtin_prefetch:                    Other Builtins.     (line  393)
51916* __builtin_return:                      Constructing Calls. (line   48)
51917* __builtin_return_address:              Return Address.     (line   11)
51918* __builtin_rx_brk:                      RX Built-in Functions.
51919                                                             (line   11)
51920* __builtin_rx_clrpsw:                   RX Built-in Functions.
51921                                                             (line   14)
51922* __builtin_rx_int:                      RX Built-in Functions.
51923                                                             (line   18)
51924* __builtin_rx_machi:                    RX Built-in Functions.
51925                                                             (line   22)
51926* __builtin_rx_maclo:                    RX Built-in Functions.
51927                                                             (line   27)
51928* __builtin_rx_mulhi:                    RX Built-in Functions.
51929                                                             (line   32)
51930* __builtin_rx_mullo:                    RX Built-in Functions.
51931                                                             (line   37)
51932* __builtin_rx_mvfachi:                  RX Built-in Functions.
51933                                                             (line   42)
51934* __builtin_rx_mvfacmi:                  RX Built-in Functions.
51935                                                             (line   46)
51936* __builtin_rx_mvfc:                     RX Built-in Functions.
51937                                                             (line   50)
51938* __builtin_rx_mvtachi:                  RX Built-in Functions.
51939                                                             (line   54)
51940* __builtin_rx_mvtaclo:                  RX Built-in Functions.
51941                                                             (line   58)
51942* __builtin_rx_mvtc:                     RX Built-in Functions.
51943                                                             (line   62)
51944* __builtin_rx_mvtipl:                   RX Built-in Functions.
51945                                                             (line   66)
51946* __builtin_rx_racw:                     RX Built-in Functions.
51947                                                             (line   70)
51948* __builtin_rx_revw:                     RX Built-in Functions.
51949                                                             (line   74)
51950* __builtin_rx_rmpa:                     RX Built-in Functions.
51951                                                             (line   79)
51952* __builtin_rx_round:                    RX Built-in Functions.
51953                                                             (line   83)
51954* __builtin_rx_sat:                      RX Built-in Functions.
51955                                                             (line   88)
51956* __builtin_rx_setpsw:                   RX Built-in Functions.
51957                                                             (line   92)
51958* __builtin_rx_wait:                     RX Built-in Functions.
51959                                                             (line   96)
51960* __builtin_sadd_overflow:               Integer Overflow Builtins.
51961                                                             (line   13)
51962* __builtin_saddl_overflow:              Integer Overflow Builtins.
51963                                                             (line   15)
51964* __builtin_saddll_overflow:             Integer Overflow Builtins.
51965                                                             (line   17)
51966* __builtin_set_thread_pointer:          SH Built-in Functions.
51967                                                             (line   10)
51968* __builtin_sh_get_fpscr:                SH Built-in Functions.
51969                                                             (line   36)
51970* __builtin_sh_set_fpscr:                SH Built-in Functions.
51971                                                             (line   39)
51972* __builtin_smul_overflow:               Integer Overflow Builtins.
51973                                                             (line   65)
51974* __builtin_smull_overflow:              Integer Overflow Builtins.
51975                                                             (line   67)
51976* __builtin_smulll_overflow:             Integer Overflow Builtins.
51977                                                             (line   69)
51978* __builtin_ssub_overflow:               Integer Overflow Builtins.
51979                                                             (line   45)
51980* __builtin_ssubl_overflow:              Integer Overflow Builtins.
51981                                                             (line   47)
51982* __builtin_ssubll_overflow:             Integer Overflow Builtins.
51983                                                             (line   49)
51984* __builtin_sub_overflow:                Integer Overflow Builtins.
51985                                                             (line   43)
51986* __builtin_tabort:                      S/390 System z Built-in Functions.
51987                                                             (line   87)
51988* __builtin_tbegin:                      S/390 System z Built-in Functions.
51989                                                             (line    7)
51990* __builtin_tbegin_nofloat:              S/390 System z Built-in Functions.
51991                                                             (line   59)
51992* __builtin_tbegin_retry:                S/390 System z Built-in Functions.
51993                                                             (line   65)
51994* __builtin_tbegin_retry_nofloat:        S/390 System z Built-in Functions.
51995                                                             (line   72)
51996* __builtin_tbeginc:                     S/390 System z Built-in Functions.
51997                                                             (line   78)
51998* __builtin_tend:                        S/390 System z Built-in Functions.
51999                                                             (line   82)
52000* __builtin_thread_pointer:              SH Built-in Functions.
52001                                                             (line   20)
52002* __builtin_trap:                        Other Builtins.     (line  288)
52003* __builtin_tx_assist:                   S/390 System z Built-in Functions.
52004                                                             (line   92)
52005* __builtin_tx_nesting_depth:            S/390 System z Built-in Functions.
52006                                                             (line   98)
52007* __builtin_types_compatible_p:          Other Builtins.     (line  111)
52008* __builtin_uadd_overflow:               Integer Overflow Builtins.
52009                                                             (line   19)
52010* __builtin_uaddl_overflow:              Integer Overflow Builtins.
52011                                                             (line   21)
52012* __builtin_uaddll_overflow:             Integer Overflow Builtins.
52013                                                             (line   23)
52014* __builtin_umul_overflow:               Integer Overflow Builtins.
52015                                                             (line   71)
52016* __builtin_umull_overflow:              Integer Overflow Builtins.
52017                                                             (line   73)
52018* __builtin_umulll_overflow:             Integer Overflow Builtins.
52019                                                             (line   75)
52020* __builtin_unreachable:                 Other Builtins.     (line  295)
52021* __builtin_usub_overflow:               Integer Overflow Builtins.
52022                                                             (line   51)
52023* __builtin_usubl_overflow:              Integer Overflow Builtins.
52024                                                             (line   53)
52025* __builtin_usubll_overflow:             Integer Overflow Builtins.
52026                                                             (line   55)
52027* __builtin_va_arg_pack:                 Constructing Calls. (line   53)
52028* __builtin_va_arg_pack_len:             Constructing Calls. (line   76)
52029* __complex__ keyword:                   Complex.            (line    6)
52030* __declspec(dllexport):                 Function Attributes.
52031                                                             (line  285)
52032* __declspec(dllimport):                 Function Attributes.
52033                                                             (line  319)
52034* __ea SPU Named Address Spaces:         Named Address Spaces.
52035                                                             (line  155)
52036* __extension__:                         Alternate Keywords. (line   30)
52037* __far M32C Named Address Spaces:       Named Address Spaces.
52038                                                             (line  139)
52039* __far RL78 Named Address Spaces:       Named Address Spaces.
52040                                                             (line  147)
52041* __flash AVR Named Address Spaces:      Named Address Spaces.
52042                                                             (line   31)
52043* __flash1 AVR Named Address Spaces:     Named Address Spaces.
52044                                                             (line   40)
52045* __flash2 AVR Named Address Spaces:     Named Address Spaces.
52046                                                             (line   40)
52047* __flash3 AVR Named Address Spaces:     Named Address Spaces.
52048                                                             (line   40)
52049* __flash4 AVR Named Address Spaces:     Named Address Spaces.
52050                                                             (line   40)
52051* __flash5 AVR Named Address Spaces:     Named Address Spaces.
52052                                                             (line   40)
52053* __float128 data type:                  Floating Types.     (line    6)
52054* __float80 data type:                   Floating Types.     (line    6)
52055* __fp16 data type:                      Half-Precision.     (line    6)
52056* __func__ identifier:                   Function Names.     (line    6)
52057* __FUNCTION__ identifier:               Function Names.     (line    6)
52058* __imag__ keyword:                      Complex.            (line   27)
52059* __int128 data types:                   __int128.           (line    6)
52060* __memx AVR Named Address Spaces:       Named Address Spaces.
52061                                                             (line   46)
52062* __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
52063* __real__ keyword:                      Complex.            (line   27)
52064* __STDC_HOSTED__:                       Standards.          (line   13)
52065* __sync_add_and_fetch:                  __sync Builtins.    (line   60)
52066* __sync_and_and_fetch:                  __sync Builtins.    (line   60)
52067* __sync_bool_compare_and_swap:          __sync Builtins.    (line   71)
52068* __sync_fetch_and_add:                  __sync Builtins.    (line   44)
52069* __sync_fetch_and_and:                  __sync Builtins.    (line   44)
52070* __sync_fetch_and_nand:                 __sync Builtins.    (line   44)
52071* __sync_fetch_and_or:                   __sync Builtins.    (line   44)
52072* __sync_fetch_and_sub:                  __sync Builtins.    (line   44)
52073* __sync_fetch_and_xor:                  __sync Builtins.    (line   44)
52074* __sync_lock_release:                   __sync Builtins.    (line  101)
52075* __sync_lock_test_and_set:              __sync Builtins.    (line   83)
52076* __sync_nand_and_fetch:                 __sync Builtins.    (line   60)
52077* __sync_or_and_fetch:                   __sync Builtins.    (line   60)
52078* __sync_sub_and_fetch:                  __sync Builtins.    (line   60)
52079* __sync_synchronize:                    __sync Builtins.    (line   80)
52080* __sync_val_compare_and_swap:           __sync Builtins.    (line   71)
52081* __sync_xor_and_fetch:                  __sync Builtins.    (line   60)
52082* __thread:                              Thread-Local.       (line    6)
52083* _Accum data type:                      Fixed-Point.        (line    6)
52084* _Complex keyword:                      Complex.            (line    6)
52085* _Decimal128 data type:                 Decimal Float.      (line    6)
52086* _Decimal32 data type:                  Decimal Float.      (line    6)
52087* _Decimal64 data type:                  Decimal Float.      (line    6)
52088* _exit:                                 Other Builtins.     (line    6)
52089* _Exit:                                 Other Builtins.     (line    6)
52090* _Fract data type:                      Fixed-Point.        (line    6)
52091* _HTM_FIRST_USER_ABORT_CODE:            S/390 System z Built-in Functions.
52092                                                             (line   48)
52093* _Sat data type:                        Fixed-Point.        (line    6)
52094* _xabort:                               x86 transactional memory intrinsics.
52095                                                             (line   64)
52096* _xbegin:                               x86 transactional memory intrinsics.
52097                                                             (line   20)
52098* _xend:                                 x86 transactional memory intrinsics.
52099                                                             (line   55)
52100* _xtest:                                x86 transactional memory intrinsics.
52101                                                             (line   60)
52102* AArch64 Options:                       AArch64 Options.    (line    6)
52103* ABI:                                   Compatibility.      (line    6)
52104* abi_tag function attribute:            C++ Attributes.     (line    9)
52105* abi_tag type attribute:                C++ Attributes.     (line    9)
52106* abi_tag variable attribute:            C++ Attributes.     (line    9)
52107* abort:                                 Other Builtins.     (line    6)
52108* abs:                                   Other Builtins.     (line    6)
52109* accessing volatiles <1>:               C++ Volatiles.      (line    6)
52110* accessing volatiles:                   Volatiles.          (line    6)
52111* acos:                                  Other Builtins.     (line    6)
52112* acosf:                                 Other Builtins.     (line    6)
52113* acosh:                                 Other Builtins.     (line    6)
52114* acoshf:                                Other Builtins.     (line    6)
52115* acoshl:                                Other Builtins.     (line    6)
52116* acosl:                                 Other Builtins.     (line    6)
52117* Ada:                                   G++ and GCC.        (line    6)
52118* additional floating types:             Floating Types.     (line    6)
52119* address constraints:                   Simple Constraints. (line  154)
52120* address of a label:                    Labels as Values.   (line    6)
52121* address variable attribute, AVR:       Variable Attributes.
52122                                                             (line  375)
52123* address_operand:                       Simple Constraints. (line  158)
52124* alias function attribute:              Function Attributes.
52125                                                             (line   40)
52126* aligned function attribute:            Function Attributes.
52127                                                             (line   53)
52128* aligned type attribute:                Type Attributes.    (line   32)
52129* aligned variable attribute:            Variable Attributes.
52130                                                             (line   24)
52131* alignment:                             Alignment.          (line    6)
52132* alloc_align function attribute:        Function Attributes.
52133                                                             (line   94)
52134* alloc_size function attribute:         Function Attributes.
52135                                                             (line   73)
52136* alloca:                                Other Builtins.     (line    6)
52137* alloca vs variable-length arrays:      Variable Length.    (line   35)
52138* Allow nesting in an interrupt handler on the Blackfin processor: Function Attributes.
52139                                                             (line 1056)
52140* Altera Nios II options:                Nios II Options.    (line    6)
52141* alternate keywords:                    Alternate Keywords. (line    6)
52142* altivec type attribute, PowerPC:       Type Attributes.    (line  363)
52143* altivec variable attribute, PowerPC:   Variable Attributes.
52144                                                             (line  518)
52145* always_inline function attribute:      Function Attributes.
52146                                                             (line  126)
52147* AMD1:                                  Standards.          (line   13)
52148* ANSI C:                                Standards.          (line   13)
52149* ANSI C standard:                       Standards.          (line   13)
52150* ANSI C89:                              Standards.          (line   13)
52151* ANSI support:                          C Dialect Options.  (line   10)
52152* ANSI X3.159-1989:                      Standards.          (line   13)
52153* apostrophes:                           Incompatibilities.  (line  116)
52154* application binary interface:          Compatibility.      (line    6)
52155* ARC options:                           ARC Options.        (line    6)
52156* ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
52157                                                             (line    6)
52158* ARM options:                           ARM Options.        (line    6)
52159* arrays of length zero:                 Zero Length.        (line    6)
52160* arrays of variable length:             Variable Length.    (line    6)
52161* arrays, non-lvalue:                    Subscripting.       (line    6)
52162* artificial function attribute:         Function Attributes.
52163                                                             (line  174)
52164* asin:                                  Other Builtins.     (line    6)
52165* asinf:                                 Other Builtins.     (line    6)
52166* asinh:                                 Other Builtins.     (line    6)
52167* asinhf:                                Other Builtins.     (line    6)
52168* asinhl:                                Other Builtins.     (line    6)
52169* asinl:                                 Other Builtins.     (line    6)
52170* asm assembler template:                Extended Asm.       (line  219)
52171* asm clobbers:                          Extended Asm.       (line  578)
52172* asm constraints:                       Constraints.        (line    6)
52173* asm expressions:                       Extended Asm.       (line  482)
52174* asm goto labels:                       Extended Asm.       (line  648)
52175* asm input operands:                    Extended Asm.       (line  482)
52176* asm keyword:                           Using Assembly Language with C.
52177                                                             (line    6)
52178* asm output operands:                   Extended Asm.       (line  322)
52179* asm volatile:                          Extended Asm.       (line  109)
52180* assembler names for identifiers:       Asm Labels.         (line    6)
52181* assembly code, invalid:                Bug Criteria.       (line   12)
52182* assembly language in C:                Using Assembly Language with C.
52183                                                             (line    6)
52184* assembly language in C, basic:         Basic Asm.          (line    6)
52185* assembly language in C, extended:      Extended Asm.       (line    6)
52186* assume_aligned function attribute:     Function Attributes.
52187                                                             (line  111)
52188* atan:                                  Other Builtins.     (line    6)
52189* atan2:                                 Other Builtins.     (line    6)
52190* atan2f:                                Other Builtins.     (line    6)
52191* atan2l:                                Other Builtins.     (line    6)
52192* atanf:                                 Other Builtins.     (line    6)
52193* atanh:                                 Other Builtins.     (line    6)
52194* atanhf:                                Other Builtins.     (line    6)
52195* atanhl:                                Other Builtins.     (line    6)
52196* atanl:                                 Other Builtins.     (line    6)
52197* attribute of types:                    Type Attributes.    (line    6)
52198* attribute of variables:                Variable Attributes.
52199                                                             (line    6)
52200* attribute syntax:                      Attribute Syntax.   (line    6)
52201* autoincrement/decrement addressing:    Simple Constraints. (line   30)
52202* automatic inline for C++ member fns:   Inline.             (line   71)
52203* AVR Options:                           AVR Options.        (line    6)
52204* Backwards Compatibility:               Backwards Compatibility.
52205                                                             (line    6)
52206* bank_switch function attribute, M32C:  Function Attributes.
52207                                                             (line  181)
52208* base class members:                    Name lookup.        (line    6)
52209* based type attribute, MeP:             Type Attributes.    (line  349)
52210* based variable attribute, MeP:         Variable Attributes.
52211                                                             (line  470)
52212* basic asm:                             Basic Asm.          (line    6)
52213* bcmp:                                  Other Builtins.     (line    6)
52214* below100 variable attribute, Xstormy16: Variable Attributes.
52215                                                             (line  656)
52216* binary compatibility:                  Compatibility.      (line    6)
52217* Binary constants using the 0b prefix:  Binary constants.   (line    6)
52218* Blackfin Options:                      Blackfin Options.   (line    6)
52219* bnd_instrument function attribute:     Function Attributes.
52220                                                             (line 1327)
52221* bnd_legacy function attribute:         Function Attributes.
52222                                                             (line 1322)
52223* bnd_variable_size type attribute:      Type Attributes.    (line  295)
52224* bound pointer to member function:      Bound member functions.
52225                                                             (line    6)
52226* break handler functions:               Function Attributes.
52227                                                             (line 1416)
52228* break_handler function attribute, MicroBlaze: Function Attributes.
52229                                                             (line 1416)
52230* brk_interrupt function attribute, RL78: Function Attributes.
52231                                                             (line  798)
52232* bug criteria:                          Bug Criteria.       (line    6)
52233* bugs:                                  Bugs.               (line    6)
52234* bugs, known:                           Trouble.            (line    6)
52235* built-in functions <1>:                Other Builtins.     (line    6)
52236* built-in functions:                    C Dialect Options.  (line  213)
52237* bzero:                                 Other Builtins.     (line    6)
52238* C compilation options:                 Invoking GCC.       (line   17)
52239* C intermediate output, nonexistent:    G++ and GCC.        (line   35)
52240* C language extensions:                 C Extensions.       (line    6)
52241* C language, traditional:               C Dialect Options.  (line  344)
52242* C standard:                            Standards.          (line   13)
52243* C standards:                           Standards.          (line   13)
52244* c++:                                   Invoking G++.       (line   14)
52245* C++:                                   G++ and GCC.        (line   30)
52246* C++ comments:                          C++ Comments.       (line    6)
52247* C++ compilation options:               Invoking GCC.       (line   23)
52248* C++ interface and implementation headers: C++ Interface.   (line    6)
52249* C++ language extensions:               C++ Extensions.     (line    6)
52250* C++ member fns, automatically inline:  Inline.             (line   71)
52251* C++ misunderstandings:                 C++ Misunderstandings.
52252                                                             (line    6)
52253* C++ options, command-line:             C++ Dialect Options.
52254                                                             (line    6)
52255* C++ pragmas, effect on inlining:       C++ Interface.      (line   57)
52256* C++ source file suffixes:              Invoking G++.       (line    6)
52257* C++ static data, declaring and defining: Static Definitions.
52258                                                             (line    6)
52259* C11:                                   Standards.          (line   13)
52260* C1X:                                   Standards.          (line   13)
52261* C6X Options:                           C6X Options.        (line    6)
52262* C89:                                   Standards.          (line   13)
52263* C90:                                   Standards.          (line   13)
52264* C94:                                   Standards.          (line   13)
52265* C95:                                   Standards.          (line   13)
52266* C99:                                   Standards.          (line   13)
52267* C9X:                                   Standards.          (line   13)
52268* C_INCLUDE_PATH:                        Environment Variables.
52269                                                             (line  130)
52270* cabs:                                  Other Builtins.     (line    6)
52271* cabsf:                                 Other Builtins.     (line    6)
52272* cabsl:                                 Other Builtins.     (line    6)
52273* cacos:                                 Other Builtins.     (line    6)
52274* cacosf:                                Other Builtins.     (line    6)
52275* cacosh:                                Other Builtins.     (line    6)
52276* cacoshf:                               Other Builtins.     (line    6)
52277* cacoshl:                               Other Builtins.     (line    6)
52278* cacosl:                                Other Builtins.     (line    6)
52279* callee_pop_aggregate_return function attribute, x86: Function Attributes.
52280                                                             (line 1011)
52281* calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes.
52282                                                             (line  537)
52283* calloc:                                Other Builtins.     (line    6)
52284* caret:                                 Multi-Alternative.  (line   38)
52285* caret GCC_COLORS capability:           Language Independent Options.
52286                                                             (line   78)
52287* carg:                                  Other Builtins.     (line    6)
52288* cargf:                                 Other Builtins.     (line    6)
52289* cargl:                                 Other Builtins.     (line    6)
52290* case labels in initializers:           Designated Inits.   (line    6)
52291* case ranges:                           Case Ranges.        (line    6)
52292* casin:                                 Other Builtins.     (line    6)
52293* casinf:                                Other Builtins.     (line    6)
52294* casinh:                                Other Builtins.     (line    6)
52295* casinhf:                               Other Builtins.     (line    6)
52296* casinhl:                               Other Builtins.     (line    6)
52297* casinl:                                Other Builtins.     (line    6)
52298* cast to a union:                       Cast to Union.      (line    6)
52299* catan:                                 Other Builtins.     (line    6)
52300* catanf:                                Other Builtins.     (line    6)
52301* catanh:                                Other Builtins.     (line    6)
52302* catanhf:                               Other Builtins.     (line    6)
52303* catanhl:                               Other Builtins.     (line    6)
52304* catanl:                                Other Builtins.     (line    6)
52305* cb variable attribute, MeP:            Variable Attributes.
52306                                                             (line  502)
52307* cbrt:                                  Other Builtins.     (line    6)
52308* cbrtf:                                 Other Builtins.     (line    6)
52309* cbrtl:                                 Other Builtins.     (line    6)
52310* ccos:                                  Other Builtins.     (line    6)
52311* ccosf:                                 Other Builtins.     (line    6)
52312* ccosh:                                 Other Builtins.     (line    6)
52313* ccoshf:                                Other Builtins.     (line    6)
52314* ccoshl:                                Other Builtins.     (line    6)
52315* ccosl:                                 Other Builtins.     (line    6)
52316* cdecl function attribute, x86-32:      Function Attributes.
52317                                                             (line  217)
52318* ceil:                                  Other Builtins.     (line    6)
52319* ceilf:                                 Other Builtins.     (line    6)
52320* ceill:                                 Other Builtins.     (line    6)
52321* cexp:                                  Other Builtins.     (line    6)
52322* cexpf:                                 Other Builtins.     (line    6)
52323* cexpl:                                 Other Builtins.     (line    6)
52324* character set, execution:              Preprocessor Options.
52325                                                             (line  553)
52326* character set, input:                  Preprocessor Options.
52327                                                             (line  566)
52328* character set, input normalization:    Warning Options.    (line 1481)
52329* character set, wide execution:         Preprocessor Options.
52330                                                             (line  558)
52331* cimag:                                 Other Builtins.     (line    6)
52332* cimagf:                                Other Builtins.     (line    6)
52333* cimagl:                                Other Builtins.     (line    6)
52334* cleanup variable attribute:            Variable Attributes.
52335                                                             (line   90)
52336* clog:                                  Other Builtins.     (line    6)
52337* clogf:                                 Other Builtins.     (line    6)
52338* clogl:                                 Other Builtins.     (line    6)
52339* COBOL:                                 G++ and GCC.        (line   23)
52340* code generation conventions:           Code Gen Options.   (line    6)
52341* code, mixed with declarations:         Mixed Declarations. (line    6)
52342* cold function attribute:               Function Attributes.
52343                                                             (line 1286)
52344* cold label attribute:                  Label Attributes.   (line   43)
52345* command options:                       Invoking GCC.       (line    6)
52346* comments, C++ style:                   C++ Comments.       (line    6)
52347* common variable attribute:             Variable Attributes.
52348                                                             (line  106)
52349* comparison of signed and unsigned values, warning: Warning Options.
52350                                                             (line 1299)
52351* compiler bugs, reporting:              Bug Reporting.      (line    6)
52352* compiler compared to C++ preprocessor: G++ and GCC.        (line   35)
52353* compiler options, C++:                 C++ Dialect Options.
52354                                                             (line    6)
52355* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
52356                                                             (line    6)
52357* compiler version, specifying:          Target Options.     (line    6)
52358* COMPILER_PATH:                         Environment Variables.
52359                                                             (line   91)
52360* complex conjugation:                   Complex.            (line   34)
52361* complex numbers:                       Complex.            (line    6)
52362* compound literals:                     Compound Literals.  (line    6)
52363* computed gotos:                        Labels as Values.   (line    6)
52364* conditional expressions, extensions:   Conditionals.       (line    6)
52365* conflicting types:                     Disappointments.    (line   21)
52366* conj:                                  Other Builtins.     (line    6)
52367* conjf:                                 Other Builtins.     (line    6)
52368* conjl:                                 Other Builtins.     (line    6)
52369* const applied to function:             Function Attributes.
52370                                                             (line    6)
52371* const function attribute:              Function Attributes.
52372                                                             (line  223)
52373* const qualifier:                       Pointers to Arrays. (line    6)
52374* constants in constraints:              Simple Constraints. (line   70)
52375* constraint modifier characters:        Modifiers.          (line    6)
52376* constraint, matching:                  Simple Constraints. (line  139)
52377* constraints, asm:                      Constraints.        (line    6)
52378* constraints, machine specific:         Machine Constraints.
52379                                                             (line    6)
52380* constructing calls:                    Constructing Calls. (line    6)
52381* constructor expressions:               Compound Literals.  (line    6)
52382* constructor function attribute:        Function Attributes.
52383                                                             (line  238)
52384* contributors:                          Contributors.       (line    6)
52385* copysign:                              Other Builtins.     (line    6)
52386* copysignf:                             Other Builtins.     (line    6)
52387* copysignl:                             Other Builtins.     (line    6)
52388* core dump:                             Bug Criteria.       (line    9)
52389* cos:                                   Other Builtins.     (line    6)
52390* cosf:                                  Other Builtins.     (line    6)
52391* cosh:                                  Other Builtins.     (line    6)
52392* coshf:                                 Other Builtins.     (line    6)
52393* coshl:                                 Other Builtins.     (line    6)
52394* cosl:                                  Other Builtins.     (line    6)
52395* CPATH:                                 Environment Variables.
52396                                                             (line  129)
52397* CPLUS_INCLUDE_PATH:                    Environment Variables.
52398                                                             (line  131)
52399* cpow:                                  Other Builtins.     (line    6)
52400* cpowf:                                 Other Builtins.     (line    6)
52401* cpowl:                                 Other Builtins.     (line    6)
52402* cproj:                                 Other Builtins.     (line    6)
52403* cprojf:                                Other Builtins.     (line    6)
52404* cprojl:                                Other Builtins.     (line    6)
52405* CR16 Options:                          CR16 Options.       (line    6)
52406* creal:                                 Other Builtins.     (line    6)
52407* crealf:                                Other Builtins.     (line    6)
52408* creall:                                Other Builtins.     (line    6)
52409* CRIS Options:                          CRIS Options.       (line    6)
52410* critical function attribute, MSP430:   Function Attributes.
52411                                                             (line  691)
52412* cross compiling:                       Target Options.     (line    6)
52413* csin:                                  Other Builtins.     (line    6)
52414* csinf:                                 Other Builtins.     (line    6)
52415* csinh:                                 Other Builtins.     (line    6)
52416* csinhf:                                Other Builtins.     (line    6)
52417* csinhl:                                Other Builtins.     (line    6)
52418* csinl:                                 Other Builtins.     (line    6)
52419* csqrt:                                 Other Builtins.     (line    6)
52420* csqrtf:                                Other Builtins.     (line    6)
52421* csqrtl:                                Other Builtins.     (line    6)
52422* ctan:                                  Other Builtins.     (line    6)
52423* ctanf:                                 Other Builtins.     (line    6)
52424* ctanh:                                 Other Builtins.     (line    6)
52425* ctanhf:                                Other Builtins.     (line    6)
52426* ctanhl:                                Other Builtins.     (line    6)
52427* ctanl:                                 Other Builtins.     (line    6)
52428* Darwin options:                        Darwin Options.     (line    6)
52429* dcgettext:                             Other Builtins.     (line    6)
52430* DD integer suffix:                     Decimal Float.      (line    6)
52431* dd integer suffix:                     Decimal Float.      (line    6)
52432* deallocating variable length arrays:   Variable Length.    (line   22)
52433* debugging information options:         Debugging Options.  (line    6)
52434* decimal floating types:                Decimal Float.      (line    6)
52435* declaration scope:                     Incompatibilities.  (line   80)
52436* declarations inside expressions:       Statement Exprs.    (line    6)
52437* declarations, mixed with code:         Mixed Declarations. (line    6)
52438* declaring attributes of functions:     Function Attributes.
52439                                                             (line    6)
52440* declaring static data in C++:          Static Definitions. (line    6)
52441* defining static data in C++:           Static Definitions. (line    6)
52442* dependencies for make as output:       Environment Variables.
52443                                                             (line  157)
52444* dependencies, make:                    Preprocessor Options.
52445                                                             (line  185)
52446* DEPENDENCIES_OUTPUT:                   Environment Variables.
52447                                                             (line  156)
52448* dependent name lookup:                 Name lookup.        (line    6)
52449* deprecated function attribute:         Function Attributes.
52450                                                             (line  260)
52451* deprecated type attribute:             Type Attributes.    (line  205)
52452* deprecated variable attribute:         Variable Attributes.
52453                                                             (line  115)
52454* designated initializers:               Designated Inits.   (line    6)
52455* designated_init type attribute:        Type Attributes.    (line  283)
52456* designator lists:                      Designated Inits.   (line   97)
52457* designators:                           Designated Inits.   (line   64)
52458* destructor function attribute:         Function Attributes.
52459                                                             (line  238)
52460* DF integer suffix:                     Decimal Float.      (line    6)
52461* df integer suffix:                     Decimal Float.      (line    6)
52462* dgettext:                              Other Builtins.     (line    6)
52463* diagnostic messages:                   Language Independent Options.
52464                                                             (line    6)
52465* dialect options:                       C Dialect Options.  (line    6)
52466* digits in constraint:                  Simple Constraints. (line  127)
52467* directory options:                     Directory Options.  (line    6)
52468* disinterrupt function attribute, Epiphany: Function Attributes.
52469                                                             (line  280)
52470* disinterrupt function attribute, MeP:  Function Attributes.
52471                                                             (line  280)
52472* DL integer suffix:                     Decimal Float.      (line    6)
52473* dl integer suffix:                     Decimal Float.      (line    6)
52474* dllexport function attribute:          Function Attributes.
52475                                                             (line  285)
52476* dllexport variable attribute:          Variable Attributes.
52477                                                             (line  311)
52478* dllimport function attribute:          Function Attributes.
52479                                                             (line  319)
52480* dllimport variable attribute:          Variable Attributes.
52481                                                             (line  307)
52482* dollar sign:                           Multi-Alternative.  (line   42)
52483* dollar signs in identifier names:      Dollar Signs.       (line    6)
52484* double-word arithmetic:                Long Long.          (line    6)
52485* downward funargs:                      Nested Functions.   (line    6)
52486* drem:                                  Other Builtins.     (line    6)
52487* dremf:                                 Other Builtins.     (line    6)
52488* dreml:                                 Other Builtins.     (line    6)
52489* E in constraint:                       Simple Constraints. (line   89)
52490* earlyclobber operand:                  Modifiers.          (line   25)
52491* eight-bit data on the H8/300, H8/300H, and H8S: Variable Attributes.
52492                                                             (line  408)
52493* eightbit_data variable attribute, H8/300: Variable Attributes.
52494                                                             (line  408)
52495* EIND:                                  AVR Options.        (line  242)
52496* empty structures:                      Empty Structures.   (line    6)
52497* Enable Cilk Plus:                      C Dialect Options.  (line  288)
52498* environment variables:                 Environment Variables.
52499                                                             (line    6)
52500* erf:                                   Other Builtins.     (line    6)
52501* erfc:                                  Other Builtins.     (line    6)
52502* erfcf:                                 Other Builtins.     (line    6)
52503* erfcl:                                 Other Builtins.     (line    6)
52504* erff:                                  Other Builtins.     (line    6)
52505* erfl:                                  Other Builtins.     (line    6)
52506* error function attribute:              Function Attributes.
52507                                                             (line  193)
52508* error GCC_COLORS capability:           Language Independent Options.
52509                                                             (line   69)
52510* error messages:                        Warnings and Errors.
52511                                                             (line    6)
52512* escaped newlines:                      Escaped Newlines.   (line    6)
52513* exception function attribute:          Function Attributes.
52514                                                             (line  371)
52515* exception handler functions, Blackfin: Function Attributes.
52516                                                             (line  376)
52517* exception handler functions, NDS32:    Function Attributes.
52518                                                             (line  371)
52519* exception_handler function attribute:  Function Attributes.
52520                                                             (line  376)
52521* exclamation point:                     Multi-Alternative.  (line   33)
52522* exit:                                  Other Builtins.     (line    6)
52523* exp:                                   Other Builtins.     (line    6)
52524* exp10:                                 Other Builtins.     (line    6)
52525* exp10f:                                Other Builtins.     (line    6)
52526* exp10l:                                Other Builtins.     (line    6)
52527* exp2:                                  Other Builtins.     (line    6)
52528* exp2f:                                 Other Builtins.     (line    6)
52529* exp2l:                                 Other Builtins.     (line    6)
52530* expf:                                  Other Builtins.     (line    6)
52531* expl:                                  Other Builtins.     (line    6)
52532* explicit register variables:           Explicit Reg Vars.  (line    6)
52533* expm1:                                 Other Builtins.     (line    6)
52534* expm1f:                                Other Builtins.     (line    6)
52535* expm1l:                                Other Builtins.     (line    6)
52536* expressions containing statements:     Statement Exprs.    (line    6)
52537* expressions, constructor:              Compound Literals.  (line    6)
52538* extended asm:                          Extended Asm.       (line    6)
52539* extensible constraints:                Simple Constraints. (line  163)
52540* extensions, ?::                        Conditionals.       (line    6)
52541* extensions, C language:                C Extensions.       (line    6)
52542* extensions, C++ language:              C++ Extensions.     (line    6)
52543* external declaration scope:            Incompatibilities.  (line   80)
52544* externally_visible function attribute: Function Attributes.
52545                                                             (line  382)
52546* F in constraint:                       Simple Constraints. (line   94)
52547* fabs:                                  Other Builtins.     (line    6)
52548* fabsf:                                 Other Builtins.     (line    6)
52549* fabsl:                                 Other Builtins.     (line    6)
52550* far function attribute:                Function Attributes.
52551                                                             (line  395)
52552* far function attribute, MIPS:          Function Attributes.
52553                                                             (line  924)
52554* far type attribute, MeP:               Type Attributes.    (line  349)
52555* far variable attribute, MeP:           Variable Attributes.
52556                                                             (line  485)
52557* fast_interrupt function attribute, M32C: Function Attributes.
52558                                                             (line  400)
52559* fast_interrupt function attribute, RX: Function Attributes.
52560                                                             (line  400)
52561* fastcall function attribute, x86-32:   Function Attributes.
52562                                                             (line  406)
52563* fatal signal:                          Bug Criteria.       (line    9)
52564* fdim:                                  Other Builtins.     (line    6)
52565* fdimf:                                 Other Builtins.     (line    6)
52566* fdiml:                                 Other Builtins.     (line    6)
52567* FDL, GNU Free Documentation License:   GNU Free Documentation License.
52568                                                             (line    6)
52569* ffs:                                   Other Builtins.     (line    6)
52570* file name suffix:                      Overall Options.    (line   14)
52571* file names:                            Link Options.       (line   10)
52572* fixed-point types:                     Fixed-Point.        (line    6)
52573* flatten function attribute:            Function Attributes.
52574                                                             (line  186)
52575* flexible array members:                Zero Length.        (line    6)
52576* float as function value type:          Incompatibilities.  (line  141)
52577* floating point precision:              Disappointments.    (line   68)
52578* floating-point precision:              Optimize Options.   (line 2043)
52579* floor:                                 Other Builtins.     (line    6)
52580* floorf:                                Other Builtins.     (line    6)
52581* floorl:                                Other Builtins.     (line    6)
52582* fma:                                   Other Builtins.     (line    6)
52583* fmaf:                                  Other Builtins.     (line    6)
52584* fmal:                                  Other Builtins.     (line    6)
52585* fmax:                                  Other Builtins.     (line    6)
52586* fmaxf:                                 Other Builtins.     (line    6)
52587* fmaxl:                                 Other Builtins.     (line    6)
52588* fmin:                                  Other Builtins.     (line    6)
52589* fminf:                                 Other Builtins.     (line    6)
52590* fminl:                                 Other Builtins.     (line    6)
52591* fmod:                                  Other Builtins.     (line    6)
52592* fmodf:                                 Other Builtins.     (line    6)
52593* fmodl:                                 Other Builtins.     (line    6)
52594* force_align_arg_pointer function attribute, x86: Function Attributes.
52595                                                             (line 1368)
52596* format function attribute:             Function Attributes.
52597                                                             (line  424)
52598* format_arg function attribute:         Function Attributes.
52599                                                             (line  490)
52600* Fortran:                               G++ and GCC.        (line    6)
52601* forwarder_section function attribute, Epiphany: Function Attributes.
52602                                                             (line  729)
52603* forwarding calls:                      Constructing Calls. (line    6)
52604* fprintf:                               Other Builtins.     (line    6)
52605* fprintf_unlocked:                      Other Builtins.     (line    6)
52606* fputs:                                 Other Builtins.     (line    6)
52607* fputs_unlocked:                        Other Builtins.     (line    6)
52608* FR30 Options:                          FR30 Options.       (line    6)
52609* freestanding environment:              Standards.          (line   13)
52610* freestanding implementation:           Standards.          (line   13)
52611* frexp:                                 Other Builtins.     (line    6)
52612* frexpf:                                Other Builtins.     (line    6)
52613* frexpl:                                Other Builtins.     (line    6)
52614* FRV Options:                           FRV Options.        (line    6)
52615* fscanf:                                Other Builtins.     (line    6)
52616* fscanf, and constant strings:          Incompatibilities.  (line   17)
52617* function addressability on the M32R/D: Function Attributes.
52618                                                             (line  978)
52619* function attributes:                   Function Attributes.
52620                                                             (line    6)
52621* function pointers, arithmetic:         Pointer Arith.      (line    6)
52622* function prototype declarations:       Function Prototypes.
52623                                                             (line    6)
52624* function versions:                     Function Multiversioning.
52625                                                             (line    6)
52626* function without prologue/epilogue code: Function Attributes.
52627                                                             (line 1040)
52628* function, size of pointer to:          Pointer Arith.      (line    6)
52629* function_vector function attribute, H8/300: Function Attributes.
52630                                                             (line  537)
52631* function_vector function attribute, M16C/M32C: Function Attributes.
52632                                                             (line  537)
52633* function_vector function attribute, SH: Function Attributes.
52634                                                             (line  537)
52635* functions in arbitrary sections:       Function Attributes.
52636                                                             (line    6)
52637* functions that are dynamically resolved: Function Attributes.
52638                                                             (line    6)
52639* functions that are passed arguments in registers on x86-32: Function Attributes.
52640                                                             (line    6)
52641* functions that behave like malloc:     Function Attributes.
52642                                                             (line    6)
52643* functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
52644                                                             (line 1051)
52645* functions that do not pop the argument stack on x86-32: Function Attributes.
52646                                                             (line    6)
52647* functions that do pop the argument stack on x86-32: Function Attributes.
52648                                                             (line  217)
52649* functions that have different compilation options on x86-32: Function Attributes.
52650                                                             (line    6)
52651* functions that have different optimization options: Function Attributes.
52652                                                             (line    6)
52653* functions that have no side effects:   Function Attributes.
52654                                                             (line    6)
52655* functions that never return:           Function Attributes.
52656                                                             (line    6)
52657* functions that pop the argument stack on x86-32: Function Attributes.
52658                                                             (line    6)
52659* functions that return more than once:  Function Attributes.
52660                                                             (line    6)
52661* functions with non-null pointer arguments: Function Attributes.
52662                                                             (line    6)
52663* functions with printf, scanf, strftime or strfmon style arguments: Function Attributes.
52664                                                             (line    6)
52665* g in constraint:                       Simple Constraints. (line  120)
52666* G in constraint:                       Simple Constraints. (line   98)
52667* g++:                                   Invoking G++.       (line   14)
52668* G++:                                   G++ and GCC.        (line   30)
52669* gamma:                                 Other Builtins.     (line    6)
52670* gamma_r:                               Other Builtins.     (line    6)
52671* gammaf:                                Other Builtins.     (line    6)
52672* gammaf_r:                              Other Builtins.     (line    6)
52673* gammal:                                Other Builtins.     (line    6)
52674* gammal_r:                              Other Builtins.     (line    6)
52675* GCC:                                   G++ and GCC.        (line    6)
52676* GCC command options:                   Invoking GCC.       (line    6)
52677* GCC_COLORS environment variable:       Language Independent Options.
52678                                                             (line   35)
52679* GCC_COMPARE_DEBUG:                     Environment Variables.
52680                                                             (line   52)
52681* GCC_EXEC_PREFIX:                       Environment Variables.
52682                                                             (line   57)
52683* gcc_struct type attribute, PowerPC:    Type Attributes.    (line  360)
52684* gcc_struct type attribute, x86:        Type Attributes.    (line  392)
52685* gcc_struct variable attribute, PowerPC: Variable Attributes.
52686                                                             (line  515)
52687* gcc_struct variable attribute, x86:    Variable Attributes.
52688                                                             (line  536)
52689* gcov:                                  Debugging Options.  (line  723)
52690* gettext:                               Other Builtins.     (line    6)
52691* global offset table:                   Code Gen Options.   (line  280)
52692* global register after longjmp:         Global Reg Vars.    (line   65)
52693* global register variables:             Global Reg Vars.    (line    6)
52694* GNAT:                                  G++ and GCC.        (line   30)
52695* GNU C Compiler:                        G++ and GCC.        (line    6)
52696* GNU Compiler Collection:               G++ and GCC.        (line    6)
52697* gnu_inline function attribute:         Function Attributes.
52698                                                             (line  136)
52699* Go:                                    G++ and GCC.        (line    6)
52700* goto with computed label:              Labels as Values.   (line    6)
52701* gprof:                                 Debugging Options.  (line  645)
52702* grouping options:                      Invoking GCC.       (line   26)
52703* H in constraint:                       Simple Constraints. (line   98)
52704* half-precision floating point:         Half-Precision.     (line    6)
52705* hardware models and configurations, specifying: Submodel Options.
52706                                                             (line    6)
52707* hex floats:                            Hex Floats.         (line    6)
52708* highlight, color, colour:              Language Independent Options.
52709                                                             (line   35)
52710* HK fixed-suffix:                       Fixed-Point.        (line    6)
52711* hk fixed-suffix:                       Fixed-Point.        (line    6)
52712* hosted environment <1>:                C Dialect Options.  (line  247)
52713* hosted environment:                    Standards.          (line   13)
52714* hosted implementation:                 Standards.          (line   13)
52715* hot function attribute:                Function Attributes.
52716                                                             (line 1276)
52717* hot label attribute:                   Label Attributes.   (line   36)
52718* hotpatch function attribute, S/390:    Function Attributes.
52719                                                             (line 1028)
52720* HPPA Options:                          HPPA Options.       (line    6)
52721* HR fixed-suffix:                       Fixed-Point.        (line    6)
52722* hr fixed-suffix:                       Fixed-Point.        (line    6)
52723* hypot:                                 Other Builtins.     (line    6)
52724* hypotf:                                Other Builtins.     (line    6)
52725* hypotl:                                Other Builtins.     (line    6)
52726* I in constraint:                       Simple Constraints. (line   81)
52727* i in constraint:                       Simple Constraints. (line   70)
52728* IA-64 Options:                         IA-64 Options.      (line    6)
52729* IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
52730                                                             (line    6)
52731* identifier names, dollar signs in:     Dollar Signs.       (line    6)
52732* identifiers, names in assembler code:  Asm Labels.         (line    6)
52733* ifunc function attribute:              Function Attributes.
52734                                                             (line  598)
52735* ilogb:                                 Other Builtins.     (line    6)
52736* ilogbf:                                Other Builtins.     (line    6)
52737* ilogbl:                                Other Builtins.     (line    6)
52738* imaxabs:                               Other Builtins.     (line    6)
52739* implementation-defined behavior, C language: C Implementation.
52740                                                             (line    6)
52741* implementation-defined behavior, C++ language: C++ Implementation.
52742                                                             (line    6)
52743* implied #pragma implementation:        C++ Interface.      (line   43)
52744* incompatibilities of GCC:              Incompatibilities.  (line    6)
52745* increment operators:                   Bug Criteria.       (line   17)
52746* index:                                 Other Builtins.     (line    6)
52747* indirect calls, ARC:                   Function Attributes.
52748                                                             (line  886)
52749* indirect calls, ARM:                   Function Attributes.
52750                                                             (line  886)
52751* indirect calls, Blackfin:              Function Attributes.
52752                                                             (line  910)
52753* indirect calls, Epiphany:              Function Attributes.
52754                                                             (line  886)
52755* indirect calls, MIPS:                  Function Attributes.
52756                                                             (line  924)
52757* indirect calls, PowerPC:               Function Attributes.
52758                                                             (line  910)
52759* init_priority variable attribute:      C++ Attributes.     (line   50)
52760* initializations in expressions:        Compound Literals.  (line    6)
52761* initializers with labeled elements:    Designated Inits.   (line    6)
52762* initializers, non-constant:            Initializers.       (line    6)
52763* inline assembly language:              Using Assembly Language with C.
52764                                                             (line    6)
52765* inline automatic for C++ member fns:   Inline.             (line   71)
52766* inline functions:                      Inline.             (line    6)
52767* inline functions, omission of:         Inline.             (line   51)
52768* inlining and C++ pragmas:              C++ Interface.      (line   57)
52769* installation trouble:                  Trouble.            (line    6)
52770* integrating function code:             Inline.             (line    6)
52771* interface and implementation headers, C++: C++ Interface.  (line    6)
52772* intermediate C version, nonexistent:   G++ and GCC.        (line   35)
52773* interrupt function attribute, ARC:     Function Attributes.
52774                                                             (line  638)
52775* interrupt function attribute, ARM:     Function Attributes.
52776                                                             (line  638)
52777* interrupt function attribute, AVR:     Function Attributes.
52778                                                             (line  638)
52779* interrupt function attribute, CR16:    Function Attributes.
52780                                                             (line  638)
52781* interrupt function attribute, Epiphany: Function Attributes.
52782                                                             (line  638)
52783* interrupt function attribute, M32C:    Function Attributes.
52784                                                             (line  638)
52785* interrupt function attribute, M32R/D:  Function Attributes.
52786                                                             (line  638)
52787* interrupt function attribute, m68k:    Function Attributes.
52788                                                             (line  638)
52789* interrupt function attribute, MeP:     Function Attributes.
52790                                                             (line  638)
52791* interrupt function attribute, MIPS:    Function Attributes.
52792                                                             (line  638)
52793* interrupt function attribute, MSP430:  Function Attributes.
52794                                                             (line  638)
52795* interrupt function attribute, NDS32:   Function Attributes.
52796                                                             (line  638)
52797* interrupt function attribute, RL78:    Function Attributes.
52798                                                             (line  638)
52799* interrupt function attribute, RX:      Function Attributes.
52800                                                             (line  638)
52801* interrupt function attribute, Visium:  Function Attributes.
52802                                                             (line  638)
52803* interrupt function attribute, Xstormy16: Function Attributes.
52804                                                             (line  638)
52805* interrupt_handler function attribute, Blackfin: Function Attributes.
52806                                                             (line  821)
52807* interrupt_handler function attribute, H8/300: Function Attributes.
52808                                                             (line  821)
52809* interrupt_handler function attribute, m68k: Function Attributes.
52810                                                             (line  821)
52811* interrupt_handler function attribute, SH: Function Attributes.
52812                                                             (line  821)
52813* interrupt_thread function attribute, fido: Function Attributes.
52814                                                             (line  828)
52815* introduction:                          Top.                (line    6)
52816* invalid assembly code:                 Bug Criteria.       (line   12)
52817* invalid input:                         Bug Criteria.       (line   42)
52818* invoking g++:                          Invoking G++.       (line   22)
52819* io variable attribute, AVR:            Variable Attributes.
52820                                                             (line  351)
52821* io variable attribute, MeP:            Variable Attributes.
52822                                                             (line  491)
52823* io_low variable attribute, AVR:        Variable Attributes.
52824                                                             (line  369)
52825* isalnum:                               Other Builtins.     (line    6)
52826* isalpha:                               Other Builtins.     (line    6)
52827* isascii:                               Other Builtins.     (line    6)
52828* isblank:                               Other Builtins.     (line    6)
52829* iscntrl:                               Other Builtins.     (line    6)
52830* isdigit:                               Other Builtins.     (line    6)
52831* isgraph:                               Other Builtins.     (line    6)
52832* islower:                               Other Builtins.     (line    6)
52833* ISO 9899:                              Standards.          (line   13)
52834* ISO C:                                 Standards.          (line   13)
52835* ISO C standard:                        Standards.          (line   13)
52836* ISO C11:                               Standards.          (line   13)
52837* ISO C1X:                               Standards.          (line   13)
52838* ISO C90:                               Standards.          (line   13)
52839* ISO C94:                               Standards.          (line   13)
52840* ISO C95:                               Standards.          (line   13)
52841* ISO C99:                               Standards.          (line   13)
52842* ISO C9X:                               Standards.          (line   13)
52843* ISO support:                           C Dialect Options.  (line   10)
52844* ISO/IEC 9899:                          Standards.          (line   13)
52845* isprint:                               Other Builtins.     (line    6)
52846* ispunct:                               Other Builtins.     (line    6)
52847* isr function attribute, ARM:           Function Attributes.
52848                                                             (line  836)
52849* isspace:                               Other Builtins.     (line    6)
52850* isupper:                               Other Builtins.     (line    6)
52851* iswalnum:                              Other Builtins.     (line    6)
52852* iswalpha:                              Other Builtins.     (line    6)
52853* iswblank:                              Other Builtins.     (line    6)
52854* iswcntrl:                              Other Builtins.     (line    6)
52855* iswdigit:                              Other Builtins.     (line    6)
52856* iswgraph:                              Other Builtins.     (line    6)
52857* iswlower:                              Other Builtins.     (line    6)
52858* iswprint:                              Other Builtins.     (line    6)
52859* iswpunct:                              Other Builtins.     (line    6)
52860* iswspace:                              Other Builtins.     (line    6)
52861* iswupper:                              Other Builtins.     (line    6)
52862* iswxdigit:                             Other Builtins.     (line    6)
52863* isxdigit:                              Other Builtins.     (line    6)
52864* j0:                                    Other Builtins.     (line    6)
52865* j0f:                                   Other Builtins.     (line    6)
52866* j0l:                                   Other Builtins.     (line    6)
52867* j1:                                    Other Builtins.     (line    6)
52868* j1f:                                   Other Builtins.     (line    6)
52869* j1l:                                   Other Builtins.     (line    6)
52870* Java:                                  G++ and GCC.        (line    6)
52871* java_interface type attribute:         C++ Attributes.     (line   70)
52872* jn:                                    Other Builtins.     (line    6)
52873* jnf:                                   Other Builtins.     (line    6)
52874* jnl:                                   Other Builtins.     (line    6)
52875* K fixed-suffix:                        Fixed-Point.        (line    6)
52876* k fixed-suffix:                        Fixed-Point.        (line    6)
52877* keep_interrupts_masked function attribute, MIPS: Function Attributes.
52878                                                             (line  751)
52879* keywords, alternate:                   Alternate Keywords. (line    6)
52880* known causes of trouble:               Trouble.            (line    6)
52881* kspisusp function attribute, Blackfin: Function Attributes.
52882                                                             (line  840)
52883* l1_data variable attribute, Blackfin:  Variable Attributes.
52884                                                             (line  390)
52885* l1_data_A variable attribute, Blackfin: Variable Attributes.
52886                                                             (line  390)
52887* l1_data_B variable attribute, Blackfin: Variable Attributes.
52888                                                             (line  390)
52889* l1_text function attribute, Blackfin:  Function Attributes.
52890                                                             (line  845)
52891* l2 function attribute, Blackfin:       Function Attributes.
52892                                                             (line  851)
52893* l2 variable attribute, Blackfin:       Variable Attributes.
52894                                                             (line  398)
52895* Label Attributes:                      Label Attributes.   (line    6)
52896* labeled elements in initializers:      Designated Inits.   (line    6)
52897* labels as values:                      Labels as Values.   (line    6)
52898* labs:                                  Other Builtins.     (line    6)
52899* LANG:                                  Environment Variables.
52900                                                             (line   21)
52901* language dialect options:              C Dialect Options.  (line    6)
52902* LC_ALL:                                Environment Variables.
52903                                                             (line   21)
52904* LC_CTYPE:                              Environment Variables.
52905                                                             (line   21)
52906* LC_MESSAGES:                           Environment Variables.
52907                                                             (line   21)
52908* ldexp:                                 Other Builtins.     (line    6)
52909* ldexpf:                                Other Builtins.     (line    6)
52910* ldexpl:                                Other Builtins.     (line    6)
52911* leaf function attribute:               Function Attributes.
52912                                                             (line  857)
52913* length-zero arrays:                    Zero Length.        (line    6)
52914* lgamma:                                Other Builtins.     (line    6)
52915* lgamma_r:                              Other Builtins.     (line    6)
52916* lgammaf:                               Other Builtins.     (line    6)
52917* lgammaf_r:                             Other Builtins.     (line    6)
52918* lgammal:                               Other Builtins.     (line    6)
52919* lgammal_r:                             Other Builtins.     (line    6)
52920* Libraries:                             Link Options.       (line   30)
52921* LIBRARY_PATH:                          Environment Variables.
52922                                                             (line   97)
52923* link options:                          Link Options.       (line    6)
52924* linker script:                         Link Options.       (line  242)
52925* LK fixed-suffix:                       Fixed-Point.        (line    6)
52926* lk fixed-suffix:                       Fixed-Point.        (line    6)
52927* LL integer suffix:                     Long Long.          (line    6)
52928* llabs:                                 Other Builtins.     (line    6)
52929* LLK fixed-suffix:                      Fixed-Point.        (line    6)
52930* llk fixed-suffix:                      Fixed-Point.        (line    6)
52931* LLR fixed-suffix:                      Fixed-Point.        (line    6)
52932* llr fixed-suffix:                      Fixed-Point.        (line    6)
52933* llrint:                                Other Builtins.     (line    6)
52934* llrintf:                               Other Builtins.     (line    6)
52935* llrintl:                               Other Builtins.     (line    6)
52936* llround:                               Other Builtins.     (line    6)
52937* llroundf:                              Other Builtins.     (line    6)
52938* llroundl:                              Other Builtins.     (line    6)
52939* LM32 options:                          LM32 Options.       (line    6)
52940* load address instruction:              Simple Constraints. (line  154)
52941* local labels:                          Local Labels.       (line    6)
52942* local variables in macros:             Typeof.             (line   46)
52943* local variables, specifying registers: Local Reg Vars.     (line    6)
52944* locale:                                Environment Variables.
52945                                                             (line   21)
52946* locale definition:                     Environment Variables.
52947                                                             (line  106)
52948* locus GCC_COLORS capability:           Language Independent Options.
52949                                                             (line   81)
52950* log:                                   Other Builtins.     (line    6)
52951* log10:                                 Other Builtins.     (line    6)
52952* log10f:                                Other Builtins.     (line    6)
52953* log10l:                                Other Builtins.     (line    6)
52954* log1p:                                 Other Builtins.     (line    6)
52955* log1pf:                                Other Builtins.     (line    6)
52956* log1pl:                                Other Builtins.     (line    6)
52957* log2:                                  Other Builtins.     (line    6)
52958* log2f:                                 Other Builtins.     (line    6)
52959* log2l:                                 Other Builtins.     (line    6)
52960* logb:                                  Other Builtins.     (line    6)
52961* logbf:                                 Other Builtins.     (line    6)
52962* logbl:                                 Other Builtins.     (line    6)
52963* logf:                                  Other Builtins.     (line    6)
52964* logl:                                  Other Builtins.     (line    6)
52965* long long data types:                  Long Long.          (line    6)
52966* long_call function attribute, ARC:     Function Attributes.
52967                                                             (line  886)
52968* long_call function attribute, ARM:     Function Attributes.
52969                                                             (line  886)
52970* long_call function attribute, Epiphany: Function Attributes.
52971                                                             (line  886)
52972* long_call function attribute, MIPS:    Function Attributes.
52973                                                             (line  924)
52974* longcall function attribute, Blackfin: Function Attributes.
52975                                                             (line  910)
52976* longcall function attribute, PowerPC:  Function Attributes.
52977                                                             (line  910)
52978* longjmp:                               Global Reg Vars.    (line   65)
52979* longjmp incompatibilities:             Incompatibilities.  (line   39)
52980* longjmp warnings:                      Warning Options.    (line  712)
52981* LR fixed-suffix:                       Fixed-Point.        (line    6)
52982* lr fixed-suffix:                       Fixed-Point.        (line    6)
52983* lrint:                                 Other Builtins.     (line    6)
52984* lrintf:                                Other Builtins.     (line    6)
52985* lrintl:                                Other Builtins.     (line    6)
52986* lround:                                Other Builtins.     (line    6)
52987* lroundf:                               Other Builtins.     (line    6)
52988* lroundl:                               Other Builtins.     (line    6)
52989* m in constraint:                       Simple Constraints. (line   17)
52990* M32C options:                          M32C Options.       (line    6)
52991* M32R/D options:                        M32R/D Options.     (line    6)
52992* M680x0 options:                        M680x0 Options.     (line    6)
52993* machine dependent options:             Submodel Options.   (line    6)
52994* machine specific constraints:          Machine Constraints.
52995                                                             (line    6)
52996* macro with variable arguments:         Variadic Macros.    (line    6)
52997* macros, inline alternative:            Inline.             (line    6)
52998* macros, local labels:                  Local Labels.       (line    6)
52999* macros, local variables in:            Typeof.             (line   46)
53000* macros, statements in expressions:     Statement Exprs.    (line    6)
53001* macros, types of arguments:            Typeof.             (line    6)
53002* make:                                  Preprocessor Options.
53003                                                             (line  185)
53004* malloc:                                Other Builtins.     (line    6)
53005* malloc function attribute:             Function Attributes.
53006                                                             (line  934)
53007* matching constraint:                   Simple Constraints. (line  139)
53008* may_alias type attribute:              Type Attributes.    (line  233)
53009* MCore options:                         MCore Options.      (line    6)
53010* medium_call function attribute, ARC:   Function Attributes.
53011                                                             (line  886)
53012* member fns, automatically inline:      Inline.             (line   71)
53013* memchr:                                Other Builtins.     (line    6)
53014* memcmp:                                Other Builtins.     (line    6)
53015* memcpy:                                Other Builtins.     (line    6)
53016* memory references in constraints:      Simple Constraints. (line   17)
53017* mempcpy:                               Other Builtins.     (line    6)
53018* memset:                                Other Builtins.     (line    6)
53019* MeP options:                           MeP Options.        (line    6)
53020* Mercury:                               G++ and GCC.        (line   23)
53021* message formatting:                    Language Independent Options.
53022                                                             (line    6)
53023* messages, warning:                     Warning Options.    (line    6)
53024* messages, warning and error:           Warnings and Errors.
53025                                                             (line    6)
53026* MicroBlaze Options:                    MicroBlaze Options. (line    6)
53027* micromips function attribute:          Function Attributes.
53028                                                             (line  962)
53029* middle-operands, omitted:              Conditionals.       (line    6)
53030* MIPS options:                          MIPS Options.       (line    6)
53031* mips16 function attribute, MIPS:       Function Attributes.
53032                                                             (line  947)
53033* misunderstandings in C++:              C++ Misunderstandings.
53034                                                             (line    6)
53035* mixed declarations and code:           Mixed Declarations. (line    6)
53036* mixing assembly language and C:        Using Assembly Language with C.
53037                                                             (line    6)
53038* mktemp, and constant strings:          Incompatibilities.  (line   13)
53039* MMIX Options:                          MMIX Options.       (line    6)
53040* MN10300 options:                       MN10300 Options.    (line    6)
53041* mode variable attribute:               Variable Attributes.
53042                                                             (line  135)
53043* model function attribute, M32R/D:      Function Attributes.
53044                                                             (line  978)
53045* model variable attribute, IA-64:       Variable Attributes.
53046                                                             (line  431)
53047* model-name variable attribute, M32R/D: Variable Attributes.
53048                                                             (line  446)
53049* modf:                                  Other Builtins.     (line    6)
53050* modff:                                 Other Builtins.     (line    6)
53051* modfl:                                 Other Builtins.     (line    6)
53052* modifiers in constraints:              Modifiers.          (line    6)
53053* Moxie Options:                         Moxie Options.      (line    6)
53054* ms_abi function attribute, x86:        Function Attributes.
53055                                                             (line  999)
53056* ms_hook_prologue function attribute, x86: Function Attributes.
53057                                                             (line 1022)
53058* ms_struct type attribute, PowerPC:     Type Attributes.    (line  360)
53059* ms_struct type attribute, x86:         Type Attributes.    (line  392)
53060* ms_struct variable attribute, PowerPC: Variable Attributes.
53061                                                             (line  515)
53062* ms_struct variable attribute, x86:     Variable Attributes.
53063                                                             (line  536)
53064* MSP430 Options:                        MSP430 Options.     (line    6)
53065* multiple alternative constraints:      Multi-Alternative.  (line    6)
53066* multiprecision arithmetic:             Long Long.          (line    6)
53067* n in constraint:                       Simple Constraints. (line   75)
53068* naked function attribute, ARM:         Function Attributes.
53069                                                             (line 1040)
53070* naked function attribute, AVR:         Function Attributes.
53071                                                             (line 1040)
53072* naked function attribute, MCORE:       Function Attributes.
53073                                                             (line 1040)
53074* naked function attribute, MSP430:      Function Attributes.
53075                                                             (line 1040)
53076* naked function attribute, NDS32:       Function Attributes.
53077                                                             (line 1040)
53078* naked function attribute, RL78:        Function Attributes.
53079                                                             (line 1040)
53080* naked function attribute, RX:          Function Attributes.
53081                                                             (line 1040)
53082* naked function attribute, SPU:         Function Attributes.
53083                                                             (line 1040)
53084* Named Address Spaces:                  Named Address Spaces.
53085                                                             (line    6)
53086* names used in assembler code:          Asm Labels.         (line    6)
53087* naming convention, implementation headers: C++ Interface.  (line   43)
53088* NDS32 Options:                         NDS32 Options.      (line    6)
53089* near function attribute, MeP:          Function Attributes.
53090                                                             (line 1051)
53091* near function attribute, MIPS:         Function Attributes.
53092                                                             (line  924)
53093* near type attribute, MeP:              Type Attributes.    (line  349)
53094* near variable attribute, MeP:          Variable Attributes.
53095                                                             (line  479)
53096* nearbyint:                             Other Builtins.     (line    6)
53097* nearbyintf:                            Other Builtins.     (line    6)
53098* nearbyintl:                            Other Builtins.     (line    6)
53099* nested function attribute, NDS32:      Function Attributes.
53100                                                             (line  779)
53101* nested functions:                      Nested Functions.   (line    6)
53102* nested_ready function attribute, NDS32: Function Attributes.
53103                                                             (line  785)
53104* nesting function attribute, Blackfin:  Function Attributes.
53105                                                             (line 1056)
53106* newlines (escaped):                    Escaped Newlines.   (line    6)
53107* nextafter:                             Other Builtins.     (line    6)
53108* nextafterf:                            Other Builtins.     (line    6)
53109* nextafterl:                            Other Builtins.     (line    6)
53110* nexttoward:                            Other Builtins.     (line    6)
53111* nexttowardf:                           Other Builtins.     (line    6)
53112* nexttowardl:                           Other Builtins.     (line    6)
53113* NFC:                                   Warning Options.    (line 1481)
53114* NFKC:                                  Warning Options.    (line 1481)
53115* Nios II options:                       Nios II Options.    (line    6)
53116* nmi function attribute, NDS32:         Function Attributes.
53117                                                             (line 1354)
53118* NMI handler functions on the Blackfin processor: Function Attributes.
53119                                                             (line 1061)
53120* nmi_handler function attribute, Blackfin: Function Attributes.
53121                                                             (line 1061)
53122* no_icf function attribute:             Function Attributes.
53123                                                             (line 1106)
53124* no_instrument_function function attribute: Function Attributes.
53125                                                             (line 1073)
53126* no_reorder function attribute:         Function Attributes.
53127                                                             (line 1134)
53128* no_sanitize_address function attribute: Function Attributes.
53129                                                             (line 1303)
53130* no_sanitize_thread function attribute: Function Attributes.
53131                                                             (line 1311)
53132* no_sanitize_undefined function attribute: Function Attributes.
53133                                                             (line 1316)
53134* no_split_stack function attribute:     Function Attributes.
53135                                                             (line 1078)
53136* noclone function attribute:            Function Attributes.
53137                                                             (line 1100)
53138* nocommon variable attribute:           Variable Attributes.
53139                                                             (line  106)
53140* nocompression function attribute, MIPS: Function Attributes.
53141                                                             (line 1067)
53142* noinline function attribute:           Function Attributes.
53143                                                             (line 1089)
53144* nomicromips function attribute:        Function Attributes.
53145                                                             (line  962)
53146* nomips16 function attribute, MIPS:     Function Attributes.
53147                                                             (line  947)
53148* non-constant initializers:             Initializers.       (line    6)
53149* non-static inline function:            Inline.             (line   85)
53150* nonnull function attribute:            Function Attributes.
53151                                                             (line 1110)
53152* noreturn function attribute:           Function Attributes.
53153                                                             (line 1152)
53154* nosave_low_regs function attribute, SH: Function Attributes.
53155                                                             (line 1190)
53156* not_nested function attribute, NDS32:  Function Attributes.
53157                                                             (line  782)
53158* note GCC_COLORS capability:            Language Independent Options.
53159                                                             (line   75)
53160* nothrow function attribute:            Function Attributes.
53161                                                             (line 1183)
53162* notshared type attribute, ARM:         Type Attributes.    (line  328)
53163* Nvidia PTX options:                    Nvidia PTX Options. (line    6)
53164* nvptx options:                         Nvidia PTX Options. (line    6)
53165* o in constraint:                       Simple Constraints. (line   23)
53166* OBJC_INCLUDE_PATH:                     Environment Variables.
53167                                                             (line  132)
53168* Objective-C <1>:                       Standards.          (line  163)
53169* Objective-C:                           G++ and GCC.        (line    6)
53170* Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options.
53171                                                             (line    6)
53172* Objective-C++ <1>:                     Standards.          (line  163)
53173* Objective-C++:                         G++ and GCC.        (line    6)
53174* offsettable address:                   Simple Constraints. (line   23)
53175* old-style function definitions:        Function Prototypes.
53176                                                             (line    6)
53177* omitted middle-operands:               Conditionals.       (line    6)
53178* open coding:                           Inline.             (line    6)
53179* OpenACC accelerator programming:       C Dialect Options.  (line  264)
53180* OpenMP parallel:                       C Dialect Options.  (line  276)
53181* OpenMP SIMD:                           C Dialect Options.  (line  284)
53182* operand constraints, asm:              Constraints.        (line    6)
53183* optimize function attribute:           Function Attributes.
53184                                                             (line 1196)
53185* optimize options:                      Optimize Options.   (line    6)
53186* options to control diagnostics formatting: Language Independent Options.
53187                                                             (line    6)
53188* options to control warnings:           Warning Options.    (line    6)
53189* options, C++:                          C++ Dialect Options.
53190                                                             (line    6)
53191* options, code generation:              Code Gen Options.   (line    6)
53192* options, debugging:                    Debugging Options.  (line    6)
53193* options, dialect:                      C Dialect Options.  (line    6)
53194* options, directory search:             Directory Options.  (line    6)
53195* options, GCC command:                  Invoking GCC.       (line    6)
53196* options, grouping:                     Invoking GCC.       (line   26)
53197* options, linking:                      Link Options.       (line    6)
53198* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
53199                                                             (line    6)
53200* options, optimization:                 Optimize Options.   (line    6)
53201* options, order:                        Invoking GCC.       (line   30)
53202* options, preprocessor:                 Preprocessor Options.
53203                                                             (line    6)
53204* order of evaluation, side effects:     Non-bugs.           (line  196)
53205* order of options:                      Invoking GCC.       (line   30)
53206* OS_main function attribute, AVR:       Function Attributes.
53207                                                             (line 1214)
53208* OS_task function attribute, AVR:       Function Attributes.
53209                                                             (line 1214)
53210* other register constraints:            Simple Constraints. (line  163)
53211* output file option:                    Overall Options.    (line  191)
53212* overloaded virtual function, warning:  C++ Dialect Options.
53213                                                             (line  682)
53214* p in constraint:                       Simple Constraints. (line  154)
53215* packed type attribute:                 Type Attributes.    (line  108)
53216* packed variable attribute:             Variable Attributes.
53217                                                             (line  146)
53218* parameter forward declaration:         Variable Length.    (line   68)
53219* partial_save function attribute, NDS32: Function Attributes.
53220                                                             (line  795)
53221* Pascal:                                G++ and GCC.        (line   23)
53222* pcs function attribute, ARM:           Function Attributes.
53223                                                             (line 1239)
53224* PDP-11 Options:                        PDP-11 Options.     (line    6)
53225* PIC:                                   Code Gen Options.   (line  280)
53226* picoChip options:                      picoChip Options.   (line    6)
53227* pmf:                                   Bound member functions.
53228                                                             (line    6)
53229* pointer arguments:                     Function Attributes.
53230                                                             (line  228)
53231* Pointer Bounds Checker attributes <1>: Type Attributes.    (line  295)
53232* Pointer Bounds Checker attributes:     Function Attributes.
53233                                                             (line 1322)
53234* Pointer Bounds Checker builtins:       Pointer Bounds Checker builtins.
53235                                                             (line    6)
53236* Pointer Bounds Checker options:        Debugging Options.  (line  388)
53237* pointer to member function:            Bound member functions.
53238                                                             (line    6)
53239* pointers to arrays:                    Pointers to Arrays. (line    6)
53240* portions of temporary objects, pointers to: Temporaries.   (line    6)
53241* pow:                                   Other Builtins.     (line    6)
53242* pow10:                                 Other Builtins.     (line    6)
53243* pow10f:                                Other Builtins.     (line    6)
53244* pow10l:                                Other Builtins.     (line    6)
53245* PowerPC options:                       PowerPC Options.    (line    6)
53246* powf:                                  Other Builtins.     (line    6)
53247* powl:                                  Other Builtins.     (line    6)
53248* pragma GCC ivdep:                      Loop-Specific Pragmas.
53249                                                             (line    7)
53250* pragma GCC optimize:                   Function Specific Option Pragmas.
53251                                                             (line   19)
53252* pragma GCC pop_options:                Function Specific Option Pragmas.
53253                                                             (line   29)
53254* pragma GCC push_options:               Function Specific Option Pragmas.
53255                                                             (line   29)
53256* pragma GCC reset_options:              Function Specific Option Pragmas.
53257                                                             (line   36)
53258* pragma GCC target:                     Function Specific Option Pragmas.
53259                                                             (line    7)
53260* pragma, address:                       M32C Pragmas.       (line   15)
53261* pragma, align:                         Solaris Pragmas.    (line   11)
53262* pragma, call:                          MeP Pragmas.        (line   48)
53263* pragma, coprocessor available:         MeP Pragmas.        (line   13)
53264* pragma, coprocessor call_saved:        MeP Pragmas.        (line   20)
53265* pragma, coprocessor subclass:          MeP Pragmas.        (line   28)
53266* pragma, custom io_volatile:            MeP Pragmas.        (line    7)
53267* pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
53268* pragma, disinterrupt:                  MeP Pragmas.        (line   38)
53269* pragma, fini:                          Solaris Pragmas.    (line   19)
53270* pragma, init:                          Solaris Pragmas.    (line   24)
53271* pragma, long_calls:                    ARM Pragmas.        (line   11)
53272* pragma, long_calls_off:                ARM Pragmas.        (line   17)
53273* pragma, longcall:                      RS/6000 and PowerPC Pragmas.
53274                                                             (line   14)
53275* pragma, mark:                          Darwin Pragmas.     (line   11)
53276* pragma, memregs:                       M32C Pragmas.       (line    7)
53277* pragma, no_long_calls:                 ARM Pragmas.        (line   14)
53278* pragma, options align:                 Darwin Pragmas.     (line   14)
53279* pragma, pop_macro:                     Push/Pop Macro Pragmas.
53280                                                             (line   15)
53281* pragma, push_macro:                    Push/Pop Macro Pragmas.
53282                                                             (line   11)
53283* pragma, reason for not using:          Function Attributes.
53284                                                             (line 2049)
53285* pragma, redefine_extname:              Symbol-Renaming Pragmas.
53286                                                             (line   13)
53287* pragma, segment:                       Darwin Pragmas.     (line   21)
53288* pragma, unused:                        Darwin Pragmas.     (line   24)
53289* pragma, visibility:                    Visibility Pragmas. (line    8)
53290* pragma, weak:                          Weak Pragmas.       (line   10)
53291* pragmas:                               Pragmas.            (line    6)
53292* pragmas in C++, effect on inlining:    C++ Interface.      (line   57)
53293* pragmas, interface and implementation: C++ Interface.      (line    6)
53294* pragmas, warning of unknown:           Warning Options.    (line  729)
53295* precompiled headers:                   Precompiled Headers.
53296                                                             (line    6)
53297* preprocessing numbers:                 Incompatibilities.  (line  173)
53298* preprocessing tokens:                  Incompatibilities.  (line  173)
53299* preprocessor options:                  Preprocessor Options.
53300                                                             (line    6)
53301* printf:                                Other Builtins.     (line    6)
53302* printf_unlocked:                       Other Builtins.     (line    6)
53303* prof:                                  Debugging Options.  (line  639)
53304* progmem variable attribute, AVR:       Variable Attributes.
53305                                                             (line  319)
53306* promotion of formal parameters:        Function Prototypes.
53307                                                             (line    6)
53308* pure function attribute:               Function Attributes.
53309                                                             (line 1257)
53310* push address instruction:              Simple Constraints. (line  154)
53311* putchar:                               Other Builtins.     (line    6)
53312* puts:                                  Other Builtins.     (line    6)
53313* Q floating point suffix:               Floating Types.     (line    6)
53314* q floating point suffix:               Floating Types.     (line    6)
53315* qsort, and global register variables:  Global Reg Vars.    (line   41)
53316* question mark:                         Multi-Alternative.  (line   27)
53317* quote GCC_COLORS capability:           Language Independent Options.
53318                                                             (line   85)
53319* R fixed-suffix:                        Fixed-Point.        (line    6)
53320* r fixed-suffix:                        Fixed-Point.        (line    6)
53321* r in constraint:                       Simple Constraints. (line   66)
53322* RAMPD:                                 AVR Options.        (line  358)
53323* RAMPX:                                 AVR Options.        (line  358)
53324* RAMPY:                                 AVR Options.        (line  358)
53325* RAMPZ:                                 AVR Options.        (line  358)
53326* ranges in case statements:             Case Ranges.        (line    6)
53327* read-only strings:                     Incompatibilities.  (line    9)
53328* reentrant function attribute, MSP430:  Function Attributes.
53329                                                             (line  697)
53330* register variable after longjmp:       Global Reg Vars.    (line   65)
53331* registers for local variables:         Local Reg Vars.     (line    6)
53332* registers in constraints:              Simple Constraints. (line   66)
53333* registers, global allocation:          Explicit Reg Vars.  (line    6)
53334* registers, global variables in:        Global Reg Vars.    (line    6)
53335* regparm function attribute, x86:       Function Attributes.
53336                                                             (line 1332)
53337* relocation truncated to fit (ColdFire): M680x0 Options.    (line  329)
53338* relocation truncated to fit (MIPS):    MIPS Options.       (line  239)
53339* remainder:                             Other Builtins.     (line    6)
53340* remainderf:                            Other Builtins.     (line    6)
53341* remainderl:                            Other Builtins.     (line    6)
53342* remquo:                                Other Builtins.     (line    6)
53343* remquof:                               Other Builtins.     (line    6)
53344* remquol:                               Other Builtins.     (line    6)
53345* renesas function attribute, SH:        Function Attributes.
53346                                                             (line 1376)
53347* reordering, warning:                   C++ Dialect Options.
53348                                                             (line  598)
53349* reporting bugs:                        Bugs.               (line    6)
53350* resbank function attribute, SH:        Function Attributes.
53351                                                             (line 1380)
53352* reset function attribute, NDS32:       Function Attributes.
53353                                                             (line 1349)
53354* reset handler functions:               Function Attributes.
53355                                                             (line 1349)
53356* rest argument (in macro):              Variadic Macros.    (line    6)
53357* restricted pointers:                   Restricted Pointers.
53358                                                             (line    6)
53359* restricted references:                 Restricted Pointers.
53360                                                             (line    6)
53361* restricted this pointer:               Restricted Pointers.
53362                                                             (line    6)
53363* returns_nonnull function attribute:    Function Attributes.
53364                                                             (line 1142)
53365* returns_twice function attribute:      Function Attributes.
53366                                                             (line 1394)
53367* rindex:                                Other Builtins.     (line    6)
53368* rint:                                  Other Builtins.     (line    6)
53369* rintf:                                 Other Builtins.     (line    6)
53370* rintl:                                 Other Builtins.     (line    6)
53371* RL78 Options:                          RL78 Options.       (line    6)
53372* round:                                 Other Builtins.     (line    6)
53373* roundf:                                Other Builtins.     (line    6)
53374* roundl:                                Other Builtins.     (line    6)
53375* RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
53376                                                             (line    6)
53377* RTTI:                                  Vague Linkage.      (line   42)
53378* run-time options:                      Code Gen Options.   (line    6)
53379* RX Options:                            RX Options.         (line    6)
53380* s in constraint:                       Simple Constraints. (line  102)
53381* S/390 and zSeries Options:             S/390 and zSeries Options.
53382                                                             (line    6)
53383* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
53384                                                             (line 1403)
53385* save_all function attribute, NDS32:    Function Attributes.
53386                                                             (line  791)
53387* save_volatiles function attribute, MicroBlaze: Function Attributes.
53388                                                             (line 1408)
53389* saveall function attribute, Blackfin:  Function Attributes.
53390                                                             (line 1403)
53391* saveall function attribute, H8/300:    Function Attributes.
53392                                                             (line 1403)
53393* scalb:                                 Other Builtins.     (line    6)
53394* scalbf:                                Other Builtins.     (line    6)
53395* scalbl:                                Other Builtins.     (line    6)
53396* scalbln:                               Other Builtins.     (line    6)
53397* scalblnf:                              Other Builtins.     (line    6)
53398* scalbn:                                Other Builtins.     (line    6)
53399* scalbnf:                               Other Builtins.     (line    6)
53400* scanf, and constant strings:           Incompatibilities.  (line   17)
53401* scanfnl:                               Other Builtins.     (line    6)
53402* scope of a variable length array:      Variable Length.    (line   22)
53403* scope of declaration:                  Disappointments.    (line   21)
53404* scope of external declarations:        Incompatibilities.  (line   80)
53405* Score Options:                         Score Options.      (line    6)
53406* search path:                           Directory Options.  (line    6)
53407* section function attribute:            Function Attributes.
53408                                                             (line 1425)
53409* section variable attribute:            Variable Attributes.
53410                                                             (line  167)
53411* selectany variable attribute:          Variable Attributes.
53412                                                             (line  283)
53413* sentinel function attribute:           Function Attributes.
53414                                                             (line 1441)
53415* setjmp:                                Global Reg Vars.    (line   65)
53416* setjmp incompatibilities:              Incompatibilities.  (line   39)
53417* shared strings:                        Incompatibilities.  (line    9)
53418* shared variable attribute:             Variable Attributes.
53419                                                             (line  212)
53420* short_call function attribute, ARC:    Function Attributes.
53421                                                             (line  886)
53422* short_call function attribute, ARM:    Function Attributes.
53423                                                             (line  886)
53424* short_call function attribute, Epiphany: Function Attributes.
53425                                                             (line  886)
53426* shortcall function attribute, Blackfin: Function Attributes.
53427                                                             (line  910)
53428* shortcall function attribute, PowerPC: Function Attributes.
53429                                                             (line  910)
53430* side effect in ?::                     Conditionals.       (line   20)
53431* side effects, macro argument:          Statement Exprs.    (line   35)
53432* side effects, order of evaluation:     Non-bugs.           (line  196)
53433* signal function attribute, AVR:        Function Attributes.
53434                                                             (line 1472)
53435* signbit:                               Other Builtins.     (line    6)
53436* signbitd128:                           Other Builtins.     (line    6)
53437* signbitd32:                            Other Builtins.     (line    6)
53438* signbitd64:                            Other Builtins.     (line    6)
53439* signbitf:                              Other Builtins.     (line    6)
53440* signbitl:                              Other Builtins.     (line    6)
53441* signed and unsigned values, comparison warning: Warning Options.
53442                                                             (line 1299)
53443* significand:                           Other Builtins.     (line    6)
53444* significandf:                          Other Builtins.     (line    6)
53445* significandl:                          Other Builtins.     (line    6)
53446* SIMD:                                  C Dialect Options.  (line  284)
53447* simple constraints:                    Simple Constraints. (line    6)
53448* sin:                                   Other Builtins.     (line    6)
53449* sincos:                                Other Builtins.     (line    6)
53450* sincosf:                               Other Builtins.     (line    6)
53451* sincosl:                               Other Builtins.     (line    6)
53452* sinf:                                  Other Builtins.     (line    6)
53453* sinh:                                  Other Builtins.     (line    6)
53454* sinhf:                                 Other Builtins.     (line    6)
53455* sinhl:                                 Other Builtins.     (line    6)
53456* sinl:                                  Other Builtins.     (line    6)
53457* sizeof:                                Typeof.             (line    6)
53458* smaller data references <1>:           Nios II Options.    (line    9)
53459* smaller data references:               M32R/D Options.     (line   57)
53460* smaller data references (PowerPC):     RS/6000 and PowerPC Options.
53461                                                             (line  770)
53462* snprintf:                              Other Builtins.     (line    6)
53463* Solaris 2 options:                     Solaris 2 Options.  (line    6)
53464* sp_switch function attribute, SH:      Function Attributes.
53465                                                             (line 1490)
53466* SPARC options:                         SPARC Options.      (line    6)
53467* Spec Files:                            Spec Files.         (line    6)
53468* specified registers:                   Explicit Reg Vars.  (line    6)
53469* specifying compiler version and target machine: Target Options.
53470                                                             (line    6)
53471* specifying hardware config:            Submodel Options.   (line    6)
53472* specifying machine version:            Target Options.     (line    6)
53473* specifying registers for local variables: Local Reg Vars.  (line    6)
53474* speed of compilation:                  Precompiled Headers.
53475                                                             (line    6)
53476* sprintf:                               Other Builtins.     (line    6)
53477* SPU options:                           SPU Options.        (line    6)
53478* spu_vector type attribute, SPU:        Type Attributes.    (line  379)
53479* spu_vector variable attribute, SPU:    Variable Attributes.
53480                                                             (line  524)
53481* sqrt:                                  Other Builtins.     (line    6)
53482* sqrtf:                                 Other Builtins.     (line    6)
53483* sqrtl:                                 Other Builtins.     (line    6)
53484* sscanf:                                Other Builtins.     (line    6)
53485* sscanf, and constant strings:          Incompatibilities.  (line   17)
53486* sseregparm function attribute, x86:    Function Attributes.
53487                                                             (line 1361)
53488* stack_protect function attribute:      Function Attributes.
53489                                                             (line 1084)
53490* statements inside expressions:         Statement Exprs.    (line    6)
53491* static data in C++, declaring and defining: Static Definitions.
53492                                                             (line    6)
53493* stdcall function attribute, x86-32:    Function Attributes.
53494                                                             (line 1500)
53495* stpcpy:                                Other Builtins.     (line    6)
53496* stpncpy:                               Other Builtins.     (line    6)
53497* strcasecmp:                            Other Builtins.     (line    6)
53498* strcat:                                Other Builtins.     (line    6)
53499* strchr:                                Other Builtins.     (line    6)
53500* strcmp:                                Other Builtins.     (line    6)
53501* strcpy:                                Other Builtins.     (line    6)
53502* strcspn:                               Other Builtins.     (line    6)
53503* strdup:                                Other Builtins.     (line    6)
53504* strfmon:                               Other Builtins.     (line    6)
53505* strftime:                              Other Builtins.     (line    6)
53506* string constants:                      Incompatibilities.  (line    9)
53507* strlen:                                Other Builtins.     (line    6)
53508* strncasecmp:                           Other Builtins.     (line    6)
53509* strncat:                               Other Builtins.     (line    6)
53510* strncmp:                               Other Builtins.     (line    6)
53511* strncpy:                               Other Builtins.     (line    6)
53512* strndup:                               Other Builtins.     (line    6)
53513* strpbrk:                               Other Builtins.     (line    6)
53514* strrchr:                               Other Builtins.     (line    6)
53515* strspn:                                Other Builtins.     (line    6)
53516* strstr:                                Other Builtins.     (line    6)
53517* struct:                                Unnamed Fields.     (line    6)
53518* struct __htm_tdb:                      S/390 System z Built-in Functions.
53519                                                             (line   54)
53520* structures:                            Incompatibilities.  (line  146)
53521* structures, constructor expression:    Compound Literals.  (line    6)
53522* submodel options:                      Submodel Options.   (line    6)
53523* subscripting:                          Subscripting.       (line    6)
53524* subscripting and function values:      Subscripting.       (line    6)
53525* suffixes for C++ source:               Invoking G++.       (line    6)
53526* SUNPRO_DEPENDENCIES:                   Environment Variables.
53527                                                             (line  172)
53528* suppressing warnings:                  Warning Options.    (line    6)
53529* surprises in C++:                      C++ Misunderstandings.
53530                                                             (line    6)
53531* syntax checking:                       Warning Options.    (line   13)
53532* syscall_linkage function attribute, IA-64: Function Attributes.
53533                                                             (line 1505)
53534* system headers, warnings from:         Warning Options.    (line  949)
53535* sysv_abi function attribute, x86:      Function Attributes.
53536                                                             (line  999)
53537* tan:                                   Other Builtins.     (line    6)
53538* tanf:                                  Other Builtins.     (line    6)
53539* tanh:                                  Other Builtins.     (line    6)
53540* tanhf:                                 Other Builtins.     (line    6)
53541* tanhl:                                 Other Builtins.     (line    6)
53542* tanl:                                  Other Builtins.     (line    6)
53543* target function attribute:             Function Attributes.
53544                                                             (line 1512)
53545* target machine, specifying:            Target Options.     (line    6)
53546* target options:                        Target Options.     (line    6)
53547* target("abm") function attribute, x86: Function Attributes.
53548                                                             (line 1545)
53549* target("aes") function attribute, x86: Function Attributes.
53550                                                             (line 1550)
53551* target("align-stringops") function attribute, x86: Function Attributes.
53552                                                             (line 1644)
53553* target("altivec") function attribute, PowerPC: Function Attributes.
53554                                                             (line 1670)
53555* target("arch=ARCH") function attribute, x86: Function Attributes.
53556                                                             (line 1653)
53557* target("avoid-indexed-addresses") function attribute, PowerPC: Function Attributes.
53558                                                             (line 1791)
53559* target("cld") function attribute, x86: Function Attributes.
53560                                                             (line 1615)
53561* target("cmpb") function attribute, PowerPC: Function Attributes.
53562                                                             (line 1676)
53563* target("cpu=CPU") function attribute, PowerPC: Function Attributes.
53564                                                             (line 1806)
53565* target("custom-fpu-cfg=NAME") function attribute, Nios II: Function Attributes.
53566                                                             (line 1832)
53567* target("custom-INSN=N") function attribute, Nios II: Function Attributes.
53568                                                             (line 1823)
53569* target("default") function attribute, x86: Function Attributes.
53570                                                             (line 1553)
53571* target("dlmzb") function attribute, PowerPC: Function Attributes.
53572                                                             (line 1682)
53573* target("fancy-math-387") function attribute, x86: Function Attributes.
53574                                                             (line 1619)
53575* target("fma4") function attribute, x86: Function Attributes.
53576                                                             (line 1599)
53577* target("fpmath=FPMATH") function attribute, x86: Function Attributes.
53578                                                             (line 1661)
53579* target("fprnd") function attribute, PowerPC: Function Attributes.
53580                                                             (line 1689)
53581* target("friz") function attribute, PowerPC: Function Attributes.
53582                                                             (line 1782)
53583* target("fused-madd") function attribute, x86: Function Attributes.
53584                                                             (line 1624)
53585* target("hard-dfp") function attribute, PowerPC: Function Attributes.
53586                                                             (line 1695)
53587* target("ieee-fp") function attribute, x86: Function Attributes.
53588                                                             (line 1629)
53589* target("inline-all-stringops") function attribute, x86: Function Attributes.
53590                                                             (line 1634)
53591* target("inline-stringops-dynamically") function attribute, x86: Function Attributes.
53592                                                             (line 1638)
53593* target("isel") function attribute, PowerPC: Function Attributes.
53594                                                             (line 1701)
53595* target("longcall") function attribute, PowerPC: Function Attributes.
53596                                                             (line 1801)
53597* target("lwp") function attribute, x86: Function Attributes.
53598                                                             (line 1607)
53599* target("mfcrf") function attribute, PowerPC: Function Attributes.
53600                                                             (line 1705)
53601* target("mfpgpr") function attribute, PowerPC: Function Attributes.
53602                                                             (line 1712)
53603* target("mmx") function attribute, x86: Function Attributes.
53604                                                             (line 1558)
53605* target("mulhw") function attribute, PowerPC: Function Attributes.
53606                                                             (line 1719)
53607* target("multiple") function attribute, PowerPC: Function Attributes.
53608                                                             (line 1726)
53609* target("no-custom-INSN") function attribute, Nios II: Function Attributes.
53610                                                             (line 1823)
53611* target("paired") function attribute, PowerPC: Function Attributes.
53612                                                             (line 1796)
53613* target("pclmul") function attribute, x86: Function Attributes.
53614                                                             (line 1562)
53615* target("popcnt") function attribute, x86: Function Attributes.
53616                                                             (line 1566)
53617* target("popcntb") function attribute, PowerPC: Function Attributes.
53618                                                             (line 1737)
53619* target("popcntd") function attribute, PowerPC: Function Attributes.
53620                                                             (line 1744)
53621* target("powerpc-gfxopt") function attribute, PowerPC: Function Attributes.
53622                                                             (line 1750)
53623* target("powerpc-gpopt") function attribute, PowerPC: Function Attributes.
53624                                                             (line 1756)
53625* target("recip") function attribute, x86: Function Attributes.
53626                                                             (line 1648)
53627* target("recip-precision") function attribute, PowerPC: Function Attributes.
53628                                                             (line 1762)
53629* target("sse") function attribute, x86: Function Attributes.
53630                                                             (line 1570)
53631* target("sse2") function attribute, x86: Function Attributes.
53632                                                             (line 1574)
53633* target("sse3") function attribute, x86: Function Attributes.
53634                                                             (line 1578)
53635* target("sse4") function attribute, x86: Function Attributes.
53636                                                             (line 1582)
53637* target("sse4.1") function attribute, x86: Function Attributes.
53638                                                             (line 1587)
53639* target("sse4.2") function attribute, x86: Function Attributes.
53640                                                             (line 1591)
53641* target("sse4a") function attribute, x86: Function Attributes.
53642                                                             (line 1595)
53643* target("ssse3") function attribute, x86: Function Attributes.
53644                                                             (line 1611)
53645* target("string") function attribute, PowerPC: Function Attributes.
53646                                                             (line 1768)
53647* target("tune=TUNE") function attribute, PowerPC: Function Attributes.
53648                                                             (line 1813)
53649* target("tune=TUNE") function attribute, x86: Function Attributes.
53650                                                             (line 1657)
53651* target("update") function attribute, PowerPC: Function Attributes.
53652                                                             (line 1731)
53653* target("vsx") function attribute, PowerPC: Function Attributes.
53654                                                             (line 1774)
53655* target("xop") function attribute, x86: Function Attributes.
53656                                                             (line 1603)
53657* TC1:                                   Standards.          (line   13)
53658* TC2:                                   Standards.          (line   13)
53659* TC3:                                   Standards.          (line   13)
53660* Technical Corrigenda:                  Standards.          (line   13)
53661* Technical Corrigendum 1:               Standards.          (line   13)
53662* Technical Corrigendum 2:               Standards.          (line   13)
53663* Technical Corrigendum 3:               Standards.          (line   13)
53664* template instantiation:                Template Instantiation.
53665                                                             (line    6)
53666* temporaries, lifetime of:              Temporaries.        (line    6)
53667* tgamma:                                Other Builtins.     (line    6)
53668* tgammaf:                               Other Builtins.     (line    6)
53669* tgammal:                               Other Builtins.     (line    6)
53670* thiscall function attribute, x86-32:   Function Attributes.
53671                                                             (line  414)
53672* Thread-Local Storage:                  Thread-Local.       (line    6)
53673* thunks:                                Nested Functions.   (line    6)
53674* TILE-Gx options:                       TILE-Gx Options.    (line    6)
53675* TILEPro options:                       TILEPro Options.    (line    6)
53676* tiny data section on the H8/300H and H8S: Variable Attributes.
53677                                                             (line  418)
53678* tiny type attribute, MeP:              Type Attributes.    (line  349)
53679* tiny variable attribute, MeP:          Variable Attributes.
53680                                                             (line  475)
53681* tiny_data variable attribute, H8/300:  Variable Attributes.
53682                                                             (line  418)
53683* TLS:                                   Thread-Local.       (line    6)
53684* tls_model variable attribute:          Variable Attributes.
53685                                                             (line  236)
53686* TMPDIR:                                Environment Variables.
53687                                                             (line   45)
53688* toascii:                               Other Builtins.     (line    6)
53689* tolower:                               Other Builtins.     (line    6)
53690* toupper:                               Other Builtins.     (line    6)
53691* towlower:                              Other Builtins.     (line    6)
53692* towupper:                              Other Builtins.     (line    6)
53693* traditional C language:                C Dialect Options.  (line  344)
53694* transparent_union type attribute:      Type Attributes.    (line  143)
53695* trap_exit function attribute, SH:      Function Attributes.
53696                                                             (line 1844)
53697* trapa_handler function attribute, SH:  Function Attributes.
53698                                                             (line 1849)
53699* trunc:                                 Other Builtins.     (line    6)
53700* truncf:                                Other Builtins.     (line    6)
53701* truncl:                                Other Builtins.     (line    6)
53702* two-stage name lookup:                 Name lookup.        (line    6)
53703* type alignment:                        Alignment.          (line    6)
53704* type attributes:                       Type Attributes.    (line    6)
53705* type_info:                             Vague Linkage.      (line   42)
53706* typedef names as function parameters:  Incompatibilities.  (line   97)
53707* typeof:                                Typeof.             (line    6)
53708* UHK fixed-suffix:                      Fixed-Point.        (line    6)
53709* uhk fixed-suffix:                      Fixed-Point.        (line    6)
53710* UHR fixed-suffix:                      Fixed-Point.        (line    6)
53711* uhr fixed-suffix:                      Fixed-Point.        (line    6)
53712* UK fixed-suffix:                       Fixed-Point.        (line    6)
53713* uk fixed-suffix:                       Fixed-Point.        (line    6)
53714* ULK fixed-suffix:                      Fixed-Point.        (line    6)
53715* ulk fixed-suffix:                      Fixed-Point.        (line    6)
53716* ULL integer suffix:                    Long Long.          (line    6)
53717* ULLK fixed-suffix:                     Fixed-Point.        (line    6)
53718* ullk fixed-suffix:                     Fixed-Point.        (line    6)
53719* ULLR fixed-suffix:                     Fixed-Point.        (line    6)
53720* ullr fixed-suffix:                     Fixed-Point.        (line    6)
53721* ULR fixed-suffix:                      Fixed-Point.        (line    6)
53722* ulr fixed-suffix:                      Fixed-Point.        (line    6)
53723* undefined behavior:                    Bug Criteria.       (line   17)
53724* undefined function value:              Bug Criteria.       (line   17)
53725* underscores in variables in macros:    Typeof.             (line   46)
53726* union:                                 Unnamed Fields.     (line    6)
53727* union, casting to a:                   Cast to Union.      (line    6)
53728* unions:                                Incompatibilities.  (line  146)
53729* unknown pragmas, warning:              Warning Options.    (line  729)
53730* unresolved references and -nodefaultlibs: Link Options.    (line   91)
53731* unresolved references and -nostdlib:   Link Options.       (line   91)
53732* unused function attribute:             Function Attributes.
53733                                                             (line 1853)
53734* unused label attribute:                Label Attributes.   (line   29)
53735* unused type attribute:                 Type Attributes.    (line  195)
53736* unused variable attribute:             Variable Attributes.
53737                                                             (line  245)
53738* UR fixed-suffix:                       Fixed-Point.        (line    6)
53739* ur fixed-suffix:                       Fixed-Point.        (line    6)
53740* use_debug_exception_return function attribute, MIPS: Function Attributes.
53741                                                             (line  756)
53742* use_shadow_register_set function attribute, MIPS: Function Attributes.
53743                                                             (line  747)
53744* used function attribute:               Function Attributes.
53745                                                             (line 1858)
53746* used variable attribute:               Variable Attributes.
53747                                                             (line  250)
53748* User stack pointer in interrupts on the Blackfin: Function Attributes.
53749                                                             (line  840)
53750* V in constraint:                       Simple Constraints. (line   43)
53751* V850 Options:                          V850 Options.       (line    6)
53752* vague linkage:                         Vague Linkage.      (line    6)
53753* value after longjmp:                   Global Reg Vars.    (line   65)
53754* variable addressability on the M32R/D: Variable Attributes.
53755                                                             (line  446)
53756* variable alignment:                    Alignment.          (line    6)
53757* variable attributes:                   Variable Attributes.
53758                                                             (line    6)
53759* variable number of arguments:          Variadic Macros.    (line    6)
53760* variable-length array in a structure:  Variable Length.    (line   26)
53761* variable-length array scope:           Variable Length.    (line   22)
53762* variable-length arrays:                Variable Length.    (line    6)
53763* variables in specified registers:      Explicit Reg Vars.  (line    6)
53764* variables, local, in macros:           Typeof.             (line   46)
53765* variadic macros:                       Variadic Macros.    (line    6)
53766* VAX options:                           VAX Options.        (line    6)
53767* vector function attribute, RX:         Function Attributes.
53768                                                             (line 1868)
53769* vector_size variable attribute:        Variable Attributes.
53770                                                             (line  259)
53771* version_id function attribute, IA-64:  Function Attributes.
53772                                                             (line 1875)
53773* vfprintf:                              Other Builtins.     (line    6)
53774* vfscanf:                               Other Builtins.     (line    6)
53775* visibility function attribute:         Function Attributes.
53776                                                             (line 1885)
53777* visibility type attribute:             Type Attributes.    (line  269)
53778* Visium options:                        Visium Options.     (line    6)
53779* VLAs:                                  Variable Length.    (line    6)
53780* vliw function attribute, MeP:          Function Attributes.
53781                                                             (line 1982)
53782* void pointers, arithmetic:             Pointer Arith.      (line    6)
53783* void, size of pointer to:              Pointer Arith.      (line    6)
53784* volatile access <1>:                   C++ Volatiles.      (line    6)
53785* volatile access:                       Volatiles.          (line    6)
53786* volatile applied to function:          Function Attributes.
53787                                                             (line    6)
53788* volatile asm:                          Extended Asm.       (line  109)
53789* volatile read <1>:                     C++ Volatiles.      (line    6)
53790* volatile read:                         Volatiles.          (line    6)
53791* volatile write <1>:                    C++ Volatiles.      (line    6)
53792* volatile write:                        Volatiles.          (line    6)
53793* vprintf:                               Other Builtins.     (line    6)
53794* vscanf:                                Other Builtins.     (line    6)
53795* vsnprintf:                             Other Builtins.     (line    6)
53796* vsprintf:                              Other Builtins.     (line    6)
53797* vsscanf:                               Other Builtins.     (line    6)
53798* vtable:                                Vague Linkage.      (line   27)
53799* VxWorks Options:                       VxWorks Options.    (line    6)
53800* W floating point suffix:               Floating Types.     (line    6)
53801* w floating point suffix:               Floating Types.     (line    6)
53802* wakeup function attribute, MSP430:     Function Attributes.
53803                                                             (line  703)
53804* warm function attribute, NDS32:        Function Attributes.
53805                                                             (line 1357)
53806* warn_unused type attribute:            C++ Attributes.     (line   77)
53807* warn_unused_result function attribute: Function Attributes.
53808                                                             (line 1988)
53809* warning for comparison of signed and unsigned values: Warning Options.
53810                                                             (line 1299)
53811* warning for overloaded virtual function: C++ Dialect Options.
53812                                                             (line  682)
53813* warning for reordering of member initializers: C++ Dialect Options.
53814                                                             (line  598)
53815* warning for unknown pragmas:           Warning Options.    (line  729)
53816* warning function attribute:            Function Attributes.
53817                                                             (line  206)
53818* warning GCC_COLORS capability:         Language Independent Options.
53819                                                             (line   72)
53820* warning messages:                      Warning Options.    (line    6)
53821* warnings from system headers:          Warning Options.    (line  949)
53822* warnings vs errors:                    Warnings and Errors.
53823                                                             (line    6)
53824* weak function attribute:               Function Attributes.
53825                                                             (line 2005)
53826* weak variable attribute:               Variable Attributes.
53827                                                             (line  304)
53828* weakref function attribute:            Function Attributes.
53829                                                             (line 2014)
53830* whitespace:                            Incompatibilities.  (line  112)
53831* Windows Options for x86:               x86 Windows Options.
53832                                                             (line    6)
53833* X in constraint:                       Simple Constraints. (line  124)
53834* X3.159-1989:                           Standards.          (line   13)
53835* x86 Options:                           x86 Options.        (line    6)
53836* x86 Windows Options:                   x86 Windows Options.
53837                                                             (line    6)
53838* Xstormy16 Options:                     Xstormy16 Options.  (line    6)
53839* Xtensa Options:                        Xtensa Options.     (line    6)
53840* y0:                                    Other Builtins.     (line    6)
53841* y0f:                                   Other Builtins.     (line    6)
53842* y0l:                                   Other Builtins.     (line    6)
53843* y1:                                    Other Builtins.     (line    6)
53844* y1f:                                   Other Builtins.     (line    6)
53845* y1l:                                   Other Builtins.     (line    6)
53846* yn:                                    Other Builtins.     (line    6)
53847* ynf:                                   Other Builtins.     (line    6)
53848* ynl:                                   Other Builtins.     (line    6)
53849* zero-length arrays:                    Zero Length.        (line    6)
53850* zero-size structures:                  Empty Structures.   (line    6)
53851* zSeries options:                       zSeries Options.    (line    6)
53852
53853
53854
53855Tag Table:
53856Node: Top2022
53857Node: G++ and GCC3849
53858Node: Standards5918
53859Node: Invoking GCC18008
53860Node: Option Summary21753
53861Node: Overall Options66091
53862Node: Invoking G++80329
53863Node: C Dialect Options81852
53864Node: C++ Dialect Options99118
53865Node: Objective-C and Objective-C++ Dialect Options131104
53866Node: Language Independent Options142340
53867Node: Warning Options147158
53868Node: Debugging Options225591
53869Node: Optimize Options297069
53870Ref: Type-punning360332
53871Node: Preprocessor Options449123
53872Ref: Wtrigraphs453905
53873Ref: dashMF458653
53874Ref: fdollars-in-identifiers469517
53875Node: Assembler Options479760
53876Node: Link Options480452
53877Ref: Link Options-Footnote-1493980
53878Node: Directory Options494314
53879Node: Spec Files500876
53880Node: Target Options522747
53881Node: Submodel Options523146
53882Node: AArch64 Options524911
53883Node: Adapteva Epiphany Options530651
53884Node: ARC Options536602
53885Node: ARM Options549041
53886Node: AVR Options566728
53887Node: Blackfin Options588022
53888Node: C6X Options596037
53889Node: CRIS Options597580
53890Node: CR16 Options601324
53891Node: Darwin Options602231
53892Node: DEC Alpha Options609672
53893Node: FR30 Options621260
53894Node: FRV Options621825
53895Node: GNU/Linux Options628544
53896Node: H8/300 Options629805
53897Node: HPPA Options631255
53898Node: IA-64 Options640444
53899Node: LM32 Options648489
53900Node: M32C Options649013
53901Node: M32R/D Options650287
53902Node: M680x0 Options653833
53903Node: MCore Options667879
53904Node: MeP Options669382
53905Node: MicroBlaze Options673342
53906Node: MIPS Options676138
53907Node: MMIX Options709659
53908Node: MN10300 Options712141
53909Node: Moxie Options714684
53910Node: MSP430 Options715172
53911Node: NDS32 Options718676
53912Node: Nios II Options720570
53913Node: Nvidia PTX Options730747
53914Node: PDP-11 Options731139
53915Node: picoChip Options732836
53916Node: PowerPC Options734977
53917Node: RL78 Options735198
53918Node: RS/6000 and PowerPC Options736046
53919Node: RX Options776374
53920Node: S/390 and zSeries Options783724
53921Node: Score Options792282
53922Node: SH Options793124
53923Node: Solaris 2 Options814018
53924Node: SPARC Options815546
53925Node: SPU Options828815
53926Node: System V Options833752
53927Node: TILE-Gx Options834578
53928Node: TILEPro Options835596
53929Node: V850 Options836100
53930Node: VAX Options842792
53931Node: Visium Options843330
53932Node: VMS Options845638
53933Node: VxWorks Options846452
53934Node: x86 Options847604
53935Node: x86 Windows Options891188
53936Node: Xstormy16 Options893988
53937Node: Xtensa Options894282
53938Node: zSeries Options898607
53939Node: Code Gen Options898803
53940Node: Environment Variables929627
53941Node: Precompiled Headers937628
53942Node: C Implementation943636
53943Node: Translation implementation945325
53944Node: Environment implementation945917
53945Node: Identifiers implementation946472
53946Node: Characters implementation947559
53947Node: Integers implementation951210
53948Node: Floating point implementation953096
53949Node: Arrays and pointers implementation956161
53950Ref: Arrays and pointers implementation-Footnote-1957620
53951Node: Hints implementation957744
53952Node: Structures unions enumerations and bit-fields implementation959231
53953Node: Qualifiers implementation961456
53954Node: Declarators implementation963236
53955Node: Statements implementation963578
53956Node: Preprocessing directives implementation963905
53957Node: Library functions implementation966227
53958Node: Architecture implementation966877
53959Node: Locale-specific behavior implementation968519
53960Node: C++ Implementation968824
53961Node: Conditionally-supported behavior970106
53962Node: Exception handling970724
53963Node: C Extensions971133
53964Node: Statement Exprs976291
53965Node: Local Labels980767
53966Node: Labels as Values983740
53967Ref: Labels as Values-Footnote-1986265
53968Node: Nested Functions986448
53969Node: Constructing Calls990406
53970Node: Typeof995124
53971Node: Conditionals999052
53972Node: __int128999942
53973Node: Long Long1000466
53974Node: Complex1001942
53975Node: Floating Types1004531
53976Node: Half-Precision1005651
53977Node: Decimal Float1007833
53978Node: Hex Floats1009688
53979Node: Fixed-Point1010724
53980Node: Named Address Spaces1014006
53981Ref: AVR Named Address Spaces1014687
53982Node: Zero Length1019893
53983Node: Empty Structures1022932
53984Node: Variable Length1023338
53985Node: Variadic Macros1026194
53986Node: Escaped Newlines1028572
53987Node: Subscripting1029433
53988Node: Pointer Arith1030159
53989Node: Pointers to Arrays1030733
53990Node: Initializers1031477
53991Node: Compound Literals1031978
53992Node: Designated Inits1035325
53993Node: Case Ranges1039063
53994Node: Cast to Union1039744
53995Node: Mixed Declarations1040835
53996Node: Function Attributes1041345
53997Node: Label Attributes1135193
53998Node: Attribute Syntax1137037
53999Node: Function Prototypes1147251
54000Node: C++ Comments1149032
54001Node: Dollar Signs1149551
54002Node: Character Escapes1150016
54003Node: Variable Attributes1150310
54004Ref: AVR Variable Attributes1164031
54005Ref: MeP Variable Attributes1169396
54006Ref: x86 Variable Attributes1171966
54007Node: Type Attributes1177005
54008Ref: MeP Type Attributes1192254
54009Ref: PowerPC Type Attributes1192528
54010Ref: SPU Type Attributes1193389
54011Ref: x86 Type Attributes1193680
54012Node: Alignment1194368
54013Node: Inline1195738
54014Node: Volatiles1200713
54015Node: Using Assembly Language with C1203613
54016Node: Basic Asm1204817
54017Node: Extended Asm1208951
54018Ref: Volatile1212748
54019Ref: AssemblerTemplate1216820
54020Ref: OutputOperands1221045
54021Ref: InputOperands1227947
54022Ref: Clobbers1232172
54023Ref: GotoLabels1235468
54024Ref: x86Operandmodifiers1237601
54025Ref: x86floatingpointasmoperands1239845
54026Node: Constraints1243175
54027Node: Simple Constraints1244281
54028Node: Multi-Alternative1251606
54029Node: Modifiers1253613
54030Node: Machine Constraints1257117
54031Node: Asm Labels1313569
54032Node: Explicit Reg Vars1315267
54033Node: Global Reg Vars1316888
54034Node: Local Reg Vars1321388
54035Node: Size of an asm1324508
54036Node: Alternate Keywords1325753
54037Node: Incomplete Enums1327252
54038Node: Function Names1328008
54039Node: Return Address1329611
54040Node: Vector Extensions1333118
54041Node: Offsetof1340403
54042Node: __sync Builtins1341244
54043Node: __atomic Builtins1346720
54044Node: Integer Overflow Builtins1358324
54045Node: x86 specific memory model extensions for transactional memory1362454
54046Node: Object Size Checking1363723
54047Node: Pointer Bounds Checker builtins1369229
54048Node: Cilk Plus Builtins1375235
54049Node: Other Builtins1376151
54050Node: Target Builtins1405795
54051Node: AArch64 Built-in Functions1407287
54052Node: Alpha Built-in Functions1407742
54053Node: Altera Nios II Built-in Functions1410790
54054Node: ARC Built-in Functions1414775
54055Node: ARC SIMD Built-in Functions1419986
54056Node: ARM iWMMXt Built-in Functions1428882
54057Node: ARM C Language Extensions (ACLE)1435878
54058Node: ARM Floating Point Status and Control Intrinsics1437155
54059Node: AVR Built-in Functions1437631
54060Node: Blackfin Built-in Functions1440730
54061Node: FR-V Built-in Functions1441349
54062Node: Argument Types1442215
54063Node: Directly-mapped Integer Functions1443969
54064Node: Directly-mapped Media Functions1445053
54065Node: Raw read/write Functions1452087
54066Node: Other Built-in Functions1453001
54067Node: MIPS DSP Built-in Functions1454187
54068Node: MIPS Paired-Single Support1466685
54069Node: MIPS Loongson Built-in Functions1468184
54070Node: Paired-Single Arithmetic1474704
54071Node: Paired-Single Built-in Functions1475652
54072Node: MIPS-3D Built-in Functions1478319
54073Node: Other MIPS Built-in Functions1483696
54074Node: MSP430 Built-in Functions1484701
54075Node: NDS32 Built-in Functions1486102
54076Node: picoChip Built-in Functions1487395
54077Node: PowerPC Built-in Functions1488739
54078Node: PowerPC AltiVec/VSX Built-in Functions1492446
54079Node: PowerPC Hardware Transactional Memory Built-in Functions1632237
54080Node: RX Built-in Functions1640728
54081Node: S/390 System z Built-in Functions1644761
54082Node: SH Built-in Functions1649998
54083Node: SPARC VIS Built-in Functions1651726
54084Node: SPU Built-in Functions1657330
54085Node: TI C6X Built-in Functions1659146
54086Node: TILE-Gx Built-in Functions1660170
54087Node: TILEPro Built-in Functions1661287
54088Node: x86 Built-in Functions1662385
54089Node: x86 transactional memory intrinsics1721920
54090Node: Target Format Checks1725140
54091Node: Solaris Format Checks1725572
54092Node: Darwin Format Checks1725998
54093Node: Pragmas1726816
54094Node: ARM Pragmas1727552
54095Node: M32C Pragmas1728155
54096Node: MeP Pragmas1729229
54097Node: RS/6000 and PowerPC Pragmas1731298
54098Node: Darwin Pragmas1732039
54099Node: Solaris Pragmas1733106
54100Node: Symbol-Renaming Pragmas1734267
54101Node: Structure-Packing Pragmas1735881
54102Node: Weak Pragmas1737530
54103Node: Diagnostic Pragmas1738264
54104Node: Visibility Pragmas1741371
54105Node: Push/Pop Macro Pragmas1742056
54106Node: Function Specific Option Pragmas1743028
54107Node: Loop-Specific Pragmas1744873
54108Node: Unnamed Fields1745963
54109Node: Thread-Local1748161
54110Node: C99 Thread-Local Edits1750266
54111Node: C++98 Thread-Local Edits1752278
54112Node: Binary constants1755722
54113Node: C++ Extensions1756393
54114Node: C++ Volatiles1758104
54115Node: Restricted Pointers1760452
54116Node: Vague Linkage1762043
54117Node: C++ Interface1765667
54118Ref: C++ Interface-Footnote-11769460
54119Node: Template Instantiation1769596
54120Node: Bound member functions1776182
54121Node: C++ Attributes1777714
54122Node: Function Multiversioning1782151
54123Node: Namespace Association1783966
54124Node: Type Traits1785346
54125Node: Java Exceptions1791834
54126Node: Deprecated Features1793224
54127Node: Backwards Compatibility1796189
54128Node: Objective-C1797541
54129Node: GNU Objective-C runtime API1798150
54130Node: Modern GNU Objective-C runtime API1799157
54131Node: Traditional GNU Objective-C runtime API1801594
54132Node: Executing code before main1802322
54133Node: What you can and what you cannot do in +load1805064
54134Node: Type encoding1807436
54135Node: Legacy type encoding1812512
54136Node: @encode1813603
54137Node: Method signatures1814148
54138Node: Garbage Collection1816143
54139Node: Constant string objects1818832
54140Node: compatibility_alias1821340
54141Node: Exceptions1822066
54142Node: Synchronization1824777
54143Node: Fast enumeration1825961
54144Node: Using fast enumeration1826273
54145Node: c99-like fast enumeration syntax1827484
54146Node: Fast enumeration details1828187
54147Node: Fast enumeration protocol1830528
54148Node: Messaging with the GNU Objective-C runtime1833680
54149Node: Dynamically registering methods1835051
54150Node: Forwarding hook1836742
54151Node: Compatibility1839782
54152Node: Gcov1846349
54153Node: Gcov Intro1846884
54154Node: Invoking Gcov1849602
54155Node: Gcov and Optimization1863848
54156Node: Gcov Data Files1866848
54157Node: Cross-profiling1868243
54158Node: Gcov-tool1870094
54159Node: Gcov-tool Intro1870517
54160Node: Invoking Gcov-tool1872478
54161Node: Trouble1875026
54162Node: Actual Bugs1876443
54163Node: Interoperation1876890
54164Node: Incompatibilities1883782
54165Node: Fixed Headers1891933
54166Node: Standard Libraries1893596
54167Node: Disappointments1894968
54168Node: C++ Misunderstandings1899326
54169Node: Static Definitions1900137
54170Node: Name lookup1901190
54171Ref: Name lookup-Footnote-11905968
54172Node: Temporaries1906155
54173Node: Copy Assignment1908131
54174Node: Non-bugs1909938
54175Node: Warnings and Errors1920445
54176Node: Bugs1922207
54177Node: Bug Criteria1922674
54178Node: Bug Reporting1924884
54179Node: Service1925105
54180Node: Contributing1925924
54181Node: Funding1926664
54182Node: GNU Project1929153
54183Node: Copying1929799
54184Node: GNU Free Documentation License1967327
54185Node: Contributors1992464
54186Node: Option Index2031232
54187Node: Keyword Index2251989
54188
54189End Tag Table
54190